Bleeding edge development version of the mDot 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:   mDot-IKS01A1 mDot-IKS01A1 mDot-Examples mDot-IKS01A1-Explora ... more

Fork of libmDot-dev-mbed2-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.

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:
Fri Oct 26 16:14:07 2018 -0500
Revision:
183:f205b2eea7c2
Parent:
182:b642f4d0c95b
mdot-library revision 3.1.0-49-g926b83a and mbed-os revision mbed-os-5.9.6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jreiss 9:ec2fffe31793 1 // TODO: add license header
mfiore 0:c62615f15125 2
mfiore 0:c62615f15125 3 #ifndef MDOT_H
mfiore 0:c62615f15125 4 #define MDOT_H
mfiore 0:c62615f15125 5
mfiore 0:c62615f15125 6 #include "mbed.h"
mfiore 0:c62615f15125 7 #include "rtos.h"
Mike Fiore 16:b630e18103e5 8 #include "Mote.h"
mfiore 0:c62615f15125 9 #include <vector>
mfiore 0:c62615f15125 10 #include <map>
mfiore 0:c62615f15125 11 #include <string>
mfiore 0:c62615f15125 12
Mike Fiore 12:54f9cac9d690 13 class mDotEvent;
mfiore 0:c62615f15125 14 class LoRaConfig;
mfiore 0:c62615f15125 15
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 16
mfiore 0:c62615f15125 17 class mDot {
Mike Fiore 16:b630e18103e5 18 friend class mDotEvent;
mfiore 0:c62615f15125 19
mfiore 0:c62615f15125 20 private:
mfiore 0:c62615f15125 21
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 22 mDot(lora::ChannelPlan* plan);
mfiore 0:c62615f15125 23 ~mDot();
mfiore 0:c62615f15125 24
Mike Fiore 16:b630e18103e5 25 void initLora();
Mike Fiore 16:b630e18103e5 26
mfiore 0:c62615f15125 27 void setLastError(const std::string& str);
mfiore 0:c62615f15125 28
mfiore 0:c62615f15125 29 static bool validateBaudRate(const uint32_t& baud);
mfiore 0:c62615f15125 30 static bool validateFrequencySubBand(const uint8_t& band);
mfiore 0:c62615f15125 31 bool validateDataRate(const uint8_t& dr);
mfiore 0:c62615f15125 32
mfiore 0:c62615f15125 33 int32_t joinBase(const uint32_t& retries);
mfiore 0:c62615f15125 34 int32_t sendBase(const std::vector<uint8_t>& data, const bool& confirmed = false, const bool& blocking = true, const bool& highBw = false);
mfiore 0:c62615f15125 35 void waitForPacket();
mfiore 0:c62615f15125 36 void waitForLinkCheck();
mfiore 0:c62615f15125 37
mfiore 0:c62615f15125 38 void setActivityLedState(const uint8_t& state);
mfiore 0:c62615f15125 39 uint8_t getActivityLedState();
mfiore 0:c62615f15125 40
mfiore 0:c62615f15125 41 void blinkActivityLed(void) {
Mike Fiore 6:390fc83d588d 42 if (_activity_led) {
Mike Fiore 6:390fc83d588d 43 int val = _activity_led->read();
Mike Fiore 6:390fc83d588d 44 _activity_led->write(!val);
Mike Fiore 6:390fc83d588d 45 }
mfiore 0:c62615f15125 46 }
mfiore 0:c62615f15125 47
mfiore 0:c62615f15125 48 mDot(const mDot&);
mfiore 0:c62615f15125 49 mDot& operator=(const mDot&);
mfiore 0:c62615f15125 50
Mike Fiore 7:683dba5d576f 51 uint32_t RTC_ReadBackupRegister(uint32_t RTC_BKP_DR);
Mike Fiore 7:683dba5d576f 52 void RTC_WriteBackupRegister(uint32_t RTC_BKP_DR, uint32_t Data);
Mike Fiore 7:683dba5d576f 53
Jenkins@KEILDM1.dc.multitech.prv 183:f205b2eea7c2 54 void wakeup();
Jenkins@KEILDM1.dc.multitech.prv 183:f205b2eea7c2 55
Jenkins@KEILDM1.dc.multitech.prv 173:88c20655ca6f 56 void RTC_DisableWakeupTimer();
Jenkins@KEILDM1.dc.multitech.prv 173:88c20655ca6f 57 void RTC_EnableWakeupTimer();
Jenkins@KEILDM1.dc.multitech.prv 173:88c20655ca6f 58
Mike Fiore 12:54f9cac9d690 59 void enterStopMode(const uint32_t& interval, const uint8_t& wakeup_mode = RTC_ALARM);
Mike Fiore 12:54f9cac9d690 60 void enterStandbyMode(const uint32_t& interval, const uint8_t& wakeup_mode = RTC_ALARM);
Mike Fiore 12:54f9cac9d690 61
mfiore 0:c62615f15125 62 static mDot* _instance;
mfiore 0:c62615f15125 63
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 64 lora::Mote* _mote;
mfiore 0:c62615f15125 65 LoRaConfig* _config;
Mike Fiore 16:b630e18103e5 66 lora::Settings _settings;
Mike Fiore 16:b630e18103e5 67 mDotEvent* _events;
Mike Fiore 16:b630e18103e5 68
mfiore 0:c62615f15125 69 std::string _last_error;
mfiore 0:c62615f15125 70 static const uint32_t _baud_rates[];
mfiore 0:c62615f15125 71 uint8_t _activity_led_state;
mfiore 0:c62615f15125 72 Ticker _tick;
Mike Fiore 6:390fc83d588d 73 DigitalOut* _activity_led;
Mike Fiore 6:390fc83d588d 74 bool _activity_led_enable;
Mike Fiore 6:390fc83d588d 75 PinName _activity_led_pin;
Mike Fiore 5:0bfe6a650513 76 bool _activity_led_external;
jreiss 9:ec2fffe31793 77 uint8_t _linkFailCount;
Mike Fiore 7:683dba5d576f 78 uint8_t _class;
Mike Fiore 7:683dba5d576f 79 InterruptIn* _wakeup;
Mike Fiore 7:683dba5d576f 80 PinName _wakeup_pin;
mfiore 0:c62615f15125 81
mfiore 0:c62615f15125 82 typedef enum {
Jason Reiss 10:27dafba9fe19 83 OFF,
Jason Reiss 10:27dafba9fe19 84 ON,
Jason Reiss 10:27dafba9fe19 85 BLINK,
mfiore 0:c62615f15125 86 } state;
mfiore 0:c62615f15125 87
mfiore 0:c62615f15125 88 public:
mfiore 0:c62615f15125 89
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 90 #if defined(TARGET_MTS_MDOT_F411RE)
mfiore 0:c62615f15125 91 typedef enum {
Mike Fiore 7:683dba5d576f 92 FM_APPEND = (1 << 0),
Mike Fiore 7:683dba5d576f 93 FM_TRUNC = (1 << 1),
Mike Fiore 7:683dba5d576f 94 FM_CREAT = (1 << 2),
Mike Fiore 7:683dba5d576f 95 FM_RDONLY = (1 << 3),
Mike Fiore 7:683dba5d576f 96 FM_WRONLY = (1 << 4),
Mike Fiore 7:683dba5d576f 97 FM_RDWR = (FM_RDONLY | FM_WRONLY),
Mike Fiore 7:683dba5d576f 98 FM_DIRECT = (1 << 5)
Mike Fiore 7:683dba5d576f 99 } FileMode;
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 100 #endif /* TARGET_MTS_MDOT_F411RE */
Mike Fiore 7:683dba5d576f 101
Mike Fiore 7:683dba5d576f 102 typedef enum {
mfiore 0:c62615f15125 103 MDOT_OK = 0,
mfiore 0:c62615f15125 104 MDOT_INVALID_PARAM = -1,
mfiore 0:c62615f15125 105 MDOT_TX_ERROR = -2,
mfiore 0:c62615f15125 106 MDOT_RX_ERROR = -3,
mfiore 0:c62615f15125 107 MDOT_JOIN_ERROR = -4,
mfiore 0:c62615f15125 108 MDOT_TIMEOUT = -5,
mfiore 0:c62615f15125 109 MDOT_NOT_JOINED = -6,
mfiore 0:c62615f15125 110 MDOT_ENCRYPTION_DISABLED = -7,
mfiore 0:c62615f15125 111 MDOT_NO_FREE_CHAN = -8,
Mike Fiore 12:54f9cac9d690 112 MDOT_TEST_MODE = -9,
Mike Fiore 12:54f9cac9d690 113 MDOT_NO_ENABLED_CHAN = -10,
Mike Fiore 12:54f9cac9d690 114 MDOT_AGGREGATED_DUTY_CYCLE = -11,
Jenkins@KEILDM1.dc.multitech.prv 43:ba29a595814e 115 MDOT_MAX_PAYLOAD_EXCEEDED = -12,
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 116 MDOT_LBT_CHANNEL_BUSY = -13,
Jenkins@KEILDM1.dc.multitech.prv 128:79ed06543c8e 117 MDOT_NOT_IDLE = -14,
mfiore 0:c62615f15125 118 MDOT_ERROR = -1024,
mfiore 0:c62615f15125 119 } mdot_ret_code;
mfiore 0:c62615f15125 120
mfiore 0:c62615f15125 121 enum JoinMode {
Mike Fiore 16:b630e18103e5 122 MANUAL = 0,
Jason Reiss 10:27dafba9fe19 123 OTA,
Mike Fiore 12:54f9cac9d690 124 AUTO_OTA,
Mike Fiore 12:54f9cac9d690 125 PEER_TO_PEER
mfiore 0:c62615f15125 126 };
mfiore 0:c62615f15125 127
mfiore 0:c62615f15125 128 enum Mode {
Jason Reiss 10:27dafba9fe19 129 COMMAND_MODE,
Jason Reiss 10:27dafba9fe19 130 SERIAL_MODE
mfiore 0:c62615f15125 131 };
mfiore 0:c62615f15125 132
mfiore 0:c62615f15125 133 enum RX_Output {
Jason Reiss 10:27dafba9fe19 134 HEXADECIMAL,
Jenkins@KEILDM1.dc.multitech.prv 183:f205b2eea7c2 135 BINARY,
Jenkins@KEILDM1.dc.multitech.prv 183:f205b2eea7c2 136 EXTENDED
mfiore 0:c62615f15125 137 };
mfiore 0:c62615f15125 138
mfiore 0:c62615f15125 139 enum DataRates {
Mike Fiore 12:54f9cac9d690 140 DR0,
Mike Fiore 12:54f9cac9d690 141 DR1,
Mike Fiore 12:54f9cac9d690 142 DR2,
Mike Fiore 12:54f9cac9d690 143 DR3,
Mike Fiore 12:54f9cac9d690 144 DR4,
Mike Fiore 12:54f9cac9d690 145 DR5,
Mike Fiore 12:54f9cac9d690 146 DR6,
Mike Fiore 12:54f9cac9d690 147 DR7,
Mike Fiore 12:54f9cac9d690 148 DR8,
Mike Fiore 12:54f9cac9d690 149 DR9,
Mike Fiore 12:54f9cac9d690 150 DR10,
Mike Fiore 12:54f9cac9d690 151 DR11,
Mike Fiore 12:54f9cac9d690 152 DR12,
Mike Fiore 12:54f9cac9d690 153 DR13,
Mike Fiore 12:54f9cac9d690 154 DR14,
Jenkins@KEILDM1.dc.multitech.prv 115:bcd44682ac1e 155 DR15
mfiore 0:c62615f15125 156 };
mfiore 0:c62615f15125 157
mfiore 0:c62615f15125 158 enum FrequencySubBands {
Jason Reiss 10:27dafba9fe19 159 FSB_ALL,
Jason Reiss 10:27dafba9fe19 160 FSB_1,
Jason Reiss 10:27dafba9fe19 161 FSB_2,
Jason Reiss 10:27dafba9fe19 162 FSB_3,
Jason Reiss 10:27dafba9fe19 163 FSB_4,
Jason Reiss 10:27dafba9fe19 164 FSB_5,
Jason Reiss 10:27dafba9fe19 165 FSB_6,
Jason Reiss 10:27dafba9fe19 166 FSB_7,
Jason Reiss 10:27dafba9fe19 167 FSB_8
mfiore 0:c62615f15125 168 };
mfiore 0:c62615f15125 169
Mike Fiore 6:390fc83d588d 170 enum JoinByteOrder {
Jason Reiss 10:27dafba9fe19 171 LSB,
Jason Reiss 10:27dafba9fe19 172 MSB
Mike Fiore 6:390fc83d588d 173 };
Mike Fiore 6:390fc83d588d 174
Mike Fiore 7:683dba5d576f 175 enum wakeup_mode {
Jason Reiss 10:27dafba9fe19 176 RTC_ALARM,
Jason Reiss 10:27dafba9fe19 177 INTERRUPT,
Jason Reiss 10:27dafba9fe19 178 RTC_ALARM_OR_INTERRUPT
Mike Fiore 7:683dba5d576f 179 };
Mike Fiore 7:683dba5d576f 180
jreiss 9:ec2fffe31793 181 enum UserBackupRegs {
Jason Reiss 10:27dafba9fe19 182 UBR0,
Jason Reiss 10:27dafba9fe19 183 UBR1,
Jason Reiss 10:27dafba9fe19 184 UBR2,
Jason Reiss 10:27dafba9fe19 185 UBR3,
Jason Reiss 10:27dafba9fe19 186 UBR4,
Jason Reiss 10:27dafba9fe19 187 UBR5,
Jason Reiss 10:27dafba9fe19 188 UBR6,
Jason Reiss 10:27dafba9fe19 189 UBR7,
Jason Reiss 10:27dafba9fe19 190 UBR8,
Jason Reiss 10:27dafba9fe19 191 UBR9
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 192 #if defined (TARGET_XDOT_L151CC)
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 193 ,UBR10,
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 194 UBR11,
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 195 UBR12,
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 196 UBR13,
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 197 UBR14,
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 198 UBR15,
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 199 UBR16,
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 200 UBR17,
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 201 UBR18,
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 202 UBR19,
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 203 UBR20,
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 204 UBR21
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 205 #endif /* TARGET_XDOT_L151CC */
jreiss 9:ec2fffe31793 206 };
jreiss 9:ec2fffe31793 207
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 208 #if defined(TARGET_MTS_MDOT_F411RE)
Mike Fiore 7:683dba5d576f 209 typedef struct {
Mike Fiore 7:683dba5d576f 210 int16_t fd;
Mike Fiore 16:b630e18103e5 211 char name[33];
Mike Fiore 7:683dba5d576f 212 uint32_t size;
Mike Fiore 7:683dba5d576f 213 } mdot_file;
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 214 #endif /* TARGET_MTS_MDOT_F411RE */
Mike Fiore 7:683dba5d576f 215
mfiore 0:c62615f15125 216 typedef struct {
mfiore 0:c62615f15125 217 uint32_t Up;
mfiore 0:c62615f15125 218 uint32_t Down;
mfiore 0:c62615f15125 219 uint32_t Joins;
mfiore 0:c62615f15125 220 uint32_t JoinFails;
mfiore 0:c62615f15125 221 uint32_t MissedAcks;
Mike Fiore 16:b630e18103e5 222 uint32_t CRCErrors;
mfiore 0:c62615f15125 223 } mdot_stats;
mfiore 0:c62615f15125 224
mfiore 0:c62615f15125 225 typedef struct {
mfiore 0:c62615f15125 226 int16_t last;
mfiore 0:c62615f15125 227 int16_t min;
mfiore 0:c62615f15125 228 int16_t max;
mfiore 0:c62615f15125 229 int16_t avg;
mfiore 0:c62615f15125 230 } rssi_stats;
mfiore 0:c62615f15125 231
mfiore 0:c62615f15125 232 typedef struct {
Mike Fiore 11:d8464345e1f1 233 int16_t last;
Mike Fiore 11:d8464345e1f1 234 int16_t min;
Mike Fiore 11:d8464345e1f1 235 int16_t max;
Mike Fiore 11:d8464345e1f1 236 int16_t avg;
mfiore 0:c62615f15125 237 } snr_stats;
mfiore 0:c62615f15125 238
mfiore 0:c62615f15125 239 typedef struct {
mfiore 0:c62615f15125 240 bool status;
Jenkins@KEILDM1.dc.multitech.prv 155:ecb07dbd16e3 241 uint8_t dBm;
mfiore 0:c62615f15125 242 uint32_t gateways;
mfiore 0:c62615f15125 243 std::vector<uint8_t> payload;
mfiore 0:c62615f15125 244 } link_check;
mfiore 0:c62615f15125 245
mfiore 0:c62615f15125 246 typedef struct {
mfiore 0:c62615f15125 247 int32_t status;
mfiore 0:c62615f15125 248 int16_t rssi;
mfiore 0:c62615f15125 249 int16_t snr;
mfiore 0:c62615f15125 250 } ping_response;
mfiore 0:c62615f15125 251
mfiore 0:c62615f15125 252 static std::string JoinModeStr(uint8_t mode);
mfiore 0:c62615f15125 253 static std::string ModeStr(uint8_t mode);
mfiore 0:c62615f15125 254 static std::string RxOutputStr(uint8_t format);
mfiore 0:c62615f15125 255 static std::string DataRateStr(uint8_t rate);
mfiore 0:c62615f15125 256 static std::string FrequencyBandStr(uint8_t band);
mfiore 0:c62615f15125 257 static std::string FrequencySubBandStr(uint8_t band);
mfiore 0:c62615f15125 258
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 259 #if defined(TARGET_MTS_MDOT_F411RE)
jreiss 9:ec2fffe31793 260 uint32_t UserRegisters[10];
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 261 #else
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 262 uint32_t UserRegisters[22];
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 263 #endif /* TARGET_MTS_MDOT_F411RE */
jreiss 9:ec2fffe31793 264
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 265 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 266 * Get a handle to the singleton object
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 267 * @param plan the channel plan to use
mfiore 0:c62615f15125 268 * @returns pointer to mDot object
mfiore 0:c62615f15125 269 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 270 static mDot* getInstance(lora::ChannelPlan* plan);
mfiore 0:c62615f15125 271
Jenkins@KEILDM1.dc.multitech.prv 103:06bafd42c324 272 /**
Jenkins@KEILDM1.dc.multitech.prv 103:06bafd42c324 273 * Can only be used after a dot has
Jenkins@KEILDM1.dc.multitech.prv 103:06bafd42c324 274 * configured with a plan
Jenkins@KEILDM1.dc.multitech.prv 103:06bafd42c324 275 * @returns pointer to mDot object
Jenkins@KEILDM1.dc.multitech.prv 103:06bafd42c324 276 */
Jenkins@KEILDM1.dc.multitech.prv 103:06bafd42c324 277 static mDot* getInstance();
Jenkins@KEILDM1.dc.multitech.prv 103:06bafd42c324 278
Mike Fiore 12:54f9cac9d690 279 void setEvents(mDotEvent* events);
Mike Fiore 12:54f9cac9d690 280
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 281 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 282 *
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 283 * Get library version information
mfiore 0:c62615f15125 284 * @returns string containing library version information
mfiore 0:c62615f15125 285 */
mfiore 0:c62615f15125 286 std::string getId();
mfiore 0:c62615f15125 287
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 288 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 289 * Get MTS LoRa version information
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 290 * @returns string containing MTS LoRa version information
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 291 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 292 std::string getMtsLoraId();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 293
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 294 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 295 * Perform a soft reset of the system
mfiore 0:c62615f15125 296 */
mfiore 0:c62615f15125 297 void resetCpu();
mfiore 0:c62615f15125 298
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 299 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 300 * Reset config to factory default
mfiore 0:c62615f15125 301 */
mfiore 0:c62615f15125 302 void resetConfig();
mfiore 0:c62615f15125 303
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 304 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 305 * Save config data to non volatile memory
mfiore 0:c62615f15125 306 * @returns true if success, false if failure
mfiore 0:c62615f15125 307 */
mfiore 0:c62615f15125 308 bool saveConfig();
mfiore 0:c62615f15125 309
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 310 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 311 * Set the log level for the library
mfiore 0:c62615f15125 312 * options are:
mfiore 0:c62615f15125 313 * NONE_LEVEL - logging is off at this level
mfiore 0:c62615f15125 314 * FATAL_LEVEL - only critical errors will be reported
mfiore 0:c62615f15125 315 * ERROR_LEVEL
mfiore 0:c62615f15125 316 * WARNING_LEVEL
mfiore 0:c62615f15125 317 * INFO_LEVEL
mfiore 0:c62615f15125 318 * DEBUG_LEVEL
mfiore 0:c62615f15125 319 * TRACE_LEVEL - every detail will be reported
mfiore 0:c62615f15125 320 * @param level the level to log at
mfiore 0:c62615f15125 321 * @returns MDOT_OK if success
mfiore 0:c62615f15125 322 */
mfiore 0:c62615f15125 323 int32_t setLogLevel(const uint8_t& level);
mfiore 0:c62615f15125 324
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 325 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 326 * Get the current log level for the library
mfiore 0:c62615f15125 327 * @returns current log level
mfiore 0:c62615f15125 328 */
Mike Fiore 6:390fc83d588d 329 uint8_t getLogLevel();
Mike Fiore 6:390fc83d588d 330
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 331 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 332 * Seed pseudo RNG in LoRaMac layer, uses random value from radio RSSI reading by default
Mike Fiore 12:54f9cac9d690 333 * @param seed for RNG
Mike Fiore 12:54f9cac9d690 334 */
Mike Fiore 12:54f9cac9d690 335 void seedRandom(uint32_t seed);
Mike Fiore 12:54f9cac9d690 336
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 337
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 338 uint8_t setChannelPlan(lora::ChannelPlan* plan);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 339
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 340 lora::Settings* getSettings();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 341
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 342 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 343 * Enable or disable the activity LED.
Mike Fiore 6:390fc83d588d 344 * @param enable true to enable the LED, false to disable
Mike Fiore 6:390fc83d588d 345 */
Mike Fiore 6:390fc83d588d 346 void setActivityLedEnable(const bool& enable);
Mike Fiore 4:94969e981dcc 347
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 348 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 349 * Find out if the activity LED is enabled
Mike Fiore 6:390fc83d588d 350 * @returns true if activity LED is enabled, false if disabled
Mike Fiore 6:390fc83d588d 351 */
Mike Fiore 6:390fc83d588d 352 bool getActivityLedEnable();
Mike Fiore 6:390fc83d588d 353
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 354 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 355 * Use a different pin for the activity LED.
Mike Fiore 6:390fc83d588d 356 * The default is XBEE_RSSI.
Mike Fiore 6:390fc83d588d 357 * @param pin the new pin to use
Mike Fiore 6:390fc83d588d 358 */
Mike Fiore 6:390fc83d588d 359 void setActivityLedPin(const PinName& pin);
Mike Fiore 6:390fc83d588d 360
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 361 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 362 * Use an external DigitalOut object for the activity LED.
Mike Fiore 5:0bfe6a650513 363 * The pointer must stay valid!
Mike Fiore 5:0bfe6a650513 364 * @param pin the DigitalOut object to use
Mike Fiore 5:0bfe6a650513 365 */
Mike Fiore 5:0bfe6a650513 366 void setActivityLedPin(DigitalOut* pin);
Mike Fiore 6:390fc83d588d 367
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 368 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 369 * Find out what pin the activity LED is on
Mike Fiore 6:390fc83d588d 370 * @returns the pin the activity LED is using
Mike Fiore 6:390fc83d588d 371 */
Mike Fiore 6:390fc83d588d 372 PinName getActivityLedPin();
mfiore 0:c62615f15125 373
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 374 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 375 * Returns boolean indicative of start-up from standby mode
Mike Fiore 12:54f9cac9d690 376 * @returns true if dot woke from standby
Mike Fiore 12:54f9cac9d690 377 */
Mike Fiore 12:54f9cac9d690 378 bool getStandbyFlag();
Mike Fiore 12:54f9cac9d690 379
Mike Fiore 16:b630e18103e5 380 std::vector<uint16_t> getChannelMask();
Mike Fiore 16:b630e18103e5 381
Mike Fiore 16:b630e18103e5 382 int32_t setChannelMask(uint8_t offset, uint16_t mask);
Mike Fiore 16:b630e18103e5 383
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 384 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 385 * Add a channel
Mike Fiore 12:54f9cac9d690 386 * @returns MDOT_OK
Mike Fiore 12:54f9cac9d690 387 */
Mike Fiore 12:54f9cac9d690 388 int32_t addChannel(uint8_t index, uint32_t frequency, uint8_t datarateRange);
Mike Fiore 12:54f9cac9d690 389
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 390 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 391 * Add a downlink channel
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 392 * @returns MDOT_OK
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 393 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 394 int32_t addDownlinkChannel(uint8_t index, uint32_t frequency);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 395
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 396 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 397 * Get list of channel frequencies currently in use
mfiore 0:c62615f15125 398 * @returns vector of channels currently in use
mfiore 0:c62615f15125 399 */
mfiore 0:c62615f15125 400 std::vector<uint32_t> getChannels();
mfiore 0:c62615f15125 401
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 402 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 403 * Get list of downlink channel frequencies currently in use
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 404 * @returns vector of channels currently in use
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 405 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 406 std::vector<uint32_t> getDownlinkChannels();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 407
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 408 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 409 * Get list of channel datarate ranges currently in use
Mike Fiore 12:54f9cac9d690 410 * @returns vector of datarate ranges currently in use
Mike Fiore 12:54f9cac9d690 411 */
Mike Fiore 12:54f9cac9d690 412 std::vector<uint8_t> getChannelRanges();
Mike Fiore 12:54f9cac9d690 413
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 414 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 415 * Get list of channel frequencies in config file to be used as session defaults
Mike Fiore 12:54f9cac9d690 416 * @returns vector of channels in config file
Mike Fiore 12:54f9cac9d690 417 */
Mike Fiore 12:54f9cac9d690 418 std::vector<uint32_t> getConfigChannels();
Mike Fiore 12:54f9cac9d690 419
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 420 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 421 * Get list of channel datarate ranges in config file to be used as session defaults
Mike Fiore 12:54f9cac9d690 422 * @returns vector of datarate ranges in config file
Mike Fiore 12:54f9cac9d690 423 */
Mike Fiore 12:54f9cac9d690 424 std::vector<uint8_t> getConfigChannelRanges();
Mike Fiore 12:54f9cac9d690 425
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 426 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 427 * Get default frequency band
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 428 * @returns frequency band the device was manufactured for
mfiore 0:c62615f15125 429 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 430 uint8_t getDefaultFrequencyBand();
mfiore 0:c62615f15125 431
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 432 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 433 * Set frequency sub band
mfiore 0:c62615f15125 434 * only applicable if frequency band is set for United States (FB_915)
Jason Reiss 10:27dafba9fe19 435 * sub band 0 will allow the radio to use all 64 channels
mfiore 0:c62615f15125 436 * sub band 1 - 8 will allow the radio to use the 8 channels in that sub band
mfiore 0:c62615f15125 437 * for use with Conduit gateway and MTAC_LORA, use sub bands 1 - 8, not sub band 0
mfiore 0:c62615f15125 438 * @param band the sub band to use (0 - 8)
mfiore 0:c62615f15125 439 * @returns MDOT_OK if success
mfiore 0:c62615f15125 440 */
mfiore 0:c62615f15125 441 int32_t setFrequencySubBand(const uint8_t& band);
mfiore 0:c62615f15125 442
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 443 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 444 * Get frequency sub band
mfiore 0:c62615f15125 445 * @returns frequency sub band currently in use
mfiore 0:c62615f15125 446 */
mfiore 0:c62615f15125 447 uint8_t getFrequencySubBand();
mfiore 0:c62615f15125 448
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 449 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 450 * Get frequency band
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 451 * @returns frequency band (channel plan) currently in use
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 452 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 453 uint8_t getFrequencyBand();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 454
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 455 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 456 * Get channel plan name
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 457 * @returns name of channel plan currently in use
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 458 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 459 std::string getChannelPlanName();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 460
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 461 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 462 * Get the datarate currently in use within the MAC layer
Mike Fiore 12:54f9cac9d690 463 * returns 0-15
Mike Fiore 12:54f9cac9d690 464 */
Mike Fiore 12:54f9cac9d690 465 uint8_t getSessionDataRate();
Mike Fiore 12:54f9cac9d690 466
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 467
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 468 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 469 * Get the current max EIRP used in the channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 470 * May be changed by the network server
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 471 * returns 0-36
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 472 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 473 uint8_t getSessionMaxEIRP();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 474
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 475 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 476 * Set the current max EIRP used in the channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 477 * May be changed by the network server
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 478 * accepts 0-36
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 479 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 480 void setSessionMaxEIRP(uint8_t max);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 481
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 482 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 483 * Get the current downlink dwell time used in the channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 484 * May be changed by the network server
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 485 * returns 0-1
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 486 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 487 uint8_t getSessionDownlinkDwelltime();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 488
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 489 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 490 * Set the current downlink dwell time used in the channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 491 * May be changed by the network server
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 492 * accepts 0-1
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 493 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 494 void setSessionDownlinkDwelltime(uint8_t dwell);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 495
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 496 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 497 * Get the current uplink dwell time used in the channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 498 * May be changed by the network server
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 499 * returns 0-1
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 500 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 501 uint8_t getSessionUplinkDwelltime();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 502
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 503 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 504 * Set the current uplink dwell time used in the channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 505 * May be changed by the network server
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 506 * accepts 0-1
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 507 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 508 void setSessionUplinkDwelltime(uint8_t dwell);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 509
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 510 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 511 * Set the current downlink dwell time used in the channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 512 * May be changed by the network server
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 513 * accepts 0-1
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 514 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 515 uint32_t getListenBeforeTalkTime(uint8_t ms);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 516
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 517 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 518 * Set the current downlink dwell time used in the channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 519 * May be changed by the network server
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 520 * accepts 0-1
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 521 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 522 void setListenBeforeTalkTime(uint32_t ms);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 523
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 524 /**
Jenkins@KEILDM1.dc.multitech.prv 134:e5ad4bd55ce5 525 * Set public network mode
Jenkins@KEILDM1.dc.multitech.prv 134:e5ad4bd55ce5 526 * 0:PRIVATE_MTS, 1:PUBLIC_LORAWAN, 2:PRIVATE_LORAWAN
Jenkins@KEILDM1.dc.multitech.prv 134:e5ad4bd55ce5 527 * PRIVATE_MTS - Sync Word 0x12, US/AU Downlink frequencies per Frequency Sub Band
Jenkins@KEILDM1.dc.multitech.prv 134:e5ad4bd55ce5 528 * PUBLIC_LORAWAN - Sync Word 0x34
Jenkins@KEILDM1.dc.multitech.prv 134:e5ad4bd55ce5 529 * PRIVATE_LORAWAN - Sync Word 0x12
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 530 *
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 531 * The default Join Delay is 5 seconds
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 532 * The default Join Delay for PRIVATE_MTS was 1 second in the previous release
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 533 * The Join Delay must be changed independently of Public Network setting
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 534 *
Jenkins@KEILDM1.dc.multitech.prv 134:e5ad4bd55ce5 535 * @see lora::NetworkType
mfiore 0:c62615f15125 536 * @returns MDOT_OK if success
mfiore 0:c62615f15125 537 */
Jenkins@KEILDM1.dc.multitech.prv 134:e5ad4bd55ce5 538 int32_t setPublicNetwork(const uint8_t& val);
mfiore 0:c62615f15125 539
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 540 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 541 * Get public network mode
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 542 *
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 543 * The default Join Delay is 5 seconds
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 544 * The default Join Delay for PRIVATE_MTS was 1 second in the previous release
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 545 * The Join Delay must be changed independently of Public Network setting
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 546 *
Jenkins@KEILDM1.dc.multitech.prv 134:e5ad4bd55ce5 547 * @see lora:NetworkType
Jenkins@KEILDM1.dc.multitech.prv 134:e5ad4bd55ce5 548 * @returns 0:PRIVATE_MTS, 1:PUBLIC_LORAWAN, 2:PRIVATE_LORAWAN
mfiore 0:c62615f15125 549 */
Jenkins@KEILDM1.dc.multitech.prv 134:e5ad4bd55ce5 550 uint8_t getPublicNetwork();
mfiore 0:c62615f15125 551
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 552 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 553 * Get the device ID
mfiore 0:c62615f15125 554 * @returns vector containing the device ID (size 8)
mfiore 0:c62615f15125 555 */
mfiore 0:c62615f15125 556 std::vector<uint8_t> getDeviceId();
mfiore 0:c62615f15125 557
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 558 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 559 * Get the device port to be used for lora application data (1-223)
Jason Reiss 10:27dafba9fe19 560 * @returns port
Jason Reiss 10:27dafba9fe19 561 */
Jason Reiss 10:27dafba9fe19 562 uint8_t getAppPort();
Jason Reiss 10:27dafba9fe19 563
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 564 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 565 * Set the device port to be used for lora application data (1-223)
Jason Reiss 10:27dafba9fe19 566 * @returns MDOT_OK if success
Jason Reiss 10:27dafba9fe19 567 */
Jason Reiss 10:27dafba9fe19 568 int32_t setAppPort(uint8_t port);
Jason Reiss 10:27dafba9fe19 569
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 570 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 571 * Set the device class A, B or C
Jason Reiss 10:27dafba9fe19 572 * @returns MDOT_OK if success
Jason Reiss 10:27dafba9fe19 573 */
Jason Reiss 10:27dafba9fe19 574 int32_t setClass(std::string newClass);
Jason Reiss 10:27dafba9fe19 575
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 576 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 577 * Get the device class A, B or C
Jason Reiss 10:27dafba9fe19 578 * @returns MDOT_OK if success
Jason Reiss 10:27dafba9fe19 579 */
Jason Reiss 10:27dafba9fe19 580 std::string getClass();
Jason Reiss 10:27dafba9fe19 581
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 582 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 583 * Get the max packet length with current settings
Jason Reiss 10:27dafba9fe19 584 * @returns max packet length
Jason Reiss 10:27dafba9fe19 585 */
Jason Reiss 10:27dafba9fe19 586 uint8_t getMaxPacketLength();
Jason Reiss 10:27dafba9fe19 587
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 588 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 589 * Set network address
mfiore 0:c62615f15125 590 * for use with MANUAL network join mode, will be assigned in OTA & AUTO_OTA modes
mfiore 0:c62615f15125 591 * @param addr a vector of 4 bytes
mfiore 0:c62615f15125 592 * @returns MDOT_OK if success
mfiore 0:c62615f15125 593 */
mfiore 0:c62615f15125 594 int32_t setNetworkAddress(const std::vector<uint8_t>& addr);
mfiore 0:c62615f15125 595
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 596 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 597 * Get network address
mfiore 0:c62615f15125 598 * @returns vector containing network address (size 4)
mfiore 0:c62615f15125 599 */
mfiore 0:c62615f15125 600 std::vector<uint8_t> getNetworkAddress();
mfiore 0:c62615f15125 601
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 602 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 603 * Set network session key
mfiore 0:c62615f15125 604 * for use with MANUAL network join mode, will be assigned in OTA & AUTO_OTA modes
mfiore 0:c62615f15125 605 * @param key a vector of 16 bytes
mfiore 0:c62615f15125 606 * @returns MDOT_OK if success
mfiore 0:c62615f15125 607 */
mfiore 0:c62615f15125 608 int32_t setNetworkSessionKey(const std::vector<uint8_t>& key);
mfiore 0:c62615f15125 609
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 610 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 611 * Get network session key
mfiore 0:c62615f15125 612 * @returns vector containing network session key (size 16)
mfiore 0:c62615f15125 613 */
mfiore 0:c62615f15125 614 std::vector<uint8_t> getNetworkSessionKey();
mfiore 0:c62615f15125 615
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 616 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 617 * Set data session key
mfiore 0:c62615f15125 618 * for use with MANUAL network join mode, will be assigned in OTA & AUTO_OTA modes
mfiore 0:c62615f15125 619 * @param key a vector of 16 bytes
mfiore 0:c62615f15125 620 * @returns MDOT_OK if success
mfiore 0:c62615f15125 621 */
mfiore 0:c62615f15125 622 int32_t setDataSessionKey(const std::vector<uint8_t>& key);
mfiore 0:c62615f15125 623
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 624 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 625 * Get data session key
mfiore 0:c62615f15125 626 * @returns vector containing data session key (size 16)
mfiore 0:c62615f15125 627 */
mfiore 0:c62615f15125 628 std::vector<uint8_t> getDataSessionKey();
mfiore 0:c62615f15125 629
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 630 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 631 * Set network name
mfiore 0:c62615f15125 632 * for use with OTA & AUTO_OTA network join modes
mfiore 0:c62615f15125 633 * generates network ID (crc64 of name) automatically
mfiore 0:c62615f15125 634 * @param name a string of of at least 8 bytes and no more than 128 bytes
mfiore 0:c62615f15125 635 * @return MDOT_OK if success
mfiore 0:c62615f15125 636 */
mfiore 0:c62615f15125 637 int32_t setNetworkName(const std::string& name);
mfiore 0:c62615f15125 638
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 639 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 640 * Get network name
mfiore 0:c62615f15125 641 * @return string containing network name (size 8 to 128)
mfiore 0:c62615f15125 642 */
mfiore 0:c62615f15125 643 std::string getNetworkName();
mfiore 0:c62615f15125 644
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 645 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 646 * Set network ID
mfiore 0:c62615f15125 647 * for use with OTA & AUTO_OTA network join modes
mfiore 0:c62615f15125 648 * setting network ID via this function sets network name to empty
mfiore 0:c62615f15125 649 * @param id a vector of 8 bytes
mfiore 0:c62615f15125 650 * @returns MDOT_OK if success
mfiore 0:c62615f15125 651 */
mfiore 0:c62615f15125 652 int32_t setNetworkId(const std::vector<uint8_t>& id);
mfiore 0:c62615f15125 653
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 654 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 655 * Get network ID
mfiore 0:c62615f15125 656 * @returns vector containing network ID (size 8)
mfiore 0:c62615f15125 657 */
mfiore 0:c62615f15125 658 std::vector<uint8_t> getNetworkId();
mfiore 0:c62615f15125 659
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 660 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 661 * Set network passphrase
mfiore 0:c62615f15125 662 * for use with OTA & AUTO_OTA network join modes
mfiore 0:c62615f15125 663 * generates network key (cmac of passphrase) automatically
mfiore 0:c62615f15125 664 * @param name a string of of at least 8 bytes and no more than 128 bytes
mfiore 0:c62615f15125 665 * @return MDOT_OK if success
mfiore 0:c62615f15125 666 */
mfiore 0:c62615f15125 667 int32_t setNetworkPassphrase(const std::string& passphrase);
mfiore 0:c62615f15125 668
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 669 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 670 * Get network passphrase
mfiore 0:c62615f15125 671 * @return string containing network passphrase (size 8 to 128)
mfiore 0:c62615f15125 672 */
mfiore 0:c62615f15125 673 std::string getNetworkPassphrase();
mfiore 0:c62615f15125 674
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 675 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 676 * Set network key
mfiore 0:c62615f15125 677 * for use with OTA & AUTO_OTA network join modes
mfiore 0:c62615f15125 678 * setting network key via this function sets network passphrase to empty
mfiore 0:c62615f15125 679 * @param id a vector of 16 bytes
mfiore 0:c62615f15125 680 * @returns MDOT_OK if success
mfiore 0:c62615f15125 681 */
mfiore 0:c62615f15125 682 int32_t setNetworkKey(const std::vector<uint8_t>& id);
mfiore 0:c62615f15125 683
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 684 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 685 * Get network key
mfiore 0:c62615f15125 686 * @returns a vector containing network key (size 16)
mfiore 0:c62615f15125 687 */
mfiore 0:c62615f15125 688 std::vector<uint8_t> getNetworkKey();
mfiore 0:c62615f15125 689
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 690 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 691 * Set lorawan application EUI
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 692 * equivalent to setNetworkId
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 693 * @param eui application EUI (size 8)
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 694 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 695 int32_t setAppEUI(const uint8_t* eui);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 696
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 697 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 698 * Get lorawan application EUI
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 699 * equivalent to getNetworkId
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 700 * @returns vector containing application EUI (size 8)
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 701 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 702 const uint8_t* getAppEUI();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 703
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 704 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 705 * Set lorawan application key
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 706 * equivalent to setNetworkKey
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 707 * @param eui application key (size 16)
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 708 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 709 int32_t setAppKey(const uint8_t* key);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 710
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 711 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 712 * Set lorawan application key
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 713 * equivalent to getNetworkKey
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 714 * @returns eui application key (size 16)
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 715 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 716 const uint8_t* getAppKey();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 717
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 718 /**
Jenkins@KEILDM1.dc.multitech.prv 90:79a8c8660a4e 719 * Add a multicast session address and keys
Jenkins@KEILDM1.dc.multitech.prv 90:79a8c8660a4e 720 * Downlink counter is set to 0
Jenkins@KEILDM1.dc.multitech.prv 150:7f5203f0d4d5 721 * Up to 3 MULTICAST_SESSIONS can be set
Jenkins@KEILDM1.dc.multitech.prv 90:79a8c8660a4e 722 */
Jenkins@KEILDM1.dc.multitech.prv 90:79a8c8660a4e 723 int32_t setMulticastSession(uint8_t index, uint32_t addr, const uint8_t* nsk, const uint8_t* dsk);
Jenkins@KEILDM1.dc.multitech.prv 90:79a8c8660a4e 724
Jenkins@KEILDM1.dc.multitech.prv 90:79a8c8660a4e 725 /**
Jenkins@KEILDM1.dc.multitech.prv 90:79a8c8660a4e 726 * Set a multicast session counter
Jenkins@KEILDM1.dc.multitech.prv 150:7f5203f0d4d5 727 * Up to 3 MULTICAST_SESSIONS can be set
Jenkins@KEILDM1.dc.multitech.prv 90:79a8c8660a4e 728 */
Jenkins@KEILDM1.dc.multitech.prv 90:79a8c8660a4e 729 int32_t setMulticastDownlinkCounter(uint8_t index, uint32_t count);
Jenkins@KEILDM1.dc.multitech.prv 90:79a8c8660a4e 730
Jenkins@KEILDM1.dc.multitech.prv 90:79a8c8660a4e 731 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 732 * Set join byte order
Mike Fiore 6:390fc83d588d 733 * @param order 0:LSB 1:MSB
Mike Fiore 6:390fc83d588d 734 */
Mike Fiore 6:390fc83d588d 735 uint32_t setJoinByteOrder(uint8_t order);
Mike Fiore 6:390fc83d588d 736
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 737 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 738 * Get join byte order
Mike Fiore 6:390fc83d588d 739 * @returns byte order to use in joins 0:LSB 1:MSB
Mike Fiore 6:390fc83d588d 740 */
Mike Fiore 6:390fc83d588d 741 uint8_t getJoinByteOrder();
Mike Fiore 6:390fc83d588d 742
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 743 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 744 * Attempt to join network
Mike Fiore 12:54f9cac9d690 745 * each attempt will be made with a random datarate up to the configured datarate
Mike Fiore 12:54f9cac9d690 746 * JoinRequest backoff between tries is enforced to 1% for 1st hour, 0.1% for 1-10 hours and 0.01% after 10 hours
Mike Fiore 12:54f9cac9d690 747 * Check getNextTxMs() for time until next join attempt can be made
mfiore 0:c62615f15125 748 * @returns MDOT_OK if success
mfiore 0:c62615f15125 749 */
mfiore 0:c62615f15125 750 int32_t joinNetwork();
mfiore 0:c62615f15125 751
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 752 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 753 * Attempts to join network once
mfiore 0:c62615f15125 754 * @returns MDOT_OK if success
mfiore 0:c62615f15125 755 */
mfiore 0:c62615f15125 756 int32_t joinNetworkOnce();
mfiore 0:c62615f15125 757
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 758 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 759 * Resets current network session, essentially disconnecting from the network
mfiore 0:c62615f15125 760 * has no effect for MANUAL network join mode
mfiore 0:c62615f15125 761 */
mfiore 0:c62615f15125 762 void resetNetworkSession();
mfiore 0:c62615f15125 763
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 764 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 765 * Restore saved network session from flash
Mike Fiore 12:54f9cac9d690 766 * has no effect for MANUAL network join mode
Mike Fiore 12:54f9cac9d690 767 */
Mike Fiore 12:54f9cac9d690 768 void restoreNetworkSession();
Mike Fiore 12:54f9cac9d690 769
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 770 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 771 * Save current network session to flash
Mike Fiore 12:54f9cac9d690 772 * has no effect for MANUAL network join mode
Mike Fiore 12:54f9cac9d690 773 */
Mike Fiore 12:54f9cac9d690 774 void saveNetworkSession();
Mike Fiore 12:54f9cac9d690 775
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 776 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 777 * Set number of times joining will retry each sub-band before changing
jreiss 17:306ffaa5d79b 778 * to the next subband in US915 and AU915
mfiore 0:c62615f15125 779 * @param retries must be between 0 - 255
mfiore 0:c62615f15125 780 * @returns MDOT_OK if success
mfiore 0:c62615f15125 781 */
mfiore 0:c62615f15125 782 int32_t setJoinRetries(const uint8_t& retries);
mfiore 0:c62615f15125 783
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 784 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 785 * Get number of times joining will retry each sub-band
mfiore 0:c62615f15125 786 * @returns join retries (0 - 255)
mfiore 0:c62615f15125 787 */
mfiore 0:c62615f15125 788 uint8_t getJoinRetries();
mfiore 0:c62615f15125 789
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 790 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 791 * Set network join mode
mfiore 0:c62615f15125 792 * MANUAL: set network address and session keys manually
mfiore 0:c62615f15125 793 * OTA: User sets network name and passphrase, then attempts to join
mfiore 0:c62615f15125 794 * AUTO_OTA: same as OTA, but network sessions can be saved and restored
mfiore 0:c62615f15125 795 * @param mode MANUAL, OTA, or AUTO_OTA
mfiore 0:c62615f15125 796 * @returns MDOT_OK if success
mfiore 0:c62615f15125 797 */
mfiore 0:c62615f15125 798 int32_t setJoinMode(const uint8_t& mode);
mfiore 0:c62615f15125 799
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 800 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 801 * Get network join mode
mfiore 0:c62615f15125 802 * @returns MANUAL, OTA, or AUTO_OTA
mfiore 0:c62615f15125 803 */
mfiore 0:c62615f15125 804 uint8_t getJoinMode();
mfiore 0:c62615f15125 805
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 806 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 807 * Get network join status
mfiore 0:c62615f15125 808 * @returns true if currently joined to network
mfiore 0:c62615f15125 809 */
mfiore 0:c62615f15125 810 bool getNetworkJoinStatus();
mfiore 0:c62615f15125 811
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 812 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 813 * Do a network link check
mfiore 0:c62615f15125 814 * application data may be returned in response to a network link check command
mfiore 0:c62615f15125 815 * @returns link_check structure containing success, dBm above noise floor, gateways in range, and packet payload
mfiore 0:c62615f15125 816 */
mfiore 0:c62615f15125 817 link_check networkLinkCheck();
mfiore 0:c62615f15125 818
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 819 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 820 * Set network link check count to perform automatic link checks every count packets
mfiore 0:c62615f15125 821 * only applicable if ACKs are disabled
mfiore 0:c62615f15125 822 * @param count must be between 0 - 255
mfiore 0:c62615f15125 823 * @returns MDOT_OK if success
mfiore 0:c62615f15125 824 */
mfiore 0:c62615f15125 825 int32_t setLinkCheckCount(const uint8_t& count);
mfiore 0:c62615f15125 826
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 827 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 828 * Get network link check count
mfiore 0:c62615f15125 829 * @returns count (0 - 255)
mfiore 0:c62615f15125 830 */
mfiore 0:c62615f15125 831 uint8_t getLinkCheckCount();
mfiore 0:c62615f15125 832
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 833 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 834 * Set network link check threshold, number of link check failures or missed acks to tolerate
mfiore 0:c62615f15125 835 * before considering network connection lost
mfiore 0:c62615f15125 836 * @pararm count must be between 0 - 255
mfiore 0:c62615f15125 837 * @returns MDOT_OK if success
mfiore 0:c62615f15125 838 */
mfiore 0:c62615f15125 839 int32_t setLinkCheckThreshold(const uint8_t& count);
mfiore 0:c62615f15125 840
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 841 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 842 * Get network link check threshold
mfiore 0:c62615f15125 843 * @returns threshold (0 - 255)
mfiore 0:c62615f15125 844 */
mfiore 0:c62615f15125 845 uint8_t getLinkCheckThreshold();
mfiore 0:c62615f15125 846
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 847 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 848 * Get/set number of failed link checks in the current session
Mike Fiore 12:54f9cac9d690 849 * @returns count (0 - 255)
Mike Fiore 12:54f9cac9d690 850 */
Mike Fiore 12:54f9cac9d690 851 uint8_t getLinkFailCount();
Mike Fiore 12:54f9cac9d690 852 int32_t setLinkFailCount(uint8_t count);
Mike Fiore 12:54f9cac9d690 853
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 854 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 855 * Set UpLinkCounter number of packets sent to the gateway during this network session (sequence number)
Mike Fiore 12:54f9cac9d690 856 * @returns MDOT_OK
Mike Fiore 12:54f9cac9d690 857 */
Mike Fiore 12:54f9cac9d690 858 int32_t setUpLinkCounter(uint32_t count);
Mike Fiore 12:54f9cac9d690 859
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 860 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 861 * Get UpLinkCounter
mfiore 0:c62615f15125 862 * @returns number of packets sent to the gateway during this network session (sequence number)
mfiore 0:c62615f15125 863 */
mfiore 0:c62615f15125 864 uint32_t getUpLinkCounter();
mfiore 0:c62615f15125 865
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 866 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 867 * Set UpLinkCounter number of packets sent by the gateway during this network session (sequence number)
Mike Fiore 12:54f9cac9d690 868 * @returns MDOT_OK
Mike Fiore 12:54f9cac9d690 869 */
Mike Fiore 12:54f9cac9d690 870 int32_t setDownLinkCounter(uint32_t count);
Mike Fiore 12:54f9cac9d690 871
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 872 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 873 * Get DownLinkCounter
Mike Fiore 12:54f9cac9d690 874 * @returns number of packets sent by the gateway during this network session (sequence number)
Mike Fiore 12:54f9cac9d690 875 */
Mike Fiore 12:54f9cac9d690 876 uint32_t getDownLinkCounter();
Mike Fiore 12:54f9cac9d690 877
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 878 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 879 * Enable/disable AES encryption
mfiore 0:c62615f15125 880 * AES encryption must be enabled for use with Conduit gateway and MTAC_LORA card
mfiore 0:c62615f15125 881 * @param on true for AES encryption to be enabled
mfiore 0:c62615f15125 882 * @returns MDOT_OK if success
mfiore 0:c62615f15125 883 */
mfiore 0:c62615f15125 884 int32_t setAesEncryption(const bool& on);
mfiore 0:c62615f15125 885
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 886 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 887 * Get AES encryption
mfiore 0:c62615f15125 888 * @returns true if AES encryption is enabled
mfiore 0:c62615f15125 889 */
mfiore 0:c62615f15125 890 bool getAesEncryption();
mfiore 0:c62615f15125 891
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 892 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 893 * Get RSSI stats
Mike Fiore 11:d8464345e1f1 894 * @returns rssi_stats struct containing last, min, max, and avg RSSI in dB
mfiore 0:c62615f15125 895 */
mfiore 0:c62615f15125 896 rssi_stats getRssiStats();
mfiore 0:c62615f15125 897
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 898 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 899 * Get SNR stats
Mike Fiore 11:d8464345e1f1 900 * @returns snr_stats struct containing last, min, max, and avg SNR in cB
mfiore 0:c62615f15125 901 */
mfiore 0:c62615f15125 902 snr_stats getSnrStats();
mfiore 0:c62615f15125 903
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 904 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 905 * Get ms until next free channel
mfiore 0:c62615f15125 906 * only applicable for European models, US models return 0
mfiore 0:c62615f15125 907 * @returns time (ms) until a channel is free to use for transmitting
mfiore 0:c62615f15125 908 */
mfiore 0:c62615f15125 909 uint32_t getNextTxMs();
mfiore 0:c62615f15125 910
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 911 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 912 * Get join delay in seconds
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 913 * Defaults to 5 seconds
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 914 * Must match join delay setting of the network server
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 915 *
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 916 * The default Join Delay is 5 seconds
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 917 * The default Join Delay for PRIVATE_MTS was 1 second in the previous release
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 918 *
Jason Reiss 10:27dafba9fe19 919 * @returns number of seconds before join accept message is expected
Jason Reiss 10:27dafba9fe19 920 */
Jason Reiss 10:27dafba9fe19 921 uint8_t getJoinDelay();
Jason Reiss 10:27dafba9fe19 922
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 923 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 924 * Set join delay in seconds
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 925 * Defaults to 5 seconds
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 926 * Must match join delay setting of the network server
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 927 *
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 928 * The default Join Delay is 5 seconds
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 929 * The default Join Delay for PRIVATE_MTS was 1 second in the previous release
Jenkins@KEILDM1.dc.multitech.prv 141:c6247c5469ff 930 *
Jason Reiss 10:27dafba9fe19 931 * @param delay number of seconds before join accept message is expected
Jason Reiss 10:27dafba9fe19 932 * @return MDOT_OK if success
Jason Reiss 10:27dafba9fe19 933 */
Jason Reiss 10:27dafba9fe19 934 uint32_t setJoinDelay(uint8_t delay);
Jason Reiss 10:27dafba9fe19 935
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 936 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 937 * Get join Rx1 datarate offset
Mike Fiore 16:b630e18103e5 938 * defaults to 0
Mike Fiore 16:b630e18103e5 939 * @returns offset
Mike Fiore 16:b630e18103e5 940 */
Mike Fiore 16:b630e18103e5 941 uint8_t getJoinRx1DataRateOffset();
Mike Fiore 16:b630e18103e5 942
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 943 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 944 * Set join Rx1 datarate offset
Mike Fiore 16:b630e18103e5 945 * @param offset for datarate
Mike Fiore 16:b630e18103e5 946 * @return MDOT_OK if success
Mike Fiore 16:b630e18103e5 947 */
Mike Fiore 16:b630e18103e5 948 uint32_t setJoinRx1DataRateOffset(uint8_t offset);
Mike Fiore 16:b630e18103e5 949
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 950 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 951 * Get join Rx2 datarate
Mike Fiore 16:b630e18103e5 952 * defaults to US:DR8, AU:DR8, EU:DR0
Mike Fiore 16:b630e18103e5 953 * @returns datarate
Mike Fiore 16:b630e18103e5 954 */
Mike Fiore 16:b630e18103e5 955 uint8_t getJoinRx2DataRate();
Mike Fiore 16:b630e18103e5 956
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 957 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 958 * Set join Rx2 datarate
Mike Fiore 16:b630e18103e5 959 * @param datarate
Mike Fiore 16:b630e18103e5 960 * @return MDOT_OK if success
Mike Fiore 16:b630e18103e5 961 */
Mike Fiore 16:b630e18103e5 962 uint32_t setJoinRx2DataRate(uint8_t datarate);
Mike Fiore 16:b630e18103e5 963
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 964 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 965 * Get join Rx2 frequency
Mike Fiore 16:b630e18103e5 966 * defaults US:923.3, AU:923.3, EU:869.525
Mike Fiore 16:b630e18103e5 967 * @returns frequency
Mike Fiore 16:b630e18103e5 968 */
Mike Fiore 16:b630e18103e5 969 uint32_t getJoinRx2Frequency();
Mike Fiore 16:b630e18103e5 970
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 971 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 972 * Set join Rx2 frequency
Mike Fiore 16:b630e18103e5 973 * @param frequency
Mike Fiore 16:b630e18103e5 974 * @return MDOT_OK if success
Mike Fiore 16:b630e18103e5 975 */
Mike Fiore 16:b630e18103e5 976 uint32_t setJoinRx2Frequency(uint32_t frequency);
Mike Fiore 16:b630e18103e5 977
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 978 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 979 * Get rx delay in seconds
Jason Reiss 10:27dafba9fe19 980 * Defaults to 1 second
Jason Reiss 10:27dafba9fe19 981 * @returns number of seconds before response message is expected
Jason Reiss 10:27dafba9fe19 982 */
Jason Reiss 10:27dafba9fe19 983 uint8_t getRxDelay();
Jason Reiss 10:27dafba9fe19 984
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 985 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 986 * Set rx delay in seconds
Jason Reiss 10:27dafba9fe19 987 * Defaults to 1 second
Jason Reiss 10:27dafba9fe19 988 * @param delay number of seconds before response message is expected
Jason Reiss 10:27dafba9fe19 989 * @return MDOT_OK if success
Jason Reiss 10:27dafba9fe19 990 */
Jason Reiss 10:27dafba9fe19 991 uint32_t setRxDelay(uint8_t delay);
Jason Reiss 10:27dafba9fe19 992
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 993 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 994 * Get preserve session to save network session info through reset or power down in AUTO_OTA mode
Jason Reiss 10:27dafba9fe19 995 * Defaults to off
Jason Reiss 10:27dafba9fe19 996 * @returns true if enabled
Jason Reiss 10:27dafba9fe19 997 */
Jason Reiss 10:27dafba9fe19 998 bool getPreserveSession();
Jason Reiss 10:27dafba9fe19 999
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1000 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1001 * Set preserve session to save network session info through reset or power down in AUTO_OTA mode
Jason Reiss 10:27dafba9fe19 1002 * Defaults to off
Jason Reiss 10:27dafba9fe19 1003 * @param enable
Jason Reiss 10:27dafba9fe19 1004 * @return MDOT_OK if success
Jason Reiss 10:27dafba9fe19 1005 */
Jason Reiss 10:27dafba9fe19 1006 uint32_t setPreserveSession(bool enable);
Jason Reiss 10:27dafba9fe19 1007
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1008 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1009 * Get data pending
mfiore 0:c62615f15125 1010 * only valid after sending data to the gateway
mfiore 0:c62615f15125 1011 * @returns true if server has available packet(s)
mfiore 0:c62615f15125 1012 */
mfiore 0:c62615f15125 1013 bool getDataPending();
mfiore 0:c62615f15125 1014
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1015 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1016 * Get ack requested
Mike Fiore 16:b630e18103e5 1017 * only valid after sending data to the gateway
Mike Fiore 16:b630e18103e5 1018 * @returns true if server has requested ack
Mike Fiore 16:b630e18103e5 1019 */
Mike Fiore 16:b630e18103e5 1020 bool getAckRequested();
Mike Fiore 16:b630e18103e5 1021
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1022 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1023 * Get is transmitting indicator
mfiore 0:c62615f15125 1024 * @returns true if currently transmitting
mfiore 0:c62615f15125 1025 */
mfiore 0:c62615f15125 1026 bool getIsTransmitting();
mfiore 0:c62615f15125 1027
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1028 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1029 * Get is idle indicator
Mike Fiore 16:b630e18103e5 1030 * @returns true if not currently transmitting, waiting or receiving
Mike Fiore 16:b630e18103e5 1031 */
Mike Fiore 16:b630e18103e5 1032 bool getIsIdle();
Mike Fiore 16:b630e18103e5 1033
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1034 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1035 * Set TX data rate
mfiore 0:c62615f15125 1036 * data rates affect maximum payload size
Jenkins@KEILDM1.dc.multitech.prv 115:bcd44682ac1e 1037 * @param dr DR0-DR7 for Europe, DR0-DR4 for United States
mfiore 0:c62615f15125 1038 * @returns MDOT_OK if success
mfiore 0:c62615f15125 1039 */
mfiore 0:c62615f15125 1040 int32_t setTxDataRate(const uint8_t& dr);
mfiore 0:c62615f15125 1041
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1042 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1043 * Get TX data rate
Mike Fiore 11:d8464345e1f1 1044 * @returns current TX data rate (DR0-DR15)
mfiore 0:c62615f15125 1045 */
mfiore 0:c62615f15125 1046 uint8_t getTxDataRate();
mfiore 0:c62615f15125 1047
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1048 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1049 * Get a random value from the radio based on RSSI
Mike Fiore 12:54f9cac9d690 1050 * @returns randome value
Mike Fiore 12:54f9cac9d690 1051 */
Mike Fiore 12:54f9cac9d690 1052 uint32_t getRadioRandom();
Mike Fiore 12:54f9cac9d690 1053
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1054 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1055 * Get data rate spreading factor and bandwidth
Mike Fiore 11:d8464345e1f1 1056 * EU868 Datarates
Mike Fiore 11:d8464345e1f1 1057 * ---------------
Mike Fiore 11:d8464345e1f1 1058 * DR0 - SF12BW125
Mike Fiore 11:d8464345e1f1 1059 * DR1 - SF11BW125
Mike Fiore 11:d8464345e1f1 1060 * DR2 - SF10BW125
Mike Fiore 11:d8464345e1f1 1061 * DR3 - SF9BW125
Mike Fiore 11:d8464345e1f1 1062 * DR4 - SF8BW125
Mike Fiore 11:d8464345e1f1 1063 * DR5 - SF7BW125
Mike Fiore 11:d8464345e1f1 1064 * DR6 - SF7BW250
Mike Fiore 11:d8464345e1f1 1065 * DR7 - FSK
Mike Fiore 11:d8464345e1f1 1066 *
Mike Fiore 11:d8464345e1f1 1067 * US915 Datarates
Mike Fiore 11:d8464345e1f1 1068 * ---------------
Mike Fiore 11:d8464345e1f1 1069 * DR0 - SF10BW125
Mike Fiore 11:d8464345e1f1 1070 * DR1 - SF9BW125
Mike Fiore 11:d8464345e1f1 1071 * DR2 - SF8BW125
Mike Fiore 11:d8464345e1f1 1072 * DR3 - SF7BW125
Mike Fiore 11:d8464345e1f1 1073 * DR4 - SF8BW500
Mike Fiore 11:d8464345e1f1 1074 *
jreiss 17:306ffaa5d79b 1075 * AU915 Datarates
jreiss 17:306ffaa5d79b 1076 * ---------------
jreiss 17:306ffaa5d79b 1077 * DR0 - SF10BW125
jreiss 17:306ffaa5d79b 1078 * DR1 - SF9BW125
jreiss 17:306ffaa5d79b 1079 * DR2 - SF8BW125
jreiss 17:306ffaa5d79b 1080 * DR3 - SF7BW125
jreiss 17:306ffaa5d79b 1081 * DR4 - SF8BW500
jreiss 17:306ffaa5d79b 1082 *
Mike Fiore 11:d8464345e1f1 1083 * @returns spreading factor and bandwidth
Mike Fiore 11:d8464345e1f1 1084 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1085 std::string getDataRateDetails(uint8_t rate);
Mike Fiore 11:d8464345e1f1 1086 std::string getDateRateDetails(uint8_t rate);
Mike Fiore 11:d8464345e1f1 1087
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1088
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1089 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1090 * Set TX power output of radio before antenna gain, default: 14 dBm
Mike Fiore 12:54f9cac9d690 1091 * actual output power may be limited by local regulations for the chosen frequency
mfiore 0:c62615f15125 1092 * power affects maximum range
mfiore 0:c62615f15125 1093 * @param power 2 dBm - 20 dBm
mfiore 0:c62615f15125 1094 * @returns MDOT_OK if success
mfiore 0:c62615f15125 1095 */
mfiore 0:c62615f15125 1096 int32_t setTxPower(const uint32_t& power);
mfiore 0:c62615f15125 1097
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1098 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1099 * Get TX power
mfiore 0:c62615f15125 1100 * @returns TX power (2 dBm - 20 dBm)
mfiore 0:c62615f15125 1101 */
mfiore 0:c62615f15125 1102 uint32_t getTxPower();
mfiore 0:c62615f15125 1103
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1104 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1105 * Get configured gain of installed antenna, default: +3 dBi
Mike Fiore 11:d8464345e1f1 1106 * @returns gain of antenna in dBi
Mike Fiore 11:d8464345e1f1 1107 */
Mike Fiore 11:d8464345e1f1 1108 int8_t getAntennaGain();
Mike Fiore 11:d8464345e1f1 1109
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1110 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1111 * Set configured gain of installed antenna, default: +3 dBi
Mike Fiore 11:d8464345e1f1 1112 * @param gain -127 dBi - 128 dBi
Mike Fiore 11:d8464345e1f1 1113 * @returns MDOT_OK if success
Mike Fiore 11:d8464345e1f1 1114 */
Mike Fiore 11:d8464345e1f1 1115 int32_t setAntennaGain(int8_t gain);
Mike Fiore 11:d8464345e1f1 1116
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1117 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1118 * Enable/disable TX waiting for rx windows
mfiore 0:c62615f15125 1119 * when enabled, send calls will block until a packet is received or RX timeout
mfiore 0:c62615f15125 1120 * @param enable set to true if expecting responses to transmitted packets
mfiore 0:c62615f15125 1121 * @returns MDOT_OK if success
mfiore 0:c62615f15125 1122 */
mfiore 0:c62615f15125 1123 int32_t setTxWait(const bool& enable);
mfiore 0:c62615f15125 1124
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1125 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1126 * Get TX wait
mfiore 0:c62615f15125 1127 * @returns true if TX wait is enabled
mfiore 0:c62615f15125 1128 */
mfiore 0:c62615f15125 1129 bool getTxWait();
mfiore 0:c62615f15125 1130
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1131 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1132 * Cancel pending rx windows
Mike Fiore 16:b630e18103e5 1133 */
Mike Fiore 16:b630e18103e5 1134 void cancelRxWindow();
Mike Fiore 16:b630e18103e5 1135
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1136 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1137 * Get time on air
mfiore 0:c62615f15125 1138 * @returns the amount of time (in ms) it would take to send bytes bytes based on current configuration
mfiore 0:c62615f15125 1139 */
mfiore 0:c62615f15125 1140 uint32_t getTimeOnAir(uint8_t bytes);
mfiore 0:c62615f15125 1141
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1142 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1143 * Get min frequency
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1144 * @returns minimum frequency based on current channel plan
mfiore 0:c62615f15125 1145 */
mfiore 0:c62615f15125 1146 uint32_t getMinFrequency();
mfiore 0:c62615f15125 1147
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1148 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1149 * Get max frequency
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1150 * @returns maximum frequency based on current channel plan
mfiore 0:c62615f15125 1151 */
mfiore 0:c62615f15125 1152 uint32_t getMaxFrequency();
mfiore 0:c62615f15125 1153
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1154 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1155 * Get min datarate
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1156 * @returns minimum datarate based on current channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1157 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1158 uint8_t getMinDatarate();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1159
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1160 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1161 * Get max datarate
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1162 * @returns maximum datarate based on current channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1163 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1164 uint8_t getMaxDatarate();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1165
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1166 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1167 * Get min datarate offset
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1168 * @returns minimum datarate offset based on current channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1169 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1170 uint8_t getMinDatarateOffset();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1171
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1172 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1173 * Get max datarate offset
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1174 * @returns maximum datarate based on current channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1175 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1176 uint8_t getMaxDatarateOffset();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1177
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1178 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1179 * Get min datarate
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1180 * @returns minimum datarate based on current channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1181 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1182 uint8_t getMinRx2Datarate();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1183
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1184 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1185 * Get max rx2 datarate
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1186 * @returns maximum rx2 datarate based on current channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1187 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1188 uint8_t getMaxRx2Datarate();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1189
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1190 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1191 * Get max tx power
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1192 * @returns maximum tx power based on current channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1193 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1194 uint8_t getMaxTxPower();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1195
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1196 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1197 * Get min tx power
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1198 * @returns minimum tx power based on current channel plan
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1199 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1200 uint8_t getMinTxPower();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1201
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1202 /**
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1203 * Set ping slot periodicity
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1204 * Specify the the number of ping slots in a given beacon interval
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1205 * Note: Must switch back to class A for the change to take effect
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1206 * @param exp - number_of_pings = 2^(7 - exp) where 0 <= exp <= 7
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1207 * @returns MDOT_OK if success
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1208 */
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1209 uint32_t setPingPeriodicity(uint8_t exp);
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1210
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1211 /**
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1212 * Get ping slot periodicity
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1213 * @returns exp = 7 - log2(number_of_pings)
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1214 */
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1215 uint8_t getPingPeriodicity();
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1216
Jenkins@KEILDM1.dc.multitech.prv 172:7ec44396a51b 1217 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1218 *
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1219 * get/set adaptive data rate
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1220 * configure data rates and power levels based on signal to noise of packets received at gateway
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1221 * true == adaptive data rate is on
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1222 * set function returns MDOT_OK if success
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1223 */
Mike Fiore 12:54f9cac9d690 1224 int32_t setAdr(const bool& on);
Mike Fiore 12:54f9cac9d690 1225 bool getAdr();
Mike Fiore 12:54f9cac9d690 1226
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1227 /**
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1228 * Set the ADR ACK Limit
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1229 * @param limit - ADR ACK limit
mfiore 0:c62615f15125 1230 */
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1231 void setAdrAckLimit(uint16_t limit);
mfiore 0:c62615f15125 1232
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1233 /**
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1234 * Get the ADR ACK Limit
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1235 * @returns ADR ACK limit
mfiore 0:c62615f15125 1236 */
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1237 uint16_t getAdrAckLimit();
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1238
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1239 /**
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1240 * Set the ADR ACK Delay
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1241 * @param delay - ADR ACK delay
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1242 */
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1243 void setAdrAckDelay(uint16_t delay);
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1244
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1245 /**
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1246 * Get the ADR ACK Delay
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1247 * @returns ADR ACK delay
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1248 */
Jenkins@KEILDM1.dc.multitech.prv 182:b642f4d0c95b 1249 uint16_t getAdrAckDelay();
mfiore 0:c62615f15125 1250
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1251 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1252 * Enable/disable CRC checking of packets
mfiore 0:c62615f15125 1253 * CRC checking must be enabled for use with Conduit gateway and MTAC_LORA card
mfiore 0:c62615f15125 1254 * @param on set to true to enable CRC checking
mfiore 0:c62615f15125 1255 * @returns MDOT_OK if success
mfiore 0:c62615f15125 1256 */
mfiore 0:c62615f15125 1257 int32_t setCrc(const bool& on);
mfiore 0:c62615f15125 1258
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1259 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1260 * Get CRC checking
mfiore 0:c62615f15125 1261 * @returns true if CRC checking is enabled
mfiore 0:c62615f15125 1262 */
mfiore 0:c62615f15125 1263 bool getCrc();
mfiore 0:c62615f15125 1264
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1265 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1266 * Set ack
mfiore 0:c62615f15125 1267 * @param retries 0 to disable acks, otherwise 1 - 8
mfiore 0:c62615f15125 1268 * @returns MDOT_OK if success
mfiore 0:c62615f15125 1269 */
mfiore 0:c62615f15125 1270 int32_t setAck(const uint8_t& retries);
mfiore 0:c62615f15125 1271
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1272 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1273 * Get ack
mfiore 0:c62615f15125 1274 * @returns 0 if acks are disabled, otherwise retries (1 - 8)
mfiore 0:c62615f15125 1275 */
mfiore 0:c62615f15125 1276 uint8_t getAck();
mfiore 0:c62615f15125 1277
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1278 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1279 * Set number of packet repeats for unconfirmed frames
Mike Fiore 12:54f9cac9d690 1280 * @param repeat 0 or 1 for no repeats, otherwise 2-15
Mike Fiore 12:54f9cac9d690 1281 * @returns MDOT_OK if success
Mike Fiore 12:54f9cac9d690 1282 */
Mike Fiore 12:54f9cac9d690 1283 int32_t setRepeat(const uint8_t& repeat);
Mike Fiore 12:54f9cac9d690 1284
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1285 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1286 * Get number of packet repeats for unconfirmed frames
Mike Fiore 12:54f9cac9d690 1287 * @returns 0 or 1 if no repeats, otherwise 2-15
Mike Fiore 12:54f9cac9d690 1288 */
Mike Fiore 12:54f9cac9d690 1289 uint8_t getRepeat();
Mike Fiore 12:54f9cac9d690 1290
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1291 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1292 * Send data to the gateway
mfiore 0:c62615f15125 1293 * validates data size (based on spreading factor)
mfiore 0:c62615f15125 1294 * @param data a vector of up to 242 bytes (may be less based on spreading factor)
mfiore 0:c62615f15125 1295 * @returns MDOT_OK if packet was sent successfully (ACKs disabled), or if an ACK was received (ACKs enabled)
mfiore 0:c62615f15125 1296 */
mfiore 0:c62615f15125 1297 int32_t send(const std::vector<uint8_t>& data, const bool& blocking = true, const bool& highBw = false);
mfiore 0:c62615f15125 1298
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1299 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1300 * Inject mac command
Mike Fiore 16:b630e18103e5 1301 * @param data a vector containing mac commands
Mike Fiore 16:b630e18103e5 1302 * @returns MDOT_OK
Mike Fiore 16:b630e18103e5 1303 */
Mike Fiore 16:b630e18103e5 1304 int32_t injectMacCommand(const std::vector<uint8_t>& data);
Mike Fiore 16:b630e18103e5 1305
Mike Fiore 16:b630e18103e5 1306 /**
Mike Fiore 16:b630e18103e5 1307 * Clear MAC command buffer to be sent in next uplink
Mike Fiore 16:b630e18103e5 1308 * @returns MDOT_OK
Mike Fiore 16:b630e18103e5 1309 */
Mike Fiore 16:b630e18103e5 1310 int32_t clearMacCommands();
Mike Fiore 16:b630e18103e5 1311
Mike Fiore 16:b630e18103e5 1312 /**
Mike Fiore 16:b630e18103e5 1313 * Get MAC command buffer to be sent in next uplink
Mike Fiore 16:b630e18103e5 1314 * @returns command bytes
Mike Fiore 16:b630e18103e5 1315 */
Mike Fiore 16:b630e18103e5 1316 std::vector<uint8_t> getMacCommands();
Mike Fiore 16:b630e18103e5 1317
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1318 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1319 * Fetch data received from the gateway
mfiore 0:c62615f15125 1320 * this function only checks to see if a packet has been received - it does not open a receive window
mfiore 0:c62615f15125 1321 * send() must be called before recv()
mfiore 0:c62615f15125 1322 * @param data a vector to put the received data into
mfiore 0:c62615f15125 1323 * @returns MDOT_OK if packet was successfully received
mfiore 0:c62615f15125 1324 */
mfiore 0:c62615f15125 1325 int32_t recv(std::vector<uint8_t>& data);
mfiore 0:c62615f15125 1326
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1327 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1328 * Ping
mfiore 0:c62615f15125 1329 * status will be MDOT_OK if ping succeeded
mfiore 0:c62615f15125 1330 * @returns ping_response struct containing status, RSSI, and SNR
mfiore 0:c62615f15125 1331 */
mfiore 0:c62615f15125 1332 ping_response ping();
mfiore 0:c62615f15125 1333
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1334 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1335 * Get return code string
mfiore 0:c62615f15125 1336 * @returns string containing a description of the given error code
mfiore 0:c62615f15125 1337 */
mfiore 0:c62615f15125 1338 static std::string getReturnCodeString(const int32_t& code);
mfiore 0:c62615f15125 1339
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1340 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1341 * Get last error
mfiore 0:c62615f15125 1342 * @returns string explaining the last error that occured
mfiore 0:c62615f15125 1343 */
mfiore 0:c62615f15125 1344 std::string getLastError();
mfiore 0:c62615f15125 1345
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1346 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1347 * Go to sleep
Jason Reiss 10:27dafba9fe19 1348 * @param interval the number of seconds to sleep before waking up if wakeup_mode == RTC_ALARM or RTC_ALARM_OR_INTERRUPT, else ignored
Jason Reiss 10:27dafba9fe19 1349 * @param wakeup_mode RTC_ALARM, INTERRUPT, RTC_ALARM_OR_INTERRUPT
Mike Fiore 7:683dba5d576f 1350 * if RTC_ALARM the real time clock is configured to wake the device up after the specified interval
Mike Fiore 7:683dba5d576f 1351 * if INTERRUPT the device will wake up on the rising edge of the interrupt pin
Jason Reiss 10:27dafba9fe19 1352 * if RTC_ALARM_OR_INTERRUPT the device will wake on the first event to occur
Mike Fiore 7:683dba5d576f 1353 * @param deepsleep if true go into deep sleep mode (lowest power, all memory and registers are lost, peripherals turned off)
Mike Fiore 7:683dba5d576f 1354 * else go into sleep mode (low power, memory and registers are maintained, peripherals stay on)
Mike Fiore 7:683dba5d576f 1355 *
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1356 * For the MDOT
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1357 * in sleep mode, the device can be woken up on an XBEE_DI (2-8) pin or by the RTC alarm
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1358 * in deepsleep mode, the device can only be woken up using the WKUP pin (PA0, XBEE_DIO7) or by the RTC alarm
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1359 * For the XDOT
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1360 * in sleep mode, the device can be woken up on GPIO (0-3), UART1_RX, WAKE or by the RTC alarm
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1361 * in deepsleep mode, the device can only be woken up using the WKUP pin (PA0, WAKE) or by the RTC alarm
Jenkins@KEILDM1.dc.multitech.prv 128:79ed06543c8e 1362 * @returns MDOT_OK on success
Mike Fiore 7:683dba5d576f 1363 */
Jenkins@KEILDM1.dc.multitech.prv 128:79ed06543c8e 1364 int32_t sleep(const uint32_t& interval, const uint8_t& wakeup_mode = RTC_ALARM, const bool& deepsleep = true);
Mike Fiore 7:683dba5d576f 1365
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1366 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1367 * Set wake pin
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1368 * @param pin the pin to use to wake the device from sleep mode
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1369 * For MDOT, XBEE_DI (2-8)
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1370 * For XDOT, GPIO (0-3), UART1_RX, or WAKE
Mike Fiore 7:683dba5d576f 1371 */
Mike Fiore 7:683dba5d576f 1372 void setWakePin(const PinName& pin);
Mike Fiore 7:683dba5d576f 1373
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1374 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1375 * Get wake pin
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1376 * @returns the pin to use to wake the device from sleep mode
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1377 * For MDOT, XBEE_DI (2-8)
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1378 * For XDOT, GPIO (0-3), UART1_RX, or WAKE
Mike Fiore 7:683dba5d576f 1379 */
Mike Fiore 7:683dba5d576f 1380 PinName getWakePin();
Mike Fiore 7:683dba5d576f 1381
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1382 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1383 * Write data in a user backup register
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1384 * @param register one of UBR0 through UBR9 for MDOT, one of UBR0 through UBR21 for XDOT
jreiss 9:ec2fffe31793 1385 * @param data user data to back up
jreiss 9:ec2fffe31793 1386 * @returns true if success
jreiss 9:ec2fffe31793 1387 */
jreiss 9:ec2fffe31793 1388 bool writeUserBackupRegister(uint32_t reg, uint32_t data);
jreiss 9:ec2fffe31793 1389
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1390 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1391 * Read data in a user backup register
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1392 * @param register one of UBR0 through UBR9 for MDOT, one of UBR0 through UBR21 for XDOT
jreiss 9:ec2fffe31793 1393 * @param data gets set to content of register
jreiss 9:ec2fffe31793 1394 * @returns true if success
jreiss 9:ec2fffe31793 1395 */
jreiss 9:ec2fffe31793 1396 bool readUserBackupRegister(uint32_t reg, uint32_t& data);
jreiss 9:ec2fffe31793 1397
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1398 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1399 * Set LBT time in us
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1400 * @param ms time in us
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1401 * @returns true if success
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1402 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1403 bool setLbtTimeUs(uint16_t us);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1404
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1405 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1406 * Get LBT time in us
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1407 * @returns LBT time in us
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1408 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1409 uint16_t getLbtTimeUs();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1410
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1411 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1412 * Set LBT threshold in dBm
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1413 * @param rssi threshold in dBm
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1414 * @returns true if success
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1415 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1416 bool setLbtThreshold(int8_t rssi);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1417
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1418 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1419 * Get LBT threshold in dBm
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1420 * @returns LBT threshold in dBm
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1421 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1422 int8_t getLbtThreshold();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1423
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1424 /**
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1425 * Get Radio Frequency Offset
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1426 * Used for fine calibration of radio frequencies
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1427 * @returns frequency offset in MHz
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1428 */
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1429 int32_t getFrequencyOffset();
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1430 /**
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1431 * Get Radio Frequency Offset
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1432 * Used for fine calibration of radio frequencies
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1433 * @param offset frequency offset in MHz
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1434 */
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1435 void setFrequencyOffset(int32_t offset);
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1436
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1437
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1438 #if defined(TARGET_MTS_MDOT_F411RE)
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1439 ///////////////////////////////////////////////////////////////////
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1440 // Filesystem (Non Volatile Memory) Operation Functions for mDot //
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1441 ///////////////////////////////////////////////////////////////////
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1442
Mike Fiore 11:d8464345e1f1 1443 // Save user file data to flash
Mike Fiore 11:d8464345e1f1 1444 // file - name of file max 30 chars
Mike Fiore 11:d8464345e1f1 1445 // data - data of file
Mike Fiore 11:d8464345e1f1 1446 // size - size of file
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1447 // returns true if successful
Mike Fiore 11:d8464345e1f1 1448 bool saveUserFile(const char* file, void* data, uint32_t size);
Mike Fiore 11:d8464345e1f1 1449
Mike Fiore 11:d8464345e1f1 1450 // Append user file data to flash
Mike Fiore 11:d8464345e1f1 1451 // file - name of file max 30 chars
Mike Fiore 11:d8464345e1f1 1452 // data - data of file
Mike Fiore 11:d8464345e1f1 1453 // size - size of file
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1454 // returns true if successful
Mike Fiore 11:d8464345e1f1 1455 bool appendUserFile(const char* file, void* data, uint32_t size);
Mike Fiore 11:d8464345e1f1 1456
Mike Fiore 11:d8464345e1f1 1457 // Read user file data from flash
Mike Fiore 11:d8464345e1f1 1458 // file - name of file max 30 chars
Mike Fiore 11:d8464345e1f1 1459 // data - data of file
Mike Fiore 11:d8464345e1f1 1460 // size - size of file
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1461 // returns true if successful
Mike Fiore 11:d8464345e1f1 1462 bool readUserFile(const char* file, void* data, uint32_t size);
Mike Fiore 11:d8464345e1f1 1463
Mike Fiore 11:d8464345e1f1 1464 // Move a user file in flash
Mike Fiore 11:d8464345e1f1 1465 // file - name of file
Mike Fiore 11:d8464345e1f1 1466 // new_name - new name of file
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1467 // returns true if successful
Mike Fiore 11:d8464345e1f1 1468 bool moveUserFile(const char* file, const char* new_name);
Mike Fiore 11:d8464345e1f1 1469
Mike Fiore 11:d8464345e1f1 1470 // Delete user file data from flash
Mike Fiore 11:d8464345e1f1 1471 // file - name of file max 30 chars
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1472 // returns true if successful
Mike Fiore 11:d8464345e1f1 1473 bool deleteUserFile(const char* file);
Mike Fiore 11:d8464345e1f1 1474
Mike Fiore 11:d8464345e1f1 1475 // Open user file in flash, max of 4 files open concurrently
Mike Fiore 11:d8464345e1f1 1476 // file - name of file max 30 chars
Mike Fiore 11:d8464345e1f1 1477 // mode - combination of FM_APPEND | FM_TRUNC | FM_CREAT |
Mike Fiore 11:d8464345e1f1 1478 // FM_RDONLY | FM_WRONLY | FM_RDWR | FM_DIRECT
Mike Fiore 11:d8464345e1f1 1479 // returns - mdot_file struct, fd field will be a negative value if file could not be opened
Mike Fiore 11:d8464345e1f1 1480 mDot::mdot_file openUserFile(const char* file, int mode);
Mike Fiore 11:d8464345e1f1 1481
Mike Fiore 11:d8464345e1f1 1482 // Seek an open file
Mike Fiore 11:d8464345e1f1 1483 // file - mdot file struct
Mike Fiore 11:d8464345e1f1 1484 // offset - offset in bytes
Mike Fiore 11:d8464345e1f1 1485 // whence - where offset is based SEEK_SET, SEEK_CUR, SEEK_END
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1486 // returns true if successful
Mike Fiore 11:d8464345e1f1 1487 bool seekUserFile(mDot::mdot_file& file, size_t offset, int whence);
Mike Fiore 11:d8464345e1f1 1488
Mike Fiore 11:d8464345e1f1 1489 // Read bytes from open file
Mike Fiore 11:d8464345e1f1 1490 // file - mdot file struct
Mike Fiore 11:d8464345e1f1 1491 // data - mem location to store data
Mike Fiore 11:d8464345e1f1 1492 // length - number of bytes to read
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1493 // returns - number of bytes read, negative if error
Mike Fiore 11:d8464345e1f1 1494 int readUserFile(mDot::mdot_file& file, void* data, size_t length);
Mike Fiore 11:d8464345e1f1 1495
Mike Fiore 11:d8464345e1f1 1496 // Write bytes to open file
Mike Fiore 11:d8464345e1f1 1497 // file - mdot file struct
Mike Fiore 11:d8464345e1f1 1498 // data - data to write
Mike Fiore 11:d8464345e1f1 1499 // length - number of bytes to write
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1500 // returns - number of bytes written, negative if error
Mike Fiore 11:d8464345e1f1 1501 int writeUserFile(mDot::mdot_file& file, void* data, size_t length);
Mike Fiore 11:d8464345e1f1 1502
Mike Fiore 11:d8464345e1f1 1503 // Close open file
Mike Fiore 11:d8464345e1f1 1504 // file - mdot file struct
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1505 // returns true if successful
Mike Fiore 11:d8464345e1f1 1506 bool closeUserFile(mDot::mdot_file& file);
Mike Fiore 11:d8464345e1f1 1507
Mike Fiore 11:d8464345e1f1 1508 // List user files stored in flash
Mike Fiore 11:d8464345e1f1 1509 std::vector<mDot::mdot_file> listUserFiles();
Mike Fiore 11:d8464345e1f1 1510
Mike Fiore 11:d8464345e1f1 1511 // Move file into the firmware upgrade path to be flashed on next boot
Mike Fiore 11:d8464345e1f1 1512 // file - name of file
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1513 // returns true if successful
Mike Fiore 11:d8464345e1f1 1514 bool moveUserFileToFirmwareUpgrade(const char* file);
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1515 #else
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1516 ///////////////////////////////////////////////////////////////
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1517 // EEPROM (Non Volatile Memory) Operation Functions for xDot //
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1518 ///////////////////////////////////////////////////////////////
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1519
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1520 // Write to EEPROM
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1521 // addr - address to write to (0 - 0x17FF)
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1522 // data - data to write
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1523 // size - size of data
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1524 // returns true if successful
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1525 bool nvmWrite(uint16_t addr, void* data, uint16_t size);
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1526
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1527 // Read from EEPROM
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1528 // addr - address to read from (0 - 0x17FF)
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1529 // data - buffer for data
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1530 // size - size of buffer
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1531 // returns true if successful
Jenkins@KEILDM1.dc.multitech.prv 31:7fdee197d415 1532 bool nvmRead(uint16_t addr, void* data, uint16_t size);
Jenkins@KEILDM1.dc.multitech.prv 19:f3a46d2bb9b3 1533 #endif /* TARGET_MTS_MDOT_F411RE */
Mike Fiore 11:d8464345e1f1 1534
Mike Fiore 11:d8464345e1f1 1535 // get current statistics
Mike Fiore 11:d8464345e1f1 1536 // Join Attempts, Join Fails, Up Packets, Down Packets, Missed Acks
Mike Fiore 11:d8464345e1f1 1537 mdot_stats getStats();
Mike Fiore 11:d8464345e1f1 1538
Mike Fiore 11:d8464345e1f1 1539 // reset statistics
Mike Fiore 11:d8464345e1f1 1540 // Join Attempts, Join Fails, Up Packets, Down Packets, Missed Acks
Mike Fiore 11:d8464345e1f1 1541 void resetStats();
Mike Fiore 11:d8464345e1f1 1542
Mike Fiore 11:d8464345e1f1 1543 // Convert pin number 2-8 to pin name DIO2-DI8
Mike Fiore 11:d8464345e1f1 1544 static PinName pinNum2Name(uint8_t num);
Mike Fiore 11:d8464345e1f1 1545
Mike Fiore 11:d8464345e1f1 1546 // Convert pin name DIO2-DI8 to pin number 2-8
Mike Fiore 11:d8464345e1f1 1547 static uint8_t pinName2Num(PinName name);
Mike Fiore 11:d8464345e1f1 1548
Mike Fiore 11:d8464345e1f1 1549 // Convert pin name DIO2-DI8 to string
Mike Fiore 11:d8464345e1f1 1550 static std::string pinName2Str(PinName name);
Mike Fiore 11:d8464345e1f1 1551
Mike Fiore 11:d8464345e1f1 1552 uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l);
mfiore 0:c62615f15125 1553
mfiore 0:c62615f15125 1554 /*************************************************************************
mfiore 0:c62615f15125 1555 * The following functions are only used by the AT command application and
mfiore 0:c62615f15125 1556 * should not be used by standard applications consuming the mDot library
mfiore 0:c62615f15125 1557 ************************************************************************/
Mike Fiore 7:683dba5d576f 1558
mfiore 0:c62615f15125 1559 // set/get configured baud rate for command port
mfiore 0:c62615f15125 1560 // only for use in conjunction with AT interface
mfiore 0:c62615f15125 1561 // set function returns MDOT_OK if success
mfiore 0:c62615f15125 1562 int32_t setBaud(const uint32_t& baud);
mfiore 0:c62615f15125 1563 uint32_t getBaud();
mfiore 0:c62615f15125 1564
mfiore 0:c62615f15125 1565 // set/get baud rate for debug port
mfiore 0:c62615f15125 1566 // set function returns MDOT_OK if success
mfiore 0:c62615f15125 1567 int32_t setDebugBaud(const uint32_t& baud);
mfiore 0:c62615f15125 1568 uint32_t getDebugBaud();
mfiore 0:c62615f15125 1569
mfiore 0:c62615f15125 1570 // set/get command terminal echo
mfiore 0:c62615f15125 1571 // set function returns MDOT_OK if success
mfiore 0:c62615f15125 1572 int32_t setEcho(const bool& on);
mfiore 0:c62615f15125 1573 bool getEcho();
mfiore 0:c62615f15125 1574
mfiore 0:c62615f15125 1575 // set/get command terminal verbose mode
mfiore 0:c62615f15125 1576 // set function returns MDOT_OK if success
mfiore 0:c62615f15125 1577 int32_t setVerbose(const bool& on);
mfiore 0:c62615f15125 1578 bool getVerbose();
mfiore 0:c62615f15125 1579
mfiore 0:c62615f15125 1580 // set/get startup mode
mfiore 0:c62615f15125 1581 // COMMAND_MODE (default), starts up ready to accept AT commands
mfiore 0:c62615f15125 1582 // SERIAL_MODE, read serial data and send it as LoRa packets
mfiore 0:c62615f15125 1583 // set function returns MDOT_OK if success
mfiore 0:c62615f15125 1584 int32_t setStartUpMode(const uint8_t& mode);
mfiore 0:c62615f15125 1585 uint8_t getStartUpMode();
mfiore 0:c62615f15125 1586
mfiore 0:c62615f15125 1587 int32_t setRxDataRate(const uint8_t& dr);
mfiore 0:c62615f15125 1588 uint8_t getRxDataRate();
mfiore 0:c62615f15125 1589
mfiore 0:c62615f15125 1590 // get/set TX/RX frequency
mfiore 0:c62615f15125 1591 // if frequency band == FB_868 (Europe), must be between 863000000 - 870000000
mfiore 0:c62615f15125 1592 // if frequency band == FB_915 (United States), must be between 902000000-928000000
mfiore 0:c62615f15125 1593 // if set to 0, device will hop frequencies
mfiore 0:c62615f15125 1594 // set function returns MDOT_OK if success
mfiore 0:c62615f15125 1595 int32_t setTxFrequency(const uint32_t& freq);
mfiore 0:c62615f15125 1596 uint32_t getTxFrequency();
mfiore 0:c62615f15125 1597 int32_t setRxFrequency(const uint32_t& freq);
mfiore 0:c62615f15125 1598 uint32_t getRxFrequency();
mfiore 0:c62615f15125 1599
mfiore 0:c62615f15125 1600 // get/set RX output mode
Jenkins@KEILDM1.dc.multitech.prv 183:f205b2eea7c2 1601 // valid options are HEXADECIMAL, BINARY, and EXTENDED
mfiore 0:c62615f15125 1602 // set function returns MDOT_OK if success
mfiore 0:c62615f15125 1603 int32_t setRxOutput(const uint8_t& mode);
mfiore 0:c62615f15125 1604 uint8_t getRxOutput();
mfiore 0:c62615f15125 1605
mfiore 0:c62615f15125 1606 // get/set serial wake interval
mfiore 0:c62615f15125 1607 // valid values are 2 s - INT_MAX (2147483647) s
mfiore 0:c62615f15125 1608 // set function returns MDOT_OK if success
Mike Fiore 7:683dba5d576f 1609 int32_t setWakeInterval(const uint32_t& interval);
Mike Fiore 7:683dba5d576f 1610 uint32_t getWakeInterval();
mfiore 0:c62615f15125 1611
mfiore 0:c62615f15125 1612 // get/set serial wake delay
mfiore 0:c62615f15125 1613 // valid values are 2 ms - INT_MAX (2147483647) ms
mfiore 0:c62615f15125 1614 // set function returns MDOT_OK if success
Mike Fiore 7:683dba5d576f 1615 int32_t setWakeDelay(const uint32_t& delay);
Mike Fiore 7:683dba5d576f 1616 uint32_t getWakeDelay();
mfiore 0:c62615f15125 1617
mfiore 0:c62615f15125 1618 // get/set serial receive timeout
mfiore 0:c62615f15125 1619 // valid values are 0 ms - 65000 ms
mfiore 0:c62615f15125 1620 // set function returns MDOT_OK if success
Mike Fiore 7:683dba5d576f 1621 int32_t setWakeTimeout(const uint16_t& timeout);
Mike Fiore 7:683dba5d576f 1622 uint16_t getWakeTimeout();
Mike Fiore 7:683dba5d576f 1623
Mike Fiore 7:683dba5d576f 1624 // get/set serial wake mode
Mike Fiore 7:683dba5d576f 1625 // valid values are INTERRUPT or RTC_ALARM
Mike Fiore 7:683dba5d576f 1626 // set function returns MDOT_OK if success
Mike Fiore 7:683dba5d576f 1627 int32_t setWakeMode(const uint8_t& delay);
Mike Fiore 7:683dba5d576f 1628 uint8_t getWakeMode();
Mike Fiore 7:683dba5d576f 1629
Mike Fiore 12:54f9cac9d690 1630 // get/set serial flow control enabled
Mike Fiore 12:54f9cac9d690 1631 // set function returns MDOT_OK if success
Mike Fiore 12:54f9cac9d690 1632 int32_t setFlowControl(const bool& on);
Mike Fiore 12:54f9cac9d690 1633 bool getFlowControl();
Mike Fiore 12:54f9cac9d690 1634
Mike Fiore 12:54f9cac9d690 1635 // get/set serial clear on error
Mike Fiore 12:54f9cac9d690 1636 // if enabled the data read from the serial port will be discarded if it cannot be sent or if the send fails
Mike Fiore 11:d8464345e1f1 1637 // set function returns MDOT_OK if success
Mike Fiore 12:54f9cac9d690 1638 int32_t setSerialClearOnError(const bool& on);
Mike Fiore 12:54f9cac9d690 1639 bool getSerialClearOnError();
mfiore 0:c62615f15125 1640
mfiore 0:c62615f15125 1641 // MTS_RADIO_DEBUG_COMMANDS
Mike Fiore 7:683dba5d576f 1642
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1643 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1644 * Disable Duty cycle
Mike Fiore 16:b630e18103e5 1645 * enables or disables the duty cycle limitations
Mike Fiore 16:b630e18103e5 1646 * **** ONLY TO BE USED FOR TESTINGS PURPOSES ****
Mike Fiore 16:b630e18103e5 1647 * **** ALL DEPLOYABLE CODE MUST ADHERE TO LOCAL REGULATIONS ****
Mike Fiore 16:b630e18103e5 1648 * **** THIS SETTING WILL NOT BE SAVED TO CONFIGURATION *****
Mike Fiore 16:b630e18103e5 1649 * @param val true to disable duty-cycle (default:false)
Mike Fiore 16:b630e18103e5 1650 */
Mike Fiore 16:b630e18103e5 1651 int32_t setDisableDutyCycle(bool val);
Mike Fiore 16:b630e18103e5 1652
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1653 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1654 * Disable Duty cycle
Mike Fiore 16:b630e18103e5 1655 * **** ONLY TO BE USED FOR TESTINGS PURPOSES ****
Mike Fiore 16:b630e18103e5 1656 * **** ALL DEPLOYABLE CODE MUST ADHERE TO LOCAL REGULATIONS ****
Mike Fiore 16:b630e18103e5 1657 * **** THIS SETTING WILL NOT BE SAVED TO CONFIGURATION *****
Mike Fiore 16:b630e18103e5 1658 * @return true if duty-cycle is disabled (default:false)
Mike Fiore 16:b630e18103e5 1659 */
Mike Fiore 16:b630e18103e5 1660 uint8_t getDisableDutyCycle();
Mike Fiore 16:b630e18103e5 1661
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1662 /**
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1663 * LBT RSSI
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1664 * @return the current RSSI on the configured frequency (SetTxFrequency) using configured LBT Time
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1665 */
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1666 int16_t lbtRssi();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1667
Mike Fiore 7:683dba5d576f 1668 void openRxWindow(uint32_t timeout, uint8_t bandwidth = 0);
Mike Fiore 16:b630e18103e5 1669 void closeRxWindow();
Jenkins@KEILDM1.dc.multitech.prv 179:578d8030ba57 1670 void sendContinuous(bool enable=true, uint32_t timeout=0, uint32_t frequency=0, int8_t txpower=-1);
mfiore 0:c62615f15125 1671 int32_t setDeviceId(const std::vector<uint8_t>& id);
Jenkins@KEILDM1.dc.multitech.prv 111:4bebf247fa58 1672 int32_t setProtectedAppEUI(const std::vector<uint8_t>& appEUI);
Jenkins@KEILDM1.dc.multitech.prv 111:4bebf247fa58 1673 int32_t setProtectedAppKey(const std::vector<uint8_t>& appKey);
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1674 int32_t setDefaultFrequencyBand(const uint8_t& band);
mfiore 0:c62615f15125 1675 bool saveProtectedConfig();
Jenkins@KEILDM1.dc.multitech.prv 109:41d16d4ab0f0 1676 // resets the radio/mac/link
mfiore 0:c62615f15125 1677 void resetRadio();
mfiore 0:c62615f15125 1678 int32_t setRadioMode(const uint8_t& mode);
mfiore 0:c62615f15125 1679 std::map<uint8_t, uint8_t> dumpRegisters();
mfiore 0:c62615f15125 1680 void eraseFlash();
mfiore 0:c62615f15125 1681
Mike Fiore 7:683dba5d576f 1682 // deprecated - use setWakeInterval
Mike Fiore 7:683dba5d576f 1683 int32_t setSerialWakeInterval(const uint32_t& interval);
Mike Fiore 7:683dba5d576f 1684 // deprecated - use getWakeInterval
Mike Fiore 7:683dba5d576f 1685 uint32_t getSerialWakeInterval();
Mike Fiore 6:390fc83d588d 1686
Mike Fiore 7:683dba5d576f 1687 // deprecated - use setWakeDelay
Mike Fiore 7:683dba5d576f 1688 int32_t setSerialWakeDelay(const uint32_t& delay);
Mike Fiore 7:683dba5d576f 1689 // deprecated - use setWakeDelay
Mike Fiore 7:683dba5d576f 1690 uint32_t getSerialWakeDelay();
Mike Fiore 7:683dba5d576f 1691
Mike Fiore 7:683dba5d576f 1692 // deprecated - use setWakeTimeout
Mike Fiore 7:683dba5d576f 1693 int32_t setSerialReceiveTimeout(const uint16_t& timeout);
Mike Fiore 7:683dba5d576f 1694 // deprecated - use getWakeTimeout
Mike Fiore 7:683dba5d576f 1695 uint16_t getSerialReceiveTimeout();
mfiore 0:c62615f15125 1696
Mike Fiore 11:d8464345e1f1 1697 void setWakeupCallback(void (*function)(void));
Mike Fiore 11:d8464345e1f1 1698
Mike Fiore 11:d8464345e1f1 1699 template<typename T>
Mike Fiore 11:d8464345e1f1 1700 void setWakeupCallback(T *object, void (T::*member)(void)) {
Mike Fiore 11:d8464345e1f1 1701 _wakeup_callback.attach(object, member);
Mike Fiore 11:d8464345e1f1 1702 }
Jenkins@KEILDM1.dc.multitech.prv 116:bf760c5926cb 1703
Jenkins@KEILDM1.dc.multitech.prv 120:1fbda752c380 1704 lora::ChannelPlan* getChannelPlan(void);
Jenkins@KEILDM1.dc.multitech.prv 144:72731889d6da 1705
Jenkins@KEILDM1.dc.multitech.prv 144:72731889d6da 1706 uint32_t setRx2DataRate(uint8_t dr);
Jenkins@KEILDM1.dc.multitech.prv 148:349066567b8f 1707 uint8_t getRx2DataRate();
Jenkins@KEILDM1.dc.multitech.prv 148:349066567b8f 1708
Jenkins@KEILDM1.dc.multitech.prv 149:724ee1863b4a 1709 void mcGroupKeys(uint8_t *mcKeyEncrypt, uint32_t addr, uint8_t groupId, uint32_t frame_count);
mfiore 0:c62615f15125 1710 private:
Jenkins@KEILDM1.dc.multitech.prv 114:8462870088eb 1711 void sleep_ms(uint32_t interval,
Jenkins@KEILDM1.dc.multitech.prv 114:8462870088eb 1712 uint8_t wakeup_mode = RTC_ALARM,
Jenkins@KEILDM1.dc.multitech.prv 176:e8835022d431 1713 bool deepsleep = true);
Jenkins@KEILDM1.dc.multitech.prv 136:d7d7093d4754 1714
mfiore 0:c62615f15125 1715 mdot_stats _stats;
mfiore 0:c62615f15125 1716
Mike Fiore 11:d8464345e1f1 1717 FunctionPointer _wakeup_callback;
Mike Fiore 11:d8464345e1f1 1718
Mike Fiore 12:54f9cac9d690 1719 bool _standbyFlag;
Mike Fiore 12:54f9cac9d690 1720 bool _testMode;
Mike Fiore 12:54f9cac9d690 1721 uint8_t _savedPort;
Mike Fiore 12:54f9cac9d690 1722 void handleTestModePacket();
Jenkins@KEILDM1.dc.multitech.prv 81:d8f2c4e664f5 1723 lora::ChannelPlan* _plan;
mfiore 0:c62615f15125 1724 };
mfiore 0:c62615f15125 1725
mfiore 0:c62615f15125 1726 #endif