Bleeding edge development version of the xDot library for mbed 5. This version of the library is not guaranteed to be stable or well tested and should not be used in production or deployment scenarios.

Dependents:   Dot-Examples Dot-AT-Firmware Dot-Examples TEST_FF1705 ... more

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

Dot Library Version 3 Updates

Dot Library versions 3.x.x require a channel plan to be injected into the stack. Channel plans are included with the 3.x.x Dot Library releases. The following code snippet demonstrates how to create a channel plan and inject it into the stack.

#include "mDot.h"
#include "channel_plans.h"

int main() {
    ChannelPlan* plan = new lora::ChannelPlan_US915();
    assert(plan);
    mDot* dot = mDot::getInstance(plan);
    assert(dot);

    // ...
}

Dot devices must not be deployed with software using a different channel plan than the Dot's default plan! This functionality is for development and testing only!

Multicast Sessions

Multicast sessions and packet rx events in library. When in Class C mode Multicast downlinks can be received. Recieved packets should be filtered on address, counter value will be maintained in the session or can be set explicitly depending on Application support to share Multicast Address, Keys and Counters.

mDot.h

        /**
         * Add a multicast session address and keys
         * Downlink counter is set to 0
         * Up to 3 MULTICAST_SESSIONS can be set
         */
        int32_t setMulticastSession(uint8_t index, uint32_t addr, const uint8_t* nsk, const uint8_t* dsk);
 
        /**
         * Set a multicast session counter
         * Up to 3 MULTICAST_SESSIONS can be set
         */
        int32_t setMulticastDownlinkCounter(uint8_t index, uint32_t count);

mDotEvent.h

The address field was added to PacketRx event.

        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);

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.

