first commit
This commit is contained in:
13
application/samples/radar/sta_sample/CMakeLists.txt
Executable file
13
application/samples/radar/sta_sample/CMakeLists.txt
Executable file
@ -0,0 +1,13 @@
|
||||
#===============================================================================
|
||||
# @brief cmake file
|
||||
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2023-2023. All rights reserved.
|
||||
#===============================================================================
|
||||
set(SOURCES
|
||||
"${SOURCES}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/radar_sta_sample.c"
|
||||
PARENT_SCOPE)
|
||||
|
||||
set(PUBLIC_HEADER
|
||||
"${PUBLIC_HEADER}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/../../../include/middleware/services/radar/radar_service.h"
|
||||
PARENT_SCOPE)
|
241
application/samples/radar/sta_sample/radar_sta_sample.c
Executable file
241
application/samples/radar/sta_sample/radar_sta_sample.c
Executable file
@ -0,0 +1,241 @@
|
||||
/**
|
||||
* Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2024-2024. All rights reserved.
|
||||
*
|
||||
* Description: Radar samples function \n
|
||||
*
|
||||
*/
|
||||
|
||||
#include "lwip/netifapi.h"
|
||||
#include "wifi_hotspot.h"
|
||||
#include "wifi_hotspot_config.h"
|
||||
#include "td_base.h"
|
||||
#include "td_type.h"
|
||||
#include "stdlib.h"
|
||||
#include "uart.h"
|
||||
#include "cmsis_os2.h"
|
||||
#include "soc_osal.h"
|
||||
#include "radar_service.h"
|
||||
#include "gpio.h"
|
||||
#include "pinctrl.h"
|
||||
|
||||
#define WIFI_IFNAME_MAX_SIZE 16
|
||||
#define WIFI_MAX_SSID_LEN 33
|
||||
#define WIFI_SCAN_AP_LIMIT 64
|
||||
#define WIFI_MAC_LEN 6
|
||||
#define WIFI_INIT_WAIT_TIME 500 // 5s
|
||||
#define WIFI_START_STA_DELAY 100 // 1s
|
||||
|
||||
#define RADAR_STATUS_START 1
|
||||
#define RADAR_STATUS_QUERY_DELAY 1000 // 10s
|
||||
#define RADAR_QUIT_DELAY_TIME 12 // 12s
|
||||
|
||||
#define RADAR_DEFAULT_TIMES 0
|
||||
#define RADAR_DEFAULT_LOOP 8
|
||||
#define RADAR_DEFAULT_ANT 0
|
||||
#define RADAR_DEFAULT_PERIOD 5000
|
||||
#define RADAR_DEFAULT_DBG_TYPE 3
|
||||
#define RADAR_DEFAULT_WAVE 2
|
||||
|
||||
#define RADAR_API_NO_HUMAN 0
|
||||
#define RADAR_API_RANGE_CLOSE 50
|
||||
#define RADAR_API_RANGE_NEAR 100
|
||||
#define RADAR_API_RANGE_MEDIUM 200
|
||||
#define RADAR_API_RANGE_FAR 600
|
||||
|
||||
#define RADAR_DBG_INFO_RPT_COEF 100
|
||||
#define RADAR_DBG_INFO_LEN 16
|
||||
|
||||
// led档位控制参数
|
||||
typedef enum {
|
||||
RADAR_INSIDE_1M,
|
||||
RADAR_INSIDE_2M,
|
||||
RADAR_INSIDE_6M,
|
||||
} radar_led_gear_t;
|
||||
|
||||
radar_led_gear_t g_radar_led_gear = RADAR_INSIDE_1M;
|
||||
|
||||
/*****************************************************************************
|
||||
STA 扫描-关联 sample用例
|
||||
*****************************************************************************/
|
||||
void radar_set_led_gear(radar_led_gear_t gear)
|
||||
{
|
||||
PRINT("[RADAR_SAMPLE] SET LED GEAR:%u!\r\n", gear);
|
||||
g_radar_led_gear = gear;
|
||||
}
|
||||
|
||||
static void radar_led_init(void)
|
||||
{
|
||||
// 1. 初始化所有GPIO并设置GPIO的类型
|
||||
uapi_gpio_init();
|
||||
// 2. 设置GPIO为输出
|
||||
errcode_t ret = uapi_gpio_set_dir(GPIO_13, GPIO_DIRECTION_OUTPUT);
|
||||
if (ret != ERRCODE_SUCC) {
|
||||
PRINT("[RADAR_SAMPLE] led uapi_gpio_set_dir failed %u!\r\n", ret);
|
||||
}
|
||||
// 3. 设置GPIO PIN模式为0,普通模式
|
||||
ret = uapi_pin_set_mode(GPIO_13, PIN_MODE_0);
|
||||
if (ret != ERRCODE_SUCC) {
|
||||
PRINT("[RADAR_SAMPLE] led uapi_pin_set_mode failed %u!\r\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
static void radar_set_led_on(void)
|
||||
{
|
||||
errcode_t ret = uapi_gpio_set_val(GPIO_13, GPIO_LEVEL_HIGH);
|
||||
if (ret!= ERRCODE_SUCC) {
|
||||
PRINT("[RADAR_SAMPLE] led ctrl failed %u!\r\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
static void radar_set_led_off(void)
|
||||
{
|
||||
errcode_t ret = uapi_gpio_set_val(GPIO_13, GPIO_LEVEL_LOW);
|
||||
if (ret!= ERRCODE_SUCC) {
|
||||
PRINT("[RADAR_SAMPLE] led ctrl failed %u!\r\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
static void radar_ctrl_led(radar_result_t *res)
|
||||
{
|
||||
switch (g_radar_led_gear) {
|
||||
case RADAR_INSIDE_1M:
|
||||
if (res->lower_boundary == 0 && res->upper_boundary == RADAR_API_RANGE_NEAR) {
|
||||
radar_set_led_on();
|
||||
} else {
|
||||
radar_set_led_off();
|
||||
}
|
||||
break;
|
||||
case RADAR_INSIDE_2M:
|
||||
if ((res->lower_boundary == RADAR_API_RANGE_NEAR &&
|
||||
res->upper_boundary == RADAR_API_RANGE_MEDIUM) ||
|
||||
(res->lower_boundary == 0 && res->upper_boundary == RADAR_API_RANGE_NEAR)) {
|
||||
radar_set_led_on();
|
||||
} else {
|
||||
radar_set_led_off();
|
||||
}
|
||||
break;
|
||||
default: // 默认6M档位
|
||||
if (res->is_human_presence == 1) {
|
||||
radar_set_led_on();
|
||||
} else {
|
||||
radar_set_led_off();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
td_s32 radar_start_sta(td_void)
|
||||
{
|
||||
(void)osDelay(WIFI_INIT_WAIT_TIME); /* 500: 延时0.5s, 等待wifi初始化完毕 */
|
||||
PRINT("STA try enable.\r\n");
|
||||
/* 创建STA接口 */
|
||||
if (wifi_sta_enable() != 0) {
|
||||
PRINT("sta enbale fail !\r\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* 连接成功 */
|
||||
PRINT("STA connect success.\r\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void radar_print_res(radar_result_t *res)
|
||||
{
|
||||
PRINT("[RADAR_SAMPLE] lb:%u, hb:%u, hm:%u\r\n", res->lower_boundary, res->upper_boundary, res->is_human_presence);
|
||||
|
||||
radar_ctrl_led(res);
|
||||
}
|
||||
|
||||
// 维测信息依次为:
|
||||
// 1.告知上层是否需要写入flash
|
||||
// 2.LNA * 10 + VGA
|
||||
// 3.原始回波峰值
|
||||
// 4.过去period帧的平均MO1底噪
|
||||
// 5.过去period帧的平均MO2底噪
|
||||
// 6.过去period帧的平均DP底噪
|
||||
// 7.过去period帧的平均帧间隔
|
||||
// 8.过去period帧中帧间隔超过Xms的帧数
|
||||
// 9.过去period帧中bitmap数量超过X门限的帧数
|
||||
// 10.过去period帧中bitmap比例超过X门限的帧数
|
||||
// 11.过去period帧中是在参与统计的帧数
|
||||
// 12.过去period帧中帧间隔最大值
|
||||
// 13.过去period帧中帧间隔最大值下标
|
||||
// 14.当前所使用的算法参数MO1门限
|
||||
// 15.当前所使用的算法参数MO2门限
|
||||
// 16.当前所使用的算法参数DP门限
|
||||
static void radar_print_dbg_info(int16_t *arr, uint8_t len)
|
||||
{
|
||||
if (len > RADAR_DBG_INFO_LEN || len == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
PRINT("dbg_info: %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n",
|
||||
arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8], arr[9], arr[10],
|
||||
arr[11], arr[12], arr[13], arr[14], arr[15]);
|
||||
}
|
||||
|
||||
static void radar_init_para(void)
|
||||
{
|
||||
radar_dbg_para_t dbg_para;
|
||||
dbg_para.times = RADAR_DEFAULT_TIMES;
|
||||
dbg_para.loop = RADAR_DEFAULT_LOOP;
|
||||
dbg_para.ant = RADAR_DEFAULT_ANT;
|
||||
dbg_para.wave = RADAR_DEFAULT_WAVE;
|
||||
dbg_para.dbg_type = RADAR_DEFAULT_DBG_TYPE;
|
||||
dbg_para.period = RADAR_DEFAULT_PERIOD;
|
||||
uapi_radar_set_debug_para(&dbg_para);
|
||||
|
||||
radar_sel_para_t sel_para;
|
||||
sel_para.height = RADAR_HEIGHT_2M;
|
||||
sel_para.scenario = RADAR_SCENARIO_TYPE_HOME;
|
||||
sel_para.material = RADAR_MATERIAL_SINGLE;
|
||||
sel_para.fusion_track = true;
|
||||
sel_para.fusion_ai = true;
|
||||
uapi_radar_select_alg_para(&sel_para);
|
||||
|
||||
// 算法门限, 前三个使用tools/bin/radar_tool/radar_para_gen_tool工具标定, 后面五个使用本sample给出的默认值即可
|
||||
radar_alg_para_t alg_para;
|
||||
alg_para.d_th_1m = 32;
|
||||
alg_para.d_th_2m = 25;
|
||||
alg_para.p_th = 25;
|
||||
alg_para.t_th_1m = 13;
|
||||
alg_para.t_th_2m = 26;
|
||||
alg_para.b_th_ratio = 20;
|
||||
alg_para.b_th_cnt = 4;
|
||||
alg_para.a_th = 70;
|
||||
uapi_radar_set_alg_para(&alg_para, 0);
|
||||
|
||||
int16_t dly_time = RADAR_QUIT_DELAY_TIME;
|
||||
uapi_radar_set_delay_time(dly_time);
|
||||
}
|
||||
|
||||
int radar_demo_init(void *param)
|
||||
{
|
||||
PRINT("[RADAR_SAMPLE] radar_demo_init sta!\r\n");
|
||||
param = param;
|
||||
radar_led_init();
|
||||
radar_start_sta();
|
||||
uapi_radar_register_result_cb(radar_print_res);
|
||||
uapi_radar_register_debug_info_cb(radar_print_dbg_info, RADAR_DBG_INFO_RPT_COEF);
|
||||
radar_init_para();
|
||||
// 启动雷达
|
||||
(void)osDelay(WIFI_START_STA_DELAY);
|
||||
uapi_radar_set_status(RADAR_STATUS_START);
|
||||
|
||||
for (;;) {
|
||||
(void)osDelay(RADAR_STATUS_QUERY_DELAY);
|
||||
uint8_t sts;
|
||||
uapi_radar_get_status(&sts);
|
||||
uapi_radar_get_hardware_status(&sts);
|
||||
uint16_t time;
|
||||
uapi_radar_get_delay_time(&time);
|
||||
uint16_t iso;
|
||||
uapi_radar_get_isolation(&iso);
|
||||
radar_result_t res = {0};
|
||||
uapi_radar_get_result(&res);
|
||||
int16_t arr[RADAR_DBG_INFO_LEN] = {0};
|
||||
uapi_radar_get_debug_info(arr, RADAR_DBG_INFO_LEN);
|
||||
radar_print_dbg_info(arr, RADAR_DBG_INFO_LEN);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user