bluetooth tasking reworked
This commit is contained in:
parent
7800ce9d12
commit
9bdc7291d8
@ -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);
|
|
||||||
|
|
||||||
} // bt_loop
|
} // start_BLEscan
|
||||||
|
|
||||||
#endif // BLECOUNTER
|
#endif // BLECOUNTER
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user