From adfc7e798b9cbdd022bf8df971843436912a0fe5 Mon Sep 17 00:00:00 2001
From: chen <15335560115@163.com>
Date: 星期日, 20 七月 2025 16:58:30 +0800
Subject: [PATCH] 成功移植g_com_map表逻辑,初步测试能读能写,并且TDOA效果和官方一致

---
 keil/include/components/uwb/inc/uwb_api.h |  169 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 133 insertions(+), 36 deletions(-)

diff --git a/keil/include/components/uwb/inc/uwb_api.h b/keil/include/components/uwb/inc/uwb_api.h
index e5e1a36..07b6b7d 100644
--- a/keil/include/components/uwb/inc/uwb_api.h
+++ b/keil/include/components/uwb/inc/uwb_api.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019-2023 Beijing Hanwei Innovation Technology Ltd. Co. and
+ * Copyright (c) 2019-2025 Beijing Hanwei Innovation Technology Ltd. Co. and
  * its subsidiaries and affiliates (collectly called MKSEMI).
  *
  * All rights reserved.
@@ -49,15 +49,6 @@
  * @{
  */
 
-/** Fira Certification */
-#ifndef FIRA_TEST_EN
-#define FIRA_TEST_EN (1)
-#endif
-
-#ifndef MCTT_TEST_EN
-#define MCTT_TEST_EN (0)
-#endif
-
 #ifndef DYNAMIC_UPDATE_MAIN_ANTENNA_EN
 #define DYNAMIC_UPDATE_MAIN_ANTENNA_EN (0)
 #endif
@@ -89,7 +80,8 @@
 #define SESSION_TYPE_RANGING_ONLY (0x03)
 #define SESSION_TYPE_IN_BAND_DATA (0x04)
 #define SESSION_TYPE_RANGING_WITH_DATA (0x05)
-// 0xA0-0x9F Reserved for Vendor Specific use case
+#define SESSION_TYPE_CCC_RANGING (0xA0)
+// 0xA1-0x9F Reserved for Vendor Specific use case
 // device test mode, 0xD1-0xDF RFU
 #define SESSION_TYPE_DEVICE_TEST_MODE (0xD0)
 // 0xE0-0xFE  Vendor Specific use
@@ -97,8 +89,6 @@
 #define SESSION_TYPE_VENDOR_ALONE_RADAR (0xFE)
 
 #define FREQ_OFFSET_SAMPLES_NUM 5
-
-#define INITIATION_NUM (4)
 
 // In Fira spec the number of controlees 1~8
 #ifndef RESPONDER_NUM_MAX
@@ -145,6 +135,8 @@
 #define UWB_MODE_VENDOR_RX 9
 #define UWB_MODE_VENDOR_CARRIER_TX 10
 #define UWB_MODE_TEST_SS_TWR 11
+#define UWB_MODE_TEST_DS_TWR 12
+#define UWB_MODE_PDOA_CAL 13
 
 /** UWB status */
 enum UWB_STATUS_T
@@ -211,6 +203,8 @@
 {
     DEV_TYPE_CONTROLEE = 0,
     DEV_TYPE_CONTROLLER = 1,
+    DEV_TYPE_DEVICE = 0xA0,
+    DEV_TYPE_VEHICLE = 0xA1,
 };
 
 /** UWB device role */
@@ -278,7 +272,8 @@
     /* MKSEMI parameters */
     SFD5_NON_STD_LEN8 = 5,   // non-std 8
     SFD6_NON_STD_LEN16 = 6,  // non-std 16
-    SFD7_STD_LONG_LEN64 = 7, // 15.4a long
+    SFD7_NON_STD_LEN64 = 7,  // non-std 64
+    SFD8_STD_LONG_LEN64 = 8, // 15.4a long
 };
 
 /** UWB PSDU data rate */
@@ -350,7 +345,7 @@
 /** UWB MAC address mode */
 enum MAC_ADDRESS_MODE_T
 {
-    ARRD_SHORT_USE_SHORT = 0, // MAC address is 2 bytes and 2 bytes to be used in MAC header
+    ADDR_SHORT_USE_SHORT = 0, // MAC address is 2 bytes and 2 bytes to be used in MAC header
     ADDR_LONG_USE_SHORT = 1,  // MAC address is 8 bytes and 2 bytes to be used in MAC header (Not supported)
     ADDR_LONG_USE_LONG = 2,   // MAC address is 8 bytes and 8 bytes to be used in MAC header
 };
