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
Date:
Sun Aug 30 09:39:25 2015 +1000
Revision:
1:64a9c4a03244
Parent:
0:4041fad070ec
Child:
2:93cf5cb235ee
Initial version

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