khang_91

Committer:
nguyenhoang9x5555
Date:
Tue Jun 23 07:26:42 2020 +0000
Revision:
183:16414698889c
Parent:
172:7ec44396a51b
Child:
179:578d8030ba57
phienbanthunghiem

Who changed what in which revision?

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