Merge pull request #9995 from emontnemery/fix_backlog_wrap_around

Fix wraparound bug in backlog
This commit is contained in:
Theo Arends 2020-11-27 15:31:29 +01:00 committed by GitHub
commit c57e79d51f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 9 deletions

View File

@ -244,8 +244,8 @@ void CommandHandler(char* topicBuf, char* dataBuf, uint32_t data_len)
DEBUG_CORE_LOG(PSTR("CMD: Payload %d"), payload); DEBUG_CORE_LOG(PSTR("CMD: Payload %d"), payload);
// TasmotaGlobal.backlog_delay = millis() + (100 * MIN_BACKLOG_DELAY); // TasmotaGlobal.backlog_timer = millis() + (100 * MIN_BACKLOG_DELAY);
TasmotaGlobal.backlog_delay = millis() + Settings.param[P_BACKLOG_DELAY]; TasmotaGlobal.backlog_timer = millis() + Settings.param[P_BACKLOG_DELAY];
char command[CMDSZ] = { 0 }; char command[CMDSZ] = { 0 };
XdrvMailbox.command = command; XdrvMailbox.command = command;
@ -344,7 +344,7 @@ void CmndBacklog(void)
} }
// ResponseCmndChar(D_JSON_APPENDED); // ResponseCmndChar(D_JSON_APPENDED);
ResponseClear(); ResponseClear();
TasmotaGlobal.backlog_delay = 0; TasmotaGlobal.backlog_timer = millis();
} else { } else {
bool blflag = BACKLOG_EMPTY; bool blflag = BACKLOG_EMPTY;
#ifdef SUPPORT_IF_STATEMENT #ifdef SUPPORT_IF_STATEMENT
@ -359,10 +359,10 @@ void CmndBacklog(void)
void CmndDelay(void) void CmndDelay(void)
{ {
if ((XdrvMailbox.payload >= (MIN_BACKLOG_DELAY / 100)) && (XdrvMailbox.payload <= 3600)) { if ((XdrvMailbox.payload >= (MIN_BACKLOG_DELAY / 100)) && (XdrvMailbox.payload <= 3600)) {
TasmotaGlobal.backlog_delay = millis() + (100 * XdrvMailbox.payload); TasmotaGlobal.backlog_timer = millis() + (100 * XdrvMailbox.payload);
} }
uint32_t bl_delay = 0; uint32_t bl_delay = 0;
long bl_delta = TimePassedSince(TasmotaGlobal.backlog_delay); long bl_delta = TimePassedSince(TasmotaGlobal.backlog_timer);
if (bl_delta < 0) { bl_delay = (bl_delta *-1) / 100; } if (bl_delta < 0) { bl_delay = (bl_delta *-1) / 100; }
ResponseCmndNumber(bl_delay); ResponseCmndNumber(bl_delay);
} }

View File

@ -687,7 +687,7 @@ void stationKeepAliveNow(void) {
} }
void wifiKeepAlive(void) { void wifiKeepAlive(void) {
static uint32_t wifi_timer = 0; // Wifi keepalive timer static uint32_t wifi_timer = millis(); // Wifi keepalive timer
uint32_t wifiTimerSec = Settings.param[P_ARP_GRATUITOUS]; // 8-bits number of seconds, or minutes if > 100 uint32_t wifiTimerSec = Settings.param[P_ARP_GRATUITOUS]; // 8-bits number of seconds, or minutes if > 100

View File

@ -84,7 +84,7 @@ struct {
uint32_t baudrate; // Current Serial baudrate uint32_t baudrate; // Current Serial baudrate
uint32_t pulse_timer[MAX_PULSETIMERS]; // Power off timer uint32_t pulse_timer[MAX_PULSETIMERS]; // Power off timer
uint32_t blink_timer; // Power cycle timer uint32_t blink_timer; // Power cycle timer
uint32_t backlog_delay; // Command backlog delay uint32_t backlog_timer; // Timer for next command in backlog
uint32_t loop_load_avg; // Indicative loop load average uint32_t loop_load_avg; // Indicative loop load average
uint32_t web_log_index; // Index in Web log buffer uint32_t web_log_index; // Index in Web log buffer
uint32_t uptime; // Counting every second until 4294967295 = 130 year uint32_t uptime; // Counting every second until 4294967295 = 130 year
@ -319,7 +319,7 @@ void setup(void) {
} }
void BacklogLoop(void) { void BacklogLoop(void) {
if (TimeReached(TasmotaGlobal.backlog_delay)) { if (TimeReached(TasmotaGlobal.backlog_timer)) {
if (!BACKLOG_EMPTY && !TasmotaGlobal.backlog_mutex) { if (!BACKLOG_EMPTY && !TasmotaGlobal.backlog_mutex) {
TasmotaGlobal.backlog_mutex = true; TasmotaGlobal.backlog_mutex = true;
bool nodelay = false; bool nodelay = false;
@ -341,7 +341,7 @@ void BacklogLoop(void) {
ExecuteCommand((char*)cmd.c_str(), SRC_BACKLOG); ExecuteCommand((char*)cmd.c_str(), SRC_BACKLOG);
} }
if (nodelay) { if (nodelay) {
TasmotaGlobal.backlog_delay = 0; // Reset backlog_delay which has been set by ExecuteCommand (CommandHandler) TasmotaGlobal.backlog_timer = millis(); // Reset backlog_timer which has been set by ExecuteCommand (CommandHandler)
} }
TasmotaGlobal.backlog_mutex = false; TasmotaGlobal.backlog_mutex = false;
} }