From 71aa55863baeeabe9754262a5e630685d9c4d6a3 Mon Sep 17 00:00:00 2001 From: cyberman54 Date: Tue, 13 Apr 2021 16:37:17 +0200 Subject: [PATCH] libpax integration fixes (sendtimer, rcommands) --- README.md | 6 +++--- include/main.h | 1 + include/senddata.h | 3 ++- src/main.cpp | 6 +++++- src/rcommand.cpp | 21 ++++++++++++++++++++- src/senddata.cpp | 20 +++++++++++++++++--- 6 files changed, 48 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 479e9280..d6fd9d67 100644 --- a/README.md +++ b/README.md @@ -445,14 +445,14 @@ Send for example `83` `86` as Downlink on Port 2 to get battery status and time/ 0x0A set payload send cycle - 0 ... 255 payload send cycle in seconds/2 + 5 ... 255 payload send cycle in seconds/2 e.g. 120 -> payload is transmitted each 240 seconds [default] 0x0B set Wifi channel hopping interval timer 0 ... 255 duration for scanning a wifi channel in seconds/100 e.g. 50 -> each channel is scanned for 500 milliseconds [default] - 0 means no hopping, scanning on channel WIFI_CHANNEL_MIN only + 0 means no hopping, scanning on fixed single channel WIFI_CHANNEL_1 0x0C set Bluetooth channel switch interval timer @@ -524,7 +524,7 @@ Send for example `83` `86` as Downlink on Port 2 to get battery status and time/ 0x19 set sleep cycle - bytes 1..2 = device sleep cycle in seconds/10 (MSB) + bytes 1..2 = device sleep cycle in seconds/10 (MSB), 1 ... 255 e.g. {0x04, 0xB0} -> device sleeps 20 minutes after each send cycle [default = 0] 0x20 load device configuration diff --git a/include/main.h b/include/main.h index 8a46c6e4..7530312f 100644 --- a/include/main.h +++ b/include/main.h @@ -5,6 +5,7 @@ #include // needed for Wifi event handler #include // needed for timers #include // needed for coex version display +#include // needed for wifi init / deinit #include "globals.h" #include "reset.h" diff --git a/include/senddata.h b/include/senddata.h index 41cad9a3..5d707a76 100644 --- a/include/senddata.h +++ b/include/senddata.h @@ -22,6 +22,7 @@ void sendData(void); void checkSendQueues(void); void flushQueues(void); bool allQueuesEmtpy(void); -void setSendIRQ(void); +void setSendIRQ(TimerHandle_t xTimer = NULL); +void initSendDataTimer(uint8_t sendcycle); #endif // _SENDDATA_H_ diff --git a/src/main.cpp b/src/main.cpp index 00d768ce..f1a977a8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -281,8 +281,9 @@ void setup() { if (RTC_runmode == RUNMODE_MAINTENANCE) start_boot_menu(); +#if ((WIFICOUNTER) || (BLECOUNTER)) + // use libpax timer to trigger cyclic senddata ESP_LOGI(TAG, "Starting libpax..."); -#if (defined WIFICOUNTER || defined BLECOUNTER) struct libpax_config_t configuration; libpax_default_config(&configuration); @@ -304,6 +305,9 @@ void setup() { } else { init_libpax(); } +#else + // use stand alone timer to trigger cyclic senddata + initSendDataTimer(cfg.sendcycle * 2); #endif #if (BLECOUNTER) diff --git a/src/rcommand.cpp b/src/rcommand.cpp index 346be53c..287d5c77 100644 --- a/src/rcommand.cpp +++ b/src/rcommand.cpp @@ -55,27 +55,38 @@ void set_reset(uint8_t val[]) { void set_rssi(uint8_t val[]) { cfg.rssilimit = val[0] * -1; +#if ((WIFICOUNTER) || (BLECOUNTER)) libpax_counter_stop(); libpax_config_t current_config; libpax_get_current_config(¤t_config); current_config.wifi_rssi_threshold = cfg.rssilimit; libpax_update_config(¤t_config); init_libpax(); +#endif ESP_LOGI(TAG, "Remote command: set RSSI limit to %d", cfg.rssilimit); } void set_sendcycle(uint8_t val[]) { - cfg.sendcycle = val[0]; + if (val[0] < 5) + return; // update send cycle interrupt [seconds / 2] + cfg.sendcycle = val[0]; ESP_LOGI(TAG, "Remote command: set send cycle to %d seconds", cfg.sendcycle * 2); +#if ((WIFICOUNTER) || (BLECOUNTER)) libpax_counter_stop(); init_libpax(); +#else + // modify senddata timer + initSendDataTimer(cfg.sendcycle * 2); +#endif } void set_sleepcycle(uint8_t val[]) { // swap byte order from msb to lsb, note: this is a platform dependent hack uint16_t t = __builtin_bswap16(*(uint16_t *)(val)); + if (t == 0) + return; cfg.sleepcycle = t; ESP_LOGI(TAG, "Remote command: set sleep cycle to %d seconds", cfg.sleepcycle * 10); @@ -83,6 +94,7 @@ void set_sleepcycle(uint8_t val[]) { void set_wifichancycle(uint8_t val[]) { cfg.wifichancycle = val[0]; +#if (WIFICOUNTER) libpax_counter_stop(); libpax_config_t current_config; libpax_get_current_config(¤t_config); @@ -100,16 +112,19 @@ void set_wifichancycle(uint8_t val[]) { current_config.wifi_channel_switch_interval = cfg.wifichancycle; libpax_update_config(¤t_config); init_libpax(); +#endif } void set_blescantime(uint8_t val[]) { cfg.blescantime = val[0]; +#if (BLECOUNTER) libpax_counter_stop(); libpax_config_t current_config; libpax_get_current_config(¤t_config); current_config.blescantime = cfg.blescantime; libpax_update_config(¤t_config); init_libpax(); +#endif } void set_countmode(uint8_t val[]) { @@ -257,24 +272,28 @@ void set_loraadr(uint8_t val[]) { void set_blescan(uint8_t val[]) { ESP_LOGI(TAG, "Remote command: set BLE scanner to %s", val[0] ? "on" : "off"); cfg.blescan = val[0] ? 1 : 0; +#if (BLECOUNTER) libpax_counter_stop(); libpax_config_t current_config; libpax_get_current_config(¤t_config); current_config.blecounter = cfg.blescan; libpax_update_config(¤t_config); init_libpax(); +#endif } void set_wifiscan(uint8_t val[]) { ESP_LOGI(TAG, "Remote command: set WIFI scanner to %s", val[0] ? "on" : "off"); cfg.wifiscan = val[0] ? 1 : 0; +#if (WIFICOUNTER) libpax_counter_stop(); libpax_config_t current_config; libpax_get_current_config(¤t_config); current_config.wificounter = cfg.wifiscan; libpax_update_config(¤t_config); init_libpax(); +#endif } void set_wifiant(uint8_t val[]) { diff --git a/src/senddata.cpp b/src/senddata.cpp index a21ab7ae..5a310761 100644 --- a/src/senddata.cpp +++ b/src/senddata.cpp @@ -1,7 +1,22 @@ // Basic Config #include "senddata.h" -void setSendIRQ() { xTaskNotify(irqHandlerTask, SENDCYCLE_IRQ, eSetBits); } +void setSendIRQ(TimerHandle_t xTimer) { + xTaskNotify(irqHandlerTask, SENDCYCLE_IRQ, eSetBits); +} + +void initSendDataTimer(uint8_t sendcycle) { + static TimerHandle_t SendDataTimer = NULL; + + if (SendDataTimer == NULL) { + SendDataTimer = + xTimerCreate("SendDataTimer", pdMS_TO_TICKS(sendcycle * 1000), pdTRUE, + (void *)0, setSendIRQ); + xTimerStart(SendDataTimer, 0); + } else { + xTimerChangePeriod(SendDataTimer, pdMS_TO_TICKS(sendcycle * 1000), 0); + } +} // put data to send in RTos Queues used for transmit over channels Lora and SPI void SendPayload(uint8_t port) { @@ -86,8 +101,7 @@ 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