/************************************************************** * This is a DEMO. You can use it only for development and testing. * * If you would like to add these features to your product, * please contact Blynk for Business: * * http://www.blynk.io/ * **************************************************************/ struct ConfigStore { uint32_t magic; char version[9]; uint8_t flagConfig:1; uint8_t flagApFail:1; uint8_t flagSelfTest:1; char wifiSSID[34]; char wifiPass[64]; char cloudToken[34]; char cloudHost[34]; uint16_t cloudPort; uint16_t checksum; } __attribute__((packed)); ConfigStore configStore; const ConfigStore configDefault = { 0x626C6E6B, BOARD_FIRMWARE_VERSION, 0, 0, 0, "", "", "invalid token", "blynk-cloud.com", 80, 0 }; #include FlashStorage(flash, ConfigStore); void config_load() { memset(&configStore, 0, sizeof(configStore)); configStore = flash.read(); if (configStore.magic != configDefault.magic) { DEBUG_PRINT("Using default config."); configStore = configDefault; return; } } bool config_save() { flash.write(configStore); return true; } bool config_init() { config_load(); return true; } void enterResetConfig() { DEBUG_PRINT("Resetting configuration!"); configStore = configDefault; config_save(); BlynkState::set(MODE_WAIT_CONFIG); } template void CopyString(const String& s, T(&arr)[size]) { s.toCharArray(arr, size); }