• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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