• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2 * @file radar_service.h
3 *
4 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16 * Description: header file for radar service api. \n
17 * \n
18 * History: \n
19 * 2023-11-27,初始化该文件 \n
20 */
21 
22 #ifndef SERVICE_RADAR_SERVICE_H
23 #define SERVICE_RADAR_SERVICE_H
24 
25 #include <stdint.h>
26 #include "errcode.h"
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
32 #define RADAR_RANGE_BIN_NUM 20
33 #define RADAR_RAW_DATA_NUM (2 * RADAR_RANGE_BIN_NUM)
34 
35 /**
36  * @defgroup middleware_service_radar_service RADAR Service
37  * @ingroup  middleware_service_radar
38  * @{
39  */
40 
41 /**
42  * @if Eng
43  * @brief  radar status set.
44  * @else
45  * @brief  雷达状态配置。
46  * @endif
47  */
48 typedef enum {
49     RADAR_STATUS_STOP = 0,  /*!< @if Eng radar status set: stop
50                                 @else   雷达状态配置停止 @endif */
51     RADAR_STATUS_START,     /*!< @if Eng radar status set: start
52                                 @else   雷达状态配置启动 @endif */
53     RADAR_STATUS_RESET,     /*!< @if Eng radar status set: rst
54                                 @else   雷达状态配置复位 @endif */
55     RADAR_STATUS_RESUME,    /*!< @if Eng radar status set: resume
56                                 @else   雷达状态配置状态恢复 @endif */
57 } radar_set_sts_t;
58 
59 /**
60  * @if Eng
61  * @brief  radar status.
62  * @else
63  * @brief  雷达状态。
64  * @endif
65  */
66 typedef enum {
67     RADAR_STATUS_IDLE = 0,  /*!< @if Eng radar status: idle
68                                 @else   雷达状态未工作 @endif */
69     RADAR_STATUS_RUNNING,   /*!< @if Eng radar status: running
70                                 @else   雷达状态工作 @endif */
71 } radar_get_sts_t;
72 
73 /**
74  * @if Eng
75  * @brief  radar result.
76  * @else
77  * @brief  雷达结果。
78  * @endif
79  */
80 typedef struct {
81     uint32_t lower_boundary;    /*!< @if Eng radar result: lower boundary
82                                     @else   雷达结果靠近检测下边界 @endif */
83     uint32_t upper_boundary;    /*!< @if Eng radar result: upper boundary
84                                     @else   雷达结果靠近检测上边界 @endif */
85     uint8_t is_human_presence;  /*!< @if Eng radar result: human presence
86                                     @else   雷达结果有无人体存在 @endif */
87     uint8_t reserved_0;
88     uint8_t reserved_1;
89     uint8_t reserved_2;
90 } radar_result_t;
91 
92 /**
93  * @if Eng
94  * @brief Callback invoked when the radar detection is complete and the result changes.
95  * @par Callback invoked when the radar detection is complete and the result changes.
96  * @attention This callback function runs on the radar feature thread.
97  * @attention It cannot be blocked or wait for a long time or use a large stack space.
98  * @param [in] res radar detect result.
99  * @else
100  * @brief  雷达检测完成并且结果出现变化时的回调函数。
101  * @par    雷达检测完成并且结果出现变化时的回调函数。
102  * @attention  该回调函数运行于radar feature线程, 不能阻塞或长时间等待, 不能使用较大栈空间。
103  * @param [in] res 雷达检测结果。
104  * @endif
105  */
106 typedef void (*radar_result_cb_t)(radar_result_t *result);
107 
108 /**
109  * @if Eng
110  * @brief  radar raw data.
111  * @attention IQ alternate storage.
112  * @else
113  * @brief  雷达原始数据。
114  * @attention IQ交替存储。
115  * @endif
116  */
117 typedef struct {
118     int32_t data[RADAR_RAW_DATA_NUM];
119 } radar_raw_data_t;
120 
121 /**
122  * @if Eng
123  * @brief  radar debug type.
124  * @else
125  * @brief  雷达维测数据类型。
126  * @endif
127  */
128 typedef enum {
129     RADAR_DBG_NO_DATA_RPT = 0,    /*!< @if Eng no data report
130                             @else   无数据上报 @endif */
131     RADAR_DBG_PC_DATA_RPT,        /*!< @if Eng report pc data by uart1
132                             @else   通过uart1上报脉压后的数据 @endif */
133     RADAR_DBG_ADC_DATA_RPT,       /*!< @if Eng report adc data by uart1
134                             @else   通过uart1上报adc数据 @endif */
135     RADAR_DBG_RES_RPT,            /*!< @if Eng report result by uart1
136                             @else   通过uart1上报result @endif */
137     RADAR_DBG_UART0_RES_RPT,      /*!< @if Eng report result by uart0
138                             @else   通过uart0上报result @endif */
139     RADAR_DBG_RPT_BUTT
140 } radar_dbg_type_t;
141 
142 /**
143  * @if Eng
144  * @brief  radar debug parameters.
145  * @attention
146  * @else
147  * @brief  雷达维测参数。
148  * @attention
149  * @endif
150  */
151 typedef struct {
152     uint8_t times;      /*!< @if Eng Number of subframe transmissions, default value 0, always sent, range 0~20
153                             @else   子帧发送次数, 默认值0, 一直发送, 范围0~20 @endif */
154     uint8_t loop;       /*!< @if Eng Loop times of radar waveform in one subframe, default value 8
155                             @else   单个子帧雷达波形循环发送次数, 默认值为8 @endif */
156     uint8_t ant;        /*!< @if Eng Selection of radar antenna, default value 0
157                             @else   接收通路选择, 默认值为0 @endif */
158     uint8_t wave;       /*!< @if Eng Selection of radar wave, default value 2
159                             @else   雷达发射波形类型选择, 默认值为2 @endif */
160     uint8_t dbg_type;   /*!< @if Eng Selection of debug information, default value 0, for details,
161                             see @ref radar_dbg_type_t
162                             @else   维测信息输出选择, 默认值为0, 只打印基础流程日志, 范围0~4,
163                             参考 @ref radar_dbg_type_t @endif */
164     uint16_t period;    /*!< @if Eng Radar subframe interval, unit us, default value is 5000, range 3000~100000
165                             @else   雷达子帧间隔,单位us,默认值为5000, 范围3000~100000 @endif */
166 } radar_dbg_para_t;
167 
168 /**
169  * @if Eng
170  * @brief  Elevation information (the height of the module position from the ground).
171  * @else
172  * @brief  架高信息(模组位置距离地面的高度)。
173  * @endif
174  */
175 typedef enum {
176     RADAR_HEIGHT_1M, /*!< @if Eng 0-1.5 meters
177                             @else   0到1.5米 @endif */
178     RADAR_HEIGHT_2M, /*!< @if Eng 1.5-2.5 meters
179                             @else   1.5米到2.5米 @endif */
180     RADAR_HEIGHT_3M, /*!< @if Eng 2.5 meters or more
181                             @else   2.5米以上 @endif */
182     RADAR_HEIGHT_BUTT,
183 } radar_height_type_t;
184 
185 /**
186  * @if Eng
187  * @brief  scenario type.
188  * @else
189  * @brief  场景类型。
190  * @endif
191  */
192 typedef enum {
193     RADAR_SCENARIO_TYPE_HOME, /*!< @if Eng Home scene
194                                 @else   家居场景 @endif */
195     RADAR_SCENARIO_TYPE_HALL, /*!< @if Eng Open scene (area greater than 50 square meters or
196                                 floor height greater than 3.5 meters)
197                                 @else   空旷场景(面积大于50平方米或层高高于3.5米) @endif */
198     RADAR_SCENARIO_TYPE_BUTT,
199 } radar_scenario_type_t;
200 
201 /**
202  * @if Eng
203  * @brief  Module line-of-sight direction blocking material type.
204  * @else
205  * @brief  模组视距方向遮挡材料类型。
206  * @endif
207  */
208 typedef enum {
209     RADAR_MATERIAL_PLATSIC,   /*!< @if Eng Plastic or no covering
210                             @else   塑料或无遮挡物 @endif */
211     RADAR_MATERIAL_PCB,       /*!< @if Eng PCB or metal
212                             @else   PCB或金属 @endif */
213     RADAR_MATERIAL_BUTT,
214 } radar_material_type_t;
215 
216 /**
217  * @if Eng
218  * @brief  algorithm parameter suite selection of radar.
219  * @attention
220  * @else
221  * @brief  雷达算法参数套选择参数。
222  * @attention
223  * @endif
224  */
225 typedef struct {
226     uint8_t height;     /*!< @if Eng Module installation height information: 1/2/3 meters,
227                             see @ref radar_height_type_t
228                             @else   模组安装架高信息: 1/2/3米, 参考 @ref radar_height_type_t @endif */
229     uint8_t scenario;   /*!< @if Eng Scene: Home/empty, see @ref radar_scenario_type_t
230                             @else   场景: 家居/空旷, 参考 @ref radar_scenario_type_t @endif */
231     uint8_t material;   /*!< @if Eng Module line-of-sight direction blocking material: plastic/metal,
232                             see @ref radar_material_type_t
233                             @else   模组视距方向遮挡材料: 塑料/金属, 参考 @ref radar_material_type_t @endif */
234     uint8_t fusion_track;   /*!< @if Eng Whether to fuse distance tracking results
235                             @else   是否融合距离跟踪结果 @endif */
236     uint8_t fusion_ai;  /*!< @if Eng Whether to integrate AI results
237                             @else   是否融合AI结果 @endif */
238 } radar_sel_para_t;
239 
240 /**
241  * @if Eng
242  * @brief  radar algorithm parameters.
243  * @attention
244  * @else
245  * @brief  雷达算法参数。
246  * @attention
247  * @endif
248  */
249 typedef struct {
250     uint8_t d_th_1m;    /*!< @if Eng Close to the 1 meter threshold, range 0-99
251                             @else   靠近1米档门限, 范围0-99 @endif */
252     uint8_t d_th_2m;    /*!< @if Eng Close to the 2 meters threshold, range 0-99
253                             @else   靠近2米档门限, 范围0-99 @endif */
254     uint8_t p_th;       /*!< @if Eng presence in 6 meters threshold, range 0-99
255                             @else   存在6米档门限, 范围0-99 @endif */
256     uint8_t t_th_1m;    /*!< @if Eng Range tracking 1 meter threshold, unit:dm, range 0-30
257                             @else   距离跟踪1米档门限, 单位:分米, 范围0-30 @endif */
258     uint8_t t_th_2m;    /*!< @if Eng Range tracking 2 meters threshold unit:dm, range 0-30
259                             @else   距离跟踪2米档门限, 单位:分米, 范围0-30 @endif */
260     uint8_t b_th_ratio; /*!< @if Eng Anti-spectrum symmetrical interference ratio threshold, range 0-99
261                             @else   抗频谱对称干扰比例门限, 范围0-99 @endif */
262     uint8_t b_th_cnt;   /*!< @if Eng Anti-spectrum symmetrical interference quantity threshold, range 0-99
263                             @else   抗频谱对称干扰数量门限, 范围0-99 @endif */
264     uint8_t a_th;       /*!< @if Eng AI human body recognition similarity threshold, range 0-99
265                             @else   AI人体识别相似度门限, 范围0-99 @endif */
266 } radar_alg_para_t;
267 
268 /**
269  * @if Eng
270  * @brief Callback function when radar echo reception is complete.
271  * @par Callback function when radar echo reception is complete.
272  * @attention This callback function runs on the radar driver thread.
273  * @attention It cannot be blocked or wait for a long time or use a large stack space.
274  * @param [in] res radar detect raw data.
275  * @else
276  * @brief  雷达回波接收完成时的回调函数。
277  * @par    雷达回波接收完成时的回调函数。
278  * @attention  该回调函数运行于radar driver线程, 不能阻塞或长时间等待, 不能使用较大栈空间。
279  * @param [in] res 雷达检测原始数据。
280  * @endif
281  */
282 typedef void (*radar_raw_data_cb_t)(radar_raw_data_t *raw_data);
283 
284 /**
285  * @if Eng
286  * @brief  Set status of radar.
287  * @par Description: Set status of radar.
288  * @param [in] sts status of radar, see @ref radar_set_sts_t.
289  * @retval error code.
290  * @else
291  * @brief  设置雷达状态。
292  * @par Description: 设置雷达状态。
293  * @param [in] sts 雷达状态。
294  * @retval 执行结果错误码。
295  * @endif
296  */
297 errcode_t uapi_radar_set_status(uint8_t sts);
298 
299 /**
300  * @if Eng
301  * @brief  Get status of radar.
302  * @par Description: Get status of radar.
303  * @param [in] *sts status of radar, see @ref radar_get_sts_t.
304  * @retval error code.
305  * @else
306  * @brief  获取雷达状态。
307  * @par Description: 获取雷达状态。
308  * @param [in] *sts 雷达状态。
309  * @retval 执行结果错误码。
310  * @endif
311  */
312 errcode_t uapi_radar_get_status(uint8_t *sts);
313 
314 /**
315  * @if Eng
316  * @brief  Radar result callback registration function.
317  * @par Description: Radar result callback registration function.
318  * @param [in] cb callback function.
319  * @retval error code.
320  * @else
321  * @brief  雷达结果回调注册函数。
322  * @par Description: 雷达结果回调注册函数。
323  * @param [in] cb 回调函数。
324  * @retval 执行结果错误码。
325  * @endif
326  */
327 errcode_t uapi_radar_register_result_cb(radar_result_cb_t cb);
328 
329 /**
330  * @if Eng
331  * @brief  Get repot result of radar.
332  * @par Description: Get repot result of radar.
333  * @param [in] *res repot result of radar, see @ref radar_result_t.
334  * @retval error code.
335  * @else
336  * @brief  获取雷达上报结果。
337  * @par Description: 获取雷达上报结果。
338  * @param [in] *res 雷达上报结果。
339  * @retval 执行结果错误码。
340  * @endif
341  */
342 errcode_t uapi_radar_get_result(radar_result_t *res);
343 
344 /**
345  * @if Eng
346  * @brief  Radar raw data callback registration function.
347  * @par Description: Radar raw data callback registration function.
348  * @param [in] cb callback function.
349  * @retval error code.
350  * @else
351  * @brief  雷达原始数据回调注册函数。
352  * @par Description: 雷达原始数据回调注册函数。
353  * @param [in] cb 回调函数。
354  * @retval 执行结果错误码。
355  * @endif
356  */
357 errcode_t uapi_radar_register_raw_data_cb(radar_raw_data_cb_t cb);
358 
359 /**
360  * @if Eng
361  * @brief  Set quit delay time of radar.
362  * @par Description: Set quit delay time of radar.
363  * @param [in] time quit delay time of radar.
364  * @retval error code.
365  * @else
366  * @brief  设置退出延迟时间。
367  * @par Description: 设置退出延迟时间。
368  * @param [in] time 退出延迟时间。
369  * @retval 执行结果错误码。
370  * @endif
371  */
372 errcode_t uapi_radar_set_delay_time(uint16_t time);
373 
374 /**
375  * @if Eng
376  * @brief  Get quit delay time of radar.
377  * @par Description: Get quitdelay time of radar.
378  * @param [in] *time quit delay time of radar.
379  * @retval error code.
380  * @else
381  * @brief  获取退出延迟时间。
382  * @par Description: 获取退出延迟时间。
383  * @param [in] *time 退出延迟时间。
384  * @retval 执行结果错误码。
385  * @endif
386  */
387 errcode_t uapi_radar_get_delay_time(uint16_t *time);
388 
389 /**
390  * @if Eng
391  * @brief  Get isolation infomation of radar.
392  * @par Description: Get isolation infomation of radar.
393  * @param [in] *iso isolation infomation of radar.
394  * @retval error code.
395  * @else
396  * @brief  获取天线隔离度信息。
397  * @par Description: 获取天线隔离度信息。
398  * @param [in] *iso 天线隔离度信息。
399  * @retval 执行结果错误码。
400  * @endif
401  */
402 errcode_t uapi_radar_get_isolation(uint16_t *iso);
403 
404 /**
405  * @if Eng
406  * @brief  Set debug parameters of radar.
407  * @par Description: Set debug parameters of radar.
408  * @param [in] *para debug parameters of radar, see @ref radar_dbg_para_t.
409  * @retval error code.
410  * @else
411  * @brief  设置雷达维测参数。
412  * @par Description: 设置雷达维测参数。
413  * @param [in] *para 雷达维测参数, 参考 @ref radar_dbg_para_t 。
414  * @retval 执行结果错误码。
415  * @endif
416  */
417 errcode_t uapi_radar_set_debug_para(radar_dbg_para_t *para);
418 
419 /**
420  * @if Eng
421  * @brief  Set algorithm parameter suite selection of radar.
422  * @par Description: Select algorithm parameter suite of radar.
423  * @param [in] *para Parameters of algorithm parameter suite , see @ref radar_sel_para_t.
424  * @retval error code.
425  * @else
426  * @brief  设置雷达算法参数套选择参数。
427  * @par Description: 设置雷达算法参数套选择参数。
428  * @param [in] *para 雷达算法参数套选择参数, 参考 @ref radar_sel_para_t 。
429  * @retval 执行结果错误码。
430  * @endif
431  */
432 errcode_t uapi_radar_select_alg_para(radar_sel_para_t *para);
433 
434 /**
435  * @if Eng
436  * @brief  Set algorithm parameter of radar.
437  * @par Description: Set algorithm parameterof radar.
438  * @param [in] *para algorithm parameters of radar, see @ref radar_alg_para_t.
439  * @param [in] write_to_flash whether write to flash or no.
440  * @retval error code.
441  * @else
442  * @brief  设置雷达算法参数。
443  * @par Description: 设置雷达算法参数。
444  * @param [in] *para 雷达算法参数, 参考 @ref radar_alg_para_t 。
445  * @param [in] write_to_flash 是否写入flash。
446  * @retval 执行结果错误码。
447  * @endif
448  */
449 errcode_t uapi_radar_set_alg_para(radar_alg_para_t *para, uint8_t write_to_flash);
450 
451 #ifdef __cplusplus
452 }
453 #endif
454 #endif
455 /**
456  * @}
457  */
458