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 | ||||
|     -D_lmic_config_h_ | ||||
|     -include "src/main.h" | ||||
|     -include "src/paxcounter.conf" | ||||
| 
 | ||||
| [env:heltec_wifi_lora_32] | ||||
| platform = espressif32 | ||||
|  | ||||
| @ -233,8 +233,10 @@ esp_err_t register_ble_functionality(void) | ||||
| 
 | ||||
| 
 | ||||
| // 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; | ||||
| 	 | ||||
| 	// Initialize BT controller to allocate task and other resource. 
 | ||||
|  | ||||
| @ -18,7 +18,7 @@ esp_err_t err; | ||||
| 
 | ||||
| // populate cfg vars with factory settings
 | ||||
| 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.adrmode       = 1;              // 0=disabled, 1=enabled
 | ||||
|     cfg.screensaver   = 0;              // 0=disabled, 1=enabled
 | ||||
|  | ||||
| @ -22,6 +22,7 @@ | ||||
| 
 | ||||
| #include "rgb_led.h" | ||||
| #include "macsniff.h" | ||||
| #include "main.h" | ||||
| 
 | ||||
| // Struct holding devices's runtime configuration
 | ||||
| typedef struct { | ||||
|  | ||||
| @ -11,46 +11,44 @@ | ||||
| // Local logging tag
 | ||||
| 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}; | ||||
| 
 | ||||
| // globals
 | ||||
| uint16_t salt; | ||||
| 
 | ||||
| uint16_t salt_reset(void) { | ||||
|     salt = random(65536); // get new 16bit random for salting hashes
 | ||||
| uint16_t reset_salt(void) { | ||||
|     salt = random(65536); // get new 16bit random for salting hashes and set global salt var
 | ||||
|     return salt; | ||||
| } | ||||
| 
 | ||||
| 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; | ||||
|     uint32_t addr2int; | ||||
| 	uint32_t vendor2int; | ||||
| 	uint16_t hashedmac; | ||||
|     uint32_t addr2int, vendor2int;          // temporary buffer for MAC and Vendor OUI
 | ||||
| 	uint16_t hashedmac;                     // temporary buffer for generated hash value
 | ||||
| 
 | ||||
|     // 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
 | ||||
|     addr2int =  ( (uint32_t)paddr[2] ) | ( (uint32_t)paddr[3] << 8 ) | ( (uint32_t)paddr[4] << 16 ) | ( (uint32_t)paddr[5] << 24 ); | ||||
| 
 | ||||
|     #ifdef VENDORFILTER | ||||
|         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
 | ||||
|         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 | ||||
| 
 | ||||
|     // 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
 | ||||
| 			 | ||||
| 	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
 | ||||
| 	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
 | ||||
|     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 (sniff_type == MAC_SNIFF_WIFI ) { | ||||
|             macs_wifi++; // increment Wifi MACs counter
 | ||||
| @ -63,12 +61,12 @@ bool mac_add(uint8_t *paddr, int8_t rssi, bool sniff_type) { | ||||
|             } | ||||
|         #endif | ||||
|     }  | ||||
|          | ||||
|         ESP_LOGI(TAG, "%s RSSI %ddBi -> MAC %s -> Hash %04X -> WiFi:%d  BLTH:%d  %s",  | ||||
|                         sniff_type==MAC_SNIFF_WIFI ? "WiFi":"BLTH",  | ||||
|                         rssi, buff, hashedmac, | ||||
|                         macs_wifi,  | ||||
|                         added ? "new" : "known"); | ||||
| 
 | ||||
|     // Log scan result
 | ||||
|     ESP_LOGI(TAG, "%s RSSI %ddBi -> MAC %s -> Hash %04X -> WiFi:%d  BLTH:%d  %s",  | ||||
|         sniff_type==MAC_SNIFF_WIFI ? "WiFi":"BLTH",  | ||||
|         rssi, buff, hashedmac, macs_wifi,  | ||||
|         added ? "new" : "known"); | ||||
| 
 | ||||
|     #ifdef VENDORFILTER | ||||
|     } else { | ||||
|  | ||||
| @ -19,7 +19,7 @@ typedef struct { | ||||
|     uint8_t payload[0]; /* network data ended with 4 bytes csum (CRC32) */ | ||||
| } wifi_ieee80211_packet_t; | ||||
| 
 | ||||
| uint16_t salt_reset(void); | ||||
| uint16_t reset_salt(void); | ||||
| 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); | ||||
|  | ||||
							
								
								
									
										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 <hal/hal.h> | ||||
