MultiTech / libmDot-Custom

Fork of libmDot-custom by Jason Reiss

Information

Library has been updated to mbed 5.x

The LoRaWAN Certification test mode implementation is built-in to libmDot code. When a start test mode packet is received the library will not return until test mode has ended.

Warning

This library is currently in BETA release. Unresolved issues may be experienced. Software is provided as is with no expectation of support of bug fixes in the future. Please report issues found through the mbed website or directly to support.multitech.com.

Changing of channel plan parameters may cause the device to no longer respect local RF regulations. Please use caution and respect your local regulations.

In AT Command Firmware remove line 803.

CommandTerminal/CommandTerminal.cpp

        delete[] info->RxBuffer;

Likewise, if your application is handling events from the library asynchronously.

Creating new channel plans

Copy EU868 or US915 custom channel plan as a starting point

Import programmDot_AT_firmware_CUSTOM

AT Firmware with custom channel plan support

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

US915 provides a framework for a FIXED channel plan

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

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

Steps

  1. Setup datarates, duty-cycle bands and channels in ChannelPlan_* constructor
  2. Modify GetJoinDatarate and CalculateJoinBackoff to change join datarates and backoff
  3. Customize HandleJoinAccept datarates
  4. Use GetRxWindow(int) to define how the device open Rx window 1 and 2
  5. GetNextChannel will pick a channel from the enabled channel at the current datarate before each TX
Committer:
jreiss
Date:
Wed Jan 18 13:35:33 2017 +0000
Revision:
25:36d92b31ad2b
Add appkey and appeui functions; Add dwelltime and maxeirp getters/setters; KR920: max DR 7; AS923: max tx power 36 and maxeirp 20 defaults

Who changed what in which revision?

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