• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2 * @file hi_at.h
3 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 
17 /** @defgroup iot_at  AT Command
18  *  @ingroup dfx
19  */
20 #ifndef __HI_AT_H__
21 #define __HI_AT_H__
22 #include <hi_types.h>
23 
24 typedef hi_u32 (*at_call_back_func)(hi_s32 argc, const hi_char **argv);
25 
26 typedef struct {
27     hi_char *at_cmd_name;
28     hi_s8   at_cmd_len;
29     at_call_back_func at_test_cmd;
30     at_call_back_func at_query_cmd;
31     at_call_back_func at_setup_cmd;
32     at_call_back_func at_exe_cmd;
33 } at_cmd_func;
34 
35 typedef enum {
36     AT_IDLE,
37     AT_CMD_PROCESS,
38     AT_DATA_RECVING,
39     AT_DATA_SENDING,
40     AT_TRANSPARENT,
41 } at_state_machine;
42 
43 typedef struct {
44     at_state_machine at_state;
45     hi_u16 send_len;
46     hi_u16 trans_len;
47     hi_bool is_first_recv_data;
48     hi_bool is_first_over_data;
49     hi_u16 is_recv_end_char_flag;
50 } at_cmd_ctrl;
51 
52 typedef  hi_s32 (*hi_at_input_func)(hi_u8 *data, hi_u32 data_len);
53 typedef  hi_s32 (*hi_at_output_func)(const hi_u8 *data, hi_u32 data_len);
54 
55 /**
56 * @ingroup  iot_at
57 * @brief  Get at registered output function.
58 CNcomment:获取AT注册的输出函数。CNend
59 *
60 * @par 描述:
61 *      Get at registered output function.
62 CNcomment:获取AT注册的输出函数。CNend
63 *
64 * @attention None.
65 * @param  None.
66 *
67 * @retval #g_at_output_func   At output function.
68 * @par 依赖:
69 *           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
70 * @see  None
71 */
72 hi_at_output_func hi_at_get_register_output_func(hi_void);
73 
74 /**
75 * @ingroup  iot_at
76 * @brief  Registration command processing function.CNcomment:注册命令处理函数。CNend
77 *
78 * @par 描述:
79 *           @li This command is invoked during initialization and cannot be invoked by multiple tasks.
80 CNcomment:在初始化阶段调用, 不支持多任务调用。CNend
81 *           @li A maximum of 20 different command tables can be registered.
82 CNcomment:最多能注册20个不同的命令表。CNend
83 *
84 * @attention None
85 * @param  cmd_tbl    [IN] type #at_cmd_func*,Command table, which must be declared as a constant array and
86 *                    transferred to this parameter.CNcomment:命令表,
87 必须申明为常量数组传给该参数。CNend
88 * @param  cmd_num    [IN] type #hi_u16,The number of commands. The value must be equal to the actual number of
89 *                    commands in the command table. If it is less than the actual command number, only the number of
90 *                    commands equal to this value is registered. If it is greater than the actual command number,
91 *                    the command table will be accessed out of bounds.
92 CNcomment:命令表中命令的个数,该值必须等于命令表中实际的命令个数,如果小于实际命令数,则只注册等于该值的命令个数,
93           大于实际命令个数将会导致越界访问命令表。CNend
94 *
95 * @retval #HI_ERR_SUCCESS         Success.
96 * @retval #Other     Failure. For details, see hi_errno.h.
97 * @par 依赖:
98 *           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
99 * @see  None
100 */
101 hi_u32 hi_at_register_cmd(HI_CONST at_cmd_func *cmd_tbl, hi_u16 cmd_num);
102 
103 /**
104 * @ingroup  iot_at
105 * @brief  Register system AT command. CNcomment:注册系统AT命令。CNend
106 *
107 * @par 描述:
108 *           Register system AT command. CNcomment:该函数用于注册系统AT命令。CNend
109 * @param None
110 * @retval None
111 *
112 * @par 依赖:
113 *           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
114 * @see  None
115 */
116 hi_void hi_at_sys_cmd_register(hi_void);
117 
118 /**
119 * @ingroup  iot_at
120 * @brief  Formats the data and outputs it to AT command terminal.
121 CNcomment:将数据格式化输出到AT命令终端。CNend
122 *
123 * @par 描述: Formats the data and outputs it to AT command terminal.
124 CNcomment:将数据格式化输出到AT命令终端。CNend
125 * @attention None
126 *
127 * @param fmt      [IN]  type #const hi_char *。 Formatting control string.CNcomment:格式化控制字符串。CNend
128 * @param ...      [IN]  Optional parameter CNcomment:可选参数。CNend
129 *
130 * @retval #>=0 Return the number of bytes stored in terminal, not counting the terminating null character.
131 CNcomment:返回输出到终端的字节数,不包括结束符CNend
132 * @retval #-1 Failure
133 *
134 * @par 依赖:
135 *           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
136 * @see None
137 */
138 hi_s32 hi_at_printf(const hi_char *fmt, ...);
139 
140 /**
141 * @ingroup  iot_at
142 * @brief  Initializes the AT task. CNcomment:AT命令任务初始化。CNend
143 *
144 * @par 描述:
145 *           Initializes the AT task. CNcomment:该函数用于初始化AT命令任务。CNend
146 * @param None
147 * @retval #HI_ERR_SUCCESS         Success.
148 * @retval #Other     Failure. For details, see hi_errno.h.
149 *
150 * @par 依赖:
151 *           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
152 * @see  None
153 */
154 hi_u32 hi_at_init(hi_void);
155 
156 /**
157 * @ingroup  iot_at
158 * @brief  Set taks size of AT. CNcomment:设置AT相关任务栈大小。CNend
159 *
160 * @par 描述:
161 *         Set taks size of AT. CNcomment:设置AT相关任务栈大小。CNend
162 *
163 * @attention AT task stack size needs to be set before AT initialization.
164 CNcomment:AT任务栈大小需要在AT初始化之前设置。CNend
165 * @param  channel_task_size      [IN] type #hi_u16 channel task size, task size should not smaller than 0x600.
166 CNcomment:通道任务栈大小, 任务栈大小不低于0x600。Nend
167 * @param  process_task_size      [IN] type #hi_u16 process task size, task size should not smaller than 0xc00.
168 CNcomment:处理任务栈大小, 任务栈大小不低于0xc00。CNend
169 *
170 * @retval None
171 * @par 依赖:
172 *           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
173 * @see  None
174 */
175 hi_void hi_at_set_task_size(hi_u16 channel_task_size, hi_u16 process_task_size);
176 
177 /**
178 * @ingroup  iot_at
179 * @brief  Set whether to check the UART busy status when low power vote.
180 CNcomment:设置低功耗投票时是否检查UART busy状态。CNend
181 *
182 * @par 描述:
183 *      Set whether to check the UART busy status when low power vote.
184 CNcomment:设置低功耗投票时是否检查UART busy状态。CNend
185 *
186 * @attention UART busy status is checked by default.
187 CNcomment:默认低功耗睡眠投票时检查UART busy状态。CNend
188 * @param  enable         [IN] type #hi_bool,enable status. CNcomment:设置是否检查UART busy状态。CNend
189 *
190 * @retval None
191 * @par 依赖:
192 *           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
193 * @see  None
194 */
195 hi_void hi_at_set_check_uart_busy(hi_bool enable);
196 
197 /**
198 * @ingroup  iot_at
199 * @brief  Register at input function to replace uart input.
200 CNcomment:注册AT输入函数,代替默认从UART读取AT输入数据。CNend
201 *
202 * @par 描述:
203 *      Register at input function to replace uart input.
204 CNcomment:注册AT输入函数,代替默认从UART读取AT输入数据。CNend
205 *
206 * @attention Should set suitable task size; input func should not continuous read data without break. otherwise,
207 a watchdog may happen.not support register HI_NULL when at channel is already uart.
208 CNcomment:根据输入函数实现,设置合适的栈大小;输入函数不能持续
209 返回有效数据避免触发看门狗。当AT通道已经是UART时,不支持注
210 册AT 输入函数为HI_NULL。CNend
211 * @param  at_input_func      [IN] type #hi_at_input_func,at input funciton.
212 CNcomment:AT输入函数。CNend
213 * @retval #0                 Success.
214 * @retval #Other             Failure. For details, see hi_errno.h.
215 * @par 依赖:
216 *           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
217 * @see  None
218 */
219 hi_u32 hi_at_register_input_func(hi_at_input_func at_input_func);
220 
221 /**
222 * @ingroup  iot_at
223 * @brief  Register at output function to replace uart output.
224 CNcomment:注册AT命令输出函数,代替默认从UART输出AT相关数据。CNend
225 *
226 * @par 描述:
227 *      Register at output function to replace uart output.
228 CNcomment:注册AT命令输出函数,代替默认从UART输出AT相关数据。CNend
229 *
230 * @attention Should set suitable task size according to implementation of output func.
231 CNcomment:根据输出函数实现,设置合适的栈大小。CNend
232 * @param  at_output_func      [IN] type #hi_at_output_func,at output function.
233 CNcomment:AT输出函数。CNend
234 * @retval None
235 * @par 依赖:
236 *           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
237 * @see  None
238 */
239 hi_void hi_at_register_output_func(hi_at_output_func at_output_func);
240 
241 #endif
242