khang_91

Committer:
nguyenhoang9x5555
Date:
Tue Jun 23 07:26:42 2020 +0000
Revision:
183:16414698889c
Parent:
172:7ec44396a51b
phienbanthunghiem

Who changed what in which revision?

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