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