Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: ChannelPlan.h
- Revision:
- 65:acc0468b9aec
- Parent:
- 64:64982192a2af
- Child:
- 68:5f787643e7d7
--- a/ChannelPlan.h Thu Aug 23 14:18:55 2018 -0500
+++ b/ChannelPlan.h Thu Apr 18 14:55:19 2019 -0500
@@ -16,6 +16,8 @@
#ifndef __CHANNEL_STRATEGY_H__
#define __CHANNEL_STRATEGY_H__
+#include "mbed_events.h"
+
#include "Lora.h"
#include "SxRadio.h"
#include <vector>
@@ -59,6 +61,7 @@
AS923 = DYNAMIC | 0x02,
KR920 = DYNAMIC | 0x03,
AS923_JAPAN = DYNAMIC | 0x04,
+ RU864 = DYNAMIC | 0x05,
NONE = 0xFF,
};
@@ -96,6 +99,11 @@
virtual void SetSettings(Settings* settings);
/**
+ * Setter for the event queue
+ */
+ virtual void SetEventQueue(EventQueue* queue);
+
+ /**
* Get the next channel to use to transmit
* @return LORA_OK if channel was found
* @return LORA_NO_CHANS_ENABLED
@@ -256,9 +264,14 @@
* Set the SxRadio rx config provided window
* @param window to be opened
* @param continuous keep window open
+ * @param wnd_growth factor to increase the rx window by
+ * @param pad_ms time in milliseconds to add to computed window size
* @return LORA_OK
*/
- virtual uint8_t SetRxConfig(uint8_t window, bool continuous) = 0;
+ virtual uint8_t SetRxConfig(uint8_t window,
+ bool continuous,
+ uint16_t wnd_growth = 1,
+ uint16_t pad_ms = 0) = 0;
/**
* Set frequency sub band if supported by plan
@@ -468,8 +481,9 @@
/**
* Get time on air with current settings
* @param bytes number of bytes to be sent
+ * @param cfg for setting up the radio before getting time on air
*/
- virtual uint32_t GetTimeOnAir(uint8_t bytes);
+ virtual uint32_t GetTimeOnAir(uint8_t bytes, RadioCfg_t cfg = TX_RADIO_CFG);
/**
* Reset the duty timers with the current time off air
@@ -556,11 +570,39 @@
* use to clear downlink channels on join
*/
virtual void ClearChannels();
-
+
+ /**
+ * Check if this packet is a beacon and if so extract parameters needed
+ * @param payload of potential beacon
+ * @param size of the packet
+ * @param [out] data extracted from the beacon if this packet was indeed a beacon
+ * @return true if this packet is beacon, false if not
+ */
+ virtual bool DecodeBeacon(const uint8_t* payload,
+ size_t size,
+ BeaconData_t& data) = 0;
+
+ /**
+ * Update class B beacon and ping slot settings if frequency hopping enabled
+ * @param time received in the last beacon
+ * @param period of the beacon
+ * @param devAddr of this end device
+ */
+ virtual void FrequencyHop(uint32_t time, uint32_t period, uint32_t devAddr) { }
+
+
+ /*
+ * Get default number of channels for a plan
+ */
+ virtual uint8_t GetNumDefaultChans();
protected:
SxRadio* GetRadio(); //!< Get pointer to the SxRadio object or assert if it is null
Settings* GetSettings(); //!< Get pointer to the settings object or assert if it is null
+ /**
+ * 16 bit ITU-T CRC implementation
+ */
+ uint16_t CRC16(const uint8_t* data, size_t size);
uint8_t _txChannel; //!< Current channel for transmit
uint8_t _txFrequencySubBand; //!< Current frequency sub band for hybrid operation
@@ -578,9 +620,6 @@
uint32_t _minFrequency; //!< Minimum Frequency
uint32_t _maxFrequency; //!< Maximum Frequency
- Channel _beaconChannel; //!< Beacon window settings
- Channel _beaconRxChannel; //!< Beacon slot rx window settings
-
uint8_t _minDatarate; //!< Minimum datarate to accept in ADR request
uint8_t _maxDatarate; //!< Maximum datarate to accept in ADR request
@@ -599,18 +638,19 @@
uint8_t _numChans; //!< Number of total channels in plan
uint8_t _numChans125k; //!< Number of 125K channels in plan
uint8_t _numChans500k; //!< Number of 500K channels in plan
-
+ uint8_t _numDefaultChans; //!< Number of default channels in plan
+
uint16_t _LBT_TimeUs; //!< Sample time in us for LBT
int8_t _LBT_Threshold; //!< Threshold in dBm for LBT
std::vector<uint16_t> _channelMask; //!< Bit mask for currently enabled channels
Timer _dutyCycleTimer; //!< Timer for tracking time-off-air
- RtosTimer _txDutyTimer; //!< Event timer for expiration of time-off-air
+ int _txDutyEvtId; //!< Event ID for expiration of time-off-air
bool _txDutyCyclePending; //!< Flag for pending duty cycle event
- static void OnTxDutyCycleEvent(const void* arg); //!< Rtos callback for duty cycle event
+ void OnTxDutyCycleEvent(); //!< Callback for duty cycle event
void OnTxDutyCycleEventBottom(); //!< Callback for duty cycle event
static const uint8_t* TX_POWERS; //!< List of available tx powers
@@ -625,6 +665,7 @@
SxRadio* _radio; //!< Injected SxRadio dependency
Settings* _settings; //!< Current settings
+ EventQueue* _evtQueue; //!< mbed Event Queue
};
}