hello 2
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 }; }