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::ChannelPlan provides an interface for LoRaWAN channel schemes
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 __CHANNEL_STRATEGY_H__
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 17 #define __CHANNEL_STRATEGY_H__
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 18
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 19 #include "Lora.h"
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 20 #include "SxRadio.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 namespace lora {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 24
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 25 class ChannelPlan {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 26 public:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 27
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 28 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 29 * Descriptions for channel plans & region information.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 30 * Bits 0-2 represent the plan type (fixed or dynamic)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 31 * 0b000 cannot be used as plans may line up with old definitions and cause much badness
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 32 * 0b001 fixed channel plans
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 33 * 0b010 dynamic channel plans
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 34 * 0b011 - 0b111 RFU
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 35 * Bits 3-7 represent the specific channel plan/region within the plan type
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 36 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 37 enum PlanType {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 38 FIXED = 0x20,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 39 DYNAMIC = 0x40,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 40 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 41
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 42 enum Plan {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 43 EU868_OLD = 0x00,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 44 US915_OLD = 0x01,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 45 AU915_OLD = 0x02,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 46
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 47 FB_EU868 = 0x00,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 48 FB_US915 = 0x01,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 49 FB_AU915 = 0x02,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 50
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 51 FB_868 = 0x00,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 52 FB_915 = 0x01,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 53
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 54 US915 = FIXED | 0x00,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 55 AU915 = FIXED | 0x01,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 56
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 57 EU868 = DYNAMIC | 0x00,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 58 IN865 = DYNAMIC | 0x01,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 59 AS923 = DYNAMIC | 0x02,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 60 KR920 = DYNAMIC | 0x03,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 61 AS923_JAPAN = DYNAMIC | 0x04,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 62
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 63 NONE = 0xFF,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 64 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 65
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 66 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 67 * ChannelPlan constructor
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 68 * @param radio SxRadio object used to set Tx/Rx config
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 69 * @param settings Settings object
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 70 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 71 ChannelPlan(SxRadio* radio, Settings* settings);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 72
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 73 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 74 * ChannelPlan destructor
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 75 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 76 virtual ~ChannelPlan();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 77
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 78 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 79 * Checks that at least one channel exist for the data rate
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 80 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 81 virtual uint8_t ValidateAdrDatarate(uint8_t status);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 82
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 83 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 84 * Initialize channels, datarates and duty cycle bands according to current channel plan in settings
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 85 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 86 virtual void Init() = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 87
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 88 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 89 * Set SxRadio object to be used to set Tx/Rx config
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 90 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 91 virtual void SetRadio(SxRadio* radio);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 92
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 93 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 94 * Set Settings object
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 95 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 96 virtual void SetSettings(Settings* settings);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 97
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 98 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 99 * Get the next channel to use to transmit
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 100 * @return LORA_OK if channel was found
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 101 * @return LORA_NO_CHANS_ENABLED
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 102 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 103 virtual uint8_t GetNextChannel() = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 104
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 105 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 106 * Set the number of channels in the plan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 107 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 108 virtual void SetNumberOfChannels(uint8_t channels, bool resize = true);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 109
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 110 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 111 * Get the number of channels in the plan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 112 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 113 virtual uint8_t GetNumberOfChannels();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 114
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 115 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 116 * Check if channel is enabled
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 117 * @return true if enabled
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 118 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 119 virtual bool IsChannelEnabled(uint8_t channel);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 120
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 121 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 122 * Set a 16 bit channel mask with offset
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 123 * @param index of mask to set 0:0-15, 1:16-31 ...
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 124 * @param mask 16 bit mask of enabled channels
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 125 * @return true
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 126 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 127 virtual bool SetChannelMask(uint8_t index, uint16_t mask);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 128
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 129 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 130 * Get the channel mask of currently enabled channels
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 131 * @return vector containing channel bit masks
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 132 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 133 virtual std::vector<uint16_t> GetChannelMask();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 134
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 135 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 136 * Add a channel to the ChannelPlan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 137 * @param index of channel, use -1 to add to end
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 138 * @param channel settings to add
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 139 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 140 virtual uint8_t AddChannel(int8_t index, Channel channel) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 141
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 142 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 143 * Get channel at index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 144 * @return Channel
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 145 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 146 virtual Channel GetChannel(int8_t index) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 147
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 148 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 149 * Add a downlink channel to the ChannelPlan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 150 * Set to 0 to use the default uplink channel frequency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 151 * @param index of channel, use -1 to add to end
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 152 * @param channel settings to add
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 153 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 154 virtual uint8_t AddDownlinkChannel(int8_t index, Channel channel);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 155
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 156 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 157 * Get channel at index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 158 * @return Channel
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 159 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 160 virtual Channel GetDownlinkChannel(uint8_t index);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 161
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 162 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 163 * Set number of datarates in ChannelPlan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 164 * @param datarates
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 165 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 166 virtual void SetNumberOfDatarates(uint8_t datarates);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 167
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 168 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 169 * Add a datarate to the ChannelPlan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 170 * @param index of datarate, use -1 to add to end
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 171 * @param datarate settings to add
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 172 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 173 virtual uint8_t AddDatarate(int8_t index, Datarate datarate);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 174
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 175 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 176 * Get datarate at index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 177 * @return Datarate
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 178 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 179 virtual Datarate GetDatarate(int8_t index);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 180
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 181 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 182 * Get max payload size for current datarate
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 183 * @return size in bytes
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 184 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 185 virtual uint8_t GetMaxPayloadSize();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 186
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 187 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 188 * Get rx window settings for requested window
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 189 * RX_1, RX_2, RX_BEACON, RX_SLOT
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 190 * @param window
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 191 * @return RxWindow
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 192 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 193 virtual RxWindow GetRxWindow(uint8_t window) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 194
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 195 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 196 * Get current channel to use for transmitting
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 197 * @param channel index of channel
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 198 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 199 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 200 virtual uint8_t SetTxChannel(uint8_t channel);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 201
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 202 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 203 * Get datarate to use on the join request
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 204 * @return datarate index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 205 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 206 virtual uint8_t GetJoinDatarate() = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 207
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 208 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 209 * Calculate the next time a join request is possible
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 210 * @param size of join frame
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 211 * @returns LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 212 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 213 virtual uint8_t CalculateJoinBackoff(uint8_t size) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 214
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 215 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 216 * Get the current datarate
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 217 * @return Datarate
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 218 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 219 virtual Datarate GetTxDatarate();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 220
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 221 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 222 * Set the current datarate
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 223 * @param index of datarate
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 224 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 225 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 226 virtual uint8_t SetTxDatarate(uint8_t index);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 227
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 228 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 229 * Set the datarate offset used for first receive window
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 230 * @param offset
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 231 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 232 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 233 virtual uint8_t SetRx1Offset(uint8_t offset);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 234
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 235 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 236 * Set the frequency for second receive window
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 237 * @param freq
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 238 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 239 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 240 virtual uint8_t SetRx2Frequency(uint32_t freq);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 241
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 242 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 243 * Set the datarate index used for second receive window
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 244 * @param index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 245 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 246 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 247 virtual uint8_t SetRx2DatarateIndex(uint8_t index);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 248
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 249 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 250 * Get next channel and set the SxRadio tx config with current settings
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 251 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 252 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 253 virtual uint8_t SetTxConfig() = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 254
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 255 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 256 * Set the SxRadio rx config provided window
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 257 * @param window to be opened
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 258 * @param continuous keep window open
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 259 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 260 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 261 virtual uint8_t SetRxConfig(uint8_t window, bool continuous) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 262
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 263 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 264 * Set frequency sub band if supported by plan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 265 * @param sub_band
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 266 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 267 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 268 virtual uint8_t SetFrequencySubBand(uint8_t group) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 269
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 270 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 271 * Get frequency sub band if supported by plan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 272 * @return sub band 0-8 or 0 if not supported
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 273 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 274 virtual uint8_t GetFrequencySubBand();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 275
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 276 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 277 * Reset the ack counter used to lower datarate if ACK's are missed
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 278 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 279 virtual void ResetAckCounter();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 280
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 281 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 282 * Callback for radio to request channel change when frequency hopping
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 283 * @param currentChannel
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 284 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 285 virtual void FhssChangeChannel(uint8_t currentChannel);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 286
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 287 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 288 * Callback for ACK timeout event
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 289 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 290 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 291 virtual uint8_t HandleAckTimeout();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 292
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 293 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 294 * Callback for Join Accept packet to load optional channels
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 295 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 296 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 297 virtual uint8_t HandleJoinAccept(const uint8_t* buffer, uint8_t size) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 298
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 299 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 300 * Callback to for rx parameter setup ServerCommand
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 301 * @param payload packet data
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 302 * @param index of start of command buffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 303 * @param size number of bytes in command buffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 304 * @param[out] status to be returned in MoteCommand answer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 305 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 306 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 307 virtual uint8_t HandleRxParamSetup(const uint8_t* payload, uint8_t index, uint8_t size, uint8_t& status) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 308
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 309 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 310 * Callback to for new channel ServerCommand
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 311 * @param payload packet data
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 312 * @param index of start of command buffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 313 * @param size number of bytes in command buffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 314 * @param[out] status to be returned in MoteCommand answer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 315 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 316 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 317 virtual uint8_t HandleNewChannel(const uint8_t* payload, uint8_t index, uint8_t size, uint8_t& status) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 318
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 319 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 320 * Callback to for downlink channel request ServerCommand
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 321 * @param payload packet data
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 322 * @param index of start of command buffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 323 * @param size number of bytes in command buffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 324 * @param[out] status to be returned in MoteCommand answer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 325 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 326 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 327 virtual uint8_t HandleDownlinkChannelReq(const uint8_t* payload, uint8_t index, uint8_t size, uint8_t& status);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 328
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 329 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 330 * Callback to for ping slot channel request ServerCommand
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 331 * @param payload packet data
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 332 * @param index of start of command buffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 333 * @param size number of bytes in command buffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 334 * @param[out] status to be returned in MoteCommand answer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 335 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 336 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 337 virtual uint8_t HandlePingSlotChannelReq(const uint8_t* payload, uint8_t index, uint8_t size, uint8_t& status) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 338
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 339 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 340 * Callback to for beacon frequency request ServerCommand
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 341 * @param payload packet data
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 342 * @param index of start of command buffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 343 * @param size number of bytes in command buffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 344 * @param[out] status to be returned in MoteCommand answer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 345 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 346 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 347 virtual uint8_t HandleBeaconFrequencyReq(const uint8_t* payload, uint8_t index, uint8_t size, uint8_t& status) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 348
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 349 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 350 * Callback to for adaptive datarate ServerCommand
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 351 * @param payload packet data
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 352 * @param index of start of command buffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 353 * @param size number of bytes in command buffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 354 * @param[out] status to be returned in MoteCommand answer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 355 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 356 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 357 virtual uint8_t HandleAdrCommand(const uint8_t* payload, uint8_t index, uint8_t size, uint8_t& status) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 358
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 359 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 360 * Validate the configuration after multiple ADR commands have been applied
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 361 * @return status to be returned in MoteCommand answer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 362 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 363 virtual uint8_t ValidateAdrConfiguration() = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 364
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 365 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 366 * Check that Rf Frequency is within channel plan range
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 367 * @param freq frequency in Hz
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 368 * @return true if valid frequency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 369 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 370 virtual bool CheckRfFrequency(uint32_t freq);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 371
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 372 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 373 * Flag for ADR
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 374 * @return true if ADR is enable in settings
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 375 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 376 virtual bool IsAdrEnabled();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 377
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 378 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 379 * Flag if ADR ACK should be sent in next packet
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 380 * @return true when flag should be set
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 381 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 382 virtual bool AdrAckReq();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 383
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 384 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 385 * Increment the ADR counter to track when ADR ACK request should be sent
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 386 * @return current value
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 387 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 388 virtual uint8_t IncAdrCounter();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 389
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 390 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 391 * Reset the ADR counter when valid downlink is received from network server
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 392 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 393 virtual void ResetAdrCounter();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 394
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 395 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 396 * Get the time the radio must be off air to comply with regulations
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 397 * Time to wait may be dependent on duty-cycle restrictions per channel
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 398 * Or duty-cycle of join requests if OTAA is being attempted
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 399 * @return ms of time to wait for next tx opportunity
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 400 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 401 virtual uint32_t GetTimeOffAir() = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 402
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 403 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 404 * Get the channels in use by current channel plan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 405 * @return channel frequencies
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 406 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 407 virtual std::vector<uint32_t> GetChannels() = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 408
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 409 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 410 * Get the downlink channels in use by current channel plan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 411 * @return channel frequencies
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 412 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 413 virtual std::vector<uint32_t> GetDownlinkChannels();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 414
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 415 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 416 * Get the channel datarate ranges in use by current channel plan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 417 * @return channel datarate ranges
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 418 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 419 virtual std::vector<uint8_t> GetChannelRanges() = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 420
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 421 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 422 * Set the time off air for the given duty band
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 423 * @param band index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 424 * @param time off air in ms
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 425 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 426 virtual void SetDutyBandTimeOff(uint8_t band, uint32_t timeoff);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 427
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 428 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 429 * Get the time off air for the given duty band
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 430 * @param band index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 431 * @return time off air in ms
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 432 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 433 virtual uint32_t GetDutyBandTimeOff(uint8_t band);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 434
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 435 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 436 * Get the number of duty bands in the current channel plan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 437 * @return number of bands
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 438 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 439 virtual uint8_t GetNumDutyBands();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 440
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 441 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 442 * Get the duty band index for the given frequency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 443 * @param freq frequency in Hz
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 444 * @return index of duty band
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 445 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 446 virtual int8_t GetDutyBand(uint32_t freq);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 447
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 448 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 449 * Add duty band
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 450 * @param index of duty band or -1 to append
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 451 * @param band DutyBand definition
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 452 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 453 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 454 virtual uint8_t AddDutyBand(int8_t index, DutyBand band);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 455
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 456 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 457 * Update duty cycle with current settings
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 458 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 459 void UpdateDutyCycle(uint8_t bytes);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 460
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 461 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 462 * Update duty cycle with at given frequency and time on air
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 463 * @param freq frequency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 464 * @param time_on_air_ms tx time on air
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 465 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 466 virtual void UpdateDutyCycle(uint32_t freq, uint32_t time_on_air_ms);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 467
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 468 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 469 * Get time on air with current settings
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 470 * @param bytes number of bytes to be sent
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 471 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 472 virtual uint32_t GetTimeOnAir(uint8_t bytes);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 473
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 474 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 475 * Reset the duty timers with the current time off air
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 476 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 477 virtual void ResetDutyCycleTimer();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 478
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 479 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 480 * Print log message for given rx window
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 481 * @param wnd 1 or 2
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 482 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 483 virtual void LogRxWindow(uint8_t wnd) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 484
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 485 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 486 * Indicator of P2P mode
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 487 * @return true if enabled
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 488 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 489 virtual bool P2PEnabled();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 490
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 491 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 492 * Ack timeout for P2P mode
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 493 * @return timeout in ms
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 494 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 495 virtual uint16_t P2PTimeout();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 496
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 497 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 498 * Ack backoff for P2P mode
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 499 * @return backoff in ms
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 500 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 501 virtual uint16_t P2PBackoff();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 502
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 503 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 504 * Enable the default channels of the channel plan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 505 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 506 virtual void EnableDefaultChannels() = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 507
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 508 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 509 * Callback for radio thread to signal
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 510 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 511 virtual void MacEvent();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 512
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 513 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 514 * Called when MAC layer doesn't know about a command.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 515 * Use to add custom or new mac command handling
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 516 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 517 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 518 virtual uint8_t HandleMacCommand(uint8_t* payload, uint8_t& index);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 519
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 520 virtual void DecrementDatarate();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 521 virtual void IncrementDatarate();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 522
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 523 virtual std::string GetPlanName();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 524 virtual uint8_t GetPlan();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 525 virtual bool IsPlanFixed();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 526 virtual bool IsPlanDynamic();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 527 static bool IsPlanFixed(uint8_t plan);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 528 static bool IsPlanDynamic(uint8_t plan);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 529 virtual uint32_t GetMinFrequency();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 530 virtual uint32_t GetMaxFrequency();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 531
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 532 virtual uint8_t GetMinDatarate();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 533 virtual uint8_t GetMaxDatarate();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 534 virtual uint8_t GetMinDatarateOffset();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 535 virtual uint8_t GetMaxDatarateOffset();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 536
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 537 virtual uint8_t GetMinRx2Datarate();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 538 virtual uint8_t GetMaxRx2Datarate();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 539 virtual uint8_t GetMaxTxPower();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 540 virtual uint8_t GetMinTxPower();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 541
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 542 virtual uint16_t GetLBT_TimeUs();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 543 virtual void SetLBT_TimeUs(uint16_t us);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 544
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 545 virtual int8_t GetLBT_Threshold();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 546 virtual void SetLBT_Threshold(int8_t rssi);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 547
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 548 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 549 * Set LBT time and threshold to defaults
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 550 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 551 virtual void DefaultLBT();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 552
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 553 virtual bool ListenBeforeTalk();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 554
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 555 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 556 * use to clear downlink channels on join
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 557 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 558 virtual void ClearChannels();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 559
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 560 protected:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 561
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 562 SxRadio* GetRadio(); //!< Get pointer to the SxRadio object or assert if it is null
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 563 Settings* GetSettings(); //!< Get pointer to the settings object or assert if it is null
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 564
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 565 uint8_t _txChannel; //!< Current channel for transmit
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 566 uint8_t _txFrequencySubBand; //!< Current frequency sub band for hybrid operation
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 567
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 568 std::vector<Datarate> _datarates; //!< List of datarates
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 569
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 570 std::vector<Channel> _channels; //!< List of channels for transmit
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 571 std::vector<Channel> _dlChannels; //!< List of channels for receive if changed from default
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 572
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 573 std::vector<DutyBand> _dutyBands; //!< List of duty bands to limit radio time on air
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 574
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 575 uint8_t _maxTxPower; //!< Max Tx power for channel Plan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 576 uint8_t _minTxPower;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 577
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 578 uint32_t _minFrequency; //!< Minimum Frequency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 579 uint32_t _maxFrequency; //!< Maximum Frequency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 580
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 581 Channel _beaconChannel; //!< Beacon window settings
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 582 Channel _beaconRxChannel; //!< Beacon slot rx window settings
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 583
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 584 uint8_t _minDatarate; //!< Minimum datarate to accept in ADR request
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 585 uint8_t _maxDatarate; //!< Maximum datarate to accept in ADR request
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 586
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 587 uint8_t _minRx2Datarate; //!< Minimum datarate to accept in for Rx2
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 588 uint8_t _maxRx2Datarate; //!< Maximum datarate to accept in for Rx2
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 589 uint8_t _minDatarateOffset; //!< Minimum datarate offset to accept
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 590 uint8_t _maxDatarateOffset; //!< Maximum datarate offset to accept
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 591
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 592 uint32_t _freqUBase125k; //!< Start of 125K uplink channels
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 593 uint32_t _freqUStep125k; //!< Step between 125K uplink channels
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 594 uint32_t _freqUBase500k; //!< Start of 500K uplink channels
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 595 uint32_t _freqUStep500k; //!< Step between 500K uplink channels
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 596 uint32_t _freqDBase500k; //!< Start of 500K downlink channels
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 597 uint32_t _freqDStep500k; //!< Step between 500K downlink channels
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 598
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 599 uint8_t _numChans; //!< Number of total channels in plan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 600 uint8_t _numChans125k; //!< Number of 125K channels in plan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 601 uint8_t _numChans500k; //!< Number of 500K channels in plan
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 602
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 603 uint16_t _LBT_TimeUs; //!< Sample time in us for LBT
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 604 int8_t _LBT_Threshold; //!< Threshold in dBm for LBT
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 605
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 606 std::vector<uint16_t> _channelMask; //!< Bit mask for currently enabled channels
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 607
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 608 Timer _dutyCycleTimer; //!< Timer for tracking time-off-air
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 609 RtosTimer _txDutyTimer; //!< Event timer for expiration of time-off-air
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 610
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 611 bool _txDutyCyclePending; //!< Flag for pending duty cycle event
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 612
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 613 static void OnTxDutyCycleEvent(const void* arg); //!< Rtos callback for duty cycle event
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 614 void OnTxDutyCycleEventBottom(); //!< Callback for duty cycle event
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 615
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 616 static const uint8_t* TX_POWERS; //!< List of available tx powers
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 617 static const uint8_t* RADIO_POWERS; //!< List of available tx powers
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 618 static const uint8_t* MAX_PAYLOAD_SIZE; //!< List of max payload sizes for each datarate
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 619 static const uint8_t* MAX_PAYLOAD_SIZE_REPEATER; //!< List of repeater compatible max payload sizes for each datarate
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 620
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 621 uint8_t _plan;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 622 std::string _planName;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 623
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 624 private:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 625
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 626 SxRadio* _radio; //!< Injected SxRadio dependency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 627 Settings* _settings; //!< Current settings
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 628 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 629 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 630
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 631 #endif