SX1276GenericLib to support sx1276 bassed LoRa modules, including HopeRF RFM95, Murata CMWX1ZZABZ and Semtech SX1276MB1MAS/SX1276MB1LAS modules

Dependents:   DISCO-L072CZ-LRWAN1_LoRa_PingPong DISCO-L072CZ-LRWAN1_LoRa_PingPong DISCO-L072CZ-LRWAN1_LoRa_PingPong DISCO-L072CZ-LRWAN1_LoRa_USB_Rx ... more

Fork of SX1276Lib by Semtech

Committer:
Helmut Tschemernjak
Date:
Sun May 07 20:26:02 2017 +0200
Revision:
39:706c32eda7e7
Parent:
31:e50929bd3f32
Child:
48:62af1e692f00
Further cleanup, removed enum.h which is not needed.

Who changed what in which revision?

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