| | |
| | | /* |
| | | * 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. |
| | |
| | | srand(seed); |
| | | LOG_INFO(TRACE_MODULE_APP, "Random seed %u\r\n", seed); |
| | | |
| | | phy_rx_sts_switch_mode_set(uwb_app_config.ppdu_params.sts_pkt_cfg, STS_NEVER_SWITCH, 0, 0); |
| | | uwbs_configure(PHY_TX | PHY_RX, uwb_app_config.session_param.tx_power_level); |
| | | |
| | | aoa_param_config(); |
| | | phy_rx_sts_switch_mode_set(uwb_app_config.ppdu_params->sts_pkt_cfg, STS_NEVER_SWITCH, 0, 0); |
| | | |
| | | sts_param_config(uwb_app_config.ppdu_params->sts_pkt_cfg, STS_AUX_ANT_IQ_RSSI, STS_BUF_NUM, STS_BUF_SIZE); |
| | | } |
| | | |
| | | static uint32_t ul_tdoa_tx_offset_get(void) |
| | |
| | | } |
| | | if (count > MS_TO_PHY_TIMER_COUNT(2)) |
| | | { |
| | | power_on_radio(0, 1); |
| | | ul_tdoa_env.stage = UL_TDOA_LISTEN; |
| | | mac_rx(EVT_MODE_MAC_PHY_ASAP, 0, count - MS_TO_PHY_TIMER_COUNT(2)); |
| | | mac_start(); |
| | | uwb_rx(RX_MODE_IMMEDIATE, 0, count - MS_TO_PHY_TIMER_COUNT(2)); |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | power_on_radio(0, 1); |
| | | ul_tdoa_env.stage = UL_TDOA_LISTEN; |
| | | mac_rx(EVT_MODE_MAC_PHY_ASAP, 0, ul_tdoa_env.random_window); |
| | | mac_start(); |
| | | uwb_rx(RX_MODE_IMMEDIATE, 0, ul_tdoa_env.random_window); |
| | | } |
| | | |
| | | ul_tdoa_env.enable = 1; |
| | |
| | | enum OWR_MESSAGE_TYPE_T type = (uwb_app_config.session_param.device_role == DEV_ROLE_UT_SYNC_ANCHOR ? OWR_SYNV_UTM : OWR_BLINK_UTM); |
| | | |
| | | ul_tdoa_pkt_construct(type, tx_time); |
| | | power_on_radio(1, 0); |
| | | mac_tx(EVT_MODE_MAC_ASAP_PHY_FIX, ul_tdoa_env.anchor_point + ul_tdoa_env.tx_offset, 0, tx_msg, tx_msg_len); |
| | | mac_start(); |
| | | |
| | | uwb_tx(tx_msg, tx_msg_len, TX_MODE_DEFER, ul_tdoa_env.anchor_point + ul_tdoa_env.tx_offset); |
| | | } |
| | | |
| | | void ul_tdoa_process(const struct MAC_HW_REPORT_T *ind) |
| | | { |
| | | enum DEV_ROLE_T role = uwb_app_config.session_param.device_role; |
| | | // Power off radio |
| | | power_off_radio(); |
| | | |
| | | if (role == DEV_ROLE_UT_SYNC_ANCHOR) |
| | | { |
| | | if (ul_tdoa_env.stage == UL_TDOA_LISTEN) |
| | |
| | | if (count > MS_TO_PHY_TIMER_COUNT(2)) |
| | | { |
| | | ul_tdoa_env.stage = UL_TDOA_LISTEN; |
| | | mac_rx(EVT_MODE_MAC_PHY_ASAP, 0, count - MS_TO_PHY_TIMER_COUNT(2)); |
| | | mac_start(); |
| | | uwb_rx(RX_MODE_IMMEDIATE, 0, count - MS_TO_PHY_TIMER_COUNT(2)); |
| | | } |
| | | else |
| | | { |
| | | ul_tdoa_env.stage = UL_TDOA_TX_SYNC; |
| | | phy_timer_target_set(ul_tdoa_env.anchor_point + ul_tdoa_env.tx_offset - UWB_PERIOD_PREFETCH_TIME, ul_tdoa_timer_callback); |
| | | power_off_radio(); |
| | | } |
| | | } |
| | | else if (role == DEV_ROLE_UT_TAG) |
| | |
| | | ul_tdoa_env.anchor_point += ul_tdoa_env.ranging_period; |
| | | |
| | | phy_timer_target_set(ul_tdoa_env.anchor_point + ul_tdoa_env.tx_offset - UWB_PERIOD_PREFETCH_TIME, ul_tdoa_timer_callback); |
| | | power_off_radio(); |
| | | |
| | | LOG_INFO(TRACE_MODULE_APP, "UL-TDoA TX Blink %u\r\n", ul_tdoa_env.sequence_num); |
| | | } |
| | |
| | | ul_tdoa_rx_ind(ind->err_code, ind->pkt_data, ind->pkt_len, timestamp); |
| | | } |
| | | |
| | | mac_rx(EVT_MODE_MAC_PHY_ASAP, 0, ul_tdoa_env.random_window); |
| | | mac_start(); |
| | | uwb_rx(RX_MODE_IMMEDIATE, 0, ul_tdoa_env.random_window); |
| | | } |
| | | } |
| | | |