Merge pull request #301 from cyberman54/development

v1.7.36
This commit is contained in:
Verkehrsrot 2019-03-07 21:31:15 +01:00 committed by GitHub
commit e42152aba3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 36 additions and 57 deletions

View File

@ -17,7 +17,6 @@ void housekeeping(void);
void doHousekeeping(void); void doHousekeeping(void);
uint64_t uptime(void); uint64_t uptime(void);
void reset_counters(void); void reset_counters(void);
int redirect_log(const char *fmt, va_list args);
uint32_t getFreeRAM(); uint32_t getFreeRAM();
#endif #endif

View File

@ -4,7 +4,7 @@
#include "globals.h" #include "globals.h"
#include "rcommand.h" #include "rcommand.h"
#include "timekeeper.h" #include "timekeeper.h"
#ifdef DBTIMESYNC #if(DBTIMESYNC)
#include "DBtimesync.h" #include "DBtimesync.h"
#endif #endif

View File

@ -9,7 +9,7 @@
#include <rom/rtc.h> #include <rom/rtc.h>
#include "cyclic.h" #include "cyclic.h"
#include "timekeeper.h" #include "timekeeper.h"
#ifdef DBTIMESYNC #if(DBTIMESYNC)
#include "DBtimesync.h" #include "DBtimesync.h"
#endif #endif

View File

@ -30,7 +30,7 @@ description = Paxcounter is a proof-of-concept ESP32 device for metering passeng
[common] [common]
; for release_version use max. 10 chars total, use any decimal format like "a.b.c" ; for release_version use max. 10 chars total, use any decimal format like "a.b.c"
release_version = 1.7.35 release_version = 1.7.36
; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running! ; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running!
; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose ; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose
debug_level = 3 debug_level = 3

View File

