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
--- 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 -