⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cli_cmdreg.inc

📁 命令行在嵌入式系统的实现
💻 INC
📖 第 1 页 / 共 2 页
字号:
/************************************************************************
Copyright 200X - 200X+1.

filename     : CLI_Io.h

description  : 本文件提供主机软件命令行的注册接口以及注册过程中所需要
               引用的结构定义,另外也包含执行函数中的参数获取接口

author       : Woodhead

modification : Woodhead    create              2004-12-07
************************************************************************/

#ifndef _CLI_CMDREG_INC_
#define _CLI_CMDREG_INC_

#define CT_RP_FLAG_NORMAL   0       /*命令是肯定形式*/
#define CT_RP_FLAG_NOFORM   1       /*命令是否定形式*/

/* 参数的属性位定义 */
#define CT_PRMPROP_NULL        0x00        /* 无属性   */
#define CT_PRMPROP_NAME        0x01        /* 需要名字 */
#define CT_PRMPROP_MUTEX       0x02        /* 多值互斥 */
#define CT_PRMPROP_INDEX       0x04        /* 索引     */
#define CT_PRMPROP_OPTIONAL    0x08        /* 可选     */

/* 值的属性位定义,自动注册不使用,一律为CT_VALPROP_CHECK  */
#define CT_VALPROP_NULL        0x00        /* 无属性       */
#define CT_VALPROP_OPTIONAL    0x01        /* 可选         */
#define CT_VALPROP_MUTEX       0x02        /* 互斥(多选一) */
#define CT_VALPROP_INDEX       0x04        /* 位索引       */
#define CT_VALPROP_CHECK       0x08        /* 输入类型检查 */
#define CT_VALPROP_DEFAULT     0x10        /* 缺省         */

#define CT_MAX_MODE_NAME    48          /* 模式名长度       */
#define CT_MAX_MODE_PROMPT  36          /* 模式提示符的长度 */
#define CT_MAX_MODE_VERB    64          /* 进入某模式命令字长度 */
#define CT_MAX_CMD_FORMAT   1000        /* 定义自动注册的格式化串长度不能超过256 */
#define CT_MAX_OBJECT_NUM   3           /* 定义一条命令中的最多对象个数 */

#define CT_CMD_FOR_AG_M  0x01                                        /* AG主设备命令 */
#define CT_CMD_FOR_AG_S  0x02                                        /* AG从设备命令 */
#define CT_CMD_FOR_AG_I  0x04                                        /* AG单机板命令 */
#define CT_CMD_FOR_TG    0x10                                        /* TG设备命令   */

#define CT_CMD_FOR_AG_NS  (0x01 | 0x04)                              /* AG主与单机板 */
#define CT_CMD_FOR_AG_ST  (CT_CMD_FOR_AG_M | CT_CMD_FOR_AG_S)        /* AG堆叠设备   */
#define CT_CMD_FOR_AGI_TG (CT_CMD_FOR_AG_I | CT_CMD_FOR_TG)          /* 非堆叠设备   */
#define CT_CMD_FOR_AG     (0x01 | 0x02 | 0x04)                       /* AG设备命令   */
#define CT_CMD_FOR_AGN_TG (CT_CMD_FOR_AG_NS | CT_CMD_FOR_TG)         /* 只有AG从没有的命令*/
#define CT_CMD_FOR_ALL     0xff                                      /* 通用命令 */

/* 语法分析的当前元素类型定义 */
enum ElemType
{
    OBJECT,
    PARAMETER,
    VALUE
};

/* 自动注册的内部使用的错误码定义 */
enum AutoReg_ErrNo
{
    TOKEN_GET_ONLYSPACE = 0, /* 只获取到空格符号 */
    TOKEN_GET_GROUPBEGIN,    /* 参数组开始 */
    TOKEN_GET_MUTEXBEGIN,    /* 互斥组开始 */
    TOKEN_GET_GROUPEND,      /* 参数组结束 */
    TOKEN_GET_MUTEXEND,      /* 互斥组结束 */
    TOKEN_GET_OPTIONBGIN ,   /* 可选组开始 */
    TOKEN_GET_OPTIONEND ,    /* 可选组结束 */
    TOKEN_GET_PROPBEGIN,     /* 参数值属性开始 */
    TOKEN_GET_PROPEND,       /* 参数值属性结束 */
    TOKEN_GET_VALBEGIN,      /* 参数值开始 */
    TOKEN_GET_VALEND,        /* 参数值结束 */
    TOKEN_GET_MUTEXLINE,     /* 互斥分隔符 */
    TOKEN_GET_SPACEEND,      /* 空格分隔符 */
    TOKEN_GET_DEFAULT,       /* 缺省分隔符 */
    TOKEN_GET_LASTOBJ,       /* 最后一个对象 */
    TOKEN_GET_CMDNULL        /* 取空 */
};


/* -------------------------------- 宏操作定义 ------------------------------ */

