Based on SX1276Lib. Simplified and targeted for Modtronix inAir modules. All pins can now be specified to use interrupts or general purpose I/O pins.

Committer:
modtronix-com
Date:
Fri Aug 19 15:50:18 2016 +1000
Revision:
10:0bf8f2dbefb7
Parent:
9:9a77e2c7c5e8
Added tag v1.1 for changeset 9a77e2c7c5e8

Who changed what in which revision?

UserRevisionLine numberNew contents of line
modtronix 0:4041fad070ec 1 /*
modtronix 0:4041fad070ec 2 / _____) _ | |
modtronix 0:4041fad070ec 3 ( (____ _____ ____ _| |_ _____ ____| |__
modtronix 0:4041fad070ec 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
modtronix 0:4041fad070ec 5 _____) ) ____| | | || |_| ____( (___| | | |
modtronix 0:4041fad070ec 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
modtronix 0:4041fad070ec 7 ( C )2014 Semtech
modtronix 0:4041fad070ec 8
modtronix 0:4041fad070ec 9 Description: Interface for the radios, contains the main functions that a radio needs, and 5 callback functions
modtronix 0:4041fad070ec 10
modtronix 0:4041fad070ec 11 License: Revised BSD License, see LICENSE.TXT file include in the project
modtronix 0:4041fad070ec 12
modtronix 0:4041fad070ec 13 Maintainers: Miguel Luis, Gregory Cristian and Nicolas Huguenin
modtronix 0:4041fad070ec 14 */
modtronix 0:4041fad070ec 15 #ifndef __RADIO_H__
modtronix 0:4041fad070ec 16 #define __RADIO_H__
modtronix 0:4041fad070ec 17
modtronix 0:4041fad070ec 18
modtronix 0:4041fad070ec 19 /*!
modtronix 0:4041fad070ec 20 * State of the radio:
modtronix 0:4041fad070ec 21 * [IDLE,
modtronix 0:4041fad070ec 22 * RX_RUNNING, RX_TIMEOUT, RX_ERROR,
modtronix 0:4041fad070ec 23 * TX_RUNNING, TX_TIMEOUT, CAD]
modtronix 0:4041fad070ec 24 */
modtronix 0:4041fad070ec 25 enum RadioState
modtronix 0:4041fad070ec 26 {
modtronix-com 3:8a08d9633b93 27 IDLE,
modtronix 0:4041fad070ec 28 LOWPOWER,
modtronix 0:4041fad070ec 29
modtronix 0:4041fad070ec 30 TX_DONE,
modtronix 0:4041fad070ec 31 TX_TIMEOUT,
modtronix 0:4041fad070ec 32
modtronix-com 3:8a08d9633b93 33 RX_DONE,
modtronix-com 3:8a08d9633b93 34 RX_TIMEOUT,
modtronix-com 3:8a08d9633b93 35 RX_ERROR,
modtronix-com 3:8a08d9633b93 36
modtronix 0:4041fad070ec 37 CAD,
modtronix 0:4041fad070ec 38 CAD_DONE
modtronix 0:4041fad070ec 39 };
modtronix 0:4041fad070ec 40
modtronix 0:4041fad070ec 41 /*!
modtronix 0:4041fad070ec 42 * Type of the modem. [LORA / FSK]
modtronix 0:4041fad070ec 43 */
modtronix 0:4041fad070ec 44 enum ModemType
modtronix 0:4041fad070ec 45 {
modtronix 0:4041fad070ec 46 MODEM_FSK = 0,
modtronix 0:4041fad070ec 47 MODEM_LORA
modtronix 0:4041fad070ec 48 };
modtronix 0:4041fad070ec 49
modtronix 0:4041fad070ec 50 /*!
modtronix 0:4041fad070ec 51 * Type of the supported board. [SX1276MB1MAS / SX1276MB1LAS]
modtronix 0:4041fad070ec 52 */
modtronix 0:4041fad070ec 53 enum BoardType
modtronix 0:4041fad070ec 54 {
modtronix 0:4041fad070ec 55 SX1276MB1MAS = 0,
modtronix 0:4041fad070ec 56 SX1276MB1LAS,
modtronix 0:4041fad070ec 57 UNKNOWN
modtronix 0:4041fad070ec 58 };
modtronix 0:4041fad070ec 59
modtronix 0:4041fad070ec 60 /*!
modtronix 0:4041fad070ec 61 * Type of the supported board. [BOARD_INAIR4 / BOARD_INAIR9]
modtronix 0:4041fad070ec 62 */
modtronix 0:4041fad070ec 63 enum BoardTypeInAir
modtronix 0:4041fad070ec 64 {
modtronix 0:4041fad070ec 65 BOARD_INAIR4 = 0,
modtronix 0:4041fad070ec 66 BOARD_INAIR9,
modtronix 0:4041fad070ec 67 BOARD_INAIR9B,
modtronix 0:4041fad070ec 68 BOARD_UNKNOWN
modtronix 0:4041fad070ec 69 };
modtronix 0:4041fad070ec 70 /*!
modtronix 0:4041fad070ec 71 * Radio FSK modem parameters
modtronix 0:4041fad070ec 72 */
modtronix 0:4041fad070ec 73 typedef struct
modtronix 0:4041fad070ec 74 {
modtronix 0:4041fad070ec 75 int8_t Power;
modtronix 0:4041fad070ec 76 uint32_t Fdev;
modtronix 0:4041fad070ec 77 uint32_t Bandwidth;
modtronix 0:4041fad070ec 78 uint32_t BandwidthAfc;
modtronix 0:4041fad070ec 79 uint32_t Datarate;
modtronix 0:4041fad070ec 80 uint16_t PreambleLen;
modtronix 0:4041fad070ec 81 bool FixLen;
modtronix 0:4041fad070ec 82 uint8_t PayloadLen;
modtronix 0:4041fad070ec 83 bool CrcOn;
modtronix 0:4041fad070ec 84 bool IqInverted;
modtronix 0:4041fad070ec 85 bool RxContinuous;
modtronix 0:4041fad070ec 86 uint32_t TxTimeout;
modtronix 0:4041fad070ec 87 }RadioFskSettings_t;
modtronix 0:4041fad070ec 88
modtronix 0:4041fad070ec 89 /*!
modtronix 0:4041fad070ec 90 * Radio FSK packet handler state
modtronix 0:4041fad070ec 91 */
modtronix 0:4041fad070ec 92 typedef struct
modtronix 0:4041fad070ec 93 {
modtronix 0:4041fad070ec 94 uint8_t PreambleDetected;
modtronix 0:4041fad070ec 95 uint8_t SyncWordDetected;
modtronix 0:4041fad070ec 96 int8_t RssiValue;
modtronix 0:4041fad070ec 97 int32_t AfcValue;
modtronix 0:4041fad070ec 98 uint8_t RxGain;
modtronix 0:4041fad070ec 99 uint16_t Size;
modtronix 0:4041fad070ec 100 uint16_t NbBytes;
modtronix 0:4041fad070ec 101 uint8_t FifoThresh;
modtronix 0:4041fad070ec 102 uint8_t ChunkSize;
modtronix 0:4041fad070ec 103 }RadioFskPacketHandler_t;
modtronix 0:4041fad070ec 104
modtronix 0:4041fad070ec 105 /*!
modtronix 0:4041fad070ec 106 * Radio LoRa modem parameters
modtronix 0:4041fad070ec 107 */
modtronix 0:4041fad070ec 108 typedef struct
modtronix 0:4041fad070ec 109 {
modtronix 0:4041fad070ec 110 int8_t Power;
modtronix 0:4041fad070ec 111 uint32_t Bandwidth;
modtronix 0:4041fad070ec 112 uint32_t Datarate;
modtronix 0:4041fad070ec 113 bool LowDatarateOptimize;
modtronix 0:4041fad070ec 114 uint8_t Coderate;
modtronix 0:4041fad070ec 115 uint16_t PreambleLen;
modtronix 0:4041fad070ec 116 bool FixLen;
modtronix 0:4041fad070ec 117 uint8_t PayloadLen;
modtronix 0:4041fad070ec 118 bool CrcOn;
modtronix 0:4041fad070ec 119 bool FreqHopOn;
modtronix 0:4041fad070ec 120 uint8_t HopPeriod;
modtronix 0:4041fad070ec 121 bool IqInverted;
modtronix 0:4041fad070ec 122 bool RxContinuous;
modtronix 0:4041fad070ec 123 uint32_t TxTimeout;
modtronix 0:4041fad070ec 124 }RadioLoRaSettings_t;
modtronix 0:4041fad070ec 125
modtronix 0:4041fad070ec 126 /*!
modtronix 0:4041fad070ec 127 * Radio LoRa packet handler state
modtronix 0:4041fad070ec 128 */
modtronix 0:4041fad070ec 129 typedef struct
modtronix 0:4041fad070ec 130 {
modtronix 0:4041fad070ec 131 int8_t SnrValue;
modtronix-com 5:1a255cc8d54a 132 int16_t RssiValue;
modtronix 0:4041fad070ec 133 uint8_t Size;
modtronix 0:4041fad070ec 134 }RadioLoRaPacketHandler_t;
modtronix 0:4041fad070ec 135
modtronix 0:4041fad070ec 136 /*!
modtronix 0:4041fad070ec 137 * Radio Settings
modtronix 0:4041fad070ec 138 */
modtronix 0:4041fad070ec 139 typedef struct
modtronix 0:4041fad070ec 140 {
modtronix 0:4041fad070ec 141 RadioState State;
modtronix 0:4041fad070ec 142 ModemType Modem;
modtronix 0:4041fad070ec 143 uint32_t Channel;
modtronix 0:4041fad070ec 144 RadioFskSettings_t Fsk;
modtronix 0:4041fad070ec 145 RadioFskPacketHandler_t FskPacketHandler;
modtronix 0:4041fad070ec 146 RadioLoRaSettings_t LoRa;
modtronix 0:4041fad070ec 147 RadioLoRaPacketHandler_t LoRaPacketHandler;
modtronix 0:4041fad070ec 148 }RadioSettings_t;
modtronix 0:4041fad070ec 149
modtronix 0:4041fad070ec 150
modtronix 0:4041fad070ec 151
modtronix 0:4041fad070ec 152 /*!
modtronix 0:4041fad070ec 153 * Interface for the radios, contains the main functions that a radio needs, and 5 callback functions
modtronix 0:4041fad070ec 154 */
modtronix 0:4041fad070ec 155 class Radio
modtronix 0:4041fad070ec 156 {
modtronix 0:4041fad070ec 157 protected:
modtronix 0:4041fad070ec 158
modtronix 0:4041fad070ec 159 //-------------------------------------------------------------------------
modtronix 0:4041fad070ec 160 // Callback functions pointers
modtronix 0:4041fad070ec 161 //-------------------------------------------------------------------------
modtronix 0:4041fad070ec 162
modtronix 0:4041fad070ec 163 /*!
modtronix 0:4041fad070ec 164 * @brief Tx Done callback prototype.
modtronix 0:4041fad070ec 165 */
modtronix 0:4041fad070ec 166 void ( *txDone )( );
modtronix 0:4041fad070ec 167
modtronix 0:4041fad070ec 168 /*!
modtronix 0:4041fad070ec 169 * @brief Tx Timeout callback prototype.
modtronix 0:4041fad070ec 170 */
modtronix 0:4041fad070ec 171 void ( *txTimeout ) ( );
modtronix 0:4041fad070ec 172
modtronix 0:4041fad070ec 173 /*!
modtronix 0:4041fad070ec 174 * @brief Rx Done callback prototype.
modtronix 0:4041fad070ec 175 *
modtronix 0:4041fad070ec 176 * @param [IN] payload Received buffer pointer
modtronix 0:4041fad070ec 177 * @param [IN] size Received buffer size
modtronix 0:4041fad070ec 178 * @param [IN] rssi RSSI value computed while receiving the frame [dBm]
modtronix 0:4041fad070ec 179 * @param [IN] snr Raw SNR value given by the radio hardware
modtronix 0:4041fad070ec 180 * FSK : N/A ( set to 0 )
modtronix 0:4041fad070ec 181 * LoRa: SNR value in dB
modtronix 0:4041fad070ec 182 */
modtronix 0:4041fad070ec 183 void ( *rxDone ) ( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr );
modtronix 0:4041fad070ec 184
modtronix 0:4041fad070ec 185 /*!
modtronix 0:4041fad070ec 186 * @brief Rx Timeout callback prototype.
modtronix 0:4041fad070ec 187 */
modtronix 0:4041fad070ec 188 void ( *rxTimeout ) ( );
modtronix 0:4041fad070ec 189
modtronix 0:4041fad070ec 190 /*!
modtronix 0:4041fad070ec 191 * @brief Rx Error callback prototype.
modtronix 0:4041fad070ec 192 */
modtronix 0:4041fad070ec 193 void ( *rxError ) ( );
modtronix 0:4041fad070ec 194
modtronix 0:4041fad070ec 195 /*!
modtronix 0:4041fad070ec 196 * \brief FHSS Change Channel callback prototype.
modtronix 0:4041fad070ec 197 *
modtronix 0:4041fad070ec 198 * \param [IN] CurrentChannel Index number of the current channel
modtronix 0:4041fad070ec 199 */
modtronix 0:4041fad070ec 200 void ( *fhssChangeChannel )( uint8_t CurrentChannel );
modtronix 0:4041fad070ec 201
modtronix 0:4041fad070ec 202 /*!
modtronix 0:4041fad070ec 203 * @brief CAD Done callback prototype.
modtronix 0:4041fad070ec 204 *
modtronix 0:4041fad070ec 205 * @param [IN] ChannelDetected Channel Activity detected during the CAD
modtronix 0:4041fad070ec 206 */
modtronix 0:4041fad070ec 207 void ( *cadDone ) ( bool channelActivityDetected );
modtronix 0:4041fad070ec 208
modtronix 0:4041fad070ec 209 public:
modtronix 0:4041fad070ec 210 //-------------------------------------------------------------------------
modtronix 0:4041fad070ec 211 // Constructor
modtronix 0:4041fad070ec 212 //-------------------------------------------------------------------------
modtronix 0:4041fad070ec 213 /*!
modtronix 0:4041fad070ec 214 * @brief Constructor of the radio object, the parameters are the callback functions described in the header.
modtronix 0:4041fad070ec 215 * @param [IN] txDone
modtronix 0:4041fad070ec 216 * @param [IN] txTimeout
modtronix 0:4041fad070ec 217 * @param [IN] rxDone
modtronix 0:4041fad070ec 218 * @param [IN] rxTimeout
modtronix 0:4041fad070ec 219 * @param [IN] rxError
modtronix 0:4041fad070ec 220 */
modtronix 0:4041fad070ec 221 Radio( void ( *txDone )( ), void ( *txTimeout ) ( ), void ( *rxDone ) ( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ),
modtronix 0:4041fad070ec 222 void ( *rxTimeout ) ( ), void ( *rxError ) ( ), void ( *fhssChangeChannel ) ( uint8_t channelIndex ), void ( *cadDone ) ( bool channelActivityDetected ) );
modtronix 0:4041fad070ec 223 virtual ~Radio( ) {};
modtronix 0:4041fad070ec 224
modtronix 0:4041fad070ec 225 //-------------------------------------------------------------------------
modtronix 0:4041fad070ec 226 // Pure virtual functions
modtronix 0:4041fad070ec 227 //-------------------------------------------------------------------------
modtronix 0:4041fad070ec 228
modtronix 0:4041fad070ec 229
modtronix 0:4041fad070ec 230 /*!
modtronix 0:4041fad070ec 231 * Return board type
modtronix 0:4041fad070ec 232 *
modtronix 0:4041fad070ec 233 * @return Returns a BOARD_XXX define
modtronix 0:4041fad070ec 234 */
modtronix 0:4041fad070ec 235 virtual uint8_t GetBoardType( void ) = 0;
modtronix 0:4041fad070ec 236
modtronix 0:4041fad070ec 237 /*!
modtronix 0:4041fad070ec 238 * Sets the board type, is a BOARD_XXX define
modtronix 0:4041fad070ec 239 *
modtronix 0:4041fad070ec 240 * @param boardType The board type, is a BOARD_XXX define
modtronix 0:4041fad070ec 241 */
modtronix 0:4041fad070ec 242 virtual void SetBoardType( uint8_t boardType) = 0;
modtronix 0:4041fad070ec 243
modtronix 0:4041fad070ec 244 /*!
modtronix 0:4041fad070ec 245 * Return current radio status
modtronix 0:4041fad070ec 246 *
modtronix 0:4041fad070ec 247 * @param status Radio status.[RF_IDLE, RF_RX_RUNNING, RF_TX_RUNNING]
modtronix 0:4041fad070ec 248 */
modtronix-com 2:93cf5cb235ee 249 virtual RadioState GetStatus( void ) = 0;
modtronix 0:4041fad070ec 250
modtronix 0:4041fad070ec 251 /*!
modtronix 0:4041fad070ec 252 * \brief Configures the radio with the given modem
modtronix 0:4041fad070ec 253 *
modtronix 0:4041fad070ec 254 * \param [IN] modem Modem to be used [0: FSK, 1: LoRa]
modtronix 0:4041fad070ec 255 */
modtronix 0:4041fad070ec 256 virtual void SetModem( ModemType modem ) = 0;
modtronix 0:4041fad070ec 257
modtronix 0:4041fad070ec 258 /*!
modtronix 0:4041fad070ec 259 * @brief Sets the channel frequency
modtronix 0:4041fad070ec 260 *
modtronix 0:4041fad070ec 261 * @param [IN] freq Channel RF frequency
modtronix 0:4041fad070ec 262 */
modtronix 0:4041fad070ec 263 virtual void SetChannel( uint32_t freq ) = 0;
modtronix 0:4041fad070ec 264
modtronix 0:4041fad070ec 265 /*!
modtronix 0:4041fad070ec 266 * @brief Sets the channels configuration
modtronix 0:4041fad070ec 267 *
modtronix 0:4041fad070ec 268 * @param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
modtronix 0:4041fad070ec 269 * @param [IN] freq Channel RF frequency
modtronix 0:4041fad070ec 270 * @param [IN] rssiThresh RSSI threshold
modtronix 0:4041fad070ec 271 *
modtronix 0:4041fad070ec 272 * @retval isFree [true: Channel is free, false: Channel is not free]
modtronix 0:4041fad070ec 273 */
modtronix 0:4041fad070ec 274 virtual bool IsChannelFree( ModemType modem, uint32_t freq, int8_t rssiThresh ) = 0;
modtronix 0:4041fad070ec 275
modtronix 0:4041fad070ec 276 /*!
modtronix 0:4041fad070ec 277 * @brief Generates a 32 bits random value based on the RSSI readings
modtronix 0:4041fad070ec 278 *
modtronix 0:4041fad070ec 279 * \remark This function sets the radio in LoRa modem mode and disables
modtronix 0:4041fad070ec 280 * all interrupts.
modtronix 0:4041fad070ec 281 * After calling this function either Radio.SetRxConfig or
modtronix 0:4041fad070ec 282 * Radio.SetTxConfig functions must be called.
modtronix 0:4041fad070ec 283 *
modtronix 0:4041fad070ec 284 * @retval randomValue 32 bits random value
modtronix 0:4041fad070ec 285 */
modtronix 0:4041fad070ec 286 virtual uint32_t Random( void )= 0;
modtronix 0:4041fad070ec 287
modtronix 0:4041fad070ec 288 /*!
modtronix 0:4041fad070ec 289 * @brief Sets the reception parameters
modtronix 0:4041fad070ec 290 *
modtronix 0:4041fad070ec 291 * @param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
modtronix 0:4041fad070ec 292 * @param [IN] bandwidth Sets the bandwidth
modtronix 0:4041fad070ec 293 * FSK : >= 2600 and <= 250000 Hz
modtronix 0:4041fad070ec 294 * LoRa: [0: 125 kHz, 1: 250 kHz,
modtronix 0:4041fad070ec 295 * 2: 500 kHz, 3: Reserved]
modtronix 0:4041fad070ec 296 * @param [IN] datarate Sets the Datarate
modtronix 0:4041fad070ec 297 * FSK : 600..300000 bits/s
modtronix 0:4041fad070ec 298 * LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
modtronix 0:4041fad070ec 299 * 10: 1024, 11: 2048, 12: 4096 chips]
modtronix 0:4041fad070ec 300 * @param [IN] coderate Sets the coding rate ( LoRa only )
modtronix 0:4041fad070ec 301 * FSK : N/A ( set to 0 )
modtronix 0:4041fad070ec 302 * LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
modtronix 0:4041fad070ec 303 * @param [IN] bandwidthAfc Sets the AFC Bandwidth ( FSK only )
modtronix 0:4041fad070ec 304 * FSK : >= 2600 and <= 250000 Hz
modtronix 0:4041fad070ec 305 * LoRa: N/A ( set to 0 )
modtronix 0:4041fad070ec 306 * @param [IN] preambleLen Sets the Preamble length ( LoRa only )
modtronix 0:4041fad070ec 307 * FSK : N/A ( set to 0 )
modtronix 0:4041fad070ec 308 * LoRa: Length in symbols ( the hardware adds 4 more symbols )
modtronix 0:4041fad070ec 309 * @param [IN] symbTimeout Sets the RxSingle timeout value ( LoRa only )
modtronix 0:4041fad070ec 310 * FSK : N/A ( set to 0 )
modtronix 0:4041fad070ec 311 * LoRa: timeout in symbols
modtronix 0:4041fad070ec 312 * @param [IN] fixLen Fixed length packets [0: variable, 1: fixed]
modtronix 0:4041fad070ec 313 * @param [IN] payloadLen Sets payload length when fixed lenght is used
modtronix 0:4041fad070ec 314 * @param [IN] crcOn Enables/Disables the CRC [0: OFF, 1: ON]
modtronix 0:4041fad070ec 315 * @param [IN] freqHopOn Enables disables the intra-packet frequency hopping [0: OFF, 1: ON] (LoRa only)
modtronix 0:4041fad070ec 316 * @param [IN] hopPeriod Number of symbols bewteen each hop (LoRa only)
modtronix 0:4041fad070ec 317 * @param [IN] iqInverted Inverts IQ signals ( LoRa only )
modtronix 0:4041fad070ec 318 * FSK : N/A ( set to 0 )
modtronix 0:4041fad070ec 319 * LoRa: [0: not inverted, 1: inverted]
modtronix 0:4041fad070ec 320 * @param [IN] rxContinuous Sets the reception in continuous mode
modtronix 0:4041fad070ec 321 * [false: single mode, true: continuous mode]
modtronix 0:4041fad070ec 322 */
modtronix 0:4041fad070ec 323 virtual void SetRxConfig ( ModemType modem, uint32_t bandwidth,
modtronix 0:4041fad070ec 324 uint32_t datarate, uint8_t coderate,
modtronix 0:4041fad070ec 325 uint32_t bandwidthAfc, uint16_t preambleLen,
modtronix 0:4041fad070ec 326 uint16_t symbTimeout, bool fixLen,
modtronix 0:4041fad070ec 327 uint8_t payloadLen,
modtronix 0:4041fad070ec 328 bool crcOn, bool freqHopOn, uint8_t hopPeriod,
modtronix 0:4041fad070ec 329 bool iqInverted, bool rxContinuous ) = 0;
modtronix 0:4041fad070ec 330
modtronix 0:4041fad070ec 331 /*!
modtronix 0:4041fad070ec 332 * @brief Sets the transmission parameters
modtronix 0:4041fad070ec 333 *
modtronix 0:4041fad070ec 334 * @param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
modtronix 0:4041fad070ec 335 * @param [IN] power Sets the output power [dBm]
modtronix 0:4041fad070ec 336 * @param [IN] fdev Sets the frequency deviation ( FSK only )
modtronix 0:4041fad070ec 337 * FSK : [Hz]
modtronix 0:4041fad070ec 338 * LoRa: 0
modtronix 0:4041fad070ec 339 * @param [IN] bandwidth Sets the bandwidth ( LoRa only )
modtronix 0:4041fad070ec 340 * FSK : 0
modtronix 0:4041fad070ec 341 * LoRa: [0: 125 kHz, 1: 250 kHz,
modtronix 0:4041fad070ec 342 * 2: 500 kHz, 3: Reserved]
modtronix 0:4041fad070ec 343 * @param [IN] datarate Sets the Datarate
modtronix 0:4041fad070ec 344 * FSK : 600..300000 bits/s
modtronix 0:4041fad070ec 345 * LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
modtronix 0:4041fad070ec 346 * 10: 1024, 11: 2048, 12: 4096 chips]
modtronix 0:4041fad070ec 347 * @param [IN] coderate Sets the coding rate ( LoRa only )
modtronix 0:4041fad070ec 348 * FSK : N/A ( set to 0 )
modtronix 0:4041fad070ec 349 * LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
modtronix 0:4041fad070ec 350 * @param [IN] preambleLen Sets the preamble length
modtronix 0:4041fad070ec 351 * @param [IN] fixLen Fixed length packets [0: variable, 1: fixed]
modtronix 0:4041fad070ec 352 * @param [IN] crcOn Enables disables the CRC [0: OFF, 1: ON]
modtronix 0:4041fad070ec 353 * @param [IN] freqHopOn Enables disables the intra-packet frequency hopping [0: OFF, 1: ON] (LoRa only)
modtronix 0:4041fad070ec 354 * @param [IN] hopPeriod Number of symbols bewteen each hop (LoRa only)
modtronix 0:4041fad070ec 355 * @param [IN] iqInverted Inverts IQ signals ( LoRa only )
modtronix 0:4041fad070ec 356 * FSK : N/A ( set to 0 )
modtronix 0:4041fad070ec 357 * LoRa: [0: not inverted, 1: inverted]
modtronix 0:4041fad070ec 358 * @param [IN] timeout Transmission timeout [us]
modtronix 0:4041fad070ec 359 */
modtronix 0:4041fad070ec 360 virtual void SetTxConfig( ModemType modem, int8_t power, uint32_t fdev,
modtronix 0:4041fad070ec 361 uint32_t bandwidth, uint32_t datarate,
modtronix 0:4041fad070ec 362 uint8_t coderate, uint16_t preambleLen,
modtronix 0:4041fad070ec 363 bool fixLen, bool crcOn, bool freqHopOn,
modtronix 0:4041fad070ec 364 uint8_t hopPeriod, bool iqInverted, uint32_t timeout ) = 0;
modtronix 0:4041fad070ec 365
modtronix 0:4041fad070ec 366 /*!
modtronix 0:4041fad070ec 367 * @brief Checks if the given RF frequency is supported by the hardware
modtronix 0:4041fad070ec 368 *
modtronix 0:4041fad070ec 369 * @param [IN] frequency RF frequency to be checked
modtronix 0:4041fad070ec 370 * @retval isSupported [true: supported, false: unsupported]
modtronix 0:4041fad070ec 371 */
modtronix 0:4041fad070ec 372 virtual bool CheckRfFrequency( uint32_t frequency ) = 0;
modtronix 0:4041fad070ec 373
modtronix 0:4041fad070ec 374 /*!
modtronix 0:4041fad070ec 375 * @brief Computes the packet time on air for the given payload
modtronix 0:4041fad070ec 376 *
modtronix 0:4041fad070ec 377 * \Remark Can only be called once SetRxConfig or SetTxConfig have been called
modtronix 0:4041fad070ec 378 *
modtronix 0:4041fad070ec 379 * @param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
modtronix 0:4041fad070ec 380 * @param [IN] pktLen Packet payload length
modtronix 0:4041fad070ec 381 *
modtronix 0:4041fad070ec 382 * @retval airTime Computed airTime for the given packet payload length
modtronix 0:4041fad070ec 383 */
modtronix 0:4041fad070ec 384 virtual double TimeOnAir ( ModemType modem, uint8_t pktLen ) = 0;
modtronix 0:4041fad070ec 385
modtronix 0:4041fad070ec 386 /*!
modtronix 0:4041fad070ec 387 * @brief Sends the buffer of size. Prepares the packet to be sent and sets
modtronix 0:4041fad070ec 388 * the radio in transmission
modtronix 0:4041fad070ec 389 *
modtronix 0:4041fad070ec 390 * @param [IN]: buffer Buffer pointer
modtronix 0:4041fad070ec 391 * @param [IN]: size Buffer size
modtronix 0:4041fad070ec 392 */
modtronix 0:4041fad070ec 393 virtual void Send( uint8_t *buffer, uint8_t size ) = 0;
modtronix 0:4041fad070ec 394
modtronix 0:4041fad070ec 395 /*!
modtronix 0:4041fad070ec 396 * @brief Sets the radio in sleep mode
modtronix 0:4041fad070ec 397 */
modtronix 0:4041fad070ec 398 virtual void Sleep( void ) = 0;
modtronix 0:4041fad070ec 399
modtronix 0:4041fad070ec 400 /*!
modtronix 0:4041fad070ec 401 * @brief Sets the radio in standby mode
modtronix 0:4041fad070ec 402 */
modtronix 0:4041fad070ec 403 virtual void Standby( void ) = 0;
modtronix 0:4041fad070ec 404
modtronix 0:4041fad070ec 405 /*!
modtronix 0:4041fad070ec 406 * @brief Sets the radio in CAD mode
modtronix 0:4041fad070ec 407 */
modtronix 0:4041fad070ec 408 virtual void StartCad( void ) = 0;
modtronix 0:4041fad070ec 409
modtronix 0:4041fad070ec 410 /*!
modtronix 0:4041fad070ec 411 * @brief Sets the radio in reception mode for the given time
modtronix 0:4041fad070ec 412 * @param [IN] timeout Reception timeout [us]
modtronix 0:4041fad070ec 413 * [0: continuous, others timeout]
modtronix 0:4041fad070ec 414 */
modtronix 0:4041fad070ec 415 virtual void Rx( uint32_t timeout ) = 0;
modtronix 0:4041fad070ec 416
modtronix 0:4041fad070ec 417 /*!
modtronix 0:4041fad070ec 418 * @brief Sets the radio in transmission mode for the given time
modtronix 0:4041fad070ec 419 * @param [IN] timeout Transmission timeout [us]
modtronix 0:4041fad070ec 420 * [0: continuous, others timeout]
modtronix 0:4041fad070ec 421 */
modtronix 0:4041fad070ec 422 virtual void Tx( uint32_t timeout ) = 0;
modtronix 0:4041fad070ec 423
modtronix 0:4041fad070ec 424 /*!
modtronix 0:4041fad070ec 425 * @brief Reads the current RSSI value
modtronix 0:4041fad070ec 426 *
modtronix 0:4041fad070ec 427 * @retval rssiValue Current RSSI value in [dBm]
modtronix 0:4041fad070ec 428 */
modtronix 0:4041fad070ec 429 virtual int16_t GetRssi ( ModemType modem ) = 0;
modtronix 0:4041fad070ec 430
modtronix 0:4041fad070ec 431 /*!
modtronix 0:4041fad070ec 432 * @brief Writes the radio register at the specified address
modtronix 0:4041fad070ec 433 *
modtronix 0:4041fad070ec 434 * @param [IN]: addr Register address
modtronix 0:4041fad070ec 435 * @param [IN]: data New register value
modtronix 0:4041fad070ec 436 */
modtronix 0:4041fad070ec 437 virtual void Write ( uint8_t addr, uint8_t data ) = 0;
modtronix 0:4041fad070ec 438
modtronix 0:4041fad070ec 439 /*!
modtronix 0:4041fad070ec 440 * @brief Reads the radio register at the specified address
modtronix 0:4041fad070ec 441 *
modtronix 0:4041fad070ec 442 * @param [IN]: addr Register address
modtronix 0:4041fad070ec 443 * @retval data Register value
modtronix 0:4041fad070ec 444 */
modtronix 0:4041fad070ec 445 virtual uint8_t Read ( uint8_t addr ) = 0;
modtronix 0:4041fad070ec 446
modtronix 0:4041fad070ec 447 /*!
modtronix 0:4041fad070ec 448 * @brief Writes multiple radio registers starting at address
modtronix 0:4041fad070ec 449 *
modtronix 0:4041fad070ec 450 * @param [IN] addr First Radio register address
modtronix 0:4041fad070ec 451 * @param [IN] buffer Buffer containing the new register's values
modtronix 0:4041fad070ec 452 * @param [IN] size Number of registers to be written
modtronix 0:4041fad070ec 453 */
modtronix 0:4041fad070ec 454 virtual void Write( uint8_t addr, uint8_t *buffer, uint8_t size ) = 0;
modtronix 0:4041fad070ec 455
modtronix 0:4041fad070ec 456 /*!
modtronix 0:4041fad070ec 457 * @brief Reads multiple radio registers starting at address
modtronix 0:4041fad070ec 458 *
modtronix 0:4041fad070ec 459 * @param [IN] addr First Radio register address
modtronix 0:4041fad070ec 460 * @param [OUT] buffer Buffer where to copy the registers data
modtronix 0:4041fad070ec 461 * @param [IN] size Number of registers to be read
modtronix 0:4041fad070ec 462 */
modtronix 0:4041fad070ec 463 virtual void Read ( uint8_t addr, uint8_t *buffer, uint8_t size ) = 0;
modtronix 0:4041fad070ec 464
modtronix 0:4041fad070ec 465 /*!
modtronix 0:4041fad070ec 466 * @brief Writes the buffer contents to the SX1276 FIFO
modtronix 0:4041fad070ec 467 *
modtronix 0:4041fad070ec 468 * @param [IN] buffer Buffer containing data to be put on the FIFO.
modtronix 0:4041fad070ec 469 * @param [IN] size Number of bytes to be written to the FIFO
modtronix 0:4041fad070ec 470 */
modtronix 0:4041fad070ec 471 virtual void WriteFifo( uint8_t *buffer, uint8_t size ) = 0;
modtronix 0:4041fad070ec 472
modtronix 0:4041fad070ec 473 /*!
modtronix 0:4041fad070ec 474 * @brief Reads the contents of the SX1276 FIFO
modtronix 0:4041fad070ec 475 *
modtronix 0:4041fad070ec 476 * @param [OUT] buffer Buffer where to copy the FIFO read data.
modtronix 0:4041fad070ec 477 * @param [IN] size Number of bytes to be read from the FIFO
modtronix 0:4041fad070ec 478 */
modtronix 0:4041fad070ec 479 virtual void ReadFifo( uint8_t *buffer, uint8_t size ) = 0;
modtronix 0:4041fad070ec 480 };
modtronix 0:4041fad070ec 481
modtronix 0:4041fad070ec 482 #endif // __RADIO_H__
modtronix 1:64a9c4a03244 483