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