Stable version of the mDot library for mbed 5. This version of the library is suitable for deployment scenarios. See lastest commit message for version of mbed-os library that has been tested against.

Dependents:   mdot_two_way unh-hackathon-example unh-hackathon-example-raw TelitSensorToCloud ... more

Fork of libmDot-dev-mbed5-deprecated by MultiTech

The Dot library provides a LoRaWan certified stack for LoRa communication using MultiTech mDot and xDot devices. The stack is compatible with mbed 5.

The name of the repository can be used to determine which device the stack was compiled for and if it's a development or production-ready build:

A changelog for the Dot library can be found here.

The Dot library version and the version of mbed-os it was compiled against can both be found in the commit message for that revision of the Dot library. Building your application with the same version of mbed-os as what was used to build the Dot library is highly recommended!

The Dot-Examples repository demonstrates how to use the Dot library in a custom application.

The mDot and xDot platform pages have lots of platform specific information and document potential issues, gotchas, etc, and provide instructions for getting started with development. Please take a look at the platform page before starting development as they should answer many questions you will have.

FOTA

Full FOTA support is only available with mDot, xDot does not have the required external flash. xDot can use the FOTA example to dynamically join a multicast session only. After joining the multicast session the received Fragmentation packets could be handed to a host MCU for processing and at completion the firmware can be loaded into the xDot using the bootloader and y-modem. See xDot Developer Guide.

  • Add the following code to allow Fota to use the Dot instance

main.cpp

    // Initialize FOTA singleton
    Fota::getInstance(dot);
  • Add fragmentation handling the the PacketRx event

RadioEvent.h

    virtual void PacketRx(uint8_t port, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr, lora::DownlinkControl ctrl, uint8_t slot, uint8_t retries, uint32_t address, bool dupRx) {
        mDotEvent::PacketRx(port, payload, size, rssi, snr, ctrl, slot, retries, address, dupRx);

#if ACTIVE_EXAMPLE == FOTA_EXAMPLE
        if(port == 200 || port == 201 || port == 202) {
            Fota::getInstance()->processCmd(payload, port, size);
        }
#endif
    }

A definition is needed to enable Fragmentation support on mDot and save fragments to flash. This should not be defined for xDot and will result in a compiler error.

mbed_app.json

{
    "macros": [
        "FOTA=1"
    ]
}

The FOTA implementation has a few differences from the LoRaWAN Protocol

  • Fragmentation Indexing starts at 0
  • McKEKey is 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
  • Start Time is a count-down in seconds to start of session
Committer:
Jenkins@KEILDM1.dc.multitech.prv
Date:
Thu Aug 23 14:18:55 2018 -0500
Revision:
64:64982192a2af
Parent:
61:58ed1e136af5
Child:
65:acc0468b9aec
mdot-library revision 3.1.0 and mbed-os revision mbed-os-5.7.7

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