mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-26 04:06:34 +00:00
Fix possible reboot loop regression
This commit is contained in:
parent
bb567b523c
commit
11c5947c23
@ -20,6 +20,26 @@
|
|||||||
IPAddress syslog_host_addr; // Syslog host IP address
|
IPAddress syslog_host_addr; // Syslog host IP address
|
||||||
uint32_t syslog_host_hash = 0; // Syslog host name hash
|
uint32_t syslog_host_hash = 0; // Syslog host name hash
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
extern struct rst_info resetInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t ResetReason(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
user_interface.h
|
||||||
|
REASON_DEFAULT_RST = 0, // normal startup by power on
|
||||||
|
REASON_WDT_RST = 1, // hardware watch dog reset
|
||||||
|
REASON_EXCEPTION_RST = 2, // exception reset, GPIO status won’t change
|
||||||
|
REASON_SOFT_WDT_RST = 3, // software watch dog reset, GPIO status won’t change
|
||||||
|
REASON_SOFT_RESTART = 4, // software restart ,system_restart , GPIO status won’t change
|
||||||
|
REASON_DEEP_SLEEP_AWAKE = 5, // wake up from deep-sleep
|
||||||
|
REASON_EXT_SYS_RST = 6 // external system reset
|
||||||
|
*/
|
||||||
|
|
||||||
|
return resetInfo.reason;
|
||||||
|
}
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* Watchdog extension (https://github.com/esp8266/Arduino/issues/1532)
|
* Watchdog extension (https://github.com/esp8266/Arduino/issues/1532)
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
@ -615,7 +615,6 @@ void WifiShutdown(void)
|
|||||||
void EspRestart(void)
|
void EspRestart(void)
|
||||||
{
|
{
|
||||||
WifiShutdown();
|
WifiShutdown();
|
||||||
RtcRebootReset();
|
|
||||||
// ESP.restart(); // This results in exception 3 on restarts on core 2.3.0
|
// ESP.restart(); // This results in exception 3 on restarts on core 2.3.0
|
||||||
ESP.reset();
|
ESP.reset();
|
||||||
}
|
}
|
||||||
|
@ -1500,10 +1500,6 @@ void GpioInit(void)
|
|||||||
XdrvCall(FUNC_PRE_INIT);
|
XdrvCall(FUNC_PRE_INIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
extern struct rst_info resetInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setup(void)
|
void setup(void)
|
||||||
{
|
{
|
||||||
global_state.data = 3; // Init global state (wifi_down, mqtt_down) to solve possible network issues
|
global_state.data = 3; // Init global state (wifi_down, mqtt_down) to solve possible network issues
|
||||||
@ -1582,7 +1578,7 @@ void setup(void)
|
|||||||
Settings.module = SONOFF_BASIC; // Reset module to Sonoff Basic
|
Settings.module = SONOFF_BASIC; // Reset module to Sonoff Basic
|
||||||
// Settings.last_module = SONOFF_BASIC;
|
// Settings.last_module = SONOFF_BASIC;
|
||||||
}
|
}
|
||||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_LOG_SOME_SETTINGS_RESET " (%d)"), RtcReboot.fast_reboot_count);
|
AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_LOG_SOME_SETTINGS_RESET " (%d)"), RtcReboot.fast_reboot_count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1605,7 +1601,7 @@ void setup(void)
|
|||||||
if (POWER_ALL_ALWAYS_ON == Settings.poweronstate) {
|
if (POWER_ALL_ALWAYS_ON == Settings.poweronstate) {
|
||||||
SetDevicePower(1, SRC_RESTART);
|
SetDevicePower(1, SRC_RESTART);
|
||||||
} else {
|
} else {
|
||||||
if ((resetInfo.reason == REASON_DEFAULT_RST) || (resetInfo.reason == REASON_EXT_SYS_RST)) {
|
if ((ResetReason() == REASON_DEFAULT_RST) || (ResetReason() == REASON_EXT_SYS_RST)) {
|
||||||
switch (Settings.poweronstate) {
|
switch (Settings.poweronstate) {
|
||||||
case POWER_ALL_OFF:
|
case POWER_ALL_OFF:
|
||||||
case POWER_ALL_OFF_PULSETIME_ON:
|
case POWER_ALL_OFF_PULSETIME_ON:
|
||||||
|
@ -59,15 +59,15 @@ bool DeepSleepEnabled(void)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeepSleepInit(void)
|
void DeepSleepReInit(void)
|
||||||
{
|
{
|
||||||
if (DeepSleepEnabled()) {
|
if ((ResetReason() == REASON_DEEP_SLEEP_AWAKE) && DeepSleepEnabled()) {
|
||||||
RtcRebootReset();
|
|
||||||
if ((RtcSettings.ultradeepsleep > MAX_DEEPSLEEP_CYCLE) && (RtcSettings.ultradeepsleep < 1700000000)) {
|
if ((RtcSettings.ultradeepsleep > MAX_DEEPSLEEP_CYCLE) && (RtcSettings.ultradeepsleep < 1700000000)) {
|
||||||
// Go back to sleep after 60 minutes if requested deepsleep has not been reached
|
// Go back to sleep after 60 minutes if requested deepsleep has not been reached
|
||||||
RtcSettings.ultradeepsleep = RtcSettings.ultradeepsleep - MAX_DEEPSLEEP_CYCLE;
|
RtcSettings.ultradeepsleep = RtcSettings.ultradeepsleep - MAX_DEEPSLEEP_CYCLE;
|
||||||
AddLog_P2(LOG_LEVEL_ERROR, PSTR("DSL: Remain DeepSleep %d"), RtcSettings.ultradeepsleep);
|
AddLog_P2(LOG_LEVEL_ERROR, PSTR("DSL: Remain DeepSleep %d"), RtcSettings.ultradeepsleep);
|
||||||
RtcSettingsSave();
|
RtcSettingsSave();
|
||||||
|
RtcRebootReset();
|
||||||
ESP.deepSleep(100 * RtcSettings.deepsleep_slip * (MAX_DEEPSLEEP_CYCLE < RtcSettings.ultradeepsleep ? MAX_DEEPSLEEP_CYCLE : RtcSettings.ultradeepsleep), WAKE_RF_DEFAULT);
|
ESP.deepSleep(100 * RtcSettings.deepsleep_slip * (MAX_DEEPSLEEP_CYCLE < RtcSettings.ultradeepsleep ? MAX_DEEPSLEEP_CYCLE : RtcSettings.ultradeepsleep), WAKE_RF_DEFAULT);
|
||||||
yield();
|
yield();
|
||||||
// Sleeping
|
// Sleeping
|
||||||
@ -198,7 +198,7 @@ bool Xdrv29(uint8_t function)
|
|||||||
result = DecodeCommand(kDeepsleepCommands, DeepsleepCommand);
|
result = DecodeCommand(kDeepsleepCommands, DeepsleepCommand);
|
||||||
break;
|
break;
|
||||||
case FUNC_PRE_INIT:
|
case FUNC_PRE_INIT:
|
||||||
DeepSleepInit();
|
DeepSleepReInit();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user