11bd4fe43Sopenharmony_ci/*
21bd4fe43Sopenharmony_ci * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License.
51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at
61bd4fe43Sopenharmony_ci *
71bd4fe43Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81bd4fe43Sopenharmony_ci *
91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and
131bd4fe43Sopenharmony_ci * limitations under the License.
141bd4fe43Sopenharmony_ci */
151bd4fe43Sopenharmony_ci
161bd4fe43Sopenharmony_ci#ifndef __AT_H__
171bd4fe43Sopenharmony_ci#define __AT_H__
181bd4fe43Sopenharmony_ci
191bd4fe43Sopenharmony_ci#include <hi_at.h>
201bd4fe43Sopenharmony_ci#include <hi_early_debug.h>
211bd4fe43Sopenharmony_ci#include <hi_mem.h>
221bd4fe43Sopenharmony_ci#include <hi_stdlib.h>
231bd4fe43Sopenharmony_ci#include <hi_types_base.h>
241bd4fe43Sopenharmony_ci
251bd4fe43Sopenharmony_ci#ifdef __cplusplus
261bd4fe43Sopenharmony_ci#if __cplusplus
271bd4fe43Sopenharmony_ciextern "C" {
281bd4fe43Sopenharmony_ci#endif
291bd4fe43Sopenharmony_ci#endif
301bd4fe43Sopenharmony_ci
311bd4fe43Sopenharmony_ci#define AT_CMD_MAX_PARAS 64
321bd4fe43Sopenharmony_ci#define AT_CMD_MAX_LEN   128
331bd4fe43Sopenharmony_ci#define AT_CMD_LIST_NUM  20
341bd4fe43Sopenharmony_ci
351bd4fe43Sopenharmony_ci#define AT_RESPONSE_OK              do {                      \
361bd4fe43Sopenharmony_ci                                        hi_at_printf("OK\r\n");     \
371bd4fe43Sopenharmony_ci                                    } while (0)
381bd4fe43Sopenharmony_ci
391bd4fe43Sopenharmony_ci#define AT_RESPONSE_ERROR           do {                      \
401bd4fe43Sopenharmony_ci                                        hi_at_printf("ERROR\r\n");  \
411bd4fe43Sopenharmony_ci                                    } while (0)
421bd4fe43Sopenharmony_ci
431bd4fe43Sopenharmony_ci#define AT_ENTER                    do {                      \
441bd4fe43Sopenharmony_ci                                        hi_at_printf("\r\n");       \
451bd4fe43Sopenharmony_ci                                    } while (0)
461bd4fe43Sopenharmony_ci
471bd4fe43Sopenharmony_ci#ifdef AT_CMD_DEBUG
481bd4fe43Sopenharmony_ci#define at_printf(fmt...)  printf(fmt)
491bd4fe43Sopenharmony_ci#else
501bd4fe43Sopenharmony_ci#define at_printf(fmt...)
511bd4fe43Sopenharmony_ci#endif
521bd4fe43Sopenharmony_ci
531bd4fe43Sopenharmony_ci#define AT_MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
541bd4fe43Sopenharmony_ci#define at_mac2str(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
551bd4fe43Sopenharmony_ci
561bd4fe43Sopenharmony_ci
571bd4fe43Sopenharmony_citypedef enum {
581bd4fe43Sopenharmony_ci    AT_CMD_TYPE_TEST   = 1,
591bd4fe43Sopenharmony_ci    AT_CMD_TYPE_QUERY  = 2,
601bd4fe43Sopenharmony_ci    AT_CMD_TYPE_SETUP  = 3,
611bd4fe43Sopenharmony_ci    AT_CMD_TYPE_EXE = 4,
621bd4fe43Sopenharmony_ci} at_cmd_type;
631bd4fe43Sopenharmony_ci
641bd4fe43Sopenharmony_citypedef struct {
651bd4fe43Sopenharmony_ci    hi_s8 at_cmd_len;
661bd4fe43Sopenharmony_ci    hi_char cmd_name[AT_CMD_MAX_LEN];
671bd4fe43Sopenharmony_ci    at_cmd_type at_cmd_type;
681bd4fe43Sopenharmony_ci    hi_s32 at_param_cnt;                  /* command actual para num  */
691bd4fe43Sopenharmony_ci    hi_u32 param_array[AT_CMD_MAX_PARAS];
701bd4fe43Sopenharmony_ci} at_cmd_attr;
711bd4fe43Sopenharmony_ci
721bd4fe43Sopenharmony_citypedef struct {
731bd4fe43Sopenharmony_ci    HI_CONST at_cmd_func *at_cmd_list[AT_CMD_LIST_NUM];     /* user input at cmd list */
741bd4fe43Sopenharmony_ci    hi_u16 at_cmd_num[AT_CMD_LIST_NUM];                     /* command number */
751bd4fe43Sopenharmony_ci} at_cmd_func_list;
761bd4fe43Sopenharmony_ci
771bd4fe43Sopenharmony_ciextern at_cmd_ctrl g_at_ctrl;
781bd4fe43Sopenharmony_ci
791bd4fe43Sopenharmony_cihi_u32 at_cmd_process(const hi_char *at_cmd_line);
801bd4fe43Sopenharmony_cihi_u32 at_param_null_check(hi_s32 argc, const hi_char **argv);
811bd4fe43Sopenharmony_cihi_u32 integer_check(const hi_char *val);
821bd4fe43Sopenharmony_cihi_u32 cmd_strtoaddr(const hi_char *param, hi_uchar *mac_addr, hi_u32 addr_len);
831bd4fe43Sopenharmony_cichar* at_parse_string(const char *value, size_t *len);
841bd4fe43Sopenharmony_ciconst char* at_ssid_txt(const hi_u8 *ssid, size_t ssid_len);
851bd4fe43Sopenharmony_civoid* at_malloc(size_t size);
861bd4fe43Sopenharmony_civoid at_free(char *ptr);
871bd4fe43Sopenharmony_ci
881bd4fe43Sopenharmony_ci#ifdef __cplusplus
891bd4fe43Sopenharmony_ci#if __cplusplus
901bd4fe43Sopenharmony_ci    }
911bd4fe43Sopenharmony_ci#endif
921bd4fe43Sopenharmony_ci#endif
931bd4fe43Sopenharmony_ci
941bd4fe43Sopenharmony_ci#endif
95