diff --git a/README.md b/README.md index 89cafb89..51062b41 100644 --- a/README.md +++ b/README.md @@ -436,7 +436,7 @@ Send for example `8386` as Downlink on Port 2 to get battery status and time/dat 0x09 reset functions (send this command UNconfirmed only to avoid boot loops!) 0 = restart device (coldstart) - 1 = zeroize MAC counter + 1 = (reserved, currently does nothing) 2 = reset device to factory settings and restart device 3 = flush send queues 4 = restart device (warmstart) diff --git a/include/cyclic.h b/include/cyclic.h index 26ce3fd5..3623a7b5 100644 --- a/include/cyclic.h +++ b/include/cyclic.h @@ -18,7 +18,6 @@ extern Ticker cyclicTimer; void setCyclicIRQ(void); void doHousekeeping(void); -void reset_counters(void); uint32_t getFreeRAM(); #endif diff --git a/include/display.h b/include/display.h index 8fb8120f..8b16f412 100644 --- a/include/display.h +++ b/include/display.h @@ -1,6 +1,7 @@ #ifndef _DISPLAY_H #define _DISPLAY_H +#include #include "cyclic.h" #include "qrcode.h" diff --git a/include/globals.h b/include/globals.h index e5e4f35c..90605bf1 100644 --- a/include/globals.h +++ b/include/globals.h @@ -50,7 +50,7 @@ #define _seconds() millis() / 1000.0 -enum timesource_t { _gps, _rtc, _lora, _unsynced }; +enum timesource_t { _gps, _rtc, _lora, _set, _unsynced }; enum snifftype_t { MAC_SNIFF_WIFI, MAC_SNIFF_BLE, MAC_SNIFF_BLE_ENS }; enum runmode_t { RUNMODE_POWERCYCLE, diff --git a/include/main.h b/include/main.h index 8fcc6b7e..6d2352b2 100644 --- a/include/main.h +++ b/include/main.h @@ -4,6 +4,7 @@ #include // needed for reading ESP32 chip attributes #include // needed for Wifi event handler #include // needed for timers +#include // needed for coex version display #include "globals.h" #include "reset.h" diff --git a/src/cyclic.cpp b/src/cyclic.cpp index dd115007..d197e234 100644 --- a/src/cyclic.cpp +++ b/src/cyclic.cpp @@ -89,24 +89,18 @@ void doHousekeeping() { // check free heap memory if (ESP.getMinFreeHeap() <= MEM_LOW) { - ESP_LOGI(TAG, + ESP_LOGW(TAG, "Memory full, counter cleared (heap low water mark = %d Bytes / " "free heap = %d bytes)", ESP.getMinFreeHeap(), ESP.getFreeHeap()); - reset_counters(); // clear macs container and reset all counters - - if (ESP.getMinFreeHeap() <= MEM_LOW) // check again - do_reset(true); // memory leak, reset device + do_reset(true); // memory leak, reset device } // check free PSRAM memory #ifdef BOARD_HAS_PSRAM if (ESP.getMinFreePsram() <= MEM_LOW) { - ESP_LOGI(TAG, "PSRAM full, counter cleared"); - reset_counters(); // clear macs container and reset all counters - - if (ESP.getMinFreePsram() <= MEM_LOW) // check again - do_reset(true); // memory leak, reset device + ESP_LOGW(TAG, "PSRAM full, counter cleared"); + do_reset(true); // memory leak, reset device } #endif @@ -128,14 +122,4 @@ uint32_t getFreeRAM() { #else return ESP.getFreePsram(); #endif -} - -void reset_counters() { - -#if ((WIFICOUNTER) || (BLECOUNTER)) -#ifdef HAS_DISPLAY - dp_plotCurve(0, true); -#endif - -#endif -} +} \ No newline at end of file diff --git a/src/display.cpp b/src/display.cpp index fa2ecab8..7c5b6d9a 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -159,7 +159,7 @@ void dp_init(bool verbose) { #if !(BOOTMENU) delay(8000); #endif - + #endif // HAS_LORA } // verbose @@ -175,12 +175,15 @@ void dp_init(bool verbose) { void dp_refresh(bool nextPage) { + // update counter values from libpax + libpax_counter_count(&count_from_libpax); + #ifndef HAS_BUTTON static uint32_t framecounter = 0; #endif // update histogram - dp_plotCurve(macs.size(), false); + dp_plotCurve(count_from_libpax.pax, false); // if display is switched off we don't refresh it to relax cpu if (!DisplayIsOn && (DisplayIsOn == cfg.screenon)) @@ -238,7 +241,7 @@ void dp_drawPage(time_t t, bool nextpage) { // display number of unique macs total Wifi + BLE if (DisplayPage < 5) { dp_setFont(MY_FONT_STRETCHED); - dp_printf("%-5d", macs.size()); + dp_printf("%-5d", count_from_libpax.pax); } switch (DisplayPage) { @@ -262,7 +265,7 @@ void dp_drawPage(time_t t, bool nextpage) { #if ((WIFICOUNTER) && (BLECOUNTER)) if (cfg.wifiscan) - dp_printf("WIFI:%-5d", libpax_macs_wifi); + dp_printf("WIFI:%-5d", count_from_libpax.wifi_count); else dp_printf("WIFI:off"); if (cfg.blescan) @@ -271,17 +274,17 @@ void dp_drawPage(time_t t, bool nextpage) { dp_printf(" CWA:%-5d", cwa_report()); else #endif - dp_printf("BLTH:%-5d", libpax_macs_ble); + dp_printf("BLTH:%-5d", count_from_libpax.ble_count); else dp_printf(" BLTH:off"); #elif ((WIFICOUNTER) && (!BLECOUNTER)) if (cfg.wifiscan) - dp_printf("WIFI:%-5d", libpax_macs_wifi); + dp_printf("WIFI:%-5d", count_from_libpax.wifi_count); else dp_printf("WIFI:off"); #elif ((!WIFICOUNTER) && (BLECOUNTER)) if (cfg.blescan) - dp_printf("BLTH:%-5d", libpax_macs_ble); + dp_printf("BLTH:%-5d", count_from_libpax.ble_count); #if (COUNT_ENS) if (cfg.enscount) dp_printf("(CWA:%d)", cwa_report()); @@ -719,6 +722,7 @@ void dp_plotCurve(uint16_t count, bool reset) { static uint16_t last_count = 0, col = 0, row = 0; uint16_t v_scroll = 0; + // nothing new to plot? -> then exit early if ((last_count == count) && !reset) return; diff --git a/src/gpsread.cpp b/src/gpsread.cpp index d253bcb2..7801a4ce 100644 --- a/src/gpsread.cpp +++ b/src/gpsread.cpp @@ -120,7 +120,7 @@ time_t get_gpstime(uint16_t *msec) { t = makeTime(tm); ESP_LOGD(TAG, "GPS time/date = %02d:%02d:%02d / %02d.%02d.%2d", tm.Hour, - tm.Minute, tm.Second, tm.Day, tm.Month, tm.Year + 1970); + tm.Minute, tm.Second, tm.Day, tm.Month, tm.Year + 1970); // add protocol delay with millisecond precision t += delay_ms / 1000 - 1; // whole seconds @@ -163,7 +163,8 @@ void gps_loop(void *pvParameters) { // (only) while device time is not set or unsynched, and we have a valid // GPS time, we trigger a device time update to poll time from GPS - if (timeSource == _unsynced && gpstime.isUpdated()) { + if ((timeSource == _unsynced || timeSource == _set) && + gpstime.isUpdated()) { now(); calibrateTime(); } diff --git a/src/ledmatrixdisplay.cpp b/src/ledmatrixdisplay.cpp index 3e273731..c727a766 100644 --- a/src/ledmatrixdisplay.cpp +++ b/src/ledmatrixdisplay.cpp @@ -76,9 +76,12 @@ void refreshTheMatrixDisplay(bool nextPage) { if (cfg.countermode == 1) + // update counter values from libpax + libpax_counter_count(&count_from_libpax); + { // cumulative counter mode -> display total number of pax - if (ulLastNumMacs != macs.size()) { - ulLastNumMacs = macs.size(); + if (ulLastNumMacs != count_from_libpax.pax) { + ulLastNumMacs = count_from_libpax.pax; matrix.clear(); DrawNumber(String(ulLastNumMacs)); } @@ -86,10 +89,10 @@ void refreshTheMatrixDisplay(bool nextPage) { else { // cyclic counter mode -> plot a line diagram - if (ulLastNumMacs != macs.size()) { + if (ulLastNumMacs != count_from_libpax.pax) { // next count cycle? - if (macs.size() == 0) { + if (count_from_libpax.pax == 0) { // matrix full? then scroll left 1 dot, else increment column if (col < (LED_MATRIX_WIDTH - 1)) @@ -101,7 +104,7 @@ void refreshTheMatrixDisplay(bool nextPage) { matrix.drawPoint(col, row, 0); // clear current dot // scale and set new dot - ulLastNumMacs = macs.size(); + ulLastNumMacs = count_from_libpax.pax; level = ulLastNumMacs / LINE_DIAGRAM_DIVIDER; row = level <= LED_MATRIX_HEIGHT ? LED_MATRIX_HEIGHT - 1 - level % LED_MATRIX_HEIGHT diff --git a/src/rcommand.cpp b/src/rcommand.cpp index 12c83ce9..32df1207 100644 --- a/src/rcommand.cpp +++ b/src/rcommand.cpp @@ -16,9 +16,8 @@ void set_reset(uint8_t val[]) { ESP_LOGI(TAG, "Remote command: restart device cold"); do_reset(false); break; - case 1: // reset MAC counter - ESP_LOGI(TAG, "Remote command: reset MAC counter"); - reset_counters(); // clear macs + case 1: // reserved + // reset MAC counter deprecated by libpax integration break; case 2: // reset device to factory settings ESP_LOGI(TAG, @@ -132,7 +131,6 @@ void set_countmode(uint8_t val[]) { "Remote command: set counter mode called with invalid parameter(s)"); return; } - reset_counters(); // clear macs } void set_screensaver(uint8_t val[]) { @@ -378,7 +376,7 @@ void set_time(uint8_t val[]) { // swap byte order from msb to lsb, note: this is a platform dependent hack uint32_t t = __builtin_bswap32(*(uint32_t *)(val)); ESP_LOGI(TAG, "Remote command: set time to %d", t); - setMyTime(t, 0, _unsynced); + setMyTime(t, 0, _set); }; void set_flush(uint8_t val[]) { diff --git a/src/senddata.cpp b/src/senddata.cpp index 12fe735c..d7665526 100644 --- a/src/senddata.cpp +++ b/src/senddata.cpp @@ -88,7 +88,8 @@ void sendData() { ESP_LOGI(TAG, "Sending libpax wifi count: %d", libpax_macs_wifi); payload.addCount(libpax_macs_wifi, MAC_SNIFF_WIFI); if (cfg.blescan) { - ESP_LOGI(TAG, "Sending libpax ble count: %d", libpax_macs_ble); + ESP_LOGI(TAG, "Sending libpax ble count: %d", + libpax_macs_ble); payload.addCount(libpax_macs_ble, MAC_SNIFF_BLE); } #endif @@ -114,14 +115,8 @@ void sendData() { payload.addSDS(sds_status); #endif SendPayload(COUNTERPORT); - // clear counter if not in cumulative counter mode - if (cfg.countermode != 1) { - reset_counters(); // clear macs container and reset all counters - ESP_LOGI(TAG, "Counter cleared"); - } #ifdef HAS_DISPLAY - else - dp_plotCurve(macs.size(), true); + dp_plotCurve(libpax_macs_ble + libpax_macs_wifi, true); #endif break; #endif diff --git a/src/timekeeper.cpp b/src/timekeeper.cpp index f49adc7c..d1da7744 100644 --- a/src/timekeeper.cpp +++ b/src/timekeeper.cpp @@ -12,7 +12,7 @@ static const char TAG[] = __FILE__; // symbol to display current time source -const char timeSetSymbols[] = {'G', 'R', 'L', '?'}; +const char timeSetSymbols[] = {'G', 'R', 'L', 'S', '?'}; #ifdef HAS_IF482 #if (HAS_SDS011)