completely reworked BLE scan
This commit is contained in:
parent
116197f632
commit
c57e7b75f4
8
LICENSE
8
LICENSE
@ -228,13 +228,13 @@ under this Licence:
|
|||||||
Most source files in this repository are made available under the Eclipse Public License v1.0. The examples which use a more liberal license. Some of the AES code is available under the LGPL. Refer to each individual source file for more details."
|
Most source files in this repository are made available under the Eclipse Public License v1.0. The examples which use a more liberal license. Some of the AES code is available under the LGPL. Refer to each individual source file for more details."
|
||||||
|
|
||||||
------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------
|
||||||
blecount.cpp
|
blescan.cpp
|
||||||
|
|
||||||
Parts of blecount.cpp were derived or taken from
|
Parts of blescan.cpp were derived or taken from
|
||||||
|
|
||||||
nkolban esp32 snippets
|
nkolban esp32 snippets
|
||||||
BLE Scan
|
BLE GAP DUMP
|
||||||
https://github.com/nkolban/esp32-snippets/tree/master/cpp_utils/tests/BLETests/Arduino/BLE_scan
|
https://github.com/nkolban/esp32-snippets/tree/master/BLE/scanner
|
||||||
|
|
||||||
under this Licence:
|
under this Licence:
|
||||||
|
|
||||||
|
@ -26,15 +26,11 @@ monitor_baud = 115200
|
|||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps =
|
lib_deps =
|
||||||
U8g2
|
U8g2
|
||||||
ESP32 BLE Arduino@0.4.9
|
|
||||||
build_flags =
|
build_flags =
|
||||||
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
||||||
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
||||||
;needed for ESP32 BLE Ardunio v0.4.9
|
|
||||||
-fexceptions
|
|
||||||
-std=c++11
|
|
||||||
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
||||||
-D_lmic_config_h_
|
-D_lmic_config_h_
|
||||||
-Dheltec_wifi_lora_32
|
-Dheltec_wifi_lora_32
|
||||||
@ -53,15 +49,11 @@ upload_speed = 921600
|
|||||||
;upload_port = COM15
|
;upload_port = COM15
|
||||||
lib_deps =
|
lib_deps =
|
||||||
U8g2
|
U8g2
|
||||||
ESP32 BLE Arduino@0.4.9
|
|
||||||
build_flags =
|
build_flags =
|
||||||
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
||||||
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
||||||
;needed for ESP32 BLE Ardunio v0.4.9
|
|
||||||
-fexceptions
|
|
||||||
-std=c++11
|
|
||||||
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
||||||
-Dttgov1
|
-Dttgov1
|
||||||
-D_lmic_config_h_
|
-D_lmic_config_h_
|
||||||
@ -79,15 +71,11 @@ monitor_baud = 115200
|
|||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps =
|
lib_deps =
|
||||||
U8g2
|
U8g2
|
||||||
ESP32 BLE Arduino@0.4.9
|
|
||||||
build_flags =
|
build_flags =
|
||||||
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
||||||
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
||||||
;needed for ESP32 BLE Ardunio v0.4.9
|
|
||||||
-fexceptions
|
|
||||||
-std=c++11
|
|
||||||
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
||||||
-D_lmic_config_h_
|
-D_lmic_config_h_
|
||||||
-Dttgov2
|
-Dttgov2
|
||||||
@ -104,16 +92,12 @@ monitor_baud = 115200
|
|||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps =
|
lib_deps =
|
||||||
U8g2@>2.21.7
|
U8g2@>2.21.7
|
||||||
ESP32 BLE Arduino@0.4.9
|
|
||||||
SmartLeds
|
SmartLeds
|
||||||
build_flags =
|
build_flags =
|
||||||
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
||||||
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
||||||
;needed for ESP32 BLE Ardunio v0.4.9
|
|
||||||
-fexceptions
|
|
||||||
-std=c++11
|
|
||||||
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
||||||
-Dlopy
|
-Dlopy
|
||||||
-D_lmic_config_h_
|
-D_lmic_config_h_
|
||||||
@ -130,16 +114,12 @@ monitor_baud = 115200
|
|||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps =
|
lib_deps =
|
||||||
U8g2@>2.21.7
|
U8g2@>2.21.7
|
||||||
ESP32 BLE Arduino@0.4.9
|
|
||||||
SmartLeds
|
SmartLeds
|
||||||
build_flags =
|
build_flags =
|
||||||
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
||||||
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
||||||
;needed for ESP32 BLE Ardunio v0.4.9
|
|
||||||
-fexceptions
|
|
||||||
-std=c++11
|
|
||||||
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
||||||
-D_lmic_config_h_
|
-D_lmic_config_h_
|
||||||
-Dlopy4
|
-Dlopy4
|
||||||
@ -156,16 +136,12 @@ monitor_baud = 115200
|
|||||||
upload_speed = 256000
|
upload_speed = 256000
|
||||||
lib_deps =
|
lib_deps =
|
||||||
U8g2
|
U8g2
|
||||||
ESP32 BLE Arduino@0.4.9
|
|
||||||
SmartLeds
|
SmartLeds
|
||||||
build_flags =
|
build_flags =
|
||||||
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
||||||
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
||||||
;needed for ESP32 BLE Ardunio v0.4.9
|
|
||||||
-fexceptions
|
|
||||||
-std=c++11
|
|
||||||
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
||||||
-D_lmic_config_h_
|
-D_lmic_config_h_
|
||||||
-Dlolin32lite_lora
|
-Dlolin32lite_lora
|
||||||
@ -182,16 +158,12 @@ monitor_baud = 115200
|
|||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps =
|
lib_deps =
|
||||||
U8g2
|
U8g2
|
||||||
ESP32 BLE Arduino@0.4.9
|
|
||||||
SmartLeds
|
SmartLeds
|
||||||
build_flags =
|
build_flags =
|
||||||
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework
|
||||||
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
|
||||||
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
||||||
;needed for ESP32 BLE Ardunio v0.4.9
|
|
||||||
-fexceptions
|
|
||||||
-std=c++11
|
|
||||||
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
;override lora settings from LMiC library in lmic/config.h and use main.h instead
|
||||||
-D_lmic_config_h_
|
-D_lmic_config_h_
|
||||||
-Dlolin32_lora
|
-Dlolin32_lora
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#ifdef BLECOUNTER
|
||||||
|
|
||||||
/* code snippets taken from
|
/* code snippets taken from
|
||||||
https://github.com/nkolban/esp32-snippets/tree/master/BLE/scanner
|
https://github.com/nkolban/esp32-snippets/tree/master/BLE/scanner
|
||||||
*/
|
*/
|
||||||
@ -10,6 +12,9 @@ https://github.com/nkolban/esp32-snippets/tree/master/BLE/scanner
|
|||||||
#include <esp_bt_main.h>
|
#include <esp_bt_main.h>
|
||||||
#include <esp_gap_ble_api.h>
|
#include <esp_gap_ble_api.h>
|
||||||
|
|
||||||
|
// defined in macsniff.cpp
|
||||||
|
bool mac_add(uint8_t *paddr, int8_t rssi, bool sniff_type);
|
||||||
|
|
||||||
#define BT_BD_ADDR_STR "%02x:%02x:%02x:%02x:%02x:%02x"
|
#define BT_BD_ADDR_STR "%02x:%02x:%02x:%02x:%02x:%02x"
|
||||||
#define BT_BD_ADDR_HEX(addr) addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]
|
#define BT_BD_ADDR_HEX(addr) addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]
|
||||||
|
|
||||||
@ -21,7 +26,7 @@ static const char *bt_dev_type_to_string(esp_bt_dev_type_t type);
|
|||||||
static void gap_callback_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param);
|
static void gap_callback_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param);
|
||||||
|
|
||||||
// local Tag for logging
|
// local Tag for logging
|
||||||
static const char *TAG = "paxcnt";
|
static const char *TAG = "bt_loop";
|
||||||
|
|
||||||
static void gap_callback_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param)
|
static void gap_callback_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param)
|
||||||
{
|
{
|
||||||
@ -74,6 +79,32 @@ static void gap_callback_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_pa
|
|||||||
|
|
||||||
ESP_LOGI(TAG, "num_resps : %d", p->scan_rst.num_resps);
|
ESP_LOGI(TAG, "num_resps : %d", p->scan_rst.num_resps);
|
||||||
|
|
||||||
|
/* to be done here:
|
||||||
|
#ifdef VENDORFILTER
|
||||||
|
|
||||||
|
filter BLE devices using their advertisements to get filter alternative to vendor OUI
|
||||||
|
if vendorfiltering is on, we ...
|
||||||
|
- want to count: mobile phones and tablets
|
||||||
|
- don't want to count: beacons, peripherals (earphones, headsets, printers), cars and machines
|
||||||
|
see
|
||||||
|
https://github.com/nkolban/ESP32_BLE_Arduino/blob/master/src/BLEAdvertisedDevice.cpp
|
||||||
|
|
||||||
|
http://www.libelium.com/products/meshlium/smartphone-detection/
|
||||||
|
|
||||||
|
https://www.question-defense.com/2013/01/12/bluetooth-cod-bluetooth-class-of-deviceclass-of-service-explained
|
||||||
|
|
||||||
|
https://www.bluetooth.com/specifications/assigned-numbers/baseband
|
||||||
|
|
||||||
|
"The Class of Device (CoD) in case of Bluetooth which allows us to differentiate the type of
|
||||||
|
device (smartphone, handsfree, computer, LAN/network AP). With this parameter we can
|
||||||
|
differentiate among pedestrians and vehicles."
|
||||||
|
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
|
// add this device and show new count total if it was not previously added
|
||||||
|
mac_add((uint8_t *) p->scan_rst.bda, p->scan_rst.rssi, MAC_SNIFF_BLE);
|
||||||
|
|
||||||
if ( p->scan_rst.search_evt == ESP_GAP_SEARCH_INQ_CMPL_EVT)
|
if ( p->scan_rst.search_evt == ESP_GAP_SEARCH_INQ_CMPL_EVT)
|
||||||
{
|
{
|
||||||
// Scan is done.
|
// Scan is done.
|
||||||
@ -311,3 +342,5 @@ end:
|
|||||||
vTaskDelete(NULL);
|
vTaskDelete(NULL);
|
||||||
|
|
||||||
} // bt_loop
|
} // bt_loop
|
||||||
|
|
||||||
|
#endif // BLECOUNTER
|
117
src/macsniff.cpp
117
src/macsniff.cpp
@ -2,13 +2,6 @@
|
|||||||
// Basic Config
|
// Basic Config
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
#ifdef BLECOUNTER
|
|
||||||
#include <BLEDevice.h>
|
|
||||||
//#include <BLEUtils.h>
|
|
||||||
//#include <BLEScan.h>
|
|
||||||
//#include <BLEAdvertisedDevice.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VENDORFILTER
|
#ifdef VENDORFILTER
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
@ -20,7 +13,6 @@ static const char *TAG = "macsniff";
|
|||||||
|
|
||||||
static wifi_country_t wifi_country = {.cc=WIFI_MY_COUNTRY, .schan=WIFI_CHANNEL_MIN, .nchan=WIFI_CHANNEL_MAX, .policy=WIFI_COUNTRY_POLICY_MANUAL};
|
static wifi_country_t wifi_country = {.cc=WIFI_MY_COUNTRY, .schan=WIFI_CHANNEL_MIN, .nchan=WIFI_CHANNEL_MAX, .policy=WIFI_COUNTRY_POLICY_MANUAL};
|
||||||
|
|
||||||
uint16_t currentScanDevice = 0;
|
|
||||||
uint16_t salt;
|
uint16_t salt;
|
||||||
|
|
||||||
uint16_t salt_reset(void) {
|
uint16_t salt_reset(void) {
|
||||||
@ -46,31 +38,41 @@ bool mac_add(uint8_t *paddr, int8_t rssi, bool sniff_type) {
|
|||||||
if ( (sniff_type==MAC_SNIFF_BLE) || std::find(vendors.begin(), vendors.end(), vendor2int) != vendors.end() ) {
|
if ( (sniff_type==MAC_SNIFF_BLE) || std::find(vendors.begin(), vendors.end(), vendor2int) != vendors.end() ) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// salt and hash MAC, and if new unique one, store identifier in container and increment counter on display
|
// salt and hash MAC, and if new unique one, store identifier in container and increment counter on display
|
||||||
// https://en.wikipedia.org/wiki/MAC_Address_Anonymization
|
// https://en.wikipedia.org/wiki/MAC_Address_Anonymization
|
||||||
|
|
||||||
addr2int += (uint32_t) salt; // add 16-bit salt to pseudo MAC
|
addr2int += (uint32_t) salt; // add 16-bit salt to pseudo MAC
|
||||||
snprintf(buff, sizeof(buff), "%08X", addr2int); // convert unsigned 32-bit salted MAC to 8 digit hex string
|
snprintf(buff, sizeof(buff), "%08X", addr2int); // convert unsigned 32-bit salted MAC to 8 digit hex string
|
||||||
hashedmac = rokkit(&buff[3], 5); // hash MAC last string value, use 5 chars to fit hash in uint16_t container
|
hashedmac = rokkit(&buff[3], 5); // hash MAC last string value, use 5 chars to fit hash in uint16_t container
|
||||||
auto newmac = macs.insert(hashedmac); // add hashed MAC to total container if new unique
|
auto newmac = macs.insert(hashedmac); // add hashed MAC to total container if new unique
|
||||||
added = newmac.second ? true:false; // true if hashed MAC is unique in container
|
added = newmac.second ? true:false; // true if hashed MAC is unique in container
|
||||||
|
|
||||||
// Insert only if it was not found on global count
|
// Insert only if it was not found on global count
|
||||||
if (added) {
|
if (added) {
|
||||||
if (sniff_type == MAC_SNIFF_WIFI ) {
|
|
||||||
rgb_set_color(COLOR_GREEN);
|
char buff[16];
|
||||||
wifis.insert(hashedmac); // add hashed MAC to wifi container if new unique
|
snprintf(buff, sizeof(buff), "PAX:%-4d", (int) macs.size()); // convert 16-bit MAC counter to decimal counter value
|
||||||
}
|
u8x8.draw2x2String(0, 0, buff); // display number on unique macs total Wifi + BLE
|
||||||
#ifdef BLECOUNTER
|
|
||||||
|
if (sniff_type == MAC_SNIFF_WIFI ) {
|
||||||
|
rgb_set_color(COLOR_GREEN);
|
||||||
|
wifis.insert(hashedmac); // add hashed MAC to wifi container
|
||||||
|
u8x8.setCursor(0,4);
|
||||||
|
u8x8.printf("WIFI: %-4d", (int) wifis.size());
|
||||||
|
}
|
||||||
|
#ifdef BLECOUNTER
|
||||||
else if (sniff_type == MAC_SNIFF_BLE ) {
|
else if (sniff_type == MAC_SNIFF_BLE ) {
|
||||||
rgb_set_color(COLOR_MAGENTA);
|
rgb_set_color(COLOR_MAGENTA);
|
||||||
bles.insert(hashedmac); // add hashed MAC to BLE container if new unique
|
bles.insert(hashedmac); // add hashed MAC to BLE container
|
||||||
|
u8x8.setCursor(0,3);
|
||||||
|
u8x8.printf("BLE: %-4d", (int) bles.size());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// Not sure user will have time to see the LED
|
|
||||||
// TBD do light off further in the code
|
// Not sure user will have time to see the LED
|
||||||
rgb_set_color(COLOR_NONE);
|
// TBD do light off further in the code
|
||||||
}
|
rgb_set_color(COLOR_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
ESP_LOGI(TAG, "%s RSSI %ddBi -> MAC %s -> Hash %04X -> WiFi:%d BLE:%d %s",
|
ESP_LOGI(TAG, "%s RSSI %ddBi -> MAC %s -> Hash %04X -> WiFi:%d BLE:%d %s",
|
||||||
sniff_type==MAC_SNIFF_WIFI ? "WiFi":"BLE ",
|
sniff_type==MAC_SNIFF_WIFI ? "WiFi":"BLE ",
|
||||||
@ -94,65 +96,6 @@ bool mac_add(uint8_t *paddr, int8_t rssi, bool sniff_type) {
|
|||||||
return added; // function returns bool if a new and unique Wifi or BLE mac was counted (true) or not (false)
|
return added; // function returns bool if a new and unique Wifi or BLE mac was counted (true) or not (false)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef BLECOUNTER
|
|
||||||
|
|
||||||
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
|
|
||||||
void onResult(BLEAdvertisedDevice advertisedDevice) {
|
|
||||||
int lastcount = (int) macs.size();
|
|
||||||
uint8_t *p = (uint8_t *) advertisedDevice.getAddress().getNative();
|
|
||||||
|
|
||||||
/* to be done here:
|
|
||||||
#ifdef VENDORFILTER
|
|
||||||
|
|
||||||
filter BLE devices using their advertisements to get filter alternative to vendor OUI
|
|
||||||
if vendorfiltering is on, we ...
|
|
||||||
- want to count: mobile phones and tablets
|
|
||||||
- don't want to count: beacons, peripherals (earphones, headsets, printers), cars and machines
|
|
||||||
see
|
|
||||||
https://github.com/nkolban/ESP32_BLE_Arduino/blob/master/src/BLEAdvertisedDevice.cpp
|
|
||||||
|
|
||||||
http://www.libelium.com/products/meshlium/smartphone-detection/
|
|
||||||
|
|
||||||
https://www.question-defense.com/2013/01/12/bluetooth-cod-bluetooth-class-of-deviceclass-of-service-explained
|
|
||||||
|
|
||||||
https://www.bluetooth.com/specifications/assigned-numbers/baseband
|
|
||||||
|
|
||||||
"The Class of Device (CoD) in case of Bluetooth which allows us to differentiate the type of
|
|
||||||
device (smartphone, handsfree, computer, LAN/network AP). With this parameter we can
|
|
||||||
differentiate among pedestrians and vehicles."
|
|
||||||
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Current devices seen on this scan session
|
|
||||||
currentScanDevice++;
|
|
||||||
u8x8.setCursor(11,3);
|
|
||||||
u8x8.printf("%-4d", currentScanDevice);
|
|
||||||
// add this device and show new count total if it was not previously added
|
|
||||||
if ( mac_add(p, advertisedDevice.getRSSI(), MAC_SNIFF_BLE) ) {
|
|
||||||
char buff[16];
|
|
||||||
snprintf(buff, sizeof(buff), "PAX:%-4d", (int) macs.size()); // convert 16-bit MAC counter to decimal counter value
|
|
||||||
u8x8.draw2x2String(0, 0, buff); // display number on unique macs total Wifi + BLE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void BLECount() {
|
|
||||||
ESP_LOGI(TAG, "BLE scan started");
|
|
||||||
currentScanDevice = 0; // Set 0 seen device on this scan session
|
|
||||||
u8x8.drawString(0,3,"Scanning->");
|
|
||||||
BLEDevice::init(""); // we don't want to be seen by a name
|
|
||||||
BLEScanResults foundDevices; // instance for getting count
|
|
||||||
BLEScan* pBLEScan = BLEDevice::getScan(); //create new scan
|
|
||||||
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
|
|
||||||
pBLEScan->setActiveScan(false); // An active scan would mean that we will wish unneeeded scan responses
|
|
||||||
pBLEScan->setWindow(BLESCANWINDOW);
|
|
||||||
pBLEScan->setInterval(BLESCANINTERVAL);
|
|
||||||
pBLEScan->start(cfg.blescantime); // note: this is a blocking call
|
|
||||||
ESP_LOGI(TAG, "BLE scan done, seen %d device(s)", foundDevices.getCount());
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void wifi_sniffer_init(void) {
|
void wifi_sniffer_init(void) {
|
||||||
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||||
cfg.nvs_enable = 0; // we don't need any wifi settings from NVRAM
|
cfg.nvs_enable = 0; // we don't need any wifi settings from NVRAM
|
||||||
|
@ -19,10 +19,7 @@ typedef struct {
|
|||||||
uint8_t payload[0]; /* network data ended with 4 bytes csum (CRC32) */
|
uint8_t payload[0]; /* network data ended with 4 bytes csum (CRC32) */
|
||||||
} wifi_ieee80211_packet_t;
|
} wifi_ieee80211_packet_t;
|
||||||
|
|
||||||
extern uint16_t currentScanDevice;
|
|
||||||
|
|
||||||
uint16_t salt_reset(void);
|
uint16_t salt_reset(void);
|
||||||
void BLECount();
|
|
||||||
void wifi_sniffer_init(void);
|
void wifi_sniffer_init(void);
|
||||||
void wifi_sniffer_set_channel(uint8_t channel);
|
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);
|
||||||
|
37
src/main.cpp
37
src/main.cpp
@ -215,9 +215,7 @@ void lorawan_loop(void * pvParameters) {
|
|||||||
void antenna_select(const int8_t _ant);
|
void antenna_select(const int8_t _ant);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BLECOUNTER
|
#ifndef BLECOUNTER
|
||||||
void BLECount(void);
|
|
||||||
#else
|
|
||||||
bool btstop = btStop();
|
bool btstop = btStop();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -277,18 +275,6 @@ void sniffer_loop(void * pvParameters) {
|
|||||||
snprintf(buff, sizeof(buff), "PAX:%d", (int) macs.size()); // convert 16-bit MAC counter to decimal counter value
|
snprintf(buff, sizeof(buff), "PAX:%d", (int) macs.size()); // convert 16-bit MAC counter to decimal counter value
|
||||||
u8x8.draw2x2String(0, 0, buff); // display number on unique macs total
|
u8x8.draw2x2String(0, 0, buff); // display number on unique macs total
|
||||||
|
|
||||||
#ifdef BLECOUNTER
|
|
||||||
// We just state out of BLE scanning
|
|
||||||
u8x8.setCursor(0,3);
|
|
||||||
if (currentScanDevice) {
|
|
||||||
u8x8.printf("BLE: %-4d %-4d", (int) bles.size(), currentScanDevice);
|
|
||||||
} else {
|
|
||||||
u8x8.printf("BLE: %-4d", (int) bles.size());
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
u8x8.setCursor(0,4);
|
|
||||||
u8x8.printf("WIFI: %-4d", (int) wifis.size());
|
|
||||||
u8x8.setCursor(11,4);
|
u8x8.setCursor(11,4);
|
||||||
u8x8.printf("ch:%02i", channel);
|
u8x8.printf("ch:%02i", channel);
|
||||||
u8x8.setCursor(0,5);
|
u8x8.setCursor(0,5);
|
||||||
@ -340,12 +326,14 @@ void sniffer_loop(void * pvParameters) {
|
|||||||
} // end of send data cycle
|
} // end of send data cycle
|
||||||
|
|
||||||
else {
|
else {
|
||||||
|
/*
|
||||||
#ifdef BLECOUNTER
|
#ifdef BLECOUNTER
|
||||||
if (nloop % (WIFI_CHANNEL_MAX * cfg.blescancycle) == 0 ) // once after cfg.blescancycle Wifi scans, do a BLE scan
|
if (nloop % (WIFI_CHANNEL_MAX * cfg.blescancycle) == 0 ) // once after cfg.blescancycle Wifi scans, do a BLE scan
|
||||||
if (cfg.blescan) { // execute BLE count if BLE function is enabled
|
if (cfg.blescan) { // execute BLE count if BLE function is enabled
|
||||||
BLECount(); // start BLE scan, this is a blocking call
|
BLECount(); // start BLE scan, this is a blocking call
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
} // end of channel rotation loop
|
} // end of channel rotation loop
|
||||||
} // end of infinite wifi scan loop
|
} // end of infinite wifi scan loop
|
||||||
}
|
}
|
||||||
@ -493,6 +481,13 @@ void setup() {
|
|||||||
// initialize display
|
// initialize display
|
||||||
init_display(PROGNAME, PROGVERSION);
|
init_display(PROGNAME, PROGVERSION);
|
||||||
u8x8.setPowerSave(!cfg.screenon); // set display off if disabled
|
u8x8.setPowerSave(!cfg.screenon); // set display off if disabled
|
||||||
|
u8x8.draw2x2String(0, 0, "PAX:0");
|
||||||
|
u8x8.setCursor(0,4);
|
||||||
|
u8x8.printf("WIFI: 0");
|
||||||
|
#ifdef BLECOUNTER
|
||||||
|
u8x8.setCursor(0,3);
|
||||||
|
u8x8.printf("BLE: 0");
|
||||||
|
#endif
|
||||||
u8x8.setCursor(0,5);
|
u8x8.setCursor(0,5);
|
||||||
u8x8.printf(!cfg.rssilimit ? "RLIM: off" : "RLIM: %d", cfg.rssilimit);
|
u8x8.printf(!cfg.rssilimit ? "RLIM: off" : "RLIM: %d", cfg.rssilimit);
|
||||||
u8x8.drawString(0,6,"Join Wait ");
|
u8x8.drawString(0,6,"Join Wait ");
|
||||||
@ -516,16 +511,20 @@ salt_reset(); // get new 16bit for salting hashes
|
|||||||
xTaskCreatePinnedToCore(lorawan_loop, "loratask", 2048, ( void * ) 1, ( 5 | portPRIVILEGE_BIT ), NULL, 0);
|
xTaskCreatePinnedToCore(lorawan_loop, "loratask", 2048, ( void * ) 1, ( 5 | portPRIVILEGE_BIT ), NULL, 0);
|
||||||
ESP_LOGI(TAG, "Starting Wifi task on core 0");
|
ESP_LOGI(TAG, "Starting Wifi task on core 0");
|
||||||
xTaskCreatePinnedToCore(wifi_sniffer_loop, "wifisniffer", 4096, ( void * ) 1, 1, NULL, 0);
|
xTaskCreatePinnedToCore(wifi_sniffer_loop, "wifisniffer", 4096, ( void * ) 1, 1, NULL, 0);
|
||||||
ESP_LOGI(TAG, "Starting Bluetooth task on core 0");
|
#ifdef BLECOUNTER
|
||||||
xTaskCreatePinnedToCore(bt_loop, "btscan", 2048, NULL, 5, NULL, 0);
|
ESP_LOGI(TAG, "Starting Bluetooth task on core 0");
|
||||||
|
xTaskCreatePinnedToCore(bt_loop, "btscan", 2048, NULL, 5, NULL, 0);
|
||||||
|
#endif
|
||||||
// to come here: code for switching off core 1
|
// to come here: code for switching off core 1
|
||||||
#else // run wifi task on core 0 and lora task on core 1 and bt task on core 1
|
#else // run wifi task on core 0 and lora task on core 1 and bt task 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", 4096, ( void * ) 1, 1, NULL, 0);
|
xTaskCreatePinnedToCore(sniffer_loop, "wifisniffer", 4096, ( void * ) 1, 1, NULL, 0);
|
||||||
ESP_LOGI(TAG, "Starting Bluetooth task on core 1");
|
#ifdef BLECOUNTER
|
||||||
xTaskCreatePinnedToCore(bt_loop, "btscan", 2048, NULL, 5, NULL, 1);
|
ESP_LOGI(TAG, "Starting Bluetooth task on core 1");
|
||||||
|
xTaskCreatePinnedToCore(bt_loop, "btscan", 2048, NULL, 5, NULL, 1);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Finally: kickoff first sendjob and join, then send initial payload "0000"
|
// Finally: kickoff first sendjob and join, then send initial payload "0000"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// program version - note: increment version after modifications to configData_t struct!!
|
// program version - note: increment version after modifications to configData_t struct!!
|
||||||
#define PROGVERSION "1.2.95" // use max 10 chars here!
|
#define PROGVERSION "1.2.96" // use max 10 chars here!
|
||||||
#define PROGNAME "PAXCNT"
|
#define PROGNAME "PAXCNT"
|
||||||
|
|
||||||
// Verbose enables serial output
|
// Verbose enables serial output
|
||||||
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
// 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
|
||||||
|
|
||||||
// BLE scan parameters
|
// BLE scan parameters
|
||||||
#define BLESCANCYCLE 2 // BLE scan once after each <BLECYCLE> wifi scans
|
#define BLESCANCYCLE 2 // BLE scan once after each <BLECYCLE> wifi scans
|
||||||
|
Loading…
Reference in New Issue
Block a user