* add SerialReader * fix SerialReader * add config upload script * add serial command to print ip address * update serial script to save configuration and reset after upload * fix updater * fix updater * serial config fixes * serial config fixes * fix wifi static example configuration * add readme for sendcfg.py
170 lines
5.7 KiB
C
170 lines
5.7 KiB
C
#pragma once
|
|
|
|
enum class RestartReason
|
|
{
|
|
RequestedViaMqtt,
|
|
RequestedViaWebServer,
|
|
RequestedViaSerial,
|
|
BLEError,
|
|
BLEBeaconWatchdog,
|
|
RestartOnDisconnectWatchdog,
|
|
RestartIntervalWatchdog,
|
|
NetworkTimeoutWatchdog,
|
|
WifiInitFailed,
|
|
ReconfigureWifi,
|
|
ReconfigureETH,
|
|
NetworkDeviceCriticalFailure,
|
|
NetworkDeviceCriticalFailureNoWifiFallback,
|
|
ConfigurationUpdated,
|
|
GpioConfigurationUpdated,
|
|
RestartTimer,
|
|
OTACompleted,
|
|
OTATimeout,
|
|
OTAAborted,
|
|
OTAUnknownState,
|
|
OTAReboot,
|
|
ImportCompleted,
|
|
DeviceUnpaired,
|
|
NukiHubReset,
|
|
ReconfigureWebServer,
|
|
DisableNetworkIfNotConnected,
|
|
NotApplicable
|
|
};
|
|
|
|
#define RESTART_REASON_VALID_DETECT 0xa00ab00bc00bd00d;
|
|
|
|
extern int restartReason;
|
|
extern uint64_t restartReasonValidDetect;
|
|
extern bool rebuildGpioRequested;
|
|
extern RestartReason currentRestartReason;
|
|
extern bool restartReason_isValid;
|
|
|
|
inline static void restartEsp(RestartReason reason)
|
|
{
|
|
if(reason == RestartReason::GpioConfigurationUpdated)
|
|
{
|
|
rebuildGpioRequested = true;
|
|
}
|
|
restartReason = (int)reason;
|
|
restartReasonValidDetect = RESTART_REASON_VALID_DETECT;
|
|
ESP.restart();
|
|
}
|
|
|
|
inline static void initializeRestartReason()
|
|
{
|
|
uint64_t cmp = RESTART_REASON_VALID_DETECT;
|
|
restartReason_isValid = (restartReasonValidDetect == cmp);
|
|
if(restartReason_isValid)
|
|
{
|
|
currentRestartReason = (RestartReason)restartReason;
|
|
memset(&restartReasonValidDetect, 0, sizeof(restartReasonValidDetect));
|
|
}
|
|
else
|
|
{
|
|
rebuildGpioRequested = false;
|
|
}
|
|
}
|
|
|
|
inline static String getRestartReason()
|
|
{
|
|
switch(currentRestartReason)
|
|
{
|
|
case RestartReason::RequestedViaMqtt:
|
|
return "RequestedViaMqtt";
|
|
case RestartReason::RequestedViaWebServer:
|
|
return "RequestedViaWebServer";
|
|
case RestartReason::RequestedViaSerial:
|
|
return "RequestedViaSerial";
|
|
case RestartReason::ReconfigureWebServer:
|
|
return "ReconfigureWebServer";
|
|
case RestartReason::BLEError:
|
|
return "BLEError";
|
|
case RestartReason::BLEBeaconWatchdog:
|
|
return "BLEBeaconWatchdog";
|
|
case RestartReason::RestartOnDisconnectWatchdog:
|
|
return "RestartOnDisconnectWatchdog";
|
|
case RestartReason::RestartIntervalWatchdog:
|
|
return "RestartIntervalWatchdog";
|
|
case RestartReason::NetworkTimeoutWatchdog:
|
|
return "NetworkTimeoutWatchdog";
|
|
case RestartReason::WifiInitFailed:
|
|
return "WifiInitFailed";
|
|
case RestartReason::ReconfigureWifi:
|
|
return "ReconfigureWifi";
|
|
case RestartReason::ReconfigureETH:
|
|
return "ReconfigureETH";
|
|
case RestartReason::NetworkDeviceCriticalFailure:
|
|
return "NetworkDeviceCriticalFailure";
|
|
case RestartReason::NetworkDeviceCriticalFailureNoWifiFallback:
|
|
return "NetworkDeviceCriticalFailureNoWifiFallback";
|
|
case RestartReason::ConfigurationUpdated:
|
|
return "ConfigurationUpdated";
|
|
case RestartReason::GpioConfigurationUpdated:
|
|
return "GpioConfigurationUpdated";
|
|
case RestartReason::RestartTimer:
|
|
return "RestartTimer";
|
|
case RestartReason::OTACompleted:
|
|
return "OTACompleted";
|
|
case RestartReason::OTATimeout:
|
|
return "OTATimeout";
|
|
case RestartReason::OTAAborted:
|
|
return "OTAAborted";
|
|
case RestartReason::OTAUnknownState:
|
|
return "OTAUnknownState";
|
|
case RestartReason::OTAReboot:
|
|
return "RebootToOTA";
|
|
case RestartReason::ImportCompleted:
|
|
return "ConfigImportCompleted";
|
|
case RestartReason::DeviceUnpaired:
|
|
return "DeviceUnpaired";
|
|
case RestartReason::NukiHubReset:
|
|
return "NukiHubFactoryReset";
|
|
case RestartReason::DisableNetworkIfNotConnected:
|
|
return "NetworkDisabledOnNotConnected";
|
|
case RestartReason::NotApplicable:
|
|
return "NotApplicable";
|
|
default:
|
|
return "Unknown: " + restartReason;
|
|
}
|
|
}
|
|
|
|
inline static String getEspRestartReason()
|
|
{
|
|
esp_reset_reason_t reason = esp_reset_reason();
|
|
switch(reason)
|
|
{
|
|
case esp_reset_reason_t::ESP_RST_UNKNOWN:
|
|
return "ESP_RST_UNKNOWN: Reset reason can not be determined.";
|
|
case esp_reset_reason_t::ESP_RST_POWERON:
|
|
return "ESP_RST_POWERON: Reset due to power-on event.";
|
|
case esp_reset_reason_t::ESP_RST_EXT:
|
|
return "ESP_RST_EXT: Reset by external pin";
|
|
case esp_reset_reason_t::ESP_RST_SW:
|
|
return "ESP_RST_SW: Software reset via esp_restart.";
|
|
case esp_reset_reason_t::ESP_RST_PANIC:
|
|
return "ESP_RST_PANIC: Software reset due to exception/panic.";
|
|
case esp_reset_reason_t::ESP_RST_INT_WDT:
|
|
return "ESP_RST_INT_WDT: Reset (software or hardware) due to interrupt watchdog";
|
|
case esp_reset_reason_t::ESP_RST_TASK_WDT:
|
|
return "ESP_RST_TASK_WDT: Reset due to task watchdog.";
|
|
case esp_reset_reason_t::ESP_RST_WDT:
|
|
return "ESP_RST_WDT: Reset due to other watchdogs.";
|
|
case esp_reset_reason_t::ESP_RST_DEEPSLEEP:
|
|
return "ESP_RST_DEEPSLEEP: Reset after exiting deep sleep mode.";
|
|
case esp_reset_reason_t::ESP_RST_BROWNOUT:
|
|
return "ESP_RST_BROWNOUT: Brownout reset (software or hardware)";
|
|
case esp_reset_reason_t::ESP_RST_SDIO:
|
|
return "ESP_RST_SDIO: Reset over SDIO.";
|
|
default:
|
|
return "Unknown: " + (int)reason;
|
|
}
|
|
}
|
|
|
|
#ifndef NUKI_HUB_UPDATER
|
|
inline bool rebuildGpio()
|
|
{
|
|
bool rebGpio = rebuildGpioRequested;
|
|
rebuildGpioRequested = false;
|
|
return restartReason_isValid && rebGpio;
|
|
}
|
|
#endif |