📄 cli_cmdreg.inc
字号:
/************************************************************************
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 + -