@@ -375,6 +370,7 @@
 {
     SP0 = 0,
     SP1 = 1,
+    SP2 = 2,
     SP3 = 3,
 };
 
@@ -388,6 +384,7 @@
     RANGING_FLOW_SIMPLE = 4,
     RANGING_FLOW_CONTENTION = 5,
     RANGING_FLOW_DATA_TRANSFER = 6,
+    RANGING_FLOW_ALIRO = 7,
 };
 
 /** UWB ranging stage */
@@ -501,11 +498,7 @@
 
     uint16_t max_rr_retry; // 0x2A
     uint8_t res4[2];
-#if FIRA_TEST_EN
-    uint32_t uwb_initiation_time; // 0x2B
-#else
-    uint64_t uwb_initiation_time; // 0x2B
-#endif
+    uint32_t uwb_initiation_time;    // 0x2B
     uint8_t hopping_mode;            // 0x2C
     uint8_t stride_length;           // 0x2D
     uint8_t result_report_config;    // 0x2E
@@ -560,14 +553,22 @@
 
     /* Reserved for Vendor Specific use 0xA0-0xDF */
     /* Additional configuration applicable only for CCC */
-    uint32_t hop_mode_key;      // 0xA0
-    uint16_t ranging_proto_ver; // 0xA3
-    uint16_t uwb_cfg_id;        // 0xA4
-    uint8_t pulseshape_combo;   // 0xA5
+    uint32_t hop_mode_key;                  // 0xA0
+    uint8_t ccc_responder_slot_idx;         // 0xA2
+    uint8_t pulseshape_combo;               // 0xA5
+    uint16_t ranging_proto_ver;             // 0xA3
+    uint16_t uwb_cfg_id;                    // 0xA4
+    uint16_t ursk_ttl;                      // 0xA6
+    uint32_t last_sts_index_used;           // 0xA8
+    uint8_t responder_participation_config; // 0xA7
+
+    /* Additional configuration applicable only for aliro */
+    uint8_t ranging_round_num; // 0xA9
+    uint8_t hopping_offset;    // 0xAA
 
     /* Reserved for Vendor Specific Use */
     uint8_t tx_power_level;    // 0xF2
-    uint8_t rx_ant_id;         // 0xF3
+    uint8_t rx_main_ant;       // 0xF3
     uint8_t per_payload_check; // 0xF4
     /* Coded in us with bit 15 == 0 */
     /* Coded in ms when bit 15 == 1 */
@@ -593,7 +594,7 @@
     uint8_t uwb_radar_pulse_period; // 0xF7   Octet[2]
     /* UWB radar rx filter gain level
      * 0 ~ 21 (default = 15) */
-    uint8_t uwb_radar_rx_gain_level; // 0xF7   Octet[3]
+    uint8_t uwb_radar_filter_gain_level; // 0xF7   Octet[3]
     /* UWB radar lna gain level 0 ~ 5
      * (defalut = 5) */
     uint8_t uwb_radar_lna_gain_level; // 0xF7   Octet[4]
@@ -601,7 +602,7 @@
     uint8_t uwb_radar_tx_power_level; // 0xF7   Octet[5]
     /* UWB radar tx pulse width
      * 0x00: 2ns (Bandwidth 500M)
-     * 0x01: 0.92ns (Bandwidth 900M)
+     * 0x03: 0.92ns (Bandwidth 900M)
      * 0x02: 0.75ns (Bandwidth 1.3G)
      * (defalut = 0x02) */
     uint8_t uwb_radar_bandwidth; // 0xF7   Octet[6]
@@ -741,8 +742,8 @@
     uint8_t *data;
 };
 
