MultiTech / libxDot-Custom

Fork of libxDot-dev-mbed5-deprecated by MultiTech

The Connect example can be used as a starting point for an xDot application.

Import programmDot_LoRa_Connect_Example_CUSTOM_AS923

Example configuration of frequencies and datarates for AS923 channel plan.

Change the libmDot-Custom library to libxDot-Custom after importing the above example.

Change the platform for the project to xDot in upper right corner of the compiler page.

Ensure the mbed-os version matches the with the library commit.

Currently the AT Firmware cannot be built online for the xDot.

Creating new channel plans

Copy EU868 or US915 custom channel plan as a starting point

Import librarymDot_Channel_Plans

Channel plans to enable libmDot-Custom

EU868 provides a framework for a DYNAMIC channel plan with duty-cycle limitations

US915 provides a framework for a FIXED channel plan

RADIO_POWERS are measured output in dBm for each radio tx power setting.

Additional MAC Commands can be implemented by overriding the HandleMacCommand function.

Steps

  1. Setup datarates, duty-cycle bands and channels in ChannelPlan_* constructor
  2. Modify GetJoinDatarate and CalculateJoinBackoff to change join datarates and backoff
  3. Customize HandleJoinAccept datarates
  4. Use GetRxWindow(int) to define how the device open Rx window 1 and 2
  5. GetNextChannel will pick a channel from the enabled channel at the current datarate before each TX
