Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: mDot.h
- Revision:
- 65:acc0468b9aec
- Parent:
- 64:64982192a2af
- Child:
- 68:5f787643e7d7
--- a/mDot.h Thu Aug 23 14:18:55 2018 -0500
+++ b/mDot.h Thu Apr 18 14:55:19 2019 -0500
@@ -1,4 +1,30 @@
-// TODO: add license header
+/**********************************************************************
+* COPYRIGHT 2015 MULTI-TECH SYSTEMS, INC.
+*
+* Redistribution and use in source and binary forms, with or without modification,
+* are permitted provided that the following conditions are met:
+* 1. Redistributions of source code must retain the above copyright notice,
+* this list of conditions and the following disclaimer.
+* 2. Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following disclaimer in the documentation
+* and/or other materials provided with the distribution.
+* 3. Neither the name of MULTI-TECH SYSTEMS, INC. nor the names of its contributors
+* may be used to endorse or promote products derived from this software
+* without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+******************************************************************************
+*/
#ifndef MDOT_H
#define MDOT_H
@@ -35,9 +61,14 @@
void waitForPacket();
void waitForLinkCheck();
+
+ MBED_DEPRECATED("Will be removed in dotlib 3.3.0")
void setActivityLedState(const uint8_t& state);
+
+ MBED_DEPRECATED("Will be removed in dotlib 3.3.0")
uint8_t getActivityLedState();
+ MBED_DEPRECATED("Will be removed in dotlib 3.3.0")
void blinkActivityLed(void) {
if (_activity_led) {
int val = _activity_led->read();
@@ -51,6 +82,9 @@
uint32_t RTC_ReadBackupRegister(uint32_t RTC_BKP_DR);
void RTC_WriteBackupRegister(uint32_t RTC_BKP_DR, uint32_t Data);
+ void RTC_DisableWakeupTimer();
+ void RTC_EnableWakeupTimer();
+
void enterStopMode(const uint32_t& interval, const uint8_t& wakeup_mode = RTC_ALARM);
void enterStandbyMode(const uint32_t& interval, const uint8_t& wakeup_mode = RTC_ALARM);
@@ -63,12 +97,12 @@
std::string _last_error;
static const uint32_t _baud_rates[];
- uint8_t _activity_led_state;
+ uint8_t _activity_led_state; //deprecated will be removed
Ticker _tick;
- DigitalOut* _activity_led;
- bool _activity_led_enable;
- PinName _activity_led_pin;
- bool _activity_led_external;
+ DigitalOut* _activity_led; //deprecated will be removed
+ bool _activity_led_enable; //deprecated will be removed
+ PinName _activity_led_pin; //deprecated will be removed
+ bool _activity_led_external; //deprecated will be removed
uint8_t _linkFailCount;
uint8_t _class;
InterruptIn* _wakeup;
@@ -127,7 +161,8 @@
enum RX_Output {
HEXADECIMAL,
- BINARY
+ BINARY,
+ EXTENDED
};
enum DataRates {
@@ -161,11 +196,6 @@
FSB_8
};
- enum JoinByteOrder {
- LSB,
- MSB
- };
-
enum wakeup_mode {
RTC_ALARM,
INTERRUPT,
@@ -264,7 +294,7 @@
static mDot* getInstance(lora::ChannelPlan* plan);
/**
- * Can only be used after a dot has
+ * Can only be used after a dot has
* configured with a plan
* @returns pointer to mDot object
*/
@@ -328,41 +358,29 @@
*/
void seedRandom(uint32_t seed);
+ /**
+ * @returns true if MAC command answers are ready to be sent
+ */
+ bool hasMacCommands();
+
uint8_t setChannelPlan(lora::ChannelPlan* plan);
lora::Settings* getSettings();
- /**
- * Enable or disable the activity LED.
- * @param enable true to enable the LED, false to disable
- */
+ MBED_DEPRECATED("Will be removed in dotlib 3.3.0")
void setActivityLedEnable(const bool& enable);
- /**
- * Find out if the activity LED is enabled
- * @returns true if activity LED is enabled, false if disabled
- */
+ MBED_DEPRECATED("Will be removed in dotlib 3.3.0")
bool getActivityLedEnable();
- /**
- * Use a different pin for the activity LED.
- * The default is XBEE_RSSI.
- * @param pin the new pin to use
- */
+ MBED_DEPRECATED("Will be removed in dotlib 3.3.0")
void setActivityLedPin(const PinName& pin);
- /**
- * Use an external DigitalOut object for the activity LED.
- * The pointer must stay valid!
- * @param pin the DigitalOut object to use
- */
+ MBED_DEPRECATED("Will be removed in dotlib 3.3.0")
void setActivityLedPin(DigitalOut* pin);
- /**
- * Find out what pin the activity LED is on
- * @returns the pin the activity LED is using
- */
+ MBED_DEPRECATED("Will be removed in dotlib 3.3.0")
PinName getActivityLedPin();
/**
@@ -723,18 +741,6 @@
int32_t setMulticastDownlinkCounter(uint8_t index, uint32_t count);
/**
- * Set join byte order
- * @param order 0:LSB 1:MSB
- */
- uint32_t setJoinByteOrder(uint8_t order);
-
- /**
- * Get join byte order
- * @returns byte order to use in joins 0:LSB 1:MSB
- */
- uint8_t getJoinByteOrder();
-
- /**
* Attempt to join network
* each attempt will be made with a random datarate up to the configured datarate
* JoinRequest backoff between tries is enforced to 1% for 1st hour, 0.1% for 1-10 hours and 0.01% after 10 hours
@@ -903,6 +909,12 @@
uint32_t getNextTxMs();
/**
+ * Get available bytes for payload
+ * @returns bytes
+ */
+ uint8_t getNextTxMaxSize();
+
+ /**
* Get join delay in seconds
* Defaults to 5 seconds
* Must match join delay setting of the network server
@@ -1077,6 +1089,7 @@
* @returns spreading factor and bandwidth
*/
std::string getDataRateDetails(uint8_t rate);
+ MBED_DEPRECATED("Will be removed in 3.3.0")
std::string getDateRateDetails(uint8_t rate);
@@ -1194,6 +1207,21 @@
uint8_t getMinTxPower();
/**
+ * Set ping slot periodicity
+ * Specify the the number of ping slots in a given beacon interval
+ * Note: Must switch back to class A for the change to take effect
+ * @param exp - number_of_pings = 2^(7 - exp) where 0 <= exp <= 7
+ * @returns MDOT_OK if success
+ */
+ uint32_t setPingPeriodicity(uint8_t exp);
+
+ /**
+ * Get ping slot periodicity
+ * @returns exp = 7 - log2(number_of_pings)
+ */
+ uint8_t getPingPeriodicity();
+
+ /**
*
* get/set adaptive data rate
* configure data rates and power levels based on signal to noise of packets received at gateway
@@ -1204,17 +1232,28 @@
bool getAdr();
/**
- * Set forward error correction bytes
- * @param bytes 1 - 4 bytes
- * @returns MDOT_OK if success
+ * Set the ADR ACK Limit
+ * @param limit - ADR ACK limit
*/
- int32_t setFec(const uint8_t& bytes);
+ void setAdrAckLimit(uint16_t limit);
/**
- * Get forward error correction bytes
- * @returns bytes (1 - 4)
+ * Get the ADR ACK Limit
+ * @returns ADR ACK limit
*/
- uint8_t getFec();
+ uint16_t getAdrAckLimit();
+
+ /**
+ * Set the ADR ACK Delay
+ * @param delay - ADR ACK delay
+ */
+ void setAdrAckDelay(uint16_t delay);
+
+ /**
+ * Get the ADR ACK Delay
+ * @returns ADR ACK delay
+ */
+ uint16_t getAdrAckDelay();
/**
* Enable/disable CRC checking of packets
@@ -1404,6 +1443,26 @@
*/
int8_t getLbtThreshold();
+ /**
+ * Get Radio Frequency Offset
+ * Used for fine calibration of radio frequencies
+ * @returns frequency offset in MHz
+ */
+ int32_t getFrequencyOffset();
+ /**
+ * Get Radio Frequency Offset
+ * Used for fine calibration of radio frequencies
+ * @param offset frequency offset in MHz
+ */
+ void setFrequencyOffset(int32_t offset);
+
+ /**
+ * Get GPS time from network server
+ * Sends a DeviceTimeReq command to the network server
+ * @returns time since GPS epoch, 0 on failure
+ */
+ uint64_t getGPSTime();
+
#if defined(TARGET_MTS_MDOT_F411RE)
///////////////////////////////////////////////////////////////////
// Filesystem (Non Volatile Memory) Operation Functions for mDot //
@@ -1481,11 +1540,15 @@
// file - name of file
// returns true if successful
bool moveUserFileToFirmwareUpgrade(const char* file);
+
+ // Return total size of all files saved in FLASH
+ // Does not include SPIFFS overhead
+ uint32_t getUsedSpace();
#else
///////////////////////////////////////////////////////////////
// EEPROM (Non Volatile Memory) Operation Functions for xDot //
///////////////////////////////////////////////////////////////
-
+
// Write to EEPROM
// addr - address to write to (0 - 0x17FF)
// data - data to write
@@ -1557,8 +1620,6 @@
uint8_t getRxDataRate();
// get/set TX/RX frequency
- // if frequency band == FB_868 (Europe), must be between 863000000 - 870000000
- // if frequency band == FB_915 (United States), must be between 902000000-928000000
// if set to 0, device will hop frequencies
// set function returns MDOT_OK if success
int32_t setTxFrequency(const uint32_t& freq);
@@ -1566,16 +1627,8 @@
int32_t setRxFrequency(const uint32_t& freq);
uint32_t getRxFrequency();
- // get/set TX/RX inverted
- // true == signal is inverted
- // set function returns MDOT_OK if success
- int32_t setTxInverted(const bool& on);
- bool getTxInverted();
- int32_t setRxInverted(const bool& on);
- bool getRxInverted();
-
// get/set RX output mode
- // valid options are HEXADECIMAL and BINARY
+ // valid options are HEXADECIMAL, BINARY, and EXTENDED
// set function returns MDOT_OK if success
int32_t setRxOutput(const uint8_t& mode);
uint8_t getRxOutput();
@@ -1644,67 +1697,39 @@
void openRxWindow(uint32_t timeout, uint8_t bandwidth = 0);
void closeRxWindow();
- void sendContinuous(bool enable=true);
+ void sendContinuous(bool enable=true, uint32_t timeout=0, uint32_t frequency=0, int8_t txpower=-1);
int32_t setDeviceId(const std::vector<uint8_t>& id);
int32_t setProtectedAppEUI(const std::vector<uint8_t>& appEUI);
int32_t setProtectedAppKey(const std::vector<uint8_t>& appKey);
int32_t setDefaultFrequencyBand(const uint8_t& band);
bool saveProtectedConfig();
- // resets the radio/mac/link
+ // resets the radio/mac/link
void resetRadio();
int32_t setRadioMode(const uint8_t& mode);
std::map<uint8_t, uint8_t> dumpRegisters();
void eraseFlash();
- // deprecated - use setWakeInterval
- int32_t setSerialWakeInterval(const uint32_t& interval);
- // deprecated - use getWakeInterval
- uint32_t getSerialWakeInterval();
-
- // deprecated - use setWakeDelay
- int32_t setSerialWakeDelay(const uint32_t& delay);
- // deprecated - use setWakeDelay
- uint32_t getSerialWakeDelay();
-
- // deprecated - use setWakeTimeout
- int32_t setSerialReceiveTimeout(const uint16_t& timeout);
- // deprecated - use getWakeTimeout
- uint16_t getSerialReceiveTimeout();
-
void setWakeupCallback(void (*function)(void));
template<typename T>
void setWakeupCallback(T *object, void (T::*member)(void)) {
_wakeup_callback.attach(object, member);
}
-
- lora::ChannelPlan* getChannelPlan(void);
+
+ lora::ChannelPlan* getChannelPlan(void);
uint32_t setRx2DataRate(uint8_t dr);
uint8_t getRx2DataRate();
- void mcGroupKeys(uint8_t *mcKeyEncrypt, uint32_t addr, uint8_t groupId, uint32_t frame_count);
+ void mcGroupKeys(uint8_t *mcKeyEncrypt, uint32_t addr, uint8_t groupId, uint32_t frame_count);
private:
- typedef enum {
- AUTO_SLEEP_EVT_CFG,
- AUTO_SLEEP_EVT_TXDONE,
- AUTO_SLEEP_EVT_RX1_TIMEOUT,
- AUTO_SLEEP_EVT_CLEANUP
- } AutoSleepEvent_t;
-
- typedef enum {
- USER_SLEEP,
- AUTO_SLEEP
- } SleepClient_t;
void sleep_ms(uint32_t interval,
uint8_t wakeup_mode = RTC_ALARM,
- bool deepsleep = true,
- SleepClient_t sleep_client = USER_SLEEP);
+ bool deepsleep = true);
- void auto_sleep(AutoSleepEvent_t evt);
- void wakeup(SleepClient_t sleep_client);
+ void wakeup();
mdot_stats _stats;