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: Mote.h
- Revision:
- 16:e4f80db195b6
- Parent:
- 15:b50f92f1c6ff
- Child:
- 17:0da384ba484b
--- a/Mote.h Thu Aug 18 16:07:10 2016 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,257 +0,0 @@
-/** __ ___ ____ _ ______ __ ____ __ ____
- * / |/ /_ __/ / /_(_)__/_ __/__ ____/ / / __/_ _____ / /____ __ _ ___ / _/__ ____
- * / /|_/ / // / / __/ /___// / / -_) __/ _ \ _\ \/ // (_-</ __/ -_) ' \(_-< _/ // _ \/ __/ __
- * /_/ /_/\_,_/_/\__/_/ /_/ \__/\__/_//_/ /___/\_, /___/\__/\__/_/_/_/___/ /___/_//_/\__/ /_/
- * Copyright (C) 2015 by Multi-Tech Systems /___/
- *
- *
- * @author Jason Reiss
- * @date 10-31-2015
- * @brief lora::Mote provides a user level class that abstracts the complexity of the Mac layer
- *
- * @details
- *
- */
-
-#ifndef __LORA_MOTE_H__
-#define __LORA_MOTE_H__
-
-#include "rtos.h"
-#include "MacEvents.h"
-#include <vector>
-
-class SxRadio;
-class SxRadio1272;
-
-namespace lora {
-
- class Mac;
- class ChannelPlan;
-
- class MoteEvents: public MacEvents {
-
- /**
- * Fired at end of TX
- * @param dr datarate used for TX
- */
- virtual void TxDone(uint8_t dr);
-
- /**
- * Fired if TX timed out
- */
- virtual void TxTimeout(void);
-
- /**
- * Fired when JoinAccept message is received and MIC is validated
- * @param payload received bytes
- * @param size number of received bytes
- * @param rssi of received packet
- * @param snr of received packet
- */
- virtual void JoinAccept(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr);
-
- /**
- * Fired when JoinAccept message is received and MIC is not valid
- * @param payload received bytes
- * @param size number of received bytes
- * @param rssi of received packet
- * @param snr of received packet
- */
- virtual void JoinFailed(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr);
-
- /**
- * Fired when non duplicate packet is received and MIC is valid
- * @param port of packet
- * @param payload received bytes
- * @param size number of received bytes
- * @param rssi of received packet
- * @param snr of received packet
- * @param ctrl Downlink control field of packet
- * @param slot rx window packet was received
- * @param retries number of attempts before ack was received
- */
- virtual void PacketRx(uint8_t port, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr, lora::DownlinkControl ctrl, uint8_t slot, uint8_t retries = 0);
-
- /**
- * Fired when radio has received a packet, packet is not validated
- * @param payload received bytes
- * @param size number of received bytes
- * @param rssi of received packet
- * @param snr of received packet
- * @param ctrl Downlink control field of packet
- * @param slot rx window packet was received
- */
- virtual void RxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr, lora::DownlinkControl ctrl, uint8_t slot);
-
- /**
- * Fired if rx window times out
- * @param slot rx window that timed out
- */
- virtual void RxTimeout(uint8_t slot);
-
- /**
- * Fired if rx CRC error
- * @param slot rx window that errored
- */
- virtual void RxError(uint8_t slot);
-
- /**
- * Fired if pong packet is received
- * @param m_rssi of received packet at mote
- * @param m_snr of received packet at mote
- * @param s_rssi of received packet at server
- * @param s_snr of received packet at server
- */
- virtual void Pong(int16_t m_rssi, int8_t m_snr, int16_t s_rssi, int8_t s_snr);
-
- /**
- * Fired if network link check answer is received
- * @param m_rssi of received packet at mote
- * @param m_snr of received packet at mote
- * @param s_snr margin of received packet at server
- * @param s_gateways number of gateways reporting the packet
- */
- virtual void NetworkLinkCheck(int16_t m_rssi, int8_t m_snr, int8_t s_snr, uint8_t s_gateways);
-
- /**
- * Callback to for device to measure the battery level and report to server
- * @return battery level 0-255, 0 - external power, 1-254 level min-max, 255 device unable to measure battery
- */
- virtual uint8_t MeasureBattery();
- };
-
- class Mote {
- public:
- Mote(Settings* settings);
- virtual ~Mote();
-
- /**
- * Indicator for network session join status
- * @return true if joined to network
- */
- bool Joined();
-
- /**
- * Send join request
- * @return LORA_OK if request was sent
- */
- uint8_t Join();
-
- /**
- * Send a packet
- * @param port to send packet
- * @param payload of packet
- * @param size in bytes
- * @return LORA_OK if successful
- * @return LORA_MAX_PAYLOAD_EXCEEDED if payload size exceeds datarate maximum
- * @return LORA_NO_CHANS_ENABLED if there is not an available channel that supports the current datarate
- * @return LORA_LINK_BUSY if link was busy
- * @return LORA_RADIO_BUSY if radio was busy
- * @return LORA_BUFFER_FULL if mac commands filled the packet, client should resend the packet
- */
- uint8_t Send(uint8_t port, const uint8_t* payload, uint8_t size);
-
- /**
- * Configure the channel plan
- * @param freqBand EU868, US915, AU915
- * @return LORA_OK
- */
- uint8_t SetChannelPlan(uint8_t freqBand);
-
- /**
- * Get the channel mask of currently enabled channels
- * @return vector containing channel bit masks
- */
- std::vector<uint16_t> GetChannelMask();
-
- /**
- * Set a 16 bit channel mask with index
- * @param index of mask to set 0:0-15, 1:16-31 ...
- * @param mask 16 bit mask of enabled channels
- * @return true
- */
- virtual uint8_t SetChannelMask(uint8_t index, uint16_t mask);
-
- /**
- * Set the current channel group for hybrid operation 1-8 else 0 for 64 channel operation
- * @param group 0-8
- */
- uint8_t SetChannelGroup(uint8_t group);
-
- /**
- * Get the current channel group
- * @return group 0-8
- */
- uint8_t GetChannelGroup();
-
- /**
- * Add a channel to the channel plan
- * EU868 allows additional channels to be added
- * Channels 0-2 are fixed default channels
- *
- * @param index of the channel
- * @param frequency of the channel or 0 to remove channel
- * @param range of datarates allowed by the channel
- * @return LORA_OK if channel was added
- */
- uint8_t AddChannel(uint8_t index, uint32_t frequency, lora::DatarateRange range);
-
- /**
- * Set network mode
- * Choose Public LoRaWAN mode or Private Multitech mode
- *
- * Public mode uses 0x34 sync word with 5/6 second join windows
- * Private mode uses 0x12 sync word with 1/2 second join windows
- * US915/AU915 Rx1 and Rx2 are fixed per Channel Group setting
- *
- * @param mode public or private
- * @return LORA_OK
- */
- uint8_t SetNetworkMode(uint8_t mode);
-
- /**
- * Get a pointer to the mac layer
- * @return Mac mac
- */
- Mac* GetMac();
-
- /**
- * Get a pointer to the radio
- * Can be used to read radio registers or get a random value based on RSSI
- *
- * @return SxRadio pointer
- */
- SxRadio* GetRadio();
-
- /**
- * Get the current statistics for the device
- * @return Statistics
- */
- Statistics& GetStats();
-
- /**
- * Get time on air with current settings for provided payload bytes
- * 13 overhead bytes will be added to payload
- * @param bytes of payload data
- * @return time-on-air in ms
- */
- uint32_t GetTimeOnAir(uint8_t bytes);
-
- /**
- * Call before setting device in sleep mode to place radio in sleep
- */
- void Sleep();
-
- protected:
- SxRadio1272* _radio;
- Settings* _settings;
- Mac* _mac;
-
- private:
- ChannelPlan* _plan;
- MoteEvents _events;
- };
-
-}
-#endif
-