Merge pull request #421 from cyberman54/development

v1.8.0
This commit is contained in:
Verkehrsrot 2019-09-02 09:21:23 +02:00 committed by GitHub
commit 2c7c2da4ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 29 additions and 42 deletions

View File

@ -42,7 +42,7 @@ description = Paxcounter is a device for metering passenger flows in realtime. I
[common] [common]
; for release_version use max. 10 chars total, use any decimal format like "a.b.c" ; for release_version use max. 10 chars total, use any decimal format like "a.b.c"
release_version = 1.7.979 release_version = 1.8.0
; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running! ; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running!
; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose ; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose
debug_level = 3 debug_level = 3

View File

@ -9,8 +9,8 @@ nvs_handle my_handle;
esp_err_t err; esp_err_t err;
#define PAYLOADMASK \ #define PAYLOADMASK \
(GPS_DATA | ALARM_DATA | MEMS_DATA | COUNT_DATA | SENSOR1_DATA | \ ((GPS_DATA | ALARM_DATA | MEMS_DATA | COUNT_DATA | SENSOR1_DATA | \
SENSOR2_DATA | SENSOR3_DATA & ~BATT_DATA) SENSOR2_DATA | SENSOR3_DATA) & ~BATT_DATA)
// populate cfg vars with factory settings // populate cfg vars with factory settings
void defaultConfig() { void defaultConfig() {

View File

@ -21,10 +21,7 @@
// use interrupts only if LORA_IRQ and LORA_DIO are connected to interrupt // use interrupts only if LORA_IRQ and LORA_DIO are connected to interrupt
// capable GPIO pins on your board, if not disable interrupts // capable GPIO pins on your board, if not disable interrupts
//#define LMIC_USE_INTERRUPTS 1 #define LMIC_USE_INTERRUPTS 1
// needed for paxcounter code
#define LMIC_ENABLE_user_events 1
// time sync via LoRaWAN network, note: not supported by TTNv2 // time sync via LoRaWAN network, note: not supported by TTNv2
// #define LMIC_ENABLE_DeviceTimeReq 1 // #define LMIC_ENABLE_DeviceTimeReq 1

View File

@ -21,6 +21,23 @@ static const char TAG[] = "lora";
QueueHandle_t LoraSendQueue; QueueHandle_t LoraSendQueue;
TaskHandle_t lmicTask = NULL, lorasendTask = NULL; TaskHandle_t lmicTask = NULL, lorasendTask = NULL;
// table of LORAWAN MAC messages sent by the network to the device
// format: opcode, cmdname (max 19 chars), #bytes params
// source: LoRaWAN 1.1 Specification (October 11, 2017)
static mac_t table[] = {
{0x01, "ResetConf", 1}, {0x02, "LinkCheckAns", 2},
{0x03, "LinkADRReq", 4}, {0x04, "DutyCycleReq", 1},
{0x05, "RXParamSetupReq", 4}, {0x06, "DevStatusReq", 0},
{0x07, "NewChannelReq", 5}, {0x08, "RxTimingSetupReq", 1},
{0x09, "TxParamSetupReq", 1}, {0x0A, "DlChannelReq", 4},
{0x0B, "RekeyConf", 1}, {0x0C, "ADRParamSetupReq", 1},
{0x0D, "DeviceTimeAns", 5}, {0x0E, "ForceRejoinReq", 2},
{0x0F, "RejoinParamSetupReq", 1}};
static const uint8_t cmdtablesize =
sizeof(table) / sizeof(table[0]); // number of commands in MAC table
class MyHalConfig_t : public Arduino_LMIC::HalConfiguration_t { class MyHalConfig_t : public Arduino_LMIC::HalConfiguration_t {
public: public:
@ -545,10 +562,6 @@ void lmictask(void *pvParameters) {
void myRxCallback(void *pUserData, uint8_t port, const uint8_t *pMsg, void myRxCallback(void *pUserData, uint8_t port, const uint8_t *pMsg,
size_t nMsg) { size_t nMsg) {
// tell the compiler that pUserData is required by the API, but we don't
// happen to use it.
LMIC_API_PARAMETER(pUserData);
// display type of received data // display type of received data
if (nMsg) if (nMsg)
ESP_LOGI(TAG, "Received %u bytes of payload on port %u", nMsg, port); ESP_LOGI(TAG, "Received %u bytes of payload on port %u", nMsg, port);
@ -560,7 +573,7 @@ void myRxCallback(void *pUserData, uint8_t port, const uint8_t *pMsg,
if (port != MACPORT) if (port != MACPORT)
--nMac; --nMac;
if (nMac) { if (nMac) {
ESP_LOGI(TAG, "Received %u MAC messages:", nMac); ESP_LOGI(TAG, "Received %u byte MAC message", nMac);
// NOT WORKING YET // NOT WORKING YET
// whe need to strip some protocol overhead from LMIC.frame to unwrap the // whe need to strip some protocol overhead from LMIC.frame to unwrap the
// MAC command // MAC command
@ -582,9 +595,10 @@ void myRxCallback(void *pUserData, uint8_t port, const uint8_t *pMsg,
#if (TIME_SYNC_LORASERVER) #if (TIME_SYNC_LORASERVER)
// valid timesync answer -> call timesync processor // valid timesync answer -> call timesync processor
if ((port >= TIMEANSWERPORT_MIN) && (port <= TIMEANSWERPORT_MAX)) if ((port >= TIMEANSWERPORT_MIN) && (port <= TIMEANSWERPORT_MAX)) {
recv_timesync_ans(port, pMsg, nMsg); recv_timesync_ans(port, pMsg, nMsg);
break; break;
}
#endif #endif
// unknown port -> display info // unknown port -> display info
@ -595,34 +609,10 @@ void myRxCallback(void *pUserData, uint8_t port, const uint8_t *pMsg,
// transmit complete message handler // transmit complete message handler
void myTxCallback(void *pUserData, int fSuccess) { void myTxCallback(void *pUserData, int fSuccess) {
/* currently no code here */ /* currently no code here */
// tell the compiler that pUserData is required by the API, but we don't
// happen to use it.
LMIC_API_PARAMETER(pUserData);
} }
// LORAWAN MAC interpreter // decode LORAWAN MAC message
// table of LORAWAN MAC messages sent by the network to the device
// format: opcode, cmdname (max 19 chars), #bytes params
// source: LoRaWAN 1.1 Specification (October 11, 2017)
static mac_t table[] = {
{0x01, "ResetConf", 1}, {0x02, "LinkCheckAns", 2},
{0x03, "LinkADRReq", 4}, {0x04, "DutyCycleReq", 1},
{0x05, "RXParamSetupReq", 4}, {0x06, "DevStatusReq", 0},
{0x07, "NewChannelReq", 5}, {0x08, "RxTimingSetupReq", 1},
{0x09, "TxParamSetupReq", 1}, {0x0A, "DlChannelReq", 4},
{0x0B, "RekeyConf", 1}, {0x0C, "ADRParamSetupReq", 1},
{0x0D, "DeviceTimeAns", 5}, {0x0E, "ForceRejoinReq", 2},
{0x0F, "RejoinParamSetupReq", 1}};
static const uint8_t cmdtablesize =
sizeof(table) / sizeof(table[0]); // number of commands in command table
// decode mac message
void mac_decode(const uint8_t cmd[], const uint8_t cmdlength) { void mac_decode(const uint8_t cmd[], const uint8_t cmdlength) {
if (!cmdlength) if (!cmdlength)
@ -640,15 +630,15 @@ void mac_decode(const uint8_t cmd[], const uint8_t cmdlength) {
memmove(foundcmd, cmd + cursor, memmove(foundcmd, cmd + cursor,
table[i].params); // strip opcode from cmd array table[i].params); // strip opcode from cmd array
cursor += table[i].params; cursor += table[i].params;
ESP_LOGI(TAG, "Network command %s", table[i].cmdname); ESP_LOGD(TAG, "Network command %s", table[i].cmdname);
} else } else
ESP_LOGI(TAG, "MAC message 0x%02X with missing parameter(s)", ESP_LOGD(TAG, "MAC message 0x%02X with missing parameter(s)",
table[i].opcode); table[i].opcode);
break; // command found -> exit table lookup loop break; // command found -> exit table lookup loop
} // end of command validation } // end of command validation
} // end of command table lookup loop } // end of command table lookup loop
if (i < 0) { // command not found -> skip it if (i < 0) { // command not found -> skip it
ESP_LOGI(TAG, "Unknown MAC message 0x%02X", cmd[cursor]); ESP_LOGD(TAG, "Unknown MAC message 0x%02X", cmd[cursor]);
cursor++; cursor++;
} }
} // command parsing loop } // command parsing loop