bluetooth tasking reworked

This commit is contained in:
Klaus K Wilting 2018-05-20 13:50:00 +02:00
parent 7800ce9d12
commit 9bdc7291d8
5 changed files with 38 additions and 45 deletions

View File

@ -224,11 +224,17 @@ esp_err_t register_ble_functionality(void)
return ESP_OK ; return ESP_OK ;
} }
void stop_BLEscan(void){
ESP_LOGI(TAG, "Shutting BT Down ...");
esp_ble_gap_register_callback(NULL);
esp_bluedroid_disable();
esp_bluedroid_deinit();
esp_bt_controller_disable();
esp_bt_controller_deinit();
}
// Main start code running in its own Xtask void start_BLEscan(void){
void bt_loop(void * pvParameters) ESP_LOGI(TAG, "Initializing bluetooth scanner ...");
{
configASSERT( ( ( uint32_t ) pvParameters ) == 1 ); // FreeRTOS check
esp_err_t status; esp_err_t status;
@ -277,15 +283,9 @@ void bt_loop(void * pvParameters)
goto end; goto end;
} }
while(1)
{
vTaskDelay(10/portTICK_PERIOD_MS); // reset watchdog
}
end: end:
ESP_LOGI(TAG, "Terminating BT logging task"); ESP_LOGI(TAG, "Bluetooth scanner initialization finished");
vTaskDelete(NULL);
} // start_BLEscan
} // bt_loop
#endif // BLECOUNTER #endif // BLECOUNTER

View File

@ -583,17 +583,17 @@ wifi_sniffer_init(); // setup wifi in monitor mode and start MAC counting
// note: do this *after* wifi has started, since gets it's seed from RF noise // note: do this *after* wifi has started, since gets it's seed from RF noise
reset_salt(); // get new 16bit for salting hashes reset_salt(); // get new 16bit for salting hashes
// run wifi task on core 0 and lora task on core 1 and bt task on core 0 // run wifi channel switching task on core 0 and lora lmic task on core 1 (arduino main loop runs on core 1)
ESP_LOGI(TAG, "Starting Lora task on core 1"); ESP_LOGI(TAG, "Starting Lora task on core 1");
xTaskCreatePinnedToCore(lorawan_loop, "loratask", 2048, ( void * ) 1, ( 5 | portPRIVILEGE_BIT ), NULL, 1); xTaskCreatePinnedToCore(lorawan_loop, "loratask", 2048, ( void * ) 1, ( 5 | portPRIVILEGE_BIT ), NULL, 1);
ESP_LOGI(TAG, "Starting Wifi task on core 0"); ESP_LOGI(TAG, "Starting Wifi task on core 0");
xTaskCreatePinnedToCore(sniffer_loop, "wifisniffer", 2048, ( void * ) 1, 1, NULL, 0); xTaskCreatePinnedToCore(sniffer_loop, "wifisniffer", 2048, ( void * ) 1, 1, NULL, 0);
// start BLE scan callback if BLE function is enabled in NVRAM configuration
#ifdef BLECOUNTER #ifdef BLECOUNTER
if (cfg.blescan) { // start BLE task only if BLE function is enabled in NVRAM configuration if (cfg.blescan) {
ESP_LOGI(TAG, "Starting Bluetooth task on core 0"); start_BLEscan();
xTaskCreatePinnedToCore(bt_loop, "btscan", 4096, ( void * ) 1, 1, NULL, 0);
} }
#endif #endif

View File

@ -41,4 +41,7 @@ void wifi_sniffer_set_channel(uint8_t channel);
void wifi_sniffer_packet_handler(void *buff, wifi_promiscuous_pkt_type_t type); void wifi_sniffer_packet_handler(void *buff, wifi_promiscuous_pkt_type_t type);
// defined in blescan.cpp // defined in blescan.cpp
void bt_loop(void *ignore); #ifdef BLECOUNTER
void start_BLEscan(void);
void stop_BLEscan(void);
#endif

View File

