Wenkai Gong / libmDot-mbed5-UNSWDot
Committer:
Jenkins@KEILDM1.dc.multitech.prv
Date:
Mon Feb 17 14:43:04 2020 -0600
Revision:
72:b1e07ec1c30d
Parent:
70:0c5b5b02d17b
mdot-library revision 3.3.5 and mbed-os revision mbed-os-5.13.4

Who changed what in which revision?

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