| | |
| | | /* |
| | | * 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. |
| | |
| | | #include "mk_power.h" |
| | | #include "mk_uwb.h" |
| | | #include "mk_radar.h" |
| | | #include "mk_sleep_timer.h" |
| | | #include "mk_misc.h" |
| | | #include "uwb_api.h" |
| | | #include "uwb_radar_task.h" |
| | | #include "uwb_radar.h" |
| | | #if UWB_RADAR_DETECT_PROCESS_EN |
| | | #include "mk8000_present_interface.h" |
| | | #include "MK8000_presence_interface.h" |
| | | #endif |
| | | |
| | | // #include "board.h" |
| | | |
| | | #define DEBUG_MEM_ADDR 0x02010000 |
| | |
| | | uint16_t header; |
| | | uint16_t length; |
| | | uint32_t seq; |
| | | float acd_out[PULSE_PERIOD_POINTS(0) * 2]; |
| | | float adc_out[PULSE_PERIOD_POINTS(0) * 2]; |
| | | uint16_t check_num; |
| | | uint16_t end; |
| | | }; |
| | |
| | | uint16_t header; |
| | | uint16_t length; |
| | | uint32_t seq; |
| | | float acd_out[PULSE_PERIOD_POINTS(1) * 2]; |
| | | float adc_out[PULSE_PERIOD_POINTS(1) * 2]; |
| | | uint16_t check_num; |
| | | uint16_t end; |
| | | }; |
| | |
| | | uint16_t header; |
| | | uint16_t length; |
| | | uint32_t seq; |
| | | float acd_out[PULSE_PERIOD_POINTS(2) * 2]; |
| | | float adc_out[PULSE_PERIOD_POINTS(2) * 2]; |
| | | uint16_t check_num; |
| | | uint16_t end; |
| | | }; |
| | |
| | | uint16_t header; |
| | | uint16_t length; |
| | | uint32_t seq; |
| | | float acd_out[PULSE_PERIOD_POINTS(3) * 2]; |
| | | float adc_out[PULSE_PERIOD_POINTS(3) * 2]; |
| | | uint16_t check_num; |
| | | uint16_t end; |
| | | }; |
| | |
| | | uint16_t header; |
| | | uint16_t length; |
| | | uint32_t seq; |
| | | float acd_out[PULSE_PERIOD_POINTS(4) * 2]; |
| | | float adc_out[PULSE_PERIOD_POINTS(4) * 2]; |
| | | uint16_t check_num; |
| | | uint16_t end; |
| | | }; |
| | |
| | | uint16_t header; |
| | | uint16_t length; |
| | | uint32_t seq; |
| | | float acd_out[OUT_FRAME_LEN * UWB_RADAR_RX_PORT_NUM]; |
| | | float adc_out[OUT_FRAME_LEN * UWB_RADAR_RX_PORT_NUM]; |
| | | uint16_t check_num; |
| | | uint16_t end; |
| | | }; |
| | |
| | | power_on_radio(1, 1); |
| | | radar_start(radar_env.rx_ant_idx); |
| | | power_mode_request(POWER_UNIT_APP, POWER_MODE_SLEEP); |
| | | // LOG_INFO(TRACE_MODULE_APP, "radar start\r\n"); |
| | | } |
| | | break; |
| | | |
| | |
| | | radar_disable(); |
| | | power_mode_request(POWER_UNIT_APP, POWER_MODE_POWER_DOWN); |
| | | |
| | | radar_data_process((uint32_t *)DEBUG_MEM_ADDR, xfer_pack.sample_1tnr.acd_out, &data_len); |
| | | radar_data_process((uint32_t *)DEBUG_MEM_ADDR, xfer_pack.sample_1tnr.adc_out, &data_len); |
| | | uwb_radar_destroy_event(); |
| | | // LOG_INFO(TRACE_MODULE_APP, "radar done\r\n"); |
| | | |
| | | #if UWB_RADAR_UCI_EN |
| | | uwbapi_report_radar_raw_data(data_len, (uint8_t *)xfer_pack.sample_1tnr.acd_out); |
| | | uwbapi_report_radar_raw_data(data_len, (uint8_t *)xfer_pack.sample_1tnr.adc_out); |
| | | LOG_INFO(TRACE_MODULE_APP, "Radar output data len: %u\r\n", data_len); |
| | | #else |
| | | #if UWB_RADAR_DETECT_PROCESS_EN |
| | | // board_led_on(BOARD_LED_1); |
| | | mcu_target_detect_process(xfer_pack.sample_1tnr.acd_out, PULSE_PERIOD_POINTS(UWB_RADAR_PULSE_PERIOD), &pre_para, &present); |
| | | mcu_target_detect_process(xfer_pack.sample_1tnr.adc_out, PULSE_PERIOD_POINTS(UWB_RADAR_PULSE_PERIOD), &pre_para, &present); |
| | | /* Object detection, the result shows */ |
| | | if (present.flag) |
| | | { |
| | |
| | | LOG_INFO(TRACE_MODULE_APP, "Radar output data len: %u\r\n", data_len); |
| | | xfer_pack.sample_1tnr.length = data_len + SAMPLE_PACK_FIX_LENGTH; |
| | | xfer_pack.sample_1tnr.seq = radar_env.rx_ant_idx; |
| | | uint16_t check_num = uwb_radar_data_checksum((const uint8_t *)xfer_pack.sample_1tnr.acd_out, data_len); |
| | | uint16_t check_num = uwb_radar_data_checksum((const uint8_t *)xfer_pack.sample_1tnr.adc_out, data_len); |
| | | |
| | | #if UWB_RADAR_1TNR_MODE == 1 |
| | | xfer_pack.sample_1tnr.check_num = check_num; |
| | |
| | | radar_disable(); |
| | | power_mode_request(POWER_UNIT_APP, POWER_MODE_POWER_DOWN); |
| | | |
| | | radar_data_process((uint32_t *)DEBUG_MEM_ADDR, xfer_pack.sample_1tnr.acd_out, &data_len); |
| | | radar_data_process((uint32_t *)DEBUG_MEM_ADDR, xfer_pack.sample_1tnr.adc_out, &data_len); |
| | | |
| | | #if UWB_RADAR_UCI_EN |
| | | uwbapi_report_radar_raw_data(data_len, (uint8_t *)xfer_pack.sample_1tnr.acd_out); |
| | | uwbapi_report_radar_raw_data(data_len, (uint8_t *)xfer_pack.sample_1tnr.adc_out); |
| | | LOG_INFO(TRACE_MODULE_APP, "Radar output data len: %u\r\n", data_len); |
| | | #else |
| | | #if RADAR_PRINT_EN |
| | | LOG_INFO(TRACE_MODULE_APP | TRACE_NO_OPTION, "--------------%u--------------\r\n", data_len); |
| | | for (uint8_t i = 0; i < PULSE_PERIOD_POINTS(UWB_RADAR_PULSE_PERIOD); i++) |
| | | { |
| | | LOG_INFO(TRACE_MODULE_APP | TRACE_NO_OPTION, "%.2f %.2f\n", xfer_pack.sample_1tnr.acd_out[i * 2], |
| | | xfer_pack.sample_1tnr.acd_out[i * 2 + 1]); |
| | | LOG_INFO(TRACE_MODULE_APP | TRACE_NO_OPTION, "%.2f %.2f\n", xfer_pack.sample_1tnr.adc_out[i * 2], |
| | | xfer_pack.sample_1tnr.adc_out[i * 2 + 1]); |
| | | } |
| | | #endif |
| | | #if UWB_RADAR_DETECT_PROCESS_EN |
| | | // board_led_on(BOARD_LED_1); |
| | | mcu_target_detect_process(xfer_pack.sample_1tnr.acd_out, PULSE_PERIOD_POINTS(UWB_RADAR_PULSE_PERIOD), &pre_para, &present); |
| | | mcu_target_detect_process(xfer_pack.sample_1tnr.adc_out, PULSE_PERIOD_POINTS(UWB_RADAR_PULSE_PERIOD), &pre_para, &present); |
| | | /* Object detection, the result shows */ |
| | | if (present.flag) |
| | | { |
| | |
| | | LOG_INFO(TRACE_MODULE_APP, "Radar output data len: %u\r\n", data_len); |
| | | xfer_pack.sample_1tnr.length = data_len + SAMPLE_PACK_FIX_LENGTH; |
| | | xfer_pack.sample_1tnr.seq = radar_env.rx_ant_idx; |
| | | uint16_t check_num = uwb_radar_data_checksum((const uint8_t *)xfer_pack.sample_1tnr.acd_out, data_len); |
| | | uint16_t check_num = uwb_radar_data_checksum((const uint8_t *)xfer_pack.sample_1tnr.adc_out, data_len); |
| | | #if UWB_RADAR_1TNR_MODE == 1 |
| | | xfer_pack.sample_1tnr.check_num = check_num; |
| | | xfer_pack.sample_1tnr.end = 0xAAAA; |