-/** UWB ranging measurement report */
-struct RANGING_MEASUREMENT_T
+/** UWB two-way ranging measurement report */
+struct TWR_MEASUREMENT_T
 {
     uint8_t mac_addr[8];
     uint8_t status;
@@ -759,8 +760,7 @@
     uint8_t aoa_dst_azimuth_fom;
     uint8_t aoa_dst_elevation_fom;
     uint8_t slot_idx;
-    uint8_t rfu[12];
-    uint8_t reserved;
+    uint32_t rfu[3];
 };
 
 /** UWB ranging data report */
@@ -770,11 +770,41 @@
     uint32_t session_id;
     // unit: ms
     uint32_t ranging_interval;
-    uint8_t rcr_ind;
     uint8_t ranging_type;
+    uint8_t rfu;
     uint8_t mac_addr_mode;
     uint8_t measurements_num;
-    struct RANGING_MEASUREMENT_T measurements[MEASUREMENT_NUM_MAX];
+    struct TWR_MEASUREMENT_T measurements[MEASUREMENT_NUM_MAX];
+};
+
+/** CCC ranging measurement report */
+struct CCC_MEASUREMENT_T
+{
+    uint8_t status;
+    uint8_t slot_index;
+    uint16_t rr_index;
+    uint32_t sts_index;
+    uint16_t distance;
+    uint8_t anchor_fom;
+    uint8_t initiator_fom;
+    int16_t aoa_azimuth;
+    int16_t aoa_elevation;
+    uint8_t aoa_azimuth_fom;
+    uint8_t aoa_elevation_fom;
+};
+
+/** UWB ranging data report */
+struct CCC_RANGE_DATA_T
+{
+    uint32_t sequence_num;
+    uint32_t session_id;
+    // unit: ms
+    uint32_t ranging_interval;
+    uint8_t ranging_type;
+    uint8_t rfu;
+    uint8_t mac_addr_mode;
+    uint8_t measurements_num;
+    struct CCC_MEASUREMENT_T measurements[MEASUREMENT_NUM_MAX];
 };
 
 /** UWB test environment variable */
@@ -786,6 +816,13 @@
     uint8_t *tx_pkt_data;
     uint32_t trx_count_packet; /* This variable used to count how many packets were received or sent */
     uint32_t sync_time;        /* This variable is used to record the timestamp of the synchronization moment (unit:8ns) */
+};
+
+/** UWB data transfer report */
+struct DATA_TRANSFER_T
+{
+    uint16_t length;
+    uint8_t data[256];
 };
 
 /** UWB operations handler */
@@ -801,7 +838,9 @@
     uint8_t (*session_responder_num_get)(void);
     uint16_t (*session_responder_addr_get)(uint8_t idx);
     uint8_t (*session_dynamic_update_responder_list)(uint8_t action, uint16_t addr);
-    void (*session_set_ccc_ursk)(const uint8_t *ursk);
+    void (*session_initiator_addr_set)(uint16_t short_addr);
+    void (*session_controller_addr_set)(uint16_t short_addr);
+    bool (*session_set_ccc_ursk)(uint32_t session_id, const uint8_t *ursk);
     void (*vendor_session_start)(void);
     void (*vendor_session_stop)(void);
     void (*vendor_session_configure)(void);
