fota lib for mdot

Dependents:   UQ_LoraWAN

Committer:
Jenkins@KEILDM1.dc.multitech.prv
Date:
Fri Sep 14 15:39:09 2018 -0500
Revision:
3:63d10f2375ea
fota lib updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 1 #ifndef MDOT_EVENT_H
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 2 #define MDOT_EVENT_H
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 3
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 4 #include "mbed.h"
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 5 #include "mDot.h"
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 6 #include "MacEvents.h"
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 7 #include "MTSLog.h"
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 8 #include "MTSText.h"
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 9
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 10 typedef union {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 11 uint8_t Value;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 12 struct {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 13 uint8_t :1;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 14 uint8_t Tx :1;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 15 uint8_t Rx :1;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 16 uint8_t RxData :1;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 17 uint8_t RxSlot :2;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 18 uint8_t LinkCheck :1;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 19 uint8_t JoinAccept :1;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 20 } Bits;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 21 } LoRaMacEventFlags;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 22
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 23 typedef enum {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 24 LORAMAC_EVENT_INFO_STATUS_OK = 0,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 25 LORAMAC_EVENT_INFO_STATUS_ERROR,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 26 LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 27 LORAMAC_EVENT_INFO_STATUS_RX_TIMEOUT,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 28 LORAMAC_EVENT_INFO_STATUS_RX_ERROR,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 29 LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 30 LORAMAC_EVENT_INFO_STATUS_DOWNLINK_FAIL,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 31 LORAMAC_EVENT_INFO_STATUS_ADDRESS_FAIL,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 32 LORAMAC_EVENT_INFO_STATUS_MIC_FAIL,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 33 } LoRaMacEventInfoStatus;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 34
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 35 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 36 * LoRaMAC event information
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 37 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 38 typedef struct {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 39 LoRaMacEventInfoStatus Status;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 40 lora::DownlinkControl Ctrl;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 41 bool TxAckReceived;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 42 bool DuplicateRx;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 43 uint8_t TxNbRetries;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 44 uint8_t TxDatarate;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 45 uint8_t RxPort;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 46 uint8_t *RxBuffer;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 47 uint8_t RxBufferSize;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 48 int16_t RxRssi;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 49 uint8_t RxSnr;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 50 uint16_t Energy;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 51 uint8_t DemodMargin;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 52 uint8_t NbGateways;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 53 } LoRaMacEventInfo;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 54
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 55 class mDotEvent: public lora::MacEvents {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 56 public:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 57
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 58 mDotEvent()
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 59 :
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 60 LinkCheckAnsReceived(false),
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 61 DemodMargin(0),
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 62 NbGateways(0),
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 63 PacketReceived(false),
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 64 RxPort(0),
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 65 RxPayloadSize(0),
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 66 PongReceived(false),
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 67 PongRssi(0),
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 68 PongSnr(0),
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 69 AckReceived(false),
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 70 DuplicateRx(false),
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 71 TxNbRetries(0),
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 72 _sleep_cb(NULL)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 73 {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 74 memset(&_flags, 0, sizeof(LoRaMacEventFlags));
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 75 memset(&_info, 0, sizeof(LoRaMacEventInfo));
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 76 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 77
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 78 virtual ~mDotEvent() {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 79 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 80
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 81 virtual void MacEvent(LoRaMacEventFlags *flags, LoRaMacEventInfo *info) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 82 if (mts::MTSLog::getLogLevel() == mts::MTSLog::TRACE_LEVEL) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 83 std::string msg = "OK";
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 84 switch (info->Status) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 85 case LORAMAC_EVENT_INFO_STATUS_ERROR:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 86 msg = "ERROR";
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 87 break;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 88 case LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 89 msg = "TX_TIMEOUT";
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 90 break;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 91 case LORAMAC_EVENT_INFO_STATUS_RX_TIMEOUT:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 92 msg = "RX_TIMEOUT";
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 93 break;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 94 case LORAMAC_EVENT_INFO_STATUS_RX_ERROR:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 95 msg = "RX_ERROR";
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 96 break;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 97 case LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 98 msg = "JOIN_FAIL";
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 99 break;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 100 case LORAMAC_EVENT_INFO_STATUS_DOWNLINK_FAIL:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 101 msg = "DOWNLINK_FAIL";
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 102 break;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 103 case LORAMAC_EVENT_INFO_STATUS_ADDRESS_FAIL:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 104 msg = "ADDRESS_FAIL";
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 105 break;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 106 case LORAMAC_EVENT_INFO_STATUS_MIC_FAIL:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 107 msg = "MIC_FAIL";
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 108 break;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 109 default:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 110 break;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 111 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 112 logTrace("Event: %s", msg.c_str());
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 113
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 114 logTrace("Flags Tx: %d Rx: %d RxData: %d RxSlot: %d LinkCheck: %d JoinAccept: %d",
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 115 flags->Bits.Tx, flags->Bits.Rx, flags->Bits.RxData, flags->Bits.RxSlot, flags->Bits.LinkCheck, flags->Bits.JoinAccept);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 116 logTrace("Info: Status: %d ACK: %d Retries: %d TxDR: %d RxPort: %d RxSize: %d RSSI: %d SNR: %d Energy: %d Margin: %d Gateways: %d",
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 117 info->Status, info->TxAckReceived, info->TxNbRetries, info->TxDatarate, info->RxPort, info->RxBufferSize,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 118 info->RxRssi, info->RxSnr, info->Energy, info->DemodMargin, info->NbGateways);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 119 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 120 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 121
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 122 virtual void TxStart() {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 123 logDebug("mDotEvent - TxStart");
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 124
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 125 // Fire auto sleep cfg event if enabled
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 126 if (_sleep_cb)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 127 _sleep_cb(mDot::AUTO_SLEEP_EVT_CFG);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 128 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 129
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 130 virtual void TxDone(uint8_t dr) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 131 RxPayloadSize = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 132 LinkCheckAnsReceived = false;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 133 PacketReceived = false;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 134 AckReceived = false;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 135 DuplicateRx = false;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 136 PongReceived = false;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 137 TxNbRetries = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 138
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 139 logDebug("mDotEvent - TxDone");
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 140 memset(&_flags, 0, sizeof(LoRaMacEventFlags));
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 141 memset(&_info, 0, sizeof(LoRaMacEventInfo));
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 142
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 143 _flags.Bits.Tx = 1;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 144 _info.TxDatarate = dr;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 145 _info.Status = LORAMAC_EVENT_INFO_STATUS_OK;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 146 Notify();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 147
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 148 // If configured, we can sleep until the rx window opens
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 149 if (_sleep_cb)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 150 _sleep_cb(mDot::AUTO_SLEEP_EVT_TXDONE);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 151 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 152
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 153 void Notify() {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 154 MacEvent(&_flags, &_info);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 155 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 156
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 157 virtual void TxTimeout(void) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 158 logDebug("mDotEvent - TxTimeout");
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 159
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 160 _flags.Bits.Tx = 1;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 161 _info.Status = LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 162 Notify();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 163 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 164
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 165 virtual void JoinAccept(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 166 logDebug("mDotEvent - JoinAccept");
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 167
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 168 _flags.Bits.Tx = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 169 _flags.Bits.JoinAccept = 1;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 170 _info.Status = LORAMAC_EVENT_INFO_STATUS_OK;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 171 Notify();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 172
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 173 if (_sleep_cb)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 174 _sleep_cb(mDot::AUTO_SLEEP_EVT_CLEANUP);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 175 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 176
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 177 virtual void JoinFailed(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 178 logDebug("mDotEvent - JoinFailed");
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 179
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 180 _flags.Bits.Tx = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 181 _flags.Bits.JoinAccept = 1;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 182 _info.Status = LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 183 Notify();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 184
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 185 if (_sleep_cb)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 186 _sleep_cb(mDot::AUTO_SLEEP_EVT_CLEANUP);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 187 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 188
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 189 virtual void MissedAck(uint8_t retries) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 190 logDebug("mDotEvent - MissedAck : retries %u", retries);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 191 TxNbRetries = retries;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 192 _info.TxNbRetries = retries;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 193 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 194
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 195 virtual void PacketRx(uint8_t port, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr, lora::DownlinkControl ctrl, uint8_t slot, uint8_t retries, uint32_t address, bool dupRx) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 196 logDebug("mDotEvent - PacketRx ADDR: %08x", address);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 197 RxPort = port;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 198 PacketReceived = true;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 199
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 200 memcpy(RxPayload, payload, size);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 201 RxPayloadSize = size;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 202
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 203 if (ctrl.Bits.Ack) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 204 AckReceived = true;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 205 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 206
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 207 DuplicateRx = dupRx;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 208
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 209 if (mts::MTSLog::getLogLevel() == mts::MTSLog::TRACE_LEVEL) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 210 std::string packet = mts::Text::bin2hexString(RxPayload, size);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 211 logTrace("Payload: %s", packet.c_str());
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 212 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 213
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 214 _flags.Bits.Tx = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 215 _flags.Bits.Rx = 1;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 216 _flags.Bits.RxData = size > 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 217 _flags.Bits.RxSlot = slot;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 218 _info.RxBuffer = payload;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 219 _info.RxBufferSize = size;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 220 _info.RxPort = port;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 221 _info.RxRssi = rssi;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 222 _info.RxSnr = snr;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 223 _info.TxAckReceived = AckReceived;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 224 _info.DuplicateRx = DuplicateRx;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 225 _info.TxNbRetries = retries;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 226 _info.Status = LORAMAC_EVENT_INFO_STATUS_OK;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 227 Notify();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 228 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 229
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 230 virtual void RxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr, lora::DownlinkControl ctrl, uint8_t slot) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 231 logDebug("mDotEvent - RxDone");
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 232
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 233 if (_sleep_cb)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 234 _sleep_cb(mDot::AUTO_SLEEP_EVT_CLEANUP);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 235 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 236
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 237 virtual void Pong(int16_t m_rssi, int8_t m_snr, int16_t s_rssi, int8_t s_snr) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 238 logDebug("mDotEvent - Pong");
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 239 PongReceived = true;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 240 PongRssi = s_rssi;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 241 PongSnr = s_snr;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 242 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 243
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 244 virtual void NetworkLinkCheck(int16_t m_rssi, int8_t m_snr, int8_t s_snr, uint8_t s_gateways) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 245 logDebug("mDotEvent - NetworkLinkCheck");
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 246 LinkCheckAnsReceived = true;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 247 DemodMargin = s_snr;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 248 NbGateways = s_gateways;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 249
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 250 _flags.Bits.Tx = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 251 _flags.Bits.LinkCheck = 1;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 252 _info.RxRssi = m_rssi;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 253 _info.RxSnr = m_snr;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 254 _info.DemodMargin = s_snr;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 255 _info.NbGateways = s_gateways;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 256 _info.Status = LORAMAC_EVENT_INFO_STATUS_OK;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 257 Notify();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 258 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 259
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 260 virtual void RxTimeout(uint8_t slot) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 261 logDebug("mDotEvent - RxTimeout on Slot %d", slot);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 262
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 263 _flags.Bits.Tx = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 264 _flags.Bits.RxSlot = slot;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 265 _info.Status = LORAMAC_EVENT_INFO_STATUS_RX_TIMEOUT;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 266 Notify();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 267
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 268 if (_sleep_cb) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 269 // If this is the first rx window we can sleep until the next one
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 270 if (slot == 1)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 271 _sleep_cb(mDot::AUTO_SLEEP_EVT_RX1_TIMEOUT);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 272 else
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 273 _sleep_cb(mDot::AUTO_SLEEP_EVT_CLEANUP);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 274 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 275 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 276
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 277 virtual void RxError(uint8_t slot) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 278 logDebug("mDotEvent - RxError");
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 279
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 280 memset(&_flags, 0, sizeof(LoRaMacEventFlags));
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 281 memset(&_info, 0, sizeof(LoRaMacEventInfo));
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 282
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 283 _flags.Bits.RxSlot = slot;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 284 _info.Status = LORAMAC_EVENT_INFO_STATUS_RX_ERROR;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 285 Notify();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 286
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 287 if (_sleep_cb)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 288 _sleep_cb(mDot::AUTO_SLEEP_EVT_CLEANUP);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 289 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 290
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 291 virtual uint8_t MeasureBattery(void) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 292 return 255;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 293 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 294
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 295 void AttachSleepCallback(Callback<void(mDot::AutoSleepEvent_t)> cb) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 296 _sleep_cb = cb;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 297 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 298
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 299 void DetachSleepCallback() {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 300 _sleep_cb = NULL;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 301 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 302
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 303 bool LinkCheckAnsReceived;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 304 uint8_t DemodMargin;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 305 uint8_t NbGateways;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 306
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 307 bool PacketReceived;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 308 uint8_t RxPort;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 309 uint8_t RxPayload[255];
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 310 uint8_t RxPayloadSize;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 311
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 312 bool PongReceived;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 313 int16_t PongRssi;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 314 int16_t PongSnr;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 315
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 316 bool AckReceived;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 317 bool DuplicateRx;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 318 uint8_t TxNbRetries;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 319
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 320 LoRaMacEventFlags& Flags() {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 321 return _flags;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 322 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 323 LoRaMacEventInfo& Info() {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 324 return _info;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 325 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 326
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 327 private:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 328 /* Hook to inject a sleep method in between receive windows */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 329 Callback<void(mDot::AutoSleepEvent_t)> _sleep_cb;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 330
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 331 LoRaMacEventFlags _flags;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 332 LoRaMacEventInfo _info;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 333
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 334 //
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 335 // /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 336 // * MAC layer event callback prototype.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 337 // *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 338 // * \param [IN] flags Bit field indicating the MAC events occurred
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 339 // * \param [IN] info Details about MAC events occurred
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 340 // */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 341 // virtual void MacEvent(LoRaMacEventFlags *flags, LoRaMacEventInfo *info) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 342 // logDebug("mDotEvent");
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 343 //
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 344 // if (flags->Bits.Rx) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 345 // logDebug("Rx");
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 346 //
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 347 // // Event Object must delete RxBuffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 348 // delete[] info->RxBuffer;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 349 // }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 350 // }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 351 //
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 352
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 353 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 354
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 355 #endif // __MDOT_EVENT_H__