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