Stable version of the mDot library for mbed 5. This version of the library is suitable for deployment scenarios. See lastest commit message for version of mbed-os library that has been tested against.

Dependents:   mdot_two_way unh-hackathon-example unh-hackathon-example-raw TelitSensorToCloud ... more

Fork of libmDot-dev-mbed5-deprecated by MultiTech

The Dot library provides a LoRaWan certified stack for LoRa communication using MultiTech mDot and xDot devices. The stack is compatible with mbed 5.

The name of the repository can be used to determine which device the stack was compiled for and if it's a development or production-ready build:

A changelog for the Dot library can be found here.

The Dot library version and the version of mbed-os it was compiled against can both be found in the commit message for that revision of the Dot library. Building your application with the same version of mbed-os as what was used to build the Dot library is highly recommended!

The Dot-Examples repository demonstrates how to use the Dot library in a custom application.

The mDot and xDot platform pages have lots of platform specific information and document potential issues, gotchas, etc, and provide instructions for getting started with development. Please take a look at the platform page before starting development as they should answer many questions you will have.

FOTA

Full FOTA support is only available with mDot, xDot does not have the required external flash. xDot can use the FOTA example to dynamically join a multicast session only. After joining the multicast session the received Fragmentation packets could be handed to a host MCU for processing and at completion the firmware can be loaded into the xDot using the bootloader and y-modem. See xDot Developer Guide.

  • Add the following code to allow Fota to use the Dot instance

main.cpp

    // Initialize FOTA singleton
    Fota::getInstance(dot);
  • Add fragmentation handling the the PacketRx event

RadioEvent.h

    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) {
        mDotEvent::PacketRx(port, payload, size, rssi, snr, ctrl, slot, retries, address, dupRx);

#if ACTIVE_EXAMPLE == FOTA_EXAMPLE
        if(port == 200 || port == 201 || port == 202) {
            Fota::getInstance()->processCmd(payload, port, size);
        }
#endif
    }

A definition is needed to enable Fragmentation support on mDot and save fragments to flash. This should not be defined for xDot and will result in a compiler error.

mbed_app.json

{
    "macros": [
        "FOTA=1"
    ]
}

The FOTA implementation has a few differences from the LoRaWAN Protocol

  • Fragmentation Indexing starts at 0
  • McKEKey is 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
  • Start Time is a count-down in seconds to start of session