Committer:
Jenkins@KEILDM1.dc.multitech.prv
Date:
Thu Feb 22 11:37:03 2018 -0600
Revision:
84:7ded4b9b3f37
Parent:
82:1e03f40a72bb
Child:
121:b7c80d8c4eb2
xdot-library revision 3.0.2-53-g4c557ea and mbed-os revision mbed-os-5.5.7

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 61:e8eb2d72ecd6 34 * Fired at start of TX
Jenkins@KEILDM1.dc.multitech.prv 61:e8eb2d72ecd6 35 */
Jenkins@KEILDM1.dc.multitech.prv 61:e8eb2d72ecd6 36 virtual void TxStart(void);
Jenkins@KEILDM1.dc.multitech.prv 61:e8eb2d72ecd6 37
Jenkins@KEILDM1.dc.multitech.prv 61:e8eb2d72ecd6 38 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 39 * Fired at end of TX
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 40 * @param dr datarate used for TX
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 41 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 42 virtual void TxDone(uint8_t dr);
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 if TX timed out
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 46 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 47 virtual void TxTimeout(void);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 48
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 49 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 50 * Fired when JoinAccept message is received and MIC is validated
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 51 * @param payload received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 52 * @param size number of received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 53 * @param rssi of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 54 * @param snr of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 55 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 56 virtual void JoinAccept(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 57
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 58 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 59 * Fired when JoinAccept message is received and MIC is not valid
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 60 * @param payload received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 61 * @param size number of received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 62 * @param rssi of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 63 * @param snr of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 64 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 65 virtual void JoinFailed(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 66
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 67 /**
Jenkins@KEILDM1.dc.multitech.prv 84:7ded4b9b3f37 68 * Fired when packet is received and MIC is valid
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 69 * @param port of packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 70 * @param payload received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 71 * @param size number of received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 72 * @param rssi of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 73 * @param snr of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 74 * @param ctrl Downlink control field of packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 75 * @param slot rx window packet was received
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 76 * @param retries number of attempts before ack was received
Jenkins@KEILDM1.dc.multitech.prv 84:7ded4b9b3f37 77 * @param address of the end device
Jenkins@KEILDM1.dc.multitech.prv 84:7ded4b9b3f37 78 * @param dupRx set if this packet has already been received
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 79 */
Jenkins@KEILDM1.dc.multitech.prv 84:7ded4b9b3f37 80 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, uint32_t address = 0, bool dupRx=false);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 81
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 82 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 83 * Fired when radio has received a packet, packet is not validated
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 84 * @param payload received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 85 * @param size number of received bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 86 * @param rssi of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 87 * @param snr of received packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 88 * @param ctrl Downlink control field of packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 89 * @param slot rx window packet was received
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 90 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 91 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 92
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 93 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 94 * Fired if rx window times out
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 95 * @param slot rx window that timed out
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 96 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 97 virtual void RxTimeout(uint8_t slot);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 98
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 99 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 100 * Fired if rx CRC error
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 101 * @param slot rx window that errored
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 102 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 103 virtual void RxError(uint8_t slot);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 104
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 105 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 106 * Fired if pong packet is received
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 107 * @param m_rssi of received packet at mote
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 108 * @param m_snr of received packet at mote
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 109 * @param s_rssi of received packet at server
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 110 * @param s_snr of received packet at server
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 111 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 112 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 113
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 114 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 115 * Fired if network link check answer is received
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 116 * @param m_rssi of received packet at mote
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 117 * @param m_snr of received packet at mote
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 118 * @param s_snr margin of received packet at server
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 119 * @param s_gateways number of gateways reporting the packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 120 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 121 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 122
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 123 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 124 * Callback to for device to measure the battery level and report to server
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 125 * @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 126 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 127 virtual uint8_t MeasureBattery();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 128
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 129 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 130 * Fired when ack attempts are exhausted and RxTimeout or RxError occur
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 131 * @param retries number of attempts to resend the packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 132 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 133 virtual void MissedAck(uint8_t retries);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 134 };
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 135
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 136 class Mote {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 137 public:
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 138 Mote(Settings* settings, ChannelPlan* plan);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 139 virtual ~Mote();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 140
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 141 /**
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 142 * MTS LoRa version
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 143 * @return string containing version information
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 144 */
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 145 const char* getId();
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 146
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 147 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 148 * Indicator for network session join status
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 149 * @return true if joined to network
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 150 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 151 bool Joined();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 152
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 153 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 154 * Send join request
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 155 * @return LORA_OK if request was sent
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 156 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 157 uint8_t Join();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 158
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 159 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 160 * Send a packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 161 * @param port to send packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 162 * @param payload of packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 163 * @param size in bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 164 * @return LORA_OK if successful
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 165 * @return LORA_MAX_PAYLOAD_EXCEEDED if payload size exceeds datarate maximum
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 166 * @return LORA_NO_CHANS_ENABLED if there is not an available channel that supports the current datarate
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 167 * @return LORA_LINK_BUSY if link was busy
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 168 * @return LORA_RADIO_BUSY if radio was busy
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 169 * @return LORA_BUFFER_FULL if mac commands filled the packet, client should resend the packet
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 170 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 171 uint8_t Send(uint8_t port, const uint8_t* payload, uint8_t size);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 172
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 173 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 174 * Configure the channel plan
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 175 * @param plan pointer to ChannelPlan object
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 176 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 177 */
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 178 uint8_t SetChannelPlan(ChannelPlan* plan);
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 179
Jenkins@KEILDM1.dc.multitech.prv 82:1e03f40a72bb 180
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 181 Settings* GetSettings();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 182
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 183 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 184 * Get the channel mask of currently enabled channels
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 185 * @return vector containing channel bit masks
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 186 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 187 std::vector<uint16_t> GetChannelMask();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 188
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 189 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 190 * Set a 16 bit channel mask with index
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 191 * @param index of mask to set 0:0-15, 1:16-31 ...
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 192 * @param mask 16 bit mask of enabled channels
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 193 * @return true
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 194 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 195 virtual uint8_t SetChannelMask(uint8_t index, uint16_t mask);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 196
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 197 /**
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 198 * Set the current frequency sub band for hybrid operation 1-8 else 0 for 64 channel operation
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 199 * @param sub_band 0-8
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 200 */
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 201 uint8_t SetFrequencySubBand(uint8_t sub_band);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 202
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 203 /**
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 204 * Get the current frequency sub band
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 205 * @return sub band 0-8
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 206 */
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 207 uint8_t GetFrequencySubBand();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 208
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 209 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 210 * Add a channel to the channel plan
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 211 * EU868, AS923 and KR920 allows additional channels to be added
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 212 * Channels 0-2 are fixed default channels
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 213 *
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 214 * @param index of the channel
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 215 * @param frequency of the channel or 0 to remove channel
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 216 * @param range of datarates allowed by the channel
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 217 * @return LORA_OK if channel was added
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 218 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 219 uint8_t AddChannel(uint8_t index, uint32_t frequency, lora::DatarateRange range);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 220
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 221 /**
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 222 * Add a downlink channel to the channel plan
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 223 * EU868, AS923 and KR920 allows downlink channels to be added
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 224 *
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 225 * @param index of the channel
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 226 * @param frequency of the channel or 0 to remove channel
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 227 * @return LORA_OK if channel was added
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 228 */
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 229 uint8_t AddDownlinkChannel(uint8_t index, uint32_t frequency);
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 230
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 231 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 232 * Set network mode
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 233 * Choose Public LoRaWAN mode or Private Multitech mode
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 234 *
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 235 * Public mode uses 0x34 sync word with 5/6 second join windows
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 236 * Private mode uses 0x12 sync word with 1/2 second join windows
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 237 * US915/AU915 Rx1 and Rx2 are fixed per frequency sub band setting
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 238 *
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 239 * @param mode public or private
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 240 * @return LORA_OK
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 241 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 242 uint8_t SetNetworkMode(uint8_t mode);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 243
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 244 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 245 * Get a pointer to the mac layer
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 246 * @return Mac mac
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 247 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 248 Mac* GetMac();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 249
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 250 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 251 * Get a pointer to the radio
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 252 * Can be used to read radio registers or get a random value based on RSSI
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 253 *
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 254 * @return SxRadio pointer
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 255 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 256 SxRadio* GetRadio();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 257
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 258 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 259 * Get the current statistics for the device
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 260 * @return Statistics
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 261 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 262 Statistics& GetStats();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 263
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 264 /**
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 265 * Reset the current statistics for the device
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 266 */
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 267 void ResetStats();
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 268
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 269 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 270 * Get time on air with current settings for provided payload bytes
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 271 * 13 overhead bytes will be added to payload
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 272 * @param bytes of payload data
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 273 * @return time-on-air in ms
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 274 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 275 uint32_t GetTimeOnAir(uint8_t bytes);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 276
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 277 /**
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 278 * Get time off air required to adhere to duty-cycle limitations
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 279 * @return time-off-air in ms
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 280 */
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 281 uint32_t GetTimeOffAir();
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 282
Jenkins@KEILDM1.dc.multitech.prv 35:1f130b29595b 283 /**
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 284 * Call before setting device in sleep mode to place radio in sleep
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 285 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 286 void Sleep();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 287
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 288 protected:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 289 SxRadio1272* _radio;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 290 Settings* _settings;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 291 Mac* _mac;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 292
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 293 private:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 294 ChannelPlan* _plan;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 295 MoteEvents _events;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 296 };
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 297
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 298 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 299 #endif