Library for LoRa communication using MultiTech MDOT.
Dependents: mDot_test_rx adc_sensor_lora mDotEVBM2X mDot_AT_firmware ... more
Function documentation is in mDot.h
Warning
Using libmDot 2.0.3 and above with an existing application may require a change in the MacEvent handler!
Compile applications with mbed v121 and mbed-rtos v116 libraries.
In AT Command Firmware remove line 803.
CommandTerminal/CommandTerminal.cpp
delete[] info->RxBuffer;
Likewise, if your application is handling events from the library asynchronously.
Diff: mDot.h
- Revision:
- 15:b50f92f1c6ff
- Parent:
- 11:9938ba31d428
- Child:
- 17:0da384ba484b
diff -r 121e4c454964 -r b50f92f1c6ff mDot.h
--- a/mDot.h Mon Apr 04 09:58:34 2016 -0500
+++ b/mDot.h Thu Aug 18 16:07:10 2016 +0000
@@ -5,17 +5,16 @@
#include "mbed.h"
#include "rtos.h"
+#include "Mote.h"
#include <vector>
#include <map>
#include <string>
class mDotEvent;
-class LoRaMacEvent;
class LoRaConfig;
-class LoRaMac;
-class MdotRadio;
class mDot {
+ friend class mDotEvent;
private:
@@ -27,6 +26,8 @@
__WFI();
}
+ void initLora();
+
void setLastError(const std::string& str);
static bool validateBaudRate(const uint32_t& baud);
@@ -61,10 +62,11 @@
static mDot* _instance;
- LoRaMac* _mac;
- MdotRadio* _radio;
- LoRaMacEvent* _events;
+ lora::Mote _mote;
LoRaConfig* _config;
+ lora::Settings _settings;
+ mDotEvent* _events;
+
Thread _idle_thread;
std::string _last_error;
static const uint32_t _baud_rates[];
@@ -114,7 +116,7 @@
} mdot_ret_code;
enum JoinMode {
- MANUAL,
+ MANUAL = 0,
OTA,
AUTO_OTA,
PEER_TO_PEER
@@ -158,8 +160,11 @@
};
enum FrequencyBands {
- FB_868, // EU868
- FB_915 // US915
+ FB_868 = 0,
+ FB_915 = 1,
+ FB_EU868 = 0, // EU868
+ FB_US915 = 1, // US915
+ FB_AU915 = 2
};
enum FrequencySubBands {
@@ -200,7 +205,7 @@
typedef struct {
int16_t fd;
- char name[30];
+ char name[33];
uint32_t size;
} mdot_file;
@@ -210,6 +215,7 @@
uint32_t Joins;
uint32_t JoinFails;
uint32_t MissedAcks;
+ uint32_t CRCErrors;
} mdot_stats;
typedef struct {
@@ -332,6 +338,10 @@
*/
bool getStandbyFlag();
+ std::vector<uint16_t> getChannelMask();
+
+ int32_t setChannelMask(uint8_t offset, uint16_t mask);
+
/** Add a channel frequencies currently in use
* @returns MDOT_OK
*/
@@ -551,13 +561,14 @@
*/
void saveNetworkSession();
- /** Set number of times joining will retry before giving up
+ /** Set number of times joining will retry each sub-band before changing
+ * to the next subband in US915 and AU915
* @param retries must be between 0 - 255
* @returns MDOT_OK if success
*/
int32_t setJoinRetries(const uint8_t& retries);
- /** Set number of times joining will retry before giving up
+ /** Get number of times joining will retry each sub-band
* @returns join retries (0 - 255)
*/
uint8_t getJoinRetries();
@@ -680,6 +691,42 @@
*/
uint32_t setJoinDelay(uint8_t delay);
+ /** Get join Rx1 datarate offset
+ * defaults to 0
+ * @returns offset
+ */
+ uint8_t getJoinRx1DataRateOffset();
+
+ /** Set join Rx1 datarate offset
+ * @param offset for datarate
+ * @return MDOT_OK if success
+ */
+ uint32_t setJoinRx1DataRateOffset(uint8_t offset);
+
+ /** Get join Rx2 datarate
+ * defaults to US:DR8, AU:DR8, EU:DR0
+ * @returns datarate
+ */
+ uint8_t getJoinRx2DataRate();
+
+ /** Set join Rx2 datarate
+ * @param datarate
+ * @return MDOT_OK if success
+ */
+ uint32_t setJoinRx2DataRate(uint8_t datarate);
+
+ /** Get join Rx2 frequency
+ * defaults US:923.3, AU:923.3, EU:869.525
+ * @returns frequency
+ */
+ uint32_t getJoinRx2Frequency();
+
+ /** Set join Rx2 frequency
+ * @param frequency
+ * @return MDOT_OK if success
+ */
+ uint32_t setJoinRx2Frequency(uint32_t frequency);
+
/** Get rx delay in seconds
* Defaults to 1 second
* @returns number of seconds before response message is expected
@@ -712,11 +759,22 @@
*/
bool getDataPending();
- /** Get transmitting
+ /** Get ack requested
+ * only valid after sending data to the gateway
+ * @returns true if server has requested ack
+ */
+ bool getAckRequested();
+
+ /** Get is transmitting indicator
* @returns true if currently transmitting
*/
bool getIsTransmitting();
+ /** Get is idle indicator
+ * @returns true if not currently transmitting, waiting or receiving
+ */
+ bool getIsIdle();
+
/** Set TX data rate
* data rates affect maximum payload size
* @param dr SF_7 - SF_12|DR0-DR7 for Europe, SF_7 - SF_10 | DR0-DR4 for United States
@@ -734,7 +792,6 @@
*/
uint32_t getRadioRandom();
-
/** Get data rate spreading factor and bandwidth
* EU868 Datarates
* ---------------
@@ -755,6 +812,14 @@
* DR3 - SF7BW125
* DR4 - SF8BW500
*
+ * AU915 Datarates
+ * ---------------
+ * DR0 - SF10BW125
+ * DR1 - SF9BW125
+ * DR2 - SF8BW125
+ * DR3 - SF7BW125
+ * DR4 - SF8BW500
+ *
* @returns spreading factor and bandwidth
*/
std::string getDateRateDetails(uint8_t rate);
@@ -795,6 +860,10 @@
*/
bool getTxWait();
+ /** Cancel pending rx windows
+ */
+ void cancelRxWindow();
+
/** Get time on air
* @returns the amount of time (in ms) it would take to send bytes bytes based on current configuration
*/
@@ -869,6 +938,24 @@
*/
int32_t send(const std::vector<uint8_t>& data, const bool& blocking = true, const bool& highBw = false);
+ /** Inject mac command
+ * @param data a vector containing mac commands
+ * @returns MDOT_OK
+ */
+ int32_t injectMacCommand(const std::vector<uint8_t>& data);
+
+ /**
+ * Clear MAC command buffer to be sent in next uplink
+ * @returns MDOT_OK
+ */
+ int32_t clearMacCommands();
+
+ /**
+ * Get MAC command buffer to be sent in next uplink
+ * @returns command bytes
+ */
+ std::vector<uint8_t> getMacCommands();
+
/** Fetch data received from the gateway
* this function only checks to see if a packet has been received - it does not open a receive window
* send() must be called before recv()
@@ -1104,7 +1191,6 @@
int32_t setFlowControl(const bool& on);
bool getFlowControl();
-
// get/set serial clear on error
// if enabled the data read from the serial port will be discarded if it cannot be sent or if the send fails
// set function returns MDOT_OK if success
@@ -1113,8 +1199,26 @@
// MTS_RADIO_DEBUG_COMMANDS
+ /** Disable Duty cycle
+ * enables or disables the duty cycle limitations
+ * **** ONLY TO BE USED FOR TESTINGS PURPOSES ****
+ * **** ALL DEPLOYABLE CODE MUST ADHERE TO LOCAL REGULATIONS ****
+ * **** THIS SETTING WILL NOT BE SAVED TO CONFIGURATION *****
+ * @param val true to disable duty-cycle (default:false)
+ */
+ int32_t setDisableDutyCycle(bool val);
+
+ /** Disable Duty cycle
+ * **** ONLY TO BE USED FOR TESTINGS PURPOSES ****
+ * **** ALL DEPLOYABLE CODE MUST ADHERE TO LOCAL REGULATIONS ****
+ * **** THIS SETTING WILL NOT BE SAVED TO CONFIGURATION *****
+ * @return true if duty-cycle is disabled (default:false)
+ */
+ uint8_t getDisableDutyCycle();
+
void openRxWindow(uint32_t timeout, uint8_t bandwidth = 0);
- void sendContinuous();
+ void closeRxWindow();
+ void sendContinuous(bool enable=true);
int32_t setDeviceId(const std::vector<uint8_t>& id);
int32_t setFrequencyBand(const uint8_t& band);
bool saveProtectedConfig();
@@ -1158,3 +1262,4 @@
};
#endif
+