hello 2

Dependents:   ncu_project

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