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:
Mon Sep 14 14:30:18 2015 +1000
Revision:
3:8a08d9633b93
Parent:
2:93cf5cb235ee
Child:
5:1a255cc8d54a
Changed states

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