Bleeding edge development version of the mDot library for mbed 5. This version of the library is not guaranteed to be stable or well tested and should not be used in production or deployment scenarios.

Dependents:   mDot-IKS01A1 mDot-IKS01A1 mDot-Examples mDot-IKS01A1-Explora ... more

Fork of libmDot-dev-mbed2-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.

Dot Library Version 3 Updates

Dot Library versions 3.x.x require a channel plan to be injected into the stack. Channel plans are included with the 3.x.x Dot Library releases. The following code snippet demonstrates how to create a channel plan and inject it into the stack.

#include "mDot.h"
#include "channel_plans.h"

int main() {
    ChannelPlan* plan = new lora::ChannelPlan_US915();
    assert(plan);
    mDot* dot = mDot::getInstance(plan);
    assert(dot);

    // ...
}

Dot devices must not be deployed with software using a different channel plan than the Dot's default plan! This functionality is for development and testing only!

Multicast Sessions

Multicast sessions and packet rx events in library. When in Class C mode Multicast downlinks can be received. Recieved packets should be filtered on address, counter value will be maintained in the session or can be set explicitly depending on Application support to share Multicast Address, Keys and Counters.

mDot.h

        /**
         * Add a multicast session address and keys
         * Downlink counter is set to 0
         * Up to 3 MULTICAST_SESSIONS can be set
         */
        int32_t setMulticastSession(uint8_t index, uint32_t addr, const uint8_t* nsk, const uint8_t* dsk);
 
        /**
         * Set a multicast session counter
         * Up to 3 MULTICAST_SESSIONS can be set
         */
        int32_t setMulticastDownlinkCounter(uint8_t index, uint32_t count);

mDotEvent.h

The address field was added to PacketRx event.

        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);

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.

