#ifndef _NXPUWB_CHIP_H_ #define _NXPUWB_CHIP_H_ #include #include #include #include "phUwbTypes.h" // Chip type typedef enum { DEVICE_TYPE_UNKNOWN, DEVICE_TYPE_SR1xxT, DEVICE_TYPE_SR1xxS, DEVICE_TYPE_SR200, } device_type_t; // SW defined data structures typedef enum { // 6 bytes // [1:0] cap1 [3:2] cap2 [5:4] gm current control EXTCAL_PARAM_CLK_ACCURACY = 0x1, // xtal // 3n + 1 bytes // [0] n, number of entries + n * { [0] antenna-id [1:0] RX delay(Q14.2) } EXTCAL_PARAM_RX_ANT_DELAY = 0x2, // ant_delay // 5N + 1 bytes // [0]: n, number of entries + n * { [0] antenna-id [2:1] delta-peak [4:3] id-rms } EXTCAL_PARAM_TX_POWER = 0x3, // tx_power // channel independent // 1 byte // b0: enable/disable DDFS tone generation (default off) // b1: enable/disable DC suppression (default off) EXTCAL_PARAM_TX_BASE_BAND_CONTROL = 0x101, // ddfs_enable, dc_suppress // channel independent (raw data contains channel info) // bytes array EXTCAL_PARAM_DDFS_TONE_CONFIG = 0x102, // ddfs_tone_config // channel independent // byte array EXTCAL_PARAM_TX_PULSE_SHAPE = 0x103, // tx_pulse_shape } extcal_param_id_t; class NxpUwbChip { public: virtual ~NxpUwbChip() = default; // Bring-up the chip into UCI operational modes // FW donwloading and enter UCI mode virtual tHAL_UWB_STATUS chip_init() = 0; // Per-chip device configurations // Binding check, life cycle check. virtual tHAL_UWB_STATUS core_init() = 0; // Determine device_type_t from DEVICE_INFO_RSP::UWB_CHIP_ID virtual device_type_t get_device_type(const uint8_t* param, size_t param_len) = 0; // Read Calibration parameters storead at OTP virtual tHAL_UWB_STATUS read_otp(extcal_param_id_t id, uint8_t *data, size_t data_len, size_t *retlen); // Apply device calibration virtual tHAL_UWB_STATUS apply_calibration(extcal_param_id_t id, const uint8_t ch, const uint8_t *data, size_t data_len) = 0; // Get supported channels virtual tHAL_UWB_STATUS get_supported_channels(const uint8_t **cal_channels, uint8_t *nr) = 0; }; std::unique_ptr GetUwbChip(); #endif