11bd4fe43Sopenharmony_ci/**
21bd4fe43Sopenharmony_ci* @file hi_at.h
31bd4fe43Sopenharmony_ci* Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
41bd4fe43Sopenharmony_ci* Licensed under the Apache License, Version 2.0 (the "License");
51bd4fe43Sopenharmony_ci* you may not use this file except in compliance with the License.
61bd4fe43Sopenharmony_ci* You may obtain a copy of the License at
71bd4fe43Sopenharmony_ci*
81bd4fe43Sopenharmony_ci*     http://www.apache.org/licenses/LICENSE-2.0
91bd4fe43Sopenharmony_ci*
101bd4fe43Sopenharmony_ci* Unless required by applicable law or agreed to in writing, software
111bd4fe43Sopenharmony_ci* distributed under the License is distributed on an "AS IS" BASIS,
121bd4fe43Sopenharmony_ci* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131bd4fe43Sopenharmony_ci* See the License for the specific language governing permissions and
141bd4fe43Sopenharmony_ci* limitations under the License.
151bd4fe43Sopenharmony_ci*/
161bd4fe43Sopenharmony_ci
171bd4fe43Sopenharmony_ci/** @defgroup iot_at  AT Command
181bd4fe43Sopenharmony_ci *  @ingroup dfx
191bd4fe43Sopenharmony_ci */
201bd4fe43Sopenharmony_ci#ifndef __HI_AT_H__
211bd4fe43Sopenharmony_ci#define __HI_AT_H__
221bd4fe43Sopenharmony_ci#include <hi_types.h>
231bd4fe43Sopenharmony_ci
241bd4fe43Sopenharmony_citypedef hi_u32 (*at_call_back_func)(hi_s32 argc, const hi_char **argv);
251bd4fe43Sopenharmony_ci
261bd4fe43Sopenharmony_citypedef struct {
271bd4fe43Sopenharmony_ci    hi_char *at_cmd_name;
281bd4fe43Sopenharmony_ci    hi_s8   at_cmd_len;
291bd4fe43Sopenharmony_ci    at_call_back_func at_test_cmd;
301bd4fe43Sopenharmony_ci    at_call_back_func at_query_cmd;
311bd4fe43Sopenharmony_ci    at_call_back_func at_setup_cmd;
321bd4fe43Sopenharmony_ci    at_call_back_func at_exe_cmd;
331bd4fe43Sopenharmony_ci} at_cmd_func;
341bd4fe43Sopenharmony_ci
351bd4fe43Sopenharmony_citypedef enum {
361bd4fe43Sopenharmony_ci    AT_IDLE,
371bd4fe43Sopenharmony_ci    AT_CMD_PROCESS,
381bd4fe43Sopenharmony_ci    AT_DATA_RECVING,
391bd4fe43Sopenharmony_ci    AT_DATA_SENDING,
401bd4fe43Sopenharmony_ci    AT_TRANSPARENT,
411bd4fe43Sopenharmony_ci} at_state_machine;
421bd4fe43Sopenharmony_ci
431bd4fe43Sopenharmony_citypedef struct {
441bd4fe43Sopenharmony_ci    at_state_machine at_state;
451bd4fe43Sopenharmony_ci    hi_u16 send_len;
461bd4fe43Sopenharmony_ci    hi_u16 trans_len;
471bd4fe43Sopenharmony_ci    hi_bool is_first_recv_data;
481bd4fe43Sopenharmony_ci    hi_bool is_first_over_data;
491bd4fe43Sopenharmony_ci    hi_u16 is_recv_end_char_flag;
501bd4fe43Sopenharmony_ci} at_cmd_ctrl;
511bd4fe43Sopenharmony_ci
521bd4fe43Sopenharmony_citypedef  hi_s32 (*hi_at_input_func)(hi_u8 *data, hi_u32 data_len);
531bd4fe43Sopenharmony_citypedef  hi_s32 (*hi_at_output_func)(const hi_u8 *data, hi_u32 data_len);
541bd4fe43Sopenharmony_ci
551bd4fe43Sopenharmony_ci/**
561bd4fe43Sopenharmony_ci* @ingroup  iot_at
571bd4fe43Sopenharmony_ci* @brief  Get at registered output function.
581bd4fe43Sopenharmony_ciCNcomment:获取AT注册的输出函数。CNend
591bd4fe43Sopenharmony_ci*
601bd4fe43Sopenharmony_ci* @par 描述:
611bd4fe43Sopenharmony_ci*      Get at registered output function.
621bd4fe43Sopenharmony_ciCNcomment:获取AT注册的输出函数。CNend
631bd4fe43Sopenharmony_ci*
641bd4fe43Sopenharmony_ci* @attention None.
651bd4fe43Sopenharmony_ci* @param  None.
661bd4fe43Sopenharmony_ci*
671bd4fe43Sopenharmony_ci* @retval #g_at_output_func   At output function.
681bd4fe43Sopenharmony_ci* @par 依赖:
691bd4fe43Sopenharmony_ci*           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
701bd4fe43Sopenharmony_ci* @see  None
711bd4fe43Sopenharmony_ci*/
721bd4fe43Sopenharmony_cihi_at_output_func hi_at_get_register_output_func(hi_void);
731bd4fe43Sopenharmony_ci
741bd4fe43Sopenharmony_ci/**
751bd4fe43Sopenharmony_ci* @ingroup  iot_at
761bd4fe43Sopenharmony_ci* @brief  Registration command processing function.CNcomment:注册命令处理函数。CNend
771bd4fe43Sopenharmony_ci*
781bd4fe43Sopenharmony_ci* @par 描述:
791bd4fe43Sopenharmony_ci*           @li This command is invoked during initialization and cannot be invoked by multiple tasks.
801bd4fe43Sopenharmony_ciCNcomment:在初始化阶段调用, 不支持多任务调用。CNend
811bd4fe43Sopenharmony_ci*           @li A maximum of 20 different command tables can be registered.
821bd4fe43Sopenharmony_ciCNcomment:最多能注册20个不同的命令表。CNend
831bd4fe43Sopenharmony_ci*
841bd4fe43Sopenharmony_ci* @attention None
851bd4fe43Sopenharmony_ci* @param  cmd_tbl    [IN] type #at_cmd_func*,Command table, which must be declared as a constant array and
861bd4fe43Sopenharmony_ci*                    transferred to this parameter.CNcomment:命令表,
871bd4fe43Sopenharmony_ci必须申明为常量数组传给该参数。CNend
881bd4fe43Sopenharmony_ci* @param  cmd_num    [IN] type #hi_u16,The number of commands. The value must be equal to the actual number of
891bd4fe43Sopenharmony_ci*                    commands in the command table. If it is less than the actual command number, only the number of
901bd4fe43Sopenharmony_ci*                    commands equal to this value is registered. If it is greater than the actual command number,
911bd4fe43Sopenharmony_ci*                    the command table will be accessed out of bounds.
921bd4fe43Sopenharmony_ciCNcomment:命令表中命令的个数,该值必须等于命令表中实际的命令个数,如果小于实际命令数,则只注册等于该值的命令个数,
931bd4fe43Sopenharmony_ci          大于实际命令个数将会导致越界访问命令表。CNend
941bd4fe43Sopenharmony_ci*
951bd4fe43Sopenharmony_ci* @retval #HI_ERR_SUCCESS         Success.
961bd4fe43Sopenharmony_ci* @retval #Other     Failure. For details, see hi_errno.h.
971bd4fe43Sopenharmony_ci* @par 依赖:
981bd4fe43Sopenharmony_ci*           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
991bd4fe43Sopenharmony_ci* @see  None
1001bd4fe43Sopenharmony_ci*/
1011bd4fe43Sopenharmony_cihi_u32 hi_at_register_cmd(HI_CONST at_cmd_func *cmd_tbl, hi_u16 cmd_num);
1021bd4fe43Sopenharmony_ci
1031bd4fe43Sopenharmony_ci/**
1041bd4fe43Sopenharmony_ci* @ingroup  iot_at
1051bd4fe43Sopenharmony_ci* @brief  Register system AT command. CNcomment:注册系统AT命令。CNend
1061bd4fe43Sopenharmony_ci*
1071bd4fe43Sopenharmony_ci* @par 描述:
1081bd4fe43Sopenharmony_ci*           Register system AT command. CNcomment:该函数用于注册系统AT命令。CNend
1091bd4fe43Sopenharmony_ci* @param None
1101bd4fe43Sopenharmony_ci* @retval None
1111bd4fe43Sopenharmony_ci*
1121bd4fe43Sopenharmony_ci* @par 依赖:
1131bd4fe43Sopenharmony_ci*           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
1141bd4fe43Sopenharmony_ci* @see  None
1151bd4fe43Sopenharmony_ci*/
1161bd4fe43Sopenharmony_cihi_void hi_at_sys_cmd_register(hi_void);
1171bd4fe43Sopenharmony_ci
1181bd4fe43Sopenharmony_ci/**
1191bd4fe43Sopenharmony_ci* @ingroup  iot_at
1201bd4fe43Sopenharmony_ci* @brief  Formats the data and outputs it to AT command terminal.
1211bd4fe43Sopenharmony_ciCNcomment:将数据格式化输出到AT命令终端。CNend
1221bd4fe43Sopenharmony_ci*
1231bd4fe43Sopenharmony_ci* @par 描述: Formats the data and outputs it to AT command terminal.
1241bd4fe43Sopenharmony_ciCNcomment:将数据格式化输出到AT命令终端。CNend
1251bd4fe43Sopenharmony_ci* @attention None
1261bd4fe43Sopenharmony_ci*
1271bd4fe43Sopenharmony_ci* @param fmt      [IN]  type #const hi_char *。 Formatting control string.CNcomment:格式化控制字符串。CNend
1281bd4fe43Sopenharmony_ci* @param ...      [IN]  Optional parameter CNcomment:可选参数。CNend
1291bd4fe43Sopenharmony_ci*
1301bd4fe43Sopenharmony_ci* @retval #>=0 Return the number of bytes stored in terminal, not counting the terminating null character.
1311bd4fe43Sopenharmony_ciCNcomment:返回输出到终端的字节数,不包括结束符CNend
1321bd4fe43Sopenharmony_ci* @retval #-1 Failure
1331bd4fe43Sopenharmony_ci*
1341bd4fe43Sopenharmony_ci* @par 依赖:
1351bd4fe43Sopenharmony_ci*           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
1361bd4fe43Sopenharmony_ci* @see None
1371bd4fe43Sopenharmony_ci*/
1381bd4fe43Sopenharmony_cihi_s32 hi_at_printf(const hi_char *fmt, ...);
1391bd4fe43Sopenharmony_ci
1401bd4fe43Sopenharmony_ci/**
1411bd4fe43Sopenharmony_ci* @ingroup  iot_at
1421bd4fe43Sopenharmony_ci* @brief  Initializes the AT task. CNcomment:AT命令任务初始化。CNend
1431bd4fe43Sopenharmony_ci*
1441bd4fe43Sopenharmony_ci* @par 描述:
1451bd4fe43Sopenharmony_ci*           Initializes the AT task. CNcomment:该函数用于初始化AT命令任务。CNend
1461bd4fe43Sopenharmony_ci* @param None
1471bd4fe43Sopenharmony_ci* @retval #HI_ERR_SUCCESS         Success.
1481bd4fe43Sopenharmony_ci* @retval #Other     Failure. For details, see hi_errno.h.
1491bd4fe43Sopenharmony_ci*
1501bd4fe43Sopenharmony_ci* @par 依赖:
1511bd4fe43Sopenharmony_ci*           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
1521bd4fe43Sopenharmony_ci* @see  None
1531bd4fe43Sopenharmony_ci*/
1541bd4fe43Sopenharmony_cihi_u32 hi_at_init(hi_void);
1551bd4fe43Sopenharmony_ci
1561bd4fe43Sopenharmony_ci/**
1571bd4fe43Sopenharmony_ci* @ingroup  iot_at
1581bd4fe43Sopenharmony_ci* @brief  Set taks size of AT. CNcomment:设置AT相关任务栈大小。CNend
1591bd4fe43Sopenharmony_ci*
1601bd4fe43Sopenharmony_ci* @par 描述:
1611bd4fe43Sopenharmony_ci*         Set taks size of AT. CNcomment:设置AT相关任务栈大小。CNend
1621bd4fe43Sopenharmony_ci*
1631bd4fe43Sopenharmony_ci* @attention AT task stack size needs to be set before AT initialization.
1641bd4fe43Sopenharmony_ciCNcomment:AT任务栈大小需要在AT初始化之前设置。CNend
1651bd4fe43Sopenharmony_ci* @param  channel_task_size      [IN] type #hi_u16 channel task size, task size should not smaller than 0x600.
1661bd4fe43Sopenharmony_ciCNcomment:通道任务栈大小, 任务栈大小不低于0x600。Nend
1671bd4fe43Sopenharmony_ci* @param  process_task_size      [IN] type #hi_u16 process task size, task size should not smaller than 0xc00.
1681bd4fe43Sopenharmony_ciCNcomment:处理任务栈大小, 任务栈大小不低于0xc00。CNend
1691bd4fe43Sopenharmony_ci*
1701bd4fe43Sopenharmony_ci* @retval None
1711bd4fe43Sopenharmony_ci* @par 依赖:
1721bd4fe43Sopenharmony_ci*           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
1731bd4fe43Sopenharmony_ci* @see  None
1741bd4fe43Sopenharmony_ci*/
1751bd4fe43Sopenharmony_cihi_void hi_at_set_task_size(hi_u16 channel_task_size, hi_u16 process_task_size);
1761bd4fe43Sopenharmony_ci
1771bd4fe43Sopenharmony_ci/**
1781bd4fe43Sopenharmony_ci* @ingroup  iot_at
1791bd4fe43Sopenharmony_ci* @brief  Set whether to check the UART busy status when low power vote.
1801bd4fe43Sopenharmony_ciCNcomment:设置低功耗投票时是否检查UART busy状态。CNend
1811bd4fe43Sopenharmony_ci*
1821bd4fe43Sopenharmony_ci* @par 描述:
1831bd4fe43Sopenharmony_ci*      Set whether to check the UART busy status when low power vote.
1841bd4fe43Sopenharmony_ciCNcomment:设置低功耗投票时是否检查UART busy状态。CNend
1851bd4fe43Sopenharmony_ci*
1861bd4fe43Sopenharmony_ci* @attention UART busy status is checked by default.
1871bd4fe43Sopenharmony_ciCNcomment:默认低功耗睡眠投票时检查UART busy状态。CNend
1881bd4fe43Sopenharmony_ci* @param  enable         [IN] type #hi_bool,enable status. CNcomment:设置是否检查UART busy状态。CNend
1891bd4fe43Sopenharmony_ci*
1901bd4fe43Sopenharmony_ci* @retval None
1911bd4fe43Sopenharmony_ci* @par 依赖:
1921bd4fe43Sopenharmony_ci*           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
1931bd4fe43Sopenharmony_ci* @see  None
1941bd4fe43Sopenharmony_ci*/
1951bd4fe43Sopenharmony_cihi_void hi_at_set_check_uart_busy(hi_bool enable);
1961bd4fe43Sopenharmony_ci
1971bd4fe43Sopenharmony_ci/**
1981bd4fe43Sopenharmony_ci* @ingroup  iot_at
1991bd4fe43Sopenharmony_ci* @brief  Register at input function to replace uart input.
2001bd4fe43Sopenharmony_ciCNcomment:注册AT输入函数,代替默认从UART读取AT输入数据。CNend
2011bd4fe43Sopenharmony_ci*
2021bd4fe43Sopenharmony_ci* @par 描述:
2031bd4fe43Sopenharmony_ci*      Register at input function to replace uart input.
2041bd4fe43Sopenharmony_ciCNcomment:注册AT输入函数,代替默认从UART读取AT输入数据。CNend
2051bd4fe43Sopenharmony_ci*
2061bd4fe43Sopenharmony_ci* @attention Should set suitable task size; input func should not continuous read data without break. otherwise,
2071bd4fe43Sopenharmony_cia watchdog may happen.not support register HI_NULL when at channel is already uart.
2081bd4fe43Sopenharmony_ciCNcomment:根据输入函数实现,设置合适的栈大小;输入函数不能持续
2091bd4fe43Sopenharmony_ci返回有效数据避免触发看门狗。当AT通道已经是UART时,不支持注
2101bd4fe43Sopenharmony_ci册AT 输入函数为HI_NULL。CNend
2111bd4fe43Sopenharmony_ci* @param  at_input_func      [IN] type #hi_at_input_func,at input funciton.
2121bd4fe43Sopenharmony_ciCNcomment:AT输入函数。CNend
2131bd4fe43Sopenharmony_ci* @retval #0                 Success.
2141bd4fe43Sopenharmony_ci* @retval #Other             Failure. For details, see hi_errno.h.
2151bd4fe43Sopenharmony_ci* @par 依赖:
2161bd4fe43Sopenharmony_ci*           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
2171bd4fe43Sopenharmony_ci* @see  None
2181bd4fe43Sopenharmony_ci*/
2191bd4fe43Sopenharmony_cihi_u32 hi_at_register_input_func(hi_at_input_func at_input_func);
2201bd4fe43Sopenharmony_ci
2211bd4fe43Sopenharmony_ci/**
2221bd4fe43Sopenharmony_ci* @ingroup  iot_at
2231bd4fe43Sopenharmony_ci* @brief  Register at output function to replace uart output.
2241bd4fe43Sopenharmony_ciCNcomment:注册AT命令输出函数,代替默认从UART输出AT相关数据。CNend
2251bd4fe43Sopenharmony_ci*
2261bd4fe43Sopenharmony_ci* @par 描述:
2271bd4fe43Sopenharmony_ci*      Register at output function to replace uart output.
2281bd4fe43Sopenharmony_ciCNcomment:注册AT命令输出函数,代替默认从UART输出AT相关数据。CNend
2291bd4fe43Sopenharmony_ci*
2301bd4fe43Sopenharmony_ci* @attention Should set suitable task size according to implementation of output func.
2311bd4fe43Sopenharmony_ciCNcomment:根据输出函数实现,设置合适的栈大小。CNend
2321bd4fe43Sopenharmony_ci* @param  at_output_func      [IN] type #hi_at_output_func,at output function.
2331bd4fe43Sopenharmony_ciCNcomment:AT输出函数。CNend
2341bd4fe43Sopenharmony_ci* @retval None
2351bd4fe43Sopenharmony_ci* @par 依赖:
2361bd4fe43Sopenharmony_ci*           @li hi_at.h:Describes at command APIs. CNcomment:文件用于描述at指令相关接口。CNend
2371bd4fe43Sopenharmony_ci* @see  None
2381bd4fe43Sopenharmony_ci*/
2391bd4fe43Sopenharmony_cihi_void hi_at_register_output_func(hi_at_output_func at_output_func);
2401bd4fe43Sopenharmony_ci
2411bd4fe43Sopenharmony_ci#endif
242