@@ -810,7 +849,7 @@
 /** UWB application configuration */
 struct UWB_APP_CFG_T
 {
-    struct UWB_CONFIG_T ppdu_params;
+    struct UWB_CONFIG_T *ppdu_params;
     struct APP_CFG_PARAM_T session_param;
     struct TEST_CFG_PARAM_T test_param;
 
@@ -843,6 +882,7 @@
 extern "C" {
 #endif
 
+extern struct UWB_CONFIG_T uwb_ppdu_params;
 extern struct UWB_APP_CFG_T uwb_app_config;
 extern struct TEST_ENV_T test_env;
 extern struct TEST_PER_RX_T uci_test_rx_per;
@@ -853,6 +893,7 @@
 typedef void (*test_per_rx_report_cb_t)(struct TEST_PER_RX_T *report);
 typedef void (*test_rx_report_cb_t)(struct TEST_RX_T *report);
 typedef void (*test_ss_twr_report_cb_t)(uint8_t *, uint32_t);
+typedef void (*test_ds_twr_report_cb_t)(uint8_t *, uint32_t);
 typedef void (*vendor_rx_report_cb_t)(const uint16_t *data_len, const uint8_t *data);
 typedef uint8_t (*vendor_user_defined_data_process_cb_t)(uint16_t cmd_len, const uint8_t *p_cmd);
 
@@ -1002,6 +1043,11 @@
 uint8_t uwbapi_test_config_get(struct TEST_CFG_PARAM_T *param);
 
 /**
+ * @brief Configure STS for the test session.
+ */
+void uwbapi_test_sts_config(void);
+
+/**
  * @brief Start periodic TX test.
  * @param[in] psdu_len          the length of packet to be sent periodically.
  * @param[in] psdu_data         the packet data to be sent periodically, including FCS.
@@ -1040,6 +1086,13 @@
  * @return UWB Status code @ref UWB_STATUS_T
  */
 uint8_t uwbapi_test_ss_twr(test_ss_twr_report_cb_t func);
+
+/**
+ * @brief Start DS-TWR test, This API can be used to measure single DS-TWR ToF using SP0/SP3 packets.
+ * @param[in] func          callback function to report result.
+ * @return UWB Status code @ref UWB_STATUS_T
+ */
+uint8_t uwbapi_test_ds_twr(test_ds_twr_report_cb_t func);
 
 /**
  * @brief Stop the test session.
@@ -1159,11 +1212,12 @@
 
 /**
  * @brief Set URSK for CCC work mode
+ * @param[in] session_id session id
  * @param[in] ursk URSK data.
  * @param[in] len URSK length.
  * @return UWB Status code @ref UWB_STATUS_T
  */
-uint8_t uwbapi_vendor_set_ccc_ursk(const uint8_t *ursk, uint16_t len);
+uint8_t uwbapi_vendor_set_ccc_ursk(uint32_t session_id, const uint8_t *ursk, uint16_t len);
 
 /**
  * @}
@@ -1186,6 +1240,13 @@
  * @param[in] op            processing handler list.
  */
 void uwbs_handler_init(struct UWB_OP_T *op);
+
+/**
+ * @brief Change the UWB parameter configuration.
+ * @note This API should be called after session stop, and take effect after session start.
+ * @param[in] ppdu_params       Point to the UWB configuration parameters.
+ */
+void uwbs_ppdu_params_change(struct UWB_CONFIG_T *ppdu_params);
 
 /**
  * @brief Configure UWB transceiver work at TX or RX mode.
@@ -1268,6 +1329,36 @@
 void uwbs_pan_id_set(uint16_t pan_id);
 
 /**
+ * @brief Get Imm-Ack cfg value
+ * @return immack cfg value
+ */
+uint8_t uwbs_immack_cfg_get(void);
+
+/**
+ * @brief Set Imm-Ack cfg value
+ * @param[in] immack_cfg        cfg value for immack. 1 to open it and 0 to close it
+ */
+void uwbs_immack_cfg_set(uint8_t immack_cfg);
+
+/**
+ * @brief Get current immack sn value
+ * @return current immack sn value
+ */
+uint8_t uwbs_immack_sn_get(void);
+
+/**
+ * @brief Set the packet sn within the frame control field
+ * @param[in] pkt_sn
+ */
+void uwbs_immack_sn_set(uint8_t pkt_sn);
+
+/**
+ * @brief Set the timeout value for immack wait time at tx side
+ * @param[in] timeout_us   timeout with us unit
+ */
+void uwbs_immack_waitack_timeout_set(uint16_t timeout_us);
+
+/**
  * @brief Enable or disable UWBS security.
  * @param[in] en        Enable or disable
  */
@@ -1280,6 +1371,12 @@
 uint8_t uwbs_ccc_uwb_config_id_set(uint16_t uwb_cfg_id);
 
 /**
+ * @brief Set pulse shape combination for CCC.
+ * @param[in] pulseshape_combo  pulse shape combination
+ */
+uint8_t uwbs_ccc_pulseshape_combo_set(uint8_t pulseshape_combo);
+
+/**
  * @brief Clear RSSI statistical result in PER test procedure.
  */
 void uwbs_clear_rssi(void);

--
Gitblit v1.9.3