📄 cli_syscmd.c
字号:
/************************************************************************
Copyright 200X - 200X+1.
filename : CLI_Syscmd.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"
extern CT_MODE_T m_sCliSysModes[MAX_MODE_NUM]; /* 命令树 */
extern _U32 m_ulSerialBaudrate; /* 串口波特率 */
/*※※※※※※※※※※※※※※*/
/* 命令行的的命令实现函数 */
/*※※※※※※※※※※※※※※*/
/*********************************************************************/
/* 函数功能 : 屏幕清除功能命令实现 */
/*********************************************************************/
_U32 CLI_CmdClearScreen(_U32 ulTermID)
{
PTerm_Data_S lpTermStruc;
int iSavePos;
_U32 ulLine;
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
if ( (lpTermStruc = CLI_GetCurrentTaskData()) == G_NULL )
{
MT_ERRLOG(0);
return G_FAILURE;
}
for (ulLine = 0; ulLine <= LINE_PER_PAGE + 1; ulLine++)
{
IO_OutString("\r\n");
lpTermStruc->ulDispLineCount = 0;
}
iSavePos = lpTermStruc->iCurrentPos;
lpTermStruc->iCurrentPos = 0;
CLI_MoveToCurrentPos(lpTermStruc, 80*24);
CLI_SendToTerm(lpTermStruc);
lpTermStruc->iCurrentPos = iSavePos;
return G_SUCCESS;
}
_U32 CLI_CmdExit(_U32 ulTermID)
{
PTerm_Data_S lpTermStruc;
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
if (IO_GetConfirm(CLI_LOGOUT_CONFIRM, INPUT_NO) != INPUT_YES)
return CMD_FAILED_SILENT;
CLI_RecordCurrentCmd();
if ( (lpTermStruc = CLI_GetCurrentTaskData()) != G_NULL )
{
CLI_TermLogout(lpTermStruc);
}
return G_SUCCESS;
}
/*********************************************************************/
/* 函数功能 : 设置短超时的命令实现 */
/*********************************************************************/
_U32 CLI_CmdSetTimeOutSet(_U32 ulTermID)
{
PTerm_Data_S pTermStruct ;
_S8 *pParam;
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
if ( (pTermStruct = CLI_GetCurrentTaskData()) == G_NULL )
{
MT_ERRLOG(0);
return G_FAILURE;
}
if ((pParam = CT_GetParamByName("long|short", ulTermID)) == G_NULL)
return G_FAILURE;
if (!EOS_StriCmp(pParam, "long"))
{
if (pTermStruct->iSocket == SOCKET_FOR_SERIAL)
{
pTermStruct->ucTimeOutFlag = TIMEOUT_OFF;
pTermStruct->ulTimeLeft = DEADLINE_LONG;
IO_Print(CLI_TIMEOUT_LONG);
return G_SUCCESS;
}
else
{
IO_Print(CLI_TIMEOUT_TELNET_FAIL);
return G_SUCCESS;
}
}
else if (!EOS_StriCmp(pParam, "short"))
{
pTermStruct->ucTimeOutFlag = TIMEOUT_ON;
pTermStruct->ulTimeLeft = DEADLINE_SHORT;
IO_Print(CLI_TIMEOUT_SHORT);
return G_SUCCESS;
}
return G_FAILURE;
}
/*********************************************************************/
/* 函数功能 : 设置交互允许的命令实现 */
/*********************************************************************/
_U32 CLI_CmdSetSmartOn(_U32 ulTermID)
{
_S8 *pParam;
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
if ((pParam = CT_GetParamByName("on|off", ulTermID)) == G_NULL)
return G_FAILURE;
if (!EOS_StriCmp(pParam, "on"))
{
/* 透传命令处理任务不支持交互方式的修改 */
if (m_TDTable[ulTermID - 1].pTermStruct->iSocket == SOCKET_FOR_MML)
return G_SUCCESS;
m_TDTable[ulTermID - 1].pTermStruct->pWS->ulSmart = SMART_ON;
IO_Print(CLI_SMART_ENABLE);
}
else
{
m_TDTable[ulTermID - 1].pTermStruct->pWS->ulSmart = SMART_OFF;
IO_Print(CLI_SMART_DISABLE);
}
return G_SUCCESS;
}
/*********************************************************************/
/* 函数功能 : 设置交互禁止的命令实现 */
/*********************************************************************/
_U32 CLI_CmdSetAlarmPermit(_U32 ulTermID)
{
_S8 *pParam;
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
if ((pParam = CT_GetParamByName("on|off", ulTermID)) == G_NULL)
return G_FAILURE;
if (!EOS_StriCmp(pParam, "on"))
{
m_TDTable[ulTermID - 1].pTermStruct->ucAlarmLevel = 1;
}
else
{
m_TDTable[ulTermID - 1].pTermStruct->ucAlarmLevel = 0;
}
return G_SUCCESS;
}
/*********************************************************************/
/* 函数功能 : 设置手动滚屏的命令实现 */
/*********************************************************************/
_U32 CLI_CmdSetScroll(_U32 ulTermID)
{
PTerm_Data_S lpTermStruct;
_S8 *pParam;
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
if ( (lpTermStruct = CLI_GetCurrentTaskData()) == G_NULL )
{
MT_ERRLOG(0);
return G_FAILURE;
}
/* 透传命令的处理任务不支持滚屏方式的修改 */
if (lpTermStruct->iSocket == SOCKET_FOR_MML)
return G_SUCCESS;
if ((pParam = CT_GetParamByName("automatic|manual", ulTermID)) == G_NULL)
{
MT_ERRLOG(0);
return G_FAILURE;
}
if (!EOS_StriCmp(pParam, "automatic"))
{
lpTermStruct->ucScroll = SCROLL_AUTO;
IO_Print(CLI_SCROLL_DISABLE);
return G_SUCCESS;
}
else if (!EOS_StriCmp(pParam, "manual"))
{
lpTermStruct->ucScroll = SCROLL_MANUAL;
IO_Print(CLI_SCROLL_ENABLE);
return G_SUCCESS;
}
return G_FAILURE;
}
/*********************************************************************/
/* 函数功能 : 设备名设置的命令实现 */
/*********************************************************************/
_U32 CLI_CmdSetHostName(_U32 ulTermID)
{
_S8 *szHostName;
HostName_S sHostName;
szHostName = CT_GetParamByName("device-name", ulTermID);
if (szHostName == G_NULL || szHostName[0] == '\0')
{
IO_Print(CLI_HOSTNAME_NULL);
MT_ERRLOG(0);
return G_FAILURE;
}
EOS_StrNCpy( m_szHostName, szHostName, (HOSTNAME_LENGTH - 1) );
m_szHostName[HOSTNAME_LENGTH - 1] = '\0';
#if CLI_DBASE_SUPPORT
/* 是否包含RDB模块 */
if( G_YES == g_ul_INCLUDE_MODULE_CLI_RDB )
{
/* 函数指针是否注册 */
if( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectUpdate )
{
MT_ERRLOG(0);
return G_FAILURE;
}
EOS_StrCpy (sHostName.szHostName, szHostName);
(_VOID)g_pfn_CFG_CLI_RDB_RecordDirectUpdate(m_ulCliUserHandle, m_usHostNameTable, 0, &sHostName);
}
#endif
return G_SUCCESS;
}
/*********************************************************************/
/* 函数功能 : 串口波特率的设置命令实现 */
/*********************************************************************/
_U32 CLI_CmdSetBaudrate(_U32 ulTermID)
{
_U32 ulBaudrate;
if (ulTermID != 1)
{
IO_Print(CLI_BAUDRATE_SET_ERR);
return G_FAILURE;
}
if (G_SUCCESS != CT_GetUlongByName("baudrate", ulTermID, &ulBaudrate))
{
return G_FAILURE;
}
m_ulSerialBaudrate = ulBaudrate; /* 为了给查询串口速率提供一个全局变量 */
IO_Print(CLI_BAUDRATE_SETTING, ulBaudrate);
#if (EOS_OS_TYPE != EOS_WIN32)
CLI_DELAY(100); // 延时 1s,让提示信息有机会输出
if (G_SUCCESS != CLI_SerialSetBaudrate( ulBaudrate))
{
DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n CLI(error return): CLI_CmdSetBaudrate:: CLI_DrvSetSetBaudrate");
return G_FAILURE;
}
#endif
return G_SUCCESS;
}
/*********************************************************************/
/* 函数功能 : 增加用户的命令实现 */
/*********************************************************************/
_U32 CLI_CmdUserAdd(_U32 ulTermID)
{
_S8 szUsername[USERNAME_LEN];
_S8 szPassword[PASSWORD_LEN], szPwdCfrm[PASSWORD_LEN];
_S8 szTmp[20], *pParam;
_U32 ulLevel, ulType = 1;
_U32 ulCount;
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
if ((pParam = CT_GetParamByName("operator-name", ulTermID)) == G_NULL)
{
MT_ERRLOG(0);
return G_FAILURE;
}
EOS_StrNCpy( szUsername, pParam, (USERNAME_LEN - 1) );
szUsername[USERNAME_LEN - 1] = '\0';
for (ulCount = 0; ulCount < 3; ulCount++)
{
IO_Print(CLI_PASSWORD_INPUT);
if (IO_GetString(szPassword, PASSWORD_LEN, EN_SHOWBACK_INVISIBLE) != G_SUCCESS)
return G_FAILURE;
if (szPassword[0] == '\0')
{
IO_Print(CLI_USER_PASSWORD_NULL);
continue;
}
else if (szPassword[0] == KEY_CTRL_C)
{
IO_Print(CLI_STRING_INVALID);
continue;
}
IO_Print(CLI_PASSWORD_CONFIRM);
if (IO_GetString(szPwdCfrm, PASSWORD_LEN, EN_SHOWBACK_INVISIBLE) != G_SUCCESS)
return G_FAILURE;
if (EOS_StrCmp (szPassword, szPwdCfrm) != 0)
{
IO_Print(CLI_PASSWORD_NOT_SAME);
continue;
}
break;
}
if (ulCount == 3)
return G_FAILURE;
IO_Print(CLI_USER_LEVEL_INTUT);
for (ulCount = 0; ulCount < 3; ulCount++)
{
if (IO_GetString(szTmp, 2, EN_GETSTRING_NORMALLY) != G_SUCCESS)
return G_FAILURE;
if ((_U32)EOS_atoul(szTmp, &ulLevel) != G_SUCCESS)
{
if (ulCount == 2)
return G_FAILURE;
IO_Print(CLI_INPUT_NEED_NUM, 3);
continue;
}
if (ulLevel == 0 || ulLevel > 3)
{
if (ulCount == 2)
return G_FAILURE;
IO_Print(CLI_INPUT_OVERFLOW, 3);
continue;
}
break;
}
if (ulCount == 3)
return G_FAILURE;
#if 0 //目前的网管实现暂时不需要命令行提供用户鉴别
IO_Print(CLI_USER_TYPE_INPUT);
for (ulCount = 0; ulCount < 3; ulCount++)
{
if (IO_GetString(szTmp, 2, EN_GETSTRING_NORMALLY) != G_SUCCESS)
return G_FAILURE;
if ((_U32)EOS_atoul(szTmp, &ulType) != G_SUCCESS)
{
if (ulCount == 2)
return G_FAILURE;
IO_Print(CLI_INPUT_NEED_NUM, 2);
continue;
}
if (ulType == 0 || ulType > 3)
{
if (ulCount == 2)
return G_FAILURE;
IO_Print(CLI_INPUT_OVERFLOW, 2);
continue;
}
break;
}
if (ulCount == 3)
return G_FAILURE;
#endif
return CLI_AddTermUser(szUsername, szPassword, (_U8)(ulLevel - 1),(_U8)ulType, ML_ENG);
}
/*********************************************************************/
/* 函数功能 : 删除用户的命令实现 */
/*********************************************************************/
_U32 CLI_CmdUserDel(_U32 ulTermID)
{
_S8 szUsername[USERNAME_LEN];
_S8 *pParam;
CLI_ASSURE_OR_FAIL(CLI_IS_TERMID_VALIDE(ulTermID));
if ((pParam = CT_GetParamByName("operator-name", ulTermID)) == G_NULL)
{
MT_ERRLOG(0);
return G_FAILURE;
}
EOS_StrCpy (szUsername, pParam);
if (CLI_DelTermUser(szUsername) != G_SUCCESS)
{
return G_FAILURE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -