From 0e3f7af0cea64f26f25d67d77d73271edfbcfb29 Mon Sep 17 00:00:00 2001 From: Verkehrsrot Date: Mon, 15 Jul 2019 00:14:33 +0200 Subject: [PATCH] Packet traffic indicator --- include/globals.h | 4 ++-- src/display.cpp | 20 ++++++++++++++++---- src/main.cpp | 4 ++-- src/wifiscan.cpp | 15 +++++++++------ 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/include/globals.h b/include/globals.h index a3edad17..7d479c40 100644 --- a/include/globals.h +++ b/include/globals.h @@ -108,9 +108,9 @@ extern std::array beacons; extern configData_t cfg; // current device configuration extern char display_line6[], display_line7[]; // screen buffers -extern uint8_t volatile channel; // wifi channel rotation counter extern uint16_t volatile macs_total, macs_wifi, macs_ble, - batt_voltage; // display values + batt_voltage; // display values +extern uint32_t volatile PacketCounter; // sniffed packet counter extern bool volatile TimePulseTick; // 1sec pps flag set by GPS or RTC extern timesource_t timeSource; extern hw_timer_t *displayIRQ, *matrixDisplayIRQ, *ppsIRQ, *gpsIRQ; diff --git a/src/display.cpp b/src/display.cpp index 2c1c3048..0ea33ed8 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -11,12 +11,13 @@ Display-Mask (128 x 64 pixel): 1|PAX:aabbccddee 2|B:a.bcV Sats:ab 3|BLTH:abcde SF:ab -4|WIFI:abcde ch:ab +4|WIFI:abcde **** 5|RLIM:abcd abcdKB 6|xxxxxxxxxxxxxxxx 6|20:27:00* 27.Feb 7|yyyyyyyyyyyyyyab +line 4: **** = Packet traffic indicator line 6: x = Text for LORA status OR time/date line 7: y = Text for LMIC status; ab = payload queue @@ -224,11 +225,22 @@ void draw_page(time_t t, uint8_t page) { u8x8.setInverseFont(0); #endif // HAS_LORA - // line 4: update wifi counter + channel display + // line 4: update wifi counter + packet density display u8x8.setCursor(0, 4); u8x8.printf("WIFI:%-5d", macs_wifi); - u8x8.setCursor(11, 4); - u8x8.printf("ch:%02d", channel); + // display and reset packetcounter + u8x8.setCursor(12, 4); + if (PacketCounter > (100000 / DISPLAYREFRESH_MS)) + u8x8.printf("****"); + else if (PacketCounter > (10000 / DISPLAYREFRESH_MS)) + u8x8.printf(" ***"); + else if (PacketCounter > (1000 / DISPLAYREFRESH_MS)) + u8x8.printf(" **"); + else if (PacketCounter > 0) + u8x8.printf(" *"); + else + u8x8.printf(" "); + PacketCounter = 0; // line 5: update RSSI limiter status & free memory display u8x8.setCursor(0, 5); diff --git a/src/main.cpp b/src/main.cpp index ae883673..89b6d774 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -81,9 +81,9 @@ triggers pps 1 sec impulse configData_t cfg; // struct holds current device configuration char display_line6[16], display_line7[16]; // display buffers -uint8_t volatile channel = 0; // channel rotation counter uint16_t volatile macs_total = 0, macs_wifi = 0, macs_ble = 0, - batt_voltage = 0; // globals for display + batt_voltage = 0; // globals for display +uint32_t volatile PacketCounter = 0; // sniffed packet counter hw_timer_t *ppsIRQ = NULL, *displayIRQ = NULL, *matrixDisplayIRQ = NULL, *gpsIRQ = NULL; diff --git a/src/wifiscan.cpp b/src/wifiscan.cpp index 750f9c5a..fedbad44 100644 --- a/src/wifiscan.cpp +++ b/src/wifiscan.cpp @@ -37,6 +37,8 @@ IRAM_ATTR void wifi_sniffer_packet_handler(void *buff, (wifi_ieee80211_packet_t *)ppkt->payload; const wifi_ieee80211_mac_hdr_t *hdr = &ipkt->hdr; + PacketCounter++; // increase packets per second counter + if ((cfg.rssilimit) && (ppkt->rx_ctrl.rssi < cfg.rssilimit)) // rssi is negative value ESP_LOGD(TAG, "WiFi RSSI %d -> ignoring (limit: %d)", ppkt->rx_ctrl.rssi, @@ -45,8 +47,9 @@ IRAM_ATTR void wifi_sniffer_packet_handler(void *buff, mac_add((uint8_t *)hdr->addr2, ppkt->rx_ctrl.rssi, MAC_SNIFF_WIFI); } -// Software-timer driven Wifi channel rotation callback function +// Software-timer driven Wifi channel rotation function void switchWifiChannel(TimerHandle_t xTimer) { + static uint8_t channel = 0; // channel rotation counter channel = (channel % WIFI_CHANNEL_MAX) + 1; // rotate channel 1..WIFI_CHANNEL_MAX esp_wifi_set_channel(channel, WIFI_SECOND_CHAN_NONE); @@ -57,13 +60,13 @@ void wifi_sniffer_init(void) { wificfg.nvs_enable = 0; // we don't need any wifi settings from NVRAM wificfg.wifi_task_core_id = 0; // we want wifi task running on core 0 - // wifi_promiscuous_filter_t filter = { - // .filter_mask = WIFI_PROMIS_FILTER_MASK_MGMT}; // only MGMT frames + wifi_promiscuous_filter_t filter = { + .filter_mask = WIFI_PROMIS_FILTER_MASK_MGMT}; // only MGMT frames // .filter_mask = WIFI_PROMIS_FILTER_MASK_ALL}; // we use all frames - wifi_promiscuous_filter_t filter = {.filter_mask = - WIFI_PROMIS_FILTER_MASK_MGMT | - WIFI_PROMIS_FILTER_MASK_DATA}; + // wifi_promiscuous_filter_t filter = {.filter_mask = + // WIFI_PROMIS_FILTER_MASK_MGMT | + // WIFI_PROMIS_FILTER_MASK_DATA}; ESP_ERROR_CHECK(esp_wifi_init(&wificfg)); // configure Wifi with cfg ESP_ERROR_CHECK(