libxdot LESS version

Committer:
icarballeda
Date:
Fri May 03 21:37:43 2019 +0000
Revision:
15:e098cf00f502
Parent:
11:be2a6466d680
CO2 is equal to -99 when it fails.; AppEUI, AppKEY & Radio Confs edited to work with Cisco Gateways (Multitech Compatible); Smartium: Added New message, alert string as in CDFS protocol.; Fixed: Accel & ux for errors

Who changed what in which revision?

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