local for mbed5

Committer:
lo
Date:
Thu Feb 11 19:17:06 2021 +0000
Revision:
7:7d021a81fe46
Parent:
6:1e2345700991
initial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
GregCr 0:deaafdfde3bb 1 /*
GregCr 4:c6ef863d0b07 2 ______ _
GregCr 0:deaafdfde3bb 3 / _____) _ | |
GregCr 0:deaafdfde3bb 4 ( (____ _____ ____ _| |_ _____ ____| |__
GregCr 0:deaafdfde3bb 5 \____ \| ___ | (_ _) ___ |/ ___) _ \
GregCr 0:deaafdfde3bb 6 _____) ) ____| | | || |_| ____( (___| | | |
GregCr 0:deaafdfde3bb 7 (______/|_____)_|_|_| \__)_____)\____)_| |_|
GregCr 4:c6ef863d0b07 8 (C)2017 Semtech
GregCr 0:deaafdfde3bb 9
GregCr 4:c6ef863d0b07 10 Description: Generic SX126x driver implementation
GregCr 0:deaafdfde3bb 11
GregCr 0:deaafdfde3bb 12 License: Revised BSD License, see LICENSE.TXT file include in the project
GregCr 0:deaafdfde3bb 13
GregCr 4:c6ef863d0b07 14 Authors: Miguel Luis, Gregory Cristian
GregCr 0:deaafdfde3bb 15 */
GregCr 2:4ff11ea92fbe 16 #ifndef __SX126x_H__
GregCr 2:4ff11ea92fbe 17 #define __SX126x_H__
GregCr 0:deaafdfde3bb 18
GregCr 0:deaafdfde3bb 19 #include "radio.h"
GregCr 0:deaafdfde3bb 20
GregCr 0:deaafdfde3bb 21 /*!
GregCr 0:deaafdfde3bb 22 * \brief Enables/disables driver debug features
GregCr 0:deaafdfde3bb 23 */
GregCr 2:4ff11ea92fbe 24 #define SX126x_DEBUG 0
GregCr 0:deaafdfde3bb 25
GregCr 0:deaafdfde3bb 26
GregCr 0:deaafdfde3bb 27
GregCr 0:deaafdfde3bb 28 /*!
GregCr 0:deaafdfde3bb 29 * \brief Hardware IO IRQ callback function definition
GregCr 0:deaafdfde3bb 30 */
GregCr 2:4ff11ea92fbe 31 class SX126x;
GregCr 2:4ff11ea92fbe 32 typedef void ( SX126x::*DioIrqHandler )( void );
GregCr 0:deaafdfde3bb 33
GregCr 0:deaafdfde3bb 34 /*!
GregCr 0:deaafdfde3bb 35 * \brief IRQ triggers callback function definition
GregCr 0:deaafdfde3bb 36 */
GregCr 2:4ff11ea92fbe 37 class SX126xHal;
GregCr 2:4ff11ea92fbe 38 typedef void ( SX126xHal::*Trigger )( void );
GregCr 0:deaafdfde3bb 39
GregCr 0:deaafdfde3bb 40 /*!
GregCr 0:deaafdfde3bb 41 * \brief Provides the frequency of the chip running on the radio and the frequency step
GregCr 0:deaafdfde3bb 42 *
GregCr 0:deaafdfde3bb 43 * \remark These defines are used for computing the frequency divider to set the RF frequency
GregCr 0:deaafdfde3bb 44 */
GregCr 0:deaafdfde3bb 45 #define XTAL_FREQ 32000000
GregCr 4:c6ef863d0b07 46 #define FREQ_DIV 33554432
GregCr 4:c6ef863d0b07 47 #define FREQ_STEP 0.95367431640625 // ( ( double )( XTAL_FREQ / ( double )FREQ_DIV ) )
GregCr 4:c6ef863d0b07 48 #define FREQ_ERR 0.47683715820312
GregCr 0:deaafdfde3bb 49
GregCr 6:1e2345700991 50
GregCr 6:1e2345700991 51 /*!
GregCr 6:1e2345700991 52 * \brief List of devices supported by this driver
GregCr 6:1e2345700991 53 */
GregCr 6:1e2345700991 54 #define SX1261 0
GregCr 6:1e2345700991 55 #define SX1262 1
GregCr 6:1e2345700991 56 #define SX1268 2
GregCr 6:1e2345700991 57
GregCr 6:1e2345700991 58 /*!
GregCr 6:1e2345700991 59 * \brief List of matching supported by the sx126x
GregCr 6:1e2345700991 60 */
GregCr 6:1e2345700991 61 #define MATCHING_FREQ_915 0
GregCr 6:1e2345700991 62 #define MATCHING_FREQ_780 1
GregCr 6:1e2345700991 63 #define MATCHING_FREQ_490 2
GregCr 6:1e2345700991 64 #define MATCHING_FREQ_434 3
GregCr 6:1e2345700991 65 #define MATCHING_FREQ_280 4
GregCr 6:1e2345700991 66 #define MATCHING_FREQ_169 5
GregCr 6:1e2345700991 67 #define MATCHING_FREQ_868 6
GregCr 6:1e2345700991 68
GregCr 0:deaafdfde3bb 69 /*!
GregCr 0:deaafdfde3bb 70 * \brief Compensation delay for SetAutoTx/Rx functions in 15.625 microseconds
GregCr 0:deaafdfde3bb 71 */
GregCr 0:deaafdfde3bb 72 #define AUTO_RX_TX_OFFSET 2
GregCr 0:deaafdfde3bb 73
GregCr 0:deaafdfde3bb 74 /*!
GregCr 3:7e3595a9ebe0 75 * \brief LFSR initial value to compute IBM type CRC
GregCr 3:7e3595a9ebe0 76 */
GregCr 3:7e3595a9ebe0 77 #define CRC_IBM_SEED 0xFFFF
GregCr 3:7e3595a9ebe0 78
GregCr 3:7e3595a9ebe0 79 /*!
GregCr 3:7e3595a9ebe0 80 * \brief LFSR initial value to compute CCIT type CRC
GregCr 3:7e3595a9ebe0 81 */
GregCr 3:7e3595a9ebe0 82 #define CRC_CCITT_SEED 0x1D0F
GregCr 3:7e3595a9ebe0 83
GregCr 3:7e3595a9ebe0 84 /*!
GregCr 3:7e3595a9ebe0 85 * \brief Polynomial used to compute IBM CRC
GregCr 3:7e3595a9ebe0 86 */
GregCr 3:7e3595a9ebe0 87 #define CRC_POLYNOMIAL_IBM 0x8005
GregCr 3:7e3595a9ebe0 88
GregCr 3:7e3595a9ebe0 89 /*!
GregCr 3:7e3595a9ebe0 90 * \brief Polynomial used to compute CCIT CRC
GregCr 3:7e3595a9ebe0 91 */
GregCr 3:7e3595a9ebe0 92 #define CRC_POLYNOMIAL_CCITT 0x1021
GregCr 3:7e3595a9ebe0 93
GregCr 3:7e3595a9ebe0 94 /*!
GregCr 0:deaafdfde3bb 95 * \brief The address of the register holding the first byte defining the CRC seed
GregCr 0:deaafdfde3bb 96 *
GregCr 0:deaafdfde3bb 97 */
GregCr 4:c6ef863d0b07 98 #define REG_LR_CRCSEEDBASEADDR 0x06BC
GregCr 0:deaafdfde3bb 99
GregCr 0:deaafdfde3bb 100 /*!
GregCr 0:deaafdfde3bb 101 * \brief The address of the register holding the first byte defining the CRC polynomial
GregCr 0:deaafdfde3bb 102 */
GregCr 4:c6ef863d0b07 103 #define REG_LR_CRCPOLYBASEADDR 0x06BE
GregCr 0:deaafdfde3bb 104
GregCr 0:deaafdfde3bb 105 /*!
GregCr 0:deaafdfde3bb 106 * \brief The address of the register holding the first byte defining the whitening seed
GregCr 0:deaafdfde3bb 107 */
GregCr 4:c6ef863d0b07 108 #define REG_LR_WHITSEEDBASEADDR_MSB 0x06B8
GregCr 4:c6ef863d0b07 109 #define REG_LR_WHITSEEDBASEADDR_LSB 0x06B9
GregCr 0:deaafdfde3bb 110
GregCr 0:deaafdfde3bb 111 /*!
GregCr 4:c6ef863d0b07 112 * \brief The address of the register holding the packet configuration
GregCr 0:deaafdfde3bb 113 */
GregCr 4:c6ef863d0b07 114 #define REG_LR_PACKETPARAMS 0x0704
GregCr 4:c6ef863d0b07 115
GregCr 4:c6ef863d0b07 116 /*!
GregCr 4:c6ef863d0b07 117 * \brief The address of the register holding the payload size
GregCr 4:c6ef863d0b07 118 */
GregCr 4:c6ef863d0b07 119 #define REG_LR_PAYLOADLENGTH 0x0702
GregCr 0:deaafdfde3bb 120
GregCr 0:deaafdfde3bb 121 /*!
GregCr 0:deaafdfde3bb 122 * \brief The addresses of the registers holding SyncWords values
GregCr 0:deaafdfde3bb 123 */
GregCr 4:c6ef863d0b07 124 #define REG_LR_SYNCWORDBASEADDRESS 0x06C0
GregCr 4:c6ef863d0b07 125
GregCr 4:c6ef863d0b07 126 /*!
GregCr 4:c6ef863d0b07 127 * \brief The addresses of the register holding LoRa Modem SyncWord value
GregCr 4:c6ef863d0b07 128 */
GregCr 4:c6ef863d0b07 129 #define REG_LR_SYNCWORD 0x0740
GregCr 4:c6ef863d0b07 130
GregCr 4:c6ef863d0b07 131 /*!
GregCr 4:c6ef863d0b07 132 * Syncword for Private LoRa networks
GregCr 4:c6ef863d0b07 133 */
GregCr 4:c6ef863d0b07 134 #define LORA_MAC_PRIVATE_SYNCWORD 0x1424
GregCr 4:c6ef863d0b07 135
GregCr 4:c6ef863d0b07 136 /*!
GregCr 4:c6ef863d0b07 137 * Syncword for Public LoRa networks
GregCr 4:c6ef863d0b07 138 */
GregCr 4:c6ef863d0b07 139 #define LORA_MAC_PUBLIC_SYNCWORD 0x3444
GregCr 0:deaafdfde3bb 140
GregCr 4:c6ef863d0b07 141 /*!
GregCr 4:c6ef863d0b07 142 * The address of the register giving a 4 bytes random number
GregCr 4:c6ef863d0b07 143 */
GregCr 4:c6ef863d0b07 144 #define RANDOM_NUMBER_GENERATORBASEADDR 0x0819
GregCr 0:deaafdfde3bb 145
GregCr 0:deaafdfde3bb 146 /*!
GregCr 4:c6ef863d0b07 147 * The address of the register holding RX Gain value (0x94: power saving, 0x96: rx boosted)
GregCr 4:c6ef863d0b07 148 */
GregCr 4:c6ef863d0b07 149 #define REG_RX_GAIN 0x08AC
GregCr 5:e488e6f185f3 150
GregCr 4:c6ef863d0b07 151 /*!
GregCr 5:e488e6f185f3 152 * The address of the register holding frequency error indication
GregCr 4:c6ef863d0b07 153 */
GregCr 5:e488e6f185f3 154 #define REG_FREQUENCY_ERRORBASEADDR 0x076B
GregCr 4:c6ef863d0b07 155
GregCr 4:c6ef863d0b07 156 /*!
GregCr 4:c6ef863d0b07 157 * Change the value on the device internal trimming capacitor
GregCr 4:c6ef863d0b07 158 */
GregCr 4:c6ef863d0b07 159 #define REG_XTA_TRIM 0x0911
GregCr 5:e488e6f185f3 160
GregCr 5:e488e6f185f3 161 /*!
GregCr 5:e488e6f185f3 162 * Set the current max value in the over current protection
GregCr 5:e488e6f185f3 163 */
GregCr 5:e488e6f185f3 164 #define REG_OCP 0x08E7
GregCr 5:e488e6f185f3 165
GregCr 4:c6ef863d0b07 166 /*!
GregCr 0:deaafdfde3bb 167 * \brief Represents the states of the radio
GregCr 0:deaafdfde3bb 168 */
GregCr 4:c6ef863d0b07 169 typedef enum
GregCr 0:deaafdfde3bb 170 {
GregCr 4:c6ef863d0b07 171 RF_IDLE = 0x00, //!< The radio is idle
GregCr 0:deaafdfde3bb 172 RF_RX_RUNNING, //!< The radio is in reception state
GregCr 0:deaafdfde3bb 173 RF_TX_RUNNING, //!< The radio is in transmission state
GregCr 0:deaafdfde3bb 174 RF_CAD, //!< The radio is doing channel activity detection
GregCr 4:c6ef863d0b07 175 }RadioStates_t;
GregCr 0:deaafdfde3bb 176
GregCr 0:deaafdfde3bb 177 /*!
GregCr 0:deaafdfde3bb 178 * \brief Represents the operating mode the radio is actually running
GregCr 0:deaafdfde3bb 179 */
GregCr 4:c6ef863d0b07 180 typedef enum
GregCr 0:deaafdfde3bb 181 {
GregCr 4:c6ef863d0b07 182 MODE_SLEEP = 0x00, //! The radio is in sleep mode
GregCr 0:deaafdfde3bb 183 MODE_STDBY_RC, //! The radio is in standby mode with RC oscillator
GregCr 0:deaafdfde3bb 184 MODE_STDBY_XOSC, //! The radio is in standby mode with XOSC oscillator
GregCr 0:deaafdfde3bb 185 MODE_FS, //! The radio is in frequency synthesis mode
GregCr 0:deaafdfde3bb 186 MODE_TX, //! The radio is in transmit mode
GregCr 0:deaafdfde3bb 187 MODE_RX, //! The radio is in receive mode
GregCr 4:c6ef863d0b07 188 MODE_RX_DC, //! The radio is in receive duty cycle mode
GregCr 0:deaafdfde3bb 189 MODE_CAD //! The radio is in channel activity detection mode
GregCr 4:c6ef863d0b07 190 }RadioOperatingModes_t;
GregCr 0:deaafdfde3bb 191
GregCr 0:deaafdfde3bb 192 /*!
GregCr 0:deaafdfde3bb 193 * \brief Declares the oscillator in use while in standby mode
GregCr 0:deaafdfde3bb 194 *
GregCr 0:deaafdfde3bb 195 * Using the STDBY_RC standby mode allow to reduce the energy consumption
GregCr 0:deaafdfde3bb 196 * STDBY_XOSC should be used for time critical applications
GregCr 0:deaafdfde3bb 197 */
GregCr 4:c6ef863d0b07 198 typedef enum
GregCr 0:deaafdfde3bb 199 {
GregCr 4:c6ef863d0b07 200 STDBY_RC = 0x00,
GregCr 4:c6ef863d0b07 201 STDBY_XOSC = 0x01,
GregCr 4:c6ef863d0b07 202 }RadioStandbyModes_t;
GregCr 4:c6ef863d0b07 203
GregCr 3:7e3595a9ebe0 204 /*!
GregCr 3:7e3595a9ebe0 205 * \brief Declares the power regulation used to power the device
GregCr 3:7e3595a9ebe0 206 *
GregCr 3:7e3595a9ebe0 207 * This command allows the user to specify if DC-DC or LDO is used for power regulation.
GregCr 3:7e3595a9ebe0 208 * Using only LDO implies that the Rx or Tx current is doubled
GregCr 3:7e3595a9ebe0 209 */
GregCr 4:c6ef863d0b07 210 typedef enum
GregCr 3:7e3595a9ebe0 211 {
GregCr 4:c6ef863d0b07 212 USE_LDO = 0x00, // default
GregCr 4:c6ef863d0b07 213 USE_DCDC = 0x01,
GregCr 4:c6ef863d0b07 214 }RadioRegulatorMode_t;
GregCr 0:deaafdfde3bb 215
GregCr 0:deaafdfde3bb 216 /*!
GregCr 0:deaafdfde3bb 217 * \brief Represents the possible packet type (i.e. modem) used
GregCr 0:deaafdfde3bb 218 */
GregCr 4:c6ef863d0b07 219 typedef enum
GregCr 0:deaafdfde3bb 220 {
GregCr 4:c6ef863d0b07 221 PACKET_TYPE_GFSK = 0x00,
GregCr 4:c6ef863d0b07 222 PACKET_TYPE_LORA = 0x01,
GregCr 4:c6ef863d0b07 223 PACKET_TYPE_NONE = 0x0F,
GregCr 4:c6ef863d0b07 224 }RadioPacketTypes_t;
GregCr 0:deaafdfde3bb 225
GregCr 0:deaafdfde3bb 226 /*!
GregCr 0:deaafdfde3bb 227 * \brief Represents the ramping time for power amplifier
GregCr 0:deaafdfde3bb 228 */
GregCr 4:c6ef863d0b07 229 typedef enum
GregCr 0:deaafdfde3bb 230 {
GregCr 4:c6ef863d0b07 231 RADIO_RAMP_10_US = 0x00,
GregCr 4:c6ef863d0b07 232 RADIO_RAMP_20_US = 0x01,
GregCr 4:c6ef863d0b07 233 RADIO_RAMP_40_US = 0x02,
GregCr 4:c6ef863d0b07 234 RADIO_RAMP_80_US = 0x03,
GregCr 4:c6ef863d0b07 235 RADIO_RAMP_200_US = 0x04,
GregCr 4:c6ef863d0b07 236 RADIO_RAMP_800_US = 0x05,
GregCr 4:c6ef863d0b07 237 RADIO_RAMP_1700_US = 0x06,
GregCr 4:c6ef863d0b07 238 RADIO_RAMP_3400_US = 0x07,
GregCr 4:c6ef863d0b07 239 }RadioRampTimes_t;
GregCr 0:deaafdfde3bb 240
GregCr 0:deaafdfde3bb 241 /*!
GregCr 0:deaafdfde3bb 242 * \brief Represents the number of symbols to be used for channel activity detection operation
GregCr 0:deaafdfde3bb 243 */
GregCr 4:c6ef863d0b07 244 typedef enum
GregCr 0:deaafdfde3bb 245 {
GregCr 0:deaafdfde3bb 246 LORA_CAD_01_SYMBOL = 0x00,
GregCr 0:deaafdfde3bb 247 LORA_CAD_02_SYMBOL = 0x01,
GregCr 0:deaafdfde3bb 248 LORA_CAD_04_SYMBOL = 0x02,
GregCr 0:deaafdfde3bb 249 LORA_CAD_08_SYMBOL = 0x03,
GregCr 0:deaafdfde3bb 250 LORA_CAD_16_SYMBOL = 0x04,
GregCr 4:c6ef863d0b07 251 }RadioLoRaCadSymbols_t;
GregCr 0:deaafdfde3bb 252
GregCr 4:c6ef863d0b07 253 /*!
GregCr 4:c6ef863d0b07 254 * \brief Represents the Channel Activity Detection actions after the CAD operation is finished
GregCr 4:c6ef863d0b07 255 */
GregCr 4:c6ef863d0b07 256 typedef enum
GregCr 4:c6ef863d0b07 257 {
GregCr 4:c6ef863d0b07 258 LORA_CAD_ONLY = 0x00,
GregCr 4:c6ef863d0b07 259 LORA_CAD_RX = 0x01,
GregCr 4:c6ef863d0b07 260 LORA_CAD_LBT = 0x10,
GregCr 4:c6ef863d0b07 261 }RadioCadExitModes_t;
GregCr 0:deaafdfde3bb 262
GregCr 0:deaafdfde3bb 263 /*!
GregCr 0:deaafdfde3bb 264 * \brief Represents the modulation shaping parameter
GregCr 0:deaafdfde3bb 265 */
GregCr 4:c6ef863d0b07 266 typedef enum
GregCr 0:deaafdfde3bb 267 {
GregCr 4:c6ef863d0b07 268 MOD_SHAPING_OFF = 0x00,
GregCr 3:7e3595a9ebe0 269 MOD_SHAPING_G_BT_03 = 0x08,
GregCr 3:7e3595a9ebe0 270 MOD_SHAPING_G_BT_05 = 0x09,
GregCr 3:7e3595a9ebe0 271 MOD_SHAPING_G_BT_07 = 0x0A,
GregCr 3:7e3595a9ebe0 272 MOD_SHAPING_G_BT_1 = 0x0B,
GregCr 4:c6ef863d0b07 273 }RadioModShapings_t;
GregCr 3:7e3595a9ebe0 274
GregCr 3:7e3595a9ebe0 275 /*!
GregCr 3:7e3595a9ebe0 276 * \brief Represents the modulation shaping parameter
GregCr 3:7e3595a9ebe0 277 */
GregCr 4:c6ef863d0b07 278 typedef enum
GregCr 3:7e3595a9ebe0 279 {
GregCr 3:7e3595a9ebe0 280 RX_BW_4800 = 0x1F,
GregCr 3:7e3595a9ebe0 281 RX_BW_5800 = 0x17,
GregCr 3:7e3595a9ebe0 282 RX_BW_7300 = 0x0F,
GregCr 3:7e3595a9ebe0 283 RX_BW_9700 = 0x1E,
GregCr 3:7e3595a9ebe0 284 RX_BW_11700 = 0x16,
GregCr 3:7e3595a9ebe0 285 RX_BW_14600 = 0x0E,
GregCr 3:7e3595a9ebe0 286 RX_BW_19500 = 0x1D,
GregCr 3:7e3595a9ebe0 287 RX_BW_23400 = 0x15,
GregCr 3:7e3595a9ebe0 288 RX_BW_29300 = 0x0D,
GregCr 3:7e3595a9ebe0 289 RX_BW_39000 = 0x1C,
GregCr 3:7e3595a9ebe0 290 RX_BW_46900 = 0x14,
GregCr 3:7e3595a9ebe0 291 RX_BW_58600 = 0x0C,
GregCr 3:7e3595a9ebe0 292 RX_BW_78200 = 0x1B,
GregCr 3:7e3595a9ebe0 293 RX_BW_93800 = 0x13,
GregCr 3:7e3595a9ebe0 294 RX_BW_117300 = 0x0B,
GregCr 3:7e3595a9ebe0 295 RX_BW_156200 = 0x1A,
GregCr 3:7e3595a9ebe0 296 RX_BW_187200 = 0x12,
GregCr 3:7e3595a9ebe0 297 RX_BW_234300 = 0x0A,
GregCr 4:c6ef863d0b07 298 RX_BW_312000 = 0x19,
GregCr 3:7e3595a9ebe0 299 RX_BW_373600 = 0x11,
GregCr 4:c6ef863d0b07 300 RX_BW_467000 = 0x09,
GregCr 4:c6ef863d0b07 301 }RadioRxBandwidth_t;
GregCr 0:deaafdfde3bb 302
GregCr 0:deaafdfde3bb 303 /*!
GregCr 0:deaafdfde3bb 304 * \brief Represents the possible spreading factor values in LoRa packet types
GregCr 0:deaafdfde3bb 305 */
GregCr 4:c6ef863d0b07 306 typedef enum
GregCr 0:deaafdfde3bb 307 {
GregCr 0:deaafdfde3bb 308 LORA_SF5 = 0x05,
GregCr 0:deaafdfde3bb 309 LORA_SF6 = 0x06,
GregCr 0:deaafdfde3bb 310 LORA_SF7 = 0x07,
GregCr 0:deaafdfde3bb 311 LORA_SF8 = 0x08,
GregCr 0:deaafdfde3bb 312 LORA_SF9 = 0x09,
GregCr 0:deaafdfde3bb 313 LORA_SF10 = 0x0A,
GregCr 0:deaafdfde3bb 314 LORA_SF11 = 0x0B,
GregCr 0:deaafdfde3bb 315 LORA_SF12 = 0x0C,
GregCr 4:c6ef863d0b07 316 }RadioLoRaSpreadingFactors_t;
GregCr 0:deaafdfde3bb 317
GregCr 0:deaafdfde3bb 318 /*!
GregCr 0:deaafdfde3bb 319 * \brief Represents the bandwidth values for LoRa packet type
GregCr 0:deaafdfde3bb 320 */
GregCr 4:c6ef863d0b07 321 typedef enum
GregCr 0:deaafdfde3bb 322 {
GregCr 3:7e3595a9ebe0 323 LORA_BW_500 = 6,
GregCr 3:7e3595a9ebe0 324 LORA_BW_250 = 5,
GregCr 3:7e3595a9ebe0 325 LORA_BW_125 = 4,
GregCr 3:7e3595a9ebe0 326 LORA_BW_062 = 3,
GregCr 3:7e3595a9ebe0 327 LORA_BW_041 = 10,
GregCr 3:7e3595a9ebe0 328 LORA_BW_031 = 2,
GregCr 3:7e3595a9ebe0 329 LORA_BW_020 = 9,
GregCr 3:7e3595a9ebe0 330 LORA_BW_015 = 1,
GregCr 3:7e3595a9ebe0 331 LORA_BW_010 = 8,
GregCr 4:c6ef863d0b07 332 LORA_BW_007 = 0,
GregCr 4:c6ef863d0b07 333 }RadioLoRaBandwidths_t;
GregCr 0:deaafdfde3bb 334
GregCr 0:deaafdfde3bb 335 /*!
GregCr 0:deaafdfde3bb 336 * \brief Represents the coding rate values for LoRa packet type
GregCr 0:deaafdfde3bb 337 */
GregCr 4:c6ef863d0b07 338 typedef enum
GregCr 0:deaafdfde3bb 339 {
GregCr 0:deaafdfde3bb 340 LORA_CR_4_5 = 0x01,
GregCr 0:deaafdfde3bb 341 LORA_CR_4_6 = 0x02,
GregCr 0:deaafdfde3bb 342 LORA_CR_4_7 = 0x03,
GregCr 0:deaafdfde3bb 343 LORA_CR_4_8 = 0x04,
GregCr 4:c6ef863d0b07 344 }RadioLoRaCodingRates_t;
GregCr 0:deaafdfde3bb 345
GregCr 3:7e3595a9ebe0 346 /*!
GregCr 3:7e3595a9ebe0 347 * \brief Represents the preamble length used to detect the packet on Rx side
GregCr 3:7e3595a9ebe0 348 */
GregCr 4:c6ef863d0b07 349 typedef enum
GregCr 3:7e3595a9ebe0 350 {
GregCr 3:7e3595a9ebe0 351 RADIO_PREAMBLE_DETECTOR_OFF = 0x00, //!< Preamble detection length off
GregCr 3:7e3595a9ebe0 352 RADIO_PREAMBLE_DETECTOR_08_BITS = 0x04, //!< Preamble detection length 8 bits
GregCr 4:c6ef863d0b07 353 RADIO_PREAMBLE_DETECTOR_16_BITS = 0x05, //!< Preamble detection length 16 bits
GregCr 4:c6ef863d0b07 354 RADIO_PREAMBLE_DETECTOR_24_BITS = 0x06, //!< Preamble detection length 24 bits
GregCr 4:c6ef863d0b07 355 RADIO_PREAMBLE_DETECTOR_32_BITS = 0x07, //!< Preamble detection length 32 bit
GregCr 4:c6ef863d0b07 356 }RadioPreambleDetection_t;
GregCr 0:deaafdfde3bb 357
GregCr 0:deaafdfde3bb 358 /*!
GregCr 0:deaafdfde3bb 359 * \brief Represents the possible combinations of SyncWord correlators activated
GregCr 0:deaafdfde3bb 360 */
GregCr 4:c6ef863d0b07 361 typedef enum
GregCr 0:deaafdfde3bb 362 {
GregCr 0:deaafdfde3bb 363 RADIO_ADDRESSCOMP_FILT_OFF = 0x00, //!< No correlator turned on, i.e. do not search for SyncWord
GregCr 0:deaafdfde3bb 364 RADIO_ADDRESSCOMP_FILT_NODE = 0x01,
GregCr 0:deaafdfde3bb 365 RADIO_ADDRESSCOMP_FILT_NODE_BROAD = 0x02,
GregCr 4:c6ef863d0b07 366 }RadioAddressComp_t;
GregCr 0:deaafdfde3bb 367
GregCr 0:deaafdfde3bb 368 /*!
GregCr 0:deaafdfde3bb 369 * \brief Radio packet length mode
GregCr 0:deaafdfde3bb 370 */
GregCr 4:c6ef863d0b07 371 typedef enum
GregCr 0:deaafdfde3bb 372 {
GregCr 0:deaafdfde3bb 373 RADIO_PACKET_FIXED_LENGTH = 0x00, //!< The packet is known on both sides, no header included in the packet
GregCr 0:deaafdfde3bb 374 RADIO_PACKET_VARIABLE_LENGTH = 0x01, //!< The packet is on variable size, header included
GregCr 4:c6ef863d0b07 375 }RadioPacketLengthModes_t;
GregCr 0:deaafdfde3bb 376
GregCr 0:deaafdfde3bb 377 /*!
GregCr 0:deaafdfde3bb 378 * \brief Represents the CRC length
GregCr 0:deaafdfde3bb 379 */
GregCr 4:c6ef863d0b07 380 typedef enum
GregCr 0:deaafdfde3bb 381 {
GregCr 0:deaafdfde3bb 382 RADIO_CRC_OFF = 0x01, //!< No CRC in use
GregCr 0:deaafdfde3bb 383 RADIO_CRC_1_BYTES = 0x00,
GregCr 0:deaafdfde3bb 384 RADIO_CRC_2_BYTES = 0x02,
GregCr 0:deaafdfde3bb 385 RADIO_CRC_1_BYTES_INV = 0x04,
GregCr 0:deaafdfde3bb 386 RADIO_CRC_2_BYTES_INV = 0x06,
GregCr 4:c6ef863d0b07 387 RADIO_CRC_2_BYTES_IBM = 0xF1,
GregCr 4:c6ef863d0b07 388 RADIO_CRC_2_BYTES_CCIT = 0xF2,
GregCr 4:c6ef863d0b07 389 }RadioCrcTypes_t;
GregCr 0:deaafdfde3bb 390
GregCr 0:deaafdfde3bb 391 /*!
GregCr 0:deaafdfde3bb 392 * \brief Radio whitening mode activated or deactivated
GregCr 0:deaafdfde3bb 393 */
GregCr 4:c6ef863d0b07 394 typedef enum
GregCr 0:deaafdfde3bb 395 {
GregCr 0:deaafdfde3bb 396 RADIO_DC_FREE_OFF = 0x00,
GregCr 0:deaafdfde3bb 397 RADIO_DC_FREEWHITENING = 0x01,
GregCr 4:c6ef863d0b07 398 }RadioDcFree_t;
GregCr 0:deaafdfde3bb 399
GregCr 0:deaafdfde3bb 400 /*!
GregCr 0:deaafdfde3bb 401 * \brief Holds the lengths mode of a LoRa packet type
GregCr 0:deaafdfde3bb 402 */
GregCr 4:c6ef863d0b07 403 typedef enum
GregCr 0:deaafdfde3bb 404 {
GregCr 0:deaafdfde3bb 405 LORA_PACKET_VARIABLE_LENGTH = 0x00, //!< The packet is on variable size, header included
GregCr 0:deaafdfde3bb 406 LORA_PACKET_FIXED_LENGTH = 0x01, //!< The packet is known on both sides, no header included in the packet
GregCr 0:deaafdfde3bb 407 LORA_PACKET_EXPLICIT = LORA_PACKET_VARIABLE_LENGTH,
GregCr 0:deaafdfde3bb 408 LORA_PACKET_IMPLICIT = LORA_PACKET_FIXED_LENGTH,
GregCr 4:c6ef863d0b07 409 }RadioLoRaPacketLengthsMode_t;
GregCr 0:deaafdfde3bb 410
GregCr 0:deaafdfde3bb 411 /*!
GregCr 0:deaafdfde3bb 412 * \brief Represents the CRC mode for LoRa packet type
GregCr 0:deaafdfde3bb 413 */
GregCr 4:c6ef863d0b07 414 typedef enum
GregCr 0:deaafdfde3bb 415 {
GregCr 0:deaafdfde3bb 416 LORA_CRC_ON = 0x01, //!< CRC activated
GregCr 0:deaafdfde3bb 417 LORA_CRC_OFF = 0x00, //!< CRC not used
GregCr 4:c6ef863d0b07 418 }RadioLoRaCrcModes_t;
GregCr 0:deaafdfde3bb 419
GregCr 0:deaafdfde3bb 420 /*!
GregCr 0:deaafdfde3bb 421 * \brief Represents the IQ mode for LoRa packet type
GregCr 0:deaafdfde3bb 422 */
GregCr 4:c6ef863d0b07 423 typedef enum
GregCr 0:deaafdfde3bb 424 {
GregCr 0:deaafdfde3bb 425 LORA_IQ_NORMAL = 0x00,
GregCr 0:deaafdfde3bb 426 LORA_IQ_INVERTED = 0x01,
GregCr 4:c6ef863d0b07 427 }RadioLoRaIQModes_t;
GregCr 4:c6ef863d0b07 428
GregCr 4:c6ef863d0b07 429 /*!
GregCr 4:c6ef863d0b07 430 * \brief Represents the volatge used to control the TCXO on/off from DIO3
GregCr 4:c6ef863d0b07 431 */
GregCr 4:c6ef863d0b07 432 typedef enum
GregCr 4:c6ef863d0b07 433 {
GregCr 4:c6ef863d0b07 434 TCXO_CTRL_1_6V = 0x00,
GregCr 4:c6ef863d0b07 435 TCXO_CTRL_1_7V = 0x01,
GregCr 4:c6ef863d0b07 436 TCXO_CTRL_1_8V = 0x02,
GregCr 4:c6ef863d0b07 437 TCXO_CTRL_2_2V = 0x03,
GregCr 4:c6ef863d0b07 438 TCXO_CTRL_2_4V = 0x04,
GregCr 4:c6ef863d0b07 439 TCXO_CTRL_2_7V = 0x05,
GregCr 4:c6ef863d0b07 440 TCXO_CTRL_3_0V = 0x06,
GregCr 4:c6ef863d0b07 441 TCXO_CTRL_3_3V = 0x07,
GregCr 4:c6ef863d0b07 442 }RadioTcxoCtrlVoltage_t;
GregCr 0:deaafdfde3bb 443
GregCr 0:deaafdfde3bb 444 /*!
GregCr 0:deaafdfde3bb 445 * \brief Represents the interruption masks available for the radio
GregCr 0:deaafdfde3bb 446 *
GregCr 0:deaafdfde3bb 447 * \remark Note that not all these interruptions are available for all packet types
GregCr 0:deaafdfde3bb 448 */
GregCr 4:c6ef863d0b07 449 typedef enum
GregCr 0:deaafdfde3bb 450 {
GregCr 0:deaafdfde3bb 451 IRQ_RADIO_NONE = 0x0000,
GregCr 0:deaafdfde3bb 452 IRQ_TX_DONE = 0x0001,
GregCr 0:deaafdfde3bb 453 IRQ_RX_DONE = 0x0002,
GregCr 0:deaafdfde3bb 454 IRQ_PREAMBLE_DETECTED = 0x0004,
GregCr 0:deaafdfde3bb 455 IRQ_SYNCWORD_VALID = 0x0008,
GregCr 0:deaafdfde3bb 456 IRQ_HEADER_VALID = 0x0010,
GregCr 4:c6ef863d0b07 457 IRQ_HEADER_ERROR = 0x0020,
GregCr 3:7e3595a9ebe0 458 IRQ_CRC_ERROR = 0x0040,
GregCr 0:deaafdfde3bb 459 IRQ_CAD_DONE = 0x0080,
GregCr 0:deaafdfde3bb 460 IRQ_CAD_ACTIVITY_DETECTED = 0x0100,
GregCr 0:deaafdfde3bb 461 IRQ_RX_TX_TIMEOUT = 0x0200,
GregCr 0:deaafdfde3bb 462 IRQ_RADIO_ALL = 0xFFFF,
GregCr 4:c6ef863d0b07 463 }RadioIrqMasks_t;
GregCr 0:deaafdfde3bb 464
GregCr 0:deaafdfde3bb 465 /*!
GregCr 0:deaafdfde3bb 466 * \brief Represents all possible opcode understood by the radio
GregCr 0:deaafdfde3bb 467 */
lo 7:7d021a81fe46 468
GregCr 0:deaafdfde3bb 469
GregCr 0:deaafdfde3bb 470 /*!
GregCr 0:deaafdfde3bb 471 * \brief The type describing the modulation parameters for every packet types
GregCr 0:deaafdfde3bb 472 */
GregCr 0:deaafdfde3bb 473 typedef struct
GregCr 0:deaafdfde3bb 474 {
GregCr 4:c6ef863d0b07 475 RadioPacketTypes_t PacketType; //!< Packet to which the modulation parameters are referring to.
GregCr 4:c6ef863d0b07 476 struct
GregCr 0:deaafdfde3bb 477 {
GregCr 0:deaafdfde3bb 478 struct
GregCr 0:deaafdfde3bb 479 {
GregCr 3:7e3595a9ebe0 480 uint32_t BitRate;
GregCr 3:7e3595a9ebe0 481 uint32_t Fdev;
GregCr 4:c6ef863d0b07 482 RadioModShapings_t ModulationShaping;
GregCr 4:c6ef863d0b07 483 uint8_t Bandwidth;
GregCr 3:7e3595a9ebe0 484 }Gfsk;
GregCr 0:deaafdfde3bb 485 struct
GregCr 0:deaafdfde3bb 486 {
GregCr 0:deaafdfde3bb 487 RadioLoRaSpreadingFactors_t SpreadingFactor; //!< Spreading Factor for the LoRa modulation
GregCr 0:deaafdfde3bb 488 RadioLoRaBandwidths_t Bandwidth; //!< Bandwidth for the LoRa modulation
GregCr 0:deaafdfde3bb 489 RadioLoRaCodingRates_t CodingRate; //!< Coding rate for the LoRa modulation
GregCr 4:c6ef863d0b07 490 uint8_t LowDatarateOptimize; //!< Indicates if the modem uses the low datarate optimization
GregCr 0:deaafdfde3bb 491 }LoRa;
GregCr 0:deaafdfde3bb 492 }Params; //!< Holds the modulation parameters structure
GregCr 0:deaafdfde3bb 493 }ModulationParams_t;
GregCr 0:deaafdfde3bb 494
GregCr 0:deaafdfde3bb 495 /*!
GregCr 0:deaafdfde3bb 496 * \brief The type describing the packet parameters for every packet types
GregCr 0:deaafdfde3bb 497 */
GregCr 0:deaafdfde3bb 498 typedef struct
GregCr 0:deaafdfde3bb 499 {
GregCr 4:c6ef863d0b07 500 RadioPacketTypes_t PacketType; //!< Packet to which the packet parameters are referring to.
GregCr 4:c6ef863d0b07 501 struct
GregCr 0:deaafdfde3bb 502 {
GregCr 0:deaafdfde3bb 503 /*!
GregCr 0:deaafdfde3bb 504 * \brief Holds the GFSK packet parameters
GregCr 0:deaafdfde3bb 505 */
GregCr 0:deaafdfde3bb 506 struct
GregCr 0:deaafdfde3bb 507 {
GregCr 4:c6ef863d0b07 508 uint16_t PreambleLength; //!< The preamble Tx length for GFSK packet type in bit
GregCr 4:c6ef863d0b07 509 RadioPreambleDetection_t PreambleMinDetect; //!< The preamble Rx length minimal for GFSK packet type
GregCr 4:c6ef863d0b07 510 uint8_t SyncWordLength; //!< The synchronization word length for GFSK packet type
GregCr 4:c6ef863d0b07 511 RadioAddressComp_t AddrComp; //!< Activated SyncWord correlators
GregCr 0:deaafdfde3bb 512 RadioPacketLengthModes_t HeaderType; //!< If the header is explicit, it will be transmitted in the GFSK packet. If the header is implicit, it will not be transmitted
GregCr 0:deaafdfde3bb 513 uint8_t PayloadLength; //!< Size of the payload in the GFSK packet
GregCr 0:deaafdfde3bb 514 RadioCrcTypes_t CrcLength; //!< Size of the CRC block in the GFSK packet
GregCr 4:c6ef863d0b07 515 RadioDcFree_t DcFree;
GregCr 0:deaafdfde3bb 516 }Gfsk;
GregCr 0:deaafdfde3bb 517 /*!
GregCr 0:deaafdfde3bb 518 * \brief Holds the LoRa packet parameters
GregCr 0:deaafdfde3bb 519 */
GregCr 0:deaafdfde3bb 520 struct
GregCr 0:deaafdfde3bb 521 {
GregCr 4:c6ef863d0b07 522 uint16_t PreambleLength; //!< The preamble length is the number of LoRa symbols in the preamble
GregCr 0:deaafdfde3bb 523 RadioLoRaPacketLengthsMode_t HeaderType; //!< If the header is explicit, it will be transmitted in the LoRa packet. If the header is implicit, it will not be transmitted
GregCr 0:deaafdfde3bb 524 uint8_t PayloadLength; //!< Size of the payload in the LoRa packet
GregCr 0:deaafdfde3bb 525 RadioLoRaCrcModes_t CrcMode; //!< Size of CRC block in LoRa packet
GregCr 0:deaafdfde3bb 526 RadioLoRaIQModes_t InvertIQ; //!< Allows to swap IQ for LoRa packet
GregCr 0:deaafdfde3bb 527 }LoRa;
GregCr 0:deaafdfde3bb 528 }Params; //!< Holds the packet parameters structure
GregCr 0:deaafdfde3bb 529 }PacketParams_t;
GregCr 0:deaafdfde3bb 530
GregCr 0:deaafdfde3bb 531 /*!
GregCr 0:deaafdfde3bb 532 * \brief Represents the packet status for every packet type
GregCr 0:deaafdfde3bb 533 */
GregCr 0:deaafdfde3bb 534 typedef struct
GregCr 0:deaafdfde3bb 535 {
GregCr 4:c6ef863d0b07 536 RadioPacketTypes_t packetType; //!< Packet to which the packet status are referring to.
GregCr 4:c6ef863d0b07 537 struct
GregCr 0:deaafdfde3bb 538 {
GregCr 0:deaafdfde3bb 539 struct
GregCr 0:deaafdfde3bb 540 {
GregCr 0:deaafdfde3bb 541 uint8_t RxStatus;
GregCr 0:deaafdfde3bb 542 int8_t RssiAvg; //!< The averaged RSSI
GregCr 0:deaafdfde3bb 543 int8_t RssiSync; //!< The RSSI measured on last packet
GregCr 4:c6ef863d0b07 544 uint32_t FreqError;
GregCr 0:deaafdfde3bb 545 }Gfsk;
GregCr 0:deaafdfde3bb 546 struct
GregCr 0:deaafdfde3bb 547 {
GregCr 0:deaafdfde3bb 548 int8_t RssiPkt; //!< The RSSI of the last packet
GregCr 0:deaafdfde3bb 549 int8_t SnrPkt; //!< The SNR of the last packet
GregCr 0:deaafdfde3bb 550 int8_t SignalRssiPkt;
GregCr 4:c6ef863d0b07 551 uint32_t FreqError;
GregCr 0:deaafdfde3bb 552 }LoRa;
GregCr 4:c6ef863d0b07 553 }Params;
GregCr 0:deaafdfde3bb 554 }PacketStatus_t;
GregCr 0:deaafdfde3bb 555
GregCr 0:deaafdfde3bb 556 /*!
GregCr 0:deaafdfde3bb 557 * \brief Represents the Rx internal counters values when GFSK or LoRa packet type is used
GregCr 0:deaafdfde3bb 558 */
GregCr 0:deaafdfde3bb 559 typedef struct
GregCr 0:deaafdfde3bb 560 {
GregCr 4:c6ef863d0b07 561 RadioPacketTypes_t packetType; //!< Packet to which the packet status are referring to.
GregCr 4:c6ef863d0b07 562 uint16_t PacketReceived;
GregCr 4:c6ef863d0b07 563 uint16_t CrcOk;
GregCr 4:c6ef863d0b07 564 uint16_t LengthError;
GregCr 0:deaafdfde3bb 565 }RxCounter_t;
GregCr 0:deaafdfde3bb 566
GregCr 0:deaafdfde3bb 567 /*!
GregCr 0:deaafdfde3bb 568 * \brief Represents a calibration configuration
GregCr 0:deaafdfde3bb 569 */
GregCr 0:deaafdfde3bb 570 typedef union
GregCr 0:deaafdfde3bb 571 {
GregCr 0:deaafdfde3bb 572 struct
GregCr 0:deaafdfde3bb 573 {
GregCr 4:c6ef863d0b07 574 uint8_t RC64KEnable : 1; //!< Calibrate RC64K clock
GregCr 4:c6ef863d0b07 575 uint8_t RC13MEnable : 1; //!< Calibrate RC13M clock
GregCr 4:c6ef863d0b07 576 uint8_t PLLEnable : 1; //!< Calibrate PLL
GregCr 0:deaafdfde3bb 577 uint8_t ADCPulseEnable : 1; //!< Calibrate ADC Pulse
GregCr 4:c6ef863d0b07 578 uint8_t ADCBulkNEnable : 1; //!< Calibrate ADC bulkN
GregCr 4:c6ef863d0b07 579 uint8_t ADCBulkPEnable : 1; //!< Calibrate ADC bulkP
GregCr 4:c6ef863d0b07 580 uint8_t ImgEnable : 1;
GregCr 4:c6ef863d0b07 581 uint8_t : 1;
GregCr 4:c6ef863d0b07 582 }Fields;
GregCr 4:c6ef863d0b07 583 uint8_t Value;
GregCr 0:deaafdfde3bb 584 }CalibrationParams_t;
GregCr 0:deaafdfde3bb 585
GregCr 0:deaafdfde3bb 586 /*!
GregCr 0:deaafdfde3bb 587 * \brief Represents a sleep mode configuration
GregCr 0:deaafdfde3bb 588 */
GregCr 0:deaafdfde3bb 589 typedef union
GregCr 0:deaafdfde3bb 590 {
GregCr 0:deaafdfde3bb 591 struct
GregCr 0:deaafdfde3bb 592 {
GregCr 3:7e3595a9ebe0 593 uint8_t WakeUpRTC : 1; //!< Get out of sleep mode if wakeup signal received from RTC
GregCr 3:7e3595a9ebe0 594 uint8_t Reset : 1;
GregCr 0:deaafdfde3bb 595 uint8_t WarmStart : 1;
GregCr 3:7e3595a9ebe0 596 uint8_t Reserved : 5;
GregCr 4:c6ef863d0b07 597 }Fields;
GregCr 4:c6ef863d0b07 598 uint8_t Value;
GregCr 0:deaafdfde3bb 599 }SleepParams_t;
GregCr 0:deaafdfde3bb 600
GregCr 4:c6ef863d0b07 601 /*!
GregCr 4:c6ef863d0b07 602 * \brief Represents the possible radio system error states
GregCr 4:c6ef863d0b07 603 */
GregCr 4:c6ef863d0b07 604 typedef union
GregCr 4:c6ef863d0b07 605 {
GregCr 4:c6ef863d0b07 606 struct
GregCr 4:c6ef863d0b07 607 {
GregCr 4:c6ef863d0b07 608 uint8_t Rc64kCalib : 1; //!< RC 64kHz oscillator calibration failed
GregCr 4:c6ef863d0b07 609 uint8_t Rc13mCalib : 1; //!< RC 13MHz oscillator calibration failed
GregCr 4:c6ef863d0b07 610 uint8_t PllCalib : 1; //!< PLL calibration failed
GregCr 4:c6ef863d0b07 611 uint8_t AdcCalib : 1; //!< ADC calibration failed
GregCr 4:c6ef863d0b07 612 uint8_t ImgCalib : 1; //!< Image calibration failed
GregCr 4:c6ef863d0b07 613 uint8_t XoscStart : 1; //!< XOSC oscillator failed to start
GregCr 4:c6ef863d0b07 614 uint8_t PllLock : 1; //!< PLL lock failed
GregCr 4:c6ef863d0b07 615 uint8_t BuckStart : 1; //!< Buck converter failed to start
GregCr 4:c6ef863d0b07 616 uint8_t PaRamp : 1; //!< PA ramp failed
GregCr 4:c6ef863d0b07 617 uint8_t : 7; //!< Reserved
GregCr 4:c6ef863d0b07 618 }Fields;
GregCr 4:c6ef863d0b07 619 uint16_t Value;
GregCr 4:c6ef863d0b07 620 }RadioError_t;
GregCr 0:deaafdfde3bb 621
GregCr 0:deaafdfde3bb 622 /*!
GregCr 2:4ff11ea92fbe 623 * \brief Represents the SX126x and its features
GregCr 0:deaafdfde3bb 624 *
GregCr 2:4ff11ea92fbe 625 * It implements the commands the SX126x can understands
GregCr 0:deaafdfde3bb 626 */
GregCr 2:4ff11ea92fbe 627 class SX126x : public Radio
GregCr 0:deaafdfde3bb 628 {
GregCr 0:deaafdfde3bb 629 public:
GregCr 0:deaafdfde3bb 630 /*!
GregCr 2:4ff11ea92fbe 631 * \brief Instantiates a SX126x object and provides API functions to communicates with the radio
GregCr 4:c6ef863d0b07 632 * \param [in] callbacks Pointer to the callbacks structure defining
GregCr 4:c6ef863d0b07 633 * all callbacks function pointers
GregCr 0:deaafdfde3bb 634 */
GregCr 4:c6ef863d0b07 635 SX126x( RadioCallbacks_t *callbacks ):
GregCr 4:c6ef863d0b07 636 Radio( callbacks )
GregCr 0:deaafdfde3bb 637 {
GregCr 4:c6ef863d0b07 638 this->dioIrq = &SX126x::OnDioIrq;
GregCr 4:c6ef863d0b07 639 this->PacketType = PACKET_TYPE_NONE;
GregCr 4:c6ef863d0b07 640 this->PollingMode = false;
GregCr 4:c6ef863d0b07 641 this->IrqState = false;
GregCr 0:deaafdfde3bb 642 }
GregCr 0:deaafdfde3bb 643
GregCr 2:4ff11ea92fbe 644 virtual ~SX126x( )
GregCr 0:deaafdfde3bb 645 {
GregCr 0:deaafdfde3bb 646 }
GregCr 0:deaafdfde3bb 647
GregCr 4:c6ef863d0b07 648 private:
GregCr 0:deaafdfde3bb 649 /*!
GregCr 0:deaafdfde3bb 650 * \brief Holds the internal operating mode of the radio
GregCr 0:deaafdfde3bb 651 */
GregCr 0:deaafdfde3bb 652 RadioOperatingModes_t OperatingMode;
GregCr 0:deaafdfde3bb 653
GregCr 0:deaafdfde3bb 654 /*!
GregCr 0:deaafdfde3bb 655 * \brief Stores the current packet type set in the radio
GregCr 0:deaafdfde3bb 656 */
GregCr 4:c6ef863d0b07 657 RadioPacketTypes_t PacketType;
GregCr 0:deaafdfde3bb 658
GregCr 4:c6ef863d0b07 659 /*!
GregCr 4:c6ef863d0b07 660 * \brief Holds a flag raised on radio interrupt
GregCr 4:c6ef863d0b07 661 */
GregCr 4:c6ef863d0b07 662 bool IrqState;
GregCr 0:deaafdfde3bb 663
GregCr 0:deaafdfde3bb 664 /*!
GregCr 0:deaafdfde3bb 665 * \brief Hardware DIO IRQ functions
GregCr 0:deaafdfde3bb 666 */
GregCr 0:deaafdfde3bb 667 DioIrqHandler dioIrq;
GregCr 0:deaafdfde3bb 668
GregCr 4:c6ef863d0b07 669 /*!
GregCr 4:c6ef863d0b07 670 * \brief Holds the polling state of the driver
GregCr 4:c6ef863d0b07 671 */
GregCr 4:c6ef863d0b07 672 bool PollingMode;
GregCr 0:deaafdfde3bb 673
GregCr 4:c6ef863d0b07 674 protected:
GregCr 0:deaafdfde3bb 675
GregCr 0:deaafdfde3bb 676 /*!
GregCr 0:deaafdfde3bb 677 * \brief Sets a function to be triggered on radio interrupt
GregCr 0:deaafdfde3bb 678 *
GregCr 0:deaafdfde3bb 679 * \param [in] irqHandler A pointer to a function to be run on interrupt
GregCr 0:deaafdfde3bb 680 * from the radio
GregCr 0:deaafdfde3bb 681 */
GregCr 0:deaafdfde3bb 682 virtual void IoIrqInit( DioIrqHandler irqHandler ) = 0;
GregCr 0:deaafdfde3bb 683
GregCr 4:c6ef863d0b07 684 /*!
GregCr 4:c6ef863d0b07 685 * \brief DIOs interrupt callback
GregCr 4:c6ef863d0b07 686 *
GregCr 4:c6ef863d0b07 687 * \remark Called to handle all 3 DIOs pins
GregCr 4:c6ef863d0b07 688 */
GregCr 4:c6ef863d0b07 689 void OnDioIrq( void );
GregCr 0:deaafdfde3bb 690 public:
GregCr 0:deaafdfde3bb 691 /*!
GregCr 0:deaafdfde3bb 692 * \brief Initializes the radio driver
GregCr 0:deaafdfde3bb 693 */
GregCr 0:deaafdfde3bb 694 void Init( void );
GregCr 0:deaafdfde3bb 695
GregCr 0:deaafdfde3bb 696 /*!
GregCr 4:c6ef863d0b07 697 * \brief Gets the current Operation Mode of the Radip
GregCr 4:c6ef863d0b07 698 *
GregCr 4:c6ef863d0b07 699 * \retval RadioOperatingModes_t last operating mode
GregCr 4:c6ef863d0b07 700 */
GregCr 4:c6ef863d0b07 701 virtual RadioOperatingModes_t GetOperatingMode( void );
GregCr 4:c6ef863d0b07 702
GregCr 4:c6ef863d0b07 703 /*!
GregCr 4:c6ef863d0b07 704 * \brief Wakeup the radio if it is in Sleep mode and check that Busy is low
GregCr 4:c6ef863d0b07 705 */
GregCr 4:c6ef863d0b07 706 virtual void CheckDeviceReady( void );
GregCr 4:c6ef863d0b07 707
GregCr 4:c6ef863d0b07 708 /*!
GregCr 4:c6ef863d0b07 709 * \brief Saves the payload to be send in the radio buffer
GregCr 4:c6ef863d0b07 710 *
GregCr 4:c6ef863d0b07 711 * \param [in] payload A pointer to the payload
GregCr 4:c6ef863d0b07 712 * \param [in] size The size of the payload
GregCr 4:c6ef863d0b07 713 */
GregCr 4:c6ef863d0b07 714 void SetPayload( uint8_t *payload, uint8_t size );
GregCr 4:c6ef863d0b07 715
GregCr 4:c6ef863d0b07 716 /*!
GregCr 4:c6ef863d0b07 717 * \brief Reads the payload received. If the received payload is longer
GregCr 4:c6ef863d0b07 718 * than maxSize, then the method returns 1 and do not set size and payload.
GregCr 4:c6ef863d0b07 719 *
GregCr 4:c6ef863d0b07 720 * \param [out] payload A pointer to a buffer into which the payload will be copied
GregCr 4:c6ef863d0b07 721 * \param [out] size A pointer to the size of the payload received
GregCr 4:c6ef863d0b07 722 * \param [in] maxSize The maximal size allowed to copy into the buffer
GregCr 4:c6ef863d0b07 723 */
GregCr 4:c6ef863d0b07 724 uint8_t GetPayload( uint8_t *payload, uint8_t *size, uint8_t maxSize );
GregCr 4:c6ef863d0b07 725
GregCr 4:c6ef863d0b07 726 /*!
GregCr 4:c6ef863d0b07 727 * \brief Sends a payload
GregCr 4:c6ef863d0b07 728 *
GregCr 4:c6ef863d0b07 729 * \param [in] payload A pointer to the payload to send
GregCr 4:c6ef863d0b07 730 * \param [in] size The size of the payload to send
GregCr 4:c6ef863d0b07 731 * \param [in] timeout The timeout for Tx operation
GregCr 4:c6ef863d0b07 732 */
GregCr 4:c6ef863d0b07 733 void SendPayload( uint8_t *payload, uint8_t size, uint32_t timeout );
GregCr 4:c6ef863d0b07 734
GregCr 4:c6ef863d0b07 735 /*!
GregCr 4:c6ef863d0b07 736 * \brief Sets the Sync Word given by index used in GFSK
GregCr 4:c6ef863d0b07 737 *
GregCr 4:c6ef863d0b07 738 * \param [in] syncWord SyncWord bytes ( 8 bytes )
GregCr 4:c6ef863d0b07 739 *
GregCr 4:c6ef863d0b07 740 * \retval status [0: OK, 1: NOK]
GregCr 4:c6ef863d0b07 741 */
GregCr 4:c6ef863d0b07 742 uint8_t SetSyncWord( uint8_t *syncWord );
GregCr 4:c6ef863d0b07 743
GregCr 4:c6ef863d0b07 744 /*!
GregCr 4:c6ef863d0b07 745 * \brief Sets the Initial value for the LFSR used for the CRC calculation
GregCr 4:c6ef863d0b07 746 *
GregCr 4:c6ef863d0b07 747 * \param [in] seed Initial LFSR value ( 2 bytes )
GregCr 4:c6ef863d0b07 748 *
GregCr 4:c6ef863d0b07 749 */
GregCr 4:c6ef863d0b07 750 void SetCrcSeed( uint16_t seed );
GregCr 4:c6ef863d0b07 751
GregCr 4:c6ef863d0b07 752 /*!
GregCr 4:c6ef863d0b07 753 * \brief Sets the seed used for the CRC calculation
GregCr 4:c6ef863d0b07 754 *
GregCr 4:c6ef863d0b07 755 * \param [in] seed The seed value
GregCr 4:c6ef863d0b07 756 *
GregCr 4:c6ef863d0b07 757 */
GregCr 4:c6ef863d0b07 758 void SetCrcPolynomial( uint16_t seed );
GregCr 4:c6ef863d0b07 759
GregCr 4:c6ef863d0b07 760 /*!
GregCr 4:c6ef863d0b07 761 * \brief Sets the Initial value of the LFSR used for the whitening in GFSK protocols
GregCr 4:c6ef863d0b07 762 *
GregCr 4:c6ef863d0b07 763 * \param [in] seed Initial LFSR value
GregCr 4:c6ef863d0b07 764 */
GregCr 4:c6ef863d0b07 765 void SetWhiteningSeed( uint16_t seed );
GregCr 4:c6ef863d0b07 766
GregCr 4:c6ef863d0b07 767 /*!
GregCr 4:c6ef863d0b07 768 * \brief Gets a 32 bits random value generated by the radio
GregCr 4:c6ef863d0b07 769 *
GregCr 4:c6ef863d0b07 770 * \remark The radio must be in reception mode before executing this function
GregCr 4:c6ef863d0b07 771 *
GregCr 4:c6ef863d0b07 772 * \retval randomValue 32 bits random value
GregCr 4:c6ef863d0b07 773 */
GregCr 4:c6ef863d0b07 774 uint32_t GetRandom( void );
GregCr 4:c6ef863d0b07 775
GregCr 4:c6ef863d0b07 776 /*!
GregCr 4:c6ef863d0b07 777 * \brief Sets the radio in sleep mode
GregCr 4:c6ef863d0b07 778 *
GregCr 4:c6ef863d0b07 779 * \param [in] sleepConfig The sleep configuration describing data
GregCr 4:c6ef863d0b07 780 * retention and RTC wake-up
GregCr 4:c6ef863d0b07 781 */
GregCr 4:c6ef863d0b07 782 void SetSleep( SleepParams_t sleepConfig );
GregCr 4:c6ef863d0b07 783
GregCr 4:c6ef863d0b07 784 /*!
GregCr 4:c6ef863d0b07 785 * \brief Sets the radio in configuration mode
GregCr 4:c6ef863d0b07 786 *
GregCr 4:c6ef863d0b07 787 * \param [in] mode The standby mode to put the radio into
GregCr 0:deaafdfde3bb 788 */
GregCr 4:c6ef863d0b07 789 void SetStandby( RadioStandbyModes_t mode );
GregCr 4:c6ef863d0b07 790
GregCr 4:c6ef863d0b07 791 /*!
GregCr 4:c6ef863d0b07 792 * \brief Sets the radio in FS mode
GregCr 4:c6ef863d0b07 793 */
GregCr 4:c6ef863d0b07 794 void SetFs( void );
GregCr 4:c6ef863d0b07 795
GregCr 4:c6ef863d0b07 796 /*!
GregCr 4:c6ef863d0b07 797 * \brief Sets the radio in transmission mode
GregCr 4:c6ef863d0b07 798 *
GregCr 4:c6ef863d0b07 799 * \param [in] timeout Structure describing the transmission timeout value
GregCr 4:c6ef863d0b07 800 */
GregCr 4:c6ef863d0b07 801 void SetTx( uint32_t timeout );
GregCr 4:c6ef863d0b07 802
GregCr 4:c6ef863d0b07 803 /*!
GregCr 4:c6ef863d0b07 804 * \brief Sets the radio in reception Boosted mode
GregCr 4:c6ef863d0b07 805 *
GregCr 4:c6ef863d0b07 806 * \param [in] timeout Structure describing the transmission timeout value
GregCr 4:c6ef863d0b07 807 */
GregCr 4:c6ef863d0b07 808 void SetRxBoosted( uint32_t timeout );
GregCr 4:c6ef863d0b07 809
GregCr 4:c6ef863d0b07 810 /*!
GregCr 4:c6ef863d0b07 811 * \brief Sets the radio in reception mode
GregCr 4:c6ef863d0b07 812 *
GregCr 4:c6ef863d0b07 813 * \param [in] timeout Structure describing the reception timeout value
GregCr 4:c6ef863d0b07 814 */
GregCr 4:c6ef863d0b07 815 void SetRx( uint32_t timeout );
GregCr 4:c6ef863d0b07 816
GregCr 4:c6ef863d0b07 817 /*!
GregCr 4:c6ef863d0b07 818 * \brief Sets the Rx duty cycle management parameters
GregCr 4:c6ef863d0b07 819 *
GregCr 4:c6ef863d0b07 820 * \param [in] rxTime Structure describing reception timeout value
GregCr 4:c6ef863d0b07 821 * \param [in] sleepTime Structure describing sleep timeout value
GregCr 4:c6ef863d0b07 822 */
GregCr 4:c6ef863d0b07 823 void SetRxDutyCycle( uint32_t rxTime, uint32_t sleepTime );
GregCr 4:c6ef863d0b07 824
GregCr 4:c6ef863d0b07 825 /*!
GregCr 4:c6ef863d0b07 826 * \brief Sets the radio in CAD mode
GregCr 4:c6ef863d0b07 827 */
GregCr 4:c6ef863d0b07 828 void SetCad( void );
GregCr 4:c6ef863d0b07 829
GregCr 4:c6ef863d0b07 830 /*!
GregCr 4:c6ef863d0b07 831 * \brief Sets the radio in continuous wave transmission mode
GregCr 4:c6ef863d0b07 832 */
GregCr 4:c6ef863d0b07 833 void SetTxContinuousWave( void );
GregCr 4:c6ef863d0b07 834
GregCr 4:c6ef863d0b07 835 /*!
GregCr 4:c6ef863d0b07 836 * \brief Sets the radio in continuous preamble transmission mode
GregCr 4:c6ef863d0b07 837 */
GregCr 4:c6ef863d0b07 838 void SetTxInfinitePreamble( void );
GregCr 4:c6ef863d0b07 839
GregCr 4:c6ef863d0b07 840 /*!
GregCr 4:c6ef863d0b07 841 * \brief Decide which interrupt will stop the internal radio rx timer.
GregCr 4:c6ef863d0b07 842 *
GregCr 4:c6ef863d0b07 843 * \param [in] enable [0: Timer stop after header/syncword detection
GregCr 4:c6ef863d0b07 844 * 1: Timer stop after preamble detection]
GregCr 4:c6ef863d0b07 845 */
GregCr 4:c6ef863d0b07 846 void SetStopRxTimerOnPreambleDetect( bool enable );
GregCr 4:c6ef863d0b07 847
GregCr 4:c6ef863d0b07 848 /*!
GregCr 4:c6ef863d0b07 849 * \brief Set the number of symbol the radio will wait to validate a reception
GregCr 4:c6ef863d0b07 850 *
GregCr 4:c6ef863d0b07 851 * \param [in] SymbNum number of LoRa symbols
GregCr 4:c6ef863d0b07 852 */
GregCr 4:c6ef863d0b07 853 void SetLoRaSymbNumTimeout( uint8_t SymbNum );
GregCr 4:c6ef863d0b07 854
GregCr 4:c6ef863d0b07 855 /*!
GregCr 4:c6ef863d0b07 856 * \brief Sets the power regulators operating mode
GregCr 4:c6ef863d0b07 857 *
GregCr 4:c6ef863d0b07 858 * \param [in] mode [0: LDO, 1:DC_DC]
GregCr 4:c6ef863d0b07 859 */
GregCr 4:c6ef863d0b07 860 void SetRegulatorMode( RadioRegulatorMode_t mode );
GregCr 4:c6ef863d0b07 861
GregCr 4:c6ef863d0b07 862 /*!
GregCr 4:c6ef863d0b07 863 * \brief Calibrates the given radio block
GregCr 4:c6ef863d0b07 864 *
GregCr 4:c6ef863d0b07 865 * \param [in] calibParam The description of blocks to be calibrated
GregCr 4:c6ef863d0b07 866 */
GregCr 4:c6ef863d0b07 867 void Calibrate( CalibrationParams_t calibParam );
GregCr 4:c6ef863d0b07 868
GregCr 4:c6ef863d0b07 869 /*!
GregCr 5:e488e6f185f3 870 * \brief Calibrates the Image rejection depending of the frequency
GregCr 4:c6ef863d0b07 871 *
GregCr 5:e488e6f185f3 872 * \param [in] freq The operating frequency
GregCr 4:c6ef863d0b07 873 */
GregCr 5:e488e6f185f3 874 void CalibrateImage( uint32_t freq );
GregCr 4:c6ef863d0b07 875
GregCr 4:c6ef863d0b07 876 /*!
GregCr 4:c6ef863d0b07 877 * \brief Sets the transmission parameters
GregCr 4:c6ef863d0b07 878 *
GregCr 4:c6ef863d0b07 879 * \param [in] paDutyCycle Duty Cycle for the PA
GregCr 4:c6ef863d0b07 880 * \param [in] HpMax 0 for sx1261, 7 for sx1262
GregCr 4:c6ef863d0b07 881 * \param [in] deviceSel 1 for sx1261, 0 for sx1262
GregCr 4:c6ef863d0b07 882 * \param [in] paLUT 0 for 14dBm LUT, 1 for 22dBm LUT
GregCr 4:c6ef863d0b07 883 */
GregCr 4:c6ef863d0b07 884 void SetPaConfig( uint8_t paDutyCycle, uint8_t HpMax, uint8_t deviceSel, uint8_t paLUT );
GregCr 0:deaafdfde3bb 885
GregCr 0:deaafdfde3bb 886 /*!
GregCr 4:c6ef863d0b07 887 * \brief Defines into which mode the chip goes after a TX / RX done
GregCr 4:c6ef863d0b07 888 *
GregCr 4:c6ef863d0b07 889 * \param [in] fallbackMode The mode in which the radio goes
GregCr 4:c6ef863d0b07 890 */
GregCr 4:c6ef863d0b07 891 void SetRxTxFallbackMode( uint8_t fallbackMode );
GregCr 4:c6ef863d0b07 892
GregCr 4:c6ef863d0b07 893 /*!
GregCr 4:c6ef863d0b07 894 * \brief Sets the IRQ mask and DIO masks
GregCr 4:c6ef863d0b07 895 *
GregCr 4:c6ef863d0b07 896 * \param [in] irqMask General IRQ mask
GregCr 4:c6ef863d0b07 897 * \param [in] dio1Mask DIO1 mask
GregCr 4:c6ef863d0b07 898 * \param [in] dio2Mask DIO2 mask
GregCr 4:c6ef863d0b07 899 * \param [in] dio3Mask DIO3 mask
GregCr 4:c6ef863d0b07 900 */
GregCr 4:c6ef863d0b07 901 void SetDioIrqParams( uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask, uint16_t dio3Mask );
GregCr 4:c6ef863d0b07 902
GregCr 4:c6ef863d0b07 903 /*!
GregCr 4:c6ef863d0b07 904 * \brief Returns the current IRQ status
GregCr 4:c6ef863d0b07 905 *
GregCr 4:c6ef863d0b07 906 * \retval irqStatus IRQ status
GregCr 4:c6ef863d0b07 907 */
GregCr 4:c6ef863d0b07 908 uint16_t GetIrqStatus( void );
GregCr 4:c6ef863d0b07 909
GregCr 4:c6ef863d0b07 910 /*
GregCr 4:c6ef863d0b07 911 * \brief Indicates if DIO2 is used to control an RF Switch
GregCr 4:c6ef863d0b07 912 *
GregCr 4:c6ef863d0b07 913 * \param [in] enable true of false
GregCr 4:c6ef863d0b07 914 */
GregCr 4:c6ef863d0b07 915 void SetDio2AsRfSwitchCtrl( uint8_t enable );
GregCr 4:c6ef863d0b07 916
GregCr 4:c6ef863d0b07 917 /*
GregCr 4:c6ef863d0b07 918 * \brief Indicates if the Radio main clock is supplied from a tcxo
GregCr 4:c6ef863d0b07 919 *
GregCr 4:c6ef863d0b07 920 * \param [in] tcxoVoltage voltage used to control the TCXO
GregCr 4:c6ef863d0b07 921 * \param [in] timeout time given to the TCXO to go to 32MHz
GregCr 4:c6ef863d0b07 922 */
GregCr 4:c6ef863d0b07 923 void SetDio3AsTcxoCtrl( RadioTcxoCtrlVoltage_t tcxoVoltage, uint32_t timeout );
GregCr 4:c6ef863d0b07 924
GregCr 4:c6ef863d0b07 925 /*!
GregCr 4:c6ef863d0b07 926 * \brief Sets the RF frequency
GregCr 4:c6ef863d0b07 927 *
GregCr 4:c6ef863d0b07 928 * \param [in] frequency RF frequency [Hz]
GregCr 4:c6ef863d0b07 929 */
GregCr 4:c6ef863d0b07 930 void SetRfFrequency( uint32_t frequency );
GregCr 4:c6ef863d0b07 931
GregCr 4:c6ef863d0b07 932 /*!
GregCr 4:c6ef863d0b07 933 * \brief Sets the radio for the given protocol
GregCr 4:c6ef863d0b07 934 *
GregCr 4:c6ef863d0b07 935 * \param [in] packetType [PACKET_TYPE_GFSK, PACKET_TYPE_LORA]
GregCr 4:c6ef863d0b07 936 *
GregCr 4:c6ef863d0b07 937 * \remark This method has to be called before SetRfFrequency,
GregCr 4:c6ef863d0b07 938 * SetModulationParams and SetPacketParams
GregCr 4:c6ef863d0b07 939 */
GregCr 4:c6ef863d0b07 940 void SetPacketType( RadioPacketTypes_t packetType );
GregCr 4:c6ef863d0b07 941
GregCr 4:c6ef863d0b07 942 /*!
GregCr 4:c6ef863d0b07 943 * \brief Gets the current radio protocol
GregCr 4:c6ef863d0b07 944 *
GregCr 4:c6ef863d0b07 945 * \retval packetType [PACKET_TYPE_GFSK, PACKET_TYPE_LORA]
GregCr 4:c6ef863d0b07 946 */
GregCr 4:c6ef863d0b07 947 RadioPacketTypes_t GetPacketType( void );
GregCr 4:c6ef863d0b07 948
GregCr 4:c6ef863d0b07 949 /*!
GregCr 4:c6ef863d0b07 950 * \brief Sets the transmission parameters
GregCr 4:c6ef863d0b07 951 *
GregCr 4:c6ef863d0b07 952 * \param [in] power RF output power [-18..13] dBm
GregCr 4:c6ef863d0b07 953 * \param [in] rampTime Transmission ramp up time
GregCr 4:c6ef863d0b07 954 */
GregCr 4:c6ef863d0b07 955 void SetTxParams( int8_t power, RadioRampTimes_t rampTime );
GregCr 4:c6ef863d0b07 956
GregCr 4:c6ef863d0b07 957 /*!
GregCr 4:c6ef863d0b07 958 * \brief Set the modulation parameters
GregCr 4:c6ef863d0b07 959 *
GregCr 4:c6ef863d0b07 960 * \param [in] modParams A structure describing the modulation parameters
GregCr 4:c6ef863d0b07 961 */
GregCr 4:c6ef863d0b07 962 void SetModulationParams( ModulationParams_t *modParams );
GregCr 4:c6ef863d0b07 963
GregCr 4:c6ef863d0b07 964 /*!
GregCr 4:c6ef863d0b07 965 * \brief Sets the packet parameters
GregCr 4:c6ef863d0b07 966 *
GregCr 4:c6ef863d0b07 967 * \param [in] packetParams A structure describing the packet parameters
GregCr 4:c6ef863d0b07 968 */
GregCr 4:c6ef863d0b07 969 void SetPacketParams( PacketParams_t *packetParams );
GregCr 4:c6ef863d0b07 970
GregCr 4:c6ef863d0b07 971 /*!
GregCr 4:c6ef863d0b07 972 * \brief Sets the Channel Activity Detection (CAD) parameters
GregCr 0:deaafdfde3bb 973 *
GregCr 4:c6ef863d0b07 974 * \param [in] cadSymbolNum The number of symbol to use for CAD operations
GregCr 4:c6ef863d0b07 975 * [LORA_CAD_01_SYMBOL, LORA_CAD_02_SYMBOL,
GregCr 4:c6ef863d0b07 976 * LORA_CAD_04_SYMBOL, LORA_CAD_08_SYMBOL,
GregCr 4:c6ef863d0b07 977 * LORA_CAD_16_SYMBOL]
GregCr 4:c6ef863d0b07 978 * \param [in] cadDetPeak Limite for detection of SNR peak used in the CAD
GregCr 4:c6ef863d0b07 979 * \param [in] cadDetMin Set the minimum symbol recognition for CAD
GregCr 4:c6ef863d0b07 980 * \param [in] cadExitMode Operation to be done at the end of CAD action
GregCr 4:c6ef863d0b07 981 * [LORA_CAD_ONLY, LORA_CAD_RX, LORA_CAD_LBT]
GregCr 4:c6ef863d0b07 982 * \param [in] cadTimeout Defines the timeout value to abort the CAD activity
GregCr 4:c6ef863d0b07 983 */
GregCr 4:c6ef863d0b07 984 void SetCadParams( RadioLoRaCadSymbols_t cadSymbolNum, uint8_t cadDetPeak, uint8_t cadDetMin, RadioCadExitModes_t cadExitMode, uint32_t cadTimeout );
GregCr 4:c6ef863d0b07 985
GregCr 4:c6ef863d0b07 986 /*!
GregCr 4:c6ef863d0b07 987 * \brief Sets the data buffer base address for transmission and reception
GregCr 4:c6ef863d0b07 988 *
GregCr 4:c6ef863d0b07 989 * \param [in] txBaseAddress Transmission base address
GregCr 4:c6ef863d0b07 990 * \param [in] rxBaseAddress Reception base address
GregCr 4:c6ef863d0b07 991 */
GregCr 4:c6ef863d0b07 992 void SetBufferBaseAddresses( uint8_t txBaseAddress, uint8_t rxBaseAddress );
GregCr 4:c6ef863d0b07 993
GregCr 4:c6ef863d0b07 994 /*!
GregCr 4:c6ef863d0b07 995 * \brief Gets the current radio status
GregCr 4:c6ef863d0b07 996 *
GregCr 4:c6ef863d0b07 997 * \retval status Radio status
GregCr 4:c6ef863d0b07 998 */
GregCr 4:c6ef863d0b07 999 virtual RadioStatus_t GetStatus( void );
GregCr 4:c6ef863d0b07 1000
GregCr 4:c6ef863d0b07 1001 /*!
GregCr 4:c6ef863d0b07 1002 * \brief Returns the instantaneous RSSI value for the last packet received
GregCr 4:c6ef863d0b07 1003 *
GregCr 4:c6ef863d0b07 1004 * \retval rssiInst Instantaneous RSSI
GregCr 4:c6ef863d0b07 1005 */
GregCr 4:c6ef863d0b07 1006 int8_t GetRssiInst( void );
GregCr 4:c6ef863d0b07 1007
GregCr 4:c6ef863d0b07 1008 /*!
GregCr 4:c6ef863d0b07 1009 * \brief Gets the last received packet buffer status
GregCr 4:c6ef863d0b07 1010 *
GregCr 4:c6ef863d0b07 1011 * \param [out] payloadLength Last received packet payload length
GregCr 4:c6ef863d0b07 1012 * \param [out] rxStartBuffer Last received packet buffer address pointer
GregCr 4:c6ef863d0b07 1013 */
GregCr 4:c6ef863d0b07 1014 void GetRxBufferStatus( uint8_t *payloadLength, uint8_t *rxStartBuffer );
GregCr 4:c6ef863d0b07 1015
GregCr 4:c6ef863d0b07 1016 /*!
GregCr 4:c6ef863d0b07 1017 * \brief Gets the last received packet payload length
GregCr 4:c6ef863d0b07 1018 *
GregCr 4:c6ef863d0b07 1019 * \param [out] pktStatus A structure of packet status
GregCr 4:c6ef863d0b07 1020 */
GregCr 4:c6ef863d0b07 1021 void GetPacketStatus( PacketStatus_t *pktStatus );
GregCr 4:c6ef863d0b07 1022
GregCr 4:c6ef863d0b07 1023 /*!
GregCr 4:c6ef863d0b07 1024 * \brief Returns the possible system erros
GregCr 4:c6ef863d0b07 1025 *
GregCr 4:c6ef863d0b07 1026 * \retval sysErrors Value representing the possible sys failures
GregCr 0:deaafdfde3bb 1027 */
GregCr 4:c6ef863d0b07 1028 RadioError_t GetDeviceErrors( void );
GregCr 4:c6ef863d0b07 1029
GregCr 4:c6ef863d0b07 1030 /*!
GregCr 4:c6ef863d0b07 1031 * \brief Clears the IRQs
GregCr 4:c6ef863d0b07 1032 *
GregCr 4:c6ef863d0b07 1033 * \param [in] irq IRQ(s) to be cleared
GregCr 4:c6ef863d0b07 1034 */
GregCr 4:c6ef863d0b07 1035 void ClearIrqStatus( uint16_t irq );
GregCr 4:c6ef863d0b07 1036
GregCr 4:c6ef863d0b07 1037 /*!
GregCr 4:c6ef863d0b07 1038 * \brief Set the driver in polling mode.
GregCr 4:c6ef863d0b07 1039 *
GregCr 4:c6ef863d0b07 1040 * In polling mode the application is responsible to call ProcessIrqs( ) to
GregCr 4:c6ef863d0b07 1041 * execute callbacks functions.
GregCr 4:c6ef863d0b07 1042 * The default mode is Interrupt Mode.
GregCr 4:c6ef863d0b07 1043 * @code
GregCr 4:c6ef863d0b07 1044 * // Initializations and callbacks declaration/definition
GregCr 4:c6ef863d0b07 1045 * radio = SX126x( mosi, miso, sclk, nss, busy, int1, int2, int3, rst, &callbacks );
GregCr 4:c6ef863d0b07 1046 * radio.Init( );
GregCr 4:c6ef863d0b07 1047 * radio.SetPollingMode( );
GregCr 4:c6ef863d0b07 1048 *
GregCr 4:c6ef863d0b07 1049 * while( true )
GregCr 4:c6ef863d0b07 1050 * {
GregCr 4:c6ef863d0b07 1051 * // IRQ processing is automatically done
GregCr 4:c6ef863d0b07 1052 * radio.ProcessIrqs( ); // <-- here, as well as callback functions
GregCr 4:c6ef863d0b07 1053 * // calls
GregCr 4:c6ef863d0b07 1054 * // Do some applicative work
GregCr 4:c6ef863d0b07 1055 * }
GregCr 4:c6ef863d0b07 1056 * @endcode
GregCr 4:c6ef863d0b07 1057 *
GregCr 4:c6ef863d0b07 1058 * \see SX126x::SetInterruptMode
GregCr 4:c6ef863d0b07 1059 */
GregCr 4:c6ef863d0b07 1060 void SetPollingMode( void );
GregCr 4:c6ef863d0b07 1061
GregCr 4:c6ef863d0b07 1062 /*!
GregCr 4:c6ef863d0b07 1063 * \brief Set the driver in interrupt mode.
GregCr 4:c6ef863d0b07 1064 *
GregCr 4:c6ef863d0b07 1065 * In interrupt mode, the driver communicate with the radio during the
GregCr 4:c6ef863d0b07 1066 * interruption by direct calls to ProcessIrqs( ). The main advantage is
GregCr 4:c6ef863d0b07 1067 * the possibility to have low power application architecture.
GregCr 4:c6ef863d0b07 1068 * This is the default mode.
GregCr 4:c6ef863d0b07 1069 * @code
GregCr 4:c6ef863d0b07 1070 * // Initializations and callbacks declaration/definition
GregCr 4:c6ef863d0b07 1071 * radio = SX126x( mosi, miso, sclk, nss, busy, int1, int2, int3, rst, &callbacks );
GregCr 4:c6ef863d0b07 1072 * radio.Init( );
GregCr 4:c6ef863d0b07 1073 * radio.SetInterruptMode( ); // Optionnal. Driver default behavior
GregCr 4:c6ef863d0b07 1074 *
GregCr 4:c6ef863d0b07 1075 * while( true )
GregCr 4:c6ef863d0b07 1076 * {
GregCr 4:c6ef863d0b07 1077 * // Do some applicative work
GregCr 4:c6ef863d0b07 1078 * }
GregCr 4:c6ef863d0b07 1079 * @endcode
GregCr 4:c6ef863d0b07 1080 *
GregCr 4:c6ef863d0b07 1081 * \see SX126x::SetPollingMode
GregCr 4:c6ef863d0b07 1082 */
GregCr 4:c6ef863d0b07 1083 void SetInterruptMode( void );
GregCr 0:deaafdfde3bb 1084
GregCr 0:deaafdfde3bb 1085 /*!
GregCr 0:deaafdfde3bb 1086 * \brief Resets the radio
GregCr 0:deaafdfde3bb 1087 */
GregCr 0:deaafdfde3bb 1088 virtual void Reset( void ) = 0;
GregCr 0:deaafdfde3bb 1089
GregCr 0:deaafdfde3bb 1090 /*!
GregCr 0:deaafdfde3bb 1091 * \brief Wake-ups the radio from Sleep mode
GregCr 0:deaafdfde3bb 1092 */
GregCr 0:deaafdfde3bb 1093 virtual void Wakeup( void ) = 0;
GregCr 0:deaafdfde3bb 1094
GregCr 0:deaafdfde3bb 1095 /*!
GregCr 0:deaafdfde3bb 1096 * \brief Writes the given command to the radio
GregCr 0:deaafdfde3bb 1097 *
GregCr 0:deaafdfde3bb 1098 * \param [in] opcode Command opcode
GregCr 0:deaafdfde3bb 1099 * \param [in] buffer Command parameters byte array
GregCr 0:deaafdfde3bb 1100 * \param [in] size Command parameters byte array size
GregCr 0:deaafdfde3bb 1101 */
GregCr 0:deaafdfde3bb 1102 virtual void WriteCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size ) = 0;
GregCr 0:deaafdfde3bb 1103
GregCr 0:deaafdfde3bb 1104 /*!
GregCr 0:deaafdfde3bb 1105 * \brief Reads the given command from the radio
GregCr 0:deaafdfde3bb 1106 *
GregCr 0:deaafdfde3bb 1107 * \param [in] opcode Command opcode
GregCr 0:deaafdfde3bb 1108 * \param [in] buffer Command parameters byte array
GregCr 0:deaafdfde3bb 1109 * \param [in] size Command parameters byte array size
GregCr 0:deaafdfde3bb 1110 */
GregCr 0:deaafdfde3bb 1111 virtual void ReadCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size ) = 0;
GregCr 0:deaafdfde3bb 1112
GregCr 0:deaafdfde3bb 1113 /*!
GregCr 0:deaafdfde3bb 1114 * \brief Writes multiple radio registers starting at address
GregCr 0:deaafdfde3bb 1115 *
GregCr 0:deaafdfde3bb 1116 * \param [in] address First Radio register address
GregCr 0:deaafdfde3bb 1117 * \param [in] buffer Buffer containing the new register's values
GregCr 0:deaafdfde3bb 1118 * \param [in] size Number of registers to be written
GregCr 0:deaafdfde3bb 1119 */
GregCr 0:deaafdfde3bb 1120 virtual void WriteRegister( uint16_t address, uint8_t *buffer, uint16_t size ) = 0;
GregCr 0:deaafdfde3bb 1121
GregCr 0:deaafdfde3bb 1122 /*!
GregCr 0:deaafdfde3bb 1123 * \brief Writes the radio register at the specified address
GregCr 0:deaafdfde3bb 1124 *
GregCr 0:deaafdfde3bb 1125 * \param [in] address Register address
GregCr 0:deaafdfde3bb 1126 * \param [in] value New register value
GregCr 0:deaafdfde3bb 1127 */
GregCr 4:c6ef863d0b07 1128 virtual void WriteReg( uint16_t address, uint8_t value ) = 0;
GregCr 0:deaafdfde3bb 1129
GregCr 0:deaafdfde3bb 1130 /*!
GregCr 0:deaafdfde3bb 1131 * \brief Reads multiple radio registers starting at address
GregCr 0:deaafdfde3bb 1132 *
GregCr 0:deaafdfde3bb 1133 * \param [in] address First Radio register address
GregCr 0:deaafdfde3bb 1134 * \param [out] buffer Buffer where to copy the registers data
GregCr 0:deaafdfde3bb 1135 * \param [in] size Number of registers to be read
GregCr 0:deaafdfde3bb 1136 */
GregCr 0:deaafdfde3bb 1137 virtual void ReadRegister( uint16_t address, uint8_t *buffer, uint16_t size ) = 0;
GregCr 0:deaafdfde3bb 1138
GregCr 0:deaafdfde3bb 1139 /*!
GregCr 0:deaafdfde3bb 1140 * \brief Reads the radio register at the specified address
GregCr 0:deaafdfde3bb 1141 *
GregCr 0:deaafdfde3bb 1142 * \param [in] address Register address
GregCr 0:deaafdfde3bb 1143 *
GregCr 0:deaafdfde3bb 1144 * \retval data Register value
GregCr 0:deaafdfde3bb 1145 */
GregCr 4:c6ef863d0b07 1146 virtual uint8_t ReadReg( uint16_t address ) = 0;
GregCr 0:deaafdfde3bb 1147
GregCr 0:deaafdfde3bb 1148 /*!
GregCr 0:deaafdfde3bb 1149 * \brief Writes Radio Data Buffer with buffer of size starting at offset.
GregCr 0:deaafdfde3bb 1150 *
GregCr 0:deaafdfde3bb 1151 * \param [in] offset Offset where to start writing
GregCr 0:deaafdfde3bb 1152 * \param [in] buffer Buffer pointer
GregCr 0:deaafdfde3bb 1153 * \param [in] size Buffer size
GregCr 0:deaafdfde3bb 1154 */
GregCr 0:deaafdfde3bb 1155 virtual void WriteBuffer( uint8_t offset, uint8_t *buffer, uint8_t size ) = 0;
GregCr 0:deaafdfde3bb 1156
GregCr 0:deaafdfde3bb 1157 /*!
GregCr 0:deaafdfde3bb 1158 * \brief Reads Radio Data Buffer at offset to buffer of size
GregCr 0:deaafdfde3bb 1159 *
GregCr 0:deaafdfde3bb 1160 * \param [in] offset Offset where to start reading
GregCr 0:deaafdfde3bb 1161 * \param [out] buffer Buffer pointer
GregCr 0:deaafdfde3bb 1162 * \param [in] size Buffer size
GregCr 0:deaafdfde3bb 1163 */
GregCr 0:deaafdfde3bb 1164 virtual void ReadBuffer( uint8_t offset, uint8_t *buffer, uint8_t size ) = 0;
GregCr 0:deaafdfde3bb 1165
GregCr 0:deaafdfde3bb 1166 /*!
GregCr 0:deaafdfde3bb 1167 * \brief Gets the current status of the radio DIOs
GregCr 0:deaafdfde3bb 1168 *
GregCr 0:deaafdfde3bb 1169 * \retval status [Bit #3: DIO3, Bit #2: DIO2,
GregCr 4:c6ef863d0b07 1170 * Bit #1: DIO1, Bit #0: BUSY]
GregCr 0:deaafdfde3bb 1171 */
GregCr 0:deaafdfde3bb 1172 virtual uint8_t GetDioStatus( void ) = 0;
GregCr 0:deaafdfde3bb 1173
GregCr 0:deaafdfde3bb 1174 /*!
GregCr 4:c6ef863d0b07 1175 * \brief Returns the device type
GregCr 0:deaafdfde3bb 1176 *
GregCr 6:1e2345700991 1177 * \retval 0: SX1261, 1: SX1262, 2: SX1268
GregCr 0:deaafdfde3bb 1178 */
GregCr 4:c6ef863d0b07 1179 virtual uint8_t GetDeviceType( void ) = 0;
GregCr 0:deaafdfde3bb 1180
GregCr 0:deaafdfde3bb 1181 /*!
GregCr 5:e488e6f185f3 1182 * \brief Returns the matching frequency
GregCr 5:e488e6f185f3 1183 *
GregCr 5:e488e6f185f3 1184 * \retval 1: 868 MHz
GregCr 5:e488e6f185f3 1185 * 0: 915 MHz
GregCr 5:e488e6f185f3 1186 */
GregCr 5:e488e6f185f3 1187 virtual uint8_t GetFreqSelect( void ) = 0;
GregCr 5:e488e6f185f3 1188
GregCr 5:e488e6f185f3 1189 /*!
GregCr 4:c6ef863d0b07 1190 * \brief RF Switch power on
GregCr 0:deaafdfde3bb 1191 */
GregCr 4:c6ef863d0b07 1192 virtual void AntSwOn( void ) = 0;
GregCr 0:deaafdfde3bb 1193
GregCr 0:deaafdfde3bb 1194 /*!
GregCr 4:c6ef863d0b07 1195 * \brief RF Switch power off
GregCr 0:deaafdfde3bb 1196 */
GregCr 4:c6ef863d0b07 1197 virtual void AntSwOff( void ) = 0;
GregCr 0:deaafdfde3bb 1198
GregCr 0:deaafdfde3bb 1199 /*!
GregCr 4:c6ef863d0b07 1200 * \brief Process the analysis of radio IRQs and calls callback functions
GregCr 4:c6ef863d0b07 1201 * depending on radio state
GregCr 0:deaafdfde3bb 1202 */
GregCr 4:c6ef863d0b07 1203 void ProcessIrqs( void );
GregCr 0:deaafdfde3bb 1204 };
GregCr 0:deaafdfde3bb 1205
GregCr 2:4ff11ea92fbe 1206 #endif // __SX126x_H__