1*cb5466b0SMatthias Ringwald /* 2*cb5466b0SMatthias Ringwald ______ _ 3*cb5466b0SMatthias Ringwald / _____) _ | | 4*cb5466b0SMatthias Ringwald ( (____ _____ ____ _| |_ _____ ____| |__ 5*cb5466b0SMatthias Ringwald \____ \| ___ | (_ _) ___ |/ ___) _ \ 6*cb5466b0SMatthias Ringwald _____) ) ____| | | || |_| ____( (___| | | | 7*cb5466b0SMatthias Ringwald (______/|_____)_|_|_| \__)_____)\____)_| |_| 8*cb5466b0SMatthias Ringwald (C)2016 Semtech 9*cb5466b0SMatthias Ringwald 10*cb5466b0SMatthias Ringwald Description: Driver for SX1280 devices 11*cb5466b0SMatthias Ringwald 12*cb5466b0SMatthias Ringwald License: Revised BSD License, see LICENSE.TXT file include in the project 13*cb5466b0SMatthias Ringwald 14*cb5466b0SMatthias Ringwald Maintainer: Miguel Luis, Gregory Cristian and Matthieu Verdy 15*cb5466b0SMatthias Ringwald */ 16*cb5466b0SMatthias Ringwald #ifndef __SX1280_H__ 17*cb5466b0SMatthias Ringwald #define __SX1280_H__ 18*cb5466b0SMatthias Ringwald 19*cb5466b0SMatthias Ringwald #include <stdint.h> 20*cb5466b0SMatthias Ringwald #include <stdbool.h> 21*cb5466b0SMatthias Ringwald #include <math.h> 22*cb5466b0SMatthias Ringwald 23*cb5466b0SMatthias Ringwald /*! 24*cb5466b0SMatthias Ringwald * \brief Enables/disables driver debug features 25*cb5466b0SMatthias Ringwald */ 26*cb5466b0SMatthias Ringwald #define SX1280_DEBUG 0 27*cb5466b0SMatthias Ringwald 28*cb5466b0SMatthias Ringwald /*! 29*cb5466b0SMatthias Ringwald * \brief Hardware IO IRQ callback function definition 30*cb5466b0SMatthias Ringwald */ 31*cb5466b0SMatthias Ringwald typedef void ( DioIrqHandler )( void ); 32*cb5466b0SMatthias Ringwald 33*cb5466b0SMatthias Ringwald /*! 34*cb5466b0SMatthias Ringwald * \brief Provides the frequency of the chip running on the radio and the frequency step 35*cb5466b0SMatthias Ringwald * 36*cb5466b0SMatthias Ringwald * \remark These defines are used for computing the frequency divider to set the RF frequency 37*cb5466b0SMatthias Ringwald */ 38*cb5466b0SMatthias Ringwald #define XTAL_FREQ 52000000 39*cb5466b0SMatthias Ringwald #define FREQ_STEP ( ( double )( XTAL_FREQ / pow( 2.0, 18.0 ) ) ) 40*cb5466b0SMatthias Ringwald 41*cb5466b0SMatthias Ringwald /*! 42*cb5466b0SMatthias Ringwald * \brief Compensation delay for SetAutoTx/Rx functions in microseconds 43*cb5466b0SMatthias Ringwald */ 44*cb5466b0SMatthias Ringwald #define AUTO_RX_TX_OFFSET 33 45*cb5466b0SMatthias Ringwald 46*cb5466b0SMatthias Ringwald /*! 47*cb5466b0SMatthias Ringwald * \brief The address of the register holding the firmware version MSB 48*cb5466b0SMatthias Ringwald */ 49*cb5466b0SMatthias Ringwald #define REG_LR_FIRMWARE_VERSION_MSB 0x0153 50*cb5466b0SMatthias Ringwald 51*cb5466b0SMatthias Ringwald /*! 52*cb5466b0SMatthias Ringwald * \brief The address of the register holding the first byte defining the CRC seed 53*cb5466b0SMatthias Ringwald * 54*cb5466b0SMatthias Ringwald * \remark Only used for packet types GFSK and Flrc 55*cb5466b0SMatthias Ringwald */ 56*cb5466b0SMatthias Ringwald #define REG_LR_CRCSEEDBASEADDR 0x09C8 57*cb5466b0SMatthias Ringwald 58*cb5466b0SMatthias Ringwald /*! 59*cb5466b0SMatthias Ringwald * \brief The address of the register holding the first byte defining the CRC polynomial 60*cb5466b0SMatthias Ringwald * 61*cb5466b0SMatthias Ringwald * \remark Only used for packet types GFSK and Flrc 62*cb5466b0SMatthias Ringwald */ 63*cb5466b0SMatthias Ringwald #define REG_LR_CRCPOLYBASEADDR 0x09C6 64*cb5466b0SMatthias Ringwald 65*cb5466b0SMatthias Ringwald /*! 66*cb5466b0SMatthias Ringwald * \brief The address of the register holding the first byte defining the whitening seed 67*cb5466b0SMatthias Ringwald * 68*cb5466b0SMatthias Ringwald * \remark Only used for packet types GFSK, FLRC and BLE 69*cb5466b0SMatthias Ringwald */ 70*cb5466b0SMatthias Ringwald #define REG_LR_WHITSEEDBASEADDR 0x09C5 71*cb5466b0SMatthias Ringwald 72*cb5466b0SMatthias Ringwald /*! 73*cb5466b0SMatthias Ringwald * \brief The address of the register holding the ranging id check length 74*cb5466b0SMatthias Ringwald * 75*cb5466b0SMatthias Ringwald * \remark Only used for packet type Ranging 76*cb5466b0SMatthias Ringwald */ 77*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGIDCHECKLENGTH 0x0931 78*cb5466b0SMatthias Ringwald 79*cb5466b0SMatthias Ringwald /*! 80*cb5466b0SMatthias Ringwald * \brief The address of the register holding the device ranging id 81*cb5466b0SMatthias Ringwald * 82*cb5466b0SMatthias Ringwald * \remark Only used for packet type Ranging 83*cb5466b0SMatthias Ringwald */ 84*cb5466b0SMatthias Ringwald #define REG_LR_DEVICERANGINGADDR 0x0916 85*cb5466b0SMatthias Ringwald 86*cb5466b0SMatthias Ringwald /*! 87*cb5466b0SMatthias Ringwald * \brief The address of the register holding the device ranging id 88*cb5466b0SMatthias Ringwald * 89*cb5466b0SMatthias Ringwald * \remark Only used for packet type Ranging 90*cb5466b0SMatthias Ringwald */ 91*cb5466b0SMatthias Ringwald #define REG_LR_REQUESTRANGINGADDR 0x0912 92*cb5466b0SMatthias Ringwald 93*cb5466b0SMatthias Ringwald /*! 94*cb5466b0SMatthias Ringwald * \brief The address of the register holding ranging results configuration 95*cb5466b0SMatthias Ringwald * and the corresponding mask 96*cb5466b0SMatthias Ringwald * 97*cb5466b0SMatthias Ringwald * \remark Only used for packet type Ranging 98*cb5466b0SMatthias Ringwald */ 99*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGRESULTCONFIG 0x0924 100*cb5466b0SMatthias Ringwald #define MASK_RANGINGMUXSEL 0xCF 101*cb5466b0SMatthias Ringwald 102*cb5466b0SMatthias Ringwald /*! 103*cb5466b0SMatthias Ringwald * \brief The address of the register holding the first byte of ranging results 104*cb5466b0SMatthias Ringwald * Only used for packet type Ranging 105*cb5466b0SMatthias Ringwald */ 106*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGRESULTBASEADDR 0x0961 107*cb5466b0SMatthias Ringwald 108*cb5466b0SMatthias Ringwald /*! 109*cb5466b0SMatthias Ringwald * \brief The address of the register allowing to read ranging results 110*cb5466b0SMatthias Ringwald * 111*cb5466b0SMatthias Ringwald * \remark Only used for packet type Ranging 112*cb5466b0SMatthias Ringwald */ 113*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGRESULTSFREEZE 0x097F 114*cb5466b0SMatthias Ringwald 115*cb5466b0SMatthias Ringwald /*! 116*cb5466b0SMatthias Ringwald * \brief The address of the register holding the first byte of ranging calibration 117*cb5466b0SMatthias Ringwald * 118*cb5466b0SMatthias Ringwald * \remark Only used for packet type Ranging 119*cb5466b0SMatthias Ringwald */ 120*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGRERXTXDELAYCAL 0x092C 121*cb5466b0SMatthias Ringwald 122*cb5466b0SMatthias Ringwald /*! 123*cb5466b0SMatthias Ringwald *\brief The address of the register holding the ranging filter window size 124*cb5466b0SMatthias Ringwald * 125*cb5466b0SMatthias Ringwald * \remark Only used for packet type Ranging 126*cb5466b0SMatthias Ringwald */ 127*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGFILTERWINDOWSIZE 0x091E 128*cb5466b0SMatthias Ringwald 129*cb5466b0SMatthias Ringwald /*! 130*cb5466b0SMatthias Ringwald *\brief The address of the register to reset for clearing ranging filter 131*cb5466b0SMatthias Ringwald * 132*cb5466b0SMatthias Ringwald * \remark Only used for packet type Ranging 133*cb5466b0SMatthias Ringwald */ 134*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGRESULTCLEARREG 0x0923 135*cb5466b0SMatthias Ringwald 136*cb5466b0SMatthias Ringwald #define REG_RANGING_RSSI 0x0964 137*cb5466b0SMatthias Ringwald 138*cb5466b0SMatthias Ringwald /*! 139*cb5466b0SMatthias Ringwald * \brief The default number of samples considered in built-in ranging filter 140*cb5466b0SMatthias Ringwald */ 141*cb5466b0SMatthias Ringwald #define DEFAULT_RANGING_FILTER_SIZE 127 142*cb5466b0SMatthias Ringwald 143*cb5466b0SMatthias Ringwald /*! 144*cb5466b0SMatthias Ringwald * \brief The address of the register holding LORA packet parameters 145*cb5466b0SMatthias Ringwald */ 146*cb5466b0SMatthias Ringwald #define REG_LR_PACKETPARAMS 0x903 147*cb5466b0SMatthias Ringwald 148*cb5466b0SMatthias Ringwald /*! 149*cb5466b0SMatthias Ringwald * \brief The address of the register holding payload length 150*cb5466b0SMatthias Ringwald * 151*cb5466b0SMatthias Ringwald * \remark Do NOT try to read it directly. Use GetRxBuffer( ) instead. 152*cb5466b0SMatthias Ringwald */ 153*cb5466b0SMatthias Ringwald #define REG_LR_PAYLOADLENGTH 0x901 154*cb5466b0SMatthias Ringwald 155*cb5466b0SMatthias Ringwald /*! 156*cb5466b0SMatthias Ringwald * \brief The address of the instruction RAM and its size 157*cb5466b0SMatthias Ringwald */ 158*cb5466b0SMatthias Ringwald #define IRAM_START_ADDRESS 0x8000 159*cb5466b0SMatthias Ringwald #define IRAM_SIZE 0x4000 160*cb5466b0SMatthias Ringwald 161*cb5466b0SMatthias Ringwald /*! 162*cb5466b0SMatthias Ringwald * \brief The addresses of the registers holding SyncWords values 163*cb5466b0SMatthias Ringwald * 164*cb5466b0SMatthias Ringwald * \remark The addresses depends on the Packet Type in use, and not all 165*cb5466b0SMatthias Ringwald * SyncWords are available for every Packet Type 166*cb5466b0SMatthias Ringwald */ 167*cb5466b0SMatthias Ringwald #define REG_LR_SYNCWORDBASEADDRESS1 0x09CE 168*cb5466b0SMatthias Ringwald #define REG_LR_SYNCWORDBASEADDRESS2 0x09D3 169*cb5466b0SMatthias Ringwald #define REG_LR_SYNCWORDBASEADDRESS3 0x09D8 170*cb5466b0SMatthias Ringwald 171*cb5466b0SMatthias Ringwald /*! 172*cb5466b0SMatthias Ringwald * \brief The MSB address and mask used to read the estimated frequency 173*cb5466b0SMatthias Ringwald * error 174*cb5466b0SMatthias Ringwald */ 175*cb5466b0SMatthias Ringwald #define REG_LR_ESTIMATED_FREQUENCY_ERROR_MSB 0x0954 176*cb5466b0SMatthias Ringwald #define REG_LR_ESTIMATED_FREQUENCY_ERROR_MASK 0x0FFFFF 177*cb5466b0SMatthias Ringwald 178*cb5466b0SMatthias Ringwald /*! 179*cb5466b0SMatthias Ringwald * \brief Defines how many bit errors are tolerated in sync word detection 180*cb5466b0SMatthias Ringwald */ 181*cb5466b0SMatthias Ringwald #define REG_LR_SYNCWORDTOLERANCE 0x09CD 182*cb5466b0SMatthias Ringwald 183*cb5466b0SMatthias Ringwald /*! 184*cb5466b0SMatthias Ringwald * \brief Register for MSB Access Address (BLE) 185*cb5466b0SMatthias Ringwald */ 186*cb5466b0SMatthias Ringwald #define REG_LR_BLE_ACCESS_ADDRESS 0x09CF 187*cb5466b0SMatthias Ringwald #define BLE_ADVERTIZER_ACCESS_ADDRESS 0x8E89BED6 188*cb5466b0SMatthias Ringwald 189*cb5466b0SMatthias Ringwald /*! 190*cb5466b0SMatthias Ringwald * \brief Register address and mask for LNA regime selection 191*cb5466b0SMatthias Ringwald */ 192*cb5466b0SMatthias Ringwald #define REG_LNA_REGIME 0x0891 193*cb5466b0SMatthias Ringwald #define MASK_LNA_REGIME 0xC0 194*cb5466b0SMatthias Ringwald 195*cb5466b0SMatthias Ringwald /*! 196*cb5466b0SMatthias Ringwald * \brief Register and mask enabling manual gain control 197*cb5466b0SMatthias Ringwald */ 198*cb5466b0SMatthias Ringwald #define REG_ENABLE_MANUAL_GAIN_CONTROL 0x089F 199*cb5466b0SMatthias Ringwald #define MASK_MANUAL_GAIN_CONTROL 0x80 200*cb5466b0SMatthias Ringwald 201*cb5466b0SMatthias Ringwald /*! 202*cb5466b0SMatthias Ringwald * \brief Register and mask controlling demodulation detection 203*cb5466b0SMatthias Ringwald */ 204*cb5466b0SMatthias Ringwald #define REG_DEMOD_DETECTION 0x0895 205*cb5466b0SMatthias Ringwald #define MASK_DEMOD_DETECTION 0xFE 206*cb5466b0SMatthias Ringwald 207*cb5466b0SMatthias Ringwald /*! 208*cb5466b0SMatthias Ringwald * \brief Register and mask setting manual gain value 209*cb5466b0SMatthias Ringwald */ 210*cb5466b0SMatthias Ringwald #define REG_MANUAL_GAIN_VALUE 0x089E 211*cb5466b0SMatthias Ringwald #define MASK_MANUAL_GAIN_VALUE 0xF0 212*cb5466b0SMatthias Ringwald 213*cb5466b0SMatthias Ringwald /*! 214*cb5466b0SMatthias Ringwald * \brief Selector values to configure LNA regime 215*cb5466b0SMatthias Ringwald */ 216*cb5466b0SMatthias Ringwald typedef enum{ 217*cb5466b0SMatthias Ringwald LNA_LOW_POWER_MODE, //!< Allow maximum efficiency of sx1280 (default) 218*cb5466b0SMatthias Ringwald LNA_HIGH_SENSITIVITY_MODE, //!< Allow to use highest three steps of LNA gain and increase current consumption 219*cb5466b0SMatthias Ringwald }RadioLnaSettings_t; 220*cb5466b0SMatthias Ringwald 221*cb5466b0SMatthias Ringwald /*! 222*cb5466b0SMatthias Ringwald * \brief Structure describing the radio status 223*cb5466b0SMatthias Ringwald */ 224*cb5466b0SMatthias Ringwald typedef union 225*cb5466b0SMatthias Ringwald { 226*cb5466b0SMatthias Ringwald /*! 227*cb5466b0SMatthias Ringwald * \brief Structure of the radio status 228*cb5466b0SMatthias Ringwald */ 229*cb5466b0SMatthias Ringwald struct 230*cb5466b0SMatthias Ringwald { 231*cb5466b0SMatthias Ringwald uint8_t CpuBusy : 1; //!< Flag for CPU radio busy 232*cb5466b0SMatthias Ringwald uint8_t DmaBusy : 1; //!< Flag for DMA busy 233*cb5466b0SMatthias Ringwald uint8_t CmdStatus : 3; //!< Command status 234*cb5466b0SMatthias Ringwald uint8_t ChipMode : 3; //!< Chip mode 235*cb5466b0SMatthias Ringwald }Fields; 236*cb5466b0SMatthias Ringwald 237*cb5466b0SMatthias Ringwald /*! 238*cb5466b0SMatthias Ringwald * \brief Serialized radio status 239*cb5466b0SMatthias Ringwald */ 240*cb5466b0SMatthias Ringwald uint8_t Value; 241*cb5466b0SMatthias Ringwald }RadioStatus_t; 242*cb5466b0SMatthias Ringwald 243*cb5466b0SMatthias Ringwald /*! 244*cb5466b0SMatthias Ringwald * \brief Represents the states of the radio 245*cb5466b0SMatthias Ringwald */ 246*cb5466b0SMatthias Ringwald typedef enum 247*cb5466b0SMatthias Ringwald { 248*cb5466b0SMatthias Ringwald RF_IDLE = 0x00, //!< The radio is idle 249*cb5466b0SMatthias Ringwald RF_RX_RUNNING, //!< The radio is in reception state 250*cb5466b0SMatthias Ringwald RF_TX_RUNNING, //!< The radio is in transmission state 251*cb5466b0SMatthias Ringwald RF_CAD, //!< The radio is doing channel activity detection 252*cb5466b0SMatthias Ringwald }RadioStates_t; 253*cb5466b0SMatthias Ringwald 254*cb5466b0SMatthias Ringwald /*! 255*cb5466b0SMatthias Ringwald * \brief Represents the operating mode the radio is actually running 256*cb5466b0SMatthias Ringwald */ 257*cb5466b0SMatthias Ringwald typedef enum 258*cb5466b0SMatthias Ringwald { 259*cb5466b0SMatthias Ringwald MODE_SLEEP = 0x00, //! The radio is in sleep mode 260*cb5466b0SMatthias Ringwald MODE_STDBY_RC, //! The radio is in standby mode with RC oscillator 261*cb5466b0SMatthias Ringwald MODE_STDBY_XOSC, //! The radio is in standby mode with XOSC oscillator 262*cb5466b0SMatthias Ringwald MODE_FS, //! The radio is in frequency synthesis mode 263*cb5466b0SMatthias Ringwald MODE_TX, //! The radio is in transmit mode 264*cb5466b0SMatthias Ringwald MODE_RX, //! The radio is in receive mode 265*cb5466b0SMatthias Ringwald MODE_CAD //! The radio is in channel activity detection mode 266*cb5466b0SMatthias Ringwald }RadioOperatingModes_t; 267*cb5466b0SMatthias Ringwald 268*cb5466b0SMatthias Ringwald /*! 269*cb5466b0SMatthias Ringwald * \brief Declares the oscillator in use while in standby mode 270*cb5466b0SMatthias Ringwald * 271*cb5466b0SMatthias Ringwald * Using the STDBY_RC standby mode allow to reduce the energy consumption 272*cb5466b0SMatthias Ringwald * STDBY_XOSC should be used for time critical applications 273*cb5466b0SMatthias Ringwald */ 274*cb5466b0SMatthias Ringwald typedef enum 275*cb5466b0SMatthias Ringwald { 276*cb5466b0SMatthias Ringwald STDBY_RC = 0x00, 277*cb5466b0SMatthias Ringwald STDBY_XOSC = 0x01, 278*cb5466b0SMatthias Ringwald }RadioStandbyModes_t; 279*cb5466b0SMatthias Ringwald 280*cb5466b0SMatthias Ringwald /*! 281*cb5466b0SMatthias Ringwald * \brief Declares the power regulation used to power the device 282*cb5466b0SMatthias Ringwald * 283*cb5466b0SMatthias Ringwald * This command allows the user to specify if DC-DC or LDO is used for power regulation. 284*cb5466b0SMatthias Ringwald * Using only LDO implies that the Rx or Tx current is doubled 285*cb5466b0SMatthias Ringwald */ 286*cb5466b0SMatthias Ringwald typedef enum 287*cb5466b0SMatthias Ringwald { 288*cb5466b0SMatthias Ringwald USE_LDO = 0x00, //! Use LDO (default value) 289*cb5466b0SMatthias Ringwald USE_DCDC = 0x01, //! Use DCDC 290*cb5466b0SMatthias Ringwald }RadioRegulatorModes_t; 291*cb5466b0SMatthias Ringwald 292*cb5466b0SMatthias Ringwald /*! 293*cb5466b0SMatthias Ringwald * \brief Represents the possible packet type (i.e. modem) used 294*cb5466b0SMatthias Ringwald */ 295*cb5466b0SMatthias Ringwald typedef enum 296*cb5466b0SMatthias Ringwald { 297*cb5466b0SMatthias Ringwald PACKET_TYPE_GFSK = 0x00, 298*cb5466b0SMatthias Ringwald PACKET_TYPE_LORA, 299*cb5466b0SMatthias Ringwald PACKET_TYPE_RANGING, 300*cb5466b0SMatthias Ringwald PACKET_TYPE_FLRC, 301*cb5466b0SMatthias Ringwald PACKET_TYPE_BLE, 302*cb5466b0SMatthias Ringwald PACKET_TYPE_NONE = 0x0F, 303*cb5466b0SMatthias Ringwald }RadioPacketTypes_t; 304*cb5466b0SMatthias Ringwald 305*cb5466b0SMatthias Ringwald /*! 306*cb5466b0SMatthias Ringwald * \brief Represents the ramping time for power amplifier 307*cb5466b0SMatthias Ringwald */ 308*cb5466b0SMatthias Ringwald typedef enum 309*cb5466b0SMatthias Ringwald { 310*cb5466b0SMatthias Ringwald RADIO_RAMP_02_US = 0x00, 311*cb5466b0SMatthias Ringwald RADIO_RAMP_04_US = 0x20, 312*cb5466b0SMatthias Ringwald RADIO_RAMP_06_US = 0x40, 313*cb5466b0SMatthias Ringwald RADIO_RAMP_08_US = 0x60, 314*cb5466b0SMatthias Ringwald RADIO_RAMP_10_US = 0x80, 315*cb5466b0SMatthias Ringwald RADIO_RAMP_12_US = 0xA0, 316*cb5466b0SMatthias Ringwald RADIO_RAMP_16_US = 0xC0, 317*cb5466b0SMatthias Ringwald RADIO_RAMP_20_US = 0xE0, 318*cb5466b0SMatthias Ringwald }RadioRampTimes_t; 319*cb5466b0SMatthias Ringwald 320*cb5466b0SMatthias Ringwald /*! 321*cb5466b0SMatthias Ringwald * \brief Represents the number of symbols to be used for channel activity detection operation 322*cb5466b0SMatthias Ringwald */ 323*cb5466b0SMatthias Ringwald typedef enum 324*cb5466b0SMatthias Ringwald { 325*cb5466b0SMatthias Ringwald LORA_CAD_01_SYMBOL = 0x00, 326*cb5466b0SMatthias Ringwald LORA_CAD_02_SYMBOL = 0x20, 327*cb5466b0SMatthias Ringwald LORA_CAD_04_SYMBOL = 0x40, 328*cb5466b0SMatthias Ringwald LORA_CAD_08_SYMBOL = 0x60, 329*cb5466b0SMatthias Ringwald LORA_CAD_16_SYMBOL = 0x80, 330*cb5466b0SMatthias Ringwald }RadioLoRaCadSymbols_t; 331*cb5466b0SMatthias Ringwald 332*cb5466b0SMatthias Ringwald /*! 333*cb5466b0SMatthias Ringwald * \brief Represents the possible combinations of bitrate and bandwidth for 334*cb5466b0SMatthias Ringwald * GFSK and BLE packet types 335*cb5466b0SMatthias Ringwald * 336*cb5466b0SMatthias Ringwald * The bitrate is expressed in Mb/s and the bandwidth in MHz 337*cb5466b0SMatthias Ringwald */ 338*cb5466b0SMatthias Ringwald typedef enum 339*cb5466b0SMatthias Ringwald { 340*cb5466b0SMatthias Ringwald GFSK_BLE_BR_2_000_BW_2_4 = 0x04, 341*cb5466b0SMatthias Ringwald GFSK_BLE_BR_1_600_BW_2_4 = 0x28, 342*cb5466b0SMatthias Ringwald GFSK_BLE_BR_1_000_BW_2_4 = 0x4C, 343*cb5466b0SMatthias Ringwald GFSK_BLE_BR_1_000_BW_1_2 = 0x45, 344*cb5466b0SMatthias Ringwald GFSK_BLE_BR_0_800_BW_2_4 = 0x70, 345*cb5466b0SMatthias Ringwald GFSK_BLE_BR_0_800_BW_1_2 = 0x69, 346*cb5466b0SMatthias Ringwald GFSK_BLE_BR_0_500_BW_1_2 = 0x8D, 347*cb5466b0SMatthias Ringwald GFSK_BLE_BR_0_500_BW_0_6 = 0x86, 348*cb5466b0SMatthias Ringwald GFSK_BLE_BR_0_400_BW_1_2 = 0xB1, 349*cb5466b0SMatthias Ringwald GFSK_BLE_BR_0_400_BW_0_6 = 0xAA, 350*cb5466b0SMatthias Ringwald GFSK_BLE_BR_0_250_BW_0_6 = 0xCE, 351*cb5466b0SMatthias Ringwald GFSK_BLE_BR_0_250_BW_0_3 = 0xC7, 352*cb5466b0SMatthias Ringwald GFSK_BLE_BR_0_125_BW_0_3 = 0xEF, 353*cb5466b0SMatthias Ringwald }RadioGfskBleBitrates_t; 354*cb5466b0SMatthias Ringwald 355*cb5466b0SMatthias Ringwald /*! 356*cb5466b0SMatthias Ringwald * \brief Represents the modulation index used in GFSK and BLE packet 357*cb5466b0SMatthias Ringwald * types 358*cb5466b0SMatthias Ringwald */ 359*cb5466b0SMatthias Ringwald typedef enum 360*cb5466b0SMatthias Ringwald { 361*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_0_35 = 0, 362*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_0_50 = 1, 363*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_0_75 = 2, 364*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_1_00 = 3, 365*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_1_25 = 4, 366*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_1_50 = 5, 367*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_1_75 = 6, 368*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_2_00 = 7, 369*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_2_25 = 8, 370*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_2_50 = 9, 371*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_2_75 = 10, 372*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_3_00 = 11, 373*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_3_25 = 12, 374*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_3_50 = 13, 375*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_3_75 = 14, 376*cb5466b0SMatthias Ringwald GFSK_BLE_MOD_IND_4_00 = 15, 377*cb5466b0SMatthias Ringwald }RadioGfskBleModIndexes_t; 378*cb5466b0SMatthias Ringwald 379*cb5466b0SMatthias Ringwald /*! 380*cb5466b0SMatthias Ringwald * \brief Represents the possible combination of bitrate and bandwidth for FLRC 381*cb5466b0SMatthias Ringwald * packet type 382*cb5466b0SMatthias Ringwald * 383*cb5466b0SMatthias Ringwald * The bitrate is in Mb/s and the bitrate in MHz 384*cb5466b0SMatthias Ringwald */ 385*cb5466b0SMatthias Ringwald typedef enum 386*cb5466b0SMatthias Ringwald { 387*cb5466b0SMatthias Ringwald FLRC_BR_2_600_BW_2_4 = 0x04, 388*cb5466b0SMatthias Ringwald FLRC_BR_2_080_BW_2_4 = 0x28, 389*cb5466b0SMatthias Ringwald FLRC_BR_1_300_BW_1_2 = 0x45, 390*cb5466b0SMatthias Ringwald FLRC_BR_1_040_BW_1_2 = 0x69, 391*cb5466b0SMatthias Ringwald FLRC_BR_0_650_BW_0_6 = 0x86, 392*cb5466b0SMatthias Ringwald FLRC_BR_0_520_BW_0_6 = 0xAA, 393*cb5466b0SMatthias Ringwald FLRC_BR_0_325_BW_0_3 = 0xC7, 394*cb5466b0SMatthias Ringwald FLRC_BR_0_260_BW_0_3 = 0xEB, 395*cb5466b0SMatthias Ringwald }RadioFlrcBitrates_t; 396*cb5466b0SMatthias Ringwald 397*cb5466b0SMatthias Ringwald /*! 398*cb5466b0SMatthias Ringwald * \brief Represents the possible values for coding rate parameter in FLRC 399*cb5466b0SMatthias Ringwald * packet type 400*cb5466b0SMatthias Ringwald */ 401*cb5466b0SMatthias Ringwald typedef enum 402*cb5466b0SMatthias Ringwald { 403*cb5466b0SMatthias Ringwald FLRC_CR_1_2 = 0x00, 404*cb5466b0SMatthias Ringwald FLRC_CR_3_4 = 0x02, 405*cb5466b0SMatthias Ringwald FLRC_CR_1_0 = 0x04, 406*cb5466b0SMatthias Ringwald }RadioFlrcCodingRates_t; 407*cb5466b0SMatthias Ringwald 408*cb5466b0SMatthias Ringwald /*! 409*cb5466b0SMatthias Ringwald * \brief Represents the modulation shaping parameter for GFSK, FLRC and BLE 410*cb5466b0SMatthias Ringwald * packet types 411*cb5466b0SMatthias Ringwald */ 412*cb5466b0SMatthias Ringwald typedef enum 413*cb5466b0SMatthias Ringwald { 414*cb5466b0SMatthias Ringwald RADIO_MOD_SHAPING_BT_OFF = 0x00, //! No filtering 415*cb5466b0SMatthias Ringwald RADIO_MOD_SHAPING_BT_1_0 = 0x10, 416*cb5466b0SMatthias Ringwald RADIO_MOD_SHAPING_BT_0_5 = 0x20, 417*cb5466b0SMatthias Ringwald }RadioModShapings_t; 418*cb5466b0SMatthias Ringwald 419*cb5466b0SMatthias Ringwald /*! 420*cb5466b0SMatthias Ringwald * \brief Represents the possible spreading factor values in LORA packet types 421*cb5466b0SMatthias Ringwald */ 422*cb5466b0SMatthias Ringwald typedef enum 423*cb5466b0SMatthias Ringwald { 424*cb5466b0SMatthias Ringwald LORA_SF5 = 0x50, 425*cb5466b0SMatthias Ringwald LORA_SF6 = 0x60, 426*cb5466b0SMatthias Ringwald LORA_SF7 = 0x70, 427*cb5466b0SMatthias Ringwald LORA_SF8 = 0x80, 428*cb5466b0SMatthias Ringwald LORA_SF9 = 0x90, 429*cb5466b0SMatthias Ringwald LORA_SF10 = 0xA0, 430*cb5466b0SMatthias Ringwald LORA_SF11 = 0xB0, 431*cb5466b0SMatthias Ringwald LORA_SF12 = 0xC0, 432*cb5466b0SMatthias Ringwald }RadioLoRaSpreadingFactors_t; 433*cb5466b0SMatthias Ringwald 434*cb5466b0SMatthias Ringwald /*! 435*cb5466b0SMatthias Ringwald * \brief Represents the bandwidth values for LORA packet type 436*cb5466b0SMatthias Ringwald */ 437*cb5466b0SMatthias Ringwald typedef enum 438*cb5466b0SMatthias Ringwald { 439*cb5466b0SMatthias Ringwald LORA_BW_0200 = 0x34, 440*cb5466b0SMatthias Ringwald LORA_BW_0400 = 0x26, 441*cb5466b0SMatthias Ringwald LORA_BW_0800 = 0x18, 442*cb5466b0SMatthias Ringwald LORA_BW_1600 = 0x0A, 443*cb5466b0SMatthias Ringwald }RadioLoRaBandwidths_t; 444*cb5466b0SMatthias Ringwald 445*cb5466b0SMatthias Ringwald /*! 446*cb5466b0SMatthias Ringwald * \brief Represents the coding rate values for LORA packet type 447*cb5466b0SMatthias Ringwald */ 448*cb5466b0SMatthias Ringwald typedef enum 449*cb5466b0SMatthias Ringwald { 450*cb5466b0SMatthias Ringwald LORA_CR_4_5 = 0x01, 451*cb5466b0SMatthias Ringwald LORA_CR_4_6 = 0x02, 452*cb5466b0SMatthias Ringwald LORA_CR_4_7 = 0x03, 453*cb5466b0SMatthias Ringwald LORA_CR_4_8 = 0x04, 454*cb5466b0SMatthias Ringwald LORA_CR_LI_4_5 = 0x05, 455*cb5466b0SMatthias Ringwald LORA_CR_LI_4_6 = 0x06, 456*cb5466b0SMatthias Ringwald LORA_CR_LI_4_7 = 0x07, 457*cb5466b0SMatthias Ringwald }RadioLoRaCodingRates_t; 458*cb5466b0SMatthias Ringwald 459*cb5466b0SMatthias Ringwald /*! 460*cb5466b0SMatthias Ringwald * \brief Represents the preamble length values for GFSK and FLRC packet 461*cb5466b0SMatthias Ringwald * types 462*cb5466b0SMatthias Ringwald */ 463*cb5466b0SMatthias Ringwald typedef enum 464*cb5466b0SMatthias Ringwald { 465*cb5466b0SMatthias Ringwald PREAMBLE_LENGTH_04_BITS = 0x00, //!< Preamble length: 04 bits 466*cb5466b0SMatthias Ringwald PREAMBLE_LENGTH_08_BITS = 0x10, //!< Preamble length: 08 bits 467*cb5466b0SMatthias Ringwald PREAMBLE_LENGTH_12_BITS = 0x20, //!< Preamble length: 12 bits 468*cb5466b0SMatthias Ringwald PREAMBLE_LENGTH_16_BITS = 0x30, //!< Preamble length: 16 bits 469*cb5466b0SMatthias Ringwald PREAMBLE_LENGTH_20_BITS = 0x40, //!< Preamble length: 20 bits 470*cb5466b0SMatthias Ringwald PREAMBLE_LENGTH_24_BITS = 0x50, //!< Preamble length: 24 bits 471*cb5466b0SMatthias Ringwald PREAMBLE_LENGTH_28_BITS = 0x60, //!< Preamble length: 28 bits 472*cb5466b0SMatthias Ringwald PREAMBLE_LENGTH_32_BITS = 0x70, //!< Preamble length: 32 bits 473*cb5466b0SMatthias Ringwald }RadioPreambleLengths_t; 474*cb5466b0SMatthias Ringwald 475*cb5466b0SMatthias Ringwald /*! 476*cb5466b0SMatthias Ringwald * \brief Represents the SyncWord length for FLRC packet type 477*cb5466b0SMatthias Ringwald */ 478*cb5466b0SMatthias Ringwald typedef enum 479*cb5466b0SMatthias Ringwald { 480*cb5466b0SMatthias Ringwald FLRC_NO_SYNCWORD = 0x00, 481*cb5466b0SMatthias Ringwald FLRC_SYNCWORD_LENGTH_4_BYTE = 0x04, 482*cb5466b0SMatthias Ringwald }RadioFlrcSyncWordLengths_t; 483*cb5466b0SMatthias Ringwald 484*cb5466b0SMatthias Ringwald /*! 485*cb5466b0SMatthias Ringwald * \brief The length of sync words for GFSK packet type 486*cb5466b0SMatthias Ringwald */ 487*cb5466b0SMatthias Ringwald typedef enum 488*cb5466b0SMatthias Ringwald { 489*cb5466b0SMatthias Ringwald GFSK_SYNCWORD_LENGTH_1_BYTE = 0x00, //!< Sync word length: 1 byte 490*cb5466b0SMatthias Ringwald GFSK_SYNCWORD_LENGTH_2_BYTE = 0x02, //!< Sync word length: 2 bytes 491*cb5466b0SMatthias Ringwald GFSK_SYNCWORD_LENGTH_3_BYTE = 0x04, //!< Sync word length: 3 bytes 492*cb5466b0SMatthias Ringwald GFSK_SYNCWORD_LENGTH_4_BYTE = 0x06, //!< Sync word length: 4 bytes 493*cb5466b0SMatthias Ringwald GFSK_SYNCWORD_LENGTH_5_BYTE = 0x08, //!< Sync word length: 5 bytes 494*cb5466b0SMatthias Ringwald }RadioSyncWordLengths_t; 495*cb5466b0SMatthias Ringwald 496*cb5466b0SMatthias Ringwald /*! 497*cb5466b0SMatthias Ringwald * \brief Represents the possible combinations of SyncWord correlators 498*cb5466b0SMatthias Ringwald * activated for GFSK and FLRC packet types 499*cb5466b0SMatthias Ringwald */ 500*cb5466b0SMatthias Ringwald typedef enum 501*cb5466b0SMatthias Ringwald { 502*cb5466b0SMatthias Ringwald RADIO_RX_MATCH_SYNCWORD_OFF = 0x00, //!< No correlator turned on, i.e. do not search for SyncWord 503*cb5466b0SMatthias Ringwald RADIO_RX_MATCH_SYNCWORD_1 = 0x10, 504*cb5466b0SMatthias Ringwald RADIO_RX_MATCH_SYNCWORD_2 = 0x20, 505*cb5466b0SMatthias Ringwald RADIO_RX_MATCH_SYNCWORD_1_2 = 0x30, 506*cb5466b0SMatthias Ringwald RADIO_RX_MATCH_SYNCWORD_3 = 0x40, 507*cb5466b0SMatthias Ringwald RADIO_RX_MATCH_SYNCWORD_1_3 = 0x50, 508*cb5466b0SMatthias Ringwald RADIO_RX_MATCH_SYNCWORD_2_3 = 0x60, 509*cb5466b0SMatthias Ringwald RADIO_RX_MATCH_SYNCWORD_1_2_3 = 0x70, 510*cb5466b0SMatthias Ringwald }RadioSyncWordRxMatchs_t; 511*cb5466b0SMatthias Ringwald 512*cb5466b0SMatthias Ringwald /*! 513*cb5466b0SMatthias Ringwald * \brief Radio packet length mode for GFSK and FLRC packet types 514*cb5466b0SMatthias Ringwald */ 515*cb5466b0SMatthias Ringwald typedef enum 516*cb5466b0SMatthias Ringwald { 517*cb5466b0SMatthias Ringwald RADIO_PACKET_FIXED_LENGTH = 0x00, //!< The packet is known on both sides, no header included in the packet 518*cb5466b0SMatthias Ringwald RADIO_PACKET_VARIABLE_LENGTH = 0x20, //!< The packet is on variable size, header included 519*cb5466b0SMatthias Ringwald }RadioPacketLengthModes_t; 520*cb5466b0SMatthias Ringwald 521*cb5466b0SMatthias Ringwald /*! 522*cb5466b0SMatthias Ringwald * \brief Represents the CRC length for GFSK and FLRC packet types 523*cb5466b0SMatthias Ringwald * 524*cb5466b0SMatthias Ringwald * \warning Not all configurations are available for both GFSK and FLRC 525*cb5466b0SMatthias Ringwald * packet type. Refer to the datasheet for possible configuration. 526*cb5466b0SMatthias Ringwald */ 527*cb5466b0SMatthias Ringwald typedef enum 528*cb5466b0SMatthias Ringwald { 529*cb5466b0SMatthias Ringwald RADIO_CRC_OFF = 0x00, //!< No CRC in use 530*cb5466b0SMatthias Ringwald RADIO_CRC_1_BYTES = 0x10, 531*cb5466b0SMatthias Ringwald RADIO_CRC_2_BYTES = 0x20, 532*cb5466b0SMatthias Ringwald RADIO_CRC_3_BYTES = 0x30, 533*cb5466b0SMatthias Ringwald }RadioCrcTypes_t; 534*cb5466b0SMatthias Ringwald 535*cb5466b0SMatthias Ringwald /*! 536*cb5466b0SMatthias Ringwald * \brief Radio whitening mode activated or deactivated for GFSK, FLRC and 537*cb5466b0SMatthias Ringwald * BLE packet types 538*cb5466b0SMatthias Ringwald */ 539*cb5466b0SMatthias Ringwald typedef enum 540*cb5466b0SMatthias Ringwald { 541*cb5466b0SMatthias Ringwald RADIO_WHITENING_ON = 0x00, 542*cb5466b0SMatthias Ringwald RADIO_WHITENING_OFF = 0x08, 543*cb5466b0SMatthias Ringwald }RadioWhiteningModes_t; 544*cb5466b0SMatthias Ringwald 545*cb5466b0SMatthias Ringwald /*! 546*cb5466b0SMatthias Ringwald * \brief Holds the packet length mode of a LORA packet type 547*cb5466b0SMatthias Ringwald */ 548*cb5466b0SMatthias Ringwald typedef enum 549*cb5466b0SMatthias Ringwald { 550*cb5466b0SMatthias Ringwald LORA_PACKET_VARIABLE_LENGTH = 0x00, //!< The packet is on variable size, header included 551*cb5466b0SMatthias Ringwald LORA_PACKET_FIXED_LENGTH = 0x80, //!< The packet is known on both sides, no header included in the packet 552*cb5466b0SMatthias Ringwald LORA_PACKET_EXPLICIT = LORA_PACKET_VARIABLE_LENGTH, 553*cb5466b0SMatthias Ringwald LORA_PACKET_IMPLICIT = LORA_PACKET_FIXED_LENGTH, 554*cb5466b0SMatthias Ringwald }RadioLoRaPacketLengthsModes_t; 555*cb5466b0SMatthias Ringwald 556*cb5466b0SMatthias Ringwald /*! 557*cb5466b0SMatthias Ringwald * \brief Represents the CRC mode for LORA packet type 558*cb5466b0SMatthias Ringwald */ 559*cb5466b0SMatthias Ringwald typedef enum 560*cb5466b0SMatthias Ringwald { 561*cb5466b0SMatthias Ringwald LORA_CRC_ON = 0x20, //!< CRC activated 562*cb5466b0SMatthias Ringwald LORA_CRC_OFF = 0x00, //!< CRC not used 563*cb5466b0SMatthias Ringwald }RadioLoRaCrcModes_t; 564*cb5466b0SMatthias Ringwald 565*cb5466b0SMatthias Ringwald /*! 566*cb5466b0SMatthias Ringwald * \brief Represents the IQ mode for LORA packet type 567*cb5466b0SMatthias Ringwald */ 568*cb5466b0SMatthias Ringwald typedef enum 569*cb5466b0SMatthias Ringwald { 570*cb5466b0SMatthias Ringwald LORA_IQ_NORMAL = 0x40, 571*cb5466b0SMatthias Ringwald LORA_IQ_INVERTED = 0x00, 572*cb5466b0SMatthias Ringwald }RadioLoRaIQModes_t; 573*cb5466b0SMatthias Ringwald 574*cb5466b0SMatthias Ringwald /*! 575*cb5466b0SMatthias Ringwald * \brief Represents the length of the ID to check in ranging operation 576*cb5466b0SMatthias Ringwald */ 577*cb5466b0SMatthias Ringwald typedef enum 578*cb5466b0SMatthias Ringwald { 579*cb5466b0SMatthias Ringwald RANGING_IDCHECK_LENGTH_08_BITS = 0x00, 580*cb5466b0SMatthias Ringwald RANGING_IDCHECK_LENGTH_16_BITS, 581*cb5466b0SMatthias Ringwald RANGING_IDCHECK_LENGTH_24_BITS, 582*cb5466b0SMatthias Ringwald RANGING_IDCHECK_LENGTH_32_BITS, 583*cb5466b0SMatthias Ringwald }RadioRangingIdCheckLengths_t; 584*cb5466b0SMatthias Ringwald 585*cb5466b0SMatthias Ringwald /*! 586*cb5466b0SMatthias Ringwald * \brief Represents the result type to be used in ranging operation 587*cb5466b0SMatthias Ringwald */ 588*cb5466b0SMatthias Ringwald typedef enum 589*cb5466b0SMatthias Ringwald { 590*cb5466b0SMatthias Ringwald RANGING_RESULT_RAW = 0x00, 591*cb5466b0SMatthias Ringwald RANGING_RESULT_AVERAGED = 0x01, 592*cb5466b0SMatthias Ringwald RANGING_RESULT_DEBIASED = 0x02, 593*cb5466b0SMatthias Ringwald RANGING_RESULT_FILTERED = 0x03, 594*cb5466b0SMatthias Ringwald }RadioRangingResultTypes_t; 595*cb5466b0SMatthias Ringwald 596*cb5466b0SMatthias Ringwald /*! 597*cb5466b0SMatthias Ringwald * \brief Represents the connection state for BLE packet type 598*cb5466b0SMatthias Ringwald */ 599*cb5466b0SMatthias Ringwald typedef enum 600*cb5466b0SMatthias Ringwald { 601*cb5466b0SMatthias Ringwald BLE_PAYLOAD_LENGTH_MAX_31_BYTES = 0x00, 602*cb5466b0SMatthias Ringwald BLE_PAYLOAD_LENGTH_MAX_37_BYTES = 0x20, 603*cb5466b0SMatthias Ringwald BLE_TX_TEST_MODE = 0x40, 604*cb5466b0SMatthias Ringwald BLE_PAYLOAD_LENGTH_MAX_255_BYTES = 0x80, 605*cb5466b0SMatthias Ringwald }RadioBleConnectionStates_t; 606*cb5466b0SMatthias Ringwald 607*cb5466b0SMatthias Ringwald /*! 608*cb5466b0SMatthias Ringwald * \brief Represents the CRC field length for BLE packet type 609*cb5466b0SMatthias Ringwald */ 610*cb5466b0SMatthias Ringwald typedef enum 611*cb5466b0SMatthias Ringwald { 612*cb5466b0SMatthias Ringwald BLE_CRC_OFF = 0x00, 613*cb5466b0SMatthias Ringwald BLE_CRC_3B = 0x10, 614*cb5466b0SMatthias Ringwald }RadioBleCrcFields_t; 615*cb5466b0SMatthias Ringwald 616*cb5466b0SMatthias Ringwald /*! 617*cb5466b0SMatthias Ringwald * \brief Represents the specific packets to use in BLE packet type 618*cb5466b0SMatthias Ringwald */ 619*cb5466b0SMatthias Ringwald typedef enum 620*cb5466b0SMatthias Ringwald { 621*cb5466b0SMatthias Ringwald BLE_PRBS_9 = 0x00, //!< Pseudo Random Binary Sequence based on 9th degree polynomial 622*cb5466b0SMatthias Ringwald BLE_PRBS_15 = 0x0C, //!< Pseudo Random Binary Sequence based on 15th degree polynomial 623*cb5466b0SMatthias Ringwald BLE_EYELONG_1_0 = 0x04, //!< Repeated '11110000' sequence 624*cb5466b0SMatthias Ringwald BLE_EYELONG_0_1 = 0x18, //!< Repeated '00001111' sequence 625*cb5466b0SMatthias Ringwald BLE_EYESHORT_1_0 = 0x08, //!< Repeated '10101010' sequence 626*cb5466b0SMatthias Ringwald BLE_EYESHORT_0_1 = 0x1C, //!< Repeated '01010101' sequence 627*cb5466b0SMatthias Ringwald BLE_ALL_1 = 0x10, //!< Repeated '11111111' sequence 628*cb5466b0SMatthias Ringwald BLE_ALL_0 = 0x14, //!< Repeated '00000000' sequence 629*cb5466b0SMatthias Ringwald }RadioBlePacketTypes_t; 630*cb5466b0SMatthias Ringwald 631*cb5466b0SMatthias Ringwald /*! 632*cb5466b0SMatthias Ringwald * \brief Represents the interruption masks available for the radio 633*cb5466b0SMatthias Ringwald * 634*cb5466b0SMatthias Ringwald * \remark Note that not all these interruptions are available for all packet types 635*cb5466b0SMatthias Ringwald */ 636*cb5466b0SMatthias Ringwald typedef enum 637*cb5466b0SMatthias Ringwald { 638*cb5466b0SMatthias Ringwald IRQ_RADIO_NONE = 0x0000, 639*cb5466b0SMatthias Ringwald IRQ_TX_DONE = 0x0001, 640*cb5466b0SMatthias Ringwald IRQ_RX_DONE = 0x0002, 641*cb5466b0SMatthias Ringwald IRQ_SYNCWORD_VALID = 0x0004, 642*cb5466b0SMatthias Ringwald IRQ_SYNCWORD_ERROR = 0x0008, 643*cb5466b0SMatthias Ringwald IRQ_HEADER_VALID = 0x0010, 644*cb5466b0SMatthias Ringwald IRQ_HEADER_ERROR = 0x0020, 645*cb5466b0SMatthias Ringwald IRQ_CRC_ERROR = 0x0040, 646*cb5466b0SMatthias Ringwald IRQ_RANGING_SLAVE_RESPONSE_DONE = 0x0080, 647*cb5466b0SMatthias Ringwald IRQ_RANGING_SLAVE_REQUEST_DISCARDED = 0x0100, 648*cb5466b0SMatthias Ringwald IRQ_RANGING_MASTER_RESULT_VALID = 0x0200, 649*cb5466b0SMatthias Ringwald IRQ_RANGING_MASTER_RESULT_TIMEOUT = 0x0400, 650*cb5466b0SMatthias Ringwald IRQ_RANGING_SLAVE_REQUEST_VALID = 0x0800, 651*cb5466b0SMatthias Ringwald IRQ_CAD_DONE = 0x1000, 652*cb5466b0SMatthias Ringwald IRQ_CAD_ACTIVITY_DETECTED = 0x2000, 653*cb5466b0SMatthias Ringwald IRQ_RX_TX_TIMEOUT = 0x4000, 654*cb5466b0SMatthias Ringwald IRQ_PREAMBLE_DETECTED = 0x8000, 655*cb5466b0SMatthias Ringwald IRQ_RADIO_ALL = 0xFFFF, 656*cb5466b0SMatthias Ringwald }RadioIrqMasks_t; 657*cb5466b0SMatthias Ringwald 658*cb5466b0SMatthias Ringwald /*! 659*cb5466b0SMatthias Ringwald * \brief Represents the digital input/output of the radio 660*cb5466b0SMatthias Ringwald */ 661*cb5466b0SMatthias Ringwald typedef enum 662*cb5466b0SMatthias Ringwald { 663*cb5466b0SMatthias Ringwald RADIO_DIO1 = 0x02, 664*cb5466b0SMatthias Ringwald RADIO_DIO2 = 0x04, 665*cb5466b0SMatthias Ringwald RADIO_DIO3 = 0x08, 666*cb5466b0SMatthias Ringwald }RadioDios_t; 667*cb5466b0SMatthias Ringwald 668*cb5466b0SMatthias Ringwald /*! 669*cb5466b0SMatthias Ringwald * \brief Represents the tick size available for Rx/Tx timeout operations 670*cb5466b0SMatthias Ringwald */ 671*cb5466b0SMatthias Ringwald typedef enum 672*cb5466b0SMatthias Ringwald { 673*cb5466b0SMatthias Ringwald RADIO_TICK_SIZE_0015_US = 0x00, 674*cb5466b0SMatthias Ringwald RADIO_TICK_SIZE_0062_US = 0x01, 675*cb5466b0SMatthias Ringwald RADIO_TICK_SIZE_1000_US = 0x02, 676*cb5466b0SMatthias Ringwald RADIO_TICK_SIZE_4000_US = 0x03, 677*cb5466b0SMatthias Ringwald }RadioTickSizes_t; 678*cb5466b0SMatthias Ringwald 679*cb5466b0SMatthias Ringwald /*! 680*cb5466b0SMatthias Ringwald * \brief Represents the role of the radio during ranging operations 681*cb5466b0SMatthias Ringwald */ 682*cb5466b0SMatthias Ringwald typedef enum 683*cb5466b0SMatthias Ringwald { 684*cb5466b0SMatthias Ringwald RADIO_RANGING_ROLE_SLAVE = 0x00, 685*cb5466b0SMatthias Ringwald RADIO_RANGING_ROLE_MASTER = 0x01, 686*cb5466b0SMatthias Ringwald }RadioRangingRoles_t; 687*cb5466b0SMatthias Ringwald 688*cb5466b0SMatthias Ringwald /*! 689*cb5466b0SMatthias Ringwald * \brief Represents all possible opcode understood by the radio 690*cb5466b0SMatthias Ringwald */ 691*cb5466b0SMatthias Ringwald typedef enum RadioCommands_u 692*cb5466b0SMatthias Ringwald { 693*cb5466b0SMatthias Ringwald RADIO_GET_STATUS = 0xC0, 694*cb5466b0SMatthias Ringwald RADIO_WRITE_REGISTER = 0x18, 695*cb5466b0SMatthias Ringwald RADIO_READ_REGISTER = 0x19, 696*cb5466b0SMatthias Ringwald RADIO_WRITE_BUFFER = 0x1A, 697*cb5466b0SMatthias Ringwald RADIO_READ_BUFFER = 0x1B, 698*cb5466b0SMatthias Ringwald RADIO_SET_SLEEP = 0x84, 699*cb5466b0SMatthias Ringwald RADIO_SET_STANDBY = 0x80, 700*cb5466b0SMatthias Ringwald RADIO_SET_FS = 0xC1, 701*cb5466b0SMatthias Ringwald RADIO_SET_TX = 0x83, 702*cb5466b0SMatthias Ringwald RADIO_SET_RX = 0x82, 703*cb5466b0SMatthias Ringwald RADIO_SET_RXDUTYCYCLE = 0x94, 704*cb5466b0SMatthias Ringwald RADIO_SET_CAD = 0xC5, 705*cb5466b0SMatthias Ringwald RADIO_SET_TXCONTINUOUSWAVE = 0xD1, 706*cb5466b0SMatthias Ringwald RADIO_SET_TXCONTINUOUSPREAMBLE = 0xD2, 707*cb5466b0SMatthias Ringwald RADIO_SET_PACKETTYPE = 0x8A, 708*cb5466b0SMatthias Ringwald RADIO_GET_PACKETTYPE = 0x03, 709*cb5466b0SMatthias Ringwald RADIO_SET_RFFREQUENCY = 0x86, 710*cb5466b0SMatthias Ringwald RADIO_SET_TXPARAMS = 0x8E, 711*cb5466b0SMatthias Ringwald RADIO_SET_CADPARAMS = 0x88, 712*cb5466b0SMatthias Ringwald RADIO_SET_BUFFERBASEADDRESS = 0x8F, 713*cb5466b0SMatthias Ringwald RADIO_SET_MODULATIONPARAMS = 0x8B, 714*cb5466b0SMatthias Ringwald RADIO_SET_PACKETPARAMS = 0x8C, 715*cb5466b0SMatthias Ringwald RADIO_GET_RXBUFFERSTATUS = 0x17, 716*cb5466b0SMatthias Ringwald RADIO_GET_PACKETSTATUS = 0x1D, 717*cb5466b0SMatthias Ringwald RADIO_GET_RSSIINST = 0x1F, 718*cb5466b0SMatthias Ringwald RADIO_SET_DIOIRQPARAMS = 0x8D, 719*cb5466b0SMatthias Ringwald RADIO_GET_IRQSTATUS = 0x15, 720*cb5466b0SMatthias Ringwald RADIO_CLR_IRQSTATUS = 0x97, 721*cb5466b0SMatthias Ringwald RADIO_CALIBRATE = 0x89, 722*cb5466b0SMatthias Ringwald RADIO_SET_REGULATORMODE = 0x96, 723*cb5466b0SMatthias Ringwald RADIO_SET_SAVECONTEXT = 0xD5, 724*cb5466b0SMatthias Ringwald RADIO_SET_AUTOTX = 0x98, 725*cb5466b0SMatthias Ringwald RADIO_SET_AUTOFS = 0x9E, 726*cb5466b0SMatthias Ringwald RADIO_SET_LONGPREAMBLE = 0x9B, 727*cb5466b0SMatthias Ringwald RADIO_SET_UARTSPEED = 0x9D, 728*cb5466b0SMatthias Ringwald RADIO_SET_RANGING_ROLE = 0xA3, 729*cb5466b0SMatthias Ringwald }RadioCommands_t; 730*cb5466b0SMatthias Ringwald 731*cb5466b0SMatthias Ringwald /*! 732*cb5466b0SMatthias Ringwald * \brief Represents an amount of time measurable by the radio clock 733*cb5466b0SMatthias Ringwald * 734*cb5466b0SMatthias Ringwald * @code 735*cb5466b0SMatthias Ringwald * Time = Step * NbSteps 736*cb5466b0SMatthias Ringwald * Example: 737*cb5466b0SMatthias Ringwald * Step = RADIO_TICK_SIZE_4000_US( 4 ms ) 738*cb5466b0SMatthias Ringwald * NbSteps = 1000 739*cb5466b0SMatthias Ringwald * Time = 4e-3 * 1000 = 4 seconds 740*cb5466b0SMatthias Ringwald * @endcode 741*cb5466b0SMatthias Ringwald */ 742*cb5466b0SMatthias Ringwald typedef struct TickTime_s 743*cb5466b0SMatthias Ringwald { 744*cb5466b0SMatthias Ringwald RadioTickSizes_t Step; //!< The step of ticktime 745*cb5466b0SMatthias Ringwald /*! 746*cb5466b0SMatthias Ringwald * \brief The number of steps for ticktime 747*cb5466b0SMatthias Ringwald * Special values are: 748*cb5466b0SMatthias Ringwald * - 0x0000 for single mode 749*cb5466b0SMatthias Ringwald * - 0xFFFF for continuous mode 750*cb5466b0SMatthias Ringwald */ 751*cb5466b0SMatthias Ringwald uint16_t NbSteps; 752*cb5466b0SMatthias Ringwald }TickTime_t; 753*cb5466b0SMatthias Ringwald 754*cb5466b0SMatthias Ringwald /*! 755*cb5466b0SMatthias Ringwald * \brief RX_TX_CONTINUOUS and RX_TX_SINGLE are two particular values for TickTime. 756*cb5466b0SMatthias Ringwald * The former keep the radio in Rx or Tx mode, even after successfull reception 757*cb5466b0SMatthias Ringwald * or transmission. It should never generate Timeout interrupt. 758*cb5466b0SMatthias Ringwald * The later let the radio enought time to make one reception or transmission. 759*cb5466b0SMatthias Ringwald * No Timeout interrupt is generated, and the radio fall in StandBy mode after 760*cb5466b0SMatthias Ringwald * reception or transmission. 761*cb5466b0SMatthias Ringwald */ 762*cb5466b0SMatthias Ringwald #define RX_TX_CONTINUOUS ( TickTime_t ){ RADIO_TICK_SIZE_0015_US, 0xFFFF } 763*cb5466b0SMatthias Ringwald #define RX_TX_SINGLE ( TickTime_t ){ RADIO_TICK_SIZE_0015_US, 0 } 764*cb5466b0SMatthias Ringwald 765*cb5466b0SMatthias Ringwald /*! 766*cb5466b0SMatthias Ringwald * \brief The type describing the modulation parameters for every packet types 767*cb5466b0SMatthias Ringwald */ 768*cb5466b0SMatthias Ringwald typedef struct 769*cb5466b0SMatthias Ringwald { 770*cb5466b0SMatthias Ringwald RadioPacketTypes_t PacketType; //!< Packet to which the modulation parameters are referring to. 771*cb5466b0SMatthias Ringwald // union 772*cb5466b0SMatthias Ringwald struct 773*cb5466b0SMatthias Ringwald { 774*cb5466b0SMatthias Ringwald /*! 775*cb5466b0SMatthias Ringwald * \brief Holds the GFSK modulation parameters 776*cb5466b0SMatthias Ringwald * 777*cb5466b0SMatthias Ringwald * In GFSK modulation, the bit-rate and bandwidth are linked together. In this structure, its values are set using the same token. 778*cb5466b0SMatthias Ringwald */ 779*cb5466b0SMatthias Ringwald struct 780*cb5466b0SMatthias Ringwald { 781*cb5466b0SMatthias Ringwald RadioGfskBleBitrates_t BitrateBandwidth; //!< The bandwidth and bit-rate values for BLE and GFSK modulations 782*cb5466b0SMatthias Ringwald RadioGfskBleModIndexes_t ModulationIndex; //!< The coding rate for BLE and GFSK modulations 783*cb5466b0SMatthias Ringwald RadioModShapings_t ModulationShaping; //!< The modulation shaping for BLE and GFSK modulations 784*cb5466b0SMatthias Ringwald }Gfsk; 785*cb5466b0SMatthias Ringwald /*! 786*cb5466b0SMatthias Ringwald * \brief Holds the LORA modulation parameters 787*cb5466b0SMatthias Ringwald * 788*cb5466b0SMatthias Ringwald * LORA modulation is defined by Spreading Factor (SF), Bandwidth and Coding Rate 789*cb5466b0SMatthias Ringwald */ 790*cb5466b0SMatthias Ringwald struct 791*cb5466b0SMatthias Ringwald { 792*cb5466b0SMatthias Ringwald RadioLoRaSpreadingFactors_t SpreadingFactor; //!< Spreading Factor for the LORA modulation 793*cb5466b0SMatthias Ringwald RadioLoRaBandwidths_t Bandwidth; //!< Bandwidth for the LORA modulation 794*cb5466b0SMatthias Ringwald RadioLoRaCodingRates_t CodingRate; //!< Coding rate for the LORA modulation 795*cb5466b0SMatthias Ringwald }LoRa; 796*cb5466b0SMatthias Ringwald /*! 797*cb5466b0SMatthias Ringwald * \brief Holds the FLRC modulation parameters 798*cb5466b0SMatthias Ringwald * 799*cb5466b0SMatthias Ringwald * In FLRC modulation, the bit-rate and bandwidth are linked together. In this structure, its values are set using the same token. 800*cb5466b0SMatthias Ringwald */ 801*cb5466b0SMatthias Ringwald struct 802*cb5466b0SMatthias Ringwald { 803*cb5466b0SMatthias Ringwald RadioFlrcBitrates_t BitrateBandwidth; //!< The bandwidth and bit-rate values for FLRC modulation 804*cb5466b0SMatthias Ringwald RadioFlrcCodingRates_t CodingRate; //!< The coding rate for FLRC modulation 805*cb5466b0SMatthias Ringwald RadioModShapings_t ModulationShaping; //!< The modulation shaping for FLRC modulation 806*cb5466b0SMatthias Ringwald }Flrc; 807*cb5466b0SMatthias Ringwald /*! 808*cb5466b0SMatthias Ringwald * \brief Holds the BLE modulation parameters 809*cb5466b0SMatthias Ringwald * 810*cb5466b0SMatthias Ringwald * In BLE modulation, the bit-rate and bandwidth are linked together. In this structure, its values are set using the same token. 811*cb5466b0SMatthias Ringwald */ 812*cb5466b0SMatthias Ringwald struct 813*cb5466b0SMatthias Ringwald { 814*cb5466b0SMatthias Ringwald RadioGfskBleBitrates_t BitrateBandwidth; //!< The bandwidth and bit-rate values for BLE and GFSK modulations 815*cb5466b0SMatthias Ringwald RadioGfskBleModIndexes_t ModulationIndex; //!< The coding rate for BLE and GFSK modulations 816*cb5466b0SMatthias Ringwald RadioModShapings_t ModulationShaping; //!< The modulation shaping for BLE and GFSK modulations 817*cb5466b0SMatthias Ringwald }Ble; 818*cb5466b0SMatthias Ringwald }Params; //!< Holds the modulation parameters structure 819*cb5466b0SMatthias Ringwald }ModulationParams_t; 820*cb5466b0SMatthias Ringwald 821*cb5466b0SMatthias Ringwald /*! 822*cb5466b0SMatthias Ringwald * \brief Structure describing the error codes for callback functions 823*cb5466b0SMatthias Ringwald */ 824*cb5466b0SMatthias Ringwald typedef enum 825*cb5466b0SMatthias Ringwald { 826*cb5466b0SMatthias Ringwald IRQ_HEADER_ERROR_CODE = 0x00, 827*cb5466b0SMatthias Ringwald IRQ_SYNCWORD_ERROR_CODE, 828*cb5466b0SMatthias Ringwald IRQ_CRC_ERROR_CODE, 829*cb5466b0SMatthias Ringwald IRQ_RANGING_ON_LORA_ERROR_CODE, 830*cb5466b0SMatthias Ringwald }IrqErrorCode_t; 831*cb5466b0SMatthias Ringwald 832*cb5466b0SMatthias Ringwald /*! 833*cb5466b0SMatthias Ringwald * \brief Structure describing the ranging codes for callback functions 834*cb5466b0SMatthias Ringwald */ 835*cb5466b0SMatthias Ringwald typedef enum 836*cb5466b0SMatthias Ringwald { 837*cb5466b0SMatthias Ringwald IRQ_RANGING_SLAVE_ERROR_CODE = 0x00, 838*cb5466b0SMatthias Ringwald IRQ_RANGING_SLAVE_VALID_CODE, 839*cb5466b0SMatthias Ringwald IRQ_RANGING_MASTER_ERROR_CODE, 840*cb5466b0SMatthias Ringwald IRQ_RANGING_MASTER_VALID_CODE, 841*cb5466b0SMatthias Ringwald }IrqRangingCode_t; 842*cb5466b0SMatthias Ringwald 843*cb5466b0SMatthias Ringwald /*! 844*cb5466b0SMatthias Ringwald * \brief The radio callbacks structure 845*cb5466b0SMatthias Ringwald * Holds function pointers to be called on radio interrupts 846*cb5466b0SMatthias Ringwald */ 847*cb5466b0SMatthias Ringwald typedef struct 848*cb5466b0SMatthias Ringwald { 849*cb5466b0SMatthias Ringwald void ( *txDone )( void ); //!< Pointer to a function run on successful transmission 850*cb5466b0SMatthias Ringwald void ( *rxDone )( void ); //!< Pointer to a function run on successful reception 851*cb5466b0SMatthias Ringwald void ( *rxSyncWordDone )( void ); //!< Pointer to a function run on successful SyncWord reception 852*cb5466b0SMatthias Ringwald void ( *rxHeaderDone )( void ); //!< Pointer to a function run on successful Header reception 853*cb5466b0SMatthias Ringwald void ( *txTimeout )( void ); //!< Pointer to a function run on transmission timeout 854*cb5466b0SMatthias Ringwald void ( *rxTimeout )( void ); //!< Pointer to a function run on reception timeout 855*cb5466b0SMatthias Ringwald void ( *rxError )( IrqErrorCode_t errCode ); //!< Pointer to a function run on reception error 856*cb5466b0SMatthias Ringwald void ( *rangingDone )( IrqRangingCode_t val ); //!< Pointer to a function run on ranging terminated 857*cb5466b0SMatthias Ringwald void ( *cadDone )( bool cadFlag ); //!< Pointer to a function run on channel activity detected 858*cb5466b0SMatthias Ringwald }RadioCallbacks_t; 859*cb5466b0SMatthias Ringwald 860*cb5466b0SMatthias Ringwald /*! 861*cb5466b0SMatthias Ringwald * \brief The type describing the packet parameters for every packet types 862*cb5466b0SMatthias Ringwald */ 863*cb5466b0SMatthias Ringwald typedef struct 864*cb5466b0SMatthias Ringwald { 865*cb5466b0SMatthias Ringwald RadioPacketTypes_t PacketType; //!< Packet to which the packet parameters are referring to. 866*cb5466b0SMatthias Ringwald // union 867*cb5466b0SMatthias Ringwald struct 868*cb5466b0SMatthias Ringwald { 869*cb5466b0SMatthias Ringwald /*! 870*cb5466b0SMatthias Ringwald * \brief Holds the GFSK packet parameters 871*cb5466b0SMatthias Ringwald */ 872*cb5466b0SMatthias Ringwald struct 873*cb5466b0SMatthias Ringwald { 874*cb5466b0SMatthias Ringwald RadioPreambleLengths_t PreambleLength; //!< The preamble length for GFSK packet type 875*cb5466b0SMatthias Ringwald RadioSyncWordLengths_t SyncWordLength; //!< The synchronization word length for GFSK packet type 876*cb5466b0SMatthias Ringwald RadioSyncWordRxMatchs_t SyncWordMatch; //!< The synchronization correlator to use to check synchronization word 877*cb5466b0SMatthias Ringwald 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 878*cb5466b0SMatthias Ringwald uint8_t PayloadLength; //!< Size of the payload in the GFSK packet 879*cb5466b0SMatthias Ringwald RadioCrcTypes_t CrcLength; //!< Size of the CRC block in the GFSK packet 880*cb5466b0SMatthias Ringwald RadioWhiteningModes_t Whitening; //!< Usage of whitening on payload and CRC blocks plus header block if header type is variable 881*cb5466b0SMatthias Ringwald }Gfsk; 882*cb5466b0SMatthias Ringwald /*! 883*cb5466b0SMatthias Ringwald * \brief Holds the LORA packet parameters 884*cb5466b0SMatthias Ringwald */ 885*cb5466b0SMatthias Ringwald struct 886*cb5466b0SMatthias Ringwald { 887*cb5466b0SMatthias Ringwald 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 888*cb5466b0SMatthias Ringwald RadioLoRaPacketLengthsModes_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 889*cb5466b0SMatthias Ringwald uint8_t PayloadLength; //!< Size of the payload in the LORA packet 890*cb5466b0SMatthias Ringwald RadioLoRaCrcModes_t CrcMode; //!< Size of CRC block in LORA packet 891*cb5466b0SMatthias Ringwald RadioLoRaIQModes_t InvertIQ; //!< Allows to swap IQ for LORA packet 892*cb5466b0SMatthias Ringwald }LoRa; 893*cb5466b0SMatthias Ringwald /*! 894*cb5466b0SMatthias Ringwald * \brief Holds the FLRC packet parameters 895*cb5466b0SMatthias Ringwald */ 896*cb5466b0SMatthias Ringwald struct 897*cb5466b0SMatthias Ringwald { 898*cb5466b0SMatthias Ringwald RadioPreambleLengths_t PreambleLength; //!< The preamble length for FLRC packet type 899*cb5466b0SMatthias Ringwald RadioFlrcSyncWordLengths_t SyncWordLength; //!< The synchronization word length for FLRC packet type 900*cb5466b0SMatthias Ringwald RadioSyncWordRxMatchs_t SyncWordMatch; //!< The synchronization correlator to use to check synchronization word 901*cb5466b0SMatthias Ringwald RadioPacketLengthModes_t HeaderType; //!< If the header is explicit, it will be transmitted in the FLRC packet. If the header is implicit, it will not be transmitted. 902*cb5466b0SMatthias Ringwald uint8_t PayloadLength; //!< Size of the payload in the FLRC packet 903*cb5466b0SMatthias Ringwald RadioCrcTypes_t CrcLength; //!< Size of the CRC block in the FLRC packet 904*cb5466b0SMatthias Ringwald RadioWhiteningModes_t Whitening; //!< Usage of whitening on payload and CRC blocks plus header block if header type is variable 905*cb5466b0SMatthias Ringwald }Flrc; 906*cb5466b0SMatthias Ringwald /*! 907*cb5466b0SMatthias Ringwald * \brief Holds the BLE packet parameters 908*cb5466b0SMatthias Ringwald */ 909*cb5466b0SMatthias Ringwald struct 910*cb5466b0SMatthias Ringwald { 911*cb5466b0SMatthias Ringwald RadioBleConnectionStates_t ConnectionState; //!< The BLE state 912*cb5466b0SMatthias Ringwald RadioBleCrcFields_t CrcField; //!< Size of the CRC block in the BLE packet 913*cb5466b0SMatthias Ringwald RadioBlePacketTypes_t BlePacketType; //!< Special BLE packet types 914*cb5466b0SMatthias Ringwald RadioWhiteningModes_t Whitening; //!< Usage of whitening on PDU and CRC blocks of BLE packet 915*cb5466b0SMatthias Ringwald }Ble; 916*cb5466b0SMatthias Ringwald }Params; //!< Holds the packet parameters structure 917*cb5466b0SMatthias Ringwald }PacketParams_t; 918*cb5466b0SMatthias Ringwald 919*cb5466b0SMatthias Ringwald /*! 920*cb5466b0SMatthias Ringwald * \brief Represents the packet status for every packet type 921*cb5466b0SMatthias Ringwald */ 922*cb5466b0SMatthias Ringwald typedef struct 923*cb5466b0SMatthias Ringwald { 924*cb5466b0SMatthias Ringwald RadioPacketTypes_t packetType; //!< Packet to which the packet status are referring to. 925*cb5466b0SMatthias Ringwald union 926*cb5466b0SMatthias Ringwald { 927*cb5466b0SMatthias Ringwald struct 928*cb5466b0SMatthias Ringwald { 929*cb5466b0SMatthias Ringwald int8_t RssiAvg; //!< The averaged RSSI 930*cb5466b0SMatthias Ringwald int8_t RssiSync; //!< The RSSI measured on last packet 931*cb5466b0SMatthias Ringwald struct 932*cb5466b0SMatthias Ringwald { 933*cb5466b0SMatthias Ringwald bool SyncError :1; //!< SyncWord error on last packet 934*cb5466b0SMatthias Ringwald bool LengthError :1; //!< Length error on last packet 935*cb5466b0SMatthias Ringwald bool CrcError :1; //!< CRC error on last packet 936*cb5466b0SMatthias Ringwald bool AbortError :1; //!< Abort error on last packet 937*cb5466b0SMatthias Ringwald bool HeaderReceived :1; //!< Header received on last packet 938*cb5466b0SMatthias Ringwald bool PacketReceived :1; //!< Packet received 939*cb5466b0SMatthias Ringwald bool PacketControlerBusy :1; //!< Packet controller busy 940*cb5466b0SMatthias Ringwald }ErrorStatus; //!< The error status Byte 941*cb5466b0SMatthias Ringwald struct 942*cb5466b0SMatthias Ringwald { 943*cb5466b0SMatthias Ringwald bool RxNoAck :1; //!< No acknowledgment received for Rx with variable length packets 944*cb5466b0SMatthias Ringwald bool PacketSent :1; //!< Packet sent, only relevant in Tx mode 945*cb5466b0SMatthias Ringwald }TxRxStatus; //!< The Tx/Rx status Byte 946*cb5466b0SMatthias Ringwald uint8_t SyncAddrStatus :3; //!< The id of the correlator who found the packet 947*cb5466b0SMatthias Ringwald }Gfsk; 948*cb5466b0SMatthias Ringwald struct 949*cb5466b0SMatthias Ringwald { 950*cb5466b0SMatthias Ringwald int8_t RssiPkt; //!< The RSSI of the last packet 951*cb5466b0SMatthias Ringwald int8_t SnrPkt; //!< The SNR of the last packet 952*cb5466b0SMatthias Ringwald struct 953*cb5466b0SMatthias Ringwald { 954*cb5466b0SMatthias Ringwald bool SyncError :1; //!< SyncWord error on last packet 955*cb5466b0SMatthias Ringwald bool LengthError :1; //!< Length error on last packet 956*cb5466b0SMatthias Ringwald bool CrcError :1; //!< CRC error on last packet 957*cb5466b0SMatthias Ringwald bool AbortError :1; //!< Abort error on last packet 958*cb5466b0SMatthias Ringwald bool HeaderReceived :1; //!< Header received on last packet 959*cb5466b0SMatthias Ringwald bool PacketReceived :1; //!< Packet received 960*cb5466b0SMatthias Ringwald bool PacketControlerBusy :1; //!< Packet controller busy 961*cb5466b0SMatthias Ringwald }ErrorStatus; //!< The error status Byte 962*cb5466b0SMatthias Ringwald struct 963*cb5466b0SMatthias Ringwald { 964*cb5466b0SMatthias Ringwald bool RxNoAck :1; //!< No acknowledgment received for Rx with variable length packets 965*cb5466b0SMatthias Ringwald bool PacketSent :1; //!< Packet sent, only relevant in Tx mode 966*cb5466b0SMatthias Ringwald }TxRxStatus; //!< The Tx/Rx status Byte 967*cb5466b0SMatthias Ringwald uint8_t SyncAddrStatus :3; //!< The id of the correlator who found the packet 968*cb5466b0SMatthias Ringwald }LoRa; 969*cb5466b0SMatthias Ringwald struct 970*cb5466b0SMatthias Ringwald { 971*cb5466b0SMatthias Ringwald int8_t RssiAvg; //!< The averaged RSSI 972*cb5466b0SMatthias Ringwald int8_t RssiSync; //!< The RSSI of the last packet 973*cb5466b0SMatthias Ringwald struct 974*cb5466b0SMatthias Ringwald { 975*cb5466b0SMatthias Ringwald bool SyncError :1; //!< SyncWord error on last packet 976*cb5466b0SMatthias Ringwald bool LengthError :1; //!< Length error on last packet 977*cb5466b0SMatthias Ringwald bool CrcError :1; //!< CRC error on last packet 978*cb5466b0SMatthias Ringwald bool AbortError :1; //!< Abort error on last packet 979*cb5466b0SMatthias Ringwald bool HeaderReceived :1; //!< Header received on last packet 980*cb5466b0SMatthias Ringwald bool PacketReceived :1; //!< Packet received 981*cb5466b0SMatthias Ringwald bool PacketControlerBusy :1; //!< Packet controller busy 982*cb5466b0SMatthias Ringwald }ErrorStatus; //!< The error status Byte 983*cb5466b0SMatthias Ringwald struct 984*cb5466b0SMatthias Ringwald { 985*cb5466b0SMatthias Ringwald uint8_t RxPid :2; //!< PID of the Rx 986*cb5466b0SMatthias Ringwald bool RxNoAck :1; //!< No acknowledgment received for Rx with variable length packets 987*cb5466b0SMatthias Ringwald bool RxPidErr :1; //!< Received PID error 988*cb5466b0SMatthias Ringwald bool PacketSent :1; //!< Packet sent, only relevant in Tx mode 989*cb5466b0SMatthias Ringwald }TxRxStatus; //!< The Tx/Rx status Byte 990*cb5466b0SMatthias Ringwald uint8_t SyncAddrStatus :3; //!< The id of the correlator who found the packet 991*cb5466b0SMatthias Ringwald }Flrc; 992*cb5466b0SMatthias Ringwald struct 993*cb5466b0SMatthias Ringwald { 994*cb5466b0SMatthias Ringwald int8_t RssiAvg; //!< The averaged RSSI 995*cb5466b0SMatthias Ringwald int8_t RssiSync; //!< The RSSI of the last packet 996*cb5466b0SMatthias Ringwald struct 997*cb5466b0SMatthias Ringwald { 998*cb5466b0SMatthias Ringwald bool SyncError :1; //!< SyncWord error on last packet 999*cb5466b0SMatthias Ringwald bool LengthError :1; //!< Length error on last packet 1000*cb5466b0SMatthias Ringwald bool CrcError :1; //!< CRC error on last packet 1001*cb5466b0SMatthias Ringwald bool AbortError :1; //!< Abort error on last packet 1002*cb5466b0SMatthias Ringwald bool HeaderReceived :1; //!< Header received on last packet 1003*cb5466b0SMatthias Ringwald bool PacketReceived :1; //!< Packet received 1004*cb5466b0SMatthias Ringwald bool PacketControlerBusy :1; //!< Packet controller busy 1005*cb5466b0SMatthias Ringwald }ErrorStatus; //!< The error status Byte 1006*cb5466b0SMatthias Ringwald struct 1007*cb5466b0SMatthias Ringwald { 1008*cb5466b0SMatthias Ringwald bool PacketSent :1; //!< Packet sent, only relevant in Tx mode 1009*cb5466b0SMatthias Ringwald }TxRxStatus; //!< The Tx/Rx status Byte 1010*cb5466b0SMatthias Ringwald uint8_t SyncAddrStatus :3; //!< The id of the correlator who found the packet 1011*cb5466b0SMatthias Ringwald }Ble; 1012*cb5466b0SMatthias Ringwald }Params; 1013*cb5466b0SMatthias Ringwald }PacketStatus_t; 1014*cb5466b0SMatthias Ringwald 1015*cb5466b0SMatthias Ringwald /*! 1016*cb5466b0SMatthias Ringwald * \brief Represents the Rx internal counters values when GFSK or LORA packet type is used 1017*cb5466b0SMatthias Ringwald */ 1018*cb5466b0SMatthias Ringwald typedef struct 1019*cb5466b0SMatthias Ringwald { 1020*cb5466b0SMatthias Ringwald RadioPacketTypes_t packetType; //!< Packet to which the packet status are referring to. 1021*cb5466b0SMatthias Ringwald union 1022*cb5466b0SMatthias Ringwald { 1023*cb5466b0SMatthias Ringwald struct 1024*cb5466b0SMatthias Ringwald { 1025*cb5466b0SMatthias Ringwald uint16_t PacketReceived; //!< Number of received packets 1026*cb5466b0SMatthias Ringwald uint16_t CrcError; //!< Number of CRC errors 1027*cb5466b0SMatthias Ringwald uint16_t LengthError; //!< Number of length errors 1028*cb5466b0SMatthias Ringwald uint16_t SyncwordError; //!< Number of sync-word errors 1029*cb5466b0SMatthias Ringwald }Gfsk; 1030*cb5466b0SMatthias Ringwald struct 1031*cb5466b0SMatthias Ringwald { 1032*cb5466b0SMatthias Ringwald uint16_t PacketReceived; //!< Number of received packets 1033*cb5466b0SMatthias Ringwald uint16_t CrcError; //!< Number of CRC errors 1034*cb5466b0SMatthias Ringwald uint16_t HeaderValid; //!< Number of valid headers 1035*cb5466b0SMatthias Ringwald }LoRa; 1036*cb5466b0SMatthias Ringwald }Params; 1037*cb5466b0SMatthias Ringwald }RxCounter_t; 1038*cb5466b0SMatthias Ringwald 1039*cb5466b0SMatthias Ringwald /*! 1040*cb5466b0SMatthias Ringwald * \brief Represents a calibration configuration 1041*cb5466b0SMatthias Ringwald */ 1042*cb5466b0SMatthias Ringwald typedef struct 1043*cb5466b0SMatthias Ringwald { 1044*cb5466b0SMatthias Ringwald uint8_t RC64KEnable : 1; //!< Calibrate RC64K clock 1045*cb5466b0SMatthias Ringwald uint8_t RC13MEnable : 1; //!< Calibrate RC13M clock 1046*cb5466b0SMatthias Ringwald uint8_t PLLEnable : 1; //!< Calibrate PLL 1047*cb5466b0SMatthias Ringwald uint8_t ADCPulseEnable : 1; //!< Calibrate ADC Pulse 1048*cb5466b0SMatthias Ringwald uint8_t ADCBulkNEnable : 1; //!< Calibrate ADC bulkN 1049*cb5466b0SMatthias Ringwald uint8_t ADCBulkPEnable : 1; //!< Calibrate ADC bulkP 1050*cb5466b0SMatthias Ringwald }CalibrationParams_t; 1051*cb5466b0SMatthias Ringwald 1052*cb5466b0SMatthias Ringwald /*! 1053*cb5466b0SMatthias Ringwald * \brief Represents a sleep mode configuration 1054*cb5466b0SMatthias Ringwald */ 1055*cb5466b0SMatthias Ringwald typedef struct 1056*cb5466b0SMatthias Ringwald { 1057*cb5466b0SMatthias Ringwald uint8_t WakeUpRTC : 1; //!< Get out of sleep mode if wakeup signal received from RTC 1058*cb5466b0SMatthias Ringwald uint8_t InstructionRamRetention : 1; //!< InstructionRam is conserved during sleep 1059*cb5466b0SMatthias Ringwald uint8_t DataBufferRetention : 1; //!< Data buffer is conserved during sleep 1060*cb5466b0SMatthias Ringwald uint8_t DataRamRetention : 1; //!< Data ram is conserved during sleep 1061*cb5466b0SMatthias Ringwald }SleepParams_t; 1062*cb5466b0SMatthias Ringwald 1063*cb5466b0SMatthias Ringwald /*! 1064*cb5466b0SMatthias Ringwald * \brief Compute the two's complement for a register of size lower than 1065*cb5466b0SMatthias Ringwald * 32bits 1066*cb5466b0SMatthias Ringwald * 1067*cb5466b0SMatthias Ringwald * \param [in] num The register to be two's complemented 1068*cb5466b0SMatthias Ringwald * \param [in] bitCnt The position of the sign bit 1069*cb5466b0SMatthias Ringwald */ 1070*cb5466b0SMatthias Ringwald int32_t SX1280complement2( const uint32_t num, const uint8_t bitCnt ); 1071*cb5466b0SMatthias Ringwald 1072*cb5466b0SMatthias Ringwald /*! 1073*cb5466b0SMatthias Ringwald * \brief Returns the value of LoRa bandwidth from driver's value 1074*cb5466b0SMatthias Ringwald * 1075*cb5466b0SMatthias Ringwald * The value is returned in Hz so that it can be represented as an integer 1076*cb5466b0SMatthias Ringwald * type. Most computation should be done as integer to reduce floating 1077*cb5466b0SMatthias Ringwald * point related errors. 1078*cb5466b0SMatthias Ringwald * 1079*cb5466b0SMatthias Ringwald * \retval loRaBw The value of the current bandwidth in Hz 1080*cb5466b0SMatthias Ringwald */ 1081*cb5466b0SMatthias Ringwald int32_t SX1280GetLoRaBandwidth( void ); 1082*cb5466b0SMatthias Ringwald 1083*cb5466b0SMatthias Ringwald /*! 1084*cb5466b0SMatthias Ringwald * \brief Returns the corrected raw value of ranging 1085*cb5466b0SMatthias Ringwald * 1086*cb5466b0SMatthias Ringwald * \retval correction Corrected ranging raw value 1087*cb5466b0SMatthias Ringwald */ 1088*cb5466b0SMatthias Ringwald double SX1280GetRangingCorrectionPerSfBwGain( const RadioLoRaSpreadingFactors_t sf, const RadioLoRaBandwidths_t bw, const int8_t gain); 1089*cb5466b0SMatthias Ringwald 1090*cb5466b0SMatthias Ringwald /*! 1091*cb5466b0SMatthias Ringwald * \brief Returns the short range corrected distance 1092*cb5466b0SMatthias Ringwald * 1093*cb5466b0SMatthias Ringwald * \retval Corrected Distance corrected ditance 1094*cb5466b0SMatthias Ringwald */ 1095*cb5466b0SMatthias Ringwald double SX1280ComputeRangingCorrectionPolynome(const RadioLoRaSpreadingFactors_t sf, const RadioLoRaBandwidths_t bw, const double median); 1096*cb5466b0SMatthias Ringwald 1097*cb5466b0SMatthias Ringwald /*! 1098*cb5466b0SMatthias Ringwald * \brief DIOs interrupt callback 1099*cb5466b0SMatthias Ringwald * 1100*cb5466b0SMatthias Ringwald * \remark Called to handle all 3 DIOs pins 1101*cb5466b0SMatthias Ringwald */ 1102*cb5466b0SMatthias Ringwald void SX1280OnDioIrq( void ); 1103*cb5466b0SMatthias Ringwald 1104*cb5466b0SMatthias Ringwald /*! 1105*cb5466b0SMatthias Ringwald * \brief Set the role of the radio during ranging operations 1106*cb5466b0SMatthias Ringwald * 1107*cb5466b0SMatthias Ringwald * \param [in] role Role of the radio 1108*cb5466b0SMatthias Ringwald */ 1109*cb5466b0SMatthias Ringwald void SX1280SetRangingRole( RadioRangingRoles_t role ); 1110*cb5466b0SMatthias Ringwald 1111*cb5466b0SMatthias Ringwald /*! 1112*cb5466b0SMatthias Ringwald * \brief Initializes the radio driver 1113*cb5466b0SMatthias Ringwald */ 1114*cb5466b0SMatthias Ringwald void SX1280Init( RadioCallbacks_t *callbacks ); 1115*cb5466b0SMatthias Ringwald 1116*cb5466b0SMatthias Ringwald /*! 1117*cb5466b0SMatthias Ringwald * \brief Set the driver in polling mode. 1118*cb5466b0SMatthias Ringwald * 1119*cb5466b0SMatthias Ringwald * In polling mode the application is responsible to call ProcessIrqs( ) to 1120*cb5466b0SMatthias Ringwald * execute callbacks functions. 1121*cb5466b0SMatthias Ringwald * The default mode is Interrupt Mode. 1122*cb5466b0SMatthias Ringwald * @code 1123*cb5466b0SMatthias Ringwald * // Initializations and callbacks declaration/definition 1124*cb5466b0SMatthias Ringwald * radio = SX1280( mosi, miso, sclk, nss, busy, int1, int2, int3, rst, &callbacks ); 1125*cb5466b0SMatthias Ringwald * radio.Init( ); 1126*cb5466b0SMatthias Ringwald * radio.SetPollingMode( ); 1127*cb5466b0SMatthias Ringwald * 1128*cb5466b0SMatthias Ringwald * while( true ) 1129*cb5466b0SMatthias Ringwald * { 1130*cb5466b0SMatthias Ringwald * // IRQ processing is automatically done 1131*cb5466b0SMatthias Ringwald * radio.ProcessIrqs( ); // <-- here, as well as callback functions 1132*cb5466b0SMatthias Ringwald * // calls 1133*cb5466b0SMatthias Ringwald * // Do some applicative work 1134*cb5466b0SMatthias Ringwald * } 1135*cb5466b0SMatthias Ringwald * @endcode 1136*cb5466b0SMatthias Ringwald * 1137*cb5466b0SMatthias Ringwald * \see SX1280SetInterruptMode 1138*cb5466b0SMatthias Ringwald */ 1139*cb5466b0SMatthias Ringwald void SX1280SetPollingMode( void ); 1140*cb5466b0SMatthias Ringwald 1141*cb5466b0SMatthias Ringwald /*! 1142*cb5466b0SMatthias Ringwald * \brief Set the driver in interrupt mode. 1143*cb5466b0SMatthias Ringwald * 1144*cb5466b0SMatthias Ringwald * In interrupt mode, the driver communicate with the radio during the 1145*cb5466b0SMatthias Ringwald * interruption by direct calls to ProcessIrqs( ). The main advantage is 1146*cb5466b0SMatthias Ringwald * the possibility to have low power application architecture. 1147*cb5466b0SMatthias Ringwald * This is the default mode. 1148*cb5466b0SMatthias Ringwald * @code 1149*cb5466b0SMatthias Ringwald * // Initializations and callbacks declaration/definition 1150*cb5466b0SMatthias Ringwald * radio = SX1280( mosi, miso, sclk, nss, busy, int1, int2, int3, rst, &callbacks ); 1151*cb5466b0SMatthias Ringwald * radio.Init( ); 1152*cb5466b0SMatthias Ringwald * radio.SetInterruptMode( ); // Optionnal. Driver default behavior 1153*cb5466b0SMatthias Ringwald * 1154*cb5466b0SMatthias Ringwald * while( true ) 1155*cb5466b0SMatthias Ringwald * { 1156*cb5466b0SMatthias Ringwald * // Do some applicative work 1157*cb5466b0SMatthias Ringwald * } 1158*cb5466b0SMatthias Ringwald * @endcode 1159*cb5466b0SMatthias Ringwald * 1160*cb5466b0SMatthias Ringwald * \see SX1280SetPollingMode 1161*cb5466b0SMatthias Ringwald */ 1162*cb5466b0SMatthias Ringwald void SX1280SetInterruptMode( void ); 1163*cb5466b0SMatthias Ringwald 1164*cb5466b0SMatthias Ringwald /*! 1165*cb5466b0SMatthias Ringwald * \brief Initializes the radio registers to the recommended default values 1166*cb5466b0SMatthias Ringwald */ 1167*cb5466b0SMatthias Ringwald void SX1280SetRegistersDefault( void ); 1168*cb5466b0SMatthias Ringwald 1169*cb5466b0SMatthias Ringwald /*! 1170*cb5466b0SMatthias Ringwald * \brief Returns the current device firmware version 1171*cb5466b0SMatthias Ringwald * 1172*cb5466b0SMatthias Ringwald * \retval version Firmware version 1173*cb5466b0SMatthias Ringwald */ 1174*cb5466b0SMatthias Ringwald uint16_t SX1280GetFirmwareVersion( void ); 1175*cb5466b0SMatthias Ringwald 1176*cb5466b0SMatthias Ringwald /*! 1177*cb5466b0SMatthias Ringwald * \brief Gets the current Operation Mode of the Radio 1178*cb5466b0SMatthias Ringwald * 1179*cb5466b0SMatthias Ringwald * \retval RadioOperatingModes_t last operating mode 1180*cb5466b0SMatthias Ringwald */ 1181*cb5466b0SMatthias Ringwald RadioOperatingModes_t SX1280GetOpMode( void ); 1182*cb5466b0SMatthias Ringwald 1183*cb5466b0SMatthias Ringwald /*! 1184*cb5466b0SMatthias Ringwald * \brief Gets the current radio status 1185*cb5466b0SMatthias Ringwald * 1186*cb5466b0SMatthias Ringwald * \retval status Radio status 1187*cb5466b0SMatthias Ringwald */ 1188*cb5466b0SMatthias Ringwald RadioStatus_t SX1280GetStatus( void ); 1189*cb5466b0SMatthias Ringwald 1190*cb5466b0SMatthias Ringwald /*! 1191*cb5466b0SMatthias Ringwald * \brief Sets the radio in sleep mode 1192*cb5466b0SMatthias Ringwald * 1193*cb5466b0SMatthias Ringwald * \param [in] sleepConfig The sleep configuration describing data 1194*cb5466b0SMatthias Ringwald * retention and RTC wake-up 1195*cb5466b0SMatthias Ringwald */ 1196*cb5466b0SMatthias Ringwald void SX1280SetSleep( SleepParams_t sleepConfig ); 1197*cb5466b0SMatthias Ringwald 1198*cb5466b0SMatthias Ringwald /*! 1199*cb5466b0SMatthias Ringwald * \brief Sets the radio in configuration mode 1200*cb5466b0SMatthias Ringwald * 1201*cb5466b0SMatthias Ringwald * \param [in] mode The standby mode to put the radio into 1202*cb5466b0SMatthias Ringwald */ 1203*cb5466b0SMatthias Ringwald void SX1280SetStandby( RadioStandbyModes_t mode ); 1204*cb5466b0SMatthias Ringwald 1205*cb5466b0SMatthias Ringwald /*! 1206*cb5466b0SMatthias Ringwald * \brief Sets the radio in FS mode 1207*cb5466b0SMatthias Ringwald */ 1208*cb5466b0SMatthias Ringwald void SX1280SetFs( void ); 1209*cb5466b0SMatthias Ringwald 1210*cb5466b0SMatthias Ringwald /*! 1211*cb5466b0SMatthias Ringwald * \brief Sets the radio in transmission mode 1212*cb5466b0SMatthias Ringwald * 1213*cb5466b0SMatthias Ringwald * \param [in] timeout Structure describing the transmission timeout value 1214*cb5466b0SMatthias Ringwald */ 1215*cb5466b0SMatthias Ringwald void SX1280SetTx( TickTime_t timeout ); 1216*cb5466b0SMatthias Ringwald 1217*cb5466b0SMatthias Ringwald /*! 1218*cb5466b0SMatthias Ringwald * \brief Sets the radio in reception mode 1219*cb5466b0SMatthias Ringwald * 1220*cb5466b0SMatthias Ringwald * \param [in] timeout Structure describing the reception timeout value 1221*cb5466b0SMatthias Ringwald */ 1222*cb5466b0SMatthias Ringwald void SX1280SetRx( TickTime_t timeout ); 1223*cb5466b0SMatthias Ringwald 1224*cb5466b0SMatthias Ringwald /*! 1225*cb5466b0SMatthias Ringwald * \brief Sets the Rx duty cycle management parameters 1226*cb5466b0SMatthias Ringwald * 1227*cb5466b0SMatthias Ringwald * \param [in] rxTime Structure describing reception timeout value 1228*cb5466b0SMatthias Ringwald * \param [in] sleepTime Structure describing sleep timeout value 1229*cb5466b0SMatthias Ringwald */ 1230*cb5466b0SMatthias Ringwald void SX1280SetRxDutyCycle( RadioTickSizes_t Step, uint16_t NbStepRx, uint16_t RxNbStepSleep ); 1231*cb5466b0SMatthias Ringwald 1232*cb5466b0SMatthias Ringwald /*! 1233*cb5466b0SMatthias Ringwald * \brief Sets the radio in CAD mode 1234*cb5466b0SMatthias Ringwald * 1235*cb5466b0SMatthias Ringwald * \see SX1280::SetCadParams 1236*cb5466b0SMatthias Ringwald */ 1237*cb5466b0SMatthias Ringwald void SX1280SetCad( void ); 1238*cb5466b0SMatthias Ringwald 1239*cb5466b0SMatthias Ringwald /*! 1240*cb5466b0SMatthias Ringwald * \brief Sets the radio in continuous wave transmission mode 1241*cb5466b0SMatthias Ringwald */ 1242*cb5466b0SMatthias Ringwald void SX1280SetTxContinuousWave( void ); 1243*cb5466b0SMatthias Ringwald 1244*cb5466b0SMatthias Ringwald /*! 1245*cb5466b0SMatthias Ringwald * \brief Sets the radio in continuous preamble transmission mode 1246*cb5466b0SMatthias Ringwald */ 1247*cb5466b0SMatthias Ringwald void SX1280SetTxContinuousPreamble( void ); 1248*cb5466b0SMatthias Ringwald 1249*cb5466b0SMatthias Ringwald /*! 1250*cb5466b0SMatthias Ringwald * \brief Sets the radio for the given protocol 1251*cb5466b0SMatthias Ringwald * 1252*cb5466b0SMatthias Ringwald * \param [in] packetType [PACKET_TYPE_GFSK, PACKET_TYPE_LORA, 1253*cb5466b0SMatthias Ringwald * PACKET_TYPE_RANGING, PACKET_TYPE_FLRC, 1254*cb5466b0SMatthias Ringwald * PACKET_TYPE_BLE] 1255*cb5466b0SMatthias Ringwald * 1256*cb5466b0SMatthias Ringwald * \remark This method has to be called before SetRfFrequency, 1257*cb5466b0SMatthias Ringwald * SetModulationParams and SetPacketParams 1258*cb5466b0SMatthias Ringwald */ 1259*cb5466b0SMatthias Ringwald void SX1280SetPacketType( RadioPacketTypes_t packetType ); 1260*cb5466b0SMatthias Ringwald 1261*cb5466b0SMatthias Ringwald /*! 1262*cb5466b0SMatthias Ringwald * \brief Gets the current radio protocol 1263*cb5466b0SMatthias Ringwald * 1264*cb5466b0SMatthias Ringwald * \retval packetType [PACKET_TYPE_GFSK, PACKET_TYPE_LORA, 1265*cb5466b0SMatthias Ringwald * PACKET_TYPE_RANGING, PACKET_TYPE_FLRC, 1266*cb5466b0SMatthias Ringwald * PACKET_TYPE_BLE, PACKET_TYPE_NONE] 1267*cb5466b0SMatthias Ringwald */ 1268*cb5466b0SMatthias Ringwald RadioPacketTypes_t SX1280GetPacketType( void ); 1269*cb5466b0SMatthias Ringwald 1270*cb5466b0SMatthias Ringwald /*! 1271*cb5466b0SMatthias Ringwald * \brief Sets the RF frequency 1272*cb5466b0SMatthias Ringwald * 1273*cb5466b0SMatthias Ringwald * \param [in] frequency RF frequency [Hz] 1274*cb5466b0SMatthias Ringwald */ 1275*cb5466b0SMatthias Ringwald void SX1280SetRfFrequency( uint32_t frequency ); 1276*cb5466b0SMatthias Ringwald 1277*cb5466b0SMatthias Ringwald /*! 1278*cb5466b0SMatthias Ringwald * \brief Sets the transmission parameters 1279*cb5466b0SMatthias Ringwald * 1280*cb5466b0SMatthias Ringwald * \param [in] power RF output power [-18..13] dBm 1281*cb5466b0SMatthias Ringwald * \param [in] rampTime Transmission ramp up time 1282*cb5466b0SMatthias Ringwald */ 1283*cb5466b0SMatthias Ringwald void SX1280SetTxParams( int8_t power, RadioRampTimes_t rampTime ); 1284*cb5466b0SMatthias Ringwald 1285*cb5466b0SMatthias Ringwald /*! 1286*cb5466b0SMatthias Ringwald * \brief Sets the number of symbols to be used for Channel Activity 1287*cb5466b0SMatthias Ringwald * Detection operation 1288*cb5466b0SMatthias Ringwald * 1289*cb5466b0SMatthias Ringwald * \param [in] cadSymbolNum The number of symbol to use for Channel Activity 1290*cb5466b0SMatthias Ringwald * Detection operations [LORA_CAD_01_SYMBOL, LORA_CAD_02_SYMBOL, 1291*cb5466b0SMatthias Ringwald * LORA_CAD_04_SYMBOL, LORA_CAD_08_SYMBOL, LORA_CAD_16_SYMBOL] 1292*cb5466b0SMatthias Ringwald */ 1293*cb5466b0SMatthias Ringwald void SX1280SetCadParams( RadioLoRaCadSymbols_t cadSymbolNum ); 1294*cb5466b0SMatthias Ringwald 1295*cb5466b0SMatthias Ringwald /*! 1296*cb5466b0SMatthias Ringwald * \brief Sets the data buffer base address for transmission and reception 1297*cb5466b0SMatthias Ringwald * 1298*cb5466b0SMatthias Ringwald * \param [in] txBaseAddress Transmission base address 1299*cb5466b0SMatthias Ringwald * \param [in] rxBaseAddress Reception base address 1300*cb5466b0SMatthias Ringwald */ 1301*cb5466b0SMatthias Ringwald void SX1280SetBufferBaseAddresses( uint8_t txBaseAddress, uint8_t rxBaseAddress ); 1302*cb5466b0SMatthias Ringwald 1303*cb5466b0SMatthias Ringwald /*! 1304*cb5466b0SMatthias Ringwald * \brief Set the modulation parameters 1305*cb5466b0SMatthias Ringwald * 1306*cb5466b0SMatthias Ringwald * \param [in] modParams A structure describing the modulation parameters 1307*cb5466b0SMatthias Ringwald */ 1308*cb5466b0SMatthias Ringwald void SX1280SetModulationParams( ModulationParams_t *modParams ); 1309*cb5466b0SMatthias Ringwald 1310*cb5466b0SMatthias Ringwald /*! 1311*cb5466b0SMatthias Ringwald * \brief Sets the packet parameters 1312*cb5466b0SMatthias Ringwald * 1313*cb5466b0SMatthias Ringwald * \param [in] packetParams A structure describing the packet parameters 1314*cb5466b0SMatthias Ringwald */ 1315*cb5466b0SMatthias Ringwald void SX1280SetPacketParams( PacketParams_t *packetParams ); 1316*cb5466b0SMatthias Ringwald 1317*cb5466b0SMatthias Ringwald /*! 1318*cb5466b0SMatthias Ringwald * \brief Gets the last received packet buffer status 1319*cb5466b0SMatthias Ringwald * 1320*cb5466b0SMatthias Ringwald * \param [out] payloadLength Last received packet payload length 1321*cb5466b0SMatthias Ringwald * \param [out] rxStartBuffer Last received packet buffer address pointer 1322*cb5466b0SMatthias Ringwald */ 1323*cb5466b0SMatthias Ringwald void SX1280GetRxBufferStatus( uint8_t *payloadLength, uint8_t *rxStartBuffer ); 1324*cb5466b0SMatthias Ringwald 1325*cb5466b0SMatthias Ringwald /*! 1326*cb5466b0SMatthias Ringwald * \brief Gets the last received packet payload length 1327*cb5466b0SMatthias Ringwald * 1328*cb5466b0SMatthias Ringwald * \param [out] pktStatus A structure of packet status 1329*cb5466b0SMatthias Ringwald */ 1330*cb5466b0SMatthias Ringwald void SX1280GetPacketStatus( PacketStatus_t *pktStatus ); 1331*cb5466b0SMatthias Ringwald 1332*cb5466b0SMatthias Ringwald /*! 1333*cb5466b0SMatthias Ringwald * \brief Returns the instantaneous RSSI value for the last packet received 1334*cb5466b0SMatthias Ringwald * 1335*cb5466b0SMatthias Ringwald * \retval rssiInst Instantaneous RSSI 1336*cb5466b0SMatthias Ringwald */ 1337*cb5466b0SMatthias Ringwald int8_t SX1280GetRssiInst( void ); 1338*cb5466b0SMatthias Ringwald 1339*cb5466b0SMatthias Ringwald /*! 1340*cb5466b0SMatthias Ringwald * \brief Sets the IRQ mask and DIO masks 1341*cb5466b0SMatthias Ringwald * 1342*cb5466b0SMatthias Ringwald * \param [in] irqMask General IRQ mask 1343*cb5466b0SMatthias Ringwald * \param [in] dio1Mask DIO1 mask 1344*cb5466b0SMatthias Ringwald * \param [in] dio2Mask DIO2 mask 1345*cb5466b0SMatthias Ringwald * \param [in] dio3Mask DIO3 mask 1346*cb5466b0SMatthias Ringwald */ 1347*cb5466b0SMatthias Ringwald void SX1280SetDioIrqParams( uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask, uint16_t dio3Mask ); 1348*cb5466b0SMatthias Ringwald 1349*cb5466b0SMatthias Ringwald /*! 1350*cb5466b0SMatthias Ringwald * \brief Returns the current IRQ status 1351*cb5466b0SMatthias Ringwald * 1352*cb5466b0SMatthias Ringwald * \retval irqStatus IRQ status 1353*cb5466b0SMatthias Ringwald */ 1354*cb5466b0SMatthias Ringwald uint16_t SX1280GetIrqStatus( void ); 1355*cb5466b0SMatthias Ringwald 1356*cb5466b0SMatthias Ringwald /*! 1357*cb5466b0SMatthias Ringwald * \brief Clears the IRQs 1358*cb5466b0SMatthias Ringwald * 1359*cb5466b0SMatthias Ringwald * \param [in] irq IRQ(s) to be cleared 1360*cb5466b0SMatthias Ringwald */ 1361*cb5466b0SMatthias Ringwald void SX1280ClearIrqStatus( uint16_t irq ); 1362*cb5466b0SMatthias Ringwald 1363*cb5466b0SMatthias Ringwald /*! 1364*cb5466b0SMatthias Ringwald * \brief Calibrates the given radio block 1365*cb5466b0SMatthias Ringwald * 1366*cb5466b0SMatthias Ringwald * \param [in] calibParam The description of blocks to be calibrated 1367*cb5466b0SMatthias Ringwald */ 1368*cb5466b0SMatthias Ringwald void SX1280Calibrate( CalibrationParams_t calibParam ); 1369*cb5466b0SMatthias Ringwald 1370*cb5466b0SMatthias Ringwald /*! 1371*cb5466b0SMatthias Ringwald * \brief Sets the power regulators operating mode 1372*cb5466b0SMatthias Ringwald * 1373*cb5466b0SMatthias Ringwald * \param [in] mode [0: LDO, 1:DC_DC] 1374*cb5466b0SMatthias Ringwald */ 1375*cb5466b0SMatthias Ringwald void SX1280SetRegulatorMode( RadioRegulatorModes_t mode ); 1376*cb5466b0SMatthias Ringwald 1377*cb5466b0SMatthias Ringwald /*! 1378*cb5466b0SMatthias Ringwald * \brief Saves the current selected modem configuration into data RAM 1379*cb5466b0SMatthias Ringwald */ 1380*cb5466b0SMatthias Ringwald void SX1280SetSaveContext( void ); 1381*cb5466b0SMatthias Ringwald 1382*cb5466b0SMatthias Ringwald /*! 1383*cb5466b0SMatthias Ringwald * \brief Sets the chip to automatically send a packet after the end of a packet reception 1384*cb5466b0SMatthias Ringwald * 1385*cb5466b0SMatthias Ringwald * \remark The offset is automatically compensated inside the function 1386*cb5466b0SMatthias Ringwald * 1387*cb5466b0SMatthias Ringwald * \param [in] time The delay in us after which a Tx is done 1388*cb5466b0SMatthias Ringwald */ 1389*cb5466b0SMatthias Ringwald void SX1280SetAutoTx( uint16_t time ); 1390*cb5466b0SMatthias Ringwald 1391*cb5466b0SMatthias Ringwald /*! 1392*cb5466b0SMatthias Ringwald * \brief Stop the chip from automatically sending a packet after the end of a packet reception 1393*cb5466b0SMatthias Ringwald * if previously activated with SX1280SetAutoTx command 1394*cb5466b0SMatthias Ringwald * 1395*cb5466b0SMatthias Ringwald * \see SX1280SetAutoTx 1396*cb5466b0SMatthias Ringwald */ 1397*cb5466b0SMatthias Ringwald void SX1280StopAutoTx( void ); 1398*cb5466b0SMatthias Ringwald 1399*cb5466b0SMatthias Ringwald /*! 1400*cb5466b0SMatthias Ringwald * \brief Sets the chip to automatically receive a packet after the end of a packet transmission 1401*cb5466b0SMatthias Ringwald * 1402*cb5466b0SMatthias Ringwald * \remark The offset is automatically compensated inside the function 1403*cb5466b0SMatthias Ringwald * 1404*cb5466b0SMatthias Ringwald * \param [in] time The delay in us after which a Rx is done 1405*cb5466b0SMatthias Ringwald */ 1406*cb5466b0SMatthias Ringwald void SX1280SetAutoFS( uint8_t enable ); 1407*cb5466b0SMatthias Ringwald 1408*cb5466b0SMatthias Ringwald /*! 1409*cb5466b0SMatthias Ringwald * \brief Enables or disables long preamble detection mode 1410*cb5466b0SMatthias Ringwald * 1411*cb5466b0SMatthias Ringwald * \param [in] enable [0: Disable, 1: Enable] 1412*cb5466b0SMatthias Ringwald */ 1413*cb5466b0SMatthias Ringwald void SX1280SetLongPreamble( uint8_t enable ); 1414*cb5466b0SMatthias Ringwald 1415*cb5466b0SMatthias Ringwald /*! 1416*cb5466b0SMatthias Ringwald * \brief Saves the payload to be send in the radio buffer 1417*cb5466b0SMatthias Ringwald * 1418*cb5466b0SMatthias Ringwald * \param [in] payload A pointer to the payload 1419*cb5466b0SMatthias Ringwald * \param [in] size The size of the payload 1420*cb5466b0SMatthias Ringwald */ 1421*cb5466b0SMatthias Ringwald void SX1280SetPayload( uint8_t *payload, uint8_t size ); 1422*cb5466b0SMatthias Ringwald 1423*cb5466b0SMatthias Ringwald /*! 1424*cb5466b0SMatthias Ringwald * \brief Reads the payload received. If the received payload is longer 1425*cb5466b0SMatthias Ringwald * than maxSize, then the method returns 1 and do not set size and payload. 1426*cb5466b0SMatthias Ringwald * 1427*cb5466b0SMatthias Ringwald * \param [out] payload A pointer to a buffer into which the payload will be copied 1428*cb5466b0SMatthias Ringwald * \param [out] size A pointer to the size of the payload received 1429*cb5466b0SMatthias Ringwald * \param [in] maxSize The maximal size allowed to copy into the buffer 1430*cb5466b0SMatthias Ringwald */ 1431*cb5466b0SMatthias Ringwald uint8_t SX1280GetPayload( uint8_t *payload, uint8_t *size, uint8_t maxSize ); 1432*cb5466b0SMatthias Ringwald 1433*cb5466b0SMatthias Ringwald /*! 1434*cb5466b0SMatthias Ringwald * \brief Sends a payload 1435*cb5466b0SMatthias Ringwald * 1436*cb5466b0SMatthias Ringwald * \param [in] payload A pointer to the payload to send 1437*cb5466b0SMatthias Ringwald * \param [in] size The size of the payload to send 1438*cb5466b0SMatthias Ringwald * \param [in] timeout The timeout for Tx operation 1439*cb5466b0SMatthias Ringwald */ 1440*cb5466b0SMatthias Ringwald void SX1280SendPayload( uint8_t *payload, uint8_t size, TickTime_t timeout ); 1441*cb5466b0SMatthias Ringwald 1442*cb5466b0SMatthias Ringwald /*! 1443*cb5466b0SMatthias Ringwald * \brief Sets the Sync Word given by index used in GFSK, FLRC and BLE protocols 1444*cb5466b0SMatthias Ringwald * 1445*cb5466b0SMatthias Ringwald * \remark 5th byte isn't used in FLRC and BLE protocols 1446*cb5466b0SMatthias Ringwald * 1447*cb5466b0SMatthias Ringwald * \param [in] syncWordIdx Index of SyncWord to be set [1..3] 1448*cb5466b0SMatthias Ringwald * \param [in] syncWord SyncWord bytes ( 5 bytes ) 1449*cb5466b0SMatthias Ringwald * 1450*cb5466b0SMatthias Ringwald * \retval status [0: OK, 1: NOK] 1451*cb5466b0SMatthias Ringwald */ 1452*cb5466b0SMatthias Ringwald uint8_t SX1280SetSyncWord( uint8_t syncWordIdx, uint8_t *syncWord ); 1453*cb5466b0SMatthias Ringwald 1454*cb5466b0SMatthias Ringwald /*! 1455*cb5466b0SMatthias Ringwald * \brief Defines how many error bits are tolerated in sync word detection 1456*cb5466b0SMatthias Ringwald * 1457*cb5466b0SMatthias Ringwald * \param [in] errorBits Number of error bits supported to validate the Sync word detection 1458*cb5466b0SMatthias Ringwald * ( default is 4 bit, minimum is 1 bit ) 1459*cb5466b0SMatthias Ringwald */ 1460*cb5466b0SMatthias Ringwald void SX1280SetSyncWordErrorTolerance( uint8_t errorBits ); 1461*cb5466b0SMatthias Ringwald 1462*cb5466b0SMatthias Ringwald /*! 1463*cb5466b0SMatthias Ringwald * \brief Sets the Initial value for the LFSR used for the CRC calculation 1464*cb5466b0SMatthias Ringwald * 1465*cb5466b0SMatthias Ringwald * \param [in] seed Initial LFSR value ( 4 bytes ) 1466*cb5466b0SMatthias Ringwald * 1467*cb5466b0SMatthias Ringwald */ 1468*cb5466b0SMatthias Ringwald void SX1280SetCrcSeed( uint16_t seed ); 1469*cb5466b0SMatthias Ringwald 1470*cb5466b0SMatthias Ringwald /*! 1471*cb5466b0SMatthias Ringwald * \brief Set the Access Address field of BLE packet 1472*cb5466b0SMatthias Ringwald * 1473*cb5466b0SMatthias Ringwald * \param [in] accessAddress The access address to be used for next BLE packet sent 1474*cb5466b0SMatthias Ringwald */ 1475*cb5466b0SMatthias Ringwald void SX1280SetBleAccessAddress( uint32_t accessAddress ); 1476*cb5466b0SMatthias Ringwald 1477*cb5466b0SMatthias Ringwald /*! 1478*cb5466b0SMatthias Ringwald * \brief Set the Access Address for Advertizer BLE packets 1479*cb5466b0SMatthias Ringwald * 1480*cb5466b0SMatthias Ringwald * All advertizer BLE packets must use a particular value for Access 1481*cb5466b0SMatthias Ringwald * Address field. This method sets it. 1482*cb5466b0SMatthias Ringwald * 1483*cb5466b0SMatthias Ringwald * \see SX1280::SetBleAccessAddress 1484*cb5466b0SMatthias Ringwald */ 1485*cb5466b0SMatthias Ringwald void SX1280SetBleAdvertizerAccessAddress( void ); 1486*cb5466b0SMatthias Ringwald 1487*cb5466b0SMatthias Ringwald /*! 1488*cb5466b0SMatthias Ringwald * \brief Sets the seed used for the CRC calculation 1489*cb5466b0SMatthias Ringwald * 1490*cb5466b0SMatthias Ringwald * \param [in] seed The seed value 1491*cb5466b0SMatthias Ringwald * 1492*cb5466b0SMatthias Ringwald */ 1493*cb5466b0SMatthias Ringwald void SX1280SetCrcPolynomial( uint16_t seed ); 1494*cb5466b0SMatthias Ringwald 1495*cb5466b0SMatthias Ringwald /*! 1496*cb5466b0SMatthias Ringwald * \brief Sets the Initial value of the LFSR used for the whitening in GFSK, FLRC and BLE protocols 1497*cb5466b0SMatthias Ringwald * 1498*cb5466b0SMatthias Ringwald * \param [in] seed Initial LFSR value 1499*cb5466b0SMatthias Ringwald */ 1500*cb5466b0SMatthias Ringwald void SX1280SetWhiteningSeed( uint8_t seed ); 1501*cb5466b0SMatthias Ringwald 1502*cb5466b0SMatthias Ringwald /*! 1503*cb5466b0SMatthias Ringwald * \brief Enable manual gain and disable AGC 1504*cb5466b0SMatthias Ringwald * 1505*cb5466b0SMatthias Ringwald * \see SX1280SetManualGainValue, SX1280DisableManualGain 1506*cb5466b0SMatthias Ringwald */ 1507*cb5466b0SMatthias Ringwald void SX1280EnableManualGain( void ); 1508*cb5466b0SMatthias Ringwald 1509*cb5466b0SMatthias Ringwald /*! 1510*cb5466b0SMatthias Ringwald * \brief Disable the manual gain control and enable AGC 1511*cb5466b0SMatthias Ringwald * 1512*cb5466b0SMatthias Ringwald * \see SX1280EnableManualGain 1513*cb5466b0SMatthias Ringwald */ 1514*cb5466b0SMatthias Ringwald void SX1280DisableManualGain( void ); 1515*cb5466b0SMatthias Ringwald 1516*cb5466b0SMatthias Ringwald /*! 1517*cb5466b0SMatthias Ringwald * \brief Set the gain for LNA 1518*cb5466b0SMatthias Ringwald * 1519*cb5466b0SMatthias Ringwald * SX1280EnableManualGain must be call before using this function 1520*cb5466b0SMatthias Ringwald * 1521*cb5466b0SMatthias Ringwald * \param [in] gain The value of gain to set, refer to datasheet for value meaning 1522*cb5466b0SMatthias Ringwald * 1523*cb5466b0SMatthias Ringwald * \see SX1280EnableManualGain, SX1280DisableManualGain 1524*cb5466b0SMatthias Ringwald */ 1525*cb5466b0SMatthias Ringwald void SX1280SetManualGainValue( uint8_t gain ); 1526*cb5466b0SMatthias Ringwald 1527*cb5466b0SMatthias Ringwald /*! 1528*cb5466b0SMatthias Ringwald * \brief Configure the LNA regime of operation 1529*cb5466b0SMatthias Ringwald * 1530*cb5466b0SMatthias Ringwald * \param [in] lnaSetting The LNA setting. Possible values are 1531*cb5466b0SMatthias Ringwald * LNA_LOW_POWER_MODE and 1532*cb5466b0SMatthias Ringwald * LNA_HIGH_SENSITIVITY_MODE 1533*cb5466b0SMatthias Ringwald */ 1534*cb5466b0SMatthias Ringwald void SX1280SetLNAGainSetting( const RadioLnaSettings_t lnaSetting ); 1535*cb5466b0SMatthias Ringwald 1536*cb5466b0SMatthias Ringwald /*! 1537*cb5466b0SMatthias Ringwald * \brief Sets the number of bits used to check that ranging request match ranging ID 1538*cb5466b0SMatthias Ringwald * 1539*cb5466b0SMatthias Ringwald * \param [in] length [0: 8 bits, 1: 16 bits, 1540*cb5466b0SMatthias Ringwald * 2: 24 bits, 3: 32 bits] 1541*cb5466b0SMatthias Ringwald */ 1542*cb5466b0SMatthias Ringwald void SX1280SetRangingIdLength( RadioRangingIdCheckLengths_t length ); 1543*cb5466b0SMatthias Ringwald 1544*cb5466b0SMatthias Ringwald /*! 1545*cb5466b0SMatthias Ringwald * \brief Sets ranging device id 1546*cb5466b0SMatthias Ringwald * 1547*cb5466b0SMatthias Ringwald * \param [in] address Device address 1548*cb5466b0SMatthias Ringwald */ 1549*cb5466b0SMatthias Ringwald void SX1280SetDeviceRangingAddress( uint32_t address ); 1550*cb5466b0SMatthias Ringwald 1551*cb5466b0SMatthias Ringwald /*! 1552*cb5466b0SMatthias Ringwald * \brief Sets the device id to ping in a ranging request 1553*cb5466b0SMatthias Ringwald * 1554*cb5466b0SMatthias Ringwald * \param [in] address Address of the device to ping 1555*cb5466b0SMatthias Ringwald */ 1556*cb5466b0SMatthias Ringwald void SX1280SetRangingRequestAddress( uint32_t address ); 1557*cb5466b0SMatthias Ringwald 1558*cb5466b0SMatthias Ringwald /*! 1559*cb5466b0SMatthias Ringwald * \brief Return the ranging result value 1560*cb5466b0SMatthias Ringwald * 1561*cb5466b0SMatthias Ringwald * \param [in] resultType Specifies the type of result. 1562*cb5466b0SMatthias Ringwald * [0: RAW, 1: Averaged, 1563*cb5466b0SMatthias Ringwald * 2: De-biased, 3:Filtered] 1564*cb5466b0SMatthias Ringwald * 1565*cb5466b0SMatthias Ringwald * \retval ranging The ranging measure filtered according to resultType [m] 1566*cb5466b0SMatthias Ringwald */ 1567*cb5466b0SMatthias Ringwald double SX1280GetRangingResult( RadioRangingResultTypes_t resultType ); 1568*cb5466b0SMatthias Ringwald 1569*cb5466b0SMatthias Ringwald /*! 1570*cb5466b0SMatthias Ringwald * \brief Sets the standard processing delay between Master and Slave 1571*cb5466b0SMatthias Ringwald * 1572*cb5466b0SMatthias Ringwald * \param [in] cal RxTx delay offset for correcting ranging bias. 1573*cb5466b0SMatthias Ringwald * 1574*cb5466b0SMatthias Ringwald * The calibration value reflects the group delay of the radio front end and 1575*cb5466b0SMatthias Ringwald * must be re-performed for each new SX1280 PCB design. The value is obtained 1576*cb5466b0SMatthias Ringwald * empirically by either conducted measurement in a known electrical length 1577*cb5466b0SMatthias Ringwald * coaxial RF cable (where the design is connectorised) or by radiated 1578*cb5466b0SMatthias Ringwald * measurement, at a known distance, where an antenna is present. 1579*cb5466b0SMatthias Ringwald * The result of the calibration process is that the SX1280 ranging result 1580*cb5466b0SMatthias Ringwald * accurately reflects the physical range, the calibration procedure therefore 1581*cb5466b0SMatthias Ringwald * removes the average timing error from the time-of-flight measurement for a 1582*cb5466b0SMatthias Ringwald * given design. 1583*cb5466b0SMatthias Ringwald * 1584*cb5466b0SMatthias Ringwald * The values are Spreading Factor dependents, and depend also of the board 1585*cb5466b0SMatthias Ringwald * design. Some typical values are provided in the next table. 1586*cb5466b0SMatthias Ringwald * 1587*cb5466b0SMatthias Ringwald * Spreading Factor | Calibration Value 1588*cb5466b0SMatthias Ringwald * ---------------- | ----------------- 1589*cb5466b0SMatthias Ringwald * SF5 | 12200 1590*cb5466b0SMatthias Ringwald * SF6 | 12200 1591*cb5466b0SMatthias Ringwald * SF7 | 12400 1592*cb5466b0SMatthias Ringwald * SF8 | 12650 1593*cb5466b0SMatthias Ringwald * SF9 | 12940 1594*cb5466b0SMatthias Ringwald * SF10 | 13000 1595*cb5466b0SMatthias Ringwald * SF11 | 13060 1596*cb5466b0SMatthias Ringwald * SF12 | 13120 1597*cb5466b0SMatthias Ringwald */ 1598*cb5466b0SMatthias Ringwald void SX1280SetRangingCalibration( uint16_t cal ); 1599*cb5466b0SMatthias Ringwald 1600*cb5466b0SMatthias Ringwald /*! 1601*cb5466b0SMatthias Ringwald * \brief Return the last ranging result power indicator 1602*cb5466b0SMatthias Ringwald * 1603*cb5466b0SMatthias Ringwald * The value returned is not an absolute power measurement. It is 1604*cb5466b0SMatthias Ringwald * a relative power measurement. 1605*cb5466b0SMatthias Ringwald * 1606*cb5466b0SMatthias Ringwald * \retval deltaThreshold A relative power indicator 1607*cb5466b0SMatthias Ringwald */ 1608*cb5466b0SMatthias Ringwald uint8_t SX1280GetRangingPowerDeltaThresholdIndicator( void ); 1609*cb5466b0SMatthias Ringwald 1610*cb5466b0SMatthias Ringwald /*! 1611*cb5466b0SMatthias Ringwald * \brief Clears the ranging filter 1612*cb5466b0SMatthias Ringwald */ 1613*cb5466b0SMatthias Ringwald void SX1280RangingClearFilterResult( void ); 1614*cb5466b0SMatthias Ringwald 1615*cb5466b0SMatthias Ringwald /*! 1616*cb5466b0SMatthias Ringwald * \brief Set the number of samples considered in the built-in filter 1617*cb5466b0SMatthias Ringwald * 1618*cb5466b0SMatthias Ringwald * \param [in] numSample The number of samples to use built-in filter 1619*cb5466b0SMatthias Ringwald * [8..255] 1620*cb5466b0SMatthias Ringwald * 1621*cb5466b0SMatthias Ringwald * \remark Value inferior to 8 will be silently set to 8 1622*cb5466b0SMatthias Ringwald */ 1623*cb5466b0SMatthias Ringwald void SX1280RangingSetFilterNumSamples( uint8_t numSample ); 1624*cb5466b0SMatthias Ringwald 1625*cb5466b0SMatthias Ringwald /*! 1626*cb5466b0SMatthias Ringwald * \brief Return the Estimated Frequency Error in LORA and RANGING operations 1627*cb5466b0SMatthias Ringwald * 1628*cb5466b0SMatthias Ringwald * \retval efe The estimated frequency error [Hz] 1629*cb5466b0SMatthias Ringwald */ 1630*cb5466b0SMatthias Ringwald double SX1280GetFrequencyError( void ); 1631*cb5466b0SMatthias Ringwald 1632*cb5466b0SMatthias Ringwald /*! 1633*cb5466b0SMatthias Ringwald * \brief Process the analysis of radio IRQs and calls callback functions 1634*cb5466b0SMatthias Ringwald * depending on radio state 1635*cb5466b0SMatthias Ringwald */ 1636*cb5466b0SMatthias Ringwald void SX1280ProcessIrqs( void ); 1637*cb5466b0SMatthias Ringwald 1638*cb5466b0SMatthias Ringwald /*! 1639*cb5466b0SMatthias Ringwald * \brief Clears the instruction RAM 1640*cb5466b0SMatthias Ringwald */ 1641*cb5466b0SMatthias Ringwald void SX1280ClearInstructionRam( void ); 1642*cb5466b0SMatthias Ringwald 1643*cb5466b0SMatthias Ringwald /*! 1644*cb5466b0SMatthias Ringwald * \brief Parses 1 HEX file line and writes the content to the instruction memory 1645*cb5466b0SMatthias Ringwald * 1646*cb5466b0SMatthias Ringwald * \param [in] line HEX file line string 1647*cb5466b0SMatthias Ringwald * 1648*cb5466b0SMatthias Ringwald * \retval status [0: ERROR, 1:OK] 1649*cb5466b0SMatthias Ringwald */ 1650*cb5466b0SMatthias Ringwald int8_t SX1280ParseHexFileLine( char* line ); 1651*cb5466b0SMatthias Ringwald 1652*cb5466b0SMatthias Ringwald /*! 1653*cb5466b0SMatthias Ringwald * \brief Gets individual fields for the given HEX file line 1654*cb5466b0SMatthias Ringwald * 1655*cb5466b0SMatthias Ringwald * \param [in] line HEX file line string 1656*cb5466b0SMatthias Ringwald * \param [out] bytes Bytes array to be written to the instruction memory 1657*cb5466b0SMatthias Ringwald * \param [out] addr Instruction memory address where to write the bytes array 1658*cb5466b0SMatthias Ringwald * \param [out] num Number of bytes in Bytes array 1659*cb5466b0SMatthias Ringwald * \param [out] code HEX file line type [0: instruction, 1: end of file, 2: begin of file] 1660*cb5466b0SMatthias Ringwald * 1661*cb5466b0SMatthias Ringwald * \retval status [0: ERROR, 1:OK] 1662*cb5466b0SMatthias Ringwald */ 1663*cb5466b0SMatthias Ringwald int8_t SX1280GetHexFileLineFields( char* line, uint8_t *bytes, uint16_t *addr, uint16_t *num, uint8_t *code ); 1664*cb5466b0SMatthias Ringwald 1665*cb5466b0SMatthias Ringwald /*! 1666*cb5466b0SMatthias Ringwald * /\brief Update operating mode to tx - used to let SX1280ProcessIrqs know that TX is/was active and call the correct handlers 1667*cb5466b0SMatthias Ringwald */ 1668*cb5466b0SMatthias Ringwald void SX1280AutoTxWillStart(void); 1669*cb5466b0SMatthias Ringwald 1670*cb5466b0SMatthias Ringwald #endif // __SX1280_H__ 1671