Added Leds managment
This commit is contained in:
parent
c5d82fb1e0
commit
121e79cd7c
112
src/main.cpp
112
src/main.cpp
@ -25,6 +25,9 @@ Refer to LICENSE.txt file in repository for more details.
|
||||
#include "main.h"
|
||||
#include "globals.h"
|
||||
|
||||
// std::set for unified array functions
|
||||
#include <set>
|
||||
|
||||
// OLED driver
|
||||
#include <U8x8lib.h>
|
||||
|
||||
@ -42,7 +45,7 @@ configData_t cfg; // struct holds current device configuration
|
||||
osjob_t sendjob, initjob; // LMIC
|
||||
|
||||
// Initialize global variables
|
||||
int macnum = 0, wifimac = 0, mactot = 0, salt;
|
||||
int macnum = 0, salt;
|
||||
uint64_t uptimecounter = 0;
|
||||
bool joinstate = false;
|
||||
|
||||
@ -52,7 +55,6 @@ std::set<uint32_t> wifis; // associative container holds filtered Wifi MAC adres
|
||||
#ifdef BLECOUNTER
|
||||
std::set<uint32_t> bles; // associative container holds filtered BLE MAC adresses
|
||||
int scanTime;
|
||||
int blemac = 0;
|
||||
#endif
|
||||
|
||||
// this variable will be changed in the ISR, and read in main loop
|
||||
@ -74,29 +76,19 @@ void eraseConfig(void);
|
||||
void saveConfig(void);
|
||||
void loadConfig(void);
|
||||
|
||||
/* begin LMIC specific parts ------------------------------------------------------------ */
|
||||
#ifdef HAS_LED
|
||||
void set_onboard_led(int st);
|
||||
#endif
|
||||
|
||||
// LMIC enhanced Pin mapping
|
||||
const lmic_pinmap lmic_pins = {
|
||||
.mosi = PIN_SPI_MOSI,
|
||||
.miso = PIN_SPI_MISO,
|
||||
.sck = PIN_SPI_SCK,
|
||||
.nss = PIN_SPI_SS,
|
||||
.rxtx = LMIC_UNUSED_PIN,
|
||||
.rst = RST,
|
||||
.dio = {DIO0, DIO1, DIO2}
|
||||
};
|
||||
/* begin LMIC specific parts ------------------------------------------------------------ */
|
||||
|
||||
// defined in lorawan.cpp
|
||||
void gen_lora_deveui(uint8_t * pdeveui);
|
||||
void RevBytes(unsigned char* b, size_t c);
|
||||
|
||||
#ifdef VERBOSE
|
||||
void printKeys(void);
|
||||
#endif
|
||||
|
||||
// LMIC functions
|
||||
void onEvent(ev_t ev);
|
||||
void do_send(osjob_t* j);
|
||||
#endif // VERBOSE
|
||||
|
||||
// LMIC callback functions
|
||||
void os_getDevKey (u1_t *buf) {
|
||||
@ -119,6 +111,21 @@ void os_getDevEui (u1_t* buf) {
|
||||
gen_lora_deveui(buf); // generate DEVEUI from device's MAC
|
||||
}
|
||||
|
||||
// LMIC enhanced Pin mapping
|
||||
const lmic_pinmap lmic_pins = {
|
||||
.mosi = PIN_SPI_MOSI,
|
||||
.miso = PIN_SPI_MISO,
|
||||
.sck = PIN_SPI_SCK,
|
||||
.nss = PIN_SPI_SS,
|
||||
.rxtx = LMIC_UNUSED_PIN,
|
||||
.rst = RST,
|
||||
.dio = {DIO0, DIO1, DIO2}
|
||||
};
|
||||
|
||||
// LMIC functions
|
||||
void onEvent(ev_t ev);
|
||||
void do_send(osjob_t* j);
|
||||
|
||||
// LoRaWAN Initjob
|
||||
static void lora_init (osjob_t* j) {
|
||||
// reset MAC state
|
||||
@ -132,8 +139,47 @@ static void lora_init (osjob_t* j) {
|
||||
// LMIC Task
|
||||
void lorawan_loop(void * pvParameters) {
|
||||
configASSERT( ( ( uint32_t ) pvParameters ) == 1 ); // FreeRTOS check
|
||||
|
||||
static bool led_state ;
|
||||
bool new_led_state ;
|
||||
|
||||
while(1) {
|
||||
uint16_t color;
|
||||
os_runloop_once();
|
||||
|
||||
// All follow is Led management
|
||||
// Let join at the begining of if sequence,
|
||||
// is prior to send because joining state send data
|
||||
if ( LMIC.opmode & (OP_JOINING | OP_REJOIN) ) {
|
||||
color = COLOR_YELLOW;
|
||||
// Joining Quick blink 20ms on each 1/5 second
|
||||
new_led_state = ((millis() % 200) < 20) ? HIGH : LOW;
|
||||
|
||||
// Small blink 10ms on each 1/2sec (not when joining)
|
||||
} else if (LMIC.opmode & (OP_TXDATA | OP_TXRXPEND)) {
|
||||
color = COLOR_BLUE;
|
||||
new_led_state = ((millis() % 500) < 20) ? HIGH : LOW;
|
||||
}
|
||||
|
||||
// This should not happen so indicate a pb
|
||||
if ( LMIC.opmode & (OP_TXDATA | OP_TXRXPEND | OP_JOINING | OP_REJOIN) == 0 ) {
|
||||
color = COLOR_RED;
|
||||
// Heartbeat long blink 200ms on each 2 seconds
|
||||
new_led_state = ((millis() % 2000) < 200) ? HIGH : LOW;
|
||||
}
|
||||
// led need to change state ?
|
||||
// avoid digitalWrite() for nothing
|
||||
if (led_state != new_led_state) {
|
||||
if (new_led_state == HIGH) {
|
||||
set_onboard_led(1);
|
||||
rgb_set_color(color);
|
||||
} else {
|
||||
set_onboard_led(0);
|
||||
rgb_set_color(COLOR_NONE);
|
||||
}
|
||||
led_state = new_led_state;
|
||||
}
|
||||
|
||||
vTaskDelay(10/portTICK_PERIOD_MS);
|
||||
yield();
|
||||
}
|
||||
@ -166,12 +212,18 @@ void lorawan_loop(void * pvParameters) {
|
||||
void set_onboard_led(int st){
|
||||
#ifdef HAS_LED
|
||||
switch (st) {
|
||||
case 1: digitalWrite(HAS_LED, HIGH); break;
|
||||
case 0: digitalWrite(HAS_LED, LOW); break;
|
||||
#ifdef LED_ACTIVE_LOW
|
||||
case 1: digitalWrite(HAS_LED, LOW); break;
|
||||
case 0: digitalWrite(HAS_LED, HIGH); break;
|
||||
#else
|
||||
case 1: digitalWrite(HAS_LED, HIGH); break;
|
||||
case 0: digitalWrite(HAS_LED, LOW); break;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
#ifdef HAS_BUTTON
|
||||
// Button Handling, board dependent -> perhaps to be moved to hal/<$board.h>
|
||||
// IRAM_ATTR necessary here, see https://github.com/espressif/arduino-esp32/issues/855
|
||||
@ -204,8 +256,8 @@ void wifi_sniffer_loop(void * pvParameters) {
|
||||
yield();
|
||||
wifi_sniffer_set_channel(channel);
|
||||
channel = (channel % WIFI_CHANNEL_MAX) + 1;
|
||||
ESP_LOGI(TAG, "Wifi set channel %d", channel);
|
||||
|
||||
// Prepare and execute LoRaWAN data upload
|
||||
u8x8.setCursor(0,5);
|
||||
u8x8.printf(!cfg.rssilimit ? "RLIM: off" : "RLIM: %4i", cfg.rssilimit);
|
||||
u8x8.setCursor(11,5);
|
||||
@ -213,12 +265,13 @@ void wifi_sniffer_loop(void * pvParameters) {
|
||||
u8x8.setCursor(0,4);
|
||||
u8x8.printf("MAC#: %-5i", wifis.size());
|
||||
|
||||
// execute BLE count if BLE function is enabled
|
||||
#ifdef BLECOUNTER
|
||||
// Once 2 full Wifi Channels scan, do a BLE scan
|
||||
if (nloop % (WIFI_CHANNEL_MAX*2) == 0 ) {
|
||||
// execute BLE count if BLE function is enabled
|
||||
if (cfg.blescan)
|
||||
BLECount();
|
||||
// execute BLE count if BLE function is enabled
|
||||
if (cfg.blescan)
|
||||
BLECount();
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -261,8 +314,10 @@ void wifi_sniffer_loop(void * pvParameters) {
|
||||
}
|
||||
|
||||
u8x8.clearLine(6);
|
||||
|
||||
if (cfg.screenon && cfg.screensaver) vTaskDelay(2000/portTICK_PERIOD_MS); // pause for displaying results
|
||||
|
||||
if (cfg.screenon && cfg.screensaver) {
|
||||
vTaskDelay(2000/portTICK_PERIOD_MS); // pause for displaying results
|
||||
}
|
||||
yield();
|
||||
u8x8.setPowerSave(1 && cfg.screensaver); // set display off if screensaver is enabled
|
||||
}
|
||||
@ -360,7 +415,8 @@ void setup() {
|
||||
#endif
|
||||
|
||||
ESP_LOGI(TAG, "Starting %s %s", PROGNAME, PROGVERSION);
|
||||
|
||||
rgb_set_color(COLOR_NONE);
|
||||
|
||||
// system event handler for wifi task, needed for wifi_sniffer_init()
|
||||
esp_event_loop_init(NULL, NULL);
|
||||
|
||||
@ -379,7 +435,7 @@ void setup() {
|
||||
|
||||
// Read settings from NVRAM
|
||||
loadConfig(); // includes initialize if necessary
|
||||
|
||||
|
||||
// initialize hardware
|
||||
#ifdef HAS_LED
|
||||
// initialize LED
|
||||
|
Loading…
Reference in New Issue
Block a user