fota lib for mdot

Dependents:   UQ_LoraWAN

Committer:
Jenkins@KEILDM1.dc.multitech.prv
Date:
Fri Sep 14 15:39:09 2018 -0500
Revision:
3:63d10f2375ea
fota lib updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 1 /*
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 2 / _____) _ | |
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 3 ( (____ _____ ____ _| |_ _____ ____| |__
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 5 _____) ) ____| | | || |_| ____( (___| | | |
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 7 (C)2013 Semtech
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 8
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 9 Description: Generic radio driver definition
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 10
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 11 License: Revised BSD License, see LICENSE.TXT file include in the project
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 12
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 13 Maintainer: Miguel Luis and Gregory Cristian
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 14 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 15 #ifndef __SXRADIO_H__
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 16 #define __SXRADIO_H__
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 17
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 18 #include <stdint.h>
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 19 #include "rtos.h"
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 20 #include "SxRadioEvents.h"
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 21
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 22 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 23 * \brief Radio driver definition
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 24 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 25 class SxRadio
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 26 {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 27 public:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 28 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 29 * Radio driver supported modems
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 30 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 31 typedef enum
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 32 {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 33 MODEM_FSK = 0,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 34 MODEM_LORA,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 35 }RadioModems_t;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 36
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 37 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 38 * Radio driver internal state machine states definition
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 39 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 40 typedef enum
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 41 {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 42 RF_IDLE = 0,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 43 RF_RX_RUNNING,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 44 RF_TX_RUNNING,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 45 RF_CAD,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 46 }RadioState_t;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 47
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 48 SxRadio(uint32_t WakeupTime) : WakeupTime(WakeupTime), State(RF_IDLE), Modem(MODEM_LORA) { }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 49 virtual ~SxRadio() {};
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 50
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 51 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 52 * \brief Initializes the radio
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 53 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 54 * \param [IN] events Structure containing the driver callback functions
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 55 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 56 virtual void Init( SxRadioEvents *events ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 57 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 58 * \brief Prepares the radio for destruction
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 59 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 60 virtual void Terminate( void ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 61 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 62 * Return current radio status
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 63 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 64 * \param status Radio status.[RF_IDLE, RF_RX_RUNNING, RF_TX_RUNNING]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 65 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 66 virtual RadioState_t Status( void ) { return State; }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 67 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 68 * \brief Configures the radio with the given modem
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 69 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 70 * \param [IN] modem Modem to be used [0: FSK, 1: LoRa]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 71 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 72 virtual void SetModem( RadioModems_t modem ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 73 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 74 * \brief Sets the channel frequency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 75 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 76 * \param [IN] freq Channel RF frequency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 77 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 78 virtual void SetChannel( uint32_t freq ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 79 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 80 * \brief Sets the channels configuration
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 81 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 82 * \param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 83 * \param [IN] freq Channel RF frequency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 84 * \param [IN] rssiThresh RSSI threshold
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 85 * \param [IN] rssiVal pointer to variable to hold RSSI value if desired - ignored if NULL
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 86 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 87 * \retval isFree [true: Channel is free, false: Channel is not free]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 88 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 89 virtual bool IsChannelFree( RadioModems_t modem, uint32_t freq, uint8_t datarate, int16_t rssiThresh, uint8_t bandwidth, uint32_t timeout = 5000, int16_t *rssiVal = NULL ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 90 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 91 * \brief Generates a 32 bits random value based on the RSSI readings
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 92 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 93 * \remark This function sets the radio in LoRa modem mode and disables
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 94 * all interrupts.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 95 * After calling this function either Radio.SetRxConfig or
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 96 * Radio.SetTxConfig functions must be called.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 97 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 98 * \retval randomValue 32 bits random value
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 99 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 100 virtual uint32_t Random( void ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 101 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 102 * \brief Sets the reception parameters
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 103 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 104 * \param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 105 * \param [IN] bandwidth Sets the bandwidth
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 106 * FSK : >= 2600 and <= 250000 Hz
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 107 * LoRa: [0: 125 kHz, 1: 250 kHz,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 108 * 2: 500 kHz, 3: Reserved]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 109 * \param [IN] datarate Sets the Datarate
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 110 * FSK : 600..300000 bits/s
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 111 * LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 112 * 10: 1024, 11: 2048, 12: 4096 chips]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 113 * \param [IN] coderate Sets the coding rate (LoRa only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 114 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 115 * LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 116 * \param [IN] bandwidthAfc Sets the AFC Bandwidth (FSK only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 117 * FSK : >= 2600 and <= 250000 Hz
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 118 * LoRa: N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 119 * \param [IN] preambleLen Sets the Preamble length
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 120 * FSK : Number of bytes
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 121 * LoRa: Length in symbols (the hardware adds 4 more symbols)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 122 * \param [IN] symbTimeout Sets the RxSingle timeout value (LoRa only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 123 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 124 * LoRa: timeout in symbols
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 125 * \param [IN] fixLen Fixed length packets [0: variable, 1: fixed]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 126 * \param [IN] payloadLen Sets payload length when fixed length is used
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 127 * \param [IN] crcOn Enables/Disables the CRC [0: OFF, 1: ON]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 128 * \param [IN] FreqHopOn Enables disables the intra-packet frequency hopping
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 129 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 130 * LoRa: [0: OFF, 1: ON]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 131 * \param [IN] HopPeriod Number of symbols bewteen each hop
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 132 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 133 * LoRa: Number of symbols
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 134 * \param [IN] iqInverted Inverts IQ signals (LoRa only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 135 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 136 * LoRa: [0: not inverted, 1: inverted]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 137 * \param [IN] rxContinuous Sets the reception in continuous mode
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 138 * [false: single mode, true: continuous mode]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 139 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 140 virtual void SetRxConfig( RadioModems_t modem, uint32_t bandwidth,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 141 uint32_t datarate, uint8_t coderate,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 142 uint32_t bandwidthAfc, uint16_t preambleLen,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 143 uint16_t symbTimeout, bool fixLen,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 144 uint8_t payloadLen,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 145 bool crcOn, bool FreqHopOn, uint8_t HopPeriod,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 146 bool iqInverted, bool rxContinuous ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 147 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 148 * \brief Sets the transmission parameters
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 149 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 150 * \param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 151 * \param [IN] power Sets the output power [dBm]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 152 * \param [IN] fdev Sets the frequency deviation (FSK only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 153 * FSK : [Hz]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 154 * LoRa: 0
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 155 * \param [IN] bandwidth Sets the bandwidth (LoRa only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 156 * FSK : 0
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 157 * LoRa: [0: 125 kHz, 1: 250 kHz,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 158 * 2: 500 kHz, 3: Reserved]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 159 * \param [IN] datarate Sets the Datarate
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 160 * FSK : 600..300000 bits/s
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 161 * LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 162 * 10: 1024, 11: 2048, 12: 4096 chips]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 163 * \param [IN] coderate Sets the coding rate (LoRa only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 164 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 165 * LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 166 * \param [IN] preambleLen Sets the preamble length
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 167 * FSK : Number of bytes
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 168 * LoRa: Length in symbols (the hardware adds 4 more symbols)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 169 * \param [IN] fixLen Fixed length packets [0: variable, 1: fixed]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 170 * \param [IN] crcOn Enables disables the CRC [0: OFF, 1: ON]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 171 * \param [IN] FreqHopOn Enables disables the intra-packet frequency hopping
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 172 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 173 * LoRa: [0: OFF, 1: ON]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 174 * \param [IN] HopPeriod Number of symbols bewteen each hop
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 175 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 176 * LoRa: Number of symbols
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 177 * \param [IN] iqInverted Inverts IQ signals (LoRa only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 178 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 179 * LoRa: [0: not inverted, 1: inverted]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 180 * \param [IN] timeout Transmission timeout [us]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 181 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 182 virtual void SetTxConfig( RadioModems_t modem, int8_t power, uint32_t fdev,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 183 uint32_t bandwidth, uint32_t datarate,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 184 uint8_t coderate, uint16_t preambleLen,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 185 bool fixLen, bool crcOn, bool FreqHopOn,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 186 uint8_t HopPeriod, bool iqInverted, uint32_t timeout ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 187
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 188 virtual void SetTxContinuous(bool enable) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 189
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 190 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 191 * \brief Checks if the given RF frequency is supported by the hardware
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 192 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 193 * \param [IN] frequency RF frequency to be checked
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 194 * \retval isSupported [true: supported, false: unsupported]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 195 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 196 virtual bool CheckRfFrequency( uint32_t frequency ) { return true; }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 197 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 198 * \brief Computes the packet time on air for the given payload
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 199 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 200 * \Remark Can only be called once SetRxConfig or SetTxConfig have been called
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 201 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 202 * \param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 203 * \param [IN] pktLen Packet payload length
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 204 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 205 * \retval airTime Computed airTime for the given packet payload length
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 206 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 207 virtual double TimeOnAir( RadioModems_t modem, uint8_t pktLen ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 208 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 209 * \brief Sends the buffer of size. Prepares the packet to be sent and sets
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 210 * the radio in transmission
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 211 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 212 * \param [IN]: buffer Buffer pointer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 213 * \param [IN]: size Buffer size
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 214 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 215 virtual void Send( const uint8_t *buffer, uint8_t size ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 216 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 217 * \brief Sets the radio in sleep mode
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 218 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 219 virtual void Sleep( void ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 220 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 221 * \brief Sets the radio in standby mode
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 222 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 223 virtual void Standby( void ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 224 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 225 * \brief Sets the radio in reception mode for the given time
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 226 * \param [IN] timeout Reception timeout [us]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 227 * [0: continuous, others timeout]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 228 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 229 virtual void Rx( uint32_t timeout ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 230 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 231 * \brief Start a Channel Activity Detection
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 232 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 233 virtual void StartCad( void ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 234 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 235 * \brief Reads the current RSSI value
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 236 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 237 * \retval rssiValue Current RSSI value in [dBm]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 238 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 239 virtual int16_t Rssi( RadioModems_t modem ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 240 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 241 * \brief Writes the radio register at the specified address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 242 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 243 * \param [IN]: addr Register address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 244 * \param [IN]: data New register value
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 245 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 246 virtual void Write( uint8_t addr, uint8_t data ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 247 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 248 * \brief Reads the radio register at the specified address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 249 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 250 * \param [IN]: addr Register address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 251 * \retval data Register value
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 252 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 253 virtual uint8_t Read ( uint8_t addr ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 254 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 255 * \brief Writes multiple radio registers starting at address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 256 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 257 * \param [IN] addr First Radio register address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 258 * \param [IN] buffer Buffer containing the new register's values
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 259 * \param [IN] size Number of registers to be written
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 260 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 261 virtual void WriteBuffer( uint8_t addr, const uint8_t *buffer, uint8_t size ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 262 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 263 * \brief Reads multiple radio registers starting at address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 264 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 265 * \param [IN] addr First Radio register address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 266 * \param [OUT] buffer Buffer where to copy the registers data
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 267 * \param [IN] size Number of registers to be read
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 268 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 269 virtual void ReadBuffer( uint8_t addr, uint8_t *buffer, uint8_t size ) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 270
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 271 virtual void SignalMacEvent(void) {};
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 272
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 273 virtual void ResetRadio(void) {};
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 274
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 275 virtual uint32_t GetTimeOnAir(void) = 0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 276
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 277 void GrabMutex(void) { mutex.lock(); }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 278 void ReleaseMutex(void) { mutex.unlock(); }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 279
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 280 const uint32_t WakeupTime;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 281
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 282 protected:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 283 RadioState_t State;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 284
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 285 RadioModems_t Modem;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 286
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 287 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 288 * Access protection
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 289 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 290 Mutex mutex;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 291 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 292
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 293 #endif // __SXRADIO_H__
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 294