diff --git a/include/globals.h b/include/globals.h index c43ee613..33f27694 100644 --- a/include/globals.h +++ b/include/globals.h @@ -63,17 +63,14 @@ enum sendprio_t { prio_low, prio_normal, prio_high }; enum timesource_t { _gps, _rtc, _lora, _unsynced }; - +enum snifftype_t { MAC_SNIFF_WIFI, MAC_SNIFF_BLE, MAC_SNIFF_BLE_ENS }; enum runmode_t { - RUNMODE_POWERCYCLE = 0, + RUNMODE_POWERCYCLE, RUNMODE_NORMAL, RUNMODE_WAKEUP, RUNMODE_UPDATE }; -// sniffing types -enum snifftype_t { MAC_SNIFF_WIFI, MAC_SNIFF_BLE, MAC_SNIFF_BLE_ENS }; - // Struct holding devices's runtime configuration // using packed to avoid compiler padding, because struct will be memcpy'd to // byte array @@ -150,10 +147,10 @@ extern std::array beacons; extern configData_t cfg; // current device configuration extern char lmic_event_msg[LMIC_EVENTMSG_LEN]; // display buffer -extern uint8_t volatile channel; // wifi channel rotation counter -extern uint8_t batt_level; // display value -extern uint16_t volatile macs_wifi, macs_ble; // display values -extern bool volatile TimePulseTick; // 1sec pps flag set by GPS or RTC +extern uint8_t volatile rf_load; // RF traffic indicator +extern uint8_t batt_level; // display value +extern uint16_t volatile macs_wifi, macs_ble; // display values +extern bool volatile TimePulseTick; // 1sec pps flag set by GPS or RTC extern timesource_t timeSource; extern hw_timer_t *displayIRQ, *matrixDisplayIRQ, *ppsIRQ; extern SemaphoreHandle_t I2Caccess; diff --git a/src/display.cpp b/src/display.cpp index 537f7169..ae3c0c13 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -292,7 +292,7 @@ void dp_drawPage(time_t t, bool nextpage) { #endif dp_println(); - // line 4: Battery + GPS status + Wifi channel + // line 4: Battery + GPS status + RF traffic // B:a.bcV Sats:ab ch:ab #if (defined BAT_MEASURE_ADC || defined HAS_PMU || defined HAS_IP5306) if (batt_level == 0) @@ -310,7 +310,7 @@ void dp_drawPage(time_t t, bool nextpage) { #else dp_printf(" "); #endif - dp_printf(" ch:%02d", channel); + dp_printf(" due:%02d", rf_load); dp_println(); // line 5: RSSI limiter + free memory diff --git a/src/macsniff.cpp b/src/macsniff.cpp index ddebbecb..798de95f 100644 --- a/src/macsniff.cpp +++ b/src/macsniff.cpp @@ -79,8 +79,12 @@ void mac_process(void *pvParameters) { if (xQueueReceive(MacQueue, &MacBuffer, portMAX_DELAY) != pdTRUE) { ESP_LOGE(TAG, "Premature return from xQueueReceive() with no data!"); continue; - } else - mac_analyze(MacBuffer); + } + + // update traffic indicator + rf_load = uxQueueMessagesWaiting(MacQueue); + // process fetched mac + mac_analyze(MacBuffer); } delay(2); // yield to CPU } diff --git a/src/main.cpp b/src/main.cpp index 3accd4bc..b4cc1c77 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -87,8 +87,8 @@ triggers pps 1 sec impulse configData_t cfg; // struct holds current device configuration char lmic_event_msg[LMIC_EVENTMSG_LEN]; // display buffer for LMIC event message -uint8_t volatile channel = 0; // channel rotation counter uint8_t batt_level = 0; // display value +uint8_t volatile rf_load = 0; // RF traffic indicator uint16_t volatile macs_wifi = 0, macs_ble = 0; // globals for display hw_timer_t *ppsIRQ = NULL, *displayIRQ = NULL, *matrixDisplayIRQ = NULL; diff --git a/src/wifiscan.cpp b/src/wifiscan.cpp index d62e6ae3..7fc4701c 100644 --- a/src/wifiscan.cpp +++ b/src/wifiscan.cpp @@ -41,6 +41,7 @@ IRAM_ATTR void wifi_sniffer_packet_handler(void *buff, // Software-timer driven Wifi channel rotation callback function void switchWifiChannel(TimerHandle_t xTimer) { + static uint8_t channel = 0; // channel rotation counter _ASSERT(xTimer != NULL); channel = (channel % WIFI_CHANNEL_MAX) + 1; // rotate channel 1..WIFI_CHANNEL_MAX