local for mbed5

Committer:
GregCr
Date:
Wed Oct 12 08:49:58 2016 +0000
Revision:
3:7e3595a9ebe0
Parent:
2:4ff11ea92fbe
Child:
4:c6ef863d0b07
updated version with patch RAM

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