LoRa node acquiring random float value and sending to LoRa Server - Working ok

Fork of SX1276GenericLib by Helmut Tschemernjak

Committer:
sagilar
Date:
Wed Aug 08 22:34:03 2018 +0000
Revision:
115:514363b547ec
Parent:
83:019da451b283
Child:
112:ba1fca7de76e
LoRa node acquiring random float value and sending to LoRa Server - Working ok

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