code sanitization
This commit is contained in:
parent
54945f173e
commit
fab0e4f0dd
@ -38,7 +38,7 @@ build_flags =
|
|||||||
;
|
;
|
||||||
; 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_
|
||||||
-include "src/main.h"
|
-include "src/paxcounter.conf"
|
||||||
|
|
||||||
[env:heltec_wifi_lora_32]
|
[env:heltec_wifi_lora_32]
|
||||||
platform = espressif32
|
platform = espressif32
|
||||||
|
@ -233,8 +233,10 @@ esp_err_t register_ble_functionality(void)
|
|||||||
|
|
||||||
|
|
||||||
// Main start code running in its own Xtask
|
// Main start code running in its own Xtask
|
||||||
void bt_loop(void *ignore)
|
void bt_loop(void * pvParameters)
|
||||||
{
|
{
|
||||||
|
configASSERT( ( ( uint32_t ) pvParameters ) == 1 ); // FreeRTOS check
|
||||||
|
|
||||||
esp_err_t status;
|
esp_err_t status;
|
||||||
|
|
||||||
// Initialize BT controller to allocate task and other resource.
|
// Initialize BT controller to allocate task and other resource.
|
||||||
|
@ -18,7 +18,7 @@ esp_err_t err;
|
|||||||
|
|
||||||
// populate cfg vars with factory settings
|
// populate cfg vars with factory settings
|
||||||
void defaultConfig() {
|
void defaultConfig() {
|
||||||
cfg.lorasf = LORASFDEFAULT; // 7-12, initial lora spreadfactor defined in main.h
|
cfg.lorasf = LORASFDEFAULT; // 7-12, initial lora spreadfactor defined in paxcounter.conf
|
||||||
cfg.txpower = 15; // 2-15, lora tx power
|
cfg.txpower = 15; // 2-15, lora tx power
|
||||||
cfg.adrmode = 1; // 0=disabled, 1=enabled
|
cfg.adrmode = 1; // 0=disabled, 1=enabled
|
||||||
cfg.screensaver = 0; // 0=disabled, 1=enabled
|
cfg.screensaver = 0; // 0=disabled, 1=enabled
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include "rgb_led.h"
|
#include "rgb_led.h"
|
||||||
#include "macsniff.h"
|
#include "macsniff.h"
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
// Struct holding devices's runtime configuration
|
// Struct holding devices's runtime configuration
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -11,46 +11,44 @@
|
|||||||
// Local logging tag
|
// Local logging tag
|
||||||
static const char *TAG = "macsniff";
|
static const char *TAG = "macsniff";
|
||||||
|
|
||||||
// defined in main.cpp
|
|
||||||
void set_LED (uint16_t set_color, uint16_t set_blinkduration, uint16_t set_interval, uint8_t set_count);
|
|
||||||
|
|
||||||
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};
|
||||||
|
|
||||||
|
// globals
|
||||||
uint16_t salt;
|
uint16_t salt;
|
||||||
|
|
||||||
uint16_t salt_reset(void) {
|
uint16_t reset_salt(void) {
|
||||||
salt = random(65536); // get new 16bit random for salting hashes
|
salt = random(65536); // get new 16bit random for salting hashes and set global salt var
|
||||||
return salt;
|
return salt;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool mac_add(uint8_t *paddr, int8_t rssi, bool sniff_type) {
|
bool mac_add(uint8_t *paddr, int8_t rssi, bool sniff_type) {
|
||||||
|
|
||||||
char buff[16]; // temporary buffer for printf
|
char buff[16]; // temporary buffer for printf
|
||||||
bool added = false;
|
bool added = false;
|
||||||
uint32_t addr2int;
|
uint32_t addr2int, vendor2int; // temporary buffer for MAC and Vendor OUI
|
||||||
uint32_t vendor2int;
|
uint16_t hashedmac; // temporary buffer for generated hash value
|
||||||
uint16_t hashedmac;
|
|
||||||
|
|
||||||
// only last 3 MAC Address bytes are used for MAC Address Anonymization
|
// only last 3 MAC Address bytes are used for MAC address anonymization
|
||||||
// but since it's uint32 we take 4 bytes to avoid 1st value to be 0
|
// but since it's uint32 we take 4 bytes to avoid 1st value to be 0
|
||||||
addr2int = ( (uint32_t)paddr[2] ) | ( (uint32_t)paddr[3] << 8 ) | ( (uint32_t)paddr[4] << 16 ) | ( (uint32_t)paddr[5] << 24 );
|
addr2int = ( (uint32_t)paddr[2] ) | ( (uint32_t)paddr[3] << 8 ) | ( (uint32_t)paddr[4] << 16 ) | ( (uint32_t)paddr[5] << 24 );
|
||||||
|
|
||||||
#ifdef VENDORFILTER
|
#ifdef VENDORFILTER
|
||||||
vendor2int = ( (uint32_t)paddr[2] ) | ( (uint32_t)paddr[1] << 8 ) | ( (uint32_t)paddr[0] << 16 );
|
vendor2int = ( (uint32_t)paddr[2] ) | ( (uint32_t)paddr[1] << 8 ) | ( (uint32_t)paddr[0] << 16 );
|
||||||
// use OUI vendor filter list only on Wifi, not on BLE
|
// use OUI vendor filter list only on Wifi, not on BLE
|
||||||
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
|
// Count only if MAC was not yet seen
|
||||||
if (added) {
|
if (added) {
|
||||||
if (sniff_type == MAC_SNIFF_WIFI ) {
|
if (sniff_type == MAC_SNIFF_WIFI ) {
|
||||||
macs_wifi++; // increment Wifi MACs counter
|
macs_wifi++; // increment Wifi MACs counter
|
||||||
@ -64,11 +62,11 @@ bool mac_add(uint8_t *paddr, int8_t rssi, bool sniff_type) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
ESP_LOGI(TAG, "%s RSSI %ddBi -> MAC %s -> Hash %04X -> WiFi:%d BLTH:%d %s",
|
// Log scan result
|
||||||
sniff_type==MAC_SNIFF_WIFI ? "WiFi":"BLTH",
|
ESP_LOGI(TAG, "%s RSSI %ddBi -> MAC %s -> Hash %04X -> WiFi:%d BLTH:%d %s",
|
||||||
rssi, buff, hashedmac,
|
sniff_type==MAC_SNIFF_WIFI ? "WiFi":"BLTH",
|
||||||
macs_wifi,
|
rssi, buff, hashedmac, macs_wifi,
|
||||||
added ? "new" : "known");
|
added ? "new" : "known");
|
||||||
|
|
||||||
#ifdef VENDORFILTER
|
#ifdef VENDORFILTER
|
||||||
} else {
|
} else {
|
||||||
|
@ -19,7 +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;
|
||||||
|
|
||||||
uint16_t salt_reset(void);
|
uint16_t reset_salt(void);
|
||||||
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);
|
||||||
|
74
src/main.cpp
74
src/main.cpp
@ -32,18 +32,13 @@ Refer to LICENSE.txt file in repository for more details.
|
|||||||
#include <lmic.h>
|
#include <lmic.h>
|
||||||
#include <hal/hal.h>
|
#include <hal/hal.h>
|
||||||
|
|
||||||
// ESP32 Functions
|
// ESP32 lib Functions
|
||||||
#include <esp_event_loop.h> // needed for Wifi event handler
|
#include <esp_event_loop.h> // needed for Wifi event handler
|
||||||
#include <esp_spi_flash.h> // needed for reading ESP32 chip attributes
|
#include <esp_spi_flash.h> // needed for reading ESP32 chip attributes
|
||||||
#include <esp32-hal-log.h> // needed for ESP_LOGx on arduino framework
|
#include <esp32-hal-log.h> // needed for ESP_LOGx on arduino framework
|
||||||
|
|
||||||
configData_t cfg; // struct holds current device configuration
|
configData_t cfg; // struct holds current device configuration
|
||||||
osjob_t sendjob, initjob; // LMIC
|
osjob_t sendjob, initjob; // LMIC jobs
|
||||||
|
|
||||||
enum states {
|
|
||||||
LED_ON,
|
|
||||||
LED_OFF
|
|
||||||
};
|
|
||||||
|
|
||||||
// Initialize global variables
|
// Initialize global variables
|
||||||
char display_lora[16], display_lmic[16]; // display buffers
|
char display_lora[16], display_lmic[16]; // display buffers
|
||||||
@ -65,6 +60,7 @@ static volatile bool ButtonTriggered = false;
|
|||||||
static const char *TAG = "paxcnt";
|
static const char *TAG = "paxcnt";
|
||||||
// Note: Log level control seems not working during runtime,
|
// Note: Log level control seems not working during runtime,
|
||||||
// so we need to switch loglevel by compiler build option in platformio.ini
|
// so we need to switch loglevel by compiler build option in platformio.ini
|
||||||
|
|
||||||
#ifndef VERBOSE
|
#ifndef VERBOSE
|
||||||
int redirect_log(const char * fmt, va_list args) {
|
int redirect_log(const char * fmt, va_list args) {
|
||||||
//do nothing
|
//do nothing
|
||||||
@ -72,30 +68,6 @@ int redirect_log(const char * fmt, va_list args) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//--- Prototypes ---
|
|
||||||
|
|
||||||
// defined in configmanager.cpp
|
|
||||||
void eraseConfig(void);
|
|
||||||
void saveConfig(void);
|
|
||||||
void loadConfig(void);
|
|
||||||
|
|
||||||
// defined in lorawan.cpp
|
|
||||||
void onEvent(ev_t ev);
|
|
||||||
void do_send(osjob_t* j);
|
|
||||||
void gen_lora_deveui(uint8_t * pdeveui);
|
|
||||||
void RevBytes(unsigned char* b, size_t c);
|
|
||||||
void get_hard_deveui(uint8_t *pdeveui);
|
|
||||||
|
|
||||||
// defined in wifisniffer.cpp
|
|
||||||
void wifi_sniffer_init(void);
|
|
||||||
void wifi_sniffer_set_channel(uint8_t channel);
|
|
||||||
void wifi_sniffer_packet_handler(void *buff, wifi_promiscuous_pkt_type_t type);
|
|
||||||
|
|
||||||
// defined in blescan.cpp
|
|
||||||
void bt_loop(void *ignore);
|
|
||||||
|
|
||||||
//---
|
|
||||||
|
|
||||||
void set_LED (uint16_t set_color, uint16_t set_blinkduration, uint16_t set_interval, uint8_t set_count) {
|
void set_LED (uint16_t set_color, uint16_t set_blinkduration, uint16_t set_interval, uint8_t set_count) {
|
||||||
color = set_color; // set color for RGB LED
|
color = set_color; // set color for RGB LED
|
||||||
LEDBlinkduration = set_blinkduration; // duration on
|
LEDBlinkduration = set_blinkduration; // duration on
|
||||||
@ -104,6 +76,13 @@ void set_LED (uint16_t set_color, uint16_t set_blinkduration, uint16_t set_inter
|
|||||||
LEDState = set_count ? LED_ON : LED_OFF; // sets LED to off if 0 blinks
|
LEDState = set_count ? LED_ON : LED_OFF; // sets LED to off if 0 blinks
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void reset_counters() {
|
||||||
|
macs.clear(); // clear all macs container
|
||||||
|
macs_total = 0; // reset all counters
|
||||||
|
macs_wifi = 0;
|
||||||
|
macs_ble = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* begin LMIC specific parts ------------------------------------------------------------ */
|
/* begin LMIC specific parts ------------------------------------------------------------ */
|
||||||
|
|
||||||
|
|
||||||
@ -163,6 +142,7 @@ static void lora_init (osjob_t* j) {
|
|||||||
|
|
||||||
// LMIC FreeRTos Task
|
// LMIC FreeRTos Task
|
||||||
void lorawan_loop(void * pvParameters) {
|
void lorawan_loop(void * pvParameters) {
|
||||||
|
|
||||||
configASSERT( ( ( uint32_t ) pvParameters ) == 1 ); // FreeRTOS check
|
configASSERT( ( ( uint32_t ) pvParameters ) == 1 ); // FreeRTOS check
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
@ -227,34 +207,31 @@ void lorawan_loop(void * pvParameters) {
|
|||||||
void sniffer_loop(void * pvParameters) {
|
void sniffer_loop(void * pvParameters) {
|
||||||
|
|
||||||
configASSERT( ( ( uint32_t ) pvParameters ) == 1 ); // FreeRTOS check
|
configASSERT( ( ( uint32_t ) pvParameters ) == 1 ); // FreeRTOS check
|
||||||
channel=0;
|
|
||||||
char buff[16];
|
char buff[16];
|
||||||
int nloop=0, lorawait=0;
|
int nloop=0, lorawait=0;
|
||||||
|
|
||||||
while (true) {
|
while (1) {
|
||||||
|
|
||||||
nloop++; // actual number of wifi loops, controls cycle when data is sent
|
nloop++; // actual number of wifi loops, controls cycle when data is sent
|
||||||
|
|
||||||
vTaskDelay(cfg.wifichancycle*10 / portTICK_PERIOD_MS);
|
|
||||||
yield();
|
|
||||||
channel = (channel % WIFI_CHANNEL_MAX) + 1; // rotates variable channel 1..WIFI_CHANNEL_MAX
|
channel = (channel % WIFI_CHANNEL_MAX) + 1; // rotates variable channel 1..WIFI_CHANNEL_MAX
|
||||||
wifi_sniffer_set_channel(channel);
|
wifi_sniffer_set_channel(channel);
|
||||||
ESP_LOGD(TAG, "Wifi set channel %d", channel);
|
ESP_LOGD(TAG, "Wifi set channel %d", channel);
|
||||||
|
|
||||||
// duration of one wifi scan loop reached? then send data and begin new scan cycle
|
// duration of one wifi scan loop reached? then send data and begin new scan cycle
|
||||||
if ( nloop >= ( (100 / cfg.wifichancycle) * (cfg.wifiscancycle * 2)) +1 ) {
|
if ( nloop >= ( (100 / cfg.wifichancycle) * (cfg.wifiscancycle * 2)) +1 ) {
|
||||||
|
|
||||||
nloop=0; channel=0; // reset wifi scan + channel loop counter
|
nloop=0; channel=0; // reset wifi scan + channel loop counter
|
||||||
do_send(&sendjob); // Prepare and execute LoRaWAN data upload
|
do_send(&sendjob); // Prepare and execute LoRaWAN data upload
|
||||||
vTaskDelay(500/portTICK_PERIOD_MS);
|
|
||||||
yield();
|
//vTaskDelay(500/portTICK_PERIOD_MS); // tbd - is this delay really needed here?
|
||||||
|
//yield();
|
||||||
|
|
||||||
// clear counter if not in cumulative counter mode
|
// clear counter if not in cumulative counter mode
|
||||||
if (cfg.countermode != 1) {
|
if (cfg.countermode != 1) {
|
||||||
macs.clear(); // clear all macs container
|
reset_counters(); // clear macs container and reset all counters
|
||||||
macs_total = 0; // reset all counters
|
reset_salt(); // get new salt for salting hashes
|
||||||
macs_wifi = 0;
|
|
||||||
macs_ble = 0;
|
|
||||||
salt_reset(); // get new salt for salting hashes
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if payload is sent
|
// check if payload is sent
|
||||||
@ -275,6 +252,9 @@ void sniffer_loop(void * pvParameters) {
|
|||||||
|
|
||||||
} // end of send data cycle
|
} // end of send data cycle
|
||||||
|
|
||||||
|
vTaskDelay(cfg.wifichancycle*10 / portTICK_PERIOD_MS);
|
||||||
|
yield();
|
||||||
|
|
||||||
} // end of infinite wifi channel rotation loop
|
} // end of infinite wifi channel rotation loop
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -536,7 +516,7 @@ wifi_sniffer_init(); // setup wifi in monitor mode and start MAC counting
|
|||||||
|
|
||||||
// initialize salt value using esp_random() called by random() in arduino-esp32 core
|
// initialize salt value using esp_random() called by random() in arduino-esp32 core
|
||||||
// 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
|
||||||
salt_reset(); // 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 task on core 0 and lora task on core 1 and bt task on core 0
|
||||||
ESP_LOGI(TAG, "Starting Lora task on core 1");
|
ESP_LOGI(TAG, "Starting Lora task on core 1");
|
||||||
|
146
src/main.h
146
src/main.h
@ -1,131 +1,41 @@
|
|||||||
#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.3.1" // use max 10 chars here!
|
#define PROGVERSION "1.3.2" // use max 10 chars here!
|
||||||
#define PROGNAME "PAXCNT"
|
#define PROGNAME "PAXCNT"
|
||||||
|
|
||||||
// Verbose enables serial output
|
//--- Declarations ---
|
||||||
#define VERBOSE 1 // comment out to silence the device, for mute use build option
|
|
||||||
|
|
||||||
// set this to include BLE counting and vendor filter functions
|
enum states {
|
||||||
#define VENDORFILTER 1 // comment out if you want to count things, not people
|
LED_ON,
|
||||||
#define BLECOUNTER 1 // comment out if you don't want BLE count
|
LED_OFF
|
||||||
|
};
|
||||||
|
|
||||||
// BLE scan parameters
|
//--- Prototypes ---
|
||||||
#define BLESCANTIME 11 // [seconds] scan duration, see note below
|
|
||||||
#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
|
|
||||||
|
|
||||||
/* Note: guide for setting bluetooth parameters
|
// defined in main.cpp
|
||||||
*
|
void set_LED (uint16_t set_color, uint16_t set_blinkduration, uint16_t set_interval, uint8_t set_count);
|
||||||
* |< Scan Window > |< Scan Window > |< Scan Window > |
|
void reset_counters();
|
||||||
* |< Scan Interval >|< Scan Interval >|< Scan Interval >|
|
|
||||||
* |< Scan duration >|
|
|
||||||
*
|
|
||||||
* Scan duration sets how long scanning should be going on, interrupting a wifi scan cycle.
|
|
||||||
* Scan window sets how much of the interval should be occupied by scanning.
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// WiFi scan parameters
|
// defined in configmanager.cpp
|
||||||
#define WIFI_CHANNEL_MIN 1 // start channel number where scan begings
|
void eraseConfig(void);
|
||||||
#define WIFI_CHANNEL_MAX 13 // total channel number to scan
|
void saveConfig(void);
|
||||||
#define WIFI_MY_COUNTRY "EU" // select locale for Wifi RF settings
|
void loadConfig(void);
|
||||||
#define WIFI_CHANNEL_SWITCH_INTERVAL 50 // [seconds/100] -> 0,5 sec.
|
|
||||||
|
|
||||||
// LoRa payload send cycle
|
// defined in lorawan.cpp
|
||||||
//#define SEND_SECS 120 // [seconds/2] -> 240 sec.
|
void onEvent(ev_t ev);
|
||||||
#define SEND_SECS 30 // [seconds/2] -> 60 sec.
|
void do_send(osjob_t* j);
|
||||||
|
void gen_lora_deveui(uint8_t * pdeveui);
|
||||||
|
void RevBytes(unsigned char* b, size_t c);
|
||||||
|
void get_hard_deveui(uint8_t *pdeveui);
|
||||||
|
|
||||||
// Default LoRa Spreadfactor
|
// defined in wifisniffer.cpp
|
||||||
#define LORASFDEFAULT 9 // 7 ... 12 SF, according to LoRaWAN specs
|
void wifi_sniffer_init(void);
|
||||||
#define MAXLORARETRY 500 // maximum count of TX retries if LoRa busy
|
void wifi_sniffer_set_channel(uint8_t channel);
|
||||||
#define RCMDPORT 2 // LoRaWAN Port on which device listenes for remote commands
|
void wifi_sniffer_packet_handler(void *buff, wifi_promiscuous_pkt_type_t type);
|
||||||
|
|
||||||
// Default RGB LED luminosity (in %)
|
// defined in blescan.cpp
|
||||||
#define RGBLUMINOSITY 30 // 30%
|
void bt_loop(void *ignore);
|
||||||
|
|
||||||
// OLED Display refresh cycle (in Milliseconds)
|
// defined in main.cpp
|
||||||
#define DISPLAYREFRESH_MS 40 // e.g. 40ms -> 1000/40 = 25 frames per second
|
void reset_counters(void);
|
||||||
|
|
||||||
// LMIC settings
|
|
||||||
// define hardware independent LMIC settings here, settings of standard library in /lmic/config.h will be ignored
|
|
||||||
// define hardware specifics settings in platformio.ini as build_flag for hardware environment
|
|
||||||
|
|
||||||
// Select frequency band here according to national regulations
|
|
||||||
#define CFG_eu868 1
|
|
||||||
//#define CFG_us915 1
|
|
||||||
|
|
||||||
// This is the SX1272/SX1273 radio, which is also used on the HopeRF
|
|
||||||
// RFM92 boards.
|
|
||||||
//#define CFG_sx1272_radio 1
|
|
||||||
// This is the SX1276/SX1277/SX1278/SX1279 radio, which is also used on
|
|
||||||
// the HopeRF RFM95 boards.
|
|
||||||
//#define CFG_sx1276_radio 1
|
|
||||||
|
|
||||||
// 16 μs per tick
|
|
||||||
// LMIC requires ticks to be 15.5μs - 100 μs long
|
|
||||||
#define US_PER_OSTICK_EXPONENT 4
|
|
||||||
#define US_PER_OSTICK (1 << US_PER_OSTICK_EXPONENT)
|
|
||||||
#define OSTICKS_PER_SEC (1000000 / US_PER_OSTICK)
|
|
||||||
|
|
||||||
// Set this to 1 to enable some basic debug output (using printf) about
|
|
||||||
// RF settings used during transmission and reception. Set to 2 to
|
|
||||||
// enable more verbose output. Make sure that printf is actually
|
|
||||||
// configured (e.g. on AVR it is not by default), otherwise using it can
|
|
||||||
// cause crashing.
|
|
||||||
//#define LMIC_DEBUG_LEVEL 1
|
|
||||||
|
|
||||||
// Enable this to allow using printf() to print to the given serial port
|
|
||||||
// (or any other Print object). This can be easy for debugging. The
|
|
||||||
// current implementation only works on AVR, though.
|
|
||||||
//#define LMIC_PRINTF_TO Serial
|
|
||||||
|
|
||||||
// Any runtime assertion failures are printed to this serial port (or
|
|
||||||
// any other Print object). If this is unset, any failures just silently
|
|
||||||
// halt execution.
|
|
||||||
#define LMIC_FAILURE_TO Serial
|
|
||||||
|
|
||||||
// Uncomment this to disable all code related to joining
|
|
||||||
//#define DISABLE_JOIN
|
|
||||||
// Uncomment this to disable all code related to ping
|
|
||||||
#define DISABLE_PING
|
|
||||||
// Uncomment this to disable all code related to beacon tracking.
|
|
||||||
// Requires ping to be disabled too
|
|
||||||
#define DISABLE_BEACONS
|
|
||||||
|
|
||||||
// Uncomment these to disable the corresponding MAC commands.
|
|
||||||
// Class A
|
|
||||||
//#define DISABLE_MCMD_DCAP_REQ // duty cycle cap
|
|
||||||
//#define DISABLE_MCMD_DN2P_SET // 2nd DN window param
|
|
||||||
//#define DISABLE_MCMD_SNCH_REQ // set new channel
|
|
||||||
// Class B
|
|
||||||
//#define DISABLE_MCMD_PING_SET // set ping freq, automatically disabled by DISABLE_PING
|
|
||||||
//#define DISABLE_MCMD_BCNI_ANS // next beacon start, automatical disabled by DISABLE_BEACON
|
|
||||||
|
|
||||||
// In LoRaWAN, a gateway applies I/Q inversion on TX, and nodes do the
|
|
||||||
// same on RX. This ensures that gateways can talk to nodes and vice
|
|
||||||
// versa, but gateways will not hear other gateways and nodes will not
|
|
||||||
// hear other nodes. By uncommenting this macro, this inversion is
|
|
||||||
// disabled and this node can hear other nodes. If two nodes both have
|
|
||||||
// this macro set, they can talk to each other (but they can no longer
|
|
||||||
// hear gateways). This should probably only be used when debugging
|
|
||||||
// and/or when talking to the radio directly (e.g. like in the "raw"
|
|
||||||
// example).
|
|
||||||
//#define DISABLE_INVERT_IQ_ON_RX
|
|
||||||
|
|
||||||
// This allows choosing between multiple included AES implementations.
|
|
||||||
// Make sure exactly one of these is uncommented.
|
|
||||||
//
|
|
||||||
// This selects the original AES implementation included LMIC. This
|
|
||||||
// implementation is optimized for speed on 32-bit processors using
|
|
||||||
// fairly big lookup tables, but it takes up big amounts of flash on the
|
|
||||||
// AVR architecture.
|
|
||||||
#define USE_ORIGINAL_AES
|
|
||||||
//
|
|
||||||
// This selects the AES implementation written by Ideetroon for their
|
|
||||||
// own LoRaWAN library. It also uses lookup tables, but smaller
|
|
||||||
// byte-oriented ones, making it use a lot less flash space (but it is
|
|
||||||
// also about twice as slow as the original).
|
|
||||||
// #define USE_IDEETRON_AES
|
|
129
src/paxcounter.conf
Normal file
129
src/paxcounter.conf
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
// ----- Paxcounter user config file ------
|
||||||
|
//
|
||||||
|
// --> adapt to your needs and use case <--
|
||||||
|
|
||||||
|
// Verbose enables serial output
|
||||||
|
#define VERBOSE 1 // comment out to silence the device, for mute use build option
|
||||||
|
|
||||||
|
// set this to include BLE counting and vendor filter functions
|
||||||
|
#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
|
||||||
|
|
||||||
|
// BLE scan parameters
|
||||||
|
#define BLESCANTIME 11 // [seconds] scan duration, see note below
|
||||||
|
#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
|
||||||
|
|
||||||
|
/* Note: guide for setting bluetooth parameters
|
||||||
|
*
|
||||||
|
* |< Scan Window > |< Scan Window > |< Scan Window > |
|
||||||
|
* |< Scan Interval >|< Scan Interval >|< Scan Interval >|
|
||||||
|
* |< Scan duration >|
|
||||||
|
*
|
||||||
|
* Scan duration sets how long scanning should be going on, interrupting a wifi scan cycle.
|
||||||
|
* Scan window sets how much of the interval should be occupied by scanning.
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// WiFi scan parameters
|
||||||
|
#define WIFI_CHANNEL_MIN 1 // start channel number where scan begings
|
||||||
|
#define WIFI_CHANNEL_MAX 13 // total channel number to scan
|
||||||
|
#define WIFI_MY_COUNTRY "EU" // select locale for Wifi RF settings
|
||||||
|
#define WIFI_CHANNEL_SWITCH_INTERVAL 50 // [seconds/100] -> 0,5 sec.
|
||||||
|
|
||||||
|
// LoRa payload send cycle
|
||||||
|
//#define SEND_SECS 120 // [seconds/2] -> 240 sec.
|
||||||
|
#define SEND_SECS 30 // [seconds/2] -> 60 sec.
|
||||||
|
|
||||||
|
// Default LoRa Spreadfactor
|
||||||
|
#define LORASFDEFAULT 9 // 7 ... 12 SF, according to LoRaWAN specs
|
||||||
|
#define MAXLORARETRY 500 // maximum count of TX retries if LoRa busy
|
||||||
|
#define RCMDPORT 2 // LoRaWAN Port on which device listenes for remote commands
|
||||||
|
|
||||||
|
// Default RGB LED luminosity (in %)
|
||||||
|
#define RGBLUMINOSITY 30 // 30%
|
||||||
|
|
||||||
|
// OLED Display refresh cycle (in Milliseconds)
|
||||||
|
#define DISPLAYREFRESH_MS 40 // e.g. 40ms -> 1000/40 = 25 frames per second
|
||||||
|
|
||||||
|
// LMIC settings
|
||||||
|
// define hardware independent LMIC settings here, settings of standard library in /lmic/config.h will be ignored
|
||||||
|
// define hardware specifics settings in platformio.ini as build_flag for hardware environment
|
||||||
|
|
||||||
|
// Select frequency band here according to national regulations
|
||||||
|
#define CFG_eu868 1
|
||||||
|
//#define CFG_us915 1
|
||||||
|
|
||||||
|
// This is the SX1272/SX1273 radio, which is also used on the HopeRF
|
||||||
|
// RFM92 boards.
|
||||||
|
//#define CFG_sx1272_radio 1
|
||||||
|
// This is the SX1276/SX1277/SX1278/SX1279 radio, which is also used on
|
||||||
|
// the HopeRF RFM95 boards.
|
||||||
|
//#define CFG_sx1276_radio 1
|
||||||
|
|
||||||
|
// 16 μs per tick
|
||||||
|
// LMIC requires ticks to be 15.5μs - 100 μs long
|
||||||
|
#define US_PER_OSTICK_EXPONENT 4
|
||||||
|
#define US_PER_OSTICK (1 << US_PER_OSTICK_EXPONENT)
|
||||||
|
#define OSTICKS_PER_SEC (1000000 / US_PER_OSTICK)
|
||||||
|
|
||||||
|
// Set this to 1 to enable some basic debug output (using printf) about
|
||||||
|
// RF settings used during transmission and reception. Set to 2 to
|
||||||
|
// enable more verbose output. Make sure that printf is actually
|
||||||
|
// configured (e.g. on AVR it is not by default), otherwise using it can
|
||||||
|
// cause crashing.
|
||||||
|
//#define LMIC_DEBUG_LEVEL 1
|
||||||
|
|
||||||
|
// Enable this to allow using printf() to print to the given serial port
|
||||||
|
// (or any other Print object). This can be easy for debugging. The
|
||||||
|
// current implementation only works on AVR, though.
|
||||||
|
//#define LMIC_PRINTF_TO Serial
|
||||||
|
|
||||||
|
// Any runtime assertion failures are printed to this serial port (or
|
||||||
|
// any other Print object). If this is unset, any failures just silently
|
||||||
|
// halt execution.
|
||||||
|
#define LMIC_FAILURE_TO Serial
|
||||||
|
|
||||||
|
// Uncomment this to disable all code related to joining
|
||||||
|
//#define DISABLE_JOIN
|
||||||
|
// Uncomment this to disable all code related to ping
|
||||||
|
#define DISABLE_PING
|
||||||
|
// Uncomment this to disable all code related to beacon tracking.
|
||||||
|
// Requires ping to be disabled too
|
||||||
|
#define DISABLE_BEACONS
|
||||||
|
|
||||||
|
// Uncomment these to disable the corresponding MAC commands.
|
||||||
|
// Class A
|
||||||
|
//#define DISABLE_MCMD_DCAP_REQ // duty cycle cap
|
||||||
|
//#define DISABLE_MCMD_DN2P_SET // 2nd DN window param
|
||||||
|
//#define DISABLE_MCMD_SNCH_REQ // set new channel
|
||||||
|
// Class B
|
||||||
|
//#define DISABLE_MCMD_PING_SET // set ping freq, automatically disabled by DISABLE_PING
|
||||||
|
//#define DISABLE_MCMD_BCNI_ANS // next beacon start, automatical disabled by DISABLE_BEACON
|
||||||
|
|
||||||
|
// In LoRaWAN, a gateway applies I/Q inversion on TX, and nodes do the
|
||||||
|
// same on RX. This ensures that gateways can talk to nodes and vice
|
||||||
|
// versa, but gateways will not hear other gateways and nodes will not
|
||||||
|
// hear other nodes. By uncommenting this macro, this inversion is
|
||||||
|
// disabled and this node can hear other nodes. If two nodes both have
|
||||||
|
// this macro set, they can talk to each other (but they can no longer
|
||||||
|
// hear gateways). This should probably only be used when debugging
|
||||||
|
// and/or when talking to the radio directly (e.g. like in the "raw"
|
||||||
|
// example).
|
||||||
|
//#define DISABLE_INVERT_IQ_ON_RX
|
||||||
|
|
||||||
|
// This allows choosing between multiple included AES implementations.
|
||||||
|
// Make sure exactly one of these is uncommented.
|
||||||
|
//
|
||||||
|
// This selects the original AES implementation included LMIC. This
|
||||||
|
// implementation is optimized for speed on 32-bit processors using
|
||||||
|
// fairly big lookup tables, but it takes up big amounts of flash on the
|
||||||
|
// AVR architecture.
|
||||||
|
#define USE_ORIGINAL_AES
|
||||||
|
//
|
||||||
|
// This selects the AES implementation written by Ideetroon for their
|
||||||
|
// own LoRaWAN library. It also uses lookup tables, but smaller
|
||||||
|
// byte-oriented ones, making it use a lot less flash space (but it is
|
||||||
|
// also about twice as slow as the original).
|
||||||
|
// #define USE_IDEETRON_AES
|
@ -19,10 +19,6 @@ typedef struct {
|
|||||||
const bool store;
|
const bool store;
|
||||||
} cmd_t;
|
} cmd_t;
|
||||||
|
|
||||||
// functions defined in configmanager.cpp
|
|
||||||
void eraseConfig(void);
|
|
||||||
void saveConfig(void);
|
|
||||||
|
|
||||||
// function defined in antenna.cpp
|
// function defined in antenna.cpp
|
||||||
#ifdef HAS_ANTENNA_SWITCH
|
#ifdef HAS_ANTENNA_SWITCH
|
||||||
void antenna_select(const int8_t _ant);
|
void antenna_select(const int8_t _ant);
|
||||||
@ -64,11 +60,8 @@ void set_reset(int val) {
|
|||||||
break;
|
break;
|
||||||
case 1: // reset MAC counter
|
case 1: // reset MAC counter
|
||||||
ESP_LOGI(TAG, "Remote command: reset MAC counter");
|
ESP_LOGI(TAG, "Remote command: reset MAC counter");
|
||||||
macs.clear(); // clear all macs container
|
reset_counters(); // clear macs
|
||||||
macs_total = 0; // reset all counters
|
reset_salt(); // get new salt
|
||||||
macs_wifi = 0;
|
|
||||||
macs_ble = 0;
|
|
||||||
salt_reset(); // get new 16bit salt
|
|
||||||
sprintf(display_lora, "Reset counter");
|
sprintf(display_lora, "Reset counter");
|
||||||
break;
|
break;
|
||||||
case 2: // reset device to factory settings
|
case 2: // reset device to factory settings
|
||||||
|
Loading…
Reference in New Issue
Block a user