diff --git a/src/driver/drv_bl_shared.c b/src/driver/drv_bl_shared.c index 36fb5c9a2..0c1489f8b 100644 --- a/src/driver/drv_bl_shared.c +++ b/src/driver/drv_bl_shared.c @@ -108,15 +108,15 @@ void BL09XX_AppendInformationToHTTPIndexPage(http_request_t *request) if(NTP_IsTimeSynced() == true) { - hprintf128(request, "Today: %1.1f Wh DailyStats: [", dailyStats[0]); + hprintf255(request, "Today: %1.1f Wh DailyStats: [", dailyStats[0]); for(i = 1; i < 8; i++) { if (i==1) - hprintf128(request, "%1.1f", dailyStats[i]); + hprintf255(request, "%1.1f", dailyStats[i]); else - hprintf128(request, ",%1.1f", dailyStats[i]); + hprintf255(request, ",%1.1f", dailyStats[i]); } - hprintf128(request, "]"); + hprintf255(request, "]"); } else { if(DRV_IsRunning("NTP")==false) hprintf255(request,"NTP driver is not started, daily stats disbled."); diff --git a/src/driver/drv_ntp.c b/src/driver/drv_ntp.c index dc5fb925a..1560e3024 100644 --- a/src/driver/drv_ntp.c +++ b/src/driver/drv_ntp.c @@ -268,17 +268,15 @@ void NTP_OnEverySecond() { void NTP_AppendInformationToHTTPIndexPage(http_request_t* request) { - char tmp[128]; struct tm *ltm; ltm = localtime(&g_time); if (g_synced == true) - sprintf(tmp, "
NTP: Local Time: %04d/%02d/%02d %02d:%02d:%02d
", + hprintf255(request, "
NTP: Local Time: %04d/%02d/%02d %02d:%02d:%02d
", ltm->tm_year+1900, ltm->tm_mon+1, ltm->tm_mday, ltm->tm_hour, ltm->tm_min, ltm->tm_sec); else - sprintf(tmp, "
NTP: Syncing...."); - hprintf128(request,tmp); + hprintf255(request, "
NTP: Syncing...."); } bool NTP_IsTimeSynced() diff --git a/src/httpserver/http_fns.c b/src/httpserver/http_fns.c index 79b9d01a2..9c1a60add 100644 --- a/src/httpserver/http_fns.c +++ b/src/httpserver/http_fns.c @@ -545,9 +545,9 @@ int http_fn_index(http_request_t* request) { PingWatchDog_GetTotalLost(), PingWatchDog_GetTotalReceived()); if (Main_HasWiFiConnected()) { - hprintf128(request, "
Wifi RSSI: %i
", HAL_GetWifiStrength()); + hprintf255(request, "
Wifi RSSI: %i
", HAL_GetWifiStrength()); } - hprintf128(request, "
MQTT State: %s RES: %d(%s)
", (Main_HasMQTTConnected() == 1) ? "connected" : "disconnected", + hprintf255(request, "
MQTT State: %s RES: %d(%s)
", (Main_HasMQTTConnected() == 1) ? "connected" : "disconnected", MQTT_GetConnectResult(), get_error_name(MQTT_GetConnectResult())); hprintf255(request, "MQTT ErrMsg: %s
", (MQTT_GetStatusMessage() != NULL) ? MQTT_GetStatusMessage() : ""); hprintf255(request, "MQTT Stats:CONN: %d PUB: %d RECV: %d ERR: %d
", MQTT_GetConnectEvents(), diff --git a/src/new_common.h b/src/new_common.h index b90f9fe54..07e3ee143 100644 --- a/src/new_common.h +++ b/src/new_common.h @@ -290,6 +290,7 @@ void Main_OnPingCheckerReply(int ms); // new_ping.c void Main_SetupPingWatchDog(const char *target/*, int delayBetweenPings_Seconds*/); +void Main_PingWatchDogSilent(); int PingWatchDog_GetTotalLost(); int PingWatchDog_GetTotalReceived(); diff --git a/src/new_ping.c b/src/new_ping.c index c472f4dcc..2a245efbd 100644 --- a/src/new_ping.c +++ b/src/new_ping.c @@ -57,6 +57,9 @@ static struct raw_pcb *ping_pcb; static unsigned int ping_lost = 0; static unsigned int ping_received = 0; static int bReceivedLastOneSend = -1; +static bool ping_handler_active = false; +static bool ping_handler_silent = false; + //static int g_delayBetweenPings_MS = 1000 / portTICK_PERIOD_MS; static void ping_prepare_echo( struct icmp_echo_hdr *iecho, u16_t len) @@ -117,11 +120,13 @@ static void ping_timeout(void *arg) { struct raw_pcb *pcb = (struct raw_pcb*)arg; - LWIP_ASSERT("ping_timeout: no pcb given!", pcb != NULL); + if (ping_handler_silent == false) + { + LWIP_ASSERT("ping_timeout: no pcb given!", pcb != NULL); - ping_send(pcb, &ping_target); - - // void sys_timeout (u32_t msecs, sys_timeout_handler handler, void *arg) + ping_send(pcb, &ping_target); + } + // void sys_timeout (u32_t msecs, sys_timeout_handler handler, void *arg) sys_timeout(PING_DELAY, ping_timeout, pcb); } @@ -171,17 +176,28 @@ void Main_SetupPingWatchDog(const char *target/*, int delayBetweenPings_Seconds* { // none sent yet. bReceivedLastOneSend = -1; - //g_delayBetweenPings_MS = delayBetweenPings_Seconds * 1000; - ///ipaddr_aton("192.168.0.1",&ping_target) - //ipaddr_aton("8.8.8.8",&ping_target); - ipaddr_aton(target,&ping_target); + if (ping_handler_active == false) + { + //g_delayBetweenPings_MS = delayBetweenPings_Seconds * 1000; + ///ipaddr_aton("192.168.0.1",&ping_target) + //ipaddr_aton("8.8.8.8",&ping_target); + ipaddr_aton(target,&ping_target); - ping_pcb = raw_new(IP_PROTO_ICMP); - LWIP_ASSERT("ping_pcb != NULL", ping_pcb != NULL); + ping_pcb = raw_new(IP_PROTO_ICMP); + LWIP_ASSERT("ping_pcb != NULL", ping_pcb != NULL); + + raw_recv(ping_pcb, ping_recv, NULL); + raw_bind(ping_pcb, IP_ADDR_ANY); + // void sys_timeout (u32_t msecs, sys_timeout_handler handler, void *arg) + sys_timeout(PING_DELAY, ping_timeout, ping_pcb); + } + ping_handler_active = true; + ping_handler_silent = false; - raw_recv(ping_pcb, ping_recv, NULL); - raw_bind(ping_pcb, IP_ADDR_ANY); - // void sys_timeout (u32_t msecs, sys_timeout_handler handler, void *arg) - sys_timeout(PING_DELAY, ping_timeout, ping_pcb); +} + +void Main_PingWatchDogSilent() +{ + ping_handler_silent = true; } diff --git a/src/user_main.c b/src/user_main.c index 889f24d12..05493eb83 100644 --- a/src/user_main.c +++ b/src/user_main.c @@ -140,9 +140,15 @@ void Main_OnWiFiStatusChange(int code) case WIFI_STA_DISCONNECTED: // try to connect again in few seconds if (g_bHasWiFiConnected != 0) + { HAL_DisconnectFromWifi(); + Main_PingWatchDogSilent(); + } g_connectToWiFi = 15; g_bHasWiFiConnected = 0; + g_timeSinceLastPingReply = -1; + g_bPingWatchDogStarted = 0; + g_startPingWatchDogAfter = 0; ADDLOGF_INFO("Main_OnWiFiStatusChange - WIFI_STA_DISCONNECTED\r\n"); break; case WIFI_STA_AUTH_FAILED: @@ -227,10 +233,17 @@ void Main_OnEverySecond() g_timeSinceLastPingReply++; if(g_timeSinceLastPingReply >= CFG_GetPingDisconnectedSecondsToRestart()) { - ADDLOGF_INFO("[Ping watchdog] No ping replies within %i seconds. Will try to reconnect.\n",g_timeSinceLastPingReply); - HAL_DisconnectFromWifi(); - g_bHasWiFiConnected = 0; - g_connectToWiFi = 10; + if (g_bHasWiFiConnected != 0) + { + ADDLOGF_INFO("[Ping watchdog] No ping replies within %i seconds. Will try to reconnect.\n",g_timeSinceLastPingReply); + HAL_DisconnectFromWifi(); + g_bHasWiFiConnected = 0; + g_connectToWiFi = 10; + g_timeSinceLastPingReply = -1; + g_bPingWatchDogStarted = 0; + g_startPingWatchDogAfter = 0; + Main_PingWatchDogSilent(); + } } }