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