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 07 08:08:51 2015 +1000
Revision:
2:93cf5cb235ee
Parent:
1:64a9c4a03244
Child:
3:8a08d9633b93
Synch with original SX1276Lib - changed GetState() functions to GetStatus()

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