Committer:
Mike Fiore
Date:
Thu Aug 04 15:11:24 2016 -0500
Revision:
16:b630e18103e5
Child:
17:306ffaa5d79b
update from libmDot-2.0.1-ARMCC.tar.gz

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mike Fiore 16:b630e18103e5 1 #ifndef MDOT_EVENT_H
Mike Fiore 16:b630e18103e5 2 #define MDOT_EVENT_H
Mike Fiore 16:b630e18103e5 3
Mike Fiore 16:b630e18103e5 4 #include "mDot.h"
Mike Fiore 16:b630e18103e5 5 #include "MacEvents.h"
Mike Fiore 16:b630e18103e5 6 #include "MTSLog.h"
Mike Fiore 16:b630e18103e5 7 #include "MTSText.h"
Mike Fiore 16:b630e18103e5 8
Mike Fiore 16:b630e18103e5 9 typedef union {
Mike Fiore 16:b630e18103e5 10 uint8_t Value;
Mike Fiore 16:b630e18103e5 11 struct {
Mike Fiore 16:b630e18103e5 12 uint8_t :1;
Mike Fiore 16:b630e18103e5 13 uint8_t Tx :1;
Mike Fiore 16:b630e18103e5 14 uint8_t Rx :1;
Mike Fiore 16:b630e18103e5 15 uint8_t RxData :1;
Mike Fiore 16:b630e18103e5 16 uint8_t RxSlot :2;
Mike Fiore 16:b630e18103e5 17 uint8_t LinkCheck :1;
Mike Fiore 16:b630e18103e5 18 uint8_t JoinAccept :1;
Mike Fiore 16:b630e18103e5 19 } Bits;
Mike Fiore 16:b630e18103e5 20 } LoRaMacEventFlags;
Mike Fiore 16:b630e18103e5 21
Mike Fiore 16:b630e18103e5 22 typedef enum {
Mike Fiore 16:b630e18103e5 23 LORAMAC_EVENT_INFO_STATUS_OK = 0,
Mike Fiore 16:b630e18103e5 24 LORAMAC_EVENT_INFO_STATUS_ERROR,
Mike Fiore 16:b630e18103e5 25 LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT,
Mike Fiore 16:b630e18103e5 26 LORAMAC_EVENT_INFO_STATUS_RX_TIMEOUT,
Mike Fiore 16:b630e18103e5 27 LORAMAC_EVENT_INFO_STATUS_RX_ERROR,
Mike Fiore 16:b630e18103e5 28 LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL,
Mike Fiore 16:b630e18103e5 29 LORAMAC_EVENT_INFO_STATUS_DOWNLINK_FAIL,
Mike Fiore 16:b630e18103e5 30 LORAMAC_EVENT_INFO_STATUS_ADDRESS_FAIL,
Mike Fiore 16:b630e18103e5 31 LORAMAC_EVENT_INFO_STATUS_MIC_FAIL,
Mike Fiore 16:b630e18103e5 32 } LoRaMacEventInfoStatus;
Mike Fiore 16:b630e18103e5 33
Mike Fiore 16:b630e18103e5 34 /*!
Mike Fiore 16:b630e18103e5 35 * LoRaMAC event information
Mike Fiore 16:b630e18103e5 36 */
Mike Fiore 16:b630e18103e5 37 typedef struct {
Mike Fiore 16:b630e18103e5 38 LoRaMacEventInfoStatus Status;
Mike Fiore 16:b630e18103e5 39 lora::DownlinkControl Ctrl;
Mike Fiore 16:b630e18103e5 40 bool TxAckReceived;
Mike Fiore 16:b630e18103e5 41 uint8_t TxNbRetries;
Mike Fiore 16:b630e18103e5 42 uint8_t TxDatarate;
Mike Fiore 16:b630e18103e5 43 uint8_t RxPort;
Mike Fiore 16:b630e18103e5 44 uint8_t *RxBuffer;
Mike Fiore 16:b630e18103e5 45 uint8_t RxBufferSize;
Mike Fiore 16:b630e18103e5 46 int16_t RxRssi;
Mike Fiore 16:b630e18103e5 47 uint8_t RxSnr;
Mike Fiore 16:b630e18103e5 48 uint16_t Energy;
Mike Fiore 16:b630e18103e5 49 uint8_t DemodMargin;
Mike Fiore 16:b630e18103e5 50 uint8_t NbGateways;
Mike Fiore 16:b630e18103e5 51 } LoRaMacEventInfo;
Mike Fiore 16:b630e18103e5 52
Mike Fiore 16:b630e18103e5 53 class mDotEvent: public lora::MacEvents {
Mike Fiore 16:b630e18103e5 54 public:
Mike Fiore 16:b630e18103e5 55
Mike Fiore 16:b630e18103e5 56 mDotEvent()
Mike Fiore 16:b630e18103e5 57 :
Mike Fiore 16:b630e18103e5 58 LinkCheckAnsReceived(false),
Mike Fiore 16:b630e18103e5 59 DemodMargin(0),
Mike Fiore 16:b630e18103e5 60 NbGateways(0),
Mike Fiore 16:b630e18103e5 61 PacketReceived(false),
Mike Fiore 16:b630e18103e5 62 RxPort(0),
Mike Fiore 16:b630e18103e5 63 RxPayloadSize(0),
Mike Fiore 16:b630e18103e5 64 PongReceived(false),
Mike Fiore 16:b630e18103e5 65 PongRssi(0),
Mike Fiore 16:b630e18103e5 66 PongSnr(0),
Mike Fiore 16:b630e18103e5 67 AckReceived(false),
Mike Fiore 16:b630e18103e5 68 TxNbRetries(0)
Mike Fiore 16:b630e18103e5 69 {
Mike Fiore 16:b630e18103e5 70 memset(&_flags, 0, sizeof(LoRaMacEventFlags));
Mike Fiore 16:b630e18103e5 71 memset(&_info, 0, sizeof(LoRaMacEventInfo));
Mike Fiore 16:b630e18103e5 72 }
Mike Fiore 16:b630e18103e5 73
Mike Fiore 16:b630e18103e5 74 virtual ~mDotEvent() {
Mike Fiore 16:b630e18103e5 75 }
Mike Fiore 16:b630e18103e5 76
Mike Fiore 16:b630e18103e5 77 virtual void MacEvent(LoRaMacEventFlags *flags, LoRaMacEventInfo *info) {
Mike Fiore 16:b630e18103e5 78 if (mts::MTSLog::getLogLevel() == mts::MTSLog::TRACE_LEVEL) {
Mike Fiore 16:b630e18103e5 79 std::string msg = "OK";
Mike Fiore 16:b630e18103e5 80 switch (info->Status) {
Mike Fiore 16:b630e18103e5 81 case LORAMAC_EVENT_INFO_STATUS_ERROR:
Mike Fiore 16:b630e18103e5 82 msg = "ERROR";
Mike Fiore 16:b630e18103e5 83 break;
Mike Fiore 16:b630e18103e5 84 case LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT:
Mike Fiore 16:b630e18103e5 85 msg = "TX_TIMEOUT";
Mike Fiore 16:b630e18103e5 86 break;
Mike Fiore 16:b630e18103e5 87 case LORAMAC_EVENT_INFO_STATUS_RX_TIMEOUT:
Mike Fiore 16:b630e18103e5 88 msg = "RX_TIMEOUT";
Mike Fiore 16:b630e18103e5 89 break;
Mike Fiore 16:b630e18103e5 90 case LORAMAC_EVENT_INFO_STATUS_RX_ERROR:
Mike Fiore 16:b630e18103e5 91 msg = "RX_ERROR";
Mike Fiore 16:b630e18103e5 92 break;
Mike Fiore 16:b630e18103e5 93 case LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL:
Mike Fiore 16:b630e18103e5 94 msg = "JOIN_FAIL";
Mike Fiore 16:b630e18103e5 95 break;
Mike Fiore 16:b630e18103e5 96 case LORAMAC_EVENT_INFO_STATUS_DOWNLINK_FAIL:
Mike Fiore 16:b630e18103e5 97 msg = "DOWNLINK_FAIL";
Mike Fiore 16:b630e18103e5 98 break;
Mike Fiore 16:b630e18103e5 99 case LORAMAC_EVENT_INFO_STATUS_ADDRESS_FAIL:
Mike Fiore 16:b630e18103e5 100 msg = "ADDRESS_FAIL";
Mike Fiore 16:b630e18103e5 101 break;
Mike Fiore 16:b630e18103e5 102 case LORAMAC_EVENT_INFO_STATUS_MIC_FAIL:
Mike Fiore 16:b630e18103e5 103 msg = "MIC_FAIL";
Mike Fiore 16:b630e18103e5 104 break;
Mike Fiore 16:b630e18103e5 105 default:
Mike Fiore 16:b630e18103e5 106 break;
Mike Fiore 16:b630e18103e5 107 }
Mike Fiore 16:b630e18103e5 108 logTrace("Event: %s", msg.c_str());
Mike Fiore 16:b630e18103e5 109
Mike Fiore 16:b630e18103e5 110 logTrace("Flags Tx: %d Rx: %d RxData: %d RxSlot: %d LinkCheck: %d JoinAccept: %d",
Mike Fiore 16:b630e18103e5 111 flags->Bits.Tx, flags->Bits.Rx, flags->Bits.RxData, flags->Bits.RxSlot, flags->Bits.LinkCheck, flags->Bits.JoinAccept);
Mike Fiore 16:b630e18103e5 112 logTrace("Info: Status: %d ACK: %d Retries: %d TxDR: %d RxPort: %d RxSize: %d RSSI: %d SNR: %d Energy: %d Margin: %d Gateways: %d",
Mike Fiore 16:b630e18103e5 113 info->Status, info->TxAckReceived, info->TxNbRetries, info->TxDatarate, info->RxPort, info->RxBufferSize,
Mike Fiore 16:b630e18103e5 114 info->RxRssi, info->RxSnr, info->Energy, info->DemodMargin, info->NbGateways);
Mike Fiore 16:b630e18103e5 115 }
Mike Fiore 16:b630e18103e5 116 }
Mike Fiore 16:b630e18103e5 117
Mike Fiore 16:b630e18103e5 118 virtual void TxDone(uint8_t dr) {
Mike Fiore 16:b630e18103e5 119 RxPayloadSize = 0;
Mike Fiore 16:b630e18103e5 120 LinkCheckAnsReceived = false;
Mike Fiore 16:b630e18103e5 121 PacketReceived = false;
Mike Fiore 16:b630e18103e5 122 AckReceived = false;
Mike Fiore 16:b630e18103e5 123 PongReceived = false;
Mike Fiore 16:b630e18103e5 124
Mike Fiore 16:b630e18103e5 125 logDebug("mDotEvent - TxDone");
Mike Fiore 16:b630e18103e5 126 memset(&_flags, 0, sizeof(LoRaMacEventFlags));
Mike Fiore 16:b630e18103e5 127 memset(&_info, 0, sizeof(LoRaMacEventInfo));
Mike Fiore 16:b630e18103e5 128
Mike Fiore 16:b630e18103e5 129 _flags.Bits.Tx = 1;
Mike Fiore 16:b630e18103e5 130 _info.TxDatarate = dr;
Mike Fiore 16:b630e18103e5 131 _info.Status = LORAMAC_EVENT_INFO_STATUS_OK;
Mike Fiore 16:b630e18103e5 132 Notify();
Mike Fiore 16:b630e18103e5 133 }
Mike Fiore 16:b630e18103e5 134
Mike Fiore 16:b630e18103e5 135 void Notify() {
Mike Fiore 16:b630e18103e5 136 MacEvent(&_flags, &_info);
Mike Fiore 16:b630e18103e5 137 }
Mike Fiore 16:b630e18103e5 138
Mike Fiore 16:b630e18103e5 139 virtual void TxTimeout(void) {
Mike Fiore 16:b630e18103e5 140 logDebug("mDotEvent - TxTimeout");
Mike Fiore 16:b630e18103e5 141
Mike Fiore 16:b630e18103e5 142 _flags.Bits.Tx = 1;
Mike Fiore 16:b630e18103e5 143 _info.Status = LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT;
Mike Fiore 16:b630e18103e5 144 Notify();
Mike Fiore 16:b630e18103e5 145 }
Mike Fiore 16:b630e18103e5 146
Mike Fiore 16:b630e18103e5 147 virtual void JoinAccept(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) {
Mike Fiore 16:b630e18103e5 148 logDebug("mDotEvent - JoinAccept");
Mike Fiore 16:b630e18103e5 149
Mike Fiore 16:b630e18103e5 150 _flags.Bits.Tx = 0;
Mike Fiore 16:b630e18103e5 151 _flags.Bits.JoinAccept = 1;
Mike Fiore 16:b630e18103e5 152 _info.Status = LORAMAC_EVENT_INFO_STATUS_OK;
Mike Fiore 16:b630e18103e5 153 Notify();
Mike Fiore 16:b630e18103e5 154 }
Mike Fiore 16:b630e18103e5 155
Mike Fiore 16:b630e18103e5 156 virtual void JoinFailed(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) {
Mike Fiore 16:b630e18103e5 157 logDebug("mDotEvent - JoinFailed");
Mike Fiore 16:b630e18103e5 158
Mike Fiore 16:b630e18103e5 159 _flags.Bits.Tx = 0;
Mike Fiore 16:b630e18103e5 160 _flags.Bits.JoinAccept = 1;
Mike Fiore 16:b630e18103e5 161 _info.Status = LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL;
Mike Fiore 16:b630e18103e5 162 Notify();
Mike Fiore 16:b630e18103e5 163 }
Mike Fiore 16:b630e18103e5 164
Mike Fiore 16:b630e18103e5 165 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 = 0) {
Mike Fiore 16:b630e18103e5 166 logDebug("mDotEvent - PacketRx");
Mike Fiore 16:b630e18103e5 167 RxPort = port;
Mike Fiore 16:b630e18103e5 168 PacketReceived = true;
Mike Fiore 16:b630e18103e5 169
Mike Fiore 16:b630e18103e5 170 memcpy(RxPayload, payload, size);
Mike Fiore 16:b630e18103e5 171 RxPayloadSize = size;
Mike Fiore 16:b630e18103e5 172
Mike Fiore 16:b630e18103e5 173 if (ctrl.Bits.Ack) {
Mike Fiore 16:b630e18103e5 174 AckReceived = true;
Mike Fiore 16:b630e18103e5 175 }
Mike Fiore 16:b630e18103e5 176
Mike Fiore 16:b630e18103e5 177 if (mts::MTSLog::getLogLevel() == mts::MTSLog::TRACE_LEVEL) {
Mike Fiore 16:b630e18103e5 178 std::string packet = mts::Text::bin2hexString(RxPayload, size);
Mike Fiore 16:b630e18103e5 179 logTrace("Payload: %s", packet.c_str());
Mike Fiore 16:b630e18103e5 180 }
Mike Fiore 16:b630e18103e5 181
Mike Fiore 16:b630e18103e5 182 _flags.Bits.Tx = 0;
Mike Fiore 16:b630e18103e5 183 _flags.Bits.Rx = 1;
Mike Fiore 16:b630e18103e5 184 _flags.Bits.RxData = size > 0;
Mike Fiore 16:b630e18103e5 185 _flags.Bits.RxSlot = slot;
Mike Fiore 16:b630e18103e5 186 _info.RxBuffer = payload;
Mike Fiore 16:b630e18103e5 187 _info.RxBufferSize = size;
Mike Fiore 16:b630e18103e5 188 _info.RxPort = port;
Mike Fiore 16:b630e18103e5 189 _info.RxRssi = rssi;
Mike Fiore 16:b630e18103e5 190 _info.RxSnr = snr;
Mike Fiore 16:b630e18103e5 191 _info.TxAckReceived = AckReceived;
Mike Fiore 16:b630e18103e5 192 _info.TxAckReceived = retries;
Mike Fiore 16:b630e18103e5 193 _info.Status = LORAMAC_EVENT_INFO_STATUS_OK;
Mike Fiore 16:b630e18103e5 194 Notify();
Mike Fiore 16:b630e18103e5 195 }
Mike Fiore 16:b630e18103e5 196
Mike Fiore 16:b630e18103e5 197 virtual void RxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr, lora::DownlinkControl ctrl, uint8_t slot) {
Mike Fiore 16:b630e18103e5 198 logDebug("mDotEvent - RxDone");
Mike Fiore 16:b630e18103e5 199 }
Mike Fiore 16:b630e18103e5 200
Mike Fiore 16:b630e18103e5 201 virtual void Pong(int16_t m_rssi, int8_t m_snr, int16_t s_rssi, int8_t s_snr) {
Mike Fiore 16:b630e18103e5 202 logDebug("mDotEvent - Pong");
Mike Fiore 16:b630e18103e5 203 PongReceived = true;
Mike Fiore 16:b630e18103e5 204 PongRssi = s_rssi;
Mike Fiore 16:b630e18103e5 205 PongSnr = s_snr;
Mike Fiore 16:b630e18103e5 206 }
Mike Fiore 16:b630e18103e5 207
Mike Fiore 16:b630e18103e5 208 virtual void NetworkLinkCheck(int16_t m_rssi, int8_t m_snr, int8_t s_snr, uint8_t s_gateways) {
Mike Fiore 16:b630e18103e5 209 logDebug("mDotEvent - NetworkLinkCheck");
Mike Fiore 16:b630e18103e5 210 LinkCheckAnsReceived = true;
Mike Fiore 16:b630e18103e5 211 DemodMargin = s_snr;
Mike Fiore 16:b630e18103e5 212 NbGateways = s_gateways;
Mike Fiore 16:b630e18103e5 213
Mike Fiore 16:b630e18103e5 214 _flags.Bits.Tx = 0;
Mike Fiore 16:b630e18103e5 215 _flags.Bits.LinkCheck = 1;
Mike Fiore 16:b630e18103e5 216 _info.RxRssi = m_rssi;
Mike Fiore 16:b630e18103e5 217 _info.RxSnr = m_snr;
Mike Fiore 16:b630e18103e5 218 _info.DemodMargin = s_snr;
Mike Fiore 16:b630e18103e5 219 _info.NbGateways = s_gateways;
Mike Fiore 16:b630e18103e5 220 _info.Status = LORAMAC_EVENT_INFO_STATUS_OK;
Mike Fiore 16:b630e18103e5 221 Notify();
Mike Fiore 16:b630e18103e5 222 }
Mike Fiore 16:b630e18103e5 223
Mike Fiore 16:b630e18103e5 224 virtual void RxTimeout(uint8_t slot) {
Mike Fiore 16:b630e18103e5 225 // logDebug("mDotEvent - RxTimeout");
Mike Fiore 16:b630e18103e5 226
Mike Fiore 16:b630e18103e5 227 _flags.Bits.Tx = 0;
Mike Fiore 16:b630e18103e5 228 _flags.Bits.RxSlot = slot;
Mike Fiore 16:b630e18103e5 229 _info.Status = LORAMAC_EVENT_INFO_STATUS_RX_TIMEOUT;
Mike Fiore 16:b630e18103e5 230 Notify();
Mike Fiore 16:b630e18103e5 231 }
Mike Fiore 16:b630e18103e5 232
Mike Fiore 16:b630e18103e5 233 virtual void RxError(uint8_t slot) {
Mike Fiore 16:b630e18103e5 234 logDebug("mDotEvent - RxError");
Mike Fiore 16:b630e18103e5 235
Mike Fiore 16:b630e18103e5 236 memset(&_flags, 0, sizeof(LoRaMacEventFlags));
Mike Fiore 16:b630e18103e5 237 memset(&_info, 0, sizeof(LoRaMacEventInfo));
Mike Fiore 16:b630e18103e5 238
Mike Fiore 16:b630e18103e5 239 _flags.Bits.RxSlot = slot;
Mike Fiore 16:b630e18103e5 240 _info.Status = LORAMAC_EVENT_INFO_STATUS_RX_ERROR;
Mike Fiore 16:b630e18103e5 241 Notify();
Mike Fiore 16:b630e18103e5 242 }
Mike Fiore 16:b630e18103e5 243
Mike Fiore 16:b630e18103e5 244 virtual uint8_t MeasureBattery(void) {
Mike Fiore 16:b630e18103e5 245 return 255;
Mike Fiore 16:b630e18103e5 246 }
Mike Fiore 16:b630e18103e5 247
Mike Fiore 16:b630e18103e5 248 bool LinkCheckAnsReceived;
Mike Fiore 16:b630e18103e5 249 uint8_t DemodMargin;
Mike Fiore 16:b630e18103e5 250 uint8_t NbGateways;
Mike Fiore 16:b630e18103e5 251
Mike Fiore 16:b630e18103e5 252 bool PacketReceived;
Mike Fiore 16:b630e18103e5 253 uint8_t RxPort;
Mike Fiore 16:b630e18103e5 254 uint8_t RxPayload[255];
Mike Fiore 16:b630e18103e5 255 uint8_t RxPayloadSize;
Mike Fiore 16:b630e18103e5 256
Mike Fiore 16:b630e18103e5 257 bool PongReceived;
Mike Fiore 16:b630e18103e5 258 int16_t PongRssi;
Mike Fiore 16:b630e18103e5 259 int16_t PongSnr;
Mike Fiore 16:b630e18103e5 260
Mike Fiore 16:b630e18103e5 261 bool AckReceived;
Mike Fiore 16:b630e18103e5 262 uint8_t TxNbRetries;
Mike Fiore 16:b630e18103e5 263
Mike Fiore 16:b630e18103e5 264 LoRaMacEventFlags& Flags() {
Mike Fiore 16:b630e18103e5 265 return _flags;
Mike Fiore 16:b630e18103e5 266 }
Mike Fiore 16:b630e18103e5 267 LoRaMacEventInfo& Info() {
Mike Fiore 16:b630e18103e5 268 return _info;
Mike Fiore 16:b630e18103e5 269 }
Mike Fiore 16:b630e18103e5 270
Mike Fiore 16:b630e18103e5 271 private:
Mike Fiore 16:b630e18103e5 272
Mike Fiore 16:b630e18103e5 273 LoRaMacEventFlags _flags;
Mike Fiore 16:b630e18103e5 274 LoRaMacEventInfo _info;
Mike Fiore 16:b630e18103e5 275
Mike Fiore 16:b630e18103e5 276 //
Mike Fiore 16:b630e18103e5 277 // /*!
Mike Fiore 16:b630e18103e5 278 // * MAC layer event callback prototype.
Mike Fiore 16:b630e18103e5 279 // *
Mike Fiore 16:b630e18103e5 280 // * \param [IN] flags Bit field indicating the MAC events occurred
Mike Fiore 16:b630e18103e5 281 // * \param [IN] info Details about MAC events occurred
Mike Fiore 16:b630e18103e5 282 // */
Mike Fiore 16:b630e18103e5 283 // virtual void MacEvent(LoRaMacEventFlags *flags, LoRaMacEventInfo *info) {
Mike Fiore 16:b630e18103e5 284 // logDebug("mDotEvent");
Mike Fiore 16:b630e18103e5 285 //
Mike Fiore 16:b630e18103e5 286 // if (flags->Bits.Rx) {
Mike Fiore 16:b630e18103e5 287 // logDebug("Rx");
Mike Fiore 16:b630e18103e5 288 //
Mike Fiore 16:b630e18103e5 289 // // Event Object must delete RxBuffer
Mike Fiore 16:b630e18103e5 290 // delete[] info->RxBuffer;
Mike Fiore 16:b630e18103e5 291 // }
Mike Fiore 16:b630e18103e5 292 // }
Mike Fiore 16:b630e18103e5 293 //
Mike Fiore 16:b630e18103e5 294
Mike Fiore 16:b630e18103e5 295 };
Mike Fiore 16:b630e18103e5 296
Mike Fiore 16:b630e18103e5 297 #endif // __MDOT_EVENT_H__