senddata restructured
This commit is contained in:
parent
f0cf08bd75
commit
786714d69a
@ -16,9 +16,11 @@
|
||||
#include <TinyGPS++.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAS_LORA
|
||||
// LMIC-Arduino LoRaWAN Stack
|
||||
#include <lmic.h>
|
||||
#include <hal/hal.h>
|
||||
#endif
|
||||
|
||||
// LED controls
|
||||
#ifdef HAS_RGB_LED
|
||||
@ -31,9 +33,8 @@
|
||||
#include "payload.h"
|
||||
|
||||
extern configData_t cfg;
|
||||
extern char display_line6[], display_line7[];
|
||||
extern uint64_t uptimecounter;
|
||||
extern osjob_t sendjob, rcmdjob;
|
||||
extern char display_lora[], display_lmic[];
|
||||
extern int countermode, screensaver, adrmode, lorasf, txpower, rlim;
|
||||
extern uint16_t macs_total, macs_wifi, macs_ble; // MAC counters
|
||||
extern std::set<uint16_t> macs;
|
||||
|
@ -1,20 +1,23 @@
|
||||
// Hardware related definitions for Pycom FiPy Board
|
||||
|
||||
#define HAS_LORA 1 // comment out if device shall not send data via LoRa
|
||||
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||
|
||||
#define CFG_sx1272_radio 1
|
||||
#define HAS_LED NOT_A_PIN // FiPy has no on board LED, so we use RGB LED
|
||||
#define HAS_RGB_LED GPIO_NUM_0 // WS2812B RGB LED on GPIO0
|
||||
#define BOARD_HAS_PSRAM // use extra 4MB extern RAM
|
||||
#define HAS_LED NOT_A_PIN // FiPy has no on board LED, so we use RGB LED
|
||||
#define HAS_RGB_LED GPIO_NUM_0 // WS2812B RGB LED on GPIO0
|
||||
#define BOARD_HAS_PSRAM // use extra 4MB extern RAM
|
||||
|
||||
// Hardware pin definitions for Pycom FiPy board
|
||||
#define PIN_SPI_SS GPIO_NUM_18
|
||||
#define PIN_SPI_MOSI GPIO_NUM_27
|
||||
#define PIN_SPI_MISO GPIO_NUM_19
|
||||
#define PIN_SPI_SCK GPIO_NUM_5
|
||||
#define RST LMIC_UNUSED_PIN
|
||||
#define DIO0 GPIO_NUM_23 // LoRa IRQ
|
||||
#define DIO1 GPIO_NUM_23 // workaround
|
||||
#define DIO2 LMIC_UNUSED_PIN
|
||||
#define PIN_SPI_SS GPIO_NUM_18
|
||||
#define PIN_SPI_MOSI GPIO_NUM_27
|
||||
#define PIN_SPI_MISO GPIO_NUM_19
|
||||
#define PIN_SPI_SCK GPIO_NUM_5
|
||||
#define RST LMIC_UNUSED_PIN
|
||||
#define DIO0 GPIO_NUM_23 // LoRa IRQ
|
||||
#define DIO1 GPIO_NUM_23 // workaround
|
||||
#define DIO2 LMIC_UNUSED_PIN
|
||||
|
||||
// select WIFI antenna (internal = onboard / external = u.fl socket)
|
||||
#define HAS_ANTENNA_SWITCH GPIO_NUM_21 // pin for switching wifi antenna
|
||||
#define WIFI_ANTENNA 0 // 0 = internal, 1 = external
|
||||
#define HAS_ANTENNA_SWITCH GPIO_NUM_21 // pin for switching wifi antenna
|
||||
#define WIFI_ANTENNA 0 // 0 = internal, 1 = external
|
||||
|
@ -1,5 +1,7 @@
|
||||
// Hardware related definitions for Heltec LoRa-32 Board
|
||||
|
||||
#define HAS_LORA 1 // comment out if device shall not send data via LoRa
|
||||
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||
#define CFG_sx1276_radio 1
|
||||
|
||||
#define HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C // OLED-Display on board
|
||||
|
@ -13,6 +13,8 @@
|
||||
#define HAS_BUTTON 15 // ESP32 GPIO15 (pin15) Button is on the LoraNode32 shield
|
||||
#define BUTTON_PULLUP 1 // Button need pullup instead of default pulldown
|
||||
|
||||
#define HAS_LORA 1 // comment out if device shall not send data via LoRa
|
||||
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||
#define CFG_sx1276_radio 1 // RFM95 module
|
||||
|
||||
// re-define pin definitions of pins_arduino.h
|
||||
|
@ -12,6 +12,8 @@
|
||||
#define HAS_BUTTON 15 // ESP32 GPIO15 (pin15) Button is on the LoraNode32 shield
|
||||
#define BUTTON_PULLUP 1 // Button need pullup instead of default pulldown
|
||||
|
||||
#define HAS_LORA 1 // comment out if device shall not send data via LoRa
|
||||
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||
#define CFG_sx1276_radio 1 // RFM95 module
|
||||
|
||||
// re-define pin definitions of pins_arduino.h
|
||||
|
@ -1,5 +1,7 @@
|
||||
// Hardware related definitions for Pycom LoPy Board (not: LoPy4)
|
||||
|
||||
#define HAS_LORA 1 // comment out if device shall not send data via LoRa
|
||||
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||
#define CFG_sx1272_radio 1
|
||||
#define HAS_LED NOT_A_PIN // LoPy4 has no on board LED, so we use RGB LED on LoPy4
|
||||
#define HAS_RGB_LED GPIO_NUM_0 // WS2812B RGB LED on GPIO0
|
||||
|
@ -1,5 +1,7 @@
|
||||
// Hardware related definitions for Pycom LoPy Board (not: LoPy4)
|
||||
|
||||
#define HAS_LORA 1 // comment out if device shall not send data via LoRa
|
||||
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||
#define CFG_sx1276_radio 1
|
||||
#define HAS_LED NOT_A_PIN // LoPy4 has no on board LED, so we use RGB LED on LoPy4
|
||||
#define HAS_RGB_LED GPIO_NUM_0 // WS2812B RGB LED on GPIO0
|
||||
|
@ -1,5 +1,7 @@
|
||||
// Hardware related definitions for TTGO T-Beam board
|
||||
|
||||
#define HAS_LORA 1 // comment out if device shall not send data via LoRa
|
||||
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||
#define CFG_sx1276_radio 1 // HPD13A LoRa SoC
|
||||
#define BOARD_HAS_PSRAM // use extra 4MB extern RAM
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
// Hardware related definitions for TTGOv1 board
|
||||
|
||||
#define HAS_LORA 1 // comment out if device shall not send data via LoRa
|
||||
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||
#define CFG_sx1276_radio 1
|
||||
|
||||
#define HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C // OLED-Display on board
|
||||
|
@ -1,5 +1,7 @@
|
||||
// Hardware related definitions for TTGO V2 Board
|
||||
|
||||
#define HAS_LORA 1 // comment out if device shall not send data via LoRa
|
||||
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||
#define CFG_sx1276_radio 1 // HPD13A LoRa SoC
|
||||
|
||||
#define HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C
|
||||
|
@ -6,7 +6,8 @@
|
||||
/ - labelled v1.6 on pcb -> "new"
|
||||
*/
|
||||
|
||||
|
||||
#define HAS_LORA 1 // comment out if device shall not send data via LoRa
|
||||
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||
#define CFG_sx1276_radio 1 // HPD13A LoRa SoC
|
||||
|
||||
#define HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C
|
||||
|
@ -1,3 +1,5 @@
|
||||
#ifdef HAS_LORA
|
||||
|
||||
/************************************************************
|
||||
* LMIC LoRaWAN configuration
|
||||
*
|
||||
@ -28,4 +30,6 @@ static const u1_t DEVEUI[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
static const u1_t APPEUI[8] = {0x70, 0xB3, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
|
||||
static const u1_t APPKEY[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
|
||||
#endif // HAS_LORA
|
@ -1,3 +1,5 @@
|
||||
#ifdef HAS_LORA
|
||||
|
||||
// Basic Config
|
||||
#include "globals.h"
|
||||
|
||||
@ -152,7 +154,7 @@ void onEvent(ev_t ev) {
|
||||
case EV_JOINED:
|
||||
|
||||
strcpy_P(buff, PSTR("JOINED"));
|
||||
sprintf(display_lora, " "); // clear previous lmic status
|
||||
sprintf(display_line6, " "); // clear previous lmic status
|
||||
|
||||
// set data rate adaptation
|
||||
LMIC_setAdrMode(cfg.adrmode);
|
||||
@ -169,14 +171,14 @@ void onEvent(ev_t ev) {
|
||||
|
||||
strcpy_P(buff, (LMIC.txrxFlags & TXRX_ACK) ? PSTR("RECEIVED ACK")
|
||||
: PSTR("TX COMPLETE"));
|
||||
sprintf(display_lora, " "); // clear previous lmic status
|
||||
sprintf(display_line6, " "); // clear previous lmic status
|
||||
|
||||
if (LMIC.dataLen) {
|
||||
ESP_LOGI(TAG, "Received %d bytes of payload, RSSI %d SNR %d",
|
||||
LMIC.dataLen, LMIC.rssi, (signed char)LMIC.snr / 4);
|
||||
// LMIC.snr = SNR twos compliment [dB] * 4
|
||||
// LMIC.rssi = RSSI [dBm] (-196...+63)
|
||||
sprintf(display_lora, "RSSI %d SNR %d", LMIC.rssi,
|
||||
sprintf(display_line6, "RSSI %d SNR %d", LMIC.rssi,
|
||||
(signed char)LMIC.snr / 4);
|
||||
|
||||
// check if payload received on command port, then call remote command
|
||||
@ -205,7 +207,9 @@ void onEvent(ev_t ev) {
|
||||
// Log & Display if asked
|
||||
if (*buff) {
|
||||
ESP_LOGI(TAG, "EV_%s", buff);
|
||||
sprintf(display_lmic, buff);
|
||||
sprintf(display_line7, buff);
|
||||
}
|
||||
|
||||
} // onEvent()
|
||||
|
||||
#endif // HAS_LORA
|
@ -1,3 +1,5 @@
|
||||
#ifdef HAS_LORA
|
||||
|
||||
#ifndef LORAWAN_H
|
||||
#define LORAWAN_H
|
||||
|
||||
@ -6,4 +8,6 @@ void gen_lora_deveui(uint8_t *pdeveui);
|
||||
void RevBytes(unsigned char *b, size_t c);
|
||||
void get_hard_deveui(uint8_t *pdeveui);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // HAS_LORA
|
57
src/main.cpp
57
src/main.cpp
@ -28,10 +28,12 @@ licenses. Refer to LICENSE.txt file in repository for more details.
|
||||
// Does nothing and avoid any compilation error with I2C
|
||||
#include <Wire.h>
|
||||
|
||||
#ifdef HAS_LORA
|
||||
// LMIC-Arduino LoRaWAN Stack
|
||||
#include "loraconf.h"
|
||||
#include <hal/hal.h>
|
||||
#include <lmic.h>
|
||||
#endif
|
||||
|
||||
// ESP32 lib Functions
|
||||
#include <esp32-hal-log.h> // needed for ESP_LOGx on arduino framework
|
||||
@ -39,15 +41,14 @@ licenses. Refer to LICENSE.txt file in repository for more details.
|
||||
#include <esp_spi_flash.h> // needed for reading ESP32 chip attributes
|
||||
|
||||
// Initialize global variables
|
||||
configData_t cfg; // struct holds current device configuration
|
||||
osjob_t sendjob, rcmdjob; // LMIC job handler
|
||||
uint64_t uptimecounter = 0; // timer global for uptime counter
|
||||
uint8_t DisplayState = 0; // globals for state machine
|
||||
configData_t cfg; // struct holds current device configuration
|
||||
char display_line6[16], display_line7[16]; // display buffers
|
||||
uint64_t uptimecounter = 0; // timer global for uptime counter
|
||||
uint8_t DisplayState = 0; // globals for state machine
|
||||
uint16_t macs_total = 0, macs_wifi = 0,
|
||||
macs_ble = 0; // MAC counters globals for display
|
||||
uint8_t channel = 0; // wifi channel rotation counter global for display
|
||||
char display_lora[16], display_lmic[16]; // display buffers
|
||||
led_states LEDState = LED_OFF; // LED state global for state machine
|
||||
led_states LEDState = LED_OFF; // LED state global for state machine
|
||||
led_states previousLEDState =
|
||||
LED_ON; // This will force LED to be off at boot since State is OFF
|
||||
unsigned long LEDBlinkStarted = 0; // When (in millis() led blink started)
|
||||
@ -105,6 +106,8 @@ void reset_counters() {
|
||||
/* begin LMIC specific parts
|
||||
* ------------------------------------------------------------ */
|
||||
|
||||
#ifdef HAS_LORA
|
||||
|
||||
#ifdef VERBOSE
|
||||
void printKeys(void);
|
||||
#endif // VERBOSE
|
||||
@ -156,6 +159,8 @@ void lorawan_loop(void *pvParameters) {
|
||||
}
|
||||
}
|
||||
|
||||
#endif // HAS_LORA
|
||||
|
||||
/* end LMIC specific parts
|
||||
* --------------------------------------------------------------- */
|
||||
|
||||
@ -238,6 +243,7 @@ uint64_t uptime() {
|
||||
|
||||
#ifdef HAS_DISPLAY
|
||||
|
||||
#ifdef HAS_LORA
|
||||
// Print a key on display
|
||||
void DisplayKey(const uint8_t *key, uint8_t len, bool lsb) {
|
||||
const uint8_t *p;
|
||||
@ -247,6 +253,7 @@ void DisplayKey(const uint8_t *key, uint8_t len, bool lsb) {
|
||||
}
|
||||
u8x8.printf("\n");
|
||||
}
|
||||
#endif // HAS_LORA
|
||||
|
||||
void init_display(const char *Productname, const char *Version) {
|
||||
uint8_t buf[32];
|
||||
@ -289,9 +296,13 @@ void init_display(const char *Productname, const char *Version) {
|
||||
u8x8.print(Productname);
|
||||
u8x8.print(" v");
|
||||
u8x8.println(PROGVERSION);
|
||||
|
||||
#ifdef HAS_LORA
|
||||
u8x8.println("DEVEUI:");
|
||||
os_getDevEui((u1_t *)buf);
|
||||
DisplayKey(buf, 8, true);
|
||||
#endif // HAS_LORA
|
||||
|
||||
delay(5000);
|
||||
u8x8.clear();
|
||||
}
|
||||
@ -325,6 +336,8 @@ void refreshDisplay() {
|
||||
else
|
||||
u8x8.printf("%s", "BLTH:off");
|
||||
#endif
|
||||
|
||||
#ifdef HAS_LORA
|
||||
u8x8.setCursor(11, 3);
|
||||
u8x8.printf("SF:");
|
||||
if (cfg.adrmode) // if ADR=on then display SF value inverse
|
||||
@ -333,6 +346,7 @@ void refreshDisplay() {
|
||||
lora_datarate[LMIC.datarate * 2 + 1]);
|
||||
if (cfg.adrmode) // switch off inverse if it was turned on
|
||||
u8x8.setInverseFont(0);
|
||||
#endif // HAS_LORA
|
||||
|
||||
// update wifi counter + channel display (line 4)
|
||||
u8x8.setCursor(0, 4);
|
||||
@ -346,13 +360,15 @@ void refreshDisplay() {
|
||||
u8x8.setCursor(10, 5);
|
||||
u8x8.printf("%4dKB", ESP.getFreeHeap() / 1024);
|
||||
|
||||
#ifdef HAS_LORA
|
||||
// update LoRa status display (line 6)
|
||||
u8x8.setCursor(0, 6);
|
||||
u8x8.printf("%-16s", display_lora);
|
||||
u8x8.printf("%-16s", display_line6);
|
||||
|
||||
// update LMiC event display (line 7)
|
||||
u8x8.setCursor(0, 7);
|
||||
u8x8.printf("%-16s", display_lmic);
|
||||
u8x8.printf("%-16s", display_line7);
|
||||
#endif // HAS_LORA
|
||||
}
|
||||
|
||||
void updateDisplay() {
|
||||
@ -417,6 +433,7 @@ void led_loop() {
|
||||
// No custom blink, check LoRaWAN state
|
||||
} else {
|
||||
|
||||
#ifdef HAS_LORA
|
||||
// LED indicators for viusalizing LoRaWAN state
|
||||
if (LMIC.opmode & (OP_JOINING | OP_REJOIN)) {
|
||||
LEDColor = COLOR_YELLOW;
|
||||
@ -425,7 +442,7 @@ void led_loop() {
|
||||
} else if (LMIC.opmode & (OP_TXDATA | OP_TXRXPEND)) {
|
||||
LEDColor = COLOR_BLUE;
|
||||
// small blink 10ms on each 1/2sec (not when joining)
|
||||
LEDState = ((millis() % 500) < 20) ? LED_ON : LED_OFF;
|
||||
LEDState = ((millis() % 500) < 10) ? LED_ON : LED_OFF;
|
||||
// This should not happen so indicate a problem
|
||||
} else if (LMIC.opmode &
|
||||
((OP_TXDATA | OP_TXRXPEND | OP_JOINING | OP_REJOIN) == 0)) {
|
||||
@ -433,6 +450,7 @@ void led_loop() {
|
||||
// heartbeat long blink 200ms on each 2 seconds
|
||||
LEDState = ((millis() % 2000) < 200) ? LED_ON : LED_OFF;
|
||||
} else {
|
||||
#endif // HAS_LORA
|
||||
// led off
|
||||
LEDColor = COLOR_NONE;
|
||||
LEDState = LED_OFF;
|
||||
@ -448,14 +466,14 @@ void led_loop() {
|
||||
#ifdef LED_ACTIVE_LOW
|
||||
digitalWrite(HAS_LED, LOW);
|
||||
#else
|
||||
digitalWrite(HAS_LED, HIGH);
|
||||
digitalWrite(HAS_LED, HIGH);
|
||||
#endif
|
||||
} else {
|
||||
rgb_set_color(COLOR_NONE);
|
||||
#ifdef LED_ACTIVE_LOW
|
||||
digitalWrite(HAS_LED, HIGH);
|
||||
#else
|
||||
digitalWrite(HAS_LED, LOW);
|
||||
digitalWrite(HAS_LED, LOW);
|
||||
#endif
|
||||
}
|
||||
previousLEDState = LEDState;
|
||||
@ -571,7 +589,9 @@ void setup() {
|
||||
u8x8.setCursor(0, 5);
|
||||
u8x8.printf(!cfg.rssilimit ? "RLIM:off " : "RLIM:%d", cfg.rssilimit);
|
||||
|
||||
sprintf(display_lora, "Join wait");
|
||||
#ifdef HAS_LORA
|
||||
sprintf(display_line6, "Join wait");
|
||||
#endif // HAS_LORA
|
||||
|
||||
// setup display refresh trigger IRQ using esp32 hardware timer 0
|
||||
// for explanation see
|
||||
@ -604,7 +624,9 @@ void setup() {
|
||||
// show compiled features
|
||||
ESP_LOGI(TAG, "Features: %s", features);
|
||||
|
||||
// output LoRaWAN keys to console
|
||||
#ifdef HAS_LORA
|
||||
|
||||
// output LoRaWAN keys to console
|
||||
#ifdef VERBOSE
|
||||
printKeys();
|
||||
#endif
|
||||
@ -624,6 +646,7 @@ void setup() {
|
||||
ESP_LOGI(TAG, "Starting Lora task on core 1");
|
||||
xTaskCreatePinnedToCore(lorawan_loop, "loratask", 2048, (void *)1,
|
||||
(5 | portPRIVILEGE_BIT), NULL, 1);
|
||||
#endif
|
||||
|
||||
// start wifi in monitor mode and start channel rotation task on core 0
|
||||
ESP_LOGI(TAG, "Starting Wifi task on core 0");
|
||||
@ -672,7 +695,7 @@ void loop() {
|
||||
uptimecounter = uptime() / 1000; // counts uptime in seconds (64bit)
|
||||
|
||||
// send data every x seconds, x/2 is configured in cfg.sendcycle
|
||||
if (uptime() % (cfg.sendcycle * 20000) == 0)
|
||||
if (uptime() % (cfg.sendcycle * 20000) < cfg.sendcycle * 2)
|
||||
senddata(PAYLOADPORT);
|
||||
|
||||
#if (HAS_LED != NOT_A_PIN) || defined(HAS_RGB_LED)
|
||||
@ -694,13 +717,13 @@ void loop() {
|
||||
"free heap = %d bytes)",
|
||||
esp_get_minimum_free_heap_size(), ESP.getFreeHeap());
|
||||
senddata(PAYLOADPORT); // send data before clearing counters
|
||||
reset_counters(); // clear macs container and reset all counters
|
||||
reset_salt(); // get new salt for salting hashes
|
||||
reset_counters(); // clear macs container and reset all counters
|
||||
reset_salt(); // get new salt for salting hashes
|
||||
}
|
||||
|
||||
#ifdef HAS_GPS
|
||||
// log NMEA status every 60 seconds, useful for debugging GPS connection
|
||||
if ((uptime() % 60000) == 0) {
|
||||
if ((uptime() % 60000) < 60) {
|
||||
ESP_LOGI(TAG, "GPS NMEA data: passed %d / failed: %d / with fix: %d",
|
||||
gps.passedChecksum(), gps.failedChecksum(),
|
||||
gps.sentencesWithFix());
|
||||
|
@ -4,10 +4,6 @@
|
||||
//
|
||||
// Note: After editing, before "build", use "clean" button in PlatformIO!
|
||||
|
||||
//
|
||||
#define HAS_LORA 1 // comment out if device shall not send data via LoRa
|
||||
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||
|
||||
// Verbose enables serial output
|
||||
#define VERBOSE 1 // comment out to silence the device, for mute use build option
|
||||
|
||||
@ -51,6 +47,8 @@
|
||||
#define MAXLORARETRY 500 // maximum count of TX retries if LoRa busy
|
||||
#define RCMDPORT 2 // LoRaWAN Port on which device listenes for remote commands
|
||||
#define PAYLOADPORT 1 // LoRaWAN Port on which device sends counts
|
||||
#define STATUSPORT 2 // LoRaWAN Port on which device sends status query results
|
||||
#define GPSPORT 3 // LoRaWAN Port on which device sends gps query results
|
||||
|
||||
// Default RGB LED luminosity (in %)
|
||||
#define RGBLUMINOSITY 30 // 30%
|
||||
|
@ -7,8 +7,8 @@
|
||||
#include "globals.h"
|
||||
|
||||
// LMIC-Arduino LoRaWAN Stack
|
||||
#include <lmic.h>
|
||||
#include <hal/hal.h>
|
||||
//#include <lmic.h>
|
||||
//#include <hal/hal.h>
|
||||
|
||||
// Local logging tag
|
||||
static const char TAG[] = "main";
|
||||
@ -30,23 +30,7 @@ void antenna_select(const uint8_t _ant);
|
||||
uint16_t read_voltage(void);
|
||||
#endif
|
||||
|
||||
// function sends result of get commands to LoRaWAN network
|
||||
void do_transmit(osjob_t *j) {
|
||||
// check if there is a pending TX/RX job running, if yes then reschedule
|
||||
// transmission
|
||||
if (LMIC.opmode & OP_TXRXPEND) {
|
||||
ESP_LOGI(TAG, "LoRa busy, rescheduling");
|
||||
sprintf(display_lmic, "LORA BUSY");
|
||||
os_setTimedCallback(&rcmdjob, os_getTime() + sec2osticks(RETRANSMIT_RCMD),
|
||||
do_transmit);
|
||||
}
|
||||
// send payload
|
||||
LMIC_setTxData2(RCMDPORT, payload.getBuffer(), payload.getSize(),
|
||||
(cfg.countermode & 0x02));
|
||||
ESP_LOGI(TAG, "%d bytes queued to send", payload.getSize());
|
||||
sprintf(display_lmic, "PACKET QUEUED");
|
||||
}
|
||||
|
||||
#ifdef HAS_LORA
|
||||
// help function to assign LoRa datarates to numeric spreadfactor values
|
||||
void switch_lora(uint8_t sf, uint8_t tx) {
|
||||
if (tx > 20)
|
||||
@ -93,13 +77,14 @@ void switch_lora(uint8_t sf, uint8_t tx) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif // HAS_LORA
|
||||
|
||||
// set of functions that can be triggered by remote commands
|
||||
void set_reset(uint8_t val) {
|
||||
switch (val) {
|
||||
case 0: // restart device
|
||||
ESP_LOGI(TAG, "Remote command: restart device");
|
||||
sprintf(display_lora, "Reset pending");
|
||||
sprintf(display_line6, "Reset pending");
|
||||
vTaskDelay(
|
||||
10000 /
|
||||
portTICK_PERIOD_MS); // wait for LMIC to confirm LoRa downlink to server
|
||||
@ -109,11 +94,11 @@ void set_reset(uint8_t val) {
|
||||
ESP_LOGI(TAG, "Remote command: reset MAC counter");
|
||||
reset_counters(); // clear macs
|
||||
reset_salt(); // get new salt
|
||||
sprintf(display_lora, "Reset counter");
|
||||
sprintf(display_line6, "Reset counter");
|
||||
break;
|
||||
case 2: // reset device to factory settings
|
||||
ESP_LOGI(TAG, "Remote command: reset device to factory settings");
|
||||
sprintf(display_lora, "Factory reset");
|
||||
sprintf(display_line6, "Factory reset");
|
||||
eraseConfig();
|
||||
break;
|
||||
}
|
||||
@ -208,11 +193,16 @@ void set_gps(uint8_t val) {
|
||||
};
|
||||
|
||||
void set_lorasf(uint8_t val) {
|
||||
#ifdef HAS_LORA
|
||||
ESP_LOGI(TAG, "Remote command: set LoRa SF to %d", val);
|
||||
switch_lora(val, cfg.txpower);
|
||||
#else
|
||||
ESP_LOGW(TAG, "Remote command: LoRa not implemented");
|
||||
#endif // HAS_LORA
|
||||
};
|
||||
|
||||
void set_loraadr(uint8_t val) {
|
||||
#ifdef HAS_LORA
|
||||
ESP_LOGI(TAG, "Remote command: set LoRa ADR mode to %s", val ? "on" : "off");
|
||||
switch (val) {
|
||||
case 1:
|
||||
@ -224,6 +214,9 @@ void set_loraadr(uint8_t val) {
|
||||
}
|
||||
LMIC_setAdrMode(cfg.adrmode);
|
||||
};
|
||||
#else
|
||||
ESP_LOGW(TAG, "Remote command: LoRa not implemented");
|
||||
#endif // HAS_LORA
|
||||
|
||||
void set_blescan(uint8_t val) {
|
||||
ESP_LOGI(TAG, "Remote command: set BLE scanner to %s", val ? "on" : "off");
|
||||
@ -280,15 +273,19 @@ void set_rgblum(uint8_t val) {
|
||||
};
|
||||
|
||||
void set_lorapower(uint8_t val) {
|
||||
#ifdef HAS_LORA
|
||||
ESP_LOGI(TAG, "Remote command: set LoRa TXPOWER to %d", val);
|
||||
switch_lora(cfg.lorasf, val);
|
||||
#else
|
||||
ESP_LOGW(TAG, "Remote command: LoRa not implemented");
|
||||
#endif // HAS_LORA
|
||||
};
|
||||
|
||||
void get_config(uint8_t val) {
|
||||
ESP_LOGI(TAG, "Remote command: get device configuration");
|
||||
payload.reset();
|
||||
payload.addConfig(cfg);
|
||||
do_transmit(&rcmdjob);
|
||||
senddata(STATUSPORT);
|
||||
};
|
||||
|
||||
void get_status(uint8_t val) {
|
||||
@ -296,11 +293,11 @@ void get_status(uint8_t val) {
|
||||
#ifdef HAS_BATTERY_PROBE
|
||||
uint16_t voltage = read_voltage();
|
||||
#else
|
||||
uint16_t voltage = 0;
|
||||
uint16_t voltage = 0;
|
||||
#endif
|
||||
payload.reset();
|
||||
payload.addStatus(voltage, uptimecounter, temperatureRead());
|
||||
do_transmit(&rcmdjob);
|
||||
senddata(STATUSPORT);
|
||||
};
|
||||
|
||||
void get_gps(uint8_t val) {
|
||||
@ -309,9 +306,9 @@ void get_gps(uint8_t val) {
|
||||
gps_read();
|
||||
payload.reset();
|
||||
payload.addGPS(gps_status);
|
||||
do_transmit(&rcmdjob);
|
||||
senddata(GPSPORT);
|
||||
#else
|
||||
ESP_LOGW(TAG, "GPS function not supported");
|
||||
ESP_LOGW(TAG, "GPS function not supported");
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -18,19 +18,20 @@ void senddata(uint8_t port) {
|
||||
#ifdef HAS_LORA
|
||||
// Check if there is a pending TX/RX job running
|
||||
if (LMIC.opmode & OP_TXRXPEND) {
|
||||
ESP_LOGI(TAG, "LoRa busy, rescheduling");
|
||||
sprintf(display_lmic, "LORA BUSY");
|
||||
ESP_LOGI(TAG, "LoRa busy, data not sent");
|
||||
sprintf(display_line7, "LORA BUSY");
|
||||
} else {
|
||||
// send payload via LoRa
|
||||
LMIC_setTxData2(PAYLOADPORT, payload.getBuffer(), payload.getSize(), (cfg.countermode & 0x02));
|
||||
LMIC_setTxData2(PAYLOADPORT, payload.getBuffer(), payload.getSize(),
|
||||
(cfg.countermode & 0x02));
|
||||
ESP_LOGI(TAG, "%d bytes queued to send on LoRa", payload.getSize());
|
||||
sprintf(display_lmic, "PACKET QUEUED");
|
||||
sprintf(display_line7, "PACKET QUEUED");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SPI
|
||||
// code for sending payload via SPI to come
|
||||
ESP_LOGI(TAG, "%d bytes sent on SPI", payload.getSize());
|
||||
// code for sending payload via SPI to come
|
||||
ESP_LOGI(TAG, "%d bytes sent on SPI", payload.getSize());
|
||||
#endif
|
||||
|
||||
// clear counter if not in cumulative counter mode
|
||||
@ -40,4 +41,4 @@ void senddata(uint8_t port) {
|
||||
ESP_LOGI(TAG, "Counter cleared (countermode = %d)", cfg.countermode);
|
||||
}
|
||||
|
||||
} // senddata
|
||||
} // senddata
|
Loading…
Reference in New Issue
Block a user