| | |
| | | { |
| | | const struct UWB_PKT_TX_DONE_IND_T *ind = (const struct UWB_PKT_TX_DONE_IND_T *)param; |
| | | |
| | | if (ind->status != UWB_TX_OK) |
| | | { |
| | | LOG_INFO(TRACE_MODULE_APP, "UWB TX fail 0x%04x\r\n", ind->status); |
| | | break; |
| | | } |
| | | |
| | | if (ind->slot_idx == 0) |
| | | { |
| | | ranging_env.range_data.sequence_num = (ranging_env.phy_sts_index - fira_key.phyStsIdxInit) / ranging_env.slots_per_block; |
| | | uint8_t work_mode_idx = uwb_app_config.session_param.ranging_round_usage < 5 ? uwb_app_config.session_param.ranging_round_usage : 0; |
| | | #if MCTT_TEST_EN |
| | | LOG_INFO(TRACE_NO_OPTION, "%s Init-seq:%u\r\n", work_mode_table[work_mode_idx], ranging_env.range_data.sequence_num + 1); |
| | | LOG_INFO(TRACE_NO_OPTION, "%s Init-seq:%u Ridx:%d\r\n", work_mode_table[work_mode_idx], ranging_env.range_data.sequence_num, |
| | | ranging_env.next_round_index); |
| | | #else |
| | | LOG_INFO(TRACE_MODULE_APP | TRACE_NO_OPTION, "\r\n"); |
| | | LOG_INFO(TRACE_MODULE_APP, "FiRa %s Initiator SEQ NUM %u\r\n", work_mode_table[work_mode_idx], ranging_env.range_data.sequence_num); |
| | | LOG_INFO(TRACE_MODULE_APP, "FiRa %s Controller SEQ NUM %u\r\n", work_mode_table[work_mode_idx], ranging_env.range_data.sequence_num); |
| | | #endif |
| | | uwb_app_config.ranging_count++; |
| | | |
| | |
| | | uint8_t work_mode_idx = uwb_app_config.session_param.ranging_round_usage < 5 ? uwb_app_config.session_param.ranging_round_usage : 0; |
| | | ranging_env.range_data.sequence_num = (ranging_env.phy_sts_index - fira_key.phyStsIdxInit) / ranging_env.slots_per_block; |
| | | #if MCTT_TEST_EN |
| | | LOG_INFO(TRACE_NO_OPTION, "%s Resp-seq:%u Ridx:%d\r\n", work_mode_table[work_mode_idx], ranging_env.range_data.sequence_num + 1, |
| | | LOG_INFO(TRACE_NO_OPTION, "%s Resp-seq:%u Ridx:%d\r\n", work_mode_table[work_mode_idx], ranging_env.range_data.sequence_num, |
| | | ranging_env.next_round_index); |
| | | #else |
| | | LOG_INFO(TRACE_NO_REPORT_HOST | TRACE_MODULE_APP | TRACE_NO_OPTION, "\r\n"); |
| | | LOG_INFO(TRACE_NO_REPORT_HOST | TRACE_MODULE_APP, "FiRa %s Responder SEQ NUM %u\r\n", work_mode_table[work_mode_idx], |
| | | LOG_INFO(TRACE_NO_REPORT_HOST | TRACE_MODULE_APP, "FiRa %s Controlee SEQ NUM %u\r\n", work_mode_table[work_mode_idx], |
| | | ranging_env.range_data.sequence_num); |
| | | #endif |
| | | // clear last round measurement |
| | |
| | | #if MCTT_TEST_EN == 0 |
| | | LOG_INFO(TRACE_MODULE_APP, "CH Freq Offset %d\r\n", ranging_env.freq_offset_filter); |
| | | #endif |
| | | #if XTAL_AUTO_TUNE_EN |
| | | |
| | | #if (X38M4_AUTO_TUNE_EN == 1) |
| | | int32_t ppm = ranging_env.freq_offset_filter / (int32_t)(ch_center_freq_map[uwb_app_config.ppdu_params.ch_num] * 1e-6); |
| | | calib_xtal38m4_load_cap_auto_tune(ppm); |
| | | #endif |
| | |
| | | |
| | | if (ind->ranging_stage == RANGING_RIM || ind->ranging_stage == RANGING_RRM) |
| | | { |
| | | struct RANGING_MEASUREMENT_T *range_result = 0; |
| | | struct TWR_MEASUREMENT_T *range_result = 0; |
| | | if (ind->ranging_stage == RANGING_RIM) |
| | | { |
| | | range_result = &ranging_env.range_data.measurements[0]; |
| | |
| | | } |
| | | else if (ind->ranging_stage == RANGING_RFM) |
| | | { |
| | | struct RANGING_MEASUREMENT_T *range_result = &ranging_env.range_data.measurements[0]; |
| | | struct TWR_MEASUREMENT_T *range_result = &ranging_env.range_data.measurements[0]; |
| | | uint8_t NLoS, FoM; |
| | | ranging_fom_get(&NLoS, &FoM); |
| | | if (NLoS > range_result->NLoS) |
| | |
| | | if (res) |
| | | { |
| | | // LOG_INFO(TRACE_MODULE_APP, "ToF %d\r\n", ranging_env.tof); |
| | | struct RANGING_MEASUREMENT_T *range_result = &ranging_env.range_data.measurements[0]; |
| | | struct TWR_MEASUREMENT_T *range_result = &ranging_env.range_data.measurements[0]; |
| | | ranging_env.range_data.measurements_num = 1; |
| | | range_result->status = STATUS_OK; |
| | | |
| | |
| | | range_result->distance, mk_q7_to_s16(range_result->aoa_azimuth), mk_q7_to_s16(range_result->aoa_elevation), |
| | | range_result->aoa_azimuth_fom); |
| | | #elif AOA_EN |
| | | #if MCTT_TEST_EN |
| | | LOG_INFO(TRACE_NO_OPTION, "dt.%d.%d.%d\r\n", range_result->distance, mk_q7_to_s16(range_result->aoa_azimuth), |
| | | mk_q7_to_s16(range_result->aoa_elevation)); |
| | | #else |
| | | LOG_INFO(TRACE_NO_REPORT_HOST | TRACE_MODULE_APP, "Distance %ucm, AoA Azimuth %d Elevation %d Azimuth FoM %u\r\n", |
| | | range_result->distance, mk_q7_to_s16(range_result->aoa_azimuth), mk_q7_to_s16(range_result->aoa_elevation), |
| | | range_result->aoa_azimuth_fom); |
| | | |
| | | #endif |
| | | #else |
| | | LOG_INFO(TRACE_NO_REPORT_HOST | TRACE_MODULE_APP, "Distance %ucm\r\n", (int16_t)range_result->distance); |
| | | #endif |
| | |
| | | |
| | | // int8_t expected_rssi = ranging_expected_rssi_get(ranging_tx_power_get(), range_result->distance, 2, 0); |
| | | // LOG_INFO(TRACE_MODULE_APP, "Expected RSSI: %ddBm\r\n", expected_rssi); |
| | | |
| | | // calculate_first_tap_power(1, 2); |
| | | // print_preamble_chest(ranging_env.range_data.sequence_num, 1, 2); |
| | | // print_sts_ch_taps(1, 2); |
| | | } |
| | | } |
| | | |
| | |
| | | #if MCTT_TEST_EN |
| | | if (ind->ranging_stage == RANGING_RCM || ind->ranging_stage == RANGING_MRM || ind->ranging_stage == RANGING_RRRM) |
| | | { |
| | | if (ind->ranging_stage != RANGING_RRRM) |
| | | { |
| | | LOG_INFO(TRACE_NO_LEVEL_TAG | TRACE_NO_MODULE_NAME, "r%s tp=%x,%x,%x,%d\r\n", fira_fsm_table[stage_idx], ind->timestamp, |
| | | ind->phy_header, ranging_env.phy_sts_index, ind->slot_idx); |
| | | } |
| | | else |
| | | { |
| | | LOG_INFO(TRACE_NO_LEVEL_TAG | TRACE_NO_MODULE_NAME, "r%s,%x,%x,%d\r\n", fira_fsm_table[stage_idx], ind->phy_header, |
| | | ranging_env.phy_sts_index, ind->slot_idx); |
| | | } |
| | | // uint32_t sts_index = fira_key.phyStsIdxInit + ranging_env.curr_round_index * uwb_app_config.session_param.slots_per_round; |
| | | LOG_INFO(TRACE_NO_LEVEL_TAG | TRACE_NO_MODULE_NAME, "r%s tp=%x,%x,%x,%d\r\n", fira_fsm_table[stage_idx], ind->timestamp, |
| | | ind->phy_header, ranging_env.phy_sts_index, ind->slot_idx); |
| | | } |
| | | else |
| | | { |
| | | LOG_INFO(TRACE_NO_LEVEL_TAG | TRACE_NO_MODULE_NAME, "r%s\r\n", fira_fsm_table[stage_idx]); |
| | | LOG_INFO(TRACE_NO_LEVEL_TAG | TRACE_NO_MODULE_NAME, "r%s tp=%x,%x,%x\r\n", fira_fsm_table[stage_idx], ind->timestamp, |
| | | ranging_env.curr_round_index, ranging_env.range_data.sequence_num); |
| | | } |
| | | #else |
| | | #if DYNAMIC_UPDATE_MAIN_ANTENNA_EN |
| | |
| | | if ((payload_print_len + ind->rx_len) < PAYLOAD_BUF_MAX) |
| | | { |
| | | memcpy(payload_print_buf + payload_print_len, ind->rx_data, ind->rx_len); |
| | | if (uwb_app_config.session_param.sts_config == STS_DYNAMIC) |
| | | { |
| | | extern uint8_t vendor_oui_output[16]; |
| | | memcpy(payload_print_buf + payload_print_len + 10, vendor_oui_output, 16); |
| | | } |
| | | payload_print_len += ind->rx_len; |
| | | } |
| | | else |
| | |
| | | { |
| | | // output result (notify) |
| | | uwbapi_report_ranging_data(&ranging_env.range_data); |
| | | |
| | | // calculate_first_tap_power(0, 1); |
| | | // print_preamble_chest(ranging_env.range_data.sequence_num, 0, 1); |
| | | // print_sts_ch_taps(0, 1); |
| | | } |
| | | } |
| | | } |