| 
 | ||||
| // ESP32 Functions
 | ||||
| #include <esp_event_loop.h> // needed for Wifi event handler
 | ||||
| #include <esp_spi_flash.h> // needed for reading ESP32 chip attributes
 | ||||
| #include <esp32-hal-log.h> // needed for ESP_LOGx on arduino framework
 | ||||
| // ESP32 lib Functions
 | ||||
| #include <esp_event_loop.h>         // needed for Wifi event handler
 | ||||
| #include <esp_spi_flash.h>          // needed for reading ESP32 chip attributes
 | ||||
| #include <esp32-hal-log.h>          // needed for ESP_LOGx on arduino framework
 | ||||
| 
 | ||||
| configData_t cfg; // struct holds current device configuration
 | ||||
| osjob_t sendjob, initjob; // LMIC
 | ||||
| 
 | ||||
| enum states {  | ||||
|   LED_ON, | ||||
|   LED_OFF | ||||
| }; | ||||
| configData_t cfg;                   // struct holds current device configuration
 | ||||
| osjob_t sendjob, initjob;           // LMIC jobs
 | ||||
| 
 | ||||
| // Initialize global variables
 | ||||
| char display_lora[16], display_lmic[16]; // display buffers
 | ||||
| @ -65,6 +60,7 @@ static volatile bool ButtonTriggered = false; | ||||
| static const char *TAG = "paxcnt"; | ||||
| // Note: Log level control seems not working during runtime,
 | ||||
| // so we need to switch loglevel by compiler build option in platformio.ini
 | ||||
| 
 | ||||
| #ifndef VERBOSE | ||||
| int redirect_log(const char * fmt, va_list args) { | ||||
|    //do nothing
 | ||||
| @ -72,30 +68,6 @@ int redirect_log(const char * fmt, va_list args) { | ||||
| } | ||||
| #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) { | ||||
|     color = set_color;                      // set color for RGB LED
 | ||||
|     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
 | ||||
| } | ||||
| 
 | ||||
| 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 ------------------------------------------------------------ */ | ||||
| 
 | ||||
| 
 | ||||
