lmic event msg display optimizations

This commit is contained in:
Verkehrsrot 2019-10-12 14:07:55 +02:00
parent b2300d0c23
commit 7e5d053ec5
7 changed files with 37 additions and 29 deletions

View File

@ -41,6 +41,9 @@
#define BLE_MODE (0x40)
#define SCREEN_MODE (0x80)
// length of display buffer for lmic event messages
#define LMIC_EVENTMSG_LEN 17
// I2C bus access control
#define I2C_MUTEX_LOCK() \
(xSemaphoreTake(I2Caccess, pdMS_TO_TICKS(10)) == pdTRUE)
@ -105,7 +108,7 @@ extern std::array<uint64_t, 0xff>::iterator it;
extern std::array<uint64_t, 0xff> beacons;
extern configData_t cfg; // current device configuration
extern char lmic_event_msg[]; // display buffer
extern char lmic_event_msg[LMIC_EVENTMSG_LEN]; // display buffer
extern uint8_t volatile channel; // wifi channel rotation counter
extern uint16_t volatile macs_total, macs_wifi, macs_ble,
batt_voltage; // display values

View File

@ -20,7 +20,6 @@
#include <Wire.h>
#endif
extern QueueHandle_t LoraSendQueue;
extern TaskHandle_t lmicTask, lorasendTask;
// table of LORAWAN MAC commands

View File

@ -179,7 +179,7 @@ void saveConfig() {
// set and save cfg.version
void migrateVersion() {
sprintf(cfg.version, "%s", PROGVERSION);
snprintf(cfg.version, 10, "%s", PROGVERSION);
ESP_LOGI(TAG, "version set to %s", cfg.version);
saveConfig();
}

View File

@ -15,13 +15,15 @@ Display-Mask (128 x 64 pixel):
4|WIFI:abcde BLTH:abcde SMALL
5|RLIM:abcd Mem:abcdKB SMALL
6|27.Feb 2019 20:27:00* SMALL
7|yyyyyyyyyyyyyyyy SFab SMALL
7|yyyyyyyyyyyyy xx SFab SMALL
* = char {L|G|R|?} indicates time source,
inverse = clock controller is active,
pulsed = pps input signal is active
y = LMIC event message; ab = payload queue length
y = LMIC event message
xx = payload sendqueue length
ab = LMIC spread factor
FONT_SMALL: 6x8px = 21 chars / line
FONT_NORMAL: 8x8px = 16 chars / line
@ -108,7 +110,7 @@ void init_display(uint8_t verbose) {
uint8_t buf[8];
char deveui[17];
os_getDevEui((u1_t *)buf);
sprintf(deveui, "%016llX", *((uint64_t *)&buf));
snprintf(deveui, 17, "%016llX", *((uint64_t *)&buf));
// display DEVEUI as QR code on the left
oledSetContrast(30);
@ -175,7 +177,6 @@ void refreshTheDisplay(bool nextPage) {
void draw_page(time_t t, uint8_t page) {
char timeState;
uint8_t msgWaiting;
#if (HAS_GPS)
static bool wasnofix = true;
#endif
@ -248,18 +249,10 @@ void draw_page(time_t t, uint8_t page) {
// line 7: LORA network status
#if (HAS_LORA)
// LMiC event display, display inverse if sendqueue not empty
msgWaiting = uxQueueMessagesWaiting(LoraSendQueue);
if (msgWaiting)
dp_printf(0, 7, FONT_SMALL, 1, "%-16s", lmic_event_msg);
else
// LMiC event display
dp_printf(0, 7, FONT_SMALL, 0, "%-16s", lmic_event_msg);
// LORA datarate, display inverse if ADR disabled
if (cfg.adrmode)
dp_printf(100, 7, FONT_SMALL, 0, "%-4s",
getSfName(updr2rps(LMIC.datarate)));
else
dp_printf(100, 7, FONT_SMALL, 1, "%-4s",
dp_printf(104, 7, FONT_SMALL, !cfg.adrmode, "%-4s",
getSfName(updr2rps(LMIC.datarate)));
#endif // HAS_LORA

View File

@ -346,8 +346,14 @@ void lora_enqueuedata(MessageBuffer_t *message) {
ret = xQueueSendToBack(LoraSendQueue, (void *)message, (TickType_t)0);
break;
}
if (ret != pdTRUE)
if (ret != pdTRUE) {
snprintf(lmic_event_msg + 14, LMIC_EVENTMSG_LEN - 14, "<>");
ESP_LOGW(TAG, "LORA sendqueue is full");
} else {
// add Lora send queue length to display
snprintf(lmic_event_msg + 14, LMIC_EVENTMSG_LEN - 14, "%2u",
uxQueueMessagesWaiting(LoraSendQueue));
}
}
void lora_queuereset(void) { xQueueReset(LoraSendQueue); }
@ -438,12 +444,15 @@ void myEventCallback(void *pUserData, ev_t ev) {
// using message descriptors from LMIC library
static const char *const evNames[] = {LMIC_EVENT_NAME_TABLE__INIT};
// get current length of lora send queue
uint8_t const msgWaiting = uxQueueMessagesWaiting(LoraSendQueue);
// get current event message
if (ev < sizeof(evNames) / sizeof(evNames[0]))
sprintf(lmic_event_msg, "%s", evNames[ev] + 3); // +3 to strip "EV_"
snprintf(lmic_event_msg, LMIC_EVENTMSG_LEN, "%-16s",
evNames[ev] + 3); // +3 to strip "EV_"
else
sprintf(lmic_event_msg, "LMIC event %d", ev);
snprintf(lmic_event_msg, LMIC_EVENTMSG_LEN, "LMIC event %-04u ", ev);
// process current event message
switch (ev) {
@ -459,12 +468,16 @@ void myEventCallback(void *pUserData, ev_t ev) {
case EV_JOIN_TXCOMPLETE:
// replace descriptor from library with more descriptive term
lmic_event_msg = "JOIN_WAIT";
snprintf(lmic_event_msg, LMIC_EVENTMSG_LEN, "%-16s", "JOIN_WAIT");
break;
}
// print event
ESP_LOGD(TAG, "%s", lmic_event_msg);
// add Lora send queue length to display
if (msgWaiting)
snprintf(lmic_event_msg + 14, LMIC_EVENTMSG_LEN - 14, "%2u", msgWaiting);
}
// receive message handler

View File

@ -30,7 +30,7 @@ void printKey(const char *name, const uint8_t *key, uint8_t len, bool lsb) {
char keystring[len + 1] = "", keybyte[3];
for (uint8_t i = 0; i < len; i++) {
p = lsb ? key + len - i - 1 : key + i;
sprintf(keybyte, "%02X", *p);
snprintf(keybyte, 3, "%02X", *p);
strncat(keystring, keybyte, 2);
}
ESP_LOGI(TAG, "%s: %s", name, keystring);

View File

@ -77,7 +77,7 @@ triggers pps 1 sec impulse
#include "main.h"
configData_t cfg; // struct holds current device configuration
char lmic_event_msg[16]; // display buffer for LMIC event message
char lmic_event_msg[LMIC_EVENTMSG_LEN]; // display buffer for LMIC event message
uint8_t volatile channel = 0; // channel rotation counter
uint16_t volatile macs_total = 0, macs_wifi = 0, macs_ble = 0,
batt_voltage = 0; // globals for display