@ -7,13 +7,13 @@
// set this to include BLE counting and vendor filter functions // set this to include BLE counting and vendor filter functions
#define VENDORFILTER 1 // comment out if you want to count things, not people #define VENDORFILTER 1 // comment out if you want to count things, not people
#define BLECOUNTER 1 // comment out if you don't want BLE count #define BLECOUNTER 1 // comment out if you don't want BLE count, saves power & memory
// BLE scan parameters // BLE scan parameters
#define BLESTACKSIZE 8192 // stack size for esp_bt_controller #define BLESTACKSIZE 8192 // stack size for esp_bt_controller
#define BLESCANTIME 0 // [seconds] scan duration, 0 means infinite [default], see note below #define BLESCANTIME 0 // [seconds] scan duration, 0 means infinite [default], see note below
#define BLESCANWINDOW 10 // [milliseconds] scan window, see below, 3 .. 10240, default 10 #define BLESCANWINDOW 10 // [milliseconds] scan window, see below, 3 .. 10240, default 10
#define BLESCANINTERVAL 10 // [milliseconds] how long to wait between scans, 3 .. 10240, default 10 #define BLESCANINTERVAL 10 // [milliseconds] scan interval, see below, 3 .. 10240, default 10
/* Note: guide for setting bluetooth parameters /* Note: guide for setting bluetooth parameters
* *
@ -25,6 +25,7 @@
* Scan window sets how much of the interval should be occupied by scanning. Should be >= BLESCANINTERVAL. * Scan window sets how much of the interval should be occupied by scanning. Should be >= BLESCANINTERVAL.
* Scan interval is how long scanning should be done on each channel. BLE uses 3 channels for advertising. * Scan interval is how long scanning should be done on each channel. BLE uses 3 channels for advertising.
* -> Adjust these values with power consumption in mind if power is limited. * -> Adjust these values with power consumption in mind if power is limited.
* -> Scan interval can be changed during runtime by remote comammand.
*/ */
// WiFi scan parameters // WiFi scan parameters

View File

@ -9,12 +9,6 @@
#include <lmic.h> #include <lmic.h>
#include <hal/hal.h> #include <hal/hal.h>
// Bluetooth specific includes
#ifdef BLECOUNTER
#include <esp_gap_ble_api.h> // needed for switching interval parameter by rcommand
esp_err_t register_ble_functionality(void); // defined in blescan.cpp
#endif
// Local logging tag // Local logging tag
static const char *TAG = "rcommand"; static const char *TAG = "rcommand";
@ -97,25 +91,14 @@ void set_wifichancycle(uint8_t val) {
void set_blescantime(uint8_t val) { void set_blescantime(uint8_t val) {
cfg.blescantime = val; cfg.blescantime = val;
ESP_LOGI(TAG, "Remote command: set BLE scan time to %d seconds", cfg.blescantime); ESP_LOGI(TAG, "Remote command: set BLE scan time to %.1f seconds", cfg.blescantime/float(100));
#ifdef BLECOUNTER #ifdef BLECOUNTER
// stop & restart BLE scan task to apply new parameter
// stop scan if (cfg.blescan)
ESP_LOGI(TAG, "Stopping BLE scan"); {
if (esp_ble_gap_stop_scanning() != ESP_OK) stop_BLEscan();
ESP_LOGE(TAG, "Stopping BLE scan failed"); start_BLEscan();
}
// modify parameters
ESP_LOGI(TAG, "Re-register BLE functionality");
if (register_ble_functionality() != ESP_OK)
ESP_LOGE(TAG, "Re-register BLE functionality failed");
// restart scan
ESP_LOGI(TAG, "Restarting BLE scan");
if (esp_ble_gap_start_scanning(BLESCANTIME) != ESP_OK)
ESP_LOGE(TAG, "Restarting BLE scan failed");
#endif #endif
}; };
@ -167,14 +150,20 @@ void set_loraadr(uint8_t val) {
}; };
void set_blescan(uint8_t val) { void set_blescan(uint8_t val) {
ESP_LOGI(TAG, "Remote command: set BLE scan mode to %s", val ? "on" : "off"); ESP_LOGI(TAG, "Remote command: set BLE scanner to %s", val ? "on" : "off");
switch (val) { switch (val) {
case 0: case 0:
cfg.blescan = 0; cfg.blescan = 0;
macs_ble = 0; // clear BLE counter macs_ble = 0; // clear BLE counter
#ifdef BLECOUNTER
stop_BLEscan();
#endif
break; break;
default: default:
cfg.blescan = 1; cfg.blescan = 1;
#ifdef BLECOUNTER
start_BLEscan();
#endif
break; break;
} }
}; };