/* 判断两个对象是否同名 */
#define CT_IS_SAME_OBJECT(p1,p2) ( strcmp((p1)->szName,(p2)->szName) == 0 )
#define CI_IS_BIG_OBJECT(p1,p2)  ( strcmp((p1)->szName,(p2)->szName) > 0  )


/* -------------------------------- 结构、类描述定义 ------------------------------ */
/* 注意涉及到通信和偏移地址计算的表定义,要求进行pack */

/*------------------------------------*/
/* 【1】参数值的定义开始              */
/*------------------------------------*/
typedef struct CT_VALUETYPE_S
{
    _U8 ucAttrib;    /* 参数值属性    */
    _U8 ucDataType;  /* 参数值类型    */
    _U8 ucDataLen;   /* 参数值长度(针对字符串而言)*/
    _U8 ucIndex;     /* 保留          */
}CT_VALUETYPE_T;
typedef CT_VALUETYPE_T *CT_VALUETYPE_P;


/* 为关键字定义的数据结构  {{*/
typedef struct CT_KEYWORD_S
{
    _S8   *pK;                        /* Pointer to a Keyword String        */
    struct CT_KEYWORD_S *pPrevious;   /* Link Pointer Previous Keyword      */
    struct CT_KEYWORD_S *pNext;       /* Link Pointer Next Keyword          */
}CT_SERIAL_WORD_T,*CT_SERIAL_WORD_P;

typedef struct CT_KEYWORDS_S
{
    _U32   ulNumber;                  /* Number of Keywords of this Value   */
    CT_SERIAL_WORD_P pKeyword;            /* Link Pointer to First Discrete     */
}CT_KEYWORDS_T;
/*                             }}*/

/* 自定义的参数值检查函数*/
typedef _U32 (*CT_USERCHECK_FUNC_T)(_S8 *szValue,_S8 *szShow, CT_WS_P pWS);
typedef struct CT_VALUE_S
{
    _S8 *szName;                    /* 参数值名           */
    CT_VALUETYPE_T valueType;       /* 参数值类型         */
    CT_KEYWORDS_T keywords;         /* 多选一关键字列表   */
    _S32 s32IntFilter[2];           /* 参数数值的上下限   */
    struct CT_VALUE_S *pPrevious;   /* 参数值前驱         */
    struct CT_VALUE_S *pNext;       /* 参数值的后继       */
    _U32   ulAbsoluteIndex;         /* 绝对位置索引       */
    _S8   *szDefault;               /* 参数值的缺省值     */
    CT_USERCHECK_FUNC_T pCheckFunc; /* 用户提供的检查函数 */
}CT_VALUE_T;
typedef CT_VALUE_T *CT_VALUE_P;

/* 参数值链表的定义 */
typedef struct CT_VALUELINK_S
{
    _U32 ulNumber;           /* Total number of Values in the Link   */
    CT_VALUE_P pValue;      /* Head Pointer to the Value Link       */
}CT_VALUEGROUP_T;
typedef CT_VALUEGROUP_T *CT_VALUEGROUP_P;

/*用户自定义参数值类型*/
#define CT_MAX_USERTYPES    ((_U32)CT_DATA_BOTTOM - (_U32)CT_DATA_USER)
typedef _U32 (*CT_TYPECHECK_FUNC_T) (_S8 *szValue,_S8 *szShow,CT_WS_P pWS);
typedef struct  CT_USERTYPE_S
{
    _U8 ucTypeID;                        /* 数据类型     */
    _S8 szTypeName[24];                  /* 数据类型名字 */
    CT_TYPECHECK_FUNC_T pCheckFunc;      /* 检查函数     */
} CT_USERTYPE_T;
/*------------------------------------*/
/* 【1】参数值的定义结束              */
/*------------------------------------*/




/*------------------------------------*/
/* 【2】参数定义开始                  */
/*------------------------------------*/
typedef struct CT_PARAMTYPE_S
{
    _U8 ucAttrib;     /* Bit Attributes   */
    _S8 reserved1;    /* Reserved         */
    _S8 reserved2;    /* Data Length      */
    _U8 ucIndex;     /* Index of Position*/
}CT_PARAMTYPE_T;
typedef CT_PARAMTYPE_T *CT_PARAMTYPE_P;

typedef struct CT_PARAMETER_S
{
    _S8 *szName;                        /* 参数名            */
    CT_PARAMTYPE_T paramType;           /* 参数类型          */
    _U8 ucAttrib;                       /* 参数属性          */
    struct CT_PARAMETER_S *subParam;    /* 第一个子参数的指针*/
    struct CT_PARAMETER_S *pPrevious;   /* 参数的前驱        */
    struct CT_PARAMETER_S *pNext;       /* 参数的后继        */
    struct CT_PARAMETER_S *pParent;     /* 父参数指针        */
    _U32 ulAbsoluteIndex;               /* 绝对索引          */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -