hello 2

Dependents:   ncu_project

Committer:
meachwill
Date:
Mon Jan 06 04:13:36 2020 +0000
Revision:
72:bb41d95791a4
Parent:
70:0c5b5b02d17b
hello

Who changed what in which revision?

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