/** * Declaration of AutoConnectCredential class. * @file AutoConnectCredential.h * @author hieromon@gmail.com * @version 0.9.6 * @date 2018-09-27 * @copyright MIT license. */ #ifndef _AUTOCONNECTCREDENTIAL_H_ #define _AUTOCONNECTCREDENTIAL_H_ #include #if defined(ARDUINO_ARCH_ESP8266) extern "C" { #include } #elif defined(ARDUINO_ARCH_ESP32) #include struct station_config { uint8_t ssid[32]; uint8_t password[64]; uint8_t bssid_set; uint8_t bssid[6]; wifi_fast_scan_threshold_t threshold; }; #endif /** Credential storage area offset specifier in EEPROM. * By defining AC_IDENTIFIER_OFFSET macro in the user sketch, the credential * storage area can be shifted in EEPROM. */ #ifndef AC_IDENTIFIER_OFFSET #define AC_IDENTIFIER_OFFSET 0 #endif /** AutoConnectCredential class. */ class AutoConnectCredential { public: AutoConnectCredential(); explicit AutoConnectCredential(uint16_t offset); ~AutoConnectCredential(); uint8_t entries(void) { return _entries; } bool del(const char* ssid); int8_t load(const char* ssid, struct station_config* config); bool load(int8_t entry, struct station_config* config); bool save(const struct station_config* config); private: void _allocateEntry(void); /**< Initialize storage for credentials. */ void _retrieveEntry(char* ssid, char* password, uint8_t* bssid); /**< Read an available entry. */ uint8_t _entries; /**< Count of the available entry */ uint16_t _containSize; /**< Container size */ int _dp; /**< The current address in EEPROM */ int _ep; /**< The current entry address in EEPROM */ uint16_t _offset; /**< The offset for the saved area of credentials in EEPROM. */ }; #endif // _AUTOCONNECTCREDENTIAL_H_