Committer:
jreiss
Date:
Fri Jan 06 14:48:17 2017 +0000
Revision:
24:707857d35a6e
Parent:
23:17a25e16ccf1
update mbed-os to 5.3.2; AS923 - add support for DL Channel and Tx Param Mac Commands; KR920 - add LBT;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 1 /** __ ___ ____ _ ______ __ ____ __ ____
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 2 * / |/ /_ __/ / /_(_)__/_ __/__ ____/ / / __/_ _____ / /____ __ _ ___ / _/__ ____
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 3 * / /|_/ / // / / __/ /___// / / -_) __/ _ \ _\ \/ // (_-</ __/ -_) ' \(_-< _/ // _ \/ __/ __
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 4 * /_/ /_/\_,_/_/\__/_/ /_/ \__/\__/_//_/ /___/\_, /___/\__/\__/_/_/_/___/ /___/_//_/\__/ /_/
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 5 * Copyright (C) 2015 by Multi-Tech Systems /___/
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 6 *
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 7 *
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 8 * @author Jason Reiss
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 9 * @date 10-31-2015
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 10 * @brief lora::Mote provides a user level class that abstracts the complexity of the Mac layer
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 11 *
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 12 * @details
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 13 *
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 14 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 15
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 16 #ifndef __LORA_MOTE_H__
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 17 #define __LORA_MOTE_H__
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 18
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 19 #include "rtos.h"
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 20 #include "MacEvents.h"
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 21 #include <vector>
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 22
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 23 class SxRadio;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 24 class SxRadio1272;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 25
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 26 namespace lora {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 27
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 28 class Mac;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 29 class ChannelPlan;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 30
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 31 class MoteEvents: public MacEvents {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 32
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 33 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 34 * Fired at end of TX
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 35 * @param dr datarate used for TX
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 36 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 37 virtual void TxDone(uint8_t dr);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 38
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 39 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 40 * Fired if TX timed out
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 41 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 42 virtual void TxTimeout(void);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 43
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 44 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 45 * Fired when JoinAccept message is received and MIC is validated
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 46 * @param payload received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 47 * @param size number of received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 48 * @param rssi of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 49 * @param snr of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 50 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 51 virtual void JoinAccept(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 52
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 53 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 54 * Fired when JoinAccept message is received and MIC is not valid
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 55 * @param payload received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 56 * @param size number of received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 57 * @param rssi of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 58 * @param snr of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 59 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 60 virtual void JoinFailed(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 61
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 62 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 63 * Fired when non duplicate packet is received and MIC is valid
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 64 * @param port of packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 65 * @param payload received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 66 * @param size number of received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 67 * @param rssi of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 68 * @param snr of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 69 * @param ctrl Downlink control field of packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 70 * @param slot rx window packet was received
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 71 * @param retries number of attempts before ack was received
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 72 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 73 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 = 0);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 74
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 75 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 76 * Fired when radio has received a packet, packet is not validated
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 77 * @param payload received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 78 * @param size number of received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 79 * @param rssi of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 80 * @param snr of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 81 * @param ctrl Downlink control field of packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 82 * @param slot rx window packet was received
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 83 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 84 virtual void RxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr, lora::DownlinkControl ctrl, uint8_t slot);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 85
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 86 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 87 * Fired if rx window times out
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 88 * @param slot rx window that timed out
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 89 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 90 virtual void RxTimeout(uint8_t slot);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 91
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 92 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 93 * Fired if rx CRC error
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 94 * @param slot rx window that errored
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 95 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 96 virtual void RxError(uint8_t slot);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 97
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 98 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 99 * Fired if pong packet is received
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 100 * @param m_rssi of received packet at mote
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 101 * @param m_snr of received packet at mote
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 102 * @param s_rssi of received packet at server
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 103 * @param s_snr of received packet at server
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 104 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 105 virtual void Pong(int16_t m_rssi, int8_t m_snr, int16_t s_rssi, int8_t s_snr);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 106
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 107 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 108 * Fired if network link check answer is received
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 109 * @param m_rssi of received packet at mote
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 110 * @param m_snr of received packet at mote
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 111 * @param s_snr margin of received packet at server
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 112 * @param s_gateways number of gateways reporting the packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 113 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 114 virtual void NetworkLinkCheck(int16_t m_rssi, int8_t m_snr, int8_t s_snr, uint8_t s_gateways);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 115
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 116 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 117 * Callback to for device to measure the battery level and report to server
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 118 * @return battery level 0-255, 0 - external power, 1-254 level min-max, 255 device unable to measure battery
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 119 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 120 virtual uint8_t MeasureBattery();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 121
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 122 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 123 * Fired when ack attempts are exhausted and RxTimeout or RxError occur
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 124 * @param retries number of attempts to resend the packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 125 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 126 virtual void MissedAck(uint8_t retries);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 127 };
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 128
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 129 class Mote {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 130 public:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 131 Mote(Settings* settings);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 132 virtual ~Mote();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 133
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 134 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 135 * Indicator for network session join status
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 136 * @return true if joined to network
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 137 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 138 bool Joined();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 139
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 140 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 141 * Send join request
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 142 * @return LORA_OK if request was sent
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 143 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 144 uint8_t Join();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 145
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 146 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 147 * Send a packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 148 * @param port to send packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 149 * @param payload of packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 150 * @param size in bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 151 * @return LORA_OK if successful
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 152 * @return LORA_MAX_PAYLOAD_EXCEEDED if payload size exceeds datarate maximum
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 153 * @return LORA_NO_CHANS_ENABLED if there is not an available channel that supports the current datarate
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 154 * @return LORA_LINK_BUSY if link was busy
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 155 * @return LORA_RADIO_BUSY if radio was busy
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 156 * @return LORA_BUFFER_FULL if mac commands filled the packet, client should resend the packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 157 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 158 uint8_t Send(uint8_t port, const uint8_t* payload, uint8_t size);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 159
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 160 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 161 * Configure the channel plan
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 162 * @param freqBand EU868, US915, AU915
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 163 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 164 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 165 uint8_t SetChannelPlan(uint8_t freqBand);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 166
jreiss 23:17a25e16ccf1 167 uint8_t SetChannelPlan(ChannelPlan* plan);
jreiss 23:17a25e16ccf1 168
jreiss 23:17a25e16ccf1 169 Settings* GetSettings();
jreiss 23:17a25e16ccf1 170
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 171 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 172 * Get the channel mask of currently enabled channels
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 173 * @return vector containing channel bit masks
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 174 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 175 std::vector<uint16_t> GetChannelMask();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 176
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 177 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 178 * Set a 16 bit channel mask with index
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 179 * @param index of mask to set 0:0-15, 1:16-31 ...
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 180 * @param mask 16 bit mask of enabled channels
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 181 * @return true
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 182 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 183 virtual uint8_t SetChannelMask(uint8_t index, uint16_t mask);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 184
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 185 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 186 * Set the current channel group for hybrid operation 1-8 else 0 for 64 channel operation
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 187 * @param group 0-8
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 188 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 189 uint8_t SetChannelGroup(uint8_t group);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 190
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 191 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 192 * Get the current channel group
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 193 * @return group 0-8
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 194 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 195 uint8_t GetChannelGroup();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 196
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 197 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 198 * Add a channel to the channel plan
jreiss 24:707857d35a6e 199 * EU868, AS923 and KR920 allows additional channels to be added
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 200 * Channels 0-2 are fixed default channels
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 201 *
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 202 * @param index of the channel
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 203 * @param frequency of the channel or 0 to remove channel
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 204 * @param range of datarates allowed by the channel
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 205 * @return LORA_OK if channel was added
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 206 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 207 uint8_t AddChannel(uint8_t index, uint32_t frequency, lora::DatarateRange range);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 208
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 209 /**
jreiss 24:707857d35a6e 210 * Add a downlink channel to the channel plan
jreiss 24:707857d35a6e 211 * EU868, AS923 and KR920 allows downlink channels to be added
jreiss 24:707857d35a6e 212 *
jreiss 24:707857d35a6e 213 * @param index of the channel
jreiss 24:707857d35a6e 214 * @param frequency of the channel or 0 to remove channel
jreiss 24:707857d35a6e 215 * @return LORA_OK if channel was added
jreiss 24:707857d35a6e 216 */
jreiss 24:707857d35a6e 217 uint8_t AddDownlinkChannel(uint8_t index, uint32_t frequency);
jreiss 24:707857d35a6e 218
jreiss 24:707857d35a6e 219 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 220 * Set network mode
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 221 * Choose Public LoRaWAN mode or Private Multitech mode
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 222 *
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 223 * Public mode uses 0x34 sync word with 5/6 second join windows
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 224 * Private mode uses 0x12 sync word with 1/2 second join windows
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 225 * US915/AU915 Rx1 and Rx2 are fixed per Channel Group setting
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 226 *
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 227 * @param mode public or private
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 228 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 229 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 230 uint8_t SetNetworkMode(uint8_t mode);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 231
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 232 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 233 * Get a pointer to the mac layer
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 234 * @return Mac mac
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 235 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 236 Mac* GetMac();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 237
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 238 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 239 * Get a pointer to the radio
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 240 * Can be used to read radio registers or get a random value based on RSSI
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 241 *
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 242 * @return SxRadio pointer
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 243 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 244 SxRadio* GetRadio();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 245
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 246 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 247 * Get the current statistics for the device
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 248 * @return Statistics
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 249 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 250 Statistics& GetStats();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 251
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 252 /**
jreiss 23:17a25e16ccf1 253 * Reset the current statistics for the device
jreiss 23:17a25e16ccf1 254 */
jreiss 23:17a25e16ccf1 255 void ResetStats();
jreiss 23:17a25e16ccf1 256
jreiss 23:17a25e16ccf1 257 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 258 * Get time on air with current settings for provided payload bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 259 * 13 overhead bytes will be added to payload
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 260 * @param bytes of payload data
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 261 * @return time-on-air in ms
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 262 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 263 uint32_t GetTimeOnAir(uint8_t bytes);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 264
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 265 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 266 * Call before setting device in sleep mode to place radio in sleep
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 267 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 268 void Sleep();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 269
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 270 protected:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 271 SxRadio1272* _radio;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 272 Settings* _settings;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 273 Mac* _mac;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 274
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 275 private:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 276 ChannelPlan* _plan;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 277 MoteEvents _events;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 278 };
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 279
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 280 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 281 #endif
jreiss 23:17a25e16ccf1 282