libmDot 1.0.12-hotfix

Committer:
shaunkrnelson
Date:
Sun Jul 17 00:03:03 2016 +0000
Revision:
0:5f84bdd949b8
1.0.12-hotfix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shaunkrnelson 0:5f84bdd949b8 1 // TODO: add license header
shaunkrnelson 0:5f84bdd949b8 2
shaunkrnelson 0:5f84bdd949b8 3 #ifndef MDOT_H
shaunkrnelson 0:5f84bdd949b8 4 #define MDOT_H
shaunkrnelson 0:5f84bdd949b8 5
shaunkrnelson 0:5f84bdd949b8 6 #include "mbed.h"
shaunkrnelson 0:5f84bdd949b8 7 #include "rtos.h"
shaunkrnelson 0:5f84bdd949b8 8 #include <vector>
shaunkrnelson 0:5f84bdd949b8 9 #include <map>
shaunkrnelson 0:5f84bdd949b8 10 #include <string>
shaunkrnelson 0:5f84bdd949b8 11
shaunkrnelson 0:5f84bdd949b8 12 class mDotEvent;
shaunkrnelson 0:5f84bdd949b8 13 class LoRaMacEvent;
shaunkrnelson 0:5f84bdd949b8 14 class LoRaConfig;
shaunkrnelson 0:5f84bdd949b8 15 class LoRaMac;
shaunkrnelson 0:5f84bdd949b8 16 class MdotRadio;
shaunkrnelson 0:5f84bdd949b8 17
shaunkrnelson 0:5f84bdd949b8 18 class mDot {
shaunkrnelson 0:5f84bdd949b8 19
shaunkrnelson 0:5f84bdd949b8 20 private:
shaunkrnelson 0:5f84bdd949b8 21
shaunkrnelson 0:5f84bdd949b8 22 mDot();
shaunkrnelson 0:5f84bdd949b8 23 ~mDot();
shaunkrnelson 0:5f84bdd949b8 24
shaunkrnelson 0:5f84bdd949b8 25 static void idle(void const* args) {
shaunkrnelson 0:5f84bdd949b8 26 while (1)
shaunkrnelson 0:5f84bdd949b8 27 __WFI();
shaunkrnelson 0:5f84bdd949b8 28 }
shaunkrnelson 0:5f84bdd949b8 29
shaunkrnelson 0:5f84bdd949b8 30 void setLastError(const std::string& str);
shaunkrnelson 0:5f84bdd949b8 31
shaunkrnelson 0:5f84bdd949b8 32 static bool validateBaudRate(const uint32_t& baud);
shaunkrnelson 0:5f84bdd949b8 33 static bool validateFrequencySubBand(const uint8_t& band);
shaunkrnelson 0:5f84bdd949b8 34 bool validateDataRate(const uint8_t& dr);
shaunkrnelson 0:5f84bdd949b8 35
shaunkrnelson 0:5f84bdd949b8 36 int32_t joinBase(const uint32_t& retries);
shaunkrnelson 0:5f84bdd949b8 37 int32_t sendBase(const std::vector<uint8_t>& data, const bool& confirmed = false, const bool& blocking = true, const bool& highBw = false);
shaunkrnelson 0:5f84bdd949b8 38 void waitForPacket();
shaunkrnelson 0:5f84bdd949b8 39 void waitForLinkCheck();
shaunkrnelson 0:5f84bdd949b8 40
shaunkrnelson 0:5f84bdd949b8 41 void setActivityLedState(const uint8_t& state);
shaunkrnelson 0:5f84bdd949b8 42 uint8_t getActivityLedState();
shaunkrnelson 0:5f84bdd949b8 43
shaunkrnelson 0:5f84bdd949b8 44 void blinkActivityLed(void) {
shaunkrnelson 0:5f84bdd949b8 45 if (_activity_led) {
shaunkrnelson 0:5f84bdd949b8 46 int val = _activity_led->read();
shaunkrnelson 0:5f84bdd949b8 47 _activity_led->write(!val);
shaunkrnelson 0:5f84bdd949b8 48 }
shaunkrnelson 0:5f84bdd949b8 49 }
shaunkrnelson 0:5f84bdd949b8 50
shaunkrnelson 0:5f84bdd949b8 51 mDot(const mDot&);
shaunkrnelson 0:5f84bdd949b8 52 mDot& operator=(const mDot&);
shaunkrnelson 0:5f84bdd949b8 53
shaunkrnelson 0:5f84bdd949b8 54 uint32_t RTC_ReadBackupRegister(uint32_t RTC_BKP_DR);
shaunkrnelson 0:5f84bdd949b8 55 void RTC_WriteBackupRegister(uint32_t RTC_BKP_DR, uint32_t Data);
shaunkrnelson 0:5f84bdd949b8 56
shaunkrnelson 0:5f84bdd949b8 57 void wakeup();
shaunkrnelson 0:5f84bdd949b8 58
shaunkrnelson 0:5f84bdd949b8 59 void enterStopMode(const uint32_t& interval, const uint8_t& wakeup_mode = RTC_ALARM);
shaunkrnelson 0:5f84bdd949b8 60 void enterStandbyMode(const uint32_t& interval, const uint8_t& wakeup_mode = RTC_ALARM);
shaunkrnelson 0:5f84bdd949b8 61
shaunkrnelson 0:5f84bdd949b8 62 static mDot* _instance;
shaunkrnelson 0:5f84bdd949b8 63
shaunkrnelson 0:5f84bdd949b8 64 LoRaMac* _mac;
shaunkrnelson 0:5f84bdd949b8 65 MdotRadio* _radio;
shaunkrnelson 0:5f84bdd949b8 66 LoRaMacEvent* _events;
shaunkrnelson 0:5f84bdd949b8 67 LoRaConfig* _config;
shaunkrnelson 0:5f84bdd949b8 68 Thread _idle_thread;
shaunkrnelson 0:5f84bdd949b8 69 std::string _last_error;
shaunkrnelson 0:5f84bdd949b8 70 static const uint32_t _baud_rates[];
shaunkrnelson 0:5f84bdd949b8 71 uint8_t _activity_led_state;
shaunkrnelson 0:5f84bdd949b8 72 Ticker _tick;
shaunkrnelson 0:5f84bdd949b8 73 DigitalOut* _activity_led;
shaunkrnelson 0:5f84bdd949b8 74 bool _activity_led_enable;
shaunkrnelson 0:5f84bdd949b8 75 PinName _activity_led_pin;
shaunkrnelson 0:5f84bdd949b8 76 bool _activity_led_external;
shaunkrnelson 0:5f84bdd949b8 77 uint8_t _linkFailCount;
shaunkrnelson 0:5f84bdd949b8 78 uint8_t _class;
shaunkrnelson 0:5f84bdd949b8 79 InterruptIn* _wakeup;
shaunkrnelson 0:5f84bdd949b8 80 PinName _wakeup_pin;
shaunkrnelson 0:5f84bdd949b8 81
shaunkrnelson 0:5f84bdd949b8 82 typedef enum {
shaunkrnelson 0:5f84bdd949b8 83 OFF,
shaunkrnelson 0:5f84bdd949b8 84 ON,
shaunkrnelson 0:5f84bdd949b8 85 BLINK,
shaunkrnelson 0:5f84bdd949b8 86 } state;
shaunkrnelson 0:5f84bdd949b8 87
shaunkrnelson 0:5f84bdd949b8 88 public:
shaunkrnelson 0:5f84bdd949b8 89
shaunkrnelson 0:5f84bdd949b8 90 typedef enum {
shaunkrnelson 0:5f84bdd949b8 91 FM_APPEND = (1 << 0),
shaunkrnelson 0:5f84bdd949b8 92 FM_TRUNC = (1 << 1),
shaunkrnelson 0:5f84bdd949b8 93 FM_CREAT = (1 << 2),
shaunkrnelson 0:5f84bdd949b8 94 FM_RDONLY = (1 << 3),
shaunkrnelson 0:5f84bdd949b8 95 FM_WRONLY = (1 << 4),
shaunkrnelson 0:5f84bdd949b8 96 FM_RDWR = (FM_RDONLY | FM_WRONLY),
shaunkrnelson 0:5f84bdd949b8 97 FM_DIRECT = (1 << 5)
shaunkrnelson 0:5f84bdd949b8 98 } FileMode;
shaunkrnelson 0:5f84bdd949b8 99
shaunkrnelson 0:5f84bdd949b8 100 typedef enum {
shaunkrnelson 0:5f84bdd949b8 101 MDOT_OK = 0,
shaunkrnelson 0:5f84bdd949b8 102 MDOT_INVALID_PARAM = -1,
shaunkrnelson 0:5f84bdd949b8 103 MDOT_TX_ERROR = -2,
shaunkrnelson 0:5f84bdd949b8 104 MDOT_RX_ERROR = -3,
shaunkrnelson 0:5f84bdd949b8 105 MDOT_JOIN_ERROR = -4,
shaunkrnelson 0:5f84bdd949b8 106 MDOT_TIMEOUT = -5,
shaunkrnelson 0:5f84bdd949b8 107 MDOT_NOT_JOINED = -6,
shaunkrnelson 0:5f84bdd949b8 108 MDOT_ENCRYPTION_DISABLED = -7,
shaunkrnelson 0:5f84bdd949b8 109 MDOT_NO_FREE_CHAN = -8,
shaunkrnelson 0:5f84bdd949b8 110 MDOT_TEST_MODE = -9,
shaunkrnelson 0:5f84bdd949b8 111 MDOT_NO_ENABLED_CHAN = -10,
shaunkrnelson 0:5f84bdd949b8 112 MDOT_AGGREGATED_DUTY_CYCLE = -11,
shaunkrnelson 0:5f84bdd949b8 113 MDOT_ERROR = -1024,
shaunkrnelson 0:5f84bdd949b8 114 } mdot_ret_code;
shaunkrnelson 0:5f84bdd949b8 115
shaunkrnelson 0:5f84bdd949b8 116 enum JoinMode {
shaunkrnelson 0:5f84bdd949b8 117 MANUAL,
shaunkrnelson 0:5f84bdd949b8 118 OTA,
shaunkrnelson 0:5f84bdd949b8 119 AUTO_OTA,
shaunkrnelson 0:5f84bdd949b8 120 PEER_TO_PEER
shaunkrnelson 0:5f84bdd949b8 121 };
shaunkrnelson 0:5f84bdd949b8 122
shaunkrnelson 0:5f84bdd949b8 123 enum Mode {
shaunkrnelson 0:5f84bdd949b8 124 COMMAND_MODE,
shaunkrnelson 0:5f84bdd949b8 125 SERIAL_MODE
shaunkrnelson 0:5f84bdd949b8 126 };
shaunkrnelson 0:5f84bdd949b8 127
shaunkrnelson 0:5f84bdd949b8 128 enum RX_Output {
shaunkrnelson 0:5f84bdd949b8 129 HEXADECIMAL,
shaunkrnelson 0:5f84bdd949b8 130 BINARY
shaunkrnelson 0:5f84bdd949b8 131 };
shaunkrnelson 0:5f84bdd949b8 132
shaunkrnelson 0:5f84bdd949b8 133 enum DataRates {
shaunkrnelson 0:5f84bdd949b8 134 DR0,
shaunkrnelson 0:5f84bdd949b8 135 DR1,
shaunkrnelson 0:5f84bdd949b8 136 DR2,
shaunkrnelson 0:5f84bdd949b8 137 DR3,
shaunkrnelson 0:5f84bdd949b8 138 DR4,
shaunkrnelson 0:5f84bdd949b8 139 DR5,
shaunkrnelson 0:5f84bdd949b8 140 DR6,
shaunkrnelson 0:5f84bdd949b8 141 DR7,
shaunkrnelson 0:5f84bdd949b8 142 DR8,
shaunkrnelson 0:5f84bdd949b8 143 DR9,
shaunkrnelson 0:5f84bdd949b8 144 DR10,
shaunkrnelson 0:5f84bdd949b8 145 DR11,
shaunkrnelson 0:5f84bdd949b8 146 DR12,
shaunkrnelson 0:5f84bdd949b8 147 DR13,
shaunkrnelson 0:5f84bdd949b8 148 DR14,
shaunkrnelson 0:5f84bdd949b8 149 DR15,
shaunkrnelson 0:5f84bdd949b8 150 SF_12 = 16,
shaunkrnelson 0:5f84bdd949b8 151 SF_11,
shaunkrnelson 0:5f84bdd949b8 152 SF_10,
shaunkrnelson 0:5f84bdd949b8 153 SF_9,
shaunkrnelson 0:5f84bdd949b8 154 SF_8,
shaunkrnelson 0:5f84bdd949b8 155 SF_7,
shaunkrnelson 0:5f84bdd949b8 156 SF_7H,
shaunkrnelson 0:5f84bdd949b8 157 SF_FSK
shaunkrnelson 0:5f84bdd949b8 158 };
shaunkrnelson 0:5f84bdd949b8 159
shaunkrnelson 0:5f84bdd949b8 160 enum FrequencyBands {
shaunkrnelson 0:5f84bdd949b8 161 FB_868, // EU868
shaunkrnelson 0:5f84bdd949b8 162 FB_915 // US915
shaunkrnelson 0:5f84bdd949b8 163 };
shaunkrnelson 0:5f84bdd949b8 164
shaunkrnelson 0:5f84bdd949b8 165 enum FrequencySubBands {
shaunkrnelson 0:5f84bdd949b8 166 FSB_ALL,
shaunkrnelson 0:5f84bdd949b8 167 FSB_1,
shaunkrnelson 0:5f84bdd949b8 168 FSB_2,
shaunkrnelson 0:5f84bdd949b8 169 FSB_3,
shaunkrnelson 0:5f84bdd949b8 170 FSB_4,
shaunkrnelson 0:5f84bdd949b8 171 FSB_5,
shaunkrnelson 0:5f84bdd949b8 172 FSB_6,
shaunkrnelson 0:5f84bdd949b8 173 FSB_7,
shaunkrnelson 0:5f84bdd949b8 174 FSB_8
shaunkrnelson 0:5f84bdd949b8 175 };
shaunkrnelson 0:5f84bdd949b8 176
shaunkrnelson 0:5f84bdd949b8 177 enum JoinByteOrder {
shaunkrnelson 0:5f84bdd949b8 178 LSB,
shaunkrnelson 0:5f84bdd949b8 179 MSB
shaunkrnelson 0:5f84bdd949b8 180 };
shaunkrnelson 0:5f84bdd949b8 181
shaunkrnelson 0:5f84bdd949b8 182 enum wakeup_mode {
shaunkrnelson 0:5f84bdd949b8 183 RTC_ALARM,
shaunkrnelson 0:5f84bdd949b8 184 INTERRUPT,
shaunkrnelson 0:5f84bdd949b8 185 RTC_ALARM_OR_INTERRUPT
shaunkrnelson 0:5f84bdd949b8 186 };
shaunkrnelson 0:5f84bdd949b8 187
shaunkrnelson 0:5f84bdd949b8 188 enum UserBackupRegs {
shaunkrnelson 0:5f84bdd949b8 189 UBR0,
shaunkrnelson 0:5f84bdd949b8 190 UBR1,
shaunkrnelson 0:5f84bdd949b8 191 UBR2,
shaunkrnelson 0:5f84bdd949b8 192 UBR3,
shaunkrnelson 0:5f84bdd949b8 193 UBR4,
shaunkrnelson 0:5f84bdd949b8 194 UBR5,
shaunkrnelson 0:5f84bdd949b8 195 UBR6,
shaunkrnelson 0:5f84bdd949b8 196 UBR7,
shaunkrnelson 0:5f84bdd949b8 197 UBR8,
shaunkrnelson 0:5f84bdd949b8 198 UBR9
shaunkrnelson 0:5f84bdd949b8 199 };
shaunkrnelson 0:5f84bdd949b8 200
shaunkrnelson 0:5f84bdd949b8 201 typedef struct {
shaunkrnelson 0:5f84bdd949b8 202 int16_t fd;
shaunkrnelson 0:5f84bdd949b8 203 char name[33];
shaunkrnelson 0:5f84bdd949b8 204 uint32_t size;
shaunkrnelson 0:5f84bdd949b8 205 } mdot_file;
shaunkrnelson 0:5f84bdd949b8 206
shaunkrnelson 0:5f84bdd949b8 207 typedef struct {
shaunkrnelson 0:5f84bdd949b8 208 uint32_t Up;
shaunkrnelson 0:5f84bdd949b8 209 uint32_t Down;
shaunkrnelson 0:5f84bdd949b8 210 uint32_t Joins;
shaunkrnelson 0:5f84bdd949b8 211 uint32_t JoinFails;
shaunkrnelson 0:5f84bdd949b8 212 uint32_t MissedAcks;
shaunkrnelson 0:5f84bdd949b8 213 } mdot_stats;
shaunkrnelson 0:5f84bdd949b8 214
shaunkrnelson 0:5f84bdd949b8 215 typedef struct {
shaunkrnelson 0:5f84bdd949b8 216 int16_t last;
shaunkrnelson 0:5f84bdd949b8 217 int16_t min;
shaunkrnelson 0:5f84bdd949b8 218 int16_t max;
shaunkrnelson 0:5f84bdd949b8 219 int16_t avg;
shaunkrnelson 0:5f84bdd949b8 220 } rssi_stats;
shaunkrnelson 0:5f84bdd949b8 221
shaunkrnelson 0:5f84bdd949b8 222 typedef struct {
shaunkrnelson 0:5f84bdd949b8 223 int16_t last;
shaunkrnelson 0:5f84bdd949b8 224 int16_t min;
shaunkrnelson 0:5f84bdd949b8 225 int16_t max;
shaunkrnelson 0:5f84bdd949b8 226 int16_t avg;
shaunkrnelson 0:5f84bdd949b8 227 } snr_stats;
shaunkrnelson 0:5f84bdd949b8 228
shaunkrnelson 0:5f84bdd949b8 229 typedef struct {
shaunkrnelson 0:5f84bdd949b8 230 bool status;
shaunkrnelson 0:5f84bdd949b8 231 int32_t dBm;
shaunkrnelson 0:5f84bdd949b8 232 uint32_t gateways;
shaunkrnelson 0:5f84bdd949b8 233 std::vector<uint8_t> payload;
shaunkrnelson 0:5f84bdd949b8 234 } link_check;
shaunkrnelson 0:5f84bdd949b8 235
shaunkrnelson 0:5f84bdd949b8 236 typedef struct {
shaunkrnelson 0:5f84bdd949b8 237 int32_t status;
shaunkrnelson 0:5f84bdd949b8 238 int16_t rssi;
shaunkrnelson 0:5f84bdd949b8 239 int16_t snr;
shaunkrnelson 0:5f84bdd949b8 240 } ping_response;
shaunkrnelson 0:5f84bdd949b8 241
shaunkrnelson 0:5f84bdd949b8 242 static const uint8_t MaxLengths_915[];
shaunkrnelson 0:5f84bdd949b8 243 static const uint8_t MaxLengths_868[];
shaunkrnelson 0:5f84bdd949b8 244
shaunkrnelson 0:5f84bdd949b8 245 static std::string JoinModeStr(uint8_t mode);
shaunkrnelson 0:5f84bdd949b8 246 static std::string ModeStr(uint8_t mode);
shaunkrnelson 0:5f84bdd949b8 247 static std::string RxOutputStr(uint8_t format);
shaunkrnelson 0:5f84bdd949b8 248 static std::string DataRateStr(uint8_t rate);
shaunkrnelson 0:5f84bdd949b8 249 static std::string FrequencyBandStr(uint8_t band);
shaunkrnelson 0:5f84bdd949b8 250 static std::string FrequencySubBandStr(uint8_t band);
shaunkrnelson 0:5f84bdd949b8 251
shaunkrnelson 0:5f84bdd949b8 252 uint32_t UserRegisters[10];
shaunkrnelson 0:5f84bdd949b8 253
shaunkrnelson 0:5f84bdd949b8 254 /** Get a handle to the singleton object
shaunkrnelson 0:5f84bdd949b8 255 * @returns pointer to mDot object
shaunkrnelson 0:5f84bdd949b8 256 */
shaunkrnelson 0:5f84bdd949b8 257 static mDot* getInstance();
shaunkrnelson 0:5f84bdd949b8 258
shaunkrnelson 0:5f84bdd949b8 259 void setEvents(mDotEvent* events);
shaunkrnelson 0:5f84bdd949b8 260
shaunkrnelson 0:5f84bdd949b8 261 /** Get library version information
shaunkrnelson 0:5f84bdd949b8 262 * @returns string containing library version information
shaunkrnelson 0:5f84bdd949b8 263 */
shaunkrnelson 0:5f84bdd949b8 264 std::string getId();
shaunkrnelson 0:5f84bdd949b8 265
shaunkrnelson 0:5f84bdd949b8 266 /** Perform a soft reset of the system
shaunkrnelson 0:5f84bdd949b8 267 */
shaunkrnelson 0:5f84bdd949b8 268 void resetCpu();
shaunkrnelson 0:5f84bdd949b8 269
shaunkrnelson 0:5f84bdd949b8 270 /** Reset config to factory default
shaunkrnelson 0:5f84bdd949b8 271 */
shaunkrnelson 0:5f84bdd949b8 272 void resetConfig();
shaunkrnelson 0:5f84bdd949b8 273
shaunkrnelson 0:5f84bdd949b8 274 /** Save config data to non volatile memory
shaunkrnelson 0:5f84bdd949b8 275 * @returns true if success, false if failure
shaunkrnelson 0:5f84bdd949b8 276 */
shaunkrnelson 0:5f84bdd949b8 277 bool saveConfig();
shaunkrnelson 0:5f84bdd949b8 278
shaunkrnelson 0:5f84bdd949b8 279 /** Set the log level for the library
shaunkrnelson 0:5f84bdd949b8 280 * options are:
shaunkrnelson 0:5f84bdd949b8 281 * NONE_LEVEL - logging is off at this level
shaunkrnelson 0:5f84bdd949b8 282 * FATAL_LEVEL - only critical errors will be reported
shaunkrnelson 0:5f84bdd949b8 283 * ERROR_LEVEL
shaunkrnelson 0:5f84bdd949b8 284 * WARNING_LEVEL
shaunkrnelson 0:5f84bdd949b8 285 * INFO_LEVEL
shaunkrnelson 0:5f84bdd949b8 286 * DEBUG_LEVEL
shaunkrnelson 0:5f84bdd949b8 287 * TRACE_LEVEL - every detail will be reported
shaunkrnelson 0:5f84bdd949b8 288 * @param level the level to log at
shaunkrnelson 0:5f84bdd949b8 289 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 290 */
shaunkrnelson 0:5f84bdd949b8 291 int32_t setLogLevel(const uint8_t& level);
shaunkrnelson 0:5f84bdd949b8 292
shaunkrnelson 0:5f84bdd949b8 293 /** Get the current log level for the library
shaunkrnelson 0:5f84bdd949b8 294 * @returns current log level
shaunkrnelson 0:5f84bdd949b8 295 */
shaunkrnelson 0:5f84bdd949b8 296 uint8_t getLogLevel();
shaunkrnelson 0:5f84bdd949b8 297
shaunkrnelson 0:5f84bdd949b8 298 /** Seed pseudo RNG in LoRaMac layer, uses random value from radio RSSI reading by default
shaunkrnelson 0:5f84bdd949b8 299 * @param seed for RNG
shaunkrnelson 0:5f84bdd949b8 300 */
shaunkrnelson 0:5f84bdd949b8 301 void seedRandom(uint32_t seed);
shaunkrnelson 0:5f84bdd949b8 302
shaunkrnelson 0:5f84bdd949b8 303 /** Enable or disable the activity LED.
shaunkrnelson 0:5f84bdd949b8 304 * @param enable true to enable the LED, false to disable
shaunkrnelson 0:5f84bdd949b8 305 */
shaunkrnelson 0:5f84bdd949b8 306 void setActivityLedEnable(const bool& enable);
shaunkrnelson 0:5f84bdd949b8 307
shaunkrnelson 0:5f84bdd949b8 308 /** Find out if the activity LED is enabled
shaunkrnelson 0:5f84bdd949b8 309 * @returns true if activity LED is enabled, false if disabled
shaunkrnelson 0:5f84bdd949b8 310 */
shaunkrnelson 0:5f84bdd949b8 311 bool getActivityLedEnable();
shaunkrnelson 0:5f84bdd949b8 312
shaunkrnelson 0:5f84bdd949b8 313 /** Use a different pin for the activity LED.
shaunkrnelson 0:5f84bdd949b8 314 * The default is XBEE_RSSI.
shaunkrnelson 0:5f84bdd949b8 315 * @param pin the new pin to use
shaunkrnelson 0:5f84bdd949b8 316 */
shaunkrnelson 0:5f84bdd949b8 317 void setActivityLedPin(const PinName& pin);
shaunkrnelson 0:5f84bdd949b8 318
shaunkrnelson 0:5f84bdd949b8 319 /** Use an external DigitalOut object for the activity LED.
shaunkrnelson 0:5f84bdd949b8 320 * The pointer must stay valid!
shaunkrnelson 0:5f84bdd949b8 321 * @param pin the DigitalOut object to use
shaunkrnelson 0:5f84bdd949b8 322 */
shaunkrnelson 0:5f84bdd949b8 323 void setActivityLedPin(DigitalOut* pin);
shaunkrnelson 0:5f84bdd949b8 324
shaunkrnelson 0:5f84bdd949b8 325 /** Find out what pin the activity LED is on
shaunkrnelson 0:5f84bdd949b8 326 * @returns the pin the activity LED is using
shaunkrnelson 0:5f84bdd949b8 327 */
shaunkrnelson 0:5f84bdd949b8 328 PinName getActivityLedPin();
shaunkrnelson 0:5f84bdd949b8 329
shaunkrnelson 0:5f84bdd949b8 330 /** Returns boolean indicative of start-up from standby mode
shaunkrnelson 0:5f84bdd949b8 331 * @returns true if dot woke from standby
shaunkrnelson 0:5f84bdd949b8 332 */
shaunkrnelson 0:5f84bdd949b8 333 bool getStandbyFlag();
shaunkrnelson 0:5f84bdd949b8 334
shaunkrnelson 0:5f84bdd949b8 335 /** Add a channel frequencies currently in use
shaunkrnelson 0:5f84bdd949b8 336 * @returns MDOT_OK
shaunkrnelson 0:5f84bdd949b8 337 */
shaunkrnelson 0:5f84bdd949b8 338 int32_t addChannel(uint8_t index, uint32_t frequency, uint8_t datarateRange);
shaunkrnelson 0:5f84bdd949b8 339
shaunkrnelson 0:5f84bdd949b8 340 /** Get list of channel frequencies currently in use
shaunkrnelson 0:5f84bdd949b8 341 * @returns vector of channels currently in use
shaunkrnelson 0:5f84bdd949b8 342 */
shaunkrnelson 0:5f84bdd949b8 343 std::vector<uint32_t> getChannels();
shaunkrnelson 0:5f84bdd949b8 344
shaunkrnelson 0:5f84bdd949b8 345 /** Get list of channel datarate ranges currently in use
shaunkrnelson 0:5f84bdd949b8 346 * @returns vector of datarate ranges currently in use
shaunkrnelson 0:5f84bdd949b8 347 */
shaunkrnelson 0:5f84bdd949b8 348 std::vector<uint8_t> getChannelRanges();
shaunkrnelson 0:5f84bdd949b8 349
shaunkrnelson 0:5f84bdd949b8 350 /** Get list of channel frequencies in config file to be used as session defaults
shaunkrnelson 0:5f84bdd949b8 351 * @returns vector of channels in config file
shaunkrnelson 0:5f84bdd949b8 352 */
shaunkrnelson 0:5f84bdd949b8 353 std::vector<uint32_t> getConfigChannels();
shaunkrnelson 0:5f84bdd949b8 354
shaunkrnelson 0:5f84bdd949b8 355 /** Get list of channel datarate ranges in config file to be used as session defaults
shaunkrnelson 0:5f84bdd949b8 356 * @returns vector of datarate ranges in config file
shaunkrnelson 0:5f84bdd949b8 357 */
shaunkrnelson 0:5f84bdd949b8 358 std::vector<uint8_t> getConfigChannelRanges();
shaunkrnelson 0:5f84bdd949b8 359
shaunkrnelson 0:5f84bdd949b8 360 /** Get frequency band
shaunkrnelson 0:5f84bdd949b8 361 * @returns FB_915 if configured for United States, FB_868 if configured for Europe
shaunkrnelson 0:5f84bdd949b8 362 */
shaunkrnelson 0:5f84bdd949b8 363 uint8_t getFrequencyBand();
shaunkrnelson 0:5f84bdd949b8 364
shaunkrnelson 0:5f84bdd949b8 365 /** Set frequency sub band
shaunkrnelson 0:5f84bdd949b8 366 * only applicable if frequency band is set for United States (FB_915)
shaunkrnelson 0:5f84bdd949b8 367 * sub band 0 will allow the radio to use all 64 channels
shaunkrnelson 0:5f84bdd949b8 368 * sub band 1 - 8 will allow the radio to use the 8 channels in that sub band
shaunkrnelson 0:5f84bdd949b8 369 * for use with Conduit gateway and MTAC_LORA, use sub bands 1 - 8, not sub band 0
shaunkrnelson 0:5f84bdd949b8 370 * @param band the sub band to use (0 - 8)
shaunkrnelson 0:5f84bdd949b8 371 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 372 */
shaunkrnelson 0:5f84bdd949b8 373 int32_t setFrequencySubBand(const uint8_t& band);
shaunkrnelson 0:5f84bdd949b8 374
shaunkrnelson 0:5f84bdd949b8 375 /** Get frequency sub band
shaunkrnelson 0:5f84bdd949b8 376 * @returns frequency sub band currently in use
shaunkrnelson 0:5f84bdd949b8 377 */
shaunkrnelson 0:5f84bdd949b8 378 uint8_t getFrequencySubBand();
shaunkrnelson 0:5f84bdd949b8 379
shaunkrnelson 0:5f84bdd949b8 380 /** Get the datarate currently in use within the MAC layer
shaunkrnelson 0:5f84bdd949b8 381 * returns 0-15
shaunkrnelson 0:5f84bdd949b8 382 */
shaunkrnelson 0:5f84bdd949b8 383 uint8_t getSessionDataRate();
shaunkrnelson 0:5f84bdd949b8 384
shaunkrnelson 0:5f84bdd949b8 385 /** Enable/disable public network mode
shaunkrnelson 0:5f84bdd949b8 386 * JoinDelay will be set to (public: 5s, private: 1s) and
shaunkrnelson 0:5f84bdd949b8 387 * RxDelay will be set to 1s both can be adjusted afterwards
shaunkrnelson 0:5f84bdd949b8 388 * @param on should be true to enable public network mode
shaunkrnelson 0:5f84bdd949b8 389 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 390 */
shaunkrnelson 0:5f84bdd949b8 391 int32_t setPublicNetwork(const bool& on);
shaunkrnelson 0:5f84bdd949b8 392
shaunkrnelson 0:5f84bdd949b8 393 /** Get public network mode
shaunkrnelson 0:5f84bdd949b8 394 * @returns true if public network mode is enabled
shaunkrnelson 0:5f84bdd949b8 395 */
shaunkrnelson 0:5f84bdd949b8 396 bool getPublicNetwork();
shaunkrnelson 0:5f84bdd949b8 397
shaunkrnelson 0:5f84bdd949b8 398 /** Get the device ID
shaunkrnelson 0:5f84bdd949b8 399 * @returns vector containing the device ID (size 8)
shaunkrnelson 0:5f84bdd949b8 400 */
shaunkrnelson 0:5f84bdd949b8 401 std::vector<uint8_t> getDeviceId();
shaunkrnelson 0:5f84bdd949b8 402
shaunkrnelson 0:5f84bdd949b8 403 /** Get the device port to be used for lora application data (1-223)
shaunkrnelson 0:5f84bdd949b8 404 * @returns port
shaunkrnelson 0:5f84bdd949b8 405 */
shaunkrnelson 0:5f84bdd949b8 406 uint8_t getAppPort();
shaunkrnelson 0:5f84bdd949b8 407
shaunkrnelson 0:5f84bdd949b8 408 /** Set the device port to be used for lora application data (1-223)
shaunkrnelson 0:5f84bdd949b8 409 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 410 */
shaunkrnelson 0:5f84bdd949b8 411 int32_t setAppPort(uint8_t port);
shaunkrnelson 0:5f84bdd949b8 412
shaunkrnelson 0:5f84bdd949b8 413 /** Set the device class A, B or C
shaunkrnelson 0:5f84bdd949b8 414 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 415 */
shaunkrnelson 0:5f84bdd949b8 416 int32_t setClass(std::string newClass);
shaunkrnelson 0:5f84bdd949b8 417
shaunkrnelson 0:5f84bdd949b8 418 /** Get the device class A, B or C
shaunkrnelson 0:5f84bdd949b8 419 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 420 */
shaunkrnelson 0:5f84bdd949b8 421 std::string getClass();
shaunkrnelson 0:5f84bdd949b8 422
shaunkrnelson 0:5f84bdd949b8 423 /** Get the max packet length with current settings
shaunkrnelson 0:5f84bdd949b8 424 * @returns max packet length
shaunkrnelson 0:5f84bdd949b8 425 */
shaunkrnelson 0:5f84bdd949b8 426 uint8_t getMaxPacketLength();
shaunkrnelson 0:5f84bdd949b8 427
shaunkrnelson 0:5f84bdd949b8 428 /** Set network address
shaunkrnelson 0:5f84bdd949b8 429 * for use with MANUAL network join mode, will be assigned in OTA & AUTO_OTA modes
shaunkrnelson 0:5f84bdd949b8 430 * @param addr a vector of 4 bytes
shaunkrnelson 0:5f84bdd949b8 431 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 432 */
shaunkrnelson 0:5f84bdd949b8 433 int32_t setNetworkAddress(const std::vector<uint8_t>& addr);
shaunkrnelson 0:5f84bdd949b8 434
shaunkrnelson 0:5f84bdd949b8 435 /** Get network address
shaunkrnelson 0:5f84bdd949b8 436 * @returns vector containing network address (size 4)
shaunkrnelson 0:5f84bdd949b8 437 */
shaunkrnelson 0:5f84bdd949b8 438 std::vector<uint8_t> getNetworkAddress();
shaunkrnelson 0:5f84bdd949b8 439
shaunkrnelson 0:5f84bdd949b8 440 /** Set network session key
shaunkrnelson 0:5f84bdd949b8 441 * for use with MANUAL network join mode, will be assigned in OTA & AUTO_OTA modes
shaunkrnelson 0:5f84bdd949b8 442 * @param key a vector of 16 bytes
shaunkrnelson 0:5f84bdd949b8 443 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 444 */
shaunkrnelson 0:5f84bdd949b8 445 int32_t setNetworkSessionKey(const std::vector<uint8_t>& key);
shaunkrnelson 0:5f84bdd949b8 446
shaunkrnelson 0:5f84bdd949b8 447 /** Get network session key
shaunkrnelson 0:5f84bdd949b8 448 * @returns vector containing network session key (size 16)
shaunkrnelson 0:5f84bdd949b8 449 */
shaunkrnelson 0:5f84bdd949b8 450 std::vector<uint8_t> getNetworkSessionKey();
shaunkrnelson 0:5f84bdd949b8 451
shaunkrnelson 0:5f84bdd949b8 452 /** Set data session key
shaunkrnelson 0:5f84bdd949b8 453 * for use with MANUAL network join mode, will be assigned in OTA & AUTO_OTA modes
shaunkrnelson 0:5f84bdd949b8 454 * @param key a vector of 16 bytes
shaunkrnelson 0:5f84bdd949b8 455 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 456 */
shaunkrnelson 0:5f84bdd949b8 457 int32_t setDataSessionKey(const std::vector<uint8_t>& key);
shaunkrnelson 0:5f84bdd949b8 458
shaunkrnelson 0:5f84bdd949b8 459 /** Get data session key
shaunkrnelson 0:5f84bdd949b8 460 * @returns vector containing data session key (size 16)
shaunkrnelson 0:5f84bdd949b8 461 */
shaunkrnelson 0:5f84bdd949b8 462 std::vector<uint8_t> getDataSessionKey();
shaunkrnelson 0:5f84bdd949b8 463
shaunkrnelson 0:5f84bdd949b8 464 /** Set network name
shaunkrnelson 0:5f84bdd949b8 465 * for use with OTA & AUTO_OTA network join modes
shaunkrnelson 0:5f84bdd949b8 466 * generates network ID (crc64 of name) automatically
shaunkrnelson 0:5f84bdd949b8 467 * @param name a string of of at least 8 bytes and no more than 128 bytes
shaunkrnelson 0:5f84bdd949b8 468 * @return MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 469 */
shaunkrnelson 0:5f84bdd949b8 470 int32_t setNetworkName(const std::string& name);
shaunkrnelson 0:5f84bdd949b8 471
shaunkrnelson 0:5f84bdd949b8 472 /** Get network name
shaunkrnelson 0:5f84bdd949b8 473 * @return string containing network name (size 8 to 128)
shaunkrnelson 0:5f84bdd949b8 474 */
shaunkrnelson 0:5f84bdd949b8 475 std::string getNetworkName();
shaunkrnelson 0:5f84bdd949b8 476
shaunkrnelson 0:5f84bdd949b8 477 /** Set network ID
shaunkrnelson 0:5f84bdd949b8 478 * for use with OTA & AUTO_OTA network join modes
shaunkrnelson 0:5f84bdd949b8 479 * setting network ID via this function sets network name to empty
shaunkrnelson 0:5f84bdd949b8 480 * @param id a vector of 8 bytes
shaunkrnelson 0:5f84bdd949b8 481 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 482 */
shaunkrnelson 0:5f84bdd949b8 483 int32_t setNetworkId(const std::vector<uint8_t>& id);
shaunkrnelson 0:5f84bdd949b8 484
shaunkrnelson 0:5f84bdd949b8 485 /** Get network ID
shaunkrnelson 0:5f84bdd949b8 486 * @returns vector containing network ID (size 8)
shaunkrnelson 0:5f84bdd949b8 487 */
shaunkrnelson 0:5f84bdd949b8 488 std::vector<uint8_t> getNetworkId();
shaunkrnelson 0:5f84bdd949b8 489
shaunkrnelson 0:5f84bdd949b8 490 /** Set network passphrase
shaunkrnelson 0:5f84bdd949b8 491 * for use with OTA & AUTO_OTA network join modes
shaunkrnelson 0:5f84bdd949b8 492 * generates network key (cmac of passphrase) automatically
shaunkrnelson 0:5f84bdd949b8 493 * @param name a string of of at least 8 bytes and no more than 128 bytes
shaunkrnelson 0:5f84bdd949b8 494 * @return MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 495 */
shaunkrnelson 0:5f84bdd949b8 496 int32_t setNetworkPassphrase(const std::string& passphrase);
shaunkrnelson 0:5f84bdd949b8 497
shaunkrnelson 0:5f84bdd949b8 498 /** Get network passphrase
shaunkrnelson 0:5f84bdd949b8 499 * @return string containing network passphrase (size 8 to 128)
shaunkrnelson 0:5f84bdd949b8 500 */
shaunkrnelson 0:5f84bdd949b8 501 std::string getNetworkPassphrase();
shaunkrnelson 0:5f84bdd949b8 502
shaunkrnelson 0:5f84bdd949b8 503 /** Set network key
shaunkrnelson 0:5f84bdd949b8 504 * for use with OTA & AUTO_OTA network join modes
shaunkrnelson 0:5f84bdd949b8 505 * setting network key via this function sets network passphrase to empty
shaunkrnelson 0:5f84bdd949b8 506 * @param id a vector of 16 bytes
shaunkrnelson 0:5f84bdd949b8 507 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 508 */
shaunkrnelson 0:5f84bdd949b8 509 int32_t setNetworkKey(const std::vector<uint8_t>& id);
shaunkrnelson 0:5f84bdd949b8 510
shaunkrnelson 0:5f84bdd949b8 511 /** Get network key
shaunkrnelson 0:5f84bdd949b8 512 * @returns a vector containing network key (size 16)
shaunkrnelson 0:5f84bdd949b8 513 */
shaunkrnelson 0:5f84bdd949b8 514 std::vector<uint8_t> getNetworkKey();
shaunkrnelson 0:5f84bdd949b8 515
shaunkrnelson 0:5f84bdd949b8 516 /** Set join byte order
shaunkrnelson 0:5f84bdd949b8 517 * @param order 0:LSB 1:MSB
shaunkrnelson 0:5f84bdd949b8 518 */
shaunkrnelson 0:5f84bdd949b8 519 uint32_t setJoinByteOrder(uint8_t order);
shaunkrnelson 0:5f84bdd949b8 520
shaunkrnelson 0:5f84bdd949b8 521 /** Get join byte order
shaunkrnelson 0:5f84bdd949b8 522 * @returns byte order to use in joins 0:LSB 1:MSB
shaunkrnelson 0:5f84bdd949b8 523 */
shaunkrnelson 0:5f84bdd949b8 524 uint8_t getJoinByteOrder();
shaunkrnelson 0:5f84bdd949b8 525
shaunkrnelson 0:5f84bdd949b8 526 /** Attempt to join network
shaunkrnelson 0:5f84bdd949b8 527 * each attempt will be made with a random datarate up to the configured datarate
shaunkrnelson 0:5f84bdd949b8 528 * JoinRequest backoff between tries is enforced to 1% for 1st hour, 0.1% for 1-10 hours and 0.01% after 10 hours
shaunkrnelson 0:5f84bdd949b8 529 * Check getNextTxMs() for time until next join attempt can be made
shaunkrnelson 0:5f84bdd949b8 530 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 531 */
shaunkrnelson 0:5f84bdd949b8 532 int32_t joinNetwork();
shaunkrnelson 0:5f84bdd949b8 533
shaunkrnelson 0:5f84bdd949b8 534 /** Attempts to join network once
shaunkrnelson 0:5f84bdd949b8 535 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 536 */
shaunkrnelson 0:5f84bdd949b8 537 int32_t joinNetworkOnce();
shaunkrnelson 0:5f84bdd949b8 538
shaunkrnelson 0:5f84bdd949b8 539 /** Resets current network session, essentially disconnecting from the network
shaunkrnelson 0:5f84bdd949b8 540 * has no effect for MANUAL network join mode
shaunkrnelson 0:5f84bdd949b8 541 */
shaunkrnelson 0:5f84bdd949b8 542 void resetNetworkSession();
shaunkrnelson 0:5f84bdd949b8 543
shaunkrnelson 0:5f84bdd949b8 544 /** Restore saved network session from flash
shaunkrnelson 0:5f84bdd949b8 545 * has no effect for MANUAL network join mode
shaunkrnelson 0:5f84bdd949b8 546 */
shaunkrnelson 0:5f84bdd949b8 547 void restoreNetworkSession();
shaunkrnelson 0:5f84bdd949b8 548
shaunkrnelson 0:5f84bdd949b8 549 /** Save current network session to flash
shaunkrnelson 0:5f84bdd949b8 550 * has no effect for MANUAL network join mode
shaunkrnelson 0:5f84bdd949b8 551 */
shaunkrnelson 0:5f84bdd949b8 552 void saveNetworkSession();
shaunkrnelson 0:5f84bdd949b8 553
shaunkrnelson 0:5f84bdd949b8 554 /** Set number of times joining will retry before giving up
shaunkrnelson 0:5f84bdd949b8 555 * @param retries must be between 0 - 255
shaunkrnelson 0:5f84bdd949b8 556 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 557 */
shaunkrnelson 0:5f84bdd949b8 558 int32_t setJoinRetries(const uint8_t& retries);
shaunkrnelson 0:5f84bdd949b8 559
shaunkrnelson 0:5f84bdd949b8 560 /** Set number of times joining will retry before giving up
shaunkrnelson 0:5f84bdd949b8 561 * @returns join retries (0 - 255)
shaunkrnelson 0:5f84bdd949b8 562 */
shaunkrnelson 0:5f84bdd949b8 563 uint8_t getJoinRetries();
shaunkrnelson 0:5f84bdd949b8 564
shaunkrnelson 0:5f84bdd949b8 565 /** Set network join mode
shaunkrnelson 0:5f84bdd949b8 566 * MANUAL: set network address and session keys manually
shaunkrnelson 0:5f84bdd949b8 567 * OTA: User sets network name and passphrase, then attempts to join
shaunkrnelson 0:5f84bdd949b8 568 * AUTO_OTA: same as OTA, but network sessions can be saved and restored
shaunkrnelson 0:5f84bdd949b8 569 * @param mode MANUAL, OTA, or AUTO_OTA
shaunkrnelson 0:5f84bdd949b8 570 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 571 */
shaunkrnelson 0:5f84bdd949b8 572 int32_t setJoinMode(const uint8_t& mode);
shaunkrnelson 0:5f84bdd949b8 573
shaunkrnelson 0:5f84bdd949b8 574 /** Get network join mode
shaunkrnelson 0:5f84bdd949b8 575 * @returns MANUAL, OTA, or AUTO_OTA
shaunkrnelson 0:5f84bdd949b8 576 */
shaunkrnelson 0:5f84bdd949b8 577 uint8_t getJoinMode();
shaunkrnelson 0:5f84bdd949b8 578
shaunkrnelson 0:5f84bdd949b8 579 /** Get network join status
shaunkrnelson 0:5f84bdd949b8 580 * @returns true if currently joined to network
shaunkrnelson 0:5f84bdd949b8 581 */
shaunkrnelson 0:5f84bdd949b8 582 bool getNetworkJoinStatus();
shaunkrnelson 0:5f84bdd949b8 583
shaunkrnelson 0:5f84bdd949b8 584 /** Do a network link check
shaunkrnelson 0:5f84bdd949b8 585 * application data may be returned in response to a network link check command
shaunkrnelson 0:5f84bdd949b8 586 * @returns link_check structure containing success, dBm above noise floor, gateways in range, and packet payload
shaunkrnelson 0:5f84bdd949b8 587 */
shaunkrnelson 0:5f84bdd949b8 588 link_check networkLinkCheck();
shaunkrnelson 0:5f84bdd949b8 589
shaunkrnelson 0:5f84bdd949b8 590 /** Set network link check count to perform automatic link checks every count packets
shaunkrnelson 0:5f84bdd949b8 591 * only applicable if ACKs are disabled
shaunkrnelson 0:5f84bdd949b8 592 * @param count must be between 0 - 255
shaunkrnelson 0:5f84bdd949b8 593 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 594 */
shaunkrnelson 0:5f84bdd949b8 595 int32_t setLinkCheckCount(const uint8_t& count);
shaunkrnelson 0:5f84bdd949b8 596
shaunkrnelson 0:5f84bdd949b8 597 /** Get network link check count
shaunkrnelson 0:5f84bdd949b8 598 * @returns count (0 - 255)
shaunkrnelson 0:5f84bdd949b8 599 */
shaunkrnelson 0:5f84bdd949b8 600 uint8_t getLinkCheckCount();
shaunkrnelson 0:5f84bdd949b8 601
shaunkrnelson 0:5f84bdd949b8 602 /** Set network link check threshold, number of link check failures or missed acks to tolerate
shaunkrnelson 0:5f84bdd949b8 603 * before considering network connection lost
shaunkrnelson 0:5f84bdd949b8 604 * @pararm count must be between 0 - 255
shaunkrnelson 0:5f84bdd949b8 605 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 606 */
shaunkrnelson 0:5f84bdd949b8 607 int32_t setLinkCheckThreshold(const uint8_t& count);
shaunkrnelson 0:5f84bdd949b8 608
shaunkrnelson 0:5f84bdd949b8 609 /** Get network link check threshold
shaunkrnelson 0:5f84bdd949b8 610 * @returns threshold (0 - 255)
shaunkrnelson 0:5f84bdd949b8 611 */
shaunkrnelson 0:5f84bdd949b8 612 uint8_t getLinkCheckThreshold();
shaunkrnelson 0:5f84bdd949b8 613
shaunkrnelson 0:5f84bdd949b8 614 /** Get/set number of failed link checks in the current session
shaunkrnelson 0:5f84bdd949b8 615 * @returns count (0 - 255)
shaunkrnelson 0:5f84bdd949b8 616 */
shaunkrnelson 0:5f84bdd949b8 617 uint8_t getLinkFailCount();
shaunkrnelson 0:5f84bdd949b8 618 int32_t setLinkFailCount(uint8_t count);
shaunkrnelson 0:5f84bdd949b8 619
shaunkrnelson 0:5f84bdd949b8 620 /** Set UpLinkCounter number of packets sent to the gateway during this network session (sequence number)
shaunkrnelson 0:5f84bdd949b8 621 * @returns MDOT_OK
shaunkrnelson 0:5f84bdd949b8 622 */
shaunkrnelson 0:5f84bdd949b8 623 int32_t setUpLinkCounter(uint32_t count);
shaunkrnelson 0:5f84bdd949b8 624
shaunkrnelson 0:5f84bdd949b8 625 /** Get UpLinkCounter
shaunkrnelson 0:5f84bdd949b8 626 * @returns number of packets sent to the gateway during this network session (sequence number)
shaunkrnelson 0:5f84bdd949b8 627 */
shaunkrnelson 0:5f84bdd949b8 628 uint32_t getUpLinkCounter();
shaunkrnelson 0:5f84bdd949b8 629
shaunkrnelson 0:5f84bdd949b8 630 /** Set UpLinkCounter number of packets sent by the gateway during this network session (sequence number)
shaunkrnelson 0:5f84bdd949b8 631 * @returns MDOT_OK
shaunkrnelson 0:5f84bdd949b8 632 */
shaunkrnelson 0:5f84bdd949b8 633 int32_t setDownLinkCounter(uint32_t count);
shaunkrnelson 0:5f84bdd949b8 634
shaunkrnelson 0:5f84bdd949b8 635 /** Get DownLinkCounter
shaunkrnelson 0:5f84bdd949b8 636 * @returns number of packets sent by the gateway during this network session (sequence number)
shaunkrnelson 0:5f84bdd949b8 637 */
shaunkrnelson 0:5f84bdd949b8 638 uint32_t getDownLinkCounter();
shaunkrnelson 0:5f84bdd949b8 639
shaunkrnelson 0:5f84bdd949b8 640 /** Enable/disable AES encryption
shaunkrnelson 0:5f84bdd949b8 641 * AES encryption must be enabled for use with Conduit gateway and MTAC_LORA card
shaunkrnelson 0:5f84bdd949b8 642 * @param on true for AES encryption to be enabled
shaunkrnelson 0:5f84bdd949b8 643 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 644 */
shaunkrnelson 0:5f84bdd949b8 645 int32_t setAesEncryption(const bool& on);
shaunkrnelson 0:5f84bdd949b8 646
shaunkrnelson 0:5f84bdd949b8 647 /** Get AES encryption
shaunkrnelson 0:5f84bdd949b8 648 * @returns true if AES encryption is enabled
shaunkrnelson 0:5f84bdd949b8 649 */
shaunkrnelson 0:5f84bdd949b8 650 bool getAesEncryption();
shaunkrnelson 0:5f84bdd949b8 651
shaunkrnelson 0:5f84bdd949b8 652 /** Get RSSI stats
shaunkrnelson 0:5f84bdd949b8 653 * @returns rssi_stats struct containing last, min, max, and avg RSSI in dB
shaunkrnelson 0:5f84bdd949b8 654 */
shaunkrnelson 0:5f84bdd949b8 655 rssi_stats getRssiStats();
shaunkrnelson 0:5f84bdd949b8 656
shaunkrnelson 0:5f84bdd949b8 657 /** Get SNR stats
shaunkrnelson 0:5f84bdd949b8 658 * @returns snr_stats struct containing last, min, max, and avg SNR in cB
shaunkrnelson 0:5f84bdd949b8 659 */
shaunkrnelson 0:5f84bdd949b8 660 snr_stats getSnrStats();
shaunkrnelson 0:5f84bdd949b8 661
shaunkrnelson 0:5f84bdd949b8 662 /** Get ms until next free channel
shaunkrnelson 0:5f84bdd949b8 663 * only applicable for European models, US models return 0
shaunkrnelson 0:5f84bdd949b8 664 * @returns time (ms) until a channel is free to use for transmitting
shaunkrnelson 0:5f84bdd949b8 665 */
shaunkrnelson 0:5f84bdd949b8 666 uint32_t getNextTxMs();
shaunkrnelson 0:5f84bdd949b8 667
shaunkrnelson 0:5f84bdd949b8 668 /** Get join delay in seconds
shaunkrnelson 0:5f84bdd949b8 669 * Public network defaults to 5 seconds
shaunkrnelson 0:5f84bdd949b8 670 * Private network defaults to 1 second
shaunkrnelson 0:5f84bdd949b8 671 * @returns number of seconds before join accept message is expected
shaunkrnelson 0:5f84bdd949b8 672 */
shaunkrnelson 0:5f84bdd949b8 673 uint8_t getJoinDelay();
shaunkrnelson 0:5f84bdd949b8 674
shaunkrnelson 0:5f84bdd949b8 675 /** Set join delay in seconds
shaunkrnelson 0:5f84bdd949b8 676 * Public network defaults to 5 seconds
shaunkrnelson 0:5f84bdd949b8 677 * Private network defaults to 1 second
shaunkrnelson 0:5f84bdd949b8 678 * @param delay number of seconds before join accept message is expected
shaunkrnelson 0:5f84bdd949b8 679 * @return MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 680 */
shaunkrnelson 0:5f84bdd949b8 681 uint32_t setJoinDelay(uint8_t delay);
shaunkrnelson 0:5f84bdd949b8 682
shaunkrnelson 0:5f84bdd949b8 683 /** Get rx delay in seconds
shaunkrnelson 0:5f84bdd949b8 684 * Defaults to 1 second
shaunkrnelson 0:5f84bdd949b8 685 * @returns number of seconds before response message is expected
shaunkrnelson 0:5f84bdd949b8 686 */
shaunkrnelson 0:5f84bdd949b8 687 uint8_t getRxDelay();
shaunkrnelson 0:5f84bdd949b8 688
shaunkrnelson 0:5f84bdd949b8 689 /** Set rx delay in seconds
shaunkrnelson 0:5f84bdd949b8 690 * Defaults to 1 second
shaunkrnelson 0:5f84bdd949b8 691 * @param delay number of seconds before response message is expected
shaunkrnelson 0:5f84bdd949b8 692 * @return MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 693 */
shaunkrnelson 0:5f84bdd949b8 694 uint32_t setRxDelay(uint8_t delay);
shaunkrnelson 0:5f84bdd949b8 695
shaunkrnelson 0:5f84bdd949b8 696 /** Get preserve session to save network session info through reset or power down in AUTO_OTA mode
shaunkrnelson 0:5f84bdd949b8 697 * Defaults to off
shaunkrnelson 0:5f84bdd949b8 698 * @returns true if enabled
shaunkrnelson 0:5f84bdd949b8 699 */
shaunkrnelson 0:5f84bdd949b8 700 bool getPreserveSession();
shaunkrnelson 0:5f84bdd949b8 701
shaunkrnelson 0:5f84bdd949b8 702 /** Set preserve session to save network session info through reset or power down in AUTO_OTA mode
shaunkrnelson 0:5f84bdd949b8 703 * Defaults to off
shaunkrnelson 0:5f84bdd949b8 704 * @param enable
shaunkrnelson 0:5f84bdd949b8 705 * @return MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 706 */
shaunkrnelson 0:5f84bdd949b8 707 uint32_t setPreserveSession(bool enable);
shaunkrnelson 0:5f84bdd949b8 708
shaunkrnelson 0:5f84bdd949b8 709 /** Get data pending
shaunkrnelson 0:5f84bdd949b8 710 * only valid after sending data to the gateway
shaunkrnelson 0:5f84bdd949b8 711 * @returns true if server has available packet(s)
shaunkrnelson 0:5f84bdd949b8 712 */
shaunkrnelson 0:5f84bdd949b8 713 bool getDataPending();
shaunkrnelson 0:5f84bdd949b8 714
shaunkrnelson 0:5f84bdd949b8 715 /** Get transmitting
shaunkrnelson 0:5f84bdd949b8 716 * @returns true if currently transmitting
shaunkrnelson 0:5f84bdd949b8 717 */
shaunkrnelson 0:5f84bdd949b8 718 bool getIsTransmitting();
shaunkrnelson 0:5f84bdd949b8 719
shaunkrnelson 0:5f84bdd949b8 720 /** Set TX data rate
shaunkrnelson 0:5f84bdd949b8 721 * data rates affect maximum payload size
shaunkrnelson 0:5f84bdd949b8 722 * @param dr SF_7 - SF_12|DR0-DR7 for Europe, SF_7 - SF_10 | DR0-DR4 for United States
shaunkrnelson 0:5f84bdd949b8 723 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 724 */
shaunkrnelson 0:5f84bdd949b8 725 int32_t setTxDataRate(const uint8_t& dr);
shaunkrnelson 0:5f84bdd949b8 726
shaunkrnelson 0:5f84bdd949b8 727 /** Get TX data rate
shaunkrnelson 0:5f84bdd949b8 728 * @returns current TX data rate (DR0-DR15)
shaunkrnelson 0:5f84bdd949b8 729 */
shaunkrnelson 0:5f84bdd949b8 730 uint8_t getTxDataRate();
shaunkrnelson 0:5f84bdd949b8 731
shaunkrnelson 0:5f84bdd949b8 732 /** Get a random value from the radio based on RSSI
shaunkrnelson 0:5f84bdd949b8 733 * @returns randome value
shaunkrnelson 0:5f84bdd949b8 734 */
shaunkrnelson 0:5f84bdd949b8 735 uint32_t getRadioRandom();
shaunkrnelson 0:5f84bdd949b8 736
shaunkrnelson 0:5f84bdd949b8 737
shaunkrnelson 0:5f84bdd949b8 738 /** Get data rate spreading factor and bandwidth
shaunkrnelson 0:5f84bdd949b8 739 * EU868 Datarates
shaunkrnelson 0:5f84bdd949b8 740 * ---------------
shaunkrnelson 0:5f84bdd949b8 741 * DR0 - SF12BW125
shaunkrnelson 0:5f84bdd949b8 742 * DR1 - SF11BW125
shaunkrnelson 0:5f84bdd949b8 743 * DR2 - SF10BW125
shaunkrnelson 0:5f84bdd949b8 744 * DR3 - SF9BW125
shaunkrnelson 0:5f84bdd949b8 745 * DR4 - SF8BW125
shaunkrnelson 0:5f84bdd949b8 746 * DR5 - SF7BW125
shaunkrnelson 0:5f84bdd949b8 747 * DR6 - SF7BW250
shaunkrnelson 0:5f84bdd949b8 748 * DR7 - FSK
shaunkrnelson 0:5f84bdd949b8 749 *
shaunkrnelson 0:5f84bdd949b8 750 * US915 Datarates
shaunkrnelson 0:5f84bdd949b8 751 * ---------------
shaunkrnelson 0:5f84bdd949b8 752 * DR0 - SF10BW125
shaunkrnelson 0:5f84bdd949b8 753 * DR1 - SF9BW125
shaunkrnelson 0:5f84bdd949b8 754 * DR2 - SF8BW125
shaunkrnelson 0:5f84bdd949b8 755 * DR3 - SF7BW125
shaunkrnelson 0:5f84bdd949b8 756 * DR4 - SF8BW500
shaunkrnelson 0:5f84bdd949b8 757 *
shaunkrnelson 0:5f84bdd949b8 758 * @returns spreading factor and bandwidth
shaunkrnelson 0:5f84bdd949b8 759 */
shaunkrnelson 0:5f84bdd949b8 760 std::string getDateRateDetails(uint8_t rate);
shaunkrnelson 0:5f84bdd949b8 761
shaunkrnelson 0:5f84bdd949b8 762 /** Set TX power output of radio before antenna gain, default: 14 dBm
shaunkrnelson 0:5f84bdd949b8 763 * actual output power may be limited by local regulations for the chosen frequency
shaunkrnelson 0:5f84bdd949b8 764 * power affects maximum range
shaunkrnelson 0:5f84bdd949b8 765 * @param power 2 dBm - 20 dBm
shaunkrnelson 0:5f84bdd949b8 766 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 767 */
shaunkrnelson 0:5f84bdd949b8 768 int32_t setTxPower(const uint32_t& power);
shaunkrnelson 0:5f84bdd949b8 769
shaunkrnelson 0:5f84bdd949b8 770 /** Get TX power
shaunkrnelson 0:5f84bdd949b8 771 * @returns TX power (2 dBm - 20 dBm)
shaunkrnelson 0:5f84bdd949b8 772 */
shaunkrnelson 0:5f84bdd949b8 773 uint32_t getTxPower();
shaunkrnelson 0:5f84bdd949b8 774
shaunkrnelson 0:5f84bdd949b8 775 /** Get configured gain of installed antenna, default: +3 dBi
shaunkrnelson 0:5f84bdd949b8 776 * @returns gain of antenna in dBi
shaunkrnelson 0:5f84bdd949b8 777 */
shaunkrnelson 0:5f84bdd949b8 778 int8_t getAntennaGain();
shaunkrnelson 0:5f84bdd949b8 779
shaunkrnelson 0:5f84bdd949b8 780 /** Set configured gain of installed antenna, default: +3 dBi
shaunkrnelson 0:5f84bdd949b8 781 * @param gain -127 dBi - 128 dBi
shaunkrnelson 0:5f84bdd949b8 782 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 783 */
shaunkrnelson 0:5f84bdd949b8 784 int32_t setAntennaGain(int8_t gain);
shaunkrnelson 0:5f84bdd949b8 785
shaunkrnelson 0:5f84bdd949b8 786 /** Enable/disable TX waiting for rx windows
shaunkrnelson 0:5f84bdd949b8 787 * when enabled, send calls will block until a packet is received or RX timeout
shaunkrnelson 0:5f84bdd949b8 788 * @param enable set to true if expecting responses to transmitted packets
shaunkrnelson 0:5f84bdd949b8 789 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 790 */
shaunkrnelson 0:5f84bdd949b8 791 int32_t setTxWait(const bool& enable);
shaunkrnelson 0:5f84bdd949b8 792
shaunkrnelson 0:5f84bdd949b8 793 /** Get TX wait
shaunkrnelson 0:5f84bdd949b8 794 * @returns true if TX wait is enabled
shaunkrnelson 0:5f84bdd949b8 795 */
shaunkrnelson 0:5f84bdd949b8 796 bool getTxWait();
shaunkrnelson 0:5f84bdd949b8 797
shaunkrnelson 0:5f84bdd949b8 798 /** Get time on air
shaunkrnelson 0:5f84bdd949b8 799 * @returns the amount of time (in ms) it would take to send bytes bytes based on current configuration
shaunkrnelson 0:5f84bdd949b8 800 */
shaunkrnelson 0:5f84bdd949b8 801 uint32_t getTimeOnAir(uint8_t bytes);
shaunkrnelson 0:5f84bdd949b8 802
shaunkrnelson 0:5f84bdd949b8 803 /** Get min frequency
shaunkrnelson 0:5f84bdd949b8 804 * @returns minimum frequency based on current configuration
shaunkrnelson 0:5f84bdd949b8 805 */
shaunkrnelson 0:5f84bdd949b8 806 uint32_t getMinFrequency();
shaunkrnelson 0:5f84bdd949b8 807
shaunkrnelson 0:5f84bdd949b8 808 /** Get max frequency
shaunkrnelson 0:5f84bdd949b8 809 * @returns maximum frequency based on current configuration
shaunkrnelson 0:5f84bdd949b8 810 */
shaunkrnelson 0:5f84bdd949b8 811 uint32_t getMaxFrequency();
shaunkrnelson 0:5f84bdd949b8 812
shaunkrnelson 0:5f84bdd949b8 813 // get/set adaptive data rate
shaunkrnelson 0:5f84bdd949b8 814 // configure data rates and power levels based on signal to noise of packets received at gateway
shaunkrnelson 0:5f84bdd949b8 815 // true == adaptive data rate is on
shaunkrnelson 0:5f84bdd949b8 816 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 817 int32_t setAdr(const bool& on);
shaunkrnelson 0:5f84bdd949b8 818 bool getAdr();
shaunkrnelson 0:5f84bdd949b8 819
shaunkrnelson 0:5f84bdd949b8 820 /** Set forward error correction bytes
shaunkrnelson 0:5f84bdd949b8 821 * @param bytes 1 - 4 bytes
shaunkrnelson 0:5f84bdd949b8 822 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 823 */
shaunkrnelson 0:5f84bdd949b8 824 int32_t setFec(const uint8_t& bytes);
shaunkrnelson 0:5f84bdd949b8 825
shaunkrnelson 0:5f84bdd949b8 826 /** Get forward error correction bytes
shaunkrnelson 0:5f84bdd949b8 827 * @returns bytes (1 - 4)
shaunkrnelson 0:5f84bdd949b8 828 */
shaunkrnelson 0:5f84bdd949b8 829 uint8_t getFec();
shaunkrnelson 0:5f84bdd949b8 830
shaunkrnelson 0:5f84bdd949b8 831 /** Enable/disable CRC checking of packets
shaunkrnelson 0:5f84bdd949b8 832 * CRC checking must be enabled for use with Conduit gateway and MTAC_LORA card
shaunkrnelson 0:5f84bdd949b8 833 * @param on set to true to enable CRC checking
shaunkrnelson 0:5f84bdd949b8 834 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 835 */
shaunkrnelson 0:5f84bdd949b8 836 int32_t setCrc(const bool& on);
shaunkrnelson 0:5f84bdd949b8 837
shaunkrnelson 0:5f84bdd949b8 838 /** Get CRC checking
shaunkrnelson 0:5f84bdd949b8 839 * @returns true if CRC checking is enabled
shaunkrnelson 0:5f84bdd949b8 840 */
shaunkrnelson 0:5f84bdd949b8 841 bool getCrc();
shaunkrnelson 0:5f84bdd949b8 842
shaunkrnelson 0:5f84bdd949b8 843 /** Set ack
shaunkrnelson 0:5f84bdd949b8 844 * @param retries 0 to disable acks, otherwise 1 - 8
shaunkrnelson 0:5f84bdd949b8 845 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 846 */
shaunkrnelson 0:5f84bdd949b8 847 int32_t setAck(const uint8_t& retries);
shaunkrnelson 0:5f84bdd949b8 848
shaunkrnelson 0:5f84bdd949b8 849 /** Get ack
shaunkrnelson 0:5f84bdd949b8 850 * @returns 0 if acks are disabled, otherwise retries (1 - 8)
shaunkrnelson 0:5f84bdd949b8 851 */
shaunkrnelson 0:5f84bdd949b8 852 uint8_t getAck();
shaunkrnelson 0:5f84bdd949b8 853
shaunkrnelson 0:5f84bdd949b8 854 /** Set number of packet repeats for unconfirmed frames
shaunkrnelson 0:5f84bdd949b8 855 * @param repeat 0 or 1 for no repeats, otherwise 2-15
shaunkrnelson 0:5f84bdd949b8 856 * @returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 857 */
shaunkrnelson 0:5f84bdd949b8 858 int32_t setRepeat(const uint8_t& repeat);
shaunkrnelson 0:5f84bdd949b8 859
shaunkrnelson 0:5f84bdd949b8 860 /** Get number of packet repeats for unconfirmed frames
shaunkrnelson 0:5f84bdd949b8 861 * @returns 0 or 1 if no repeats, otherwise 2-15
shaunkrnelson 0:5f84bdd949b8 862 */
shaunkrnelson 0:5f84bdd949b8 863 uint8_t getRepeat();
shaunkrnelson 0:5f84bdd949b8 864
shaunkrnelson 0:5f84bdd949b8 865 /** Send data to the gateway
shaunkrnelson 0:5f84bdd949b8 866 * validates data size (based on spreading factor)
shaunkrnelson 0:5f84bdd949b8 867 * @param data a vector of up to 242 bytes (may be less based on spreading factor)
shaunkrnelson 0:5f84bdd949b8 868 * @returns MDOT_OK if packet was sent successfully (ACKs disabled), or if an ACK was received (ACKs enabled)
shaunkrnelson 0:5f84bdd949b8 869 */
shaunkrnelson 0:5f84bdd949b8 870 int32_t send(const std::vector<uint8_t>& data, const bool& blocking = true, const bool& highBw = false);
shaunkrnelson 0:5f84bdd949b8 871
shaunkrnelson 0:5f84bdd949b8 872 /** Fetch data received from the gateway
shaunkrnelson 0:5f84bdd949b8 873 * this function only checks to see if a packet has been received - it does not open a receive window
shaunkrnelson 0:5f84bdd949b8 874 * send() must be called before recv()
shaunkrnelson 0:5f84bdd949b8 875 * @param data a vector to put the received data into
shaunkrnelson 0:5f84bdd949b8 876 * @returns MDOT_OK if packet was successfully received
shaunkrnelson 0:5f84bdd949b8 877 */
shaunkrnelson 0:5f84bdd949b8 878 int32_t recv(std::vector<uint8_t>& data);
shaunkrnelson 0:5f84bdd949b8 879
shaunkrnelson 0:5f84bdd949b8 880 /** Ping
shaunkrnelson 0:5f84bdd949b8 881 * status will be MDOT_OK if ping succeeded
shaunkrnelson 0:5f84bdd949b8 882 * @returns ping_response struct containing status, RSSI, and SNR
shaunkrnelson 0:5f84bdd949b8 883 */
shaunkrnelson 0:5f84bdd949b8 884 ping_response ping();
shaunkrnelson 0:5f84bdd949b8 885
shaunkrnelson 0:5f84bdd949b8 886 /** Get return code string
shaunkrnelson 0:5f84bdd949b8 887 * @returns string containing a description of the given error code
shaunkrnelson 0:5f84bdd949b8 888 */
shaunkrnelson 0:5f84bdd949b8 889 static std::string getReturnCodeString(const int32_t& code);
shaunkrnelson 0:5f84bdd949b8 890
shaunkrnelson 0:5f84bdd949b8 891 /** Get last error
shaunkrnelson 0:5f84bdd949b8 892 * @returns string explaining the last error that occured
shaunkrnelson 0:5f84bdd949b8 893 */
shaunkrnelson 0:5f84bdd949b8 894 std::string getLastError();
shaunkrnelson 0:5f84bdd949b8 895
shaunkrnelson 0:5f84bdd949b8 896 /** Go to sleep
shaunkrnelson 0:5f84bdd949b8 897 * @param interval the number of seconds to sleep before waking up if wakeup_mode == RTC_ALARM or RTC_ALARM_OR_INTERRUPT, else ignored
shaunkrnelson 0:5f84bdd949b8 898 * @param wakeup_mode RTC_ALARM, INTERRUPT, RTC_ALARM_OR_INTERRUPT
shaunkrnelson 0:5f84bdd949b8 899 * if RTC_ALARM the real time clock is configured to wake the device up after the specified interval
shaunkrnelson 0:5f84bdd949b8 900 * if INTERRUPT the device will wake up on the rising edge of the interrupt pin
shaunkrnelson 0:5f84bdd949b8 901 * if RTC_ALARM_OR_INTERRUPT the device will wake on the first event to occur
shaunkrnelson 0:5f84bdd949b8 902 * @param deepsleep if true go into deep sleep mode (lowest power, all memory and registers are lost, peripherals turned off)
shaunkrnelson 0:5f84bdd949b8 903 * else go into sleep mode (low power, memory and registers are maintained, peripherals stay on)
shaunkrnelson 0:5f84bdd949b8 904 *
shaunkrnelson 0:5f84bdd949b8 905 * in sleep mode, the device can be woken up on an XBEE_DI (2-8) pin or by the RTC alarm
shaunkrnelson 0:5f84bdd949b8 906 * in deepsleep mode, the device can only be woken up using the WKUP pin (PA0, XBEE_DIO7) or by the RTC alarm
shaunkrnelson 0:5f84bdd949b8 907 */
shaunkrnelson 0:5f84bdd949b8 908 void sleep(const uint32_t& interval, const uint8_t& wakeup_mode = RTC_ALARM, const bool& deepsleep = true);
shaunkrnelson 0:5f84bdd949b8 909
shaunkrnelson 0:5f84bdd949b8 910 /** Set wake pin
shaunkrnelson 0:5f84bdd949b8 911 * @param pin the pin to use to wake the device from sleep mode XBEE_DI (2-8)
shaunkrnelson 0:5f84bdd949b8 912 */
shaunkrnelson 0:5f84bdd949b8 913 void setWakePin(const PinName& pin);
shaunkrnelson 0:5f84bdd949b8 914
shaunkrnelson 0:5f84bdd949b8 915 /** Get wake pin
shaunkrnelson 0:5f84bdd949b8 916 * @returns the pin to use to wake the device from sleep mode XBEE_DI (2-8)
shaunkrnelson 0:5f84bdd949b8 917 */
shaunkrnelson 0:5f84bdd949b8 918 PinName getWakePin();
shaunkrnelson 0:5f84bdd949b8 919
shaunkrnelson 0:5f84bdd949b8 920 /** Write data in a user backup register
shaunkrnelson 0:5f84bdd949b8 921 * @param register one of UBR0 through UBR9
shaunkrnelson 0:5f84bdd949b8 922 * @param data user data to back up
shaunkrnelson 0:5f84bdd949b8 923 * @returns true if success
shaunkrnelson 0:5f84bdd949b8 924 */
shaunkrnelson 0:5f84bdd949b8 925 bool writeUserBackupRegister(uint32_t reg, uint32_t data);
shaunkrnelson 0:5f84bdd949b8 926
shaunkrnelson 0:5f84bdd949b8 927 /** Read data in a user backup register
shaunkrnelson 0:5f84bdd949b8 928 * @param register one of UBR0 through UBR9
shaunkrnelson 0:5f84bdd949b8 929 * @param data gets set to content of register
shaunkrnelson 0:5f84bdd949b8 930 * @returns true if success
shaunkrnelson 0:5f84bdd949b8 931 */
shaunkrnelson 0:5f84bdd949b8 932 bool readUserBackupRegister(uint32_t reg, uint32_t& data);
shaunkrnelson 0:5f84bdd949b8 933
shaunkrnelson 0:5f84bdd949b8 934 // Save user file data to flash
shaunkrnelson 0:5f84bdd949b8 935 // file - name of file max 30 chars
shaunkrnelson 0:5f84bdd949b8 936 // data - data of file
shaunkrnelson 0:5f84bdd949b8 937 // size - size of file
shaunkrnelson 0:5f84bdd949b8 938 bool saveUserFile(const char* file, void* data, uint32_t size);
shaunkrnelson 0:5f84bdd949b8 939
shaunkrnelson 0:5f84bdd949b8 940 // Append user file data to flash
shaunkrnelson 0:5f84bdd949b8 941 // file - name of file max 30 chars
shaunkrnelson 0:5f84bdd949b8 942 // data - data of file
shaunkrnelson 0:5f84bdd949b8 943 // size - size of file
shaunkrnelson 0:5f84bdd949b8 944 bool appendUserFile(const char* file, void* data, uint32_t size);
shaunkrnelson 0:5f84bdd949b8 945
shaunkrnelson 0:5f84bdd949b8 946 // Read user file data from flash
shaunkrnelson 0:5f84bdd949b8 947 // file - name of file max 30 chars
shaunkrnelson 0:5f84bdd949b8 948 // data - data of file
shaunkrnelson 0:5f84bdd949b8 949 // size - size of file
shaunkrnelson 0:5f84bdd949b8 950 bool readUserFile(const char* file, void* data, uint32_t size);
shaunkrnelson 0:5f84bdd949b8 951
shaunkrnelson 0:5f84bdd949b8 952 // Move a user file in flash
shaunkrnelson 0:5f84bdd949b8 953 // file - name of file
shaunkrnelson 0:5f84bdd949b8 954 // new_name - new name of file
shaunkrnelson 0:5f84bdd949b8 955 bool moveUserFile(const char* file, const char* new_name);
shaunkrnelson 0:5f84bdd949b8 956
shaunkrnelson 0:5f84bdd949b8 957 // Delete user file data from flash
shaunkrnelson 0:5f84bdd949b8 958 // file - name of file max 30 chars
shaunkrnelson 0:5f84bdd949b8 959 bool deleteUserFile(const char* file);
shaunkrnelson 0:5f84bdd949b8 960
shaunkrnelson 0:5f84bdd949b8 961 // Open user file in flash, max of 4 files open concurrently
shaunkrnelson 0:5f84bdd949b8 962 // file - name of file max 30 chars
shaunkrnelson 0:5f84bdd949b8 963 // mode - combination of FM_APPEND | FM_TRUNC | FM_CREAT |
shaunkrnelson 0:5f84bdd949b8 964 // FM_RDONLY | FM_WRONLY | FM_RDWR | FM_DIRECT
shaunkrnelson 0:5f84bdd949b8 965 // returns - mdot_file struct, fd field will be a negative value if file could not be opened
shaunkrnelson 0:5f84bdd949b8 966 mDot::mdot_file openUserFile(const char* file, int mode);
shaunkrnelson 0:5f84bdd949b8 967
shaunkrnelson 0:5f84bdd949b8 968 // Seek an open file
shaunkrnelson 0:5f84bdd949b8 969 // file - mdot file struct
shaunkrnelson 0:5f84bdd949b8 970 // offset - offset in bytes
shaunkrnelson 0:5f84bdd949b8 971 // whence - where offset is based SEEK_SET, SEEK_CUR, SEEK_END
shaunkrnelson 0:5f84bdd949b8 972 bool seekUserFile(mDot::mdot_file& file, size_t offset, int whence);
shaunkrnelson 0:5f84bdd949b8 973
shaunkrnelson 0:5f84bdd949b8 974 // Read bytes from open file
shaunkrnelson 0:5f84bdd949b8 975 // file - mdot file struct
shaunkrnelson 0:5f84bdd949b8 976 // data - mem location to store data
shaunkrnelson 0:5f84bdd949b8 977 // length - number of bytes to read
shaunkrnelson 0:5f84bdd949b8 978 // returns - number of bytes written
shaunkrnelson 0:5f84bdd949b8 979 int readUserFile(mDot::mdot_file& file, void* data, size_t length);
shaunkrnelson 0:5f84bdd949b8 980
shaunkrnelson 0:5f84bdd949b8 981 // Write bytes to open file
shaunkrnelson 0:5f84bdd949b8 982 // file - mdot file struct
shaunkrnelson 0:5f84bdd949b8 983 // data - data to write
shaunkrnelson 0:5f84bdd949b8 984 // length - number of bytes to write
shaunkrnelson 0:5f84bdd949b8 985 // returns - number of bytes written
shaunkrnelson 0:5f84bdd949b8 986 int writeUserFile(mDot::mdot_file& file, void* data, size_t length);
shaunkrnelson 0:5f84bdd949b8 987
shaunkrnelson 0:5f84bdd949b8 988 // Close open file
shaunkrnelson 0:5f84bdd949b8 989 // file - mdot file struct
shaunkrnelson 0:5f84bdd949b8 990 bool closeUserFile(mDot::mdot_file& file);
shaunkrnelson 0:5f84bdd949b8 991
shaunkrnelson 0:5f84bdd949b8 992 // List user files stored in flash
shaunkrnelson 0:5f84bdd949b8 993 std::vector<mDot::mdot_file> listUserFiles();
shaunkrnelson 0:5f84bdd949b8 994
shaunkrnelson 0:5f84bdd949b8 995 // Move file into the firmware upgrade path to be flashed on next boot
shaunkrnelson 0:5f84bdd949b8 996 // file - name of file
shaunkrnelson 0:5f84bdd949b8 997 bool moveUserFileToFirmwareUpgrade(const char* file);
shaunkrnelson 0:5f84bdd949b8 998
shaunkrnelson 0:5f84bdd949b8 999 // get current statistics
shaunkrnelson 0:5f84bdd949b8 1000 // Join Attempts, Join Fails, Up Packets, Down Packets, Missed Acks
shaunkrnelson 0:5f84bdd949b8 1001 mdot_stats getStats();
shaunkrnelson 0:5f84bdd949b8 1002
shaunkrnelson 0:5f84bdd949b8 1003 // reset statistics
shaunkrnelson 0:5f84bdd949b8 1004 // Join Attempts, Join Fails, Up Packets, Down Packets, Missed Acks
shaunkrnelson 0:5f84bdd949b8 1005 void resetStats();
shaunkrnelson 0:5f84bdd949b8 1006
shaunkrnelson 0:5f84bdd949b8 1007 // Convert pin number 2-8 to pin name DIO2-DI8
shaunkrnelson 0:5f84bdd949b8 1008 static PinName pinNum2Name(uint8_t num);
shaunkrnelson 0:5f84bdd949b8 1009
shaunkrnelson 0:5f84bdd949b8 1010 // Convert pin name DIO2-DI8 to pin number 2-8
shaunkrnelson 0:5f84bdd949b8 1011 static uint8_t pinName2Num(PinName name);
shaunkrnelson 0:5f84bdd949b8 1012
shaunkrnelson 0:5f84bdd949b8 1013 // Convert pin name DIO2-DI8 to string
shaunkrnelson 0:5f84bdd949b8 1014 static std::string pinName2Str(PinName name);
shaunkrnelson 0:5f84bdd949b8 1015
shaunkrnelson 0:5f84bdd949b8 1016 uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l);
shaunkrnelson 0:5f84bdd949b8 1017
shaunkrnelson 0:5f84bdd949b8 1018 /*************************************************************************
shaunkrnelson 0:5f84bdd949b8 1019 * The following functions are only used by the AT command application and
shaunkrnelson 0:5f84bdd949b8 1020 * should not be used by standard applications consuming the mDot library
shaunkrnelson 0:5f84bdd949b8 1021 ************************************************************************/
shaunkrnelson 0:5f84bdd949b8 1022
shaunkrnelson 0:5f84bdd949b8 1023 // set/get configured baud rate for command port
shaunkrnelson 0:5f84bdd949b8 1024 // only for use in conjunction with AT interface
shaunkrnelson 0:5f84bdd949b8 1025 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1026 int32_t setBaud(const uint32_t& baud);
shaunkrnelson 0:5f84bdd949b8 1027 uint32_t getBaud();
shaunkrnelson 0:5f84bdd949b8 1028
shaunkrnelson 0:5f84bdd949b8 1029 // set/get baud rate for debug port
shaunkrnelson 0:5f84bdd949b8 1030 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1031 int32_t setDebugBaud(const uint32_t& baud);
shaunkrnelson 0:5f84bdd949b8 1032 uint32_t getDebugBaud();
shaunkrnelson 0:5f84bdd949b8 1033
shaunkrnelson 0:5f84bdd949b8 1034 // set/get command terminal echo
shaunkrnelson 0:5f84bdd949b8 1035 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1036 int32_t setEcho(const bool& on);
shaunkrnelson 0:5f84bdd949b8 1037 bool getEcho();
shaunkrnelson 0:5f84bdd949b8 1038
shaunkrnelson 0:5f84bdd949b8 1039 // set/get command terminal verbose mode
shaunkrnelson 0:5f84bdd949b8 1040 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1041 int32_t setVerbose(const bool& on);
shaunkrnelson 0:5f84bdd949b8 1042 bool getVerbose();
shaunkrnelson 0:5f84bdd949b8 1043
shaunkrnelson 0:5f84bdd949b8 1044 // set/get startup mode
shaunkrnelson 0:5f84bdd949b8 1045 // COMMAND_MODE (default), starts up ready to accept AT commands
shaunkrnelson 0:5f84bdd949b8 1046 // SERIAL_MODE, read serial data and send it as LoRa packets
shaunkrnelson 0:5f84bdd949b8 1047 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1048 int32_t setStartUpMode(const uint8_t& mode);
shaunkrnelson 0:5f84bdd949b8 1049 uint8_t getStartUpMode();
shaunkrnelson 0:5f84bdd949b8 1050
shaunkrnelson 0:5f84bdd949b8 1051 int32_t setRxDataRate(const uint8_t& dr);
shaunkrnelson 0:5f84bdd949b8 1052 uint8_t getRxDataRate();
shaunkrnelson 0:5f84bdd949b8 1053
shaunkrnelson 0:5f84bdd949b8 1054 // get/set TX/RX frequency
shaunkrnelson 0:5f84bdd949b8 1055 // if frequency band == FB_868 (Europe), must be between 863000000 - 870000000
shaunkrnelson 0:5f84bdd949b8 1056 // if frequency band == FB_915 (United States), must be between 902000000-928000000
shaunkrnelson 0:5f84bdd949b8 1057 // if set to 0, device will hop frequencies
shaunkrnelson 0:5f84bdd949b8 1058 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1059 int32_t setTxFrequency(const uint32_t& freq);
shaunkrnelson 0:5f84bdd949b8 1060 uint32_t getTxFrequency();
shaunkrnelson 0:5f84bdd949b8 1061 int32_t setRxFrequency(const uint32_t& freq);
shaunkrnelson 0:5f84bdd949b8 1062 uint32_t getRxFrequency();
shaunkrnelson 0:5f84bdd949b8 1063
shaunkrnelson 0:5f84bdd949b8 1064 // get/set TX/RX inverted
shaunkrnelson 0:5f84bdd949b8 1065 // true == signal is inverted
shaunkrnelson 0:5f84bdd949b8 1066 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1067 int32_t setTxInverted(const bool& on);
shaunkrnelson 0:5f84bdd949b8 1068 bool getTxInverted();
shaunkrnelson 0:5f84bdd949b8 1069 int32_t setRxInverted(const bool& on);
shaunkrnelson 0:5f84bdd949b8 1070 bool getRxInverted();
shaunkrnelson 0:5f84bdd949b8 1071
shaunkrnelson 0:5f84bdd949b8 1072 // get/set RX output mode
shaunkrnelson 0:5f84bdd949b8 1073 // valid options are HEXADECIMAL and BINARY
shaunkrnelson 0:5f84bdd949b8 1074 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1075 int32_t setRxOutput(const uint8_t& mode);
shaunkrnelson 0:5f84bdd949b8 1076 uint8_t getRxOutput();
shaunkrnelson 0:5f84bdd949b8 1077
shaunkrnelson 0:5f84bdd949b8 1078 // get/set serial wake interval
shaunkrnelson 0:5f84bdd949b8 1079 // valid values are 2 s - INT_MAX (2147483647) s
shaunkrnelson 0:5f84bdd949b8 1080 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1081 int32_t setWakeInterval(const uint32_t& interval);
shaunkrnelson 0:5f84bdd949b8 1082 uint32_t getWakeInterval();
shaunkrnelson 0:5f84bdd949b8 1083
shaunkrnelson 0:5f84bdd949b8 1084 // get/set serial wake delay
shaunkrnelson 0:5f84bdd949b8 1085 // valid values are 2 ms - INT_MAX (2147483647) ms
shaunkrnelson 0:5f84bdd949b8 1086 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1087 int32_t setWakeDelay(const uint32_t& delay);
shaunkrnelson 0:5f84bdd949b8 1088 uint32_t getWakeDelay();
shaunkrnelson 0:5f84bdd949b8 1089
shaunkrnelson 0:5f84bdd949b8 1090 // get/set serial receive timeout
shaunkrnelson 0:5f84bdd949b8 1091 // valid values are 0 ms - 65000 ms
shaunkrnelson 0:5f84bdd949b8 1092 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1093 int32_t setWakeTimeout(const uint16_t& timeout);
shaunkrnelson 0:5f84bdd949b8 1094 uint16_t getWakeTimeout();
shaunkrnelson 0:5f84bdd949b8 1095
shaunkrnelson 0:5f84bdd949b8 1096 // get/set serial wake mode
shaunkrnelson 0:5f84bdd949b8 1097 // valid values are INTERRUPT or RTC_ALARM
shaunkrnelson 0:5f84bdd949b8 1098 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1099 int32_t setWakeMode(const uint8_t& delay);
shaunkrnelson 0:5f84bdd949b8 1100 uint8_t getWakeMode();
shaunkrnelson 0:5f84bdd949b8 1101
shaunkrnelson 0:5f84bdd949b8 1102 // get/set serial flow control enabled
shaunkrnelson 0:5f84bdd949b8 1103 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1104 int32_t setFlowControl(const bool& on);
shaunkrnelson 0:5f84bdd949b8 1105 bool getFlowControl();
shaunkrnelson 0:5f84bdd949b8 1106
shaunkrnelson 0:5f84bdd949b8 1107
shaunkrnelson 0:5f84bdd949b8 1108 // get/set serial clear on error
shaunkrnelson 0:5f84bdd949b8 1109 // if enabled the data read from the serial port will be discarded if it cannot be sent or if the send fails
shaunkrnelson 0:5f84bdd949b8 1110 // set function returns MDOT_OK if success
shaunkrnelson 0:5f84bdd949b8 1111 int32_t setSerialClearOnError(const bool& on);
shaunkrnelson 0:5f84bdd949b8 1112 bool getSerialClearOnError();
shaunkrnelson 0:5f84bdd949b8 1113
shaunkrnelson 0:5f84bdd949b8 1114 // MTS_RADIO_DEBUG_COMMANDS
shaunkrnelson 0:5f84bdd949b8 1115
shaunkrnelson 0:5f84bdd949b8 1116 void openRxWindow(uint32_t timeout, uint8_t bandwidth = 0);
shaunkrnelson 0:5f84bdd949b8 1117 void sendContinuous();
shaunkrnelson 0:5f84bdd949b8 1118 int32_t setDeviceId(const std::vector<uint8_t>& id);
shaunkrnelson 0:5f84bdd949b8 1119 int32_t setFrequencyBand(const uint8_t& band);
shaunkrnelson 0:5f84bdd949b8 1120 bool saveProtectedConfig();
shaunkrnelson 0:5f84bdd949b8 1121 void resetRadio();
shaunkrnelson 0:5f84bdd949b8 1122 int32_t setRadioMode(const uint8_t& mode);
shaunkrnelson 0:5f84bdd949b8 1123 std::map<uint8_t, uint8_t> dumpRegisters();
shaunkrnelson 0:5f84bdd949b8 1124 void eraseFlash();
shaunkrnelson 0:5f84bdd949b8 1125
shaunkrnelson 0:5f84bdd949b8 1126 // deprecated - use setWakeInterval
shaunkrnelson 0:5f84bdd949b8 1127 int32_t setSerialWakeInterval(const uint32_t& interval);
shaunkrnelson 0:5f84bdd949b8 1128 // deprecated - use getWakeInterval
shaunkrnelson 0:5f84bdd949b8 1129 uint32_t getSerialWakeInterval();
shaunkrnelson 0:5f84bdd949b8 1130
shaunkrnelson 0:5f84bdd949b8 1131 // deprecated - use setWakeDelay
shaunkrnelson 0:5f84bdd949b8 1132 int32_t setSerialWakeDelay(const uint32_t& delay);
shaunkrnelson 0:5f84bdd949b8 1133 // deprecated - use setWakeDelay
shaunkrnelson 0:5f84bdd949b8 1134 uint32_t getSerialWakeDelay();
shaunkrnelson 0:5f84bdd949b8 1135
shaunkrnelson 0:5f84bdd949b8 1136 // deprecated - use setWakeTimeout
shaunkrnelson 0:5f84bdd949b8 1137 int32_t setSerialReceiveTimeout(const uint16_t& timeout);
shaunkrnelson 0:5f84bdd949b8 1138 // deprecated - use getWakeTimeout
shaunkrnelson 0:5f84bdd949b8 1139 uint16_t getSerialReceiveTimeout();
shaunkrnelson 0:5f84bdd949b8 1140
shaunkrnelson 0:5f84bdd949b8 1141 void setWakeupCallback(void (*function)(void));
shaunkrnelson 0:5f84bdd949b8 1142
shaunkrnelson 0:5f84bdd949b8 1143 template<typename T>
shaunkrnelson 0:5f84bdd949b8 1144 void setWakeupCallback(T *object, void (T::*member)(void)) {
shaunkrnelson 0:5f84bdd949b8 1145 _wakeup_callback.attach(object, member);
shaunkrnelson 0:5f84bdd949b8 1146 }
shaunkrnelson 0:5f84bdd949b8 1147
shaunkrnelson 0:5f84bdd949b8 1148 private:
shaunkrnelson 0:5f84bdd949b8 1149 mdot_stats _stats;
shaunkrnelson 0:5f84bdd949b8 1150
shaunkrnelson 0:5f84bdd949b8 1151 FunctionPointer _wakeup_callback;
shaunkrnelson 0:5f84bdd949b8 1152
shaunkrnelson 0:5f84bdd949b8 1153 bool _standbyFlag;
shaunkrnelson 0:5f84bdd949b8 1154 bool _testMode;
shaunkrnelson 0:5f84bdd949b8 1155 uint8_t _savedPort;
shaunkrnelson 0:5f84bdd949b8 1156 void handleTestModePacket();
shaunkrnelson 0:5f84bdd949b8 1157
shaunkrnelson 0:5f84bdd949b8 1158 };
shaunkrnelson 0:5f84bdd949b8 1159
shaunkrnelson 0:5f84bdd949b8 1160 #endif
shaunkrnelson 0:5f84bdd949b8 1161