@ -146,7 +146,7 @@ IRAM_ATTR void gap_callback_handler(esp_gap_ble_cb_event_t event,
break; break;
} }
#ifdef VENDORFILTER #if(VENDORFILTER)
if ((p->scan_rst.ble_addr_type == BLE_ADDR_TYPE_RANDOM) || if ((p->scan_rst.ble_addr_type == BLE_ADDR_TYPE_RANDOM) ||
(p->scan_rst.ble_addr_type == BLE_ADDR_TYPE_RPA_RANDOM)) { (p->scan_rst.ble_addr_type == BLE_ADDR_TYPE_RPA_RANDOM)) {
@ -210,7 +210,7 @@ esp_err_t register_ble_callback(void) {
.scan_type = BLE_SCAN_TYPE_PASSIVE, .scan_type = BLE_SCAN_TYPE_PASSIVE,
.own_addr_type = BLE_ADDR_TYPE_RANDOM, .own_addr_type = BLE_ADDR_TYPE_RANDOM,
#ifdef VENDORFILTER #if(VENDORFILTER)
.scan_filter_policy = BLE_SCAN_FILTER_ALLOW_WLIST_PRA_DIR, .scan_filter_policy = BLE_SCAN_FILTER_ALLOW_WLIST_PRA_DIR,
// ADV_IND, ADV_NONCONN_IND, ADV_SCAN_IND packets are used for broadcasting // ADV_IND, ADV_NONCONN_IND, ADV_SCAN_IND packets are used for broadcasting
// data in broadcast applications (e.g., Beacons), so we don't want them in // data in broadcast applications (e.g., Beacons), so we don't want them in
@ -234,7 +234,7 @@ esp_err_t register_ble_callback(void) {
} // register_ble_callback } // register_ble_callback
void start_BLEscan(void) { void start_BLEscan(void) {
#ifdef BLECOUNTER #if(BLECOUNTER)
ESP_LOGI(TAG, "Initializing bluetooth scanner ..."); ESP_LOGI(TAG, "Initializing bluetooth scanner ...");
ESP_ERROR_CHECK(esp_coex_preference_set( ESP_ERROR_CHECK(esp_coex_preference_set(
@ -254,7 +254,7 @@ void start_BLEscan(void) {
} // start_BLEscan } // start_BLEscan
void stop_BLEscan(void) { void stop_BLEscan(void) {
#ifdef BLECOUNTER #if(BLECOUNTER)
ESP_LOGI(TAG, "Shutting down bluetooth scanner ..."); ESP_LOGI(TAG, "Shutting down bluetooth scanner ...");
ESP_ERROR_CHECK(esp_ble_gap_register_callback(NULL)); ESP_ERROR_CHECK(esp_ble_gap_register_callback(NULL));
ESP_ERROR_CHECK(esp_bluedroid_disable()); ESP_ERROR_CHECK(esp_bluedroid_disable());

View File

@ -116,10 +116,3 @@ void reset_counters() {
macs_wifi = 0; macs_wifi = 0;
macs_ble = 0; macs_ble = 0;
} }
#ifndef VERBOSE
int redirect_log(const char *fmt, va_list args) {
// do nothing
return 0;
}
#endif

View File

@ -89,7 +89,7 @@ void init_display(const char *Productname, const char *Version) {
#endif #endif
// Display chip information // Display chip information
#ifdef VERBOSE #if(VERBOSE)
esp_chip_info_t chip_info; esp_chip_info_t chip_info;
esp_chip_info(&chip_info); esp_chip_info(&chip_info);
u8x8.printf("ESP32 %d cores\nWiFi%s%s\n", chip_info.cores, u8x8.printf("ESP32 %d cores\nWiFi%s%s\n", chip_info.cores,
@ -114,7 +114,7 @@ void init_display(const char *Productname, const char *Version) {
u8x8.clear(); u8x8.clear();
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.draw2x2String(0, 0, "PAX:0");
#ifdef BLECOUNTER #if(BLECOUNTER)
u8x8.setCursor(0, 3); u8x8.setCursor(0, 3);
u8x8.printf("BLTH:0"); u8x8.printf("BLTH:0");
#endif #endif
@ -178,7 +178,7 @@ void refreshtheDisplay() {
#endif #endif
// update bluetooth counter + LoRa SF (line 3) // update bluetooth counter + LoRa SF (line 3)
#ifdef BLECOUNTER #if(BLECOUNTER)
u8x8.setCursor(0, 3); u8x8.setCursor(0, 3);
if (cfg.blescan) if (cfg.blescan)
u8x8.printf("BLTH:%-5d", macs_ble); u8x8.printf("BLTH:%-5d", macs_ble);

View File

@ -155,7 +155,7 @@ void get_hard_deveui(uint8_t *pdeveui) {
#endif // MCP 24AA02E64 #endif // MCP 24AA02E64
} }
#ifdef VERBOSE #if(VERBOSE)
// Display OTAA keys // Display OTAA keys
void showLoraKeys(void) { void showLoraKeys(void) {
@ -225,7 +225,7 @@ void onEvent(ev_t ev) {
case EV_TXCOMPLETE: case EV_TXCOMPLETE:
#ifdef DBTIMESYNC #if(DBTIMESYNC)
if (!(LMIC.txrxFlags & TXRX_ACK) && time_sync_seqNo) if (!(LMIC.txrxFlags & TXRX_ACK) && time_sync_seqNo)
time_sync_messages[time_sync_seqNo - 1] = LMIC.txend; time_sync_messages[time_sync_seqNo - 1] = LMIC.txend;
#endif #endif

View File

@ -2,7 +2,7 @@
// Basic Config // Basic Config
#include "globals.h" #include "globals.h"
#ifdef VENDORFILTER #if(VENDORFILTER)
#include "vendor_array.h" #include "vendor_array.h"
#endif #endif
@ -49,7 +49,7 @@ bool mac_add(uint8_t *paddr, int8_t rssi, bool sniff_type) {
int8_t beaconID; // beacon number in test monitor mode int8_t beaconID; // beacon number in test monitor mode
uint16_t hashedmac; // temporary buffer for generated hash value uint16_t hashedmac; // temporary buffer for generated hash value
uint32_t addr2int; // temporary buffer for shortened MAC uint32_t addr2int; // temporary buffer for shortened MAC
#ifdef VENDORFILTER #if(VENDORFILTER)
uint32_t vendor2int; // temporary buffer for Vendor OUI uint32_t vendor2int; // temporary buffer for Vendor OUI
#endif #endif
@ -58,7 +58,7 @@ bool mac_add(uint8_t *paddr, int8_t rssi, bool sniff_type) {
addr2int = ((uint32_t)paddr[2]) | ((uint32_t)paddr[3] << 8) | addr2int = ((uint32_t)paddr[2]) | ((uint32_t)paddr[3] << 8) |
((uint32_t)paddr[4] << 16) | ((uint32_t)paddr[5] << 24); ((uint32_t)paddr[4] << 16) | ((uint32_t)paddr[5] << 24);
#ifdef VENDORFILTER #if(VENDORFILTER)
vendor2int = ((uint32_t)paddr[2]) | ((uint32_t)paddr[1] << 8) | vendor2int = ((uint32_t)paddr[2]) | ((uint32_t)paddr[1] << 8) |
((uint32_t)paddr[0] << 16); ((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
@ -88,7 +88,7 @@ bool mac_add(uint8_t *paddr, int8_t rssi, bool sniff_type) {
blink_LED(COLOR_GREEN, 50); blink_LED(COLOR_GREEN, 50);
#endif #endif
} }
#ifdef BLECOUNTER #if(BLECOUNTER)
else if (sniff_type == MAC_SNIFF_BLE) { else if (sniff_type == MAC_SNIFF_BLE) {
macs_ble++; // increment BLE Macs counter macs_ble++; // increment BLE Macs counter
#if (HAS_LED != NOT_A_PIN) || defined(HAS_RGB_LED) #if (HAS_LED != NOT_A_PIN) || defined(HAS_RGB_LED)
@ -121,7 +121,7 @@ bool mac_add(uint8_t *paddr, int8_t rssi, bool sniff_type) {
sniff_type == MAC_SNIFF_WIFI ? "WiFi" : "BLTH", rssi, buff, sniff_type == MAC_SNIFF_WIFI ? "WiFi" : "BLTH", rssi, buff,
hashedmac, macs_wifi, macs_ble, getFreeRAM()); hashedmac, macs_wifi, macs_ble, getFreeRAM());
#ifdef VENDORFILTER #if(VENDORFILTER)
} else { } else {
// Very noisy // Very noisy
// ESP_LOGD(TAG, "Filtered MAC %02X:%02X:%02X:%02X:%02X:%02X", // ESP_LOGD(TAG, "Filtered MAC %02X:%02X:%02X:%02X:%02X:%02X",

View File

@ -105,9 +105,6 @@ static const char TAG[] = __FILE__;
void setup() { void setup() {
// disable the default wifi logging
esp_log_level_set("wifi", ESP_LOG_NONE);
char features[100] = ""; char features[100] = "";
// create some semaphores for syncing / mutexing tasks // create some semaphores for syncing / mutexing tasks
@ -124,19 +121,18 @@ void setup() {
#endif #endif
// setup debug output or silence device // setup debug output or silence device
#ifdef VERBOSE #if(VERBOSE)
Serial.begin(115200); Serial.begin(115200);
esp_log_level_set("*", ESP_LOG_VERBOSE); esp_log_level_set("*", ESP_LOG_VERBOSE);
#else #else
// mute logs completely by redirecting them to silence function // mute logs completely by redirecting them to silence function
esp_log_level_set("*", ESP_LOG_NONE); esp_log_level_set("*", ESP_LOG_NONE);
esp_log_set_vprintf(redirect_log);
#endif #endif
ESP_LOGI(TAG, "Starting %s v%s", PRODUCTNAME, PROGVERSION); ESP_LOGI(TAG, "Starting %s v%s", PRODUCTNAME, PROGVERSION);
// print chip information on startup if in verbose mode // print chip information on startup if in verbose mode
#ifdef VERBOSE #if(VERBOSE)
esp_chip_info_t chip_info; esp_chip_info_t chip_info;
esp_chip_info(&chip_info); esp_chip_info(&chip_info);
ESP_LOGI(TAG, ESP_LOGI(TAG,
@ -162,13 +158,14 @@ void setup() {
#ifdef HAS_LORA #ifdef HAS_LORA
ESP_LOGI(TAG, "IBM LMIC version %d.%d.%d", LMIC_VERSION_MAJOR, ESP_LOGI(TAG, "IBM LMIC version %d.%d.%d", LMIC_VERSION_MAJOR,
LMIC_VERSION_MINOR, LMIC_VERSION_BUILD); LMIC_VERSION_MINOR, LMIC_VERSION_BUILD);
ESP_LOGI(TAG, "Arduino LMIC version %d.%d.%d.%d", ESP_LOGI(TAG, "Arduino LMIC version %d.%d.%d.%d",
ARDUINO_LMIC_VERSION_GET_MAJOR(ARDUINO_LMIC_VERSION), ARDUINO_LMIC_VERSION_GET_MAJOR(ARDUINO_LMIC_VERSION),
ARDUINO_LMIC_VERSION_GET_MINOR(ARDUINO_LMIC_VERSION), ARDUINO_LMIC_VERSION_GET_MINOR(ARDUINO_LMIC_VERSION),
ARDUINO_LMIC_VERSION_GET_PATCH(ARDUINO_LMIC_VERSION), ARDUINO_LMIC_VERSION_GET_PATCH(ARDUINO_LMIC_VERSION),
ARDUINO_LMIC_VERSION_GET_LOCAL(ARDUINO_LMIC_VERSION)); ARDUINO_LMIC_VERSION_GET_LOCAL(ARDUINO_LMIC_VERSION));
#endif ESP_LOGI(TAG, "DEVEUI: ");
showLoraKeys();
#endif // HAS_LORA
#ifdef HAS_GPS #ifdef HAS_GPS
ESP_LOGI(TAG, "TinyGPS+ version %s", TinyGPSPlus::libraryVersion()); ESP_LOGI(TAG, "TinyGPS+ version %s", TinyGPSPlus::libraryVersion());
@ -230,7 +227,7 @@ void setup() {
batt_voltage = read_voltage(); batt_voltage = read_voltage();
#endif #endif
#ifdef USE_OTA #if(USE_OTA)
strcat_P(features, " OTA"); strcat_P(features, " OTA");
// reboot to firmware update mode if ota trigger switch is set // reboot to firmware update mode if ota trigger switch is set
if (cfg.runmode == 1) { if (cfg.runmode == 1) {
@ -242,7 +239,7 @@ void setup() {
// start BLE scan callback if BLE function is enabled in NVRAM configuration // start BLE scan callback if BLE function is enabled in NVRAM configuration
// or switch off bluetooth, if not compiled // or switch off bluetooth, if not compiled
#ifdef BLECOUNTER #if(BLECOUNTER)
strcat_P(features, " BLE"); strcat_P(features, " BLE");
if (cfg.blescan) { if (cfg.blescan) {
ESP_LOGI(TAG, "Starting Bluetooth..."); ESP_LOGI(TAG, "Starting Bluetooth...");
@ -251,10 +248,7 @@ void setup() {
btStop(); btStop();
#else #else
// remove bluetooth stack to gain more free memory // remove bluetooth stack to gain more free memory
ESP_ERROR_CHECK(esp_bluedroid_disable());
ESP_ERROR_CHECK(esp_bluedroid_deinit());
btStop(); btStop();
ESP_ERROR_CHECK(esp_bt_controller_deinit());
ESP_ERROR_CHECK(esp_bt_mem_release(ESP_BT_MODE_BTDM)); ESP_ERROR_CHECK(esp_bt_mem_release(ESP_BT_MODE_BTDM));
ESP_ERROR_CHECK(esp_coex_preference_set(( ESP_ERROR_CHECK(esp_coex_preference_set((
esp_coex_prefer_t)ESP_COEX_PREFER_WIFI)); // configure Wifi/BT coexist lib esp_coex_prefer_t)ESP_COEX_PREFER_WIFI)); // configure Wifi/BT coexist lib
@ -307,7 +301,7 @@ void setup() {
assert(spi_init() == ESP_OK); assert(spi_init() == ESP_OK);
#endif #endif
#ifdef VENDORFILTER #if(VENDORFILTER)
strcat_P(features, " OUIFLT"); strcat_P(features, " OUIFLT");
#endif #endif
@ -346,13 +340,6 @@ void setup() {
// show compiled features // show compiled features
ESP_LOGI(TAG, "Features:%s", features); ESP_LOGI(TAG, "Features:%s", features);
#ifdef HAS_LORA
// output LoRaWAN keys to console
#ifdef VERBOSE
showLoraKeys();
#endif
#endif
// start wifi in monitor mode and start channel rotation timer // start wifi in monitor mode and start channel rotation timer
ESP_LOGI(TAG, "Starting Wifi..."); ESP_LOGI(TAG, "Starting Wifi...");
wifi_sniffer_init(); wifi_sniffer_init();

View File

@ -7,15 +7,15 @@
#define PRODUCTNAME "PAXCNT" #define PRODUCTNAME "PAXCNT"
// Verbose enables serial output // Verbose enables serial output
#define VERBOSE 1 // comment out to silence the device, for mute use build option #define VERBOSE 1 // set to 0 to silence the device, for mute use build option
// Payload send cycle and encoding // Payload send cycle and encoding
#define SENDCYCLE 30 // payload send cycle [seconds/2], 0 .. 255 #define SENDCYCLE 30 // payload send cycle [seconds/2], 0 .. 255
#define PAYLOAD_ENCODER 2 // payload encoder: 1=Plain, 2=Packed, 3=Cayenne LPP dynamic, 4=Cayenne LPP packed #define PAYLOAD_ENCODER 2 // payload encoder: 1=Plain, 2=Packed, 3=Cayenne LPP dynamic, 4=Cayenne LPP packed
// 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 // set to 0 if you want to count things, not people
#define BLECOUNTER 1 // activate if you want to use BLE count, at expense of memory #define BLECOUNTER 0 // set it to 1 if you want to use BLE count, at expense of memory
// BLE scan parameters // BLE scan parameters
#define BLESCANTIME 0 // [seconds] scan duration, 0 means infinite [default], see note below #define BLESCANTIME 0 // [seconds] scan duration, 0 means infinite [default], see note below
@ -59,7 +59,7 @@
#define STATE_SAVE_PERIOD UINT32_C(360 * 60 * 1000) // update every 360 minutes = 4 times a day #define STATE_SAVE_PERIOD UINT32_C(360 * 60 * 1000) // update every 360 minutes = 4 times a day
// OTA settings // OTA settings
#define USE_OTA 1 // Comment out to disable OTA update #define USE_OTA 1 // set to 0 to disable OTA update
#define WIFI_MAX_TRY 5 // maximum number of wifi connect attempts for OTA update [default = 20] #define WIFI_MAX_TRY 5 // maximum number of wifi connect attempts for OTA update [default = 20]
#define OTA_MAX_TRY 5 // maximum number of attempts for OTA download and write to flash [default = 3] #define OTA_MAX_TRY 5 // maximum number of attempts for OTA download and write to flash [default = 3]
#define OTA_MIN_BATT 3600 // minimum battery level for OTA [millivolt] #define OTA_MIN_BATT 3600 // minimum battery level for OTA [millivolt]
@ -67,8 +67,8 @@
// settings for syncing time of node with external time source // settings for syncing time of node with external time source
#define TIME_SYNC_INTERVAL 2 // sync time attempt each .. minutes from time source (GPS/LORA/RTC) [default = 60], comment out means off #define TIME_SYNC_INTERVAL 2 // sync time attempt each .. minutes from time source (GPS/LORA/RTC) [default = 60], comment out means off
//#define TIME_SYNC_LORA 1 // use LORA network as time source, comment out means off [default = off] #define TIME_SYNC_LORA 0 // set to 1 to use LORA network as time source, comment out means off [default = off]
//#define DBTIMESYNC 1 // use DB LORA timeserver with patented sync algorithm [default = off] #define DBTIMESYNC 0 // set to 1 to use DB LORA timeserver with patented sync algorithm [default = off]
// time zone, see https://github.com/JChristensen/Timezone/blob/master/examples/WorldClock/WorldClock.ino // time zone, see https://github.com/JChristensen/Timezone/blob/master/examples/WorldClock/WorldClock.ino
#define DAYLIGHT_TIME {"CEST", Last, Sun, Mar, 2, 120} // Central European Summer Time #define DAYLIGHT_TIME {"CEST", Last, Sun, Mar, 2, 120} // Central European Summer Time

View File

@ -38,7 +38,7 @@ void set_reset(uint8_t val[]) {
break; break;
case 9: // reset and ask for software update via Wifi OTA case 9: // reset and ask for software update via Wifi OTA
ESP_LOGI(TAG, "Remote command: software update via Wifi"); ESP_LOGI(TAG, "Remote command: software update via Wifi");
#ifdef USE_OTA #if(USE_OTA)
sprintf(display_line6, "Software update"); sprintf(display_line6, "Software update");
cfg.runmode = 1; cfg.runmode = 1;
#else #else
@ -306,7 +306,7 @@ cmd_t table[] = {{0x01, set_rssi, 1, true},
{0x84, get_gps, 0, false}, {0x84, get_gps, 0, false},
{0x85, get_bme, 0, false}, {0x85, get_bme, 0, false},
{0x86, get_time, 0, false} {0x86, get_time, 0, false}
#ifdef DBTIMESYNC #if(DBTIMESYNC)
, ,
{TIME_ANS_OPCODE, recv_DBtime_ans, 0, false}, {TIME_ANS_OPCODE, recv_DBtime_ans, 0, false},
{TIME_SYNC_OPCODE, force_DBtime_sync, 0, false} {TIME_SYNC_OPCODE, force_DBtime_sync, 0, false}

View File

@ -36,10 +36,10 @@ time_t timeProvider(void) {
#endif #endif
// kick off asychronous DB timesync if we have // kick off asychronous DB timesync if we have
#ifdef DBTIMESYNC #if(DBTIMESYNC)
send_DBtime_req(); send_DBtime_req();
// kick off asychronous lora sync if we have // kick off asychronous lora sync if we have
#elif defined HAS_LORA && defined TIME_SYNC_LORA #elif defined HAS_LORA && (TIME_SYNC_LORA)
LMIC_requestNetworkTime(user_request_network_time_callback, &userUTCTime); LMIC_requestNetworkTime(user_request_network_time_callback, &userUTCTime);
#endif #endif