1
0
mirror of https://github.com/peterantypas/maiana.git synced 2025-06-08 10:40:19 -07:00
2022-12-04 20:17:59 -08:00

106 lines
2.5 KiB
C

#include "configuration.h"
#include "nvs_flash.h"
#include "esp_mac.h"
static char __ssid[48] = {0};
static char __password[60] = {0};
static char __ap_mac[32] = {0};
static char __st_mac[32] = {0};
// NVS Keys
#define WIFI_MODE_KEY "wifi_mode"
#define WIFI_SSID_KEY "wifi_ssid"
#define WIFI_PASSWORD_KEY "wifi_pwd"
#define NMEA_MODE_KEY "nmea_mode"
#define NMEA_IP_ADDR_KEY "nmea_ip"
#define NMEA_PORT_KEY "nmea_port"
#define NMEA_INCL_GNSS_KEY "nmea_gnss"
static nvs_handle_t __nvs = 0;
void config_init()
{
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
{
nvs_flash_erase();
nvs_flash_init();
}
nvs_open("maiana", NVS_READWRITE, &__nvs);
}
const char *config_ap_mac_address()
{
if ( __ap_mac[0] == 0 )
{
uint8_t mac[6];
esp_read_mac(mac, ESP_MAC_WIFI_SOFTAP);
sprintf(__ap_mac, "%.2X%.2X%.2X%.2X%.2X%.2X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
}
return __ap_mac;
}
const char *config_st_mac_address()
{
if ( __st_mac[0] == 0 )
{
uint8_t mac[6];
esp_read_mac(mac, ESP_MAC_WIFI_STA);
sprintf(__st_mac, "%.2X%.2X%.2X%.2X%.2X%.2X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
}
return __st_mac;
}
////////////////////////////////////////////////////////////////////////////////////
// WiFi
////////////////////////////////////////////////////////////////////////////////////
const char *config_get_ssid()
{
size_t len = sizeof __ssid;
switch(config_get_wifi_operation_mode())
{
case WIFI_OPEN_AP:
case WIFI_SECURE_AP:
if ( nvs_get_str(__nvs, WIFI_SSID_KEY, __ssid, &len) == ESP_ERR_NVS_NOT_FOUND || __ssid[0] == 0 )
{
const char *mac = config_ap_mac_address();
sprintf(__ssid, "MAIANA_%s", mac+6);
}
break;
case WIFI_STATION:
if ( nvs_get_str(__nvs, WIFI_SSID_KEY, __ssid, &len) == ESP_ERR_NVS_NOT_FOUND || __ssid[0] == 0 )
{
const char *mac = config_st_mac_address();
sprintf(__ssid, "MAIANA_%s", mac+6);
}
break;
default:
return NULL;
}
return __ssid;
}
const char *config_get_password()
{
if ( nvs_get_str(__nvs, WIFI_PASSWORD_KEY, __password, sizeof __password) == ESP_ERR_NVS_NOT_FOUND )
return NULL;
return __password;
}
wifi_operation_mode_t config_get_wifi_operation_mode()
{
int mode = -1;
if ( nvs_get_i32(__nvs, WIFI_MODE_KEY, &mode) == ESP_ERR_NVS_NOT_FOUND )
return WIFI_OPEN_AP;
else return (wifi_operation_mode_t)mode;
}