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.

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
-