Implement ESP32 Reset 3

This commit is contained in:
Theo Arends 2020-11-12 17:38:15 +01:00
parent 0815311e3a
commit 979735bb95
2 changed files with 50 additions and 13 deletions

View File

@ -40,7 +40,7 @@ const char kTasmotaCommands[] PROGMEM = "|" // No prefix
#endif // USE_DEVICE_GROUPS #endif // USE_DEVICE_GROUPS
D_CMND_SENSOR "|" D_CMND_DRIVER D_CMND_SENSOR "|" D_CMND_DRIVER
#ifdef ESP32 #ifdef ESP32
"|" D_CMND_TOUCH_CAL "|" D_CMND_TOUCH_THRES "|" D_CMND_TOUCH_NUM "|" D_CMND_CPU_FREQUENCY "|Info|" D_CMND_TOUCH_CAL "|" D_CMND_TOUCH_THRES "|" D_CMND_TOUCH_NUM "|" D_CMND_CPU_FREQUENCY
#endif //ESP32 #endif //ESP32
; ;
@ -67,7 +67,7 @@ void (* const TasmotaCommand[])(void) PROGMEM = {
#endif // USE_DEVICE_GROUPS #endif // USE_DEVICE_GROUPS
&CmndSensor, &CmndDriver &CmndSensor, &CmndDriver
#ifdef ESP32 #ifdef ESP32
,&CmndTouchCal, &CmndTouchThres, &CmndTouchNum, &CmndCpuFrequency , &CmndInfo, &CmndTouchCal, &CmndTouchThres, &CmndTouchNum, &CmndCpuFrequency
#endif //ESP32 #endif //ESP32
}; };
@ -2061,6 +2061,11 @@ void CmndDriver(void)
#ifdef ESP32 #ifdef ESP32
void CmndInfo(void) {
NvsInfo();
ResponseCmndDone();
}
void CmndCpuFrequency(void) { void CmndCpuFrequency(void) {
if ((80 == XdrvMailbox.payload) || (160 == XdrvMailbox.payload) || (240 == XdrvMailbox.payload)) { if ((80 == XdrvMailbox.payload) || (160 == XdrvMailbox.payload) || (240 == XdrvMailbox.payload)) {
setCpuFrequencyMhz(XdrvMailbox.payload); setCpuFrequencyMhz(XdrvMailbox.payload);

View File

@ -108,25 +108,50 @@ void NvmSave(const char *sNvsName, const char *sName, const void *pSettings, uns
interrupts(); interrupts();
} }
void NvmErase(const char *sNvsName) { esp_err_t NvmErase(const char *sNvsName) {
nvs_handle handle; nvs_handle handle;
noInterrupts(); noInterrupts();
nvs_open(sNvsName, NVS_READWRITE, &handle); esp_err_t result = nvs_open(sNvsName, NVS_READWRITE, &handle);
nvs_erase_all(handle); if (ESP_OK == result) { result = nvs_erase_all(handle); }
nvs_commit(handle); if (ESP_OK == result) { result = nvs_commit(handle); }
nvs_close(handle); nvs_close(handle);
interrupts(); interrupts();
return result;
} }
void SettingsErase(uint8_t type) { void SettingsErase(uint8_t type) {
if (1 == type) { // SDK parameter area // All SDK and Tasmota data is held in default NVS partition
} else if (2 == type) { // Tasmota parameter area (0x0F3xxx - 0x0FBFFF) //
} else if (3 == type) { // Tasmota and SDK parameter area (0x0F3xxx - 0x0FFFFF)
esp_err_t r1, r2, r3;
switch (type) {
case 0: // Reset 2, 5, 6 = Erase all flash from program end to end of physical flash
// nvs_flash_erase(); // Erase RTC, PHY, sta.mac, ap.sndchan, ap.mac, Tasmota etc.
r1 = NvmErase("qpc");
r2 = NvmErase("main");
// NvmErase("cal_data");
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_ERASE " Tasmota data (%d,%d)"), r1, r2);
break;
case 1: case 4: // Reset 3 or WIFI_FORCE_RF_CAL_ERASE = SDK parameter area
// r1 = esp_phy_erase_cal_data_in_nvs();
r1 = NvmErase("cal_data");
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_ERASE " PHY data (%d)"), r1);
break;
case 2: // Not used = QPC and Tasmota parameter area (0x0F3xxx - 0x0FBFFF)
r1 = NvmErase("qpc");
r2 = NvmErase("main");
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_ERASE " Tasmota data (%d,%d)"), r1, r2);
break;
case 3: // QPC Reached = QPC, Tasmota and SDK parameter area (0x0F3xxx - 0x0FFFFF)
// nvs_flash_erase(); // Erase RTC, PHY, sta.mac, ap.sndchan, ap.mac, Tasmota etc.
r1 = NvmErase("qpc");
r2 = NvmErase("main");
// r3 = esp_phy_erase_cal_data_in_nvs();
// r3 = NvmErase("cal_data");
// AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_ERASE " Tasmota (%d,%d) and PHY data (%d)"), r1, r2, r3);
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_ERASE " Tasmota data (%d,%d)"), r1, r2);
break;
} }
NvmErase("main");
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_ERASE " t=%d"), type);
} }
void SettingsRead(void *data, size_t size) { void SettingsRead(void *data, size_t size) {
@ -157,6 +182,13 @@ void ZigbeeWrite(const void *pSettings, unsigned nSettingsLen) {
NvmSave("zb", "zigbee", pSettings, nSettingsLen); NvmSave("zb", "zigbee", pSettings, nSettingsLen);
} }
void NvsInfo(void) {
nvs_stats_t nvs_stats;
nvs_get_stats(NULL, &nvs_stats);
AddLog_P(LOG_LEVEL_INFO, PSTR("INF: NVS Used %d, Free %d, Total %d, Namspaces %d"),
nvs_stats.used_entries, nvs_stats.free_entries, nvs_stats.total_entries, nvs_stats.namespace_count);
}
// //
// Crash stuff // Crash stuff
// //