Library for LoRa communication using MultiTech MDOT. Not sure why it wants to republish this
Fork of libmDot by
Diff: mDot.h
- Revision:
- 15:b50f92f1c6ff
- Parent:
- 11:9938ba31d428
--- 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 +