mirror of
https://gitee.com/moluo-tech/AT-Command
synced 2025-06-18 08:27:51 +00:00
115 lines
3.8 KiB
C
115 lines
3.8 KiB
C
![]() |
/******************************************************************************
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* Copyright (c) 2015-2020, <master_roger@sina.com>
|
|||
|
*
|
|||
|
* SPDX-License-Identifier: Apache-2.0
|
|||
|
*
|
|||
|
* Change Logs:
|
|||
|
* Date Author Notes
|
|||
|
* 2015-06-09 roger.luo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* 2017-07-04 roger.luo <EFBFBD>Ż<EFBFBD><EFBFBD>ֶηָ<EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* 2020-07-05 roger.luo ʹ<EFBFBD><EFBFBD>cli_obj_t<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ֧<EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* 2020-08-29 roger.luo ֧<EFBFBD><EFBFBD>ATָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* 2020-02-16 roger.luo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
******************************************************************************/
|
|||
|
#ifndef _CMDLINE_H_
|
|||
|
#define _CMDLINE_H_
|
|||
|
|
|||
|
#include "comdef.h"
|
|||
|
|
|||
|
#define CLI_MAX_CMD_LEN 256 /*<2A><><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>*/
|
|||
|
#define CLI_MAX_ARGS 16 /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
#define CLI_MAX_CMDS 64 /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
|
|||
|
/**
|
|||
|
* @brief CLI<EFBFBD><EFBFBD>ΪAT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>,<EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"AT+",
|
|||
|
*/
|
|||
|
#define CLI_AT_ENABLE 1
|
|||
|
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define CLI_CMD_TYPE_EXEC 0 /* <20><>ִͨ<CDA8><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
#define CLI_CMD_TYPE_QUERY 1 /* <20><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD> (XXX?)*/
|
|||
|
#define CLI_CMD_TYPE_SET 2 /* <20>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD> (XXX=YY)*/
|
|||
|
|
|||
|
struct cli_obj;
|
|||
|
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB6A8>*/
|
|||
|
typedef struct {
|
|||
|
char *name; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @params o - cli <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @params argc - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @params argv - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ATָ<EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD>trueʱ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>ӦOK,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>falseʱ<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>ӦERROR
|
|||
|
*/
|
|||
|
int (*handler)(struct cli_obj *o, int argc, char *argv[]);
|
|||
|
const char *brief; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
}cmd_item_t;
|
|||
|
|
|||
|
#define __cmd_register(name,handler,brief)\
|
|||
|
USED ANONY_TYPE(const cmd_item_t,__cli_cmd_##handler)\
|
|||
|
SECTION("cli.cmd.1") = {name, handler, brief}
|
|||
|
|
|||
|
/*******************************************************************************
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>
|
|||
|
* @params name - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @params handler - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>:int (*handler)(struct cli_obj *s, int argc, char *argv[]);
|
|||
|
* @params brief - ʹ<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
#define cmd_register(name,handler,brief)\
|
|||
|
__cmd_register(name,handler,brief)
|
|||
|
|
|||
|
/*cli <20>ӿڶ<D3BF><DAB6><EFBFBD> -------------------------------------------------------------*/
|
|||
|
typedef struct {
|
|||
|
/**
|
|||
|
* @brief ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)д<EFBFBD>ӿ<EFBFBD>
|
|||
|
*/
|
|||
|
unsigned int (*write)(const void *buf, unsigned int len);
|
|||
|
/**
|
|||
|
* @brief ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
*/
|
|||
|
unsigned int (*read) (void *buf, unsigned int len);
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>дNULL,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>)
|
|||
|
* @retval true - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>, false - <EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
int (*cmd_guard)(char *cmdline);
|
|||
|
|
|||
|
}cli_port_t;
|
|||
|
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>*/
|
|||
|
typedef struct cli_obj {
|
|||
|
int (*guard)(char *cmdline);
|
|||
|
unsigned int (*write)(const void *buf, unsigned int len);
|
|||
|
unsigned int (*read) (void *buf, unsigned int len);
|
|||
|
void (*print)(struct cli_obj *this, const char *fmt, ...);
|
|||
|
int (*get_val)(struct cli_obj *this);
|
|||
|
char recvbuf[CLI_MAX_CMD_LEN + 1]; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
unsigned short recvcnt; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD>*/
|
|||
|
unsigned type : 3; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
unsigned enable : 1; /* CLI <20><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>*/
|
|||
|
unsigned echo : 1; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
}cli_obj_t;
|
|||
|
|
|||
|
void cli_init(cli_obj_t *obj, const cli_port_t *p);
|
|||
|
|
|||
|
void cli_enable(cli_obj_t *obj);
|
|||
|
|
|||
|
void cli_disable (cli_obj_t *obj);
|
|||
|
|
|||
|
void cli_echo_ctrl (cli_obj_t *obj, int echo);
|
|||
|
|
|||
|
void cli_exec_cmd(cli_obj_t *obj, const char *cmd);
|
|||
|
|
|||
|
void cli_process(cli_obj_t *obj);
|
|||
|
|
|||
|
|
|||
|
#endif /* __CMDLINE_H */
|