SX1261 and sx1262 common library

Dependents:   SX126xDevKit SX1262PingPong SX126X_TXonly SX126X_PingPong_Demo ... more

Fork of SX126xLib by Gregory Cristian

Committer:
GregCr
Date:
Tue Sep 06 06:56:46 2016 +0000
Revision:
0:deaafdfde3bb
Child:
2:4ff11ea92fbe
Initial commit using Martin's version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
GregCr 0:deaafdfde3bb 1 /*
GregCr 0:deaafdfde3bb 2 / _____) _ | |
GregCr 0:deaafdfde3bb 3 ( (____ _____ ____ _| |_ _____ ____| |__
GregCr 0:deaafdfde3bb 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
GregCr 0:deaafdfde3bb 5 _____) ) ____| | | || |_| ____( (___| | | |
GregCr 0:deaafdfde3bb 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
GregCr 0:deaafdfde3bb 7 (C)2016 Semtech
GregCr 0:deaafdfde3bb 8
GregCr 0:deaafdfde3bb 9 Description: Handling of the node configuration protocol
GregCr 0:deaafdfde3bb 10
GregCr 0:deaafdfde3bb 11 License: Revised BSD License, see LICENSE.TXT file include in the project
GregCr 0:deaafdfde3bb 12
GregCr 0:deaafdfde3bb 13 Maintainer: Miguel Luis, Gregory Cristian and Matthieu Verdy
GregCr 0:deaafdfde3bb 14 */
GregCr 0:deaafdfde3bb 15 #ifndef __SX1261_H__
GregCr 0:deaafdfde3bb 16 #define __SX1261_H__
GregCr 0:deaafdfde3bb 17
GregCr 0:deaafdfde3bb 18 #include "radio.h"
GregCr 0:deaafdfde3bb 19
GregCr 0:deaafdfde3bb 20 /*!
GregCr 0:deaafdfde3bb 21 * \brief Enables/disables driver debug features
GregCr 0:deaafdfde3bb 22 */
GregCr 0:deaafdfde3bb 23 #define SX1261_DEBUG 0
GregCr 0:deaafdfde3bb 24
GregCr 0:deaafdfde3bb 25
GregCr 0:deaafdfde3bb 26
GregCr 0:deaafdfde3bb 27 /*!
GregCr 0:deaafdfde3bb 28 * \brief Hardware IO IRQ callback function definition
GregCr 0:deaafdfde3bb 29 */
GregCr 0:deaafdfde3bb 30 class SX1261;
GregCr 0:deaafdfde3bb 31 typedef void ( SX1261::*DioIrqHandler )( void );
GregCr 0:deaafdfde3bb 32
GregCr 0:deaafdfde3bb 33 /*!
GregCr 0:deaafdfde3bb 34 * \brief IRQ triggers callback function definition
GregCr 0:deaafdfde3bb 35 */
GregCr 0:deaafdfde3bb 36 class SX1261Hal;
GregCr 0:deaafdfde3bb 37 typedef void ( SX1261Hal::*Trigger )( void );
GregCr 0:deaafdfde3bb 38
GregCr 0:deaafdfde3bb 39 /*!
GregCr 0:deaafdfde3bb 40 * \brief Provides the frequency of the chip running on the radio and the frequency step
GregCr 0:deaafdfde3bb 41 *
GregCr 0:deaafdfde3bb 42 * \remark These defines are used for computing the frequency divider to set the RF frequency
GregCr 0:deaafdfde3bb 43 */
GregCr 0:deaafdfde3bb 44 #define XTAL_FREQ 32000000
GregCr 0:deaafdfde3bb 45 #define FREQ_STEP ( ( double )( XTAL_FREQ / pow( 2.0, 25.0 ) ) )
GregCr 0:deaafdfde3bb 46
GregCr 0:deaafdfde3bb 47 /*!
GregCr 0:deaafdfde3bb 48 * \brief Compensation delay for SetAutoTx/Rx functions in 15.625 microseconds
GregCr 0:deaafdfde3bb 49 */
GregCr 0:deaafdfde3bb 50 #define AUTO_RX_TX_OFFSET 2
GregCr 0:deaafdfde3bb 51
GregCr 0:deaafdfde3bb 52 /*!
GregCr 0:deaafdfde3bb 53 * \brief The address of the register holding the first byte defining the CRC seed
GregCr 0:deaafdfde3bb 54 *
GregCr 0:deaafdfde3bb 55 */
GregCr 0:deaafdfde3bb 56 #define REG_LR_CRCSEEDBASEADDR 0x06B9
GregCr 0:deaafdfde3bb 57
GregCr 0:deaafdfde3bb 58 /*!
GregCr 0:deaafdfde3bb 59 * \brief The address of the register holding the first byte defining the CRC polynomial
GregCr 0:deaafdfde3bb 60 *
GregCr 0:deaafdfde3bb 61 */
GregCr 0:deaafdfde3bb 62 #define REG_LR_CRCPOLYBASEADDR 0x06BB
GregCr 0:deaafdfde3bb 63
GregCr 0:deaafdfde3bb 64 /*!
GregCr 0:deaafdfde3bb 65 * \brief The address of the register holding the first byte defining the whitening seed
GregCr 0:deaafdfde3bb 66 *
GregCr 0:deaafdfde3bb 67 * \remark Only used for packet types GFSK, FloRa and BLE
GregCr 0:deaafdfde3bb 68 */
GregCr 0:deaafdfde3bb 69 #define REG_LR_WHITSEEDBASEADDR 0x06B6
GregCr 0:deaafdfde3bb 70
GregCr 0:deaafdfde3bb 71 /*!
GregCr 0:deaafdfde3bb 72 * \brief The address of the register holding the ranging id check length
GregCr 0:deaafdfde3bb 73 *
GregCr 0:deaafdfde3bb 74 * \remark Only used for packet type Ranging
GregCr 0:deaafdfde3bb 75 */
GregCr 0:deaafdfde3bb 76 #define REG_LR_RANGINGIDCHECKLENGTH 0x072C
GregCr 0:deaafdfde3bb 77
GregCr 0:deaafdfde3bb 78 /*!
GregCr 0:deaafdfde3bb 79 * \brief The address of the register holding the device ranging id
GregCr 0:deaafdfde3bb 80 *
GregCr 0:deaafdfde3bb 81 * \remark Only used for packet type Ranging
GregCr 0:deaafdfde3bb 82 */
GregCr 0:deaafdfde3bb 83 #define REG_LR_DEVICERANGINGADDR 0x0711
GregCr 0:deaafdfde3bb 84
GregCr 0:deaafdfde3bb 85 /*!
GregCr 0:deaafdfde3bb 86 * \brief The address of the register holding the device ranging id
GregCr 0:deaafdfde3bb 87 *
GregCr 0:deaafdfde3bb 88 * \remark Only used for packet type Ranging
GregCr 0:deaafdfde3bb 89 */
GregCr 0:deaafdfde3bb 90 #define REG_LR_REQUESTRANGINGADDR 0x070D
GregCr 0:deaafdfde3bb 91
GregCr 0:deaafdfde3bb 92
GregCr 0:deaafdfde3bb 93
GregCr 0:deaafdfde3bb 94 /*!
GregCr 0:deaafdfde3bb 95 * \brief The address of the register holding the first byte of ranging results
GregCr 0:deaafdfde3bb 96 * Only used for packet type Ranging
GregCr 0:deaafdfde3bb 97 */
GregCr 0:deaafdfde3bb 98 #define REG_LR_RANGINGRESULTRAWBASEADDR 0x0775
GregCr 0:deaafdfde3bb 99
GregCr 0:deaafdfde3bb 100 #define REG_LR_RANGINGRESULTAVGBASEADDR 0x0778
GregCr 0:deaafdfde3bb 101
GregCr 0:deaafdfde3bb 102 #define REG_LR_RANGINGRESULTDEBBASEADDR 0x077B
GregCr 0:deaafdfde3bb 103
GregCr 0:deaafdfde3bb 104 #define REG_LR_RANGINGRESULTFINBASEADDR 0x077E
GregCr 0:deaafdfde3bb 105
GregCr 0:deaafdfde3bb 106
GregCr 0:deaafdfde3bb 107
GregCr 0:deaafdfde3bb 108 /*!
GregCr 0:deaafdfde3bb 109 * \brief The address of the register holding the first byte of ranging calibration
GregCr 0:deaafdfde3bb 110 *
GregCr 0:deaafdfde3bb 111 * \remark Only used for packet type Ranging
GregCr 0:deaafdfde3bb 112 */
GregCr 0:deaafdfde3bb 113 #define REG_LR_RANGINGRERXTXDELAYCAL 0x0727
GregCr 0:deaafdfde3bb 114
GregCr 0:deaafdfde3bb 115 /*!
GregCr 0:deaafdfde3bb 116 * \brief The address of the instruction RAM and its size
GregCr 0:deaafdfde3bb 117 */
GregCr 0:deaafdfde3bb 118 #define IRAM_START_ADDRESS 0x8000
GregCr 0:deaafdfde3bb 119 #define IRAM_SIZE 0x6000
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 0:deaafdfde3bb 124 #define REG_LR_SYNCWORDBASEADDRESS 0x06BD
GregCr 0:deaafdfde3bb 125
GregCr 0:deaafdfde3bb 126
GregCr 0:deaafdfde3bb 127 /*!
GregCr 0:deaafdfde3bb 128 * \brief Represents the states of the radio
GregCr 0:deaafdfde3bb 129 */
GregCr 0:deaafdfde3bb 130 typedef enum RadioState
GregCr 0:deaafdfde3bb 131 {
GregCr 0:deaafdfde3bb 132 RF_IDLE = 0, //!< The radio is idle
GregCr 0:deaafdfde3bb 133 RF_RX_RUNNING, //!< The radio is in reception state
GregCr 0:deaafdfde3bb 134 RF_TX_RUNNING, //!< The radio is in transmission state
GregCr 0:deaafdfde3bb 135 RF_CAD, //!< The radio is doing channel activity detection
GregCr 0:deaafdfde3bb 136 } RadioStates_t;
GregCr 0:deaafdfde3bb 137
GregCr 0:deaafdfde3bb 138 /*!
GregCr 0:deaafdfde3bb 139 * \brief Represents the operating mode the radio is actually running
GregCr 0:deaafdfde3bb 140 */
GregCr 0:deaafdfde3bb 141 enum RadioOperatingModes_t
GregCr 0:deaafdfde3bb 142 {
GregCr 0:deaafdfde3bb 143 MODE_SLEEP = 0, //! The radio is in sleep mode
GregCr 0:deaafdfde3bb 144 MODE_STDBY_RC, //! The radio is in standby mode with RC oscillator
GregCr 0:deaafdfde3bb 145 MODE_STDBY_XOSC, //! The radio is in standby mode with XOSC oscillator
GregCr 0:deaafdfde3bb 146 MODE_FS, //! The radio is in frequency synthesis mode
GregCr 0:deaafdfde3bb 147 MODE_TX, //! The radio is in transmit mode
GregCr 0:deaafdfde3bb 148 MODE_RX, //! The radio is in receive mode
GregCr 0:deaafdfde3bb 149 MODE_CAD //! The radio is in channel activity detection mode
GregCr 0:deaafdfde3bb 150 };
GregCr 0:deaafdfde3bb 151
GregCr 0:deaafdfde3bb 152 /*!
GregCr 0:deaafdfde3bb 153 * \brief Declares the oscillator in use while in standby mode
GregCr 0:deaafdfde3bb 154 *
GregCr 0:deaafdfde3bb 155 * Using the STDBY_RC standby mode allow to reduce the energy consumption
GregCr 0:deaafdfde3bb 156 * STDBY_XOSC should be used for time critical applications
GregCr 0:deaafdfde3bb 157 */
GregCr 0:deaafdfde3bb 158 enum RadioStandbyModes_t
GregCr 0:deaafdfde3bb 159 {
GregCr 0:deaafdfde3bb 160 STDBY_RC = 0,
GregCr 0:deaafdfde3bb 161 STDBY_XOSC = 1,
GregCr 0:deaafdfde3bb 162 };
GregCr 0:deaafdfde3bb 163
GregCr 0:deaafdfde3bb 164 /*!
GregCr 0:deaafdfde3bb 165 * \brief Represents the possible packet type (i.e. modem) used
GregCr 0:deaafdfde3bb 166 */
GregCr 0:deaafdfde3bb 167 enum RadioPacketType_t
GregCr 0:deaafdfde3bb 168 {
GregCr 0:deaafdfde3bb 169 PACKET_TYPE_GFSK = 0,
GregCr 0:deaafdfde3bb 170 PACKET_TYPE_LORA = 1,
GregCr 0:deaafdfde3bb 171 PACKET_TYPE_BPSK = 2,
GregCr 0:deaafdfde3bb 172 PACKET_TYPE_GMSK = 3,
GregCr 0:deaafdfde3bb 173 PACKET_TYPE_RANGING = 4,
GregCr 0:deaafdfde3bb 174 PACKET_TYPE_NONE = 0x0F,
GregCr 0:deaafdfde3bb 175 };
GregCr 0:deaafdfde3bb 176
GregCr 0:deaafdfde3bb 177 /*!
GregCr 0:deaafdfde3bb 178 * \brief Represents the ramping time for power amplifier
GregCr 0:deaafdfde3bb 179 */
GregCr 0:deaafdfde3bb 180 enum RadioRampTimes_t
GregCr 0:deaafdfde3bb 181 {
GregCr 0:deaafdfde3bb 182 RAMP_10_US = 0x00,
GregCr 0:deaafdfde3bb 183 RAMP_20_US = 0x01,
GregCr 0:deaafdfde3bb 184 RAMP_40_US = 0x02,
GregCr 0:deaafdfde3bb 185 RAMP_80_US = 0x03,
GregCr 0:deaafdfde3bb 186 RAMP_200_US = 0x04,
GregCr 0:deaafdfde3bb 187 RAMP_800_US = 0x05,
GregCr 0:deaafdfde3bb 188 RAMP_1700_US = 0x06,
GregCr 0:deaafdfde3bb 189 RAMP_3400_US = 0x07,
GregCr 0:deaafdfde3bb 190 };
GregCr 0:deaafdfde3bb 191
GregCr 0:deaafdfde3bb 192 /*!
GregCr 0:deaafdfde3bb 193 * \brief Represents the number of symbols to be used for channel activity detection operation
GregCr 0:deaafdfde3bb 194 */
GregCr 0:deaafdfde3bb 195 enum RadioLoRaCadSymbols_t
GregCr 0:deaafdfde3bb 196 {
GregCr 0:deaafdfde3bb 197 LORA_CAD_01_SYMBOL = 0x00,
GregCr 0:deaafdfde3bb 198 LORA_CAD_02_SYMBOL = 0x01,
GregCr 0:deaafdfde3bb 199 LORA_CAD_04_SYMBOL = 0x02,
GregCr 0:deaafdfde3bb 200 LORA_CAD_08_SYMBOL = 0x03,
GregCr 0:deaafdfde3bb 201 LORA_CAD_16_SYMBOL = 0x04,
GregCr 0:deaafdfde3bb 202 };
GregCr 0:deaafdfde3bb 203
GregCr 0:deaafdfde3bb 204
GregCr 0:deaafdfde3bb 205
GregCr 0:deaafdfde3bb 206
GregCr 0:deaafdfde3bb 207
GregCr 0:deaafdfde3bb 208
GregCr 0:deaafdfde3bb 209 /*!
GregCr 0:deaafdfde3bb 210 * \brief Represents the modulation shaping parameter
GregCr 0:deaafdfde3bb 211 */
GregCr 0:deaafdfde3bb 212 enum RadioModShapings_t
GregCr 0:deaafdfde3bb 213 {
GregCr 0:deaafdfde3bb 214 MOD_SHAPING_G_BT_03 = 0x08,
GregCr 0:deaafdfde3bb 215 MOD_SHAPING_G_BT_05 = 0x09,
GregCr 0:deaafdfde3bb 216 MOD_SHAPING_G_BT_07 = 0x0A,
GregCr 0:deaafdfde3bb 217 MOD_SHAPING_G_BT_1 = 0x0B,
GregCr 0:deaafdfde3bb 218
GregCr 0:deaafdfde3bb 219 MOD_SHAPING_G_BT_03_D = 0x0C,
GregCr 0:deaafdfde3bb 220 MOD_SHAPING_G_BT_05_D = 0x0D,
GregCr 0:deaafdfde3bb 221 MOD_SHAPING_G_BT_07_D = 0x0E,
GregCr 0:deaafdfde3bb 222 MOD_SHAPING_G_BT_1_D = 0x0F,
GregCr 0:deaafdfde3bb 223
GregCr 0:deaafdfde3bb 224 MOD_SHAPING_RC_BT_03 = 0x10,
GregCr 0:deaafdfde3bb 225 MOD_SHAPING_RC_BT_05 = 0x11,
GregCr 0:deaafdfde3bb 226 MOD_SHAPING_RC_BT_07 = 0x12,
GregCr 0:deaafdfde3bb 227 MOD_SHAPING_RC_BT_1 = 0x13,
GregCr 0:deaafdfde3bb 228
GregCr 0:deaafdfde3bb 229 MOD_SHAPING_RC_BT_03_D = 0x14,
GregCr 0:deaafdfde3bb 230 MOD_SHAPING_RC_BT_05_D = 0x15,
GregCr 0:deaafdfde3bb 231 MOD_SHAPING_RC_BT_07_D = 0x16,
GregCr 0:deaafdfde3bb 232 MOD_SHAPING_RC_BT_1_D = 0x17,
GregCr 0:deaafdfde3bb 233
GregCr 0:deaafdfde3bb 234 MOD_SHAPING_RRC_BT_03 = 0x18,
GregCr 0:deaafdfde3bb 235 MOD_SHAPING_RRC_BT_05 = 0x19,
GregCr 0:deaafdfde3bb 236 MOD_SHAPING_RRC_BT_07 = 0x1A,
GregCr 0:deaafdfde3bb 237 MOD_SHAPING_RRC_BT_1 = 0x1B,
GregCr 0:deaafdfde3bb 238
GregCr 0:deaafdfde3bb 239 MOD_SHAPING_RRC_BT_03_D = 0x1C,
GregCr 0:deaafdfde3bb 240 MOD_SHAPING_RRC_BT_05_D = 0x1D,
GregCr 0:deaafdfde3bb 241 MOD_SHAPING_RRC_BT_07_D = 0x1E,
GregCr 0:deaafdfde3bb 242 MOD_SHAPING_RRC_BT_1_D = 0x1F,
GregCr 0:deaafdfde3bb 243
GregCr 0:deaafdfde3bb 244 };
GregCr 0:deaafdfde3bb 245
GregCr 0:deaafdfde3bb 246 /*!
GregCr 0:deaafdfde3bb 247 * \brief Represents the possible spreading factor values in LoRa packet types
GregCr 0:deaafdfde3bb 248 */
GregCr 0:deaafdfde3bb 249 enum RadioLoRaSpreadingFactors_t
GregCr 0:deaafdfde3bb 250 {
GregCr 0:deaafdfde3bb 251 LORA_SF5 = 0x05,
GregCr 0:deaafdfde3bb 252 LORA_SF6 = 0x06,
GregCr 0:deaafdfde3bb 253 LORA_SF7 = 0x07,
GregCr 0:deaafdfde3bb 254 LORA_SF8 = 0x08,
GregCr 0:deaafdfde3bb 255 LORA_SF9 = 0x09,
GregCr 0:deaafdfde3bb 256 LORA_SF10 = 0x0A,
GregCr 0:deaafdfde3bb 257 LORA_SF11 = 0x0B,
GregCr 0:deaafdfde3bb 258 LORA_SF12 = 0x0C,
GregCr 0:deaafdfde3bb 259 };
GregCr 0:deaafdfde3bb 260
GregCr 0:deaafdfde3bb 261 /*!
GregCr 0:deaafdfde3bb 262 * \brief Represents the bandwidth values for LoRa packet type
GregCr 0:deaafdfde3bb 263 */
GregCr 0:deaafdfde3bb 264 enum RadioLoRaBandwidths_t
GregCr 0:deaafdfde3bb 265 {
GregCr 0:deaafdfde3bb 266 LORA_BW_500 = 6,
GregCr 0:deaafdfde3bb 267 LORA_BW_250 = 5,
GregCr 0:deaafdfde3bb 268 LORA_BW_125 = 4,
GregCr 0:deaafdfde3bb 269 LORA_BW_062 = 3,
GregCr 0:deaafdfde3bb 270 LORA_BW_041 = 10,
GregCr 0:deaafdfde3bb 271 LORA_BW_031 = 2,
GregCr 0:deaafdfde3bb 272 LORA_BW_020 = 9,
GregCr 0:deaafdfde3bb 273 LORA_BW_015 = 1,
GregCr 0:deaafdfde3bb 274 LORA_BW_010 = 8,
GregCr 0:deaafdfde3bb 275 LORA_BW_007 = 0,
GregCr 0:deaafdfde3bb 276 };
GregCr 0:deaafdfde3bb 277
GregCr 0:deaafdfde3bb 278 /*!
GregCr 0:deaafdfde3bb 279 * \brief Represents the coding rate values for LoRa packet type
GregCr 0:deaafdfde3bb 280 */
GregCr 0:deaafdfde3bb 281 enum RadioLoRaCodingRates_t
GregCr 0:deaafdfde3bb 282 {
GregCr 0:deaafdfde3bb 283 LORA_CR_4_5 = 0x01,
GregCr 0:deaafdfde3bb 284 LORA_CR_4_6 = 0x02,
GregCr 0:deaafdfde3bb 285 LORA_CR_4_7 = 0x03,
GregCr 0:deaafdfde3bb 286 LORA_CR_4_8 = 0x04,
GregCr 0:deaafdfde3bb 287 LORA_CR_LI_4_5 = 0x05,
GregCr 0:deaafdfde3bb 288 LORA_CR_LI_4_6 = 0x06,
GregCr 0:deaafdfde3bb 289 LORA_CR_LI_4_7 = 0x07,
GregCr 0:deaafdfde3bb 290 };
GregCr 0:deaafdfde3bb 291
GregCr 0:deaafdfde3bb 292 /*!
GregCr 0:deaafdfde3bb 293 * \brief Represents the preamble length values
GregCr 0:deaafdfde3bb 294 */
GregCr 0:deaafdfde3bb 295 enum RadioPreambleLengths_t
GregCr 0:deaafdfde3bb 296 {
GregCr 0:deaafdfde3bb 297 RADIO_PREAMBLE_LENGTH_04_BITS = 0x00, //!< Preamble length: 04 bits
GregCr 0:deaafdfde3bb 298 RADIO_PREAMBLE_LENGTH_08_BITS = 0x10, //!< Preamble length: 08 bits
GregCr 0:deaafdfde3bb 299 RADIO_PREAMBLE_LENGTH_12_BITS = 0x20, //!< Preamble length: 12 bits
GregCr 0:deaafdfde3bb 300 RADIO_PREAMBLE_LENGTH_16_BITS = 0x30, //!< Preamble length: 16 bits
GregCr 0:deaafdfde3bb 301 RADIO_PREAMBLE_LENGTH_20_BITS = 0x40, //!< Preamble length: 20 bits
GregCr 0:deaafdfde3bb 302 RADIO_PREAMBLE_LENGTH_24_BITS = 0x50, //!< Preamble length: 24 bits
GregCr 0:deaafdfde3bb 303 RADIO_PREAMBLE_LENGTH_28_BITS = 0x60, //!< Preamble length: 28 bits
GregCr 0:deaafdfde3bb 304 RADIO_PREAMBLE_LENGTH_32_BITS = 0x70, //!< Preamble length: 32 bits
GregCr 0:deaafdfde3bb 305 };
GregCr 0:deaafdfde3bb 306
GregCr 0:deaafdfde3bb 307
GregCr 0:deaafdfde3bb 308
GregCr 0:deaafdfde3bb 309 /*!
GregCr 0:deaafdfde3bb 310 * \brief The length of sync words
GregCr 0:deaafdfde3bb 311 */
GregCr 0:deaafdfde3bb 312 enum RadioSyncWordLengths_t
GregCr 0:deaafdfde3bb 313 {
GregCr 0:deaafdfde3bb 314 RADIO_SYNCWORD_LENGTH_1_BYTE = 0x00, //!< Sync word length: 1 byte
GregCr 0:deaafdfde3bb 315 RADIO_SYNCWORD_LENGTH_2_BYTE = 0x01, //!< Sync word length: 2 bytes
GregCr 0:deaafdfde3bb 316 RADIO_SYNCWORD_LENGTH_3_BYTE = 0x02, //!< Sync word length: 3 bytes
GregCr 0:deaafdfde3bb 317 RADIO_SYNCWORD_LENGTH_4_BYTE = 0x03, //!< Sync word length: 4 bytes
GregCr 0:deaafdfde3bb 318 RADIO_SYNCWORD_LENGTH_5_BYTE = 0x04, //!< Sync word length: 5 bytes
GregCr 0:deaafdfde3bb 319 RADIO_SYNCWORD_LENGTH_6_BYTE = 0x05, //!< Sync word length: 6 bytes
GregCr 0:deaafdfde3bb 320 RADIO_SYNCWORD_LENGTH_7_BYTE = 0x06, //!< Sync word length: 7 bytes
GregCr 0:deaafdfde3bb 321 RADIO_SYNCWORD_LENGTH_8_BYTE = 0x07, //!< Sync word length: 8 bytes
GregCr 0:deaafdfde3bb 322 };
GregCr 0:deaafdfde3bb 323
GregCr 0:deaafdfde3bb 324 /*!
GregCr 0:deaafdfde3bb 325 * \brief Represents the possible combinations of SyncWord correlators activated
GregCr 0:deaafdfde3bb 326 */
GregCr 0:deaafdfde3bb 327 enum RadioAddressComp_t
GregCr 0:deaafdfde3bb 328 {
GregCr 0:deaafdfde3bb 329 RADIO_ADDRESSCOMP_FILT_OFF = 0x00, //!< No correlator turned on, i.e. do not search for SyncWord
GregCr 0:deaafdfde3bb 330 RADIO_ADDRESSCOMP_FILT_NODE = 0x01,
GregCr 0:deaafdfde3bb 331 RADIO_ADDRESSCOMP_FILT_NODE_BROAD = 0x02,
GregCr 0:deaafdfde3bb 332
GregCr 0:deaafdfde3bb 333 };
GregCr 0:deaafdfde3bb 334
GregCr 0:deaafdfde3bb 335 /*!
GregCr 0:deaafdfde3bb 336 * \brief Radio packet length mode
GregCr 0:deaafdfde3bb 337 */
GregCr 0:deaafdfde3bb 338 enum RadioPacketLengthModes_t
GregCr 0:deaafdfde3bb 339 {
GregCr 0:deaafdfde3bb 340 RADIO_PACKET_FIXED_LENGTH = 0x00, //!< The packet is known on both sides, no header included in the packet
GregCr 0:deaafdfde3bb 341 RADIO_PACKET_VARIABLE_LENGTH = 0x01, //!< The packet is on variable size, header included
GregCr 0:deaafdfde3bb 342 };
GregCr 0:deaafdfde3bb 343
GregCr 0:deaafdfde3bb 344 /*!
GregCr 0:deaafdfde3bb 345 * \brief Represents the CRC length
GregCr 0:deaafdfde3bb 346 */
GregCr 0:deaafdfde3bb 347 enum RadioCrcTypes_t
GregCr 0:deaafdfde3bb 348 {
GregCr 0:deaafdfde3bb 349 RADIO_CRC_OFF = 0x01, //!< No CRC in use
GregCr 0:deaafdfde3bb 350 RADIO_CRC_1_BYTES = 0x00,
GregCr 0:deaafdfde3bb 351 RADIO_CRC_2_BYTES = 0x02,
GregCr 0:deaafdfde3bb 352 RADIO_CRC_1_BYTES_INV = 0x04,
GregCr 0:deaafdfde3bb 353 RADIO_CRC_2_BYTES_INV = 0x06,
GregCr 0:deaafdfde3bb 354 };
GregCr 0:deaafdfde3bb 355
GregCr 0:deaafdfde3bb 356 /*!
GregCr 0:deaafdfde3bb 357 * \brief Radio whitening mode activated or deactivated
GregCr 0:deaafdfde3bb 358 */
GregCr 0:deaafdfde3bb 359 enum RadioDcFree_t
GregCr 0:deaafdfde3bb 360 {
GregCr 0:deaafdfde3bb 361 RADIO_DC_FREE_OFF = 0x00,
GregCr 0:deaafdfde3bb 362 RADIO_DC_FREEMANCHESTER = 0x02,
GregCr 0:deaafdfde3bb 363 RADIO_DC_FREEWHITENING = 0x01,
GregCr 0:deaafdfde3bb 364 };
GregCr 0:deaafdfde3bb 365
GregCr 0:deaafdfde3bb 366 /*!
GregCr 0:deaafdfde3bb 367 * \brief Holds the lengths mode of a LoRa packet type
GregCr 0:deaafdfde3bb 368 */
GregCr 0:deaafdfde3bb 369 enum RadioLoRaPacketLengthsMode_t
GregCr 0:deaafdfde3bb 370 {
GregCr 0:deaafdfde3bb 371 LORA_PACKET_VARIABLE_LENGTH = 0x00, //!< The packet is on variable size, header included
GregCr 0:deaafdfde3bb 372 LORA_PACKET_FIXED_LENGTH = 0x01, //!< The packet is known on both sides, no header included in the packet
GregCr 0:deaafdfde3bb 373 LORA_PACKET_EXPLICIT = LORA_PACKET_VARIABLE_LENGTH,
GregCr 0:deaafdfde3bb 374 LORA_PACKET_IMPLICIT = LORA_PACKET_FIXED_LENGTH,
GregCr 0:deaafdfde3bb 375 };
GregCr 0:deaafdfde3bb 376
GregCr 0:deaafdfde3bb 377 /*!
GregCr 0:deaafdfde3bb 378 * \brief Represents the CRC mode for LoRa packet type
GregCr 0:deaafdfde3bb 379 */
GregCr 0:deaafdfde3bb 380 enum RadioLoRaCrcModes_t
GregCr 0:deaafdfde3bb 381 {
GregCr 0:deaafdfde3bb 382 LORA_CRC_ON = 0x01, //!< CRC activated
GregCr 0:deaafdfde3bb 383 LORA_CRC_OFF = 0x00, //!< CRC not used
GregCr 0:deaafdfde3bb 384 };
GregCr 0:deaafdfde3bb 385
GregCr 0:deaafdfde3bb 386 /*!
GregCr 0:deaafdfde3bb 387 * \brief Represents the IQ mode for LoRa packet type
GregCr 0:deaafdfde3bb 388 */
GregCr 0:deaafdfde3bb 389 enum RadioLoRaIQModes_t
GregCr 0:deaafdfde3bb 390 {
GregCr 0:deaafdfde3bb 391 LORA_IQ_NORMAL = 0x00,
GregCr 0:deaafdfde3bb 392 LORA_IQ_INVERTED = 0x01,
GregCr 0:deaafdfde3bb 393 };
GregCr 0:deaafdfde3bb 394
GregCr 0:deaafdfde3bb 395 /*!
GregCr 0:deaafdfde3bb 396 * \brief Represents the length of the ID to check in ranging operation
GregCr 0:deaafdfde3bb 397 */
GregCr 0:deaafdfde3bb 398 enum RadioRangingIdCheckLen_t
GregCr 0:deaafdfde3bb 399 {
GregCr 0:deaafdfde3bb 400 RANGING_IDCHECK_LENGTH_08_BITS = 0,
GregCr 0:deaafdfde3bb 401 RANGING_IDCHECK_LENGTH_16_BITS = 1,
GregCr 0:deaafdfde3bb 402 RANGING_IDCHECK_LENGTH_24_BITS = 2,
GregCr 0:deaafdfde3bb 403 RANGING_IDCHECK_LENGTH_32_BITS = 3,
GregCr 0:deaafdfde3bb 404 };
GregCr 0:deaafdfde3bb 405
GregCr 0:deaafdfde3bb 406 /*!
GregCr 0:deaafdfde3bb 407 * \brief Represents the result type to be used in ranging operation
GregCr 0:deaafdfde3bb 408 */
GregCr 0:deaafdfde3bb 409 enum RadioRangingResultType_t
GregCr 0:deaafdfde3bb 410 {
GregCr 0:deaafdfde3bb 411 RANGING_RESULT_RAW = 0x00,
GregCr 0:deaafdfde3bb 412 RANGING_RESULT_AVERAGED = 0x03,
GregCr 0:deaafdfde3bb 413 RANGING_RESULT_DEBIASED = 0x06,
GregCr 0:deaafdfde3bb 414 RANGING_RESULT_FILTERED = 0x09,
GregCr 0:deaafdfde3bb 415 };
GregCr 0:deaafdfde3bb 416
GregCr 0:deaafdfde3bb 417
GregCr 0:deaafdfde3bb 418
GregCr 0:deaafdfde3bb 419 /*!
GregCr 0:deaafdfde3bb 420 * \brief Represents the interruption masks available for the radio
GregCr 0:deaafdfde3bb 421 *
GregCr 0:deaafdfde3bb 422 * \remark Note that not all these interruptions are available for all packet types
GregCr 0:deaafdfde3bb 423 */
GregCr 0:deaafdfde3bb 424 enum RadioIrqMasks_t
GregCr 0:deaafdfde3bb 425 {
GregCr 0:deaafdfde3bb 426 IRQ_RADIO_NONE = 0x0000,
GregCr 0:deaafdfde3bb 427 IRQ_TX_DONE = 0x0001,
GregCr 0:deaafdfde3bb 428 IRQ_RX_DONE = 0x0002,
GregCr 0:deaafdfde3bb 429 IRQ_PREAMBLE_DETECTED = 0x0004,
GregCr 0:deaafdfde3bb 430 IRQ_SYNCWORD_VALID = 0x0008,
GregCr 0:deaafdfde3bb 431 IRQ_HEADER_VALID = 0x0010,
GregCr 0:deaafdfde3bb 432 IRQ_HEADER_ERROR = 0x0020,
GregCr 0:deaafdfde3bb 433 IRQ_GFSK_ERROR = 0x0040,
GregCr 0:deaafdfde3bb 434 IRQ_LORA_CRC_ERROR = 0x0040, //shared with IRQ_GFSK_ERROR
GregCr 0:deaafdfde3bb 435 IRQ_CAD_DONE = 0x0080,
GregCr 0:deaafdfde3bb 436 IRQ_CAD_ACTIVITY_DETECTED = 0x0100,
GregCr 0:deaafdfde3bb 437 IRQ_RX_TX_TIMEOUT = 0x0200,
GregCr 0:deaafdfde3bb 438 IRQ_RANGING_SLAVE_REQUEST_VALID = 0x0400,
GregCr 0:deaafdfde3bb 439 IRQ_RANGING_SLAVE_REQUEST_DISCARDED = 0x0800,
GregCr 0:deaafdfde3bb 440 IRQ_RANGING_SLAVE_RESPONSE_DONE = 0x1000,
GregCr 0:deaafdfde3bb 441 IRQ_RANGING_MASTER_RESULT_VALID = 0x2000,
GregCr 0:deaafdfde3bb 442 IRQ_RANGING_MASTER_RESULT_TIMEOUT = 0x4000,
GregCr 0:deaafdfde3bb 443
GregCr 0:deaafdfde3bb 444 IRQ_RADIO_ALL = 0xFFFF,
GregCr 0:deaafdfde3bb 445 };
GregCr 0:deaafdfde3bb 446
GregCr 0:deaafdfde3bb 447
GregCr 0:deaafdfde3bb 448
GregCr 0:deaafdfde3bb 449
GregCr 0:deaafdfde3bb 450 /*!
GregCr 0:deaafdfde3bb 451 * \brief Represents all possible opcode understood by the radio
GregCr 0:deaafdfde3bb 452 */
GregCr 0:deaafdfde3bb 453 enum RadioCommands_t
GregCr 0:deaafdfde3bb 454 {
GregCr 0:deaafdfde3bb 455 RADIO_GET_STATUS = 0xC0,
GregCr 0:deaafdfde3bb 456 RADIO_WRITE_REGISTER = 0x0D,
GregCr 0:deaafdfde3bb 457 RADIO_READ_REGISTER = 0x1D,
GregCr 0:deaafdfde3bb 458 RADIO_WRITE_BUFFER = 0x0E,
GregCr 0:deaafdfde3bb 459 RADIO_READ_BUFFER = 0x1E,
GregCr 0:deaafdfde3bb 460 RADIO_SET_SLEEP = 0x84,
GregCr 0:deaafdfde3bb 461 RADIO_SET_STANDBY = 0x80,
GregCr 0:deaafdfde3bb 462 RADIO_SET_FS = 0xC1,
GregCr 0:deaafdfde3bb 463 RADIO_SET_TX = 0x83,
GregCr 0:deaafdfde3bb 464 RADIO_SET_RX = 0x82,
GregCr 0:deaafdfde3bb 465 RADIO_SET_RXDUTYCYCLE = 0x94,
GregCr 0:deaafdfde3bb 466 RADIO_SET_CAD = 0xC5,
GregCr 0:deaafdfde3bb 467 RADIO_SET_AUTOTXRX = 0x87,
GregCr 0:deaafdfde3bb 468 RADIO_SET_TXCONTINUOUSWAVE = 0xD1,
GregCr 0:deaafdfde3bb 469 RADIO_SET_TXCONTINUOUSPREAMBLE = 0xD2,
GregCr 0:deaafdfde3bb 470 RADIO_SET_PACKETTYPE = 0x8A,
GregCr 0:deaafdfde3bb 471 RADIO_GET_PACKETTYPE = 0x11,
GregCr 0:deaafdfde3bb 472 RADIO_SET_RFFREQUENCY = 0x86,
GregCr 0:deaafdfde3bb 473 RADIO_SET_TXPARAMS = 0x8E,
GregCr 0:deaafdfde3bb 474 RADIO_SET_PA_OPT = 0x95,
GregCr 0:deaafdfde3bb 475 RADIO_SET_CADPARAMS = 0x88,
GregCr 0:deaafdfde3bb 476 RADIO_SET_BUFFERBASEADDRESS = 0x8F,
GregCr 0:deaafdfde3bb 477 RADIO_SET_MODULATIONPARAMS = 0x8B,
GregCr 0:deaafdfde3bb 478 RADIO_SET_PACKETPARAMS = 0x8C,
GregCr 0:deaafdfde3bb 479 RADIO_GET_RXBUFFERSTATUS = 0x13,
GregCr 0:deaafdfde3bb 480 RADIO_GET_PACKETSTATUS = 0x14,
GregCr 0:deaafdfde3bb 481 RADIO_GET_RSSIINST = 0x15,
GregCr 0:deaafdfde3bb 482 RADIO_GET_STATS = 0x10,
GregCr 0:deaafdfde3bb 483 RADIO_RESET_STATS = 0x00,
GregCr 0:deaafdfde3bb 484 RADIO_CFG_DIOIRQ = 0x08,
GregCr 0:deaafdfde3bb 485 RADIO_GET_IRQSTATUS = 0x12,
GregCr 0:deaafdfde3bb 486 RADIO_CLR_IRQSTATUS = 0x02,
GregCr 0:deaafdfde3bb 487 RADIO_CALIBRATE = 0x89,
GregCr 0:deaafdfde3bb 488 RADIO_SET_REGULATORMODE = 0x96,
GregCr 0:deaafdfde3bb 489 RADIO_SET_PRAMSWAPCMD = 0x8D,
GregCr 0:deaafdfde3bb 490 RADIO_GET_ERROR = 0x17,
GregCr 0:deaafdfde3bb 491 RADIO_SET_LONGPREAMBLE = 0x90,
GregCr 0:deaafdfde3bb 492 RADIO_SET_TXFALLBACKMODE = 0x93,
GregCr 0:deaafdfde3bb 493
GregCr 0:deaafdfde3bb 494 };
GregCr 0:deaafdfde3bb 495
GregCr 0:deaafdfde3bb 496
GregCr 0:deaafdfde3bb 497
GregCr 0:deaafdfde3bb 498 /*!
GregCr 0:deaafdfde3bb 499 * \brief The type describing the modulation parameters for every packet types
GregCr 0:deaafdfde3bb 500 */
GregCr 0:deaafdfde3bb 501 typedef struct
GregCr 0:deaafdfde3bb 502 {
GregCr 0:deaafdfde3bb 503 RadioPacketType_t PacketType; //!< Packet to which the modulation parameters are referring to.
GregCr 0:deaafdfde3bb 504 union
GregCr 0:deaafdfde3bb 505 {
GregCr 0:deaafdfde3bb 506 uint8_t Buffer[8];
GregCr 0:deaafdfde3bb 507
GregCr 0:deaafdfde3bb 508 struct
GregCr 0:deaafdfde3bb 509 {
GregCr 0:deaafdfde3bb 510 uint8_t BitRate[3];
GregCr 0:deaafdfde3bb 511 //uint32_t BitRate:24;
GregCr 0:deaafdfde3bb 512 RadioModShapings_t PulseShape:8;
GregCr 0:deaafdfde3bb 513 uint8_t BW;
GregCr 0:deaafdfde3bb 514 uint8_t Fdev[3];
GregCr 0:deaafdfde3bb 515 }Gfsk;
GregCr 0:deaafdfde3bb 516
GregCr 0:deaafdfde3bb 517 struct
GregCr 0:deaafdfde3bb 518 {
GregCr 0:deaafdfde3bb 519 uint8_t BitRate[3];
GregCr 0:deaafdfde3bb 520 RadioModShapings_t PulseShape:8;
GregCr 0:deaafdfde3bb 521 uint8_t BW;
GregCr 0:deaafdfde3bb 522 uint8_t Fdev[3];
GregCr 0:deaafdfde3bb 523 }Gmsk;
GregCr 0:deaafdfde3bb 524
GregCr 0:deaafdfde3bb 525 struct
GregCr 0:deaafdfde3bb 526 {
GregCr 0:deaafdfde3bb 527 uint8_t BitRate[3];
GregCr 0:deaafdfde3bb 528 RadioModShapings_t PulseShape:8;
GregCr 0:deaafdfde3bb 529 }Bpsk;
GregCr 0:deaafdfde3bb 530
GregCr 0:deaafdfde3bb 531
GregCr 0:deaafdfde3bb 532 struct
GregCr 0:deaafdfde3bb 533 {
GregCr 0:deaafdfde3bb 534 RadioLoRaSpreadingFactors_t SpreadingFactor; //!< Spreading Factor for the LoRa modulation
GregCr 0:deaafdfde3bb 535 RadioLoRaBandwidths_t Bandwidth; //!< Bandwidth for the LoRa modulation
GregCr 0:deaafdfde3bb 536 RadioLoRaCodingRates_t CodingRate; //!< Coding rate for the LoRa modulation
GregCr 0:deaafdfde3bb 537 }LoRa;
GregCr 0:deaafdfde3bb 538
GregCr 0:deaafdfde3bb 539
GregCr 0:deaafdfde3bb 540 }Params; //!< Holds the modulation parameters structure
GregCr 0:deaafdfde3bb 541 }ModulationParams_t;
GregCr 0:deaafdfde3bb 542
GregCr 0:deaafdfde3bb 543 /*!
GregCr 0:deaafdfde3bb 544 * \brief The type describing the packet parameters for every packet types
GregCr 0:deaafdfde3bb 545 */
GregCr 0:deaafdfde3bb 546 typedef struct
GregCr 0:deaafdfde3bb 547 {
GregCr 0:deaafdfde3bb 548 RadioPacketType_t PacketType; //!< Packet to which the packet parameters are referring to.
GregCr 0:deaafdfde3bb 549 union
GregCr 0:deaafdfde3bb 550 {
GregCr 0:deaafdfde3bb 551 uint8_t Buffer[8];
GregCr 0:deaafdfde3bb 552
GregCr 0:deaafdfde3bb 553 /*!
GregCr 0:deaafdfde3bb 554 * \brief Holds the GFSK packet parameters
GregCr 0:deaafdfde3bb 555 */
GregCr 0:deaafdfde3bb 556 struct
GregCr 0:deaafdfde3bb 557 {
GregCr 0:deaafdfde3bb 558 uint8_t PreambleTxLength; //!< The preamble tx length for GFSK packet type
GregCr 0:deaafdfde3bb 559 uint8_t PreambleDetectLength; //!< The preamble rx length for GFSK packet type
GregCr 0:deaafdfde3bb 560
GregCr 0:deaafdfde3bb 561 RadioSyncWordLengths_t SyncWordLength; //!< The synchronization word length for GFSK packet type
GregCr 0:deaafdfde3bb 562 RadioAddressComp_t AddrComp;
GregCr 0:deaafdfde3bb 563 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 564 uint8_t PayloadLength; //!< Size of the payload in the GFSK packet
GregCr 0:deaafdfde3bb 565 RadioCrcTypes_t CrcLength; //!< Size of the CRC block in the GFSK packet
GregCr 0:deaafdfde3bb 566 RadioDcFree_t DcFree;
GregCr 0:deaafdfde3bb 567 }Gfsk;
GregCr 0:deaafdfde3bb 568 /*!
GregCr 0:deaafdfde3bb 569 * \brief Holds the LoRa packet parameters
GregCr 0:deaafdfde3bb 570 */
GregCr 0:deaafdfde3bb 571 struct
GregCr 0:deaafdfde3bb 572 {
GregCr 0:deaafdfde3bb 573 uint8_t PreambleLength; //!< The preamble length is the number of LoRa symbols in the preamble. To set it, use the following formula @code Number of symbols = PreambleLength[3:0] * ( 2^PreambleLength[7:4] ) @endcode
GregCr 0:deaafdfde3bb 574 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 575 uint8_t PayloadLength; //!< Size of the payload in the LoRa packet
GregCr 0:deaafdfde3bb 576 RadioLoRaCrcModes_t CrcMode; //!< Size of CRC block in LoRa packet
GregCr 0:deaafdfde3bb 577 RadioLoRaIQModes_t InvertIQ; //!< Allows to swap IQ for LoRa packet
GregCr 0:deaafdfde3bb 578 }LoRa;
GregCr 0:deaafdfde3bb 579
GregCr 0:deaafdfde3bb 580 }Params; //!< Holds the packet parameters structure
GregCr 0:deaafdfde3bb 581 }PacketParams_t;
GregCr 0:deaafdfde3bb 582
GregCr 0:deaafdfde3bb 583 /*!
GregCr 0:deaafdfde3bb 584 * \brief Represents the packet status for every packet type
GregCr 0:deaafdfde3bb 585 */
GregCr 0:deaafdfde3bb 586 typedef struct
GregCr 0:deaafdfde3bb 587 {
GregCr 0:deaafdfde3bb 588 RadioPacketType_t packetType; //!< Packet to which the packet status are referring to.
GregCr 0:deaafdfde3bb 589 union
GregCr 0:deaafdfde3bb 590 {
GregCr 0:deaafdfde3bb 591 struct
GregCr 0:deaafdfde3bb 592 {
GregCr 0:deaafdfde3bb 593 uint8_t RxStatus;
GregCr 0:deaafdfde3bb 594 int8_t RssiAvg; //!< The averaged RSSI
GregCr 0:deaafdfde3bb 595 int8_t RssiSync; //!< The RSSI measured on last packet
GregCr 0:deaafdfde3bb 596 }Gfsk;
GregCr 0:deaafdfde3bb 597 struct
GregCr 0:deaafdfde3bb 598 {
GregCr 0:deaafdfde3bb 599 int8_t RssiPkt; //!< The RSSI of the last packet
GregCr 0:deaafdfde3bb 600 int8_t SnrPkt; //!< The SNR of the last packet
GregCr 0:deaafdfde3bb 601 int8_t SignalRssiPkt;
GregCr 0:deaafdfde3bb 602 }LoRa;
GregCr 0:deaafdfde3bb 603
GregCr 0:deaafdfde3bb 604 };
GregCr 0:deaafdfde3bb 605 }PacketStatus_t;
GregCr 0:deaafdfde3bb 606
GregCr 0:deaafdfde3bb 607 /*!
GregCr 0:deaafdfde3bb 608 * \brief Represents the Rx internal counters values when GFSK or LoRa packet type is used
GregCr 0:deaafdfde3bb 609 */
GregCr 0:deaafdfde3bb 610 typedef struct
GregCr 0:deaafdfde3bb 611 {
GregCr 0:deaafdfde3bb 612 RadioPacketType_t packetType; //!< Packet to which the packet status are referring to.
GregCr 0:deaafdfde3bb 613 uint16_t NbPktReceived;
GregCr 0:deaafdfde3bb 614 uint16_t NbPktCrcOk;
GregCr 0:deaafdfde3bb 615 uint16_t NbPktLengthError;
GregCr 0:deaafdfde3bb 616 }RxCounter_t;
GregCr 0:deaafdfde3bb 617
GregCr 0:deaafdfde3bb 618 /*!
GregCr 0:deaafdfde3bb 619 * \brief Represents a calibration configuration
GregCr 0:deaafdfde3bb 620 */
GregCr 0:deaafdfde3bb 621 typedef union
GregCr 0:deaafdfde3bb 622 {
GregCr 0:deaafdfde3bb 623 uint8_t Value;
GregCr 0:deaafdfde3bb 624 struct
GregCr 0:deaafdfde3bb 625 {
GregCr 0:deaafdfde3bb 626 uint8_t Reserved : 1;
GregCr 0:deaafdfde3bb 627 uint8_t ImgEnable : 1;
GregCr 0:deaafdfde3bb 628 uint8_t ADCBulkPEnable : 1; //!< Calibrate ADC bulkP
GregCr 0:deaafdfde3bb 629 uint8_t ADCBulkNEnable : 1; //!< Calibrate ADC bulkN
GregCr 0:deaafdfde3bb 630 uint8_t ADCPulseEnable : 1; //!< Calibrate ADC Pulse
GregCr 0:deaafdfde3bb 631 uint8_t PLLEnable : 1; //!< Calibrate PLL
GregCr 0:deaafdfde3bb 632 uint8_t RC13MEnable : 1; //!< Calibrate RC13M clock
GregCr 0:deaafdfde3bb 633 uint8_t RC64KEnable : 1; //!< Calibrate RC64K clock
GregCr 0:deaafdfde3bb 634 } Fields;
GregCr 0:deaafdfde3bb 635 }CalibrationParams_t;
GregCr 0:deaafdfde3bb 636
GregCr 0:deaafdfde3bb 637 /*!
GregCr 0:deaafdfde3bb 638 * \brief Represents a sleep mode configuration
GregCr 0:deaafdfde3bb 639 */
GregCr 0:deaafdfde3bb 640 typedef union
GregCr 0:deaafdfde3bb 641 {
GregCr 0:deaafdfde3bb 642 uint8_t Value;
GregCr 0:deaafdfde3bb 643 struct
GregCr 0:deaafdfde3bb 644 {
GregCr 0:deaafdfde3bb 645 uint8_t Reserved : 5;
GregCr 0:deaafdfde3bb 646 uint8_t WarmStart : 1;
GregCr 0:deaafdfde3bb 647 uint8_t Reset : 1;
GregCr 0:deaafdfde3bb 648 uint8_t WakeUpRTC : 1; //!< Get out of sleep mode if wakeup signal received from RTC
GregCr 0:deaafdfde3bb 649 } Fields;
GregCr 0:deaafdfde3bb 650
GregCr 0:deaafdfde3bb 651 }SleepParams_t;
GregCr 0:deaafdfde3bb 652
GregCr 0:deaafdfde3bb 653
GregCr 0:deaafdfde3bb 654 /*!
GregCr 0:deaafdfde3bb 655 * \brief Represents the SX1261 and its features
GregCr 0:deaafdfde3bb 656 *
GregCr 0:deaafdfde3bb 657 * It implements the commands the SX1261 can understands
GregCr 0:deaafdfde3bb 658 */
GregCr 0:deaafdfde3bb 659 class SX1261 : public Radio
GregCr 0:deaafdfde3bb 660 {
GregCr 0:deaafdfde3bb 661 public:
GregCr 0:deaafdfde3bb 662 /*!
GregCr 0:deaafdfde3bb 663 * \brief Instantiates a SX1261 object and provides API functions to communicates with the radio
GregCr 0:deaafdfde3bb 664 *
GregCr 0:deaafdfde3bb 665 * \param [in] txDone Pointer to a function run on successful transmission
GregCr 0:deaafdfde3bb 666 * \param [in] rxDone Pointer to a function run on successful reception
GregCr 0:deaafdfde3bb 667 * \param [in] rxPblSyncWordHeader Pointer to a function run on successful SyncWord, pbl or header reception
GregCr 0:deaafdfde3bb 668 * \param [in] rxtxTimeout Pointer to a function run on transmission/reception timeout
GregCr 0:deaafdfde3bb 669 * \param [in] rxError Pointer to a function run on reception error
GregCr 0:deaafdfde3bb 670 * \param [in] rangingDone Pointer to a function run on ranging terminated
GregCr 0:deaafdfde3bb 671 * \param [in] cadDone Pointer to a function run on channel activity detected
GregCr 0:deaafdfde3bb 672 *
GregCr 0:deaafdfde3bb 673 */
GregCr 0:deaafdfde3bb 674 SX1261( void ( *txDone )( ), void ( *rxDone )( ), void ( *rxPblSyncWordHeader )(IrqPblSyncHeaderCode_t val ),
GregCr 0:deaafdfde3bb 675 void ( *rxTxTimeout )( ), void ( *rxError )( IrqErrorCode_t errorCode ), void ( *rangingDone )( IrqRangingCode_t val ),
GregCr 0:deaafdfde3bb 676 void ( *cadDone )( bool channelActivityDetected ), void ( *onDioIrq )( ) ): Radio( txDone, rxDone, rxPblSyncWordHeader, rxTxTimeout, rxError, rangingDone, cadDone )
GregCr 0:deaafdfde3bb 677 {
GregCr 0:deaafdfde3bb 678
GregCr 0:deaafdfde3bb 679 this->dioIrq = &SX1261::OnDioIrq;
GregCr 0:deaafdfde3bb 680
GregCr 0:deaafdfde3bb 681 this->onCustomDioIrq = onDioIrq;
GregCr 0:deaafdfde3bb 682
GregCr 0:deaafdfde3bb 683 this->PacketType = PACKET_TYPE_NONE;
GregCr 0:deaafdfde3bb 684 }
GregCr 0:deaafdfde3bb 685
GregCr 0:deaafdfde3bb 686 virtual ~SX1261( )
GregCr 0:deaafdfde3bb 687 {
GregCr 0:deaafdfde3bb 688 }
GregCr 0:deaafdfde3bb 689
GregCr 0:deaafdfde3bb 690 /*!
GregCr 0:deaafdfde3bb 691 * \brief Holds the internal operating mode of the radio
GregCr 0:deaafdfde3bb 692 */
GregCr 0:deaafdfde3bb 693 RadioOperatingModes_t OperatingMode;
GregCr 0:deaafdfde3bb 694
GregCr 0:deaafdfde3bb 695 uint16_t LastIrqs;
GregCr 0:deaafdfde3bb 696
GregCr 0:deaafdfde3bb 697 private:
GregCr 0:deaafdfde3bb 698
GregCr 0:deaafdfde3bb 699
GregCr 0:deaafdfde3bb 700 /*!
GregCr 0:deaafdfde3bb 701 * \brief Stores the current packet type set in the radio
GregCr 0:deaafdfde3bb 702 */
GregCr 0:deaafdfde3bb 703 RadioPacketType_t PacketType;
GregCr 0:deaafdfde3bb 704
GregCr 0:deaafdfde3bb 705
GregCr 0:deaafdfde3bb 706 /*!
GregCr 0:deaafdfde3bb 707 * \brief Hardware DIO IRQ functions
GregCr 0:deaafdfde3bb 708 */
GregCr 0:deaafdfde3bb 709 DioIrqHandler dioIrq;
GregCr 0:deaafdfde3bb 710
GregCr 0:deaafdfde3bb 711 protected:
GregCr 0:deaafdfde3bb 712
GregCr 0:deaafdfde3bb 713 void ( *onCustomDioIrq )( );
GregCr 0:deaafdfde3bb 714
GregCr 0:deaafdfde3bb 715 /*!
GregCr 0:deaafdfde3bb 716 * \brief Sets a function to be triggered on radio interrupt
GregCr 0:deaafdfde3bb 717 *
GregCr 0:deaafdfde3bb 718 * \param [in] irqHandler A pointer to a function to be run on interrupt
GregCr 0:deaafdfde3bb 719 * from the radio
GregCr 0:deaafdfde3bb 720 */
GregCr 0:deaafdfde3bb 721 virtual void IoIrqInit( DioIrqHandler irqHandler ) = 0;
GregCr 0:deaafdfde3bb 722
GregCr 0:deaafdfde3bb 723 public:
GregCr 0:deaafdfde3bb 724 /*!
GregCr 0:deaafdfde3bb 725 * \brief Initializes the radio driver
GregCr 0:deaafdfde3bb 726 */
GregCr 0:deaafdfde3bb 727 void Init( void );
GregCr 0:deaafdfde3bb 728
GregCr 0:deaafdfde3bb 729 /*!
GregCr 0:deaafdfde3bb 730 * \brief Initializes the radio registers to the recommended default values
GregCr 0:deaafdfde3bb 731 */
GregCr 0:deaafdfde3bb 732 void SetRegistersDefault( void );
GregCr 0:deaafdfde3bb 733
GregCr 0:deaafdfde3bb 734 /*!
GregCr 0:deaafdfde3bb 735 * \brief Returns the current device firmware version
GregCr 0:deaafdfde3bb 736 *
GregCr 0:deaafdfde3bb 737 * \retval version Firmware version
GregCr 0:deaafdfde3bb 738 */
GregCr 0:deaafdfde3bb 739 virtual uint16_t GetFirmwareVersion( void );
GregCr 0:deaafdfde3bb 740
GregCr 0:deaafdfde3bb 741 /*!
GregCr 0:deaafdfde3bb 742 * \brief Resets the radio
GregCr 0:deaafdfde3bb 743 */
GregCr 0:deaafdfde3bb 744 virtual void Reset( void ) = 0;
GregCr 0:deaafdfde3bb 745
GregCr 0:deaafdfde3bb 746 /*!
GregCr 0:deaafdfde3bb 747 * \brief Wake-ups the radio from Sleep mode
GregCr 0:deaafdfde3bb 748 */
GregCr 0:deaafdfde3bb 749 virtual void Wakeup( void ) = 0;
GregCr 0:deaafdfde3bb 750
GregCr 0:deaafdfde3bb 751 /*!
GregCr 0:deaafdfde3bb 752 * \brief Writes the given command to the radio
GregCr 0:deaafdfde3bb 753 *
GregCr 0:deaafdfde3bb 754 * \param [in] opcode Command opcode
GregCr 0:deaafdfde3bb 755 * \param [in] buffer Command parameters byte array
GregCr 0:deaafdfde3bb 756 * \param [in] size Command parameters byte array size
GregCr 0:deaafdfde3bb 757 */
GregCr 0:deaafdfde3bb 758 virtual void WriteCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size ) = 0;
GregCr 0:deaafdfde3bb 759
GregCr 0:deaafdfde3bb 760 /*!
GregCr 0:deaafdfde3bb 761 * \brief Reads the given command from the radio
GregCr 0:deaafdfde3bb 762 *
GregCr 0:deaafdfde3bb 763 * \param [in] opcode Command opcode
GregCr 0:deaafdfde3bb 764 * \param [in] buffer Command parameters byte array
GregCr 0:deaafdfde3bb 765 * \param [in] size Command parameters byte array size
GregCr 0:deaafdfde3bb 766 */
GregCr 0:deaafdfde3bb 767 virtual void ReadCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size ) = 0;
GregCr 0:deaafdfde3bb 768
GregCr 0:deaafdfde3bb 769 /*!
GregCr 0:deaafdfde3bb 770 * \brief Writes multiple radio registers starting at address
GregCr 0:deaafdfde3bb 771 *
GregCr 0:deaafdfde3bb 772 * \param [in] address First Radio register address
GregCr 0:deaafdfde3bb 773 * \param [in] buffer Buffer containing the new register's values
GregCr 0:deaafdfde3bb 774 * \param [in] size Number of registers to be written
GregCr 0:deaafdfde3bb 775 */
GregCr 0:deaafdfde3bb 776 virtual void WriteRegister( uint16_t address, uint8_t *buffer, uint16_t size ) = 0;
GregCr 0:deaafdfde3bb 777
GregCr 0:deaafdfde3bb 778 /*!
GregCr 0:deaafdfde3bb 779 * \brief Writes the radio register at the specified address
GregCr 0:deaafdfde3bb 780 *
GregCr 0:deaafdfde3bb 781 * \param [in] address Register address
GregCr 0:deaafdfde3bb 782 * \param [in] value New register value
GregCr 0:deaafdfde3bb 783 */
GregCr 0:deaafdfde3bb 784 virtual void WriteRegister( uint16_t address, uint8_t value ) = 0;
GregCr 0:deaafdfde3bb 785
GregCr 0:deaafdfde3bb 786 /*!
GregCr 0:deaafdfde3bb 787 * \brief Reads multiple radio registers starting at address
GregCr 0:deaafdfde3bb 788 *
GregCr 0:deaafdfde3bb 789 * \param [in] address First Radio register address
GregCr 0:deaafdfde3bb 790 * \param [out] buffer Buffer where to copy the registers data
GregCr 0:deaafdfde3bb 791 * \param [in] size Number of registers to be read
GregCr 0:deaafdfde3bb 792 */
GregCr 0:deaafdfde3bb 793 virtual void ReadRegister( uint16_t address, uint8_t *buffer, uint16_t size ) = 0;
GregCr 0:deaafdfde3bb 794
GregCr 0:deaafdfde3bb 795 /*!
GregCr 0:deaafdfde3bb 796 * \brief Reads the radio register at the specified address
GregCr 0:deaafdfde3bb 797 *
GregCr 0:deaafdfde3bb 798 * \param [in] address Register address
GregCr 0:deaafdfde3bb 799 *
GregCr 0:deaafdfde3bb 800 * \retval data Register value
GregCr 0:deaafdfde3bb 801 */
GregCr 0:deaafdfde3bb 802 virtual uint8_t ReadRegister( uint16_t address ) = 0;
GregCr 0:deaafdfde3bb 803
GregCr 0:deaafdfde3bb 804 /*!
GregCr 0:deaafdfde3bb 805 * \brief Writes Radio Data Buffer with buffer of size starting at offset.
GregCr 0:deaafdfde3bb 806 *
GregCr 0:deaafdfde3bb 807 * \param [in] offset Offset where to start writing
GregCr 0:deaafdfde3bb 808 * \param [in] buffer Buffer pointer
GregCr 0:deaafdfde3bb 809 * \param [in] size Buffer size
GregCr 0:deaafdfde3bb 810 */
GregCr 0:deaafdfde3bb 811 virtual void WriteBuffer( uint8_t offset, uint8_t *buffer, uint8_t size ) = 0;
GregCr 0:deaafdfde3bb 812
GregCr 0:deaafdfde3bb 813 /*!
GregCr 0:deaafdfde3bb 814 * \brief Reads Radio Data Buffer at offset to buffer of size
GregCr 0:deaafdfde3bb 815 *
GregCr 0:deaafdfde3bb 816 * \param [in] offset Offset where to start reading
GregCr 0:deaafdfde3bb 817 * \param [out] buffer Buffer pointer
GregCr 0:deaafdfde3bb 818 * \param [in] size Buffer size
GregCr 0:deaafdfde3bb 819 */
GregCr 0:deaafdfde3bb 820 virtual void ReadBuffer( uint8_t offset, uint8_t *buffer, uint8_t size ) = 0;
GregCr 0:deaafdfde3bb 821
GregCr 0:deaafdfde3bb 822 /*!
GregCr 0:deaafdfde3bb 823 * \brief Gets the current status of the radio DIOs
GregCr 0:deaafdfde3bb 824 *
GregCr 0:deaafdfde3bb 825 * \retval status [Bit #3: DIO3, Bit #2: DIO2,
GregCr 0:deaafdfde3bb 826 * Bit #1: DIO1, Bit #0: DIO0]
GregCr 0:deaafdfde3bb 827 */
GregCr 0:deaafdfde3bb 828 virtual uint8_t GetDioStatus( void ) = 0;
GregCr 0:deaafdfde3bb 829
GregCr 0:deaafdfde3bb 830 /*!
GregCr 0:deaafdfde3bb 831 * \brief Gets the current radio status
GregCr 0:deaafdfde3bb 832 *
GregCr 0:deaafdfde3bb 833 * \retval status Radio status
GregCr 0:deaafdfde3bb 834 */
GregCr 0:deaafdfde3bb 835 virtual RadioStatus_t GetStatus( void );
GregCr 0:deaafdfde3bb 836
GregCr 0:deaafdfde3bb 837 /*!
GregCr 0:deaafdfde3bb 838 * \brief Sets the radio in sleep mode
GregCr 0:deaafdfde3bb 839 *
GregCr 0:deaafdfde3bb 840 * \param [in] sleepConfig The sleep configuration describing data
GregCr 0:deaafdfde3bb 841 * retention and RTC wake-up
GregCr 0:deaafdfde3bb 842 */
GregCr 0:deaafdfde3bb 843 void SetSleep( SleepParams_t sleepConfig );
GregCr 0:deaafdfde3bb 844
GregCr 0:deaafdfde3bb 845 /*!
GregCr 0:deaafdfde3bb 846 * \brief Sets the radio in configuration mode
GregCr 0:deaafdfde3bb 847 *
GregCr 0:deaafdfde3bb 848 * \param [in] mode The standby mode to put the radio into
GregCr 0:deaafdfde3bb 849 */
GregCr 0:deaafdfde3bb 850 void SetStandby( RadioStandbyModes_t mode );
GregCr 0:deaafdfde3bb 851
GregCr 0:deaafdfde3bb 852 /*!
GregCr 0:deaafdfde3bb 853 * \brief Sets the radio in FS mode
GregCr 0:deaafdfde3bb 854 */
GregCr 0:deaafdfde3bb 855 void SetFs( void );
GregCr 0:deaafdfde3bb 856
GregCr 0:deaafdfde3bb 857 /*!
GregCr 0:deaafdfde3bb 858 * \brief Sets the radio in transmission mode
GregCr 0:deaafdfde3bb 859 *
GregCr 0:deaafdfde3bb 860 * \param [in] timeout Structure describing the transmission timeout value
GregCr 0:deaafdfde3bb 861 */
GregCr 0:deaafdfde3bb 862 void SetTx( uint32_t timeout );
GregCr 0:deaafdfde3bb 863
GregCr 0:deaafdfde3bb 864 /*!
GregCr 0:deaafdfde3bb 865 * \brief Sets the radio in reception mode
GregCr 0:deaafdfde3bb 866 *
GregCr 0:deaafdfde3bb 867 * \param [in] timeout Structure describing the reception timeout value
GregCr 0:deaafdfde3bb 868 */
GregCr 0:deaafdfde3bb 869 void SetRx( uint32_t timeout );
GregCr 0:deaafdfde3bb 870
GregCr 0:deaafdfde3bb 871 /*!
GregCr 0:deaafdfde3bb 872 * \brief Sets the Rx duty cycle management parameters
GregCr 0:deaafdfde3bb 873 *
GregCr 0:deaafdfde3bb 874 * \param [in] rxTime Structure describing reception timeout value
GregCr 0:deaafdfde3bb 875 * \param [in] sleepTime Structure describing sleep timeout value
GregCr 0:deaafdfde3bb 876 */
GregCr 0:deaafdfde3bb 877 void SetRxDutyCycle( uint32_t rxTime, uint32_t sleepTime );
GregCr 0:deaafdfde3bb 878
GregCr 0:deaafdfde3bb 879 /*!
GregCr 0:deaafdfde3bb 880 * \brief Sets the radio in CAD mode
GregCr 0:deaafdfde3bb 881 */
GregCr 0:deaafdfde3bb 882 void SetCad( void );
GregCr 0:deaafdfde3bb 883
GregCr 0:deaafdfde3bb 884 /*!
GregCr 0:deaafdfde3bb 885 * \brief Sets the radio in continuous wave transmission mode
GregCr 0:deaafdfde3bb 886 */
GregCr 0:deaafdfde3bb 887 void SetTxContinuousWave( void );
GregCr 0:deaafdfde3bb 888
GregCr 0:deaafdfde3bb 889 /*!
GregCr 0:deaafdfde3bb 890 * \brief Sets the radio in continuous preamble transmission mode
GregCr 0:deaafdfde3bb 891 */
GregCr 0:deaafdfde3bb 892 void SetTxContinuousPreamble( void );
GregCr 0:deaafdfde3bb 893
GregCr 0:deaafdfde3bb 894 /*!
GregCr 0:deaafdfde3bb 895 * \brief Sets the radio for the given protocol
GregCr 0:deaafdfde3bb 896 *
GregCr 0:deaafdfde3bb 897 * \param [in] packetType [PACKET_TYPE_GFSK, PACKET_TYPE_LORA,
GregCr 0:deaafdfde3bb 898 * PACKET_TYPE_RANGING, PACKET_TYPE_FLORA,
GregCr 0:deaafdfde3bb 899 * PACKET_TYPE_BLE]
GregCr 0:deaafdfde3bb 900 */
GregCr 0:deaafdfde3bb 901 void SetPacketType( RadioPacketType_t packetType );
GregCr 0:deaafdfde3bb 902
GregCr 0:deaafdfde3bb 903 /*!
GregCr 0:deaafdfde3bb 904 * \brief Gets the current radio protocol
GregCr 0:deaafdfde3bb 905 *
GregCr 0:deaafdfde3bb 906 * \retval packetType [PACKET_TYPE_GFSK, PACKET_TYPE_LORA,
GregCr 0:deaafdfde3bb 907 * PACKET_TYPE_RANGING, PACKET_TYPE_FLORA,
GregCr 0:deaafdfde3bb 908 * PACKET_TYPE_BLE, PACKET_TYPE_NONE]
GregCr 0:deaafdfde3bb 909 */
GregCr 0:deaafdfde3bb 910 RadioPacketType_t GetPacketType( void );
GregCr 0:deaafdfde3bb 911
GregCr 0:deaafdfde3bb 912 /*!
GregCr 0:deaafdfde3bb 913 * \brief Sets the RF frequency
GregCr 0:deaafdfde3bb 914 *
GregCr 0:deaafdfde3bb 915 * \param [in] frequency RF frequency [Hz]
GregCr 0:deaafdfde3bb 916 */
GregCr 0:deaafdfde3bb 917 void SetRfFrequency( uint32_t frequency );
GregCr 0:deaafdfde3bb 918
GregCr 0:deaafdfde3bb 919 /*!
GregCr 0:deaafdfde3bb 920 * \brief Sets the transmission parameters
GregCr 0:deaafdfde3bb 921 *
GregCr 0:deaafdfde3bb 922 * \param [in] power RF output power [-18..13] dBm
GregCr 0:deaafdfde3bb 923 * \param [in] rampTime Transmission ramp up time
GregCr 0:deaafdfde3bb 924 */
GregCr 0:deaafdfde3bb 925 void SetTxParams( int8_t power, RadioRampTimes_t rampTime );
GregCr 0:deaafdfde3bb 926
GregCr 0:deaafdfde3bb 927 /*!
GregCr 0:deaafdfde3bb 928 * \brief Sets the CAD parameters
GregCr 0:deaafdfde3bb 929 *
GregCr 0:deaafdfde3bb 930 * \param [in] cadSymbolNum The number of symbol to use for channel activity
GregCr 0:deaafdfde3bb 931 * detection operations [LORA_CAD_01_SYMBOL, LORA_CAD_02_SYMBOL,
GregCr 0:deaafdfde3bb 932 * LORA_CAD_04_SYMBOL, LORA_CAD_08_SYMBOL, LORA_CAD_16_SYMBOL]
GregCr 0:deaafdfde3bb 933 */
GregCr 0:deaafdfde3bb 934 void SetCadConfig( RadioLoRaCadSymbols_t cadSymbolNum , uint8_t cadExitMode, uint32_t cadRxTxTimeout);
GregCr 0:deaafdfde3bb 935
GregCr 0:deaafdfde3bb 936 /*!
GregCr 0:deaafdfde3bb 937 * \brief Sets the data buffer base address for transmission and reception
GregCr 0:deaafdfde3bb 938 *
GregCr 0:deaafdfde3bb 939 * \param [in] txBaseAddress Transmission base address
GregCr 0:deaafdfde3bb 940 * \param [in] rxBaseAddress Reception base address
GregCr 0:deaafdfde3bb 941 */
GregCr 0:deaafdfde3bb 942 void SetBufferBaseAddresses( uint8_t txBaseAddress, uint8_t rxBaseAddress );
GregCr 0:deaafdfde3bb 943
GregCr 0:deaafdfde3bb 944 /*!
GregCr 0:deaafdfde3bb 945 * \brief Set the modulation parameters
GregCr 0:deaafdfde3bb 946 *
GregCr 0:deaafdfde3bb 947 * \param [in] modParams A structure describing the modulation parameters
GregCr 0:deaafdfde3bb 948 */
GregCr 0:deaafdfde3bb 949 void SetModulationParams( ModulationParams_t *modParams );
GregCr 0:deaafdfde3bb 950
GregCr 0:deaafdfde3bb 951 /*!
GregCr 0:deaafdfde3bb 952 * \brief Sets the packet parameters
GregCr 0:deaafdfde3bb 953 *
GregCr 0:deaafdfde3bb 954 * \param [in] packetParams A structure describing the packet parameters
GregCr 0:deaafdfde3bb 955 */
GregCr 0:deaafdfde3bb 956 void SetPacketParams( PacketParams_t *packetParams );
GregCr 0:deaafdfde3bb 957
GregCr 0:deaafdfde3bb 958 /*!
GregCr 0:deaafdfde3bb 959 * \brief Gets the last received packet buffer status
GregCr 0:deaafdfde3bb 960 *
GregCr 0:deaafdfde3bb 961 * \param [out] payloadLength Last received packet payload length
GregCr 0:deaafdfde3bb 962 * \param [out] rxStartBuffer Last received packet buffer address pointer
GregCr 0:deaafdfde3bb 963 */
GregCr 0:deaafdfde3bb 964 void GetRxBufferStatus( uint8_t *payloadLength, uint8_t *rxStartBuffer );
GregCr 0:deaafdfde3bb 965
GregCr 0:deaafdfde3bb 966 /*!
GregCr 0:deaafdfde3bb 967 * \brief Gets the last received packet payload length
GregCr 0:deaafdfde3bb 968 *
GregCr 0:deaafdfde3bb 969 * \param [out] pktStatus A structure of packet status
GregCr 0:deaafdfde3bb 970 */
GregCr 0:deaafdfde3bb 971 void GetPacketStatus( PacketStatus_t *pktStatus );
GregCr 0:deaafdfde3bb 972
GregCr 0:deaafdfde3bb 973 /*!
GregCr 0:deaafdfde3bb 974 * \brief Returns value of internal Rx counters when GFSK packet type is used
GregCr 0:deaafdfde3bb 975 *
GregCr 0:deaafdfde3bb 976 * \param [out] rxCounter A structure holding Rx internal counters values
GregCr 0:deaafdfde3bb 977 *
GregCr 0:deaafdfde3bb 978 * \remark The Rx internal counters are only available for GFSK and LoRa packet types.
GregCr 0:deaafdfde3bb 979 */
GregCr 0:deaafdfde3bb 980 void GetStats( RxCounter_t *rxCounter );
GregCr 0:deaafdfde3bb 981
GregCr 0:deaafdfde3bb 982 void ResetStats();
GregCr 0:deaafdfde3bb 983
GregCr 0:deaafdfde3bb 984
GregCr 0:deaafdfde3bb 985 uint8_t GetError();
GregCr 0:deaafdfde3bb 986
GregCr 0:deaafdfde3bb 987 /*!
GregCr 0:deaafdfde3bb 988 * \brief Returns the instantaneous RSSI value for the last packet received
GregCr 0:deaafdfde3bb 989 *
GregCr 0:deaafdfde3bb 990 * \retval rssiInst Instantaneous RSSI
GregCr 0:deaafdfde3bb 991 */
GregCr 0:deaafdfde3bb 992 int8_t GetRssiInst( void );
GregCr 0:deaafdfde3bb 993
GregCr 0:deaafdfde3bb 994 /*!
GregCr 0:deaafdfde3bb 995 * \brief Sets the IRQ mask and DIO masks
GregCr 0:deaafdfde3bb 996 *
GregCr 0:deaafdfde3bb 997 * \param [in] irqMask General IRQ mask
GregCr 0:deaafdfde3bb 998 * \param [in] dio1Mask DIO1 mask
GregCr 0:deaafdfde3bb 999 * \param [in] dio2Mask DIO2 mask
GregCr 0:deaafdfde3bb 1000 * \param [in] dio3Mask DIO3 mask
GregCr 0:deaafdfde3bb 1001 */
GregCr 0:deaafdfde3bb 1002 void SetDioIrqParams( uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask, uint16_t dio3Mask );
GregCr 0:deaafdfde3bb 1003
GregCr 0:deaafdfde3bb 1004 /*!
GregCr 0:deaafdfde3bb 1005 * \brief Returns the current IRQ status
GregCr 0:deaafdfde3bb 1006 *
GregCr 0:deaafdfde3bb 1007 * \retval irqStatus IRQ status
GregCr 0:deaafdfde3bb 1008 */
GregCr 0:deaafdfde3bb 1009 uint16_t GetIrqStatus( void );
GregCr 0:deaafdfde3bb 1010
GregCr 0:deaafdfde3bb 1011 /*!
GregCr 0:deaafdfde3bb 1012 * \brief Clears the IRQs
GregCr 0:deaafdfde3bb 1013 *
GregCr 0:deaafdfde3bb 1014 * \param [in] irq IRQ(s) to be cleared
GregCr 0:deaafdfde3bb 1015 */
GregCr 0:deaafdfde3bb 1016 void ClearIrqStatus( uint16_t irq );
GregCr 0:deaafdfde3bb 1017
GregCr 0:deaafdfde3bb 1018 /*!
GregCr 0:deaafdfde3bb 1019 * \brief Calibrates the given radio block
GregCr 0:deaafdfde3bb 1020 *
GregCr 0:deaafdfde3bb 1021 * \param [in] calibParam The description of blocks to be calibrated
GregCr 0:deaafdfde3bb 1022 */
GregCr 0:deaafdfde3bb 1023 void Calibrate( CalibrationParams_t calibParam );
GregCr 0:deaafdfde3bb 1024
GregCr 0:deaafdfde3bb 1025 /*!
GregCr 0:deaafdfde3bb 1026 * \brief Sets the power regulators operating mode
GregCr 0:deaafdfde3bb 1027 *
GregCr 0:deaafdfde3bb 1028 * \param [in] mode [0: LDO, 1:DC_DC]
GregCr 0:deaafdfde3bb 1029 */
GregCr 0:deaafdfde3bb 1030 void SetRegulatorMode( uint8_t mode );
GregCr 0:deaafdfde3bb 1031
GregCr 0:deaafdfde3bb 1032
GregCr 0:deaafdfde3bb 1033 /*!
GregCr 0:deaafdfde3bb 1034 * \brief Sets the chip to automatically receive a packet after the end of a packet transmission
GregCr 0:deaafdfde3bb 1035 *
GregCr 0:deaafdfde3bb 1036 * \remark The offset is automatically compensated inside the function
GregCr 0:deaafdfde3bb 1037 *
GregCr 0:deaafdfde3bb 1038 * \param [in] time The delay in 15.625us after which a Rx or Tx is done
GregCr 0:deaafdfde3bb 1039 */
GregCr 0:deaafdfde3bb 1040 void SetAutoTxRx( uint32_t time, uint8_t intMode, uint32_t timeout );
GregCr 0:deaafdfde3bb 1041
GregCr 0:deaafdfde3bb 1042 /*!
GregCr 0:deaafdfde3bb 1043 * \brief Enables or disables long preamble detection mode
GregCr 0:deaafdfde3bb 1044 *
GregCr 0:deaafdfde3bb 1045 * \param [in] enable [0: Disable, 1: Enable]
GregCr 0:deaafdfde3bb 1046 */
GregCr 0:deaafdfde3bb 1047 void SetLongPreamble( uint8_t enable );
GregCr 0:deaafdfde3bb 1048
GregCr 0:deaafdfde3bb 1049 /*!
GregCr 0:deaafdfde3bb 1050 * \brief Saves the payload to be send in the radio buffer
GregCr 0:deaafdfde3bb 1051 *
GregCr 0:deaafdfde3bb 1052 * \param [in] payload A pointer to the payload
GregCr 0:deaafdfde3bb 1053 * \param [in] size The size of the payload
GregCr 0:deaafdfde3bb 1054 */
GregCr 0:deaafdfde3bb 1055 void SetPayload( uint8_t *payload, uint8_t size );
GregCr 0:deaafdfde3bb 1056
GregCr 0:deaafdfde3bb 1057 /*!
GregCr 0:deaafdfde3bb 1058 * \brief Reads the payload received. If the received payload is longer
GregCr 0:deaafdfde3bb 1059 * than maxSize, then the method returns 1 and do not set size and payload.
GregCr 0:deaafdfde3bb 1060 *
GregCr 0:deaafdfde3bb 1061 * \param [out] payload A pointer to a buffer into which the payload will be copied
GregCr 0:deaafdfde3bb 1062 * \param [out] size A pointer to the size of the payload received
GregCr 0:deaafdfde3bb 1063 * \param [in] maxSize The maximal size allowed to copy into the buffer
GregCr 0:deaafdfde3bb 1064 */
GregCr 0:deaafdfde3bb 1065 uint8_t GetPayload( uint8_t *buffer, uint8_t *size, uint8_t maxSize );
GregCr 0:deaafdfde3bb 1066
GregCr 0:deaafdfde3bb 1067 /*!
GregCr 0:deaafdfde3bb 1068 * \brief Sends a payload
GregCr 0:deaafdfde3bb 1069 *
GregCr 0:deaafdfde3bb 1070 * \param [in] payload A pointer to the payload to send
GregCr 0:deaafdfde3bb 1071 * \param [in] size The size of the payload to send
GregCr 0:deaafdfde3bb 1072 * \param [in] timeout The timeout for Tx operation
GregCr 0:deaafdfde3bb 1073 */
GregCr 0:deaafdfde3bb 1074 void SendPayload( uint8_t *payload, uint8_t size, uint32_t timeout );
GregCr 0:deaafdfde3bb 1075
GregCr 0:deaafdfde3bb 1076 /*!
GregCr 0:deaafdfde3bb 1077 * \brief Sets the Sync Word given by index used in GFSK
GregCr 0:deaafdfde3bb 1078 *
GregCr 0:deaafdfde3bb 1079 * \param [in] syncWord SyncWord bytes ( 8 bytes )
GregCr 0:deaafdfde3bb 1080 *
GregCr 0:deaafdfde3bb 1081 * \retval status [0: OK, 1: NOK]
GregCr 0:deaafdfde3bb 1082 */
GregCr 0:deaafdfde3bb 1083 uint8_t SetSyncWord( uint8_t *syncWord );
GregCr 0:deaafdfde3bb 1084
GregCr 0:deaafdfde3bb 1085 /*!
GregCr 0:deaafdfde3bb 1086 * \brief Sets the Initial value for the LFSR used for the CRC calculation
GregCr 0:deaafdfde3bb 1087 *
GregCr 0:deaafdfde3bb 1088 * \param [in] seed Initial LFSR value ( 4 bytes )
GregCr 0:deaafdfde3bb 1089 *
GregCr 0:deaafdfde3bb 1090 */
GregCr 0:deaafdfde3bb 1091 void SetCrcSeed( uint8_t *seed );
GregCr 0:deaafdfde3bb 1092
GregCr 0:deaafdfde3bb 1093 /*!
GregCr 0:deaafdfde3bb 1094 * \brief Sets the seed used for the CRC calculation
GregCr 0:deaafdfde3bb 1095 *
GregCr 0:deaafdfde3bb 1096 * \param [in] seed The seed value
GregCr 0:deaafdfde3bb 1097 *
GregCr 0:deaafdfde3bb 1098 */
GregCr 0:deaafdfde3bb 1099 void SetCrcPolynomial( uint8_t *seed );
GregCr 0:deaafdfde3bb 1100
GregCr 0:deaafdfde3bb 1101 /*!
GregCr 0:deaafdfde3bb 1102 * \brief Sets the Initial value of the LFSR used for the whitening in GFSK, FloRa and BLE protocols
GregCr 0:deaafdfde3bb 1103 *
GregCr 0:deaafdfde3bb 1104 * \param [in] seed Initial LFSR value
GregCr 0:deaafdfde3bb 1105 */
GregCr 0:deaafdfde3bb 1106 void SetWhiteningSeed( uint8_t seed );
GregCr 0:deaafdfde3bb 1107
GregCr 0:deaafdfde3bb 1108 /*!
GregCr 0:deaafdfde3bb 1109 * \brief Sets the number of bits used to check that ranging request match ranging ID
GregCr 0:deaafdfde3bb 1110 *
GregCr 0:deaafdfde3bb 1111 * \param [in] length [0: 8 bits, 1: 16 bits,
GregCr 0:deaafdfde3bb 1112 * 2: 24 bits, 3: 32 bits]
GregCr 0:deaafdfde3bb 1113 */
GregCr 0:deaafdfde3bb 1114 void SetRangingIdLength( RadioRangingIdCheckLen_t length );
GregCr 0:deaafdfde3bb 1115
GregCr 0:deaafdfde3bb 1116 /*!
GregCr 0:deaafdfde3bb 1117 * \brief Sets ranging device id
GregCr 0:deaafdfde3bb 1118 *
GregCr 0:deaafdfde3bb 1119 * \param [in] address Device address
GregCr 0:deaafdfde3bb 1120 */
GregCr 0:deaafdfde3bb 1121 void SetDeviceRangingAddress( uint32_t address );
GregCr 0:deaafdfde3bb 1122
GregCr 0:deaafdfde3bb 1123 /*!
GregCr 0:deaafdfde3bb 1124 * \brief Sets the device id to ping in a ranging request
GregCr 0:deaafdfde3bb 1125 *
GregCr 0:deaafdfde3bb 1126 * \param [in] address Address of the device to ping
GregCr 0:deaafdfde3bb 1127 */
GregCr 0:deaafdfde3bb 1128 void SetRangingRequestAddress( uint32_t address );
GregCr 0:deaafdfde3bb 1129
GregCr 0:deaafdfde3bb 1130 /*!
GregCr 0:deaafdfde3bb 1131 * \brief Return the ranging result value
GregCr 0:deaafdfde3bb 1132 *
GregCr 0:deaafdfde3bb 1133 * \param [in] resultType Specifies the type of result.
GregCr 0:deaafdfde3bb 1134 * [0: RAW, 1: Averaged,
GregCr 0:deaafdfde3bb 1135 * 2: De-biased, 3:Filtered]
GregCr 0:deaafdfde3bb 1136 *
GregCr 0:deaafdfde3bb 1137 * \retval ranging The ranging measure filtered according to resultType
GregCr 0:deaafdfde3bb 1138 */
GregCr 0:deaafdfde3bb 1139 int32_t GetRangingResult( RadioRangingResultType_t resultType );
GregCr 0:deaafdfde3bb 1140
GregCr 0:deaafdfde3bb 1141 /*!
GregCr 0:deaafdfde3bb 1142 * \brief Sets the standard processing delay between Master and Slave
GregCr 0:deaafdfde3bb 1143 *
GregCr 0:deaafdfde3bb 1144 * \param [in] cal RxTx delay offset for correcting ranging bias.
GregCr 0:deaafdfde3bb 1145 *
GregCr 0:deaafdfde3bb 1146 * The calibration value reflects the group delay of the radio front end and
GregCr 0:deaafdfde3bb 1147 * must be re-performed for each new SX1280 PCB design. The value is obtained
GregCr 0:deaafdfde3bb 1148 * empirically by either conducted measurement in a known electrical length
GregCr 0:deaafdfde3bb 1149 * coaxial RF cable (where the design is connectorised) or by radiated
GregCr 0:deaafdfde3bb 1150 * measurement, at a known distance, where an antenna is present.
GregCr 0:deaafdfde3bb 1151 * The result of the calibration process is that the SX1280 ranging result
GregCr 0:deaafdfde3bb 1152 * accurately reflects the physical range, the calibration procedure therefore
GregCr 0:deaafdfde3bb 1153 * removes the average timing error from the time-of-flight measurement for a
GregCr 0:deaafdfde3bb 1154 * given design.
GregCr 0:deaafdfde3bb 1155 *
GregCr 0:deaafdfde3bb 1156 * The values are Spreading Factor dependents, and depend also of the board
GregCr 0:deaafdfde3bb 1157 * design. Some typical values are provided in the next table.
GregCr 0:deaafdfde3bb 1158 *
GregCr 0:deaafdfde3bb 1159 * Spreading Factor | Calibration Value
GregCr 0:deaafdfde3bb 1160 * ---------------- | -----------------
GregCr 0:deaafdfde3bb 1161 * SF5 | 12200
GregCr 0:deaafdfde3bb 1162 * SF6 | 12200
GregCr 0:deaafdfde3bb 1163 * SF7 | 12400
GregCr 0:deaafdfde3bb 1164 * SF8 | 12650
GregCr 0:deaafdfde3bb 1165 * SF9 | 12940
GregCr 0:deaafdfde3bb 1166 * SF10 | 13000
GregCr 0:deaafdfde3bb 1167 * SF11 | 13060
GregCr 0:deaafdfde3bb 1168 * SF12 | 13120
GregCr 0:deaafdfde3bb 1169 */
GregCr 0:deaafdfde3bb 1170 void SetRangingCalibration( uint16_t cal );
GregCr 0:deaafdfde3bb 1171
GregCr 0:deaafdfde3bb 1172 /*!
GregCr 0:deaafdfde3bb 1173 * \brief DIOs interrupt callback
GregCr 0:deaafdfde3bb 1174 *
GregCr 0:deaafdfde3bb 1175 * \remark Called to handle all 3 DIOs pins
GregCr 0:deaafdfde3bb 1176 */
GregCr 0:deaafdfde3bb 1177 void OnDioIrq( void );
GregCr 0:deaafdfde3bb 1178
GregCr 0:deaafdfde3bb 1179 /*!
GregCr 0:deaafdfde3bb 1180 * \brief Clears the instruction RAM
GregCr 0:deaafdfde3bb 1181 */
GregCr 0:deaafdfde3bb 1182 virtual void ClearInstructionRam( void ) = 0;
GregCr 0:deaafdfde3bb 1183
GregCr 0:deaafdfde3bb 1184 /*!
GregCr 0:deaafdfde3bb 1185 * \brief Parses 1 HEX file line and writes the content to the instruction memory
GregCr 0:deaafdfde3bb 1186 *
GregCr 0:deaafdfde3bb 1187 * \param [in] line HEX file line string
GregCr 0:deaafdfde3bb 1188 *
GregCr 0:deaafdfde3bb 1189 * \retval status [0: ERROR, 1:OK]
GregCr 0:deaafdfde3bb 1190 */
GregCr 0:deaafdfde3bb 1191 int8_t ParseHexFileLine( char* line );
GregCr 0:deaafdfde3bb 1192
GregCr 0:deaafdfde3bb 1193 /*!
GregCr 0:deaafdfde3bb 1194 * \brief Gets individual fields for the given HEX file line
GregCr 0:deaafdfde3bb 1195 *
GregCr 0:deaafdfde3bb 1196 * \param [in] line HEX file line string
GregCr 0:deaafdfde3bb 1197 * \param [out] bytes Bytes array to be written to the instruction memory
GregCr 0:deaafdfde3bb 1198 * \param [out] addr Instruction memory address where to write the bytes array
GregCr 0:deaafdfde3bb 1199 * \param [out] num Number of bytes in Bytes array
GregCr 0:deaafdfde3bb 1200 * \param [out] code HEX file line type [0: instruction, 1: end of file, 2: begin of file]
GregCr 0:deaafdfde3bb 1201 *
GregCr 0:deaafdfde3bb 1202 * \retval status [0: ERROR, 1:OK]
GregCr 0:deaafdfde3bb 1203 */
GregCr 0:deaafdfde3bb 1204 int8_t GetHexFileLineFields( char* line, uint8_t *bytes, uint16_t *addr, uint16_t *num, uint8_t *code );
GregCr 0:deaafdfde3bb 1205 };
GregCr 0:deaafdfde3bb 1206
GregCr 0:deaafdfde3bb 1207 #endif // __SX1261_H__