ver1
Diff: plans/ChannelPlan_US915.h
- Revision:
- 172:7ec44396a51b
- Parent:
- 139:b2e9d643eef9
- Child:
- 178:8f7d93f3bbb5
diff -r 4a3957006cf2 -r 7ec44396a51b plans/ChannelPlan_US915.h --- a/plans/ChannelPlan_US915.h Wed Aug 08 09:33:35 2018 -0500 +++ b/plans/ChannelPlan_US915.h Thu Aug 30 09:05:16 2018 -0500 @@ -23,6 +23,32 @@ namespace lora { + const uint8_t US915_125K_NUM_CHANS = 64; //!< Number of 125k channels in US915 channel plan + const uint8_t US915_500K_NUM_CHANS = 8; //!< Number of 500k channels in US915 channel plan + + const uint32_t US915_125K_FREQ_BASE = 902300000; //!< Frequency base for 125k US915 uplink channels + const uint32_t US915_125K_FREQ_STEP = 200000; //!< Frequency step for 125k US915 uplink channels + + const uint32_t US915_500K_FREQ_BASE = 903000000; //!< Frequency base for 500k US915 uplink channels + const uint32_t US915_500K_FREQ_STEP = 1600000; //!< Frequency step for 500k US915 uplink channels + + const uint32_t US915_500K_DBASE = 923300000; //!< Frequency base for 500k US915 downlink channels + const uint32_t US915_500K_DSTEP = 600000; //!< Frequency step for 500k US915 downlink channels + + const uint32_t US915_FREQ_MIN = 902000000; + const uint32_t US915_FREQ_MAX = 928000000; + + const uint8_t US915_MIN_DATARATE = (uint8_t) DR_0; //!< Minimum transmit datarate for US915 + const uint8_t US915_MAX_DATARATE = (uint8_t) DR_4; //!< Maximum transmit datarate for US915 + + const uint8_t US915_MIN_DATARATE_OFFSET = (uint8_t) 0; //!< Minimum transmit datarate for US915 + const uint8_t US915_MAX_DATARATE_OFFSET = (uint8_t) 3; //!< Maximum transmit datarate for US915 + + const uint8_t US915_BEACON_DR = DR_8; //!< Default beacon datarate + const uint32_t US915_BEACON_FREQ_BASE = 923300000U; //!< Base beacon broadcast frequency + const uint32_t US915_BEACON_FREQ_STEP = 600000U; //!< Step size for beacon frequencies + const uint8_t US915_BEACON_CHANNELS = 8U; //!< Number of beacon channels + class ChannelPlan_US915 : public lora::ChannelPlan { public: @@ -129,9 +155,10 @@ * 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 * @return LORA_OK */ - virtual uint8_t SetRxConfig(uint8_t window, bool continuous); + virtual uint8_t SetRxConfig(uint8_t window, bool continuous, uint16_t wnd_growth); /** * Set frequency sub band if supported by plan @@ -248,6 +275,24 @@ virtual uint8_t GetMaxDatarate(); + /** + * 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); + /** + * 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); + protected: static const uint8_t US915_TX_POWERS[11]; //!< List of available tx powers @@ -255,6 +300,18 @@ static const uint8_t US915_MAX_PAYLOAD_SIZE[]; //!< List of max payload sizes for each datarate static const uint8_t US915_MAX_PAYLOAD_SIZE_REPEATER[]; //!< List of repeater compatible max payload sizes for each datarate + typedef struct __attribute__((packed)) { + uint8_t RFU1[5]; + uint8_t Time[4]; + uint8_t CRC1[2]; + uint8_t GwSpecific[7]; + uint8_t RFU2[3]; + uint8_t CRC2[2]; + } BCNPayload; + + private: + bool _bcnFreqHop; + bool _pingFreqHop; }; }