The Modified Dot Library for SX1272

This version has been restoring as initial changes.

Verify the following dependencies:

Mbed-os 5.11 libmdot 3.2.0 for Mbed OS5.11

Committer:
DanistyWuKids
Date:
Fri Jul 10 23:47:58 2020 +1000
Branch:
old_stable_update
Revision:
82:bfca91bb8341
Parent:
65:acc0468b9aec
Child:
68:5f787643e7d7
Update same as on 75:268c51ddfc06

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