Committer:
Jenkins@KEILDM1.dc.multitech.prv
Date:
Thu Dec 28 12:41:02 2017 -0600
Revision:
114:8462870088eb
Parent:
90:79a8c8660a4e
Child:
135:69d2d725ea1e
mdot-library revision 3.0.2-13-gdaed0e4 and mbed-os revision mbed-os-5.5.7

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mike Fiore 16:b630e18103e5 1 /** __ ___ ____ _ ______ __ ____ __ ____
Mike Fiore 16:b630e18103e5 2 * / |/ /_ __/ / /_(_)__/_ __/__ ____/ / / __/_ _____ / /____ __ _ ___ / _/__ ____
Mike Fiore 16:b630e18103e5 3 * / /|_/ / // / / __/ /___// / / -_) __/ _ \ _\ \/ // (_-</ __/ -_) ' \(_-< _/ // _ \/ __/ __
Mike Fiore 16:b630e18103e5 4 * /_/ /_/\_,_/_/\__/_/ /_/ \__/\__/_//_/ /___/\_, /___/\__/\__/_/_/_/___/ /___/_//_/\__/ /_/
Mike Fiore 16:b630e18103e5 5 * Copyright (C) 2015 by Multi-Tech Systems /___/
Mike Fiore 16:b630e18103e5 6 *
Mike Fiore 16:b630e18103e5 7 *
Mike Fiore 16:b630e18103e5 8 * @author Jason Reiss
Mike Fiore 16:b630e18103e5 9 * @date 10-31-2015
Mike Fiore 16:b630e18103e5 10 * @brief lora::Mote provides a user level class that abstracts the complexity of the Mac layer
Mike Fiore 16:b630e18103e5 11 *
Mike Fiore 16:b630e18103e5 12 * @details
Mike Fiore 16:b630e18103e5 13 *
Mike Fiore 16:b630e18103e5 14 */
Mike Fiore 16:b630e18103e5 15
Mike Fiore 16:b630e18103e5 16 #ifndef __LORA_MOTE_H__
Mike Fiore 16:b630e18103e5 17 #define __LORA_MOTE_H__
Mike Fiore 16:b630e18103e5 18
Mike Fiore 16:b630e18103e5 19 #include "rtos.h"
Mike Fiore 16:b630e18103e5 20 #include "MacEvents.h"
Mike Fiore 16:b630e18103e5 21 #include <vector>
Mike Fiore 16:b630e18103e5 22
Mike Fiore 16:b630e18103e5 23 class SxRadio;
Mike Fiore 16:b630e18103e5 24 class SxRadio1272;
Mike Fiore 16:b630e18103e5 25
Mike Fiore 16:b630e18103e5 26 namespace lora {
Mike Fiore 16:b630e18103e5 27
Mike Fiore 16:b630e18103e5 28 class Mac;
Mike Fiore 16:b630e18103e5 29 class ChannelPlan;
Mike Fiore 16:b630e18103e5 30
Mike Fiore 16:b630e18103e5 31 class MoteEvents: public MacEvents {
Mike Fiore 16:b630e18103e5 32
Mike Fiore 16:b630e18103e5 33 /**
Jenkins@KEILDM1.dc.multitech.prv 114:8462870088eb 34 * Fired at start of TX
Jenkins@KEILDM1.dc.multitech.prv 114:8462870088eb 35 */
Jenkins@KEILDM1.dc.multitech.prv 114:8462870088eb 36 virtual void TxStart(void);
Jenkins@KEILDM1.dc.multitech.prv 114:8462870088eb 37
Jenkins@KEILDM1.dc.multitech.prv 114:8462870088eb 38 /**
Mike Fiore 16:b630e18103e5 39 * Fired at end of TX
Mike Fiore 16:b630e18103e5 40 * @param dr datarate used for TX
Mike Fiore 16:b630e18103e5 41 */
Mike Fiore 16:b630e18103e5 42 virtual void TxDone(uint8_t dr);
Mike Fiore 16:b630e18103e5 43
Mike Fiore 16:b630e18103e5 44 /**
Mike Fiore 16:b630e18103e5 45 * Fired if TX timed out
Mike Fiore 16:b630e18103e5 46 */
Mike Fiore 16:b630e18103e5 47 virtual void TxTimeout(void);
Mike Fiore 16:b630e18103e5 48
Mike Fiore 16:b630e18103e5 49 /**
Mike Fiore 16:b630e18103e5 50 * Fired when JoinAccept message is received and MIC is validated
Mike Fiore 16:b630e18103e5 51 * @param payload received bytes
Mike Fiore 16:b630e18103e5 52 * @param size number of received bytes
Mike Fiore 16:b630e18103e5 53 * @param rssi of received packet
Mike Fiore 16:b630e18103e5 54 * @param snr of received packet
Mike Fiore 16:b630e18103e5 55 */
Mike Fiore 16:b630e18103e5 56 virtual void JoinAccept(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr);
Mike Fiore 16:b630e18103e5 57
Mike Fiore 16:b630e18103e5 58 /**
Mike Fiore 16:b630e18103e5 59 * Fired when JoinAccept message is received and MIC is not valid
Mike Fiore 16:b630e18103e5 60 * @param payload received bytes
Mike Fiore 16:b630e18103e5 61 * @param size number of received bytes
Mike Fiore 16:b630e18103e5 62 * @param rssi of received packet
Mike Fiore 16:b630e18103e5 63 * @param snr of received packet
Mike Fiore 16:b630e18103e5 64 */
Mike Fiore 16:b630e18103e5 65 virtual void JoinFailed(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr);
Mike Fiore 16:b630e18103e5 66
Mike Fiore 16:b630e18103e5 67 /**
Mike Fiore 16:b630e18103e5 68 * Fired when non duplicate packet is received and MIC is valid
Mike Fiore 16:b630e18103e5 69 * @param port of packet
Mike Fiore 16:b630e18103e5 70 * @param payload received bytes
Mike Fiore 16:b630e18103e5 71 * @param size number of received bytes
Mike Fiore 16:b630e18103e5 72 * @param rssi of received packet
Mike Fiore 16:b630e18103e5 73 * @param snr of received packet
Mike Fiore 16:b630e18103e5 74 * @param ctrl Downlink control field of packet
Mike Fiore 16:b630e18103e5 75 * @param slot rx window packet was received
Mike Fiore 16:b630e18103e5 76 * @param retries number of attempts before ack was received
Mike Fiore 16:b630e18103e5 77 */
Jenkins@KEILDM1.dc.multitech.prv 90:79a8c8660a4e 78 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, uint32_t address = 0);
Mike Fiore 16:b630e18103e5 79
Mike Fiore 16:b630e18103e5 80 /**
Mike Fiore 16:b630e18103e5 81 * Fired when radio has received a packet, packet is not validated
Mike Fiore 16:b630e18103e5 82 * @param payload received bytes
Mike Fiore 16:b630e18103e5 83 * @param size number of received bytes
Mike Fiore 16:b630e18103e5 84 * @param rssi of received packet
Mike Fiore 16:b630e18103e5 85 * @param snr of received packet
Mike Fiore 16:b630e18103e5 86 * @param ctrl Downlink control field of packet
Mike Fiore 16:b630e18103e5 87 * @param slot rx window packet was received
Mike Fiore 16:b630e18103e5 88 */
Mike Fiore 16:b630e18103e5 89 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 90
Mike Fiore 16:b630e18103e5 91 /**
Mike Fiore 16:b630e18103e5 92 * Fired if rx window times out
Mike Fiore 16:b630e18103e5 93 * @param slot rx window that timed out
Mike Fiore 16:b630e18103e5 94 */
Mike Fiore 16:b630e18103e5 95 virtual void RxTimeout(uint8_t slot);
Mike Fiore 16:b630e18103e5 96
Mike Fiore 16:b630e18103e5 97 /**
Mike Fiore 16:b630e18103e5 98 * Fired if rx CRC error
Mike Fiore 16:b630e18103e5 99 * @param slot rx window that errored
Mike Fiore 16:b630e18103e5 100 */
Mike Fiore 16:b630e18103e5 101 virtual void RxError(uint8_t slot);
Mike Fiore 16:b630e18103e5 102
Mike Fiore 16:b630e18103e5 103 /**
Mike Fiore 16:b630e18103e5 104 * Fired if pong packet is received
Mike Fiore 16:b630e18103e5 105 * @param m_rssi of received packet at mote
Mike Fiore 16:b630e18103e5 106 * @param m_snr of received packet at mote
Mike Fiore 16:b630e18103e5 107 * @param s_rssi of received packet at server
Mike Fiore 16:b630e18103e5 108 * @param s_snr of received packet at server
Mike Fiore 16:b630e18103e5 109 */
Mike Fiore 16:b630e18103e5 110 virtual void Pong(int16_t m_rssi, int8_t m_snr, int16_t s_rssi, int8_t s_snr);
Mike Fiore 16:b630e18103e5 111
Mike Fiore 16:b630e18103e5 112 /**
Mike Fiore 16:b630e18103e5 113 * Fired if network link check answer is received
Mike Fiore 16:b630e18103e5 114 * @param m_rssi of received packet at mote
Mike Fiore 16:b630e18103e5 115 * @param m_snr of received packet at mote
Mike Fiore 16:b630e18103e5 116 * @param s_snr margin of received packet at server
Mike Fiore 16:b630e18103e5 117 * @param s_gateways number of gateways reporting the packet
Mike Fiore 16:b630e18103e5 118 */
Mike Fiore 16:b630e18103e5 119 virtual void NetworkLinkCheck(int16_t m_rssi, int8_t m_snr, int8_t s_snr, uint8_t s_gateways);
Mike Fiore 16:b630e18103e5 120
Mike Fiore 16:b630e18103e5 121 /**
Mike Fiore 16:b630e18103e5 122 * Callback to for device to measure the battery level and report to server
Mike Fiore 16:b630e18103e5 123 * @return battery level 0-255, 0 - external power, 1-254 level min-max, 255 device unable to measure battery
Mike Fiore 16:b630e18103e5 124 */
Mike Fiore 16:b630e18103e5 125 virtual uint8_t MeasureBattery();
Jenkins@KEILDM1.dc.multitech.prv 26:17479e0039f6 126
Jenkins@KEILDM1.dc.multitech.prv 26:17479e0039f6 127 /**
Jenkins@KEILDM1.dc.multitech.prv 26:17479e0039f6 128 * Fired when ack attempts are exhausted and RxTimeout or RxError occur
Jenkins@KEILDM1.dc.multitech.prv 26:17479e0039f6 129 * @param retries number of attempts to resend the packet
Jenkins@KEILDM1.dc.multitech.prv 26:17479e0039f6 130 */
Jenkins@KEILDM1.dc.multitech.prv 26:17479e0039f6 131 virtual void MissedAck(uint8_t retries);
Mike Fiore 16:b630e18103e5 132 };
Mike Fiore 16:b630e18103e5 133
Mike Fiore 16:b630e18103e5 134 class Mote {
Mike Fiore 16:b630e18103e5 135 public:
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 136 Mote(Settings* settings, ChannelPlan* plan);
Mike Fiore 16:b630e18103e5 137 virtual ~Mote();
Mike Fiore 16:b630e18103e5 138
Mike Fiore 16:b630e18103e5 139 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 140 * MTS LoRa version
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 141 * @return string containing version information
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 142 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 143 const char* getId();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 144
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 145 /**
Mike Fiore 16:b630e18103e5 146 * Indicator for network session join status
Mike Fiore 16:b630e18103e5 147 * @return true if joined to network
Mike Fiore 16:b630e18103e5 148 */
Mike Fiore 16:b630e18103e5 149 bool Joined();
Mike Fiore 16:b630e18103e5 150
Mike Fiore 16:b630e18103e5 151 /**
Mike Fiore 16:b630e18103e5 152 * Send join request
Mike Fiore 16:b630e18103e5 153 * @return LORA_OK if request was sent
Mike Fiore 16:b630e18103e5 154 */
Mike Fiore 16:b630e18103e5 155 uint8_t Join();
Mike Fiore 16:b630e18103e5 156
Mike Fiore 16:b630e18103e5 157 /**
Mike Fiore 16:b630e18103e5 158 * Send a packet
Mike Fiore 16:b630e18103e5 159 * @param port to send packet
Mike Fiore 16:b630e18103e5 160 * @param payload of packet
Mike Fiore 16:b630e18103e5 161 * @param size in bytes
Mike Fiore 16:b630e18103e5 162 * @return LORA_OK if successful
Mike Fiore 16:b630e18103e5 163 * @return LORA_MAX_PAYLOAD_EXCEEDED if payload size exceeds datarate maximum
Mike Fiore 16:b630e18103e5 164 * @return LORA_NO_CHANS_ENABLED if there is not an available channel that supports the current datarate
Mike Fiore 16:b630e18103e5 165 * @return LORA_LINK_BUSY if link was busy
Mike Fiore 16:b630e18103e5 166 * @return LORA_RADIO_BUSY if radio was busy
Mike Fiore 16:b630e18103e5 167 * @return LORA_BUFFER_FULL if mac commands filled the packet, client should resend the packet
Mike Fiore 16:b630e18103e5 168 */
Mike Fiore 16:b630e18103e5 169 uint8_t Send(uint8_t port, const uint8_t* payload, uint8_t size);
Mike Fiore 16:b630e18103e5 170
Mike Fiore 16:b630e18103e5 171 /**
Mike Fiore 16:b630e18103e5 172 * Configure the channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 173 * @param plan pointer to ChannelPlan object
Mike Fiore 16:b630e18103e5 174 * @return LORA_OK
Mike Fiore 16:b630e18103e5 175 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 176 uint8_t SetChannelPlan(ChannelPlan* plan);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 177
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 178 Settings* GetSettings();
Mike Fiore 16:b630e18103e5 179
Mike Fiore 16:b630e18103e5 180 /**
Mike Fiore 16:b630e18103e5 181 * Get the channel mask of currently enabled channels
Mike Fiore 16:b630e18103e5 182 * @return vector containing channel bit masks
Mike Fiore 16:b630e18103e5 183 */
Mike Fiore 16:b630e18103e5 184 std::vector<uint16_t> GetChannelMask();
Mike Fiore 16:b630e18103e5 185
Mike Fiore 16:b630e18103e5 186 /**
Mike Fiore 16:b630e18103e5 187 * Set a 16 bit channel mask with index
Mike Fiore 16:b630e18103e5 188 * @param index of mask to set 0:0-15, 1:16-31 ...
Mike Fiore 16:b630e18103e5 189 * @param mask 16 bit mask of enabled channels
Mike Fiore 16:b630e18103e5 190 * @return true
Mike Fiore 16:b630e18103e5 191 */
Mike Fiore 16:b630e18103e5 192 virtual uint8_t SetChannelMask(uint8_t index, uint16_t mask);
Mike Fiore 16:b630e18103e5 193
Mike Fiore 16:b630e18103e5 194 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 195 * Set the current frequency sub band for hybrid operation 1-8 else 0 for 64 channel operation
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 196 * @param sub_band 0-8
Mike Fiore 16:b630e18103e5 197 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 198 uint8_t SetFrequencySubBand(uint8_t sub_band);
Mike Fiore 16:b630e18103e5 199
Mike Fiore 16:b630e18103e5 200 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 201 * Get the current frequency sub band
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 202 * @return sub band 0-8
Mike Fiore 16:b630e18103e5 203 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 204 uint8_t GetFrequencySubBand();
Mike Fiore 16:b630e18103e5 205
Mike Fiore 16:b630e18103e5 206 /**
Mike Fiore 16:b630e18103e5 207 * Add a channel to the channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 208 * EU868, AS923 and KR920 allows additional channels to be added
Mike Fiore 16:b630e18103e5 209 * Channels 0-2 are fixed default channels
Mike Fiore 16:b630e18103e5 210 *
Mike Fiore 16:b630e18103e5 211 * @param index of the channel
Mike Fiore 16:b630e18103e5 212 * @param frequency of the channel or 0 to remove channel
Mike Fiore 16:b630e18103e5 213 * @param range of datarates allowed by the channel
Mike Fiore 16:b630e18103e5 214 * @return LORA_OK if channel was added
Mike Fiore 16:b630e18103e5 215 */
Mike Fiore 16:b630e18103e5 216 uint8_t AddChannel(uint8_t index, uint32_t frequency, lora::DatarateRange range);
Mike Fiore 16:b630e18103e5 217
Mike Fiore 16:b630e18103e5 218 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 219 * Add a downlink channel to the channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 220 * EU868, AS923 and KR920 allows downlink channels to be added
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 221 *
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 222 * @param index of the channel
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 223 * @param frequency of the channel or 0 to remove channel
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 224 * @return LORA_OK if channel was added
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 225 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 226 uint8_t AddDownlinkChannel(uint8_t index, uint32_t frequency);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 227
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 228 /**
Mike Fiore 16:b630e18103e5 229 * Set network mode
Mike Fiore 16:b630e18103e5 230 * Choose Public LoRaWAN mode or Private Multitech mode
Mike Fiore 16:b630e18103e5 231 *
Mike Fiore 16:b630e18103e5 232 * Public mode uses 0x34 sync word with 5/6 second join windows
Mike Fiore 16:b630e18103e5 233 * Private mode uses 0x12 sync word with 1/2 second join windows
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 234 * US915/AU915 Rx1 and Rx2 are fixed per frequency sub band setting
Mike Fiore 16:b630e18103e5 235 *
Mike Fiore 16:b630e18103e5 236 * @param mode public or private
Mike Fiore 16:b630e18103e5 237 * @return LORA_OK
Mike Fiore 16:b630e18103e5 238 */
Mike Fiore 16:b630e18103e5 239 uint8_t SetNetworkMode(uint8_t mode);
Mike Fiore 16:b630e18103e5 240
Mike Fiore 16:b630e18103e5 241 /**
Mike Fiore 16:b630e18103e5 242 * Get a pointer to the mac layer
Mike Fiore 16:b630e18103e5 243 * @return Mac mac
Mike Fiore 16:b630e18103e5 244 */
Mike Fiore 16:b630e18103e5 245 Mac* GetMac();
Mike Fiore 16:b630e18103e5 246
Mike Fiore 16:b630e18103e5 247 /**
Mike Fiore 16:b630e18103e5 248 * Get a pointer to the radio
Mike Fiore 16:b630e18103e5 249 * Can be used to read radio registers or get a random value based on RSSI
Mike Fiore 16:b630e18103e5 250 *
Mike Fiore 16:b630e18103e5 251 * @return SxRadio pointer
Mike Fiore 16:b630e18103e5 252 */
Mike Fiore 16:b630e18103e5 253 SxRadio* GetRadio();
Mike Fiore 16:b630e18103e5 254
Mike Fiore 16:b630e18103e5 255 /**
Mike Fiore 16:b630e18103e5 256 * Get the current statistics for the device
Mike Fiore 16:b630e18103e5 257 * @return Statistics
Mike Fiore 16:b630e18103e5 258 */
Mike Fiore 16:b630e18103e5 259 Statistics& GetStats();
Mike Fiore 16:b630e18103e5 260
Mike Fiore 16:b630e18103e5 261 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 262 * Reset the current statistics for the device
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 263 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 264 void ResetStats();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 265
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 266 /**
Mike Fiore 16:b630e18103e5 267 * Get time on air with current settings for provided payload bytes
Mike Fiore 16:b630e18103e5 268 * 13 overhead bytes will be added to payload
Mike Fiore 16:b630e18103e5 269 * @param bytes of payload data
Mike Fiore 16:b630e18103e5 270 * @return time-on-air in ms
Mike Fiore 16:b630e18103e5 271 */
Mike Fiore 16:b630e18103e5 272 uint32_t GetTimeOnAir(uint8_t bytes);
Mike Fiore 16:b630e18103e5 273
Mike Fiore 16:b630e18103e5 274 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 275 * Get time off air required to adhere to duty-cycle limitations
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 276 * @return time-off-air in ms
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 277 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 278 uint32_t GetTimeOffAir();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 279
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 280 /**
Mike Fiore 16:b630e18103e5 281 * Call before setting device in sleep mode to place radio in sleep
Mike Fiore 16:b630e18103e5 282 */
Mike Fiore 16:b630e18103e5 283 void Sleep();
Mike Fiore 16:b630e18103e5 284
Mike Fiore 16:b630e18103e5 285 protected:
Mike Fiore 16:b630e18103e5 286 SxRadio1272* _radio;
Mike Fiore 16:b630e18103e5 287 Settings* _settings;
Mike Fiore 16:b630e18103e5 288 Mac* _mac;
Mike Fiore 16:b630e18103e5 289
Mike Fiore 16:b630e18103e5 290 private:
Mike Fiore 16:b630e18103e5 291 ChannelPlan* _plan;
Mike Fiore 16:b630e18103e5 292 MoteEvents _events;
Mike Fiore 16:b630e18103e5 293 };
Mike Fiore 16:b630e18103e5 294
Mike Fiore 16:b630e18103e5 295 }
Mike Fiore 16:b630e18103e5 296 #endif