More logging cases

This commit is contained in:
Manuel Bl 2019-10-10 23:09:32 +02:00
parent 3ac63d4146
commit a8fd68ca5e
3 changed files with 113 additions and 23 deletions

View File

@ -43,10 +43,21 @@ struct TTNLogMessage {
u1_t saveIrqFlags;
};
static const char* const SF_NAMES[] = { "FSK", "SF7", "SF8", "SF9", "SF10", "SF11", "SF12", "SFrfu" };
static const char* const BW_NAMES[] = { "BW125", "BW250", "BW500", "BWrfu" };
static const char* const CR_NAMES[] = { "CR 4/5", "CR 4/6", "CR 4/7", "CR 4/8" };
static const char* const CRC_NAMES[] = { "NoCrc", "Crc" };
void TTNLogging::initInstance()
static void printMessage(TTNLogMessage* log);
static void printEvtJoined(TTNLogMessage* log);
static void printEvtJoinFailed(TTNLogMessage* log);
static void bin2hex(const uint8_t* bin, unsigned len, char* buf, char sep = 0);
TTNLogging* TTNLogging::initInstance()
{
ttnLog.init();
return &ttnLog;
}
void TTNLogging::init()
@ -122,25 +133,99 @@ void TTNLogging::loggingTask(void* param)
if (log == nullptr)
continue;
if (log->event == -1)
{
ESP_LOGI(TAG, "%s: opmode=0x%x", log->message, log->opmode);
}
else if (log->event == -2)
{
ESP_LOGI(TAG, "%s: datum=0x%x, opmode=0x%x)", log->message, log->datum, log->opmode);
}
else if (log->event == -3)
{
ESP_LOGE(TAG, "%s, %d: freq=%d.%d",
log->message, log->datum,
log->freq / 1000000, (log->freq % 1000000) / 100000
);
}
printMessage(log);
vRingbufferReturnItem(ringBuffer, log);
}
}
void printMessage(TTNLogMessage* log)
{
switch((int)log->event)
{
case -1:
ESP_LOGI(TAG, "%s: opmode=0x%x", log->message, log->opmode);
break;
case -2:
ESP_LOGI(TAG, "%s: datum=0x%x, opmode=0x%x)", log->message, log->datum, log->opmode);
break;
case -3:
ESP_LOGE(TAG, "%s, %d: freq=%d.%d",
log->message, log->datum,
log->freq / 1000000, (log->freq % 1000000) / 100000
);
break;
case EV_JOINED:
printEvtJoined(log);
break;
case EV_JOIN_FAILED:
printEvtJoinFailed(log);
break;
default:
break;
}
}
void printEvtJoined(TTNLogMessage* log)
{
ESP_LOGI(TAG, "%s: ch=%d", log->message, (unsigned)log->txChnl);
u4_t netid = 0;
devaddr_t devaddr = 0;
u1_t nwkKey[16];
u1_t artKey[16];
LMIC_getSessionKeys(&netid, &devaddr, nwkKey, artKey);
ESP_LOGI(TAG, "netid: %d", netid);
ESP_LOGI(TAG, "devaddr: %08x", devaddr);
char hexBuf[48];
bin2hex((uint8_t*)&artKey, sizeof(artKey), hexBuf, '-');
ESP_LOGI(TAG, "artKey: %s", hexBuf);
bin2hex((uint8_t*)&nwkKey, sizeof(nwkKey), hexBuf, '-');
ESP_LOGI(TAG, "nwkKey: %s", hexBuf);
}
void printEvtJoinFailed(TTNLogMessage* log)
{
rps_t rps = log->rps;
ESP_LOGE(TAG, "%s: freq=%d.%d, opmode=0x%x, rps=0x%02x (%s, %s, %s, %s, IH=%d)",
log->message,
log->freq / 1000000, (log->freq % 1000000) / 100000,
log->opmode,
rps,
SF_NAMES[getSf(rps)],
BW_NAMES[getBw(rps)],
CR_NAMES[getCr(rps)],
CRC_NAMES[getNocrc(rps)],
getIh(rps)
);
}
static const char* HEX_DIGITS = "0123456789ABCDEF";
void bin2hex(const uint8_t* bin, unsigned len, char* buf, char sep)
{
int tgt = 0;
for (int i = 0; i < len; i++) {
if (sep != 0 && i != 0)
buf[tgt++] = sep;
buf[tgt++] = HEX_DIGITS[bin[i] >> 4];
buf[tgt++] = HEX_DIGITS[bin[i] & 0xf];
}
buf[tgt] = 0;
}
#endif

View File

@ -22,7 +22,7 @@
class TTNLogging {
public:
static void initInstance();
static TTNLogging* initInstance();
void init();
void logEvent(int event, const char* message, uint32_t datum);

View File

@ -51,6 +51,9 @@ static TheThingsNetwork* ttnInstance;
static QueueHandle_t resultQueue;
static TTNClientAction clientAction = eActionUnrelated;
static TTNProvisioning provisioning;
#if LMIC_ENABLE_event_logging
static TTNLogging* logging;
#endif
static void eventCallback(void* userData, ev_t event);
static void messageReceivedCallback(void *userData, uint8_t port, const uint8_t *message, size_t messageSize);
@ -81,7 +84,7 @@ void TheThingsNetwork::configurePins(spi_host_device_t spi_host, uint8_t nss, ui
ttn_hal.configurePins(spi_host, nss, rxtx, rst, dio0, dio1);
#if LMIC_ENABLE_event_logging
TTNLogging::initInstance();
logging = TTNLogging::initInstance();
#endif
LMIC_registerEventCb(eventCallback, nullptr);
@ -252,17 +255,19 @@ void TheThingsNetwork::setRSSICal(int8_t rssiCal)
// --- Callbacks ---
#if CONFIG_LOG_DEFAULT_LEVEL >= 3
static const char *eventNames[] = { LMIC_EVENT_NAME_TABLE__INIT };
#if CONFIG_LOG_DEFAULT_LEVEL >= 3 || LMIC_ENABLE_event_logging
const char *eventNames[] = { LMIC_EVENT_NAME_TABLE__INIT };
#endif
void eventCallback(void* userData, ev_t event)
{
#if CONFIG_LOG_DEFAULT_LEVEL >= 3
ESP_LOGI(TAG, "event %s", eventNames[event]);
#endif
#if LMIC_ENABLE_event_logging
logging->logEvent(event, eventNames[event], 0);
#elif CONFIG_LOG_DEFAULT_LEVEL >= 3
ESP_LOGI(TAG, "event %s", eventNames[event]);
#endif
if (event == EV_TXCOMPLETE) {
if (LMIC.txrxFlags & TXRX_ACK)