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:
- 17:0da384ba484b
- Parent:
- 15:b50f92f1c6ff
diff -r e4f80db195b6 -r 0da384ba484b mDot.h
--- a/mDot.h Fri Nov 18 10:29:43 2016 -0600
+++ b/mDot.h Fri Nov 18 11:10:04 2016 -0600
@@ -5,16 +5,17 @@
#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:
@@ -26,8 +27,6 @@
__WFI();
}
- void initLora();
-
void setLastError(const std::string& str);
static bool validateBaudRate(const uint32_t& baud);
@@ -62,11 +61,10 @@
static mDot* _instance;
- lora::Mote _mote;
+ LoRaMac* _mac;
+ MdotRadio* _radio;
+ LoRaMacEvent* _events;
LoRaConfig* _config;
- lora::Settings _settings;
- mDotEvent* _events;
-
Thread _idle_thread;
std::string _last_error;
static const uint32_t _baud_rates[];
@@ -116,7 +114,7 @@
} mdot_ret_code;
enum JoinMode {
- MANUAL = 0,
+ MANUAL,
OTA,
AUTO_OTA,
PEER_TO_PEER
@@ -160,11 +158,8 @@
};
enum FrequencyBands {
- FB_868 = 0,
- FB_915 = 1,
- FB_EU868 = 0, // EU868
- FB_US915 = 1, // US915
- FB_AU915 = 2
+ FB_868, // EU868
+ FB_915 // US915
};
enum FrequencySubBands {
@@ -205,7 +200,7 @@
typedef struct {
int16_t fd;
- char name[33];
+ char name[30];
uint32_t size;
} mdot_file;
@@ -215,7 +210,6 @@
uint32_t Joins;
uint32_t JoinFails;
uint32_t MissedAcks;
- uint32_t CRCErrors;
} mdot_stats;
typedef struct {
@@ -338,10 +332,6 @@
*/
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
*/
@@ -561,14 +551,13 @@
*/
void saveNetworkSession();
- /** Set number of times joining will retry each sub-band before changing
- * to the next subband in US915 and AU915
+ /** Set number of times joining will retry before giving up
* @param retries must be between 0 - 255
* @returns MDOT_OK if success
*/
int32_t setJoinRetries(const uint8_t& retries);
- /** Get number of times joining will retry each sub-band
+ /** Set number of times joining will retry before giving up
* @returns join retries (0 - 255)
*/
uint8_t getJoinRetries();
@@ -691,42 +680,6 @@
*/
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
@@ -759,22 +712,11 @@
*/
bool getDataPending();
- /** Get ack requested
- * only valid after sending data to the gateway
- * @returns true if server has requested ack
- */
- bool getAckRequested();
-
- /** Get is transmitting indicator
+ /** Get transmitting
* @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
@@ -792,6 +734,7 @@
*/
uint32_t getRadioRandom();
+
/** Get data rate spreading factor and bandwidth
* EU868 Datarates
* ---------------
@@ -812,14 +755,6 @@
* 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);
@@ -860,10 +795,6 @@
*/
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
*/
@@ -938,24 +869,6 @@
*/
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()
@@ -1191,6 +1104,7 @@
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
@@ -1199,26 +1113,8 @@
// 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 closeRxWindow();
- void sendContinuous(bool enable=true);
+ void sendContinuous();
int32_t setDeviceId(const std::vector<uint8_t>& id);
int32_t setFrequencyBand(const uint8_t& band);
bool saveProtectedConfig();
@@ -1262,4 +1158,3 @@
};
#endif
-