new led management (part 1)

This commit is contained in:
Klaus K Wilting 2018-04-17 22:42:06 +02:00
parent f6864b1973
commit 758a960371
4 changed files with 47 additions and 67 deletions

View File

@ -11,9 +11,9 @@
; ---> SELECT TARGET PLATFORM HERE! <--- ; ---> SELECT TARGET PLATFORM HERE! <---
[platformio] [platformio]
;env_default = heltec_wifi_lora_32 env_default = heltec_wifi_lora_32
;env_default = ttgov1 ;env_default = ttgov1
env_default = ttgov2 ;env_default = ttgov2
;env_default = lopy ;env_default = lopy
;env_default = lopy4 ;env_default = lopy4
;env_default = lolin32lite_lora ;env_default = lolin32lite_lora

View File

@ -11,6 +11,9 @@
// 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};
uint16_t salt; uint16_t salt;
@ -49,21 +52,16 @@ bool mac_add(uint8_t *paddr, int8_t rssi, bool sniff_type) {
// 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 ) { if (sniff_type == MAC_SNIFF_WIFI ) {
rgb_set_color(COLOR_GREEN); set_LED(COLOR_GREEN, 20, 0, 1);
wifis.insert(hashedmac); // add hashed MAC to wifi container wifis.insert(hashedmac); // add hashed MAC to wifi container
} }
#ifdef BLECOUNTER #ifdef BLECOUNTER
else if (sniff_type == MAC_SNIFF_BLE ) { else if (sniff_type == MAC_SNIFF_BLE ) {
rgb_set_color(COLOR_MAGENTA); set_LED(COLOR_MAGENTA, 20, 0, 1);
bles.insert(hashedmac); // add hashed MAC to BLE container bles.insert(hashedmac); // add hashed MAC to BLE container
} }
#endif #endif
// Not sure user will have time to see the LED
// 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 BLTH:%d %s", ESP_LOGI(TAG, "%s RSSI %ddBi -> MAC %s -> Hash %04X -> WiFi:%d BLTH:%d %s",

View File

