khang_91

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