📄 cli_debug.c
字号:
/************************************************************************
Copyright 200X - 200X+1.
filename : CLI_Debug.c
description : 命令行的调试命令.
author : Woodhead
modification : Woodhead create 2004-12-07
************************************************************************/
#include "Ros.h"
#include "ML.h"
#include "Sys_Ml.h"
#include "Cli_MlPriv.h"
#include "Cli_Private.inc"
#include "Cli_User.inc"
#include "Cli_Log.inc"
#include "..\include\Cli_io.h"
#include "Cli_intp.inc"
#include "Cli_cmd.inc"
#include "Board_Pub.h"
#include "Config\Cli_ConfigGlbVar.h"
/*※※※※※※※※※※※※※※*/
/* 命令行的测试代码 */
/*※※※※※※※※※※※※※※*/
/*----------------命令注册桩函数-------------------*/
/*=================================================*/
_U32 CLI_CmdTest1(_U32 ulTermID)
{
(_VOID)ulTermID;
return G_SUCCESS;
}
/*┏━━━━━━━━━━命令行的测试处理汇集函数━━━━━━━━━┓*/
/*┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛*/
_U32 CLI_CmdTestProc(ST_DBG_MSG* pDbgMsg)
{
_U32 ulRet = G_FAILURE;
_S8 *pParam;
if (pDbgMsg == G_NULL)
{
DBG_Out(PID_CLI, CLI_DBGOUT_ERR,"\r\n CLI: Test message pointer null!");
MT_ERRLOG(0);
return G_FAILURE;
}
switch (pDbgMsg->ulCmd)
{
case EN_CLI_TEST_HELP:
DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
"\r\n 命令行模块调试命令列表"
"\r\n\r\n 命令字 命令内容"
"\r\n -----------------------------------------------"
"\r\n 0x00: 查询本模块调试命令的帮助信息"
"\r\n 0x01: 查询本模块调试打印通道信息"
"\r\n 0x10 TELNET调试命令"
"\r\n\r\n 0x21 测试命令: 命令注册测试"
"\r\n 0x22 测试命令: 命令解释测试"
"\r\n 0x23 测试命令: 标准输入输出接口测试"
"\r\n 0x24 测试命令: 直接输出测试"
"\r\n 0x25 测试命令: 操作用户测试"
"\r\n 0x26 测试命令: 日志测试"
"\r\n 0x27 测试命令: 终端管理测试"
"\r\n 0x28 测试命令: 命令行库函数测试(暂无)"
"\r\n 0x29 测试命令: 分布式命令管理测试"
"\r\n\r\n 命令字后所有参数填零显示该命令的参数帮助信息");
return G_SUCCESS;
#if ( CLI_TELNET_SUPPORT == G_YES )
case EN_CLI_TELNET_DIAG:
if( G_NULL != g_pfn_CFG_CLI_CmdTelnetDiag )
{
ulRet = g_pfn_CFG_CLI_CmdTelnetDiag(pDbgMsg->ulPara1, pDbgMsg->ulPara2,
pDbgMsg->ulPara3, pDbgMsg->ulPara4);
}
else
{
DBG_Out(PID_CLI, CLI_DBGOUT_MUST, "\r\n CLI: Telnet is not include !");
return G_SUCCESS;
}
break;
#endif
case EN_CLI_TEST_CMDREG:
ulRet = CLI_CmdTestReg(pDbgMsg->ulPara1, pDbgMsg->ulPara2,
pDbgMsg->ulPara3, pDbgMsg->ulPara4);
break;
case EN_CLI_TEST_INPT:
ulRet = CLI_CmdTestIntp(pDbgMsg->ulPara1, pDbgMsg->ulPara2,
pDbgMsg->ulPara3, pDbgMsg->ulPara4);
break;
case EN_CLI_TEST_SIO:
ulRet = CLI_CmdTestStandardIO(pDbgMsg->ulPara1, pDbgMsg->ulPara2,
pDbgMsg->ulPara3, pDbgMsg->ulPara4);
break;
case EN_CLI_TEST_DIO:
ulRet = CLI_CmdTestDirectIO(pDbgMsg->ulPara1, pDbgMsg->ulPara2,
pDbgMsg->ulPara3, pDbgMsg->ulPara4);
break;
case EN_CLI_TEST_USER:
break;
case EN_CLI_TEST_LOG:
ulRet = CLI_CmdTestLog(pDbgMsg->ulPara1, pDbgMsg->ulPara2,
pDbgMsg->ulPara3, pDbgMsg->ulPara4);
break;
case EN_CLI_TEST_TERM:
ulRet = CLI_CmdTestTerm(pDbgMsg->ulPara1, pDbgMsg->ulPara2,
pDbgMsg->ulPara3, pDbgMsg->ulPara4);
break;
case EN_CLI_TEST_LIBFUN:
break;
case EN_CLI_TEST_DISTTR:
ulRet = CLI_CmdTestDisttr(pDbgMsg->ulPara1, pDbgMsg->ulPara2,
pDbgMsg->ulPara3, pDbgMsg->ulPara4);
break;
case EN_CLI_TEST_GETMODEP:
pParam = CI_GetModeParameter(pDbgMsg->ulPara1, pDbgMsg->ulPara2, pDbgMsg->ulPara3);
if (pParam == G_NULL)
{
DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
"\r\n CLI: Get mode parameter failed!"
"\r\n CLI: Test function returned failure!");
return G_FAILURE;
}
DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n CLI: Get mode parameter:%s!", pParam);
return G_SUCCESS;
default:
DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n CLI: Error test command!");
break;
}
if (ulRet != G_SUCCESS)
{
DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n CLI: Test function returned failure!");
}
return ulRet;
}
/*--------------------命令行的注册测试处理函数-----------------------*/
/*===================================================================*/
/* CmdWord = 1 */
/* 说明: Param1: 1、错误语法 */
/* 2、无帮助信息 */
/* 3、注册参数有误 */
/* 4、正确的注册 */
/* 5、否定形式的注册 */
#define CLI_LONG_CMDWORD "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"
_U32 CLI_CmdTestReg(_U32 Param1, _U32 Param2, _U32 Param3, _U32 Param4)
{
const _S8 *szRegCmdErr[13] = {
/*1 对象过多*/
"cli-test put many object",
/*2 对象超长*/
"cli-test "CLI_LONG_CMDWORD CLI_LONG_CMDWORD,
/*3 参数超长*/
"cli-test long-param:"CLI_LONG_CMDWORD CLI_LONG_CMDWORD,
/*4 非法字符 */
"cli-test invalide: jkl*f%",
/*5 无分隔符*/
"cli-test irreg1 <name(s16)>",
/*6 多分隔符*/
"cli-test irret2:irreg:<name(s16)>",
/*7 错误组合*/
"cli-test irreg3: {param1}|{[param2]}",
/*8 有分隔符无参数*/
"cli-test irreg5:",
/*9 空格使用错误*/
"cli-test irreg6: {mt1} |{mt2}",
/*10 空格使用错误*/
"cli-test irret7:<name(s 16)>",
/*11 缺省值位置错误*/
"cli-test irret9:<name(s16)>/up",
/*12 不应该出现的符号*/
"cli-test irreg10:name~1",
/*13 无属性的参数值注册*/
"cli-test irreg11:<name>"
};
const _S8 *szRegCmdCrt[5] = {
/*1 简单命令 */
"cli-test single",
/*2 互斥与字符型测试 */
"cli-test mutex: {aaa}|{bbb <ccc(s16)>}",
/*3 可选与整型测试 */
"cli-test optional: aaa [-t <time(u10~50)>]",
/*4 缺省与ip型测试 */
"cli-test default: ip <ip-add(p)/10.10.1.1>",
/*5 时间与日期性测试 */
"cli-test date-time: <date(d)> <time(t)>"
};
const _S8 *szRegCmdEx[3] = {
/*1 极限参数 */
"cli-test mul-param: a b c d e f g h I j k l m n o p"
"q r s t u v w x y z a b c d e f g h I j k l m",
/*2 极限命令字长度*/
"cli-test kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"
"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk",
/*3 多项互斥 */
"cli-test mul-mutex: {a}|{b}|{c}|{d}|{e}|{f}|{g}|{h}|{i}|{j}"
};
_S8 *szCmd;
_U8 ucMode = CTM_DIAG;
CLI_OPERAT_LEVEL_T ucLevel = CT_AL_QUERY;
CLI_CALLBACK_EXEC_FUN pFunc = CLI_CmdTest1;
_U8 ucModeChange = CT_MC_NULL;
_U8 ucNewMode = NULL_MODE;
_U32 ulHelp1 = CLI_LOGOUT_CONFIRM;
_U32 ulHelp2 = CLI_LOGOUT_CONFIRM;
_U32 ulHelp3 = CLI_LOGOUT_CONFIRM;
_S8 szCmdFmt[50];
(_VOID)Param4;
szCmd = szCmdFmt;
if (Param1 ==0 && Param2 == 0 && Param3 == 0 && Param4 == 0)
{
DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
"\r\n param1 -- 测试语法类型: 1. 错误语法"
"\r\n 2. 无帮助信息"
"\r\n 3. 注册参数有误"
"\r\n 4. 正确的注册"
"\r\n 5. 否定形式的注册"
);
return G_SUCCESS;
}
switch (Param1)
{
/* 不规范的语法的13中情况测试 */
case 1:
if (Param2 > 13)
{
DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
"\r\n CLI: Test cmdreg param error:%d, %d, %d", Param1, Param2, Param3);
return G_FAILURE;
}
szCmd = (_S8 *)szRegCmdErr[Param2 - 1];
break;
/* 无帮助信息的3种情况测试 */
case 2:
ulHelp1 = CLI_ML_NULL;
ulHelp1 = CLI_ML_NULL;
switch (Param2)
{
case 1:
ucMode = CTM_CONFIG;
EOS_StrCpy(szCmdFmt, "cli-test no-help1");
break;
case 2:
EOS_StrCpy(szCmdFmt, "cli-test no-help2");
break;
case 3:
ucMode = CTM_GENL;
EOS_StrCpy(szCmdFmt, "no cls");
break;
default:
DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
"\r\n CLI: Test cmdreg param error:%d, %d, %d", Param1, Param2, Param3);
return G_FAILURE;
}
break;
/*注册参数有误的4中情况测试*/
case 3:
switch (Param2)
{
/* 没有执行动作 */
case 1:
EOS_StrCpy(szCmdFmt, "cli-test no-action");
pFunc = G_NULL;
break;
/* 注册等级超出范围 */
case 2:
EOS_StrCpy (szCmdFmt, "cli-test over-level");
ucLevel = (CLI_OPERAT_LEVEL_T)(CT_AL_DEBUG + 5);
break;
/* 注册模式超出范围 */
case 3:
EOS_StrCpy (szCmdFmt, "cli-test over-mode");
ucMode = MAX_MODE_NUM + 4;
break;
/* 注册转换到新模式而无模式信息 */
case 4:
ucModeChange = CT_MC_NEW;
EOS_StrCpy(szCmdFmt, "cli-test cm-null");
break;
default:
DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
"\r\n CLI: Test cmdreg param error:%d, %d, %d", Param1, Param2, Param3);
return G_FAILURE;
}
break;
/*正确注册的5中情况测试*/
case 4:
if (Param2 > 5)
{
DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
"\r\n CLI: Test cmdreg param error:%d, %d, %d", Param1, Param2, Param3);
return G_FAILURE;
}
szCmd = (_S8 *)szRegCmdCrt[Param2 - 1];
break;
/* 没有注册肯定语句的否定注册*/
case 5:
EOS_StrCpy(szCmdFmt, "no abcde");
break;
case 6:
return CT_CmdAutoRegistWithLocfun
("Cli disttribute: <type(normal|no-feedback|long-resp)>",
CTM_DIAG, CT_AL_SUPER, CLI_MsTestGet, CLI_MsTestExec, CT_MC_NULL,
NULL_MODE, CLI_ML_NULL, CLI_ML_NULL, CLI_ML_NULL);
case 7:
if (Param2 > 3 || Param2 == 0)
{
DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
"\r\n CLI: Test cmdreg param error:%d, %d, %d", Param1, Param2, Param3);
return G_FAILURE;
}
szCmd = (_S8 *)szRegCmdEx[Param2 - 1];
break;
default:
return G_FAILURE;
}
if (G_SUCCESS != CT_CmdAutoRegist(szCmd,
ucMode,
ucLevel,
pFunc,
ucModeChange,
ucNewMode,
ulHelp1,
ulHelp2,
ulHelp3))
{
DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
"\r\n CLI: Test cmdreg FAILURE:%d, %d, %d", Param1, Param2, Param3);
}
else
{
DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
"\r\n CLI: Test cmdreg SUCCESS:%d, %d, %d", Param1, Param2, Param3);
}
DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
"\r\n The command to regist is : \r\n %s", szCmd);
return G_SUCCESS;
}
/*--------------------命令行的参数获取测试函数-----------------------*/
/*===================================================================*/
/* CmdWord = 2 */
/* 说明: Param1: 1、一般参数获取 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -