1 /** 2 * @file hi_diag.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 */ 17 18 /** @defgroup iot_diag Diagnostic 19 * @ingroup dfx 20 */ 21 22 #ifndef __HI_DIAG_H__ 23 #define __HI_DIAG_H__ 24 25 #include <hi_types.h> 26 #include <hi_uart.h> 27 28 /** 29 * @ingroup iot_diag 30 * @brief Registers the callback function for DIAG channel status changes. 31 CNcomment:注册DIAG通道状态变更回调函数。CNend 32 * 33 * @par 描述: 34 * Registers the callback function for DIAG channel status changes. That is, when the DIAG channel is 35 * connected or disconnected, the function registered by this API is called back. 36 CNcomment:注册DIAG通道变更回调函数(即:当DIAG通道连接或断开时,会回调本接口注册的函数)。CNend 37 * 38 * @attention None 39 * @param connect_notify_func [IN] type #hi_diag_connect_f,User function. CNcomment:用户函数。CNend 40 * 41 * @retval #0 Success. 42 * @retval #Other Failure. For details, see hi_errno.h. 43 * @par 依赖: 44 * @li hi_diag.h:Describes DIAG APIs. 45 CNcomment:文件用于描述DIAG相关接口。CNend 46 * @see None 47 */ 48 HI_EXTERN hi_u32 hi_diag_register_connect_notify(hi_diag_connect_f connect_notify_func); 49 50 /** 51 * @ingroup iot_diag 52 * @brief Checks the connection status of the DIAG channel. CNcomment:检测DIAG通道连接状态的函数。CNend 53 * 54 * @par 描述: 55 * Checks the connection status of the DIAG channel. CNcomment:检测DIAG通道是否处于连接状态的函数 。CNend 56 * 57 * @attention None 58 * @param None 59 * 60 * @retval HI_FALSE disconnected. CNcomment:处于非连接状态。CNend 61 * @retval HI_TRUE connected. CNcomment:处于连接状态。CNend 62 * @par 依赖: 63 * @li hi_diag.h:Describes DIAG APIs. 64 CNcomment:文件用于描述DIAG相关接口。CNend 65 * @see None 66 */ 67 HI_EXTERN hi_bool hi_diag_is_connect(hi_void); 68 69 /** 70 * @ingroup iot_diag 71 * @brief Registers the command handling function. CNcomment:注册命令处理函数。CNend 72 * 73 * @par 描述: 74 * @li Called at initialize stage, does NOT support multiable task calls. 75 CNcomment:在初始化阶段调用, 不支持多任务调用。CNend 76 * @li The DIAG subsystem supports a maximum of 10 different command tables. 77 CNcomment:最多能注册10个不同的命令表。CNend 78 * 79 * @attention None 80 * @param p_cmd_tbl [IN] type #const hi_diag_cmd_reg_obj*,Command table, which must be declared as a constant array 81 * and transmitted to this parameter. 82 CNcomment:命令表,必须申明为常量数组传给该参数。CNend 83 * @param cmd_num [IN] type #hi_u16,Number of commands. The value cannot be 0. CNcomment:命令个数, 84 如果usCmdNum为0而pstCmdTbl不为0,则取消注册。CNend 85 * 86 * @retval #0 Success. 87 * @retval #Other Failure. For details, see hi_errno.h. 88 * @par 依赖: 89 * @li hi_diag.h:Describes DIAG APIs. 90 CNcomment:文件用于描述DIAG相关接口。CNend 91 * @see None 92 */ 93 HI_EXTERN hi_u32 hi_diag_register_cmd(const hi_diag_cmd_reg_obj* cmd_tbl, hi_u16 cmd_num); 94 95 /** 96 * @ingroup iot_diag 97 * @brief Reports DIAG packets. CNcomment:DIAG包上报。CNend 98 * 99 * @par 描述: 100 * Reports DIAG channel packets to the DIAG client. 101 CNcomment:该函数用于将DIAG通道报文上报给DIAG客户端。CNend 102 * 103 * @attention 104 * This API can not be used in interrupt when report data synchronously. 105 CNcomment:当同步上报数据时,该接口不支持在中断中调用。CNend 106 * @param cmd_id [IN] type #hi_u16,DIAG data packet ID. CNcomment:DIAG应答包ID。CNend 107 * @param instance_id [IN] type #hi_u8,Command type.This parameter is used to obtain the command type in the 108 * option parameter of the command callback function hi_diag_cmd_f.currently only support 109 * HI_DIAG_CMD_INSTANCE_LOCAL. 110 CNcomment:命令类型。在命令回调函数hi_diag_cmd_f的option参数中获取命令类型,在函数中使用 111 此接口回复报文时,通过本参数传递。当前仅支持HI_DIAG_CMD_INSTANCE_LOCAL。CNend 112 * @param buffer [IN] type #hi_pbyte,Buffer address of the data packet. This function does not release the 113 * pointer. CNcomment:数据包的buffer地址,该函数不会释放该指针。CNend 114 * @param buffer_size [IN] type #hi_u16,Data packet size (unit: byte), range[0, 65507] 115 CNcomment:数据包大小(单位:byte),取值范围[0, 65507]。CNend 116 * @param sync [IN] type #hi_bool,Synchronous or asynchronous DIAG packet pushing. TRUE indicates that the 117 * packets are pushed synchronously and the operation is blocked. FALSE indicates the packets 118 * are pushed asynchronously (with the memory allocated, the packet is cashed by the OS queue 119 * before being pushed), and the operation is not blocked. 120 CNcomment:DIAG包同步/异步上报设置。TRUE表示同步上报, 阻塞操作; FALSE表示异步 121 (通过分配内存后, 由OS队列缓存再上报), 非阻塞操作。CNend 122 * 123 * 124 * @retval #0 Success. 125 * @retval #Other Failure. For details, see hi_errno.h. 126 * @par 依赖: 127 * @li hi_diag.h:Describes DIAG APIs. 128 CNcomment:文件用于描述DIAG相关接口。CNend 129 * @see None 130 */ 131 HI_EXTERN hi_u32 hi_diag_report_packet(hi_u16 cmd_id, hi_u8 instance_id, hi_pbyte buffer, 132 hi_u16 buffer_size, hi_bool sync); 133 134 /** 135 * @ingroup iot_diag 136 * @brief Sends ACK packets to the DIAG client. CNcomment:应答回复。CNend 137 * 138 * @par 描述: 139 * Sends ACK packets to the DIAG client. CNcomment:该函数用于回复报文或ACK给DIAG客户端。CNend 140 * 141 * @attention 142 * This API can not be used in interrupt.CNcomment:该接口不支持在中断中调用。CNend 143 * @param cmd_id [IN] type #hi_u16,DIAG ACK packet ID. CNcomment:DIAG包ID。CNend 144 * @param instance_id [IN] type #hi_u8,Command type.This parameter is used to obtain the command type in the 145 * option parameter of the command callback function hi_diag_cmd_f.currently only support 146 * HI_DIAG_CMD_INSTANCE_LOCAL. 147 CNcoment:在命令回调函数HI_DIAG_CMD_F的option参数中获取命令类型,在函数中使用此接口回复 148 报文时,通过本参数传递。当前仅支持HI_DIAG_CMD_INSTANCE_LOCAL。CNend 149 * @param buffer [IN] type #hi_pbyte,Buffer address of the data packet. This function does not release the 150 * pointer. CNcomment:数据包的buffer地址,该函数不会释放该指针。CNend 151 * @param buffer_size [IN] type #hi_u16,Data packet size(unit: byte), range[0, 1024] 152 CNcomment:数据包大小(单位:byte),取值范围[0, 1024]。CNend 153 * 154 * @retval #HI_ERR_CONSUMED Success. 155 * @retval #Other Failure. For details, see hi_errno.h. 156 * @par 依赖: 157 * @li hi_diag.h:Describes DIAG APIs. 158 CNcomment:文件用于描述DIAG相关接口。CNend 159 * @see None 160 */ 161 HI_EXTERN hi_u32 hi_diag_send_ack_packet(hi_u16 cmd_id, hi_u8 instance_id, hi_pvoid buffer, hi_u16 buffer_size); 162 163 /** 164 * @ingroup iot_diag 165 * @brief Registers the callback function for notifying DIAG operations. 166 CNcomment:注册DIAG操作通知回调函数。CNend 167 * 168 * @par 描述: 169 * Carbon copies data to the app layer by using a callback function in the case of data interaction between 170 * the host and the board.CNcommand:该函数用于当上位机与单板有数据交互发生时, 171 将数据通过回调函数抄送给应用层。CNend 172 * 173 * @attention None 174 * @param cmd_notify_func [IN] type #hi_diag_cmd_notify_f*,When data interaction occurs between the HSO and the board, 175 * this API is used to notify the app layer. 176 CNcomment:当HSO与单板有数据交互发生时,通过该接口通知应用层。CNend 177 * 178 * 179 * @retval #0 Success. 180 * @retval #Other Failure. For details, see hi_errno.h. 181 * @par 依赖: 182 * @li hi_diag.h:Describes DIAG APIs. 183 CNcomment:文件用于描述DIAG相关接口。CNend 184 * @see None 185 */ 186 HI_EXTERN hi_u32 hi_diag_register_cmd_notify(hi_diag_cmd_notify_f cmd_notify_func); 187 188 /** 189 * @ingroup iot_diag 190 * @brief Sets the UART parameters of the DIAG channel. CNcomment:设置诊断通道UART参数。CNend 191 * 192 * @par 描述: 193 * Sets the UART parameters of the used by the DIAG subsystem before the DIAG subsystem is initialized. 194 CNcomment:该函数用于在诊断子系统初始化之前,设置诊断子系统使用的UART的相关参数。CNend 195 * 196 * @attention The parameters must be set before the initialization of the DIAG subsystem. 197 CNcomment:必须在诊断子系统初始化之前设置才可生效。CNend 198 * @param uart_port [IN] type #hi_uart_idx,UART port number used by the DIAG subsystem. 199 CNcomment:诊断子系统使用的UART端口号。CNend 200 * @param uart_cfg [IN] type #hi_uart_attribute,UART configuration used by the DIAG subsystem. 201 CNcomment:诊断子系统使用的UART配置。CNend 202 * 203 * @retval #0 Success. 204 * @retval #Other Failure. For details, see hi_errno.h. 205 * @par 依赖: 206 * @li hi_diag.h:Describes DIAG APIs. 207 CNcomment:文件用于描述DIAG相关接口。CNend 208 * @see None 209 */ 210 HI_EXTERN hi_u32 hi_diag_set_uart_param(hi_uart_idx uart_port, hi_uart_attribute uart_cfg); 211 212 /** 213 * @ingroup iot_diag 214 * @brief Initializes the DIAG subsystem. CNcomment:诊断子系统初始化。CNend 215 * 216 * @par 描述: 217 * Initializes the DIAG subsystem. CNcomment:该函数用于初始化诊断子系统。CNend 218 * 219 * @attention The initialization of the DIAG subsystem needs to be performed only once. Repeated initialization is 220 * invalid. CNcomment:诊断子系统初始化只需执行一次,多次初始化无效。CNend 221 * @param None 222 * 223 * @retval #0 Success. 224 * @retval #Other Failure. For details, see hi_errno.h. 225 * @par 依赖: 226 * @li hi_diag.h:Describes DIAG APIs. 227 CNcomment:文件用于描述DIAG相关接口。CNend 228 * @see None 229 */ 230 HI_EXTERN hi_u32 hi_diag_init(hi_void); 231 232 /** 233 * @ingroup iot_diag 234 * 235 * Structure for querying the number of command tables and statistic object tables. 236 CNcomment:命令注册列表和统计量对象注册列表个数查询结构体。CNend 237 */ 238 typedef struct { 239 hi_u8 cmd_list_total_cnt; /**< Number of command registration tables can be registered. 240 CNcomment:总共支持注册的命令列表个数 CNend */ 241 hi_u8 cmd_list_used_cnt; /**< Number of registered command tables. 242 CNcomment:已经注册的命令列表个数 CNend */ 243 hi_u8 stat_list_total_cnt; /**< Number of statistic object tables can be registered. Currently not support. 244 CNcomment:总共支持注册的统计量对象列表个数。当前暂不支持。 CNend */ 245 hi_u8 stat_list_used_cnt; /**< Number of registered statistic object tables. Currently not support. 246 CNcomment:已经注册的统计量对象列表个数。当前暂不支持。 CNend */ 247 } hi_diag_cmd_stat_reg_info; 248 249 /** 250 * @ingroup iot_diag 251 * @brief Queries the registration status of the command tables and statistic tables of the DIAG subsystem. 252 CNcomment:查询诊断子系统命令列表和统计量列表注册情况。CNend 253 * 254 * @par 描述: 255 * Queries the registration status of the command tables and statistic tables of the DIAG subsystem. 256 * Number of registered command tables and number of command tables can be registered/ Number of registered 257 * statistic object tables 258 CNcomment:查询总共支持注册/已经注册的命令列表个数、总共支持注册/已经注册的统计量对象列表个数。CNend 259 * 260 * @attention None 261 * @param None 262 * 263 * @retval #hi_diag_cmd_stat_reg_info Structure of the number of registered command tables and statistic tables. 264 CNcomment:命令列表和统计量列表注册个数信息结构体。CNend 265 * @par 依赖: 266 * @li hi_diag.h:Describes DIAG APIs. 267 CNcomment:文件用于描述DIAG相关接口。CNend 268 * @see None 269 */ 270 HI_EXTERN hi_diag_cmd_stat_reg_info hi_diag_get_cmd_stat_reg_info(hi_void); 271 272 typedef struct { 273 hi_u32 data0; 274 hi_u32 data1; 275 hi_u32 data2; 276 hi_u32 data3; 277 }diag_log_msg; 278 279 /** 280 * @ingroup iot_diag 281 * @brief Reports usr packets. CNcomment:上报用户日志。CNend 282 * 283 * @par 描述: 284 * Reports usr packets. CNcomment:上报用户日志消息。CNend 285 * 286 * @attention None 287 * @param diag_usr_msg [IN] type #hi_diag_layer_msg,log message. CNcomment:日志消息。CNend 288 * @param msg_level [IN] type #hi_u16,level of log message, [HI_MSG_USR_L0, HI_MSG_USR_L4]. 289 CNcomment:日志消息级别,取值从:HI_MSG_USR_L0- HI_MSG_USR_L4。CNend 290 * 291 * @retval #0 Success. 292 * @retval #Other Failure. For details, see hi_errno.h. 293 * @par 依赖: 294 * @li hi_diag.h:Describes DIAG APIs. 295 CNcomment:文件用于描述DIAG相关接口。CNend 296 * @see None 297 */ 298 hi_u32 hi_diag_report_usr_msg(const hi_diag_layer_msg* diag_usr_msg, hi_u16 msg_level); 299 300 /** 301 * @ingroup iot_diag 302 * @brief Reports simple packet that without data. CNcomment:上报简单日志,不携带数据内容。CNend 303 * 304 * @par 描述: 305 * Reports simple packets, fixed module ID. CNcomment:上报简单日志消息,固定模块ID。 306 * 307 * @attention None 308 * @param msg_id [IN] type #hi_u32,log message ID. CNcomment:日志消息ID。CNend 309 * @param msg_level [IN] type #hi_u16,log message level, [HI_MSG_SYS_L0, HI_MSG_SYS_L2] 310 CNcomment:日志消息级别,取值从:HI_MSG_SYS_L0- HI_MSG_SYS_L2。CNend 311 * 312 * @retval #0 Success. 313 * @retval #Other Failure. For details, see hi_errno.h. 314 * @par 依赖: 315 * @li hi_diag.h:Describes DIAG APIs. 316 CNcomment:文件用于描述DIAG相关接口。CNend 317 * @see None 318 */ 319 hi_u32 hi_diag_log_msg0(hi_u32 msg_id, hi_u16 msg_level); 320 321 /** 322 * @ingroup iot_diag 323 * @brief Reports simple packet that with one word data. CNcomment:上报简单日志,携带1个数据。CNend 324 * 325 * @par 描述: 326 * Reports simple packets, fixed module ID. CNcomment:上报简单日志消息,固定模块ID。CNend 327 * 328 * @attention None 329 * @param msg_id [IN] type #hi_u32,log message ID. CNcomment:日志消息ID。CNend 330 * @param d0 [IN] type #hi_u32,first data. CNcomment:携带的第1个数据。Cnend 331 * @param msg_level [IN] type #hi_u16,log message level, [HI_MSG_SYS_L0, HI_MSG_SYS_L2] 332 CNcomment:日志消息级别,取值从:HI_MSG_SYS_L0- HI_MSG_SYS_L2。CNend 333 * 334 * @retval #0 Success. 335 * @retval #Other Failure. For details, see hi_errno.h. 336 * @par 依赖: 337 * @li hi_diag.h:Describes DIAG APIs. 338 CNcomment:文件用于描述DIAG相关接口。CNend 339 * @see None 340 */ 341 hi_u32 hi_diag_log_msg1(hi_u32 msg_id, hi_u32 d0, hi_u16 msg_level); 342 343 /** 344 * @ingroup iot_diag 345 * @brief Reports simple packet that with 2 words data. CNcomment:上报简单日志,携带2个数据。CNend 346 * 347 * @par 描述: 348 * Reports simple packets, fixed module ID. CNcomment:上报简单日志消息,固定模块ID。CNend 349 * 350 * @attention None 351 * @param msg_id [IN] type #hi_u32,log message ID. CNcomment:日志消息ID。CNend 352 * @param d0 [IN] type #hi_u32,first data. CNcomment:携带的第1个数据。CNend 353 * @param d1 [IN] type #hi_u32,second data. CNcomment:携带的第2个数据。CNend 354 * @param msg_level [IN] type #hi_u16,log message level, [HI_MSG_SYS_L0, HI_MSG_SYS_L2] 355 CNcomment:日志消息级别,取值从:HI_MSG_SYS_L0- HI_MSG_SYS_L2。CNend 356 * 357 * @retval #0 Success. 358 * @retval #Other Failure. For details, see hi_errno.h. 359 * @par 依赖: 360 * @li hi_diag.h:Describes DIAG APIs. 361 CNcomment:文件用于描述DIAG相关接口。CNend 362 * @see None 363 */ 364 hi_u32 hi_diag_log_msg2(hi_u32 msg_id, hi_u32 d0, hi_u32 d1, hi_u16 msg_level); 365 366 /** 367 * @ingroup iot_diag 368 * @brief Reports simple packet that with three words data. CNcomment:上报简单日志,携带3个数据。CNend 369 * 370 * @par 描述: 371 * Reports simple packets, fixed module ID. CNcomment:上报简单日志消息,固定模块ID。CNend 372 * 373 * @attention None 374 * @param msg_id [IN] type #hi_u32,log message ID. CNcomment:日志消息ID。CNend 375 * @param d0 [IN] type #hi_u32,first data. CNcomment:携带的第1个数据。Cnend 376 * @param d1 [IN] type #hi_u32,second data. CNcomment:携带的第2个数据。CNend 377 * @param d2 [IN] type #hi_u32,third data. CNcomment:携带的第3个数据。CNend 378 * @param msg_level [IN] type #hi_u16,log message level, [HI_MSG_SYS_L0, HI_MSG_SYS_L2] 379 CNcomment:日志消息级别,取值从:HI_MSG_SYS_L0- HI_MSG_SYS_L2。CNend 380 * 381 * @retval #0 Success. 382 * @retval #Other Failure. For details, see hi_errno.h. 383 * @par 依赖: 384 * @li hi_diag.h:Describes DIAG APIs. 385 CNcomment:文件用于描述DIAG相关接口。CNend 386 * @see None 387 */ 388 hi_u32 hi_diag_log_msg3(hi_u32 msg_id, hi_u32 d0, hi_u32 d1, hi_u32 d2, hi_u16 msg_level); 389 390 /** 391 * @ingroup iot_diag 392 * @brief Reports simple packet that with four words data. CNcomment:上报简单日志,携带4个数据。CNend 393 * 394 * @par 描述: 395 * Reports simple packets, fixed module ID. CNcomment:上报简单日志消息,固定模块ID。CNend 396 * 397 * @attention None 398 * @param msg_id [IN] type #hi_u32,log message ID. CNcomment:日志消息ID。CNend 399 * @param log_msg [IN] type #diag_log_msg,four words. CNcomment:携带4个数据。CNend 400 * @param msg_level [IN] type #hi_u16,log message level, [HI_MSG_SYS_L0, HI_MSG_SYS_L2] 401 CNcomment:日志消息级别,取值从:HI_MSG_SYS_L0- HI_MSG_SYS_L2。CNend 402 * 403 * @retval #0 Success. 404 * @retval #Other Failure. For details, see hi_errno.h. 405 * @par 依赖: 406 * @li hi_diag.h:Describes DIAG APIs. 407 CNcomment:文件用于描述DIAG相关接口。CNend 408 * @see None 409 */ 410 hi_u32 hi_diag_log_msg4(hi_u32 msg_id, diag_log_msg log_msg, hi_u16 msg_level); 411 412 /** 413 * @ingroup iot_diag 414 * @brief Reports simple packet that with one buffer data. CNcomment:上报简单日志,携带数据buffer。CNend 415 * 416 * @par 描述: 417 * Reports simple packets, fixed module ID. CNcomment:上报简单日志消息,固定模块ID。CNend 418 * 419 * @attention A maximum of 99 bytes can be send in one diag packet, so param size cannot be greater than 99. 420 CNcomment:diag单包最多能发99字节数据,参数size不能大于99。CNend 421 * @param msg_id [IN] type #hi_u32,log message ID. CNcomment:日志消息ID。CNend 422 * @param buffer [IN] type #hi_pvoid,address of the data. CNcomment:携带的数据buffer首地址。CNend 423 * @param size [IN] type #hi_16,buffer size (unit byte). 424 CNcomment:携带的数据buffer长度(单位byte)。CNend 425 * @param msg_level [IN] type #hi_u16,log message level, [HI_MSG_SYS_L0, HI_MSG_SYS_L2] 426 CNcomment:日志消息级别,取值从:HI_MSG_SYS_L0- HI_MSG_SYS_L2。CNend 427 * 428 * @retval #0 Success. 429 * @retval #Other Failure. For details, see hi_errno.h. 430 * @par 依赖: 431 * @li hi_diag.h:Describes DIAG APIs. 432 CNcomment:文件用于描述DIAG相关接口。CNend 433 * @see None 434 */ 435 hi_u32 hi_diag_log_msg_buffer(hi_u32 msg_id, hi_pvoid buffer, hi_u16 size, hi_u16 msg_level); 436 437 /** 438 * @ingroup iot_diag 439 * @brief Reports layer log that without data. CNcomment:上报层间简单日志,不携带数据内容。CNend 440 * 441 * @par 描述: 442 * Reports layer log that without data. CNcomment:上报层间简单日志,不携带数据内容。CNend 443 * 444 * @attention None 445 * @param msg_id [IN] type #hi_u32,log message ID. CNcomment:日志消息ID。CNend 446 * @param module_id [IN] type #hi_u16,message module ID,describe which module the log belongs to. 447 CNcomment:消息模块ID,描述日志属于哪个模块。CNend 448 * 449 * @retval #0 Success. 450 * @retval #Other Failure. For details, see hi_errno.h. 451 * @par 依赖: 452 * @li hi_diag.h:Describes DIAG APIs. 453 CNcomment:文件用于描述DIAG相关接口。CNend 454 * @see None 455 */ 456 hi_u32 hi_diag_layer_msg0(hi_u32 msg_id, hi_u16 module_id); 457 458 /** 459 * @ingroup iot_diag 460 * @brief Reports layer log that with one word data. CNcoment:上报层间简单日志,携带1个数据。CNend 461 * 462 * @par 描述: 463 * Reports layer log that with one word data. CNcoment:上报层间简单日志,携带1个数据。CNend 464 * 465 * @attention None 466 * @param msg_id [IN] type #hi_u32,log message ID. CNcomment:日志消息ID。CNend 467 * @param module_id [IN] type #hi_u16,message module ID,describe which module the log belongs to. 468 CNcomment:消息模块ID,描述日志属于哪个模块。CNend 469 * @param d0 [IN] type #hi_u32,first data. CNcomment:携带的第1个数据。CNend 470 * 471 * @retval #0 Success. 472 * @retval #Other Failure. For details, see hi_errno.h. 473 * @par 依赖: 474 * @li hi_diag.h:Describes DIAG APIs. 475 CNcomment:文件用于描述DIAG相关接口。CNend 476 * @see None 477 */ 478 hi_u32 hi_diag_layer_msg1(hi_u32 msg_id, hi_u16 module_id, hi_u32 d0); 479 480 /** 481 * @ingroup iot_diag 482 * @brief Reports layer log that with two words data. CNcoment:上报层间简单日志,携带2个数据。CNend 483 * 484 * @par 描述: 485 * Reports layer log that with two words data. CNcoment:上报层间简单日志,携带2个数据。CNend 486 * 487 * @attention None 488 * @param msg_id [IN] type #hi_u32,log message ID. CNcomment:日志消息ID。CNend 489 * @param module_id [IN] type #hi_u16,message module ID,describe which module the log belongs to. 490 CNcomment:消息模块ID,描述日志属于哪个模块。CNend 491 * @param d0 [IN] type #hi_u32,first data. CNcomment:携带的第1个数据。CNend 492 * @param d1 [IN] type #hi_u32,second data. CNcomment:携带的第2个数据。CNend 493 * 494 * @retval #0 Success. 495 * @retval #Other Failure. For details, see hi_errno.h. 496 * @par 依赖: 497 * @li hi_diag.h:Describes DIAG APIs. 498 CNcomment:文件用于描述DIAG相关接口。CNend 499 * @see None 500 */ 501 hi_u32 hi_diag_layer_msg2(hi_u32 msg_id, hi_u16 module_id, hi_u32 d0, hi_u32 d1); 502 503 /** 504 * @ingroup iot_diag 505 * @brief Reports layer log that with 3 words data. CNcoment:上报层间简单日志,携带3个数据。CNend 506 * 507 * @par 描述: 508 * Reports layer log that with 3 words data. CNcoment:上报层间简单日志,携带3个数据。CNend 509 * 510 * @attention None 511 * @param msg_id [IN] type #hi_u32,log message ID. CNcomment:日志消息ID。CNend 512 * @param module_id [IN] type #hi_u16,message module ID,describe which module the log belongs to. 513 CNcomment:消息模块ID,描述日志属于哪个模块。CNend 514 * @param d0 [IN] type #hi_u32,first data. CNcomment:携带的第1个数据。CNend 515 * @param d1 [IN] type #hi_u32,second data. CNcomment:携带的第2个数据。CNend 516 * @param d2 [IN] type #hi_u32,third data. CNcomment:携带的第3个数据。CNend 517 * 518 * @retval #0 Success. 519 * @retval #Other Failure. For details, see hi_errno.h. 520 * @par 依赖: 521 * @li hi_diag.h:Describes DIAG APIs. 522 CNcomment:文件用于描述DIAG相关接口。CNend 523 * @see None 524 */ 525 hi_u32 hi_diag_layer_msg3(hi_u32 msg_id, hi_u16 module_id, hi_u32 d0, hi_u32 d1, hi_u32 d2); 526 527 /** 528 * @ingroup iot_diag 529 * @brief Reports layer log that with 4 words data. CNcoment:上报层间简单日志,携带4个数据。CNend 530 * 531 * @par 描述: 532 * Reports layer log that with 4 words data. CNcoment:上报层间简单日志,携带4个数据。CNend 533 * 534 * @attention None 535 * @param msg_id [IN] type #hi_u32,log message ID. CNcomment:日志消息ID。CNend 536 * @param module_id [IN] type #hi_u16,message module ID,describe which module the log belongs to. 537 CNcomment:消息模块ID,描述日志属于哪个模块。CNend 538 * @param log_msg [IN] type #diag_log_msg,four data to report. CNcomment:携带4个数据。CNend 539 * 540 * @retval #0 Success. 541 * @retval #Other Failure. For details, see hi_errno.h. 542 * @par 依赖: 543 * @li hi_diag.h:Describes DIAG APIs. 544 */ 545 hi_u32 hi_diag_layer_msg4(hi_u32 msg_id, hi_u16 module_id, diag_log_msg log_msg); 546 547 /** 548 * @ingroup iot_diag 549 * @brief Reports layer log that with one buffer data. CNcomment:上报层间简单日志,携带数据buffer。CNend 550 * 551 * @par 描述: 552 * Reports layer log that with one buffer data. CNcomment:上报层间简单日志,携带数据buffer。CNend 553 * 554 * @attention A maximum of 99 bytes can be send in one diag packet, so param size cannot be greater than 99. 555 CNcomment:diag单包最多能发99字节数据,参数size不能大于99。CNend 556 * @param msg_id [IN] type #hi_u32,log message ID. CNcomment:日志消息ID。CNend 557 * @param module_id [IN] type #hi_u16,message module ID,describe which module the log belongs to. 558 CNcomment:消息模块ID,描述日志属于哪个模块。CNend 559 * @param buffer [IN] type #const hi_pvoid,address of the data. CNcomment:携带的数据buffer首地址。CNend 560 * @param size [IN] type #hi_16,buffer size (unit byte). 561 CNcomment:携带的数据buffer长度(单位byte)。CNend 562 * 563 * @retval #0 Success. 564 * @retval #Other Failure. For details, see hi_errno.h. 565 * @par 依赖: 566 * @li hi_diag.h:Describes DIAG APIs. 567 CNcomment:文件用于描述DIAG相关接口。CNend 568 * @see None 569 */ 570 hi_u32 hi_diag_layer_msg_buffer(hi_u32 msg_id, hi_u16 module_id, const hi_void *buffer, hi_u16 size); 571 572 typedef struct { 573 hi_u16 size1; 574 hi_u16 size2; 575 } diag_buffer_size; 576 577 /** 578 * @ingroup iot_diag 579 * @brief Reports layer log that with two buffer data. CNcomment:上报层间简单日志,支持携带两个数据buffer。CNend 580 * 581 * @par 描述: 582 * Reports layer log that with two buffer data. CNcomment:上报层间简单日志,支持携带两个数据buffer。CNend 583 * 584 * @attention A maximum of 99 bytes can be send in one diag packet.A space is reserved between two buffers. 585 Therefore, the sum of buffer_size.size1 and buffer_size.size2 cannot be greater than 98. 586 CNcomment:diag单包最多能发99字节数据,两个buffer之间会预留一个空格,所以参数buffer_size.size1与buffer_size.size2的和不能大于98。CNend 587 * @param msg_id [IN] type #hi_u32,log message ID. CNcomment:日志消息ID。CNend 588 * @param module_id [IN] type #hi_u16,message module ID,describe which module the log belongs to. 589 CNcomment:消息模块ID,描述日志属于哪个模块。CNend 590 * @param buf1 [IN] type #const hi_void *,address of the first buffer. 591 CNcomment:携带的数据buffer1首地址。CNend 592 * @param buf1 [IN] type #const hi_void *,address of the second buffer. 593 CNcomment:携带的数据buffer2首地址。CNend 594 * @param buffer_size [IN] type #diag_buffer_size,two buffer size (unit byte). 595 CNcomment:携带的数据buffer长度(单位byte)。CNend 596 * 597 * @retval #0 Success. 598 * @retval #Other Failure. For details, see hi_errno.h. 599 * @par 依赖: 600 * @li hi_diag.h:Describes DIAG APIs. 601 */ 602 hi_u32 hi_diag_layer_two_buffer(hi_u32 msg_id, hi_u16 module_id, const hi_void *buf1, 603 const hi_void *buf2, diag_buffer_size buffer_size); 604 605 /** 606 * @ingroup iot_diag 607 * @brief Set whether to check the UART busy status when low power vote. 608 CNcomment:设置低功耗投票时是否检查UART busy状态。CNend 609 * 610 * @par 描述: 611 * Set whether to check the UART busy status when low power vote. 612 CNcomment:设置低功耗投票时是否检查UART busy状态。CNend 613 * 614 * @attention UART busy status is not checked by default. 615 CNcomment:默认低功耗睡眠投票时不检查UART busy状态。CNend 616 * @param enable [IN] type #hi_bool,enable status. CNcomment:设置是否检查UART busy状态。CNend 617 * 618 * @retval None 619 * @par 依赖: 620 * @li hi_diag.h:Describes DIAG APIs. 621 CNcomment:文件用于描述DIAG相关接口。CNend 622 */ 623 hi_void hi_diag_set_check_uart_busy(hi_bool enable); 624 625 typedef hi_s32 (*hi_diag_input_func)(hi_u8 *data, hi_u32 data_len); 626 typedef hi_s32 (*hi_diag_output_func)(const hi_u8 *data, hi_u32 data_len); 627 628 /** 629 * @ingroup iot_diag 630 * @brief Register diag input function to replace uart input. 631 CNcomment:注册DIAG输入函数,代替默认从UART读取DIAG输入数据。CNend 632 * 633 * @par 描述: 634 * Register diag input function to replace uart input. 635 CNcomment:注册DIAG输入函数,代替默认从UART读取DIAG输入数据。CNend 636 * 637 * @attention Should set suitable task size; input func should not continuous read data without break. otherwise, 638 a watchdog may happen.not support register HI_NULL when diag channel is already uart. 639 CNcomment:根据输入函数实现,设置合适的栈大小;输入函数不能持续 640 返回有效数据避免触发看门狗。当DIAG 通道已经是UART时,不支持注 641 册DIAG 输入函数为HI_NULL。CNend 642 * @param diag_input_func [IN] type #hi_diag_input_func,diag input function. 643 CNcomment:DIAG输入函数。CNend 644 * 645 * @retval #0 Success. 646 * @retval #Other Failure. For details, see hi_errno.h. 647 * @par 依赖: 648 * @li hi_diag.h:Describes DIAG APIs. 649 CNcomment:文件用于描述DIAG相关接口。CNend 650 */ 651 hi_u32 hi_diag_register_input_func(hi_diag_input_func diag_input_func); 652 653 /** 654 * @ingroup iot_diag 655 * @brief Register diag output function to replace uart output. 656 CNcomment:注册DIAG输出函数,代替默认从UART输出DIAG相关数据。CNend 657 * 658 * @par 描述: 659 * Register diag output function to replace uart output. 660 CNcomment:注册DIAG输出函数,代替默认从UART输出DIAG相关数据。CNend 661 * 662 * @attention Should set suitable task size according to implementation of output func. 663 CNcomment:根据输出函数实现,设置合适的栈大小。CNend 664 * @param diag_output_func [IN] type #hi_diag_output_func,diag output function. 665 CNcomment:DIAG输出函数。CNend 666 * 667 * @retval None 668 * @par 依赖: 669 * @li hi_diag.h:Describes DIAG APIs. 670 CNcomment:文件用于描述DIAG相关接口。CNend 671 */ 672 hi_void hi_diag_register_output_func(hi_diag_output_func diag_output_func); 673 674 /** 675 * @ingroup iot_diag 676 * @brief Set taks size of DIAG. CNcomment:设置DIAG相关任务栈大小。CNend 677 * 678 * @par 描述: 679 * Set taks size of DIAG. CNcomment:设置DIAG相关任务栈大小。CNend 680 * 681 * @attention diag task stack size needs to be set before diag initialization. 682 CNcomment:diag任务栈大小需要在diag初始化之前设置。CNend 683 * @param channel_task_size [IN] type #hi_u16 channel task size,task size should not smaller than 0x600. 684 CNcomment:通道任务栈大小,任务栈大小不低于0x600。CNend 685 * @param process_task_size [IN] type #hi_u16 process task size,task size should not smaller than 0x800. 686 CNcomment:处理任务栈大小,任务栈大小不低于0x800。CNend 687 * 688 * @retval None 689 * @par 依赖: 690 * @li hi_diag.h:Describes DIAG APIs. 691 CNcomment:文件用于描述DIAG相关接口。CNend 692 */ 693 hi_void hi_diag_set_task_size(hi_u16 channel_task_size, hi_u16 process_task_size); 694 695 696 typedef hi_u32 (*hi_diag_sys_msg_forward_func)(const hi_diag_layer_msg *diag_sys_msg, hi_u16 msg_level); 697 typedef hi_u32 (*hi_diag_layer_msg_forward_func)(hi_u32 msg_id, hi_u16 src_module_id, hi_u16 dst_module_id, 698 const hi_void *packet, hi_u16 packet_size); 699 typedef hi_u32 (*hi_diag_usr_msg_forward_func)(const hi_diag_layer_msg* diag_usr_msg, hi_u16 msg_level); 700 701 /** 702 * @ingroup iot_diag 703 * @brief Register msg forward func. CNcomment:设置消息转发函数,替代默认从HSO输出。CNend 704 * 705 * @par 描述: 706 * Register msg forward func. CNcomment:设置消息转发函数,替代默认从HSO输出。CNend 707 * 708 * @attention None. 709 * @param diag_sys_msg_func [IN] type #hi_diag_sys_msg_forward_func forward function of sys_msg. 710 CNcomment:sys_msg的转发函数。CNend 711 * @param diag_layer_msg_func [IN] type #hi_diag_layer_msg_forward_func forward function of layer_msg. 712 CNcomment:layder_msg的转发函数。CNend 713 * @param diag_usr_msg_func [IN] type #hi_diag_usr_msg_forward_func forward function of usr_msg. 714 CNcomment:usr_msg的转发函数。CNend 715 * 716 * @retval None 717 * @par 依赖: 718 * @li hi_diag.h:Describes DIAG APIs. 719 CNcomment:文件用于描述DIAG相关接口。CNend 720 */ 721 hi_void hi_diag_register_msg_forward_func(hi_diag_sys_msg_forward_func diag_sys_msg_func, 722 hi_diag_layer_msg_forward_func diag_layer_msg_func, hi_diag_usr_msg_forward_func diag_usr_msg_func); 723 724 725 #endif 726