@ -46,9 +46,9 @@ osjob_t sendjob, initjob; // LMIC
// Initialize global variables // Initialize global variables
char display_lora[16], display_lmic[16]; // display buffers char display_lora[16], display_lmic[16]; // display buffers
uint64_t uptimecounter = 0; uint64_t uptimecounter = 0;
uint32_t currentMillis = 0, previousLEDmillis = 0, previousDisplaymillis = 0; uint32_t currentMillis = 0, previousDisplaymillis = 0;
uint8_t DisplayState, LEDState; uint8_t DisplayState, LEDState = 0, LEDcount = 0;
uint16_t LEDBlinkduration = 500, LEDInterval = 1000, color = COLOR_NONE; uint16_t LEDBlinkduration = 0, LEDInterval = 0, color=COLOR_NONE;
uint8_t channel = 0; // wifi channel counter uint8_t channel = 0; // wifi channel counter
bool joinstate = false; bool joinstate = false;
@ -79,6 +79,14 @@ void eraseConfig(void);
void saveConfig(void); void saveConfig(void);
void loadConfig(void); void loadConfig(void);
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
LEDInterval = set_interval; // duration off - on - off
LEDcount = set_count * 2; // number of blinks before LED off
LEDState = set_count ? 1 : 0; // sets LED to off if 0 blinks
}
/* begin LMIC specific parts ------------------------------------------------------------ */ /* begin LMIC specific parts ------------------------------------------------------------ */
// defined in lorawan.cpp // defined in lorawan.cpp
@ -144,13 +152,6 @@ static void lora_init (osjob_t* j) {
LMIC_startJoining(); LMIC_startJoining();
} }
void set_LED (uint16_t set_color, uint16_t set_blinkduration, uint16_t set_interval, uint8_t set_state) {
color = set_color;
LEDBlinkduration = set_blinkduration;
LEDInterval = set_interval;
LEDState = set_state;
}
// 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
@ -161,16 +162,16 @@ void lorawan_loop(void * pvParameters) {
// LED indicators for viusalizing LoRaWAN state // LED indicators for viusalizing LoRaWAN state
if ( LMIC.opmode & (OP_JOINING | OP_REJOIN) ) { if ( LMIC.opmode & (OP_JOINING | OP_REJOIN) ) {
// quick blink 20ms on each 1/5 second // 5 quick blinks 20ms on each 1/5 second while joining
set_LED(COLOR_YELLOW, 20, 200, 1); set_LED(COLOR_YELLOW, 20, 200, 5);
// TX data pending // TX data pending
} else if (LMIC.opmode & (OP_TXDATA | OP_TXRXPEND)) { } else if (LMIC.opmode & (OP_TXDATA | OP_TXRXPEND)) {
// small blink 10ms on each 1/2sec (not when joining) // 3 small blink 10ms on each 1/2sec (not when joining)
set_LED(COLOR_BLUE, 10, 500, 1); set_LED(COLOR_BLUE, 10, 500, 3);
// This should not happen so indicate a problem // This should not happen so indicate a problem
} else if ( LMIC.opmode & (OP_TXDATA | OP_TXRXPEND | OP_JOINING | OP_REJOIN) == 0 ) { } else if ( LMIC.opmode & (OP_TXDATA | OP_TXRXPEND | OP_JOINING | OP_REJOIN) == 0 ) {
// heartbeat long blink 200ms on each 2 seconds // 5 heartbeat long blink 200ms on each 2 seconds
set_LED(COLOR_RED, 200, 2000, 1); set_LED(COLOR_RED, 200, 2000, 5);
} else { } else {
// led off // led off
set_LED(COLOR_NONE, 0, 0, 0); set_LED(COLOR_NONE, 0, 0, 0);
@ -412,39 +413,30 @@ uint64_t uptime() {
#endif #endif
#ifdef HAS_LED #ifdef HAS_LED
void updateLEDstatus() { void switchLED() {
if (LEDState == 0) {
if (currentMillis - previousLEDmillis >= LEDInterval) {
LEDState = 1;
previousLEDmillis += LEDInterval;
}
}
else {
if (currentMillis - previousLEDmillis >= LEDBlinkduration) {
LEDState = 0;
previousLEDmillis += LEDBlinkduration;
}
}
}; // updateLEDstatus()
void refreshLED() {
static bool previousLEDState; static bool previousLEDState;
// led need to change state? avoid digitalWrite() for nothing // led need to change state? avoid digitalWrite() for nothing
if (LEDState != previousLEDState) { if (LEDState != previousLEDState) {
#ifdef LED_ACTIVE_LOW #ifdef LED_ACTIVE_LOW
digitalWrite(HAS_LED, LEDState);
#else
digitalWrite(HAS_LED, !LEDState); digitalWrite(HAS_LED, !LEDState);
#else
digitalWrite(HAS_LED, LEDState);
#endif #endif
#ifdef HAS_RGB_LED #ifdef HAS_RGB_LED
rgb_set_color(color); rgb_set_color(color);
#endif #endif
previousLEDState = LEDState; previousLEDState = LEDState;
LEDcount--; // decrement blink counter
} }
}; // refreshLED() }; // switchLED()
void switchLEDstate() {
if (!LEDcount) // no more blinks? -> switch off LED
LEDState = 0;
else if (LEDInterval) // blinks left? -> toggle LED and decrement blinks
LEDState = ((currentMillis % LEDInterval) < LEDBlinkduration) ? 1 : 0;
} // switchLEDstate()
#endif #endif
@ -469,7 +461,6 @@ void setup() {
#endif #endif
ESP_LOGI(TAG, "Starting %s %s", PROGNAME, PROGVERSION); ESP_LOGI(TAG, "Starting %s %s", PROGNAME, PROGVERSION);
rgb_set_color(COLOR_NONE);
// initialize system event handler for wifi task, needed for wifi_sniffer_init() // initialize system event handler for wifi task, needed for wifi_sniffer_init()
esp_event_loop_init(NULL, NULL); esp_event_loop_init(NULL, NULL);
@ -492,17 +483,8 @@ void setup() {
// initialize led if needed // initialize led if needed
#ifdef HAS_LED #ifdef HAS_LED
LEDState = 0;
color = COLOR_NONE;
pinMode(HAS_LED, OUTPUT); pinMode(HAS_LED, OUTPUT);
#ifdef LED_ACTIVE_LOW set_LED(COLOR_NONE, 0, 0, 0); // LED off
digitalWrite(HAS_LED, LEDState);
#else
digitalWrite(HAS_LED, !LEDState);
#endif
#ifdef HAS_RBG_LED
rgb_set_color (color);
#endif
#endif #endif
// initialize button handling if needed // initialize button handling if needed
@ -593,8 +575,8 @@ void loop() {
#endif #endif
#ifdef HAS_LED #ifdef HAS_LED
updateLEDstatus(); switchLEDstate();
refreshLED(); switchLED();
#endif #endif
//sendPayload(); //sendPayload();