| @ -163,6 +142,7 @@ static void lora_init (osjob_t* j) { | ||||
| 
 | ||||
| // LMIC FreeRTos Task
 | ||||
| void lorawan_loop(void * pvParameters) { | ||||
| 
 | ||||
|     configASSERT( ( ( uint32_t ) pvParameters ) == 1 ); // FreeRTOS check
 | ||||
| 
 | ||||
|     while(1) { | ||||
| @ -227,34 +207,31 @@ void lorawan_loop(void * pvParameters) { | ||||
| void sniffer_loop(void * pvParameters) { | ||||
| 
 | ||||
|     configASSERT( ( ( uint32_t ) pvParameters ) == 1 ); // FreeRTOS check
 | ||||
|     channel=0; | ||||
| 
 | ||||
|     char buff[16]; | ||||
|     int nloop=0, lorawait=0; | ||||
|     | ||||
|   	while (true) { | ||||
|   	while (1) { | ||||
| 
 | ||||
|         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
 | ||||
|         wifi_sniffer_set_channel(channel); | ||||
|         ESP_LOGD(TAG, "Wifi set channel %d", channel); | ||||
| 
 | ||||
|         // duration of one wifi scan loop reached? then send data and begin new scan cycle
 | ||||
|         if ( nloop >= ( (100 / cfg.wifichancycle) * (cfg.wifiscancycle * 2)) +1 ) { | ||||
| 
 | ||||
|             nloop=0; channel=0;                         // reset wifi scan + channel loop counter           
 | ||||
|             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
 | ||||
|             if (cfg.countermode != 1) { | ||||
|                 macs.clear();                           // clear all macs container
 | ||||
|                 macs_total = 0;                         // reset all counters
 | ||||
|                 macs_wifi = 0; | ||||
|                 macs_ble = 0; | ||||
|                 salt_reset(); // get new salt for salting hashes
 | ||||
|                 reset_counters();                       // clear macs container and reset all counters
 | ||||
|                 reset_salt();                           // get new salt for salting hashes
 | ||||
|             }       | ||||
| 
 | ||||
|             // check if payload is sent
 | ||||
| @ -275,6 +252,9 @@ void sniffer_loop(void * pvParameters) { | ||||
|                      | ||||
|         } // end of send data cycle
 | ||||
|          | ||||
|         vTaskDelay(cfg.wifichancycle*10 / portTICK_PERIOD_MS); | ||||
|         yield(); | ||||
| 
 | ||||
|     } // 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
 | ||||
| // 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
 | ||||
| ESP_LOGI(TAG, "Starting Lora task on core 1"); | ||||
|  | ||||
							
								
								
									
										146
									
								
								src/main.h
									
									
									
									
									
								
							
							
						
						
									
										146
									
								
								src/main.h
									
									
									
									
									
								
							| @ -1,131 +1,41 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| // 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" | ||||
| 
 | ||||
| // Verbose enables serial output
 | ||||
| #define VERBOSE                         1       // comment out to silence the device, for mute use build option
 | ||||
| //--- Declarations ---
 | ||||
| 
 | ||||
| // 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
 | ||||
| enum states {  | ||||
|   LED_ON, | ||||
|   LED_OFF | ||||
| }; | ||||
| 
 | ||||
| // 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
 | ||||
| //--- Prototypes ---
 | ||||
| 
 | ||||
| /* 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. | ||||
| */ | ||||
| // defined in main.cpp
 | ||||
| void set_LED (uint16_t set_color, uint16_t set_blinkduration, uint16_t set_interval, uint8_t set_count); | ||||
| void reset_counters(); | ||||
| 
 | ||||
| // 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.
 | ||||
| // defined in configmanager.cpp
 | ||||
| void eraseConfig(void); | ||||
| void saveConfig(void); | ||||
| void loadConfig(void); | ||||
| 
 | ||||
| // LoRa payload send cycle
 | ||||
| //#define SEND_SECS                       120     // [seconds/2] -> 240 sec.
 | ||||
| #define SEND_SECS                       30    // [seconds/2] -> 60 sec.
 | ||||
| // 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); | ||||
| 
 | ||||
| // 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
 | ||||
| // 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); | ||||
| 
 | ||||
| // Default RGB LED luminosity (in %)
 | ||||
| #define RGBLUMINOSITY                   30      // 30%
 | ||||
| // defined in blescan.cpp
 | ||||
| void bt_loop(void *ignore); | ||||
| 
 | ||||
| // 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
 | ||||
| // defined in main.cpp
 | ||||
| void reset_counters(void); | ||||
							
								
								
									
										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; | ||||
| } cmd_t; | ||||
| 
 | ||||
| // functions defined in configmanager.cpp
 | ||||
| void eraseConfig(void); | ||||
| void saveConfig(void); | ||||
| 
 | ||||
| // function defined in antenna.cpp
 | ||||
| #ifdef HAS_ANTENNA_SWITCH | ||||
|     void antenna_select(const int8_t _ant); | ||||
| @ -64,11 +60,8 @@ void set_reset(int val) { | ||||
|             break; | ||||
|         case 1: // reset MAC counter
 | ||||
|             ESP_LOGI(TAG, "Remote command: reset MAC counter"); | ||||
|             macs.clear(); // clear all macs container
 | ||||
|             macs_total = 0; // reset all counters
 | ||||
|             macs_wifi = 0; | ||||
|             macs_ble = 0; | ||||
|             salt_reset(); // get new 16bit salt
 | ||||
|             reset_counters();   // clear macs
 | ||||
|             reset_salt();       // get new salt
 | ||||
|             sprintf(display_lora, "Reset counter"); | ||||
|             break; | ||||
|         case 2: // reset device to factory settings
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user