?? cli_init.c
字號:
/* 本函數在系統初始化的時候調用, 此處一定要保證已經正確的區分了主從設備 */
m_CliIsMainDevice = (_U8)BOARD_IsMainDevice();
if (m_CliIsMainDevice != G_TRUE)
{
m_ulCliMaxOnlineUser += 2; //增加兩個自用處理終端
}
}
#endif
/* Web網管終端在m_TDTable的起始索引 */
#if ( CLI_WEB_SUPPORT == G_YES )
m_ulCliWebTermFirstIndex = m_ulCliMaxOnlineUser;
m_ulCliWebTermLastIndex = m_ulCliWebTermFirstIndex + g_ul_CFG_CLI_MAX_WEB_CLIENT_NUM - 1;
#endif /* #if ( CLI_WEB_SUPPORT == G_YES ) */
/* 最大終端任務個數, 加上WEB終端的個數 */
m_ulCliMaxTermNum = m_ulCliMaxOnlineUser + g_ul_CFG_CLI_MAX_WEB_CLIENT_NUM;
/* 申請任務數據表的內存 */
ulSize = sizeof(struct TD_S) * m_ulCliMaxTermNum;
m_TDTable = ROS_MemStaticAlloc( ulSize );
if( G_NULL == m_TDTable )
{
MT_ERRLOG(0);
return G_FAILURE;
}
else
{
EOS_MemZero( (_VOID *)m_TDTable, ulSize );
}
/* 申請 模式互斥結構的內存 */
ulSize = sizeof(CT_MODE_RECORD_T) * CTM_TOTAL * m_ulCliMaxOnlineUser;
pucMem = ROS_MemStaticAlloc( ulSize );
if( G_NULL == pucMem )
{
MT_ERRLOG(0);
return G_FAILURE;
}
else
{
EOS_MemZero( (_VOID *)pucMem, ulSize );
}
ulSize = sizeof(CT_MODE_RECORD_T) * m_ulCliMaxOnlineUser;
for( i = 0; i < CTM_TOTAL; i ++ )
{
m_sModeMutex[i] = (CT_MODE_RECORD_T *)( pucMem + i * ulSize );
}
return G_SUCCESS;
}
/*==================================================================*/
/* 函數名 :CLI_InitializeTaskData */
/* 函數功能 :初始化任務數據 */
/* 輸入參數 :PTerm_Data_S pTermStruct 任務數據指針 */
/* 輸出參數 :PTerm_Data_S pTermStruct 任務數據指針 */
/* 返回值 :無 */
/* 調用函數 :無 */
/* 備注 :環境變量的初始化不在該函數中進行 */
/*==================================================================*/
_VOID CLI_TaskDataInit( PTerm_Data_S pTermStruct )
{
_U32 ulTmp;
if ( pTermStruct == G_NULL )
{
return;
}
/* 初始化任務數據 */
pTermStruct->ucTermStatus = TERM_SLEEPING;
pTermStruct->szRecvBuf[0] = '\0' ;
pTermStruct->iRecvLen = 0 ;
pTermStruct->szSendBuf[0] = '\0' ;
pTermStruct->iSendLen = 0 ;
for ( ulTmp = 0 ; ulTmp < HISTORY_SIZE ; ulTmp ++ )
pTermStruct->szHistory[ulTmp][0] = '\0' ;
pTermStruct->iHistoryPos = 0 ;
pTermStruct->szEditBuf[0] = '\0' ;
pTermStruct->iCurrentPos = 0 ;
pTermStruct->iPromptLen = 1 ;
pTermStruct->szCommandBuf[0] = '\0' ;
pTermStruct->szInputCmd[0] = '\0';
pTermStruct->iEditStatus = COMMAND_INPUT;
pTermStruct->iMaxLen = CT_MAX_CMDBUF;
pTermStruct->ulDispLineCount = 0;
EOS_StrCpy (pTermStruct->szCurUserName, UNLOGON_USER_NAME );
pTermStruct->ucUserLevel = 0 ;
pTermStruct->ucScroll = SCROLL_MANUAL;
pTermStruct->ucTimeOutFlag = TIMEOUT_ON;
pTermStruct->ulTimeLeft = DEADLINE_LONG;
pTermStruct->ucHelpMode = 0 ;
pTermStruct->ulRecurCmd = 0 ;
pTermStruct->ucChannel = INBAND;
pTermStruct->ulCommandExecOk = COMMAND_UNFINISHED ;
pTermStruct->ucAlarmLevel = 1; // Permit output
pTermStruct->ucInputStatus = 0;
/* 初始化telnet 任務數據參數 */
pTermStruct->TelnetParam.TTState = TSDATA ;
pTermStruct->TelnetParam.SubState = SS_START ;
pTermStruct->TelnetParam.Synching = 0 ;
pTermStruct->TelnetParam.DoEcho = 1 ;
EOS_StrCpy ( pTermStruct->TelnetParam.TermType, "" ) ;
EOS_StrCpy ( pTermStruct->TelnetParam.FirstTermType, "" ) ;
pTermStruct->ulClientIP = 0;
pTermStruct->TelnetParam.SendBinary = 0 ;
pTermStruct->TelnetParam.RecvBinary = 0 ;
pTermStruct->TelnetParam.Noga = 1 ;
pTermStruct->iSocket = SOCKET_NOT_INITIAL;
return ;
}
_U32 CLI_ResetEnviroment(CT_WS_P pWS)
{
_U32 i;
CLI_ASSURE_OR_FAIL( G_NULL != pWS);
pWS->szCmdString[0] = 0;
pWS->ulLevel = CT_AL_QUERY;
pWS->ulCurrentMode = ROOT_MODE;
pWS->cmdStack.ucTop = 0;
for(i = 0; i < CT_MAX_STACK; i++)
{
pWS->cmdStack.szCommand[i][0] = 0;
pWS->cmdStack.ulMode[i] = NULL_MODE;
}
for(i = 0; i < CT_MAX_PARAMCOUNT; i++)
{
pWS->indexTable[i] = 0;
pWS->buffer[i][0] = 0;
pWS->NameBuf[i][0] = 0;
}
pWS->ulParamIndex = 0;
pWS->ulValidParams = 0;
pWS->ulSmart = SMART_ON;
pWS->ulStatus = 0;
pWS->ulExpectEle = 0; //此信息只在交互下的第一個參數輸入時提供保存當前
//待輸入參數的指針,其它時候一律清為零
return G_SUCCESS;
} /* End of function CT_ResetEnviroment() */
/*==================================================================*/
/* 函數名 :CLI_TDTableInit */
/* 函數功能 :初始化任務數據表 */
/* 輸入參數 :無 */
/* 輸出參數 :無 */
/* 返回值 :無 */
/* 調用函數 :無 */
/* 被調函數 : */
/*==================================================================*/
_U32 CLI_TDTableInit(_VOID)
{
_U32 ulTDNum;
_S8 szSemName[32];
for (ulTDNum = 0 ; ulTDNum < m_ulCliMaxTermNum; ulTDNum++)
{
m_TDTable[ulTDNum].lTaskid = CLI_PID_NULL;
if (G_NULL == (m_TDTable[ulTDNum].pTermStruct
= ROS_MemStaticAlloc(sizeof(struct Term_Data_S))))
{
DBG_Out(PID_CLI, MT_DBGOUT_ERR,
"\r\n CLI_TDTableInit:: DATA MemAlloc Failed!");
MT_ERRLOG(0);
return G_FAILURE;
}
/* 命令行終端的特殊處理 */
if (ulTDNum < m_ulCliMaxOnlineUser)
{
if (G_NULL == (m_TDTable[ulTDNum].pTermStruct->pWS
= ROS_MemStaticAlloc(sizeof(CT_WORK_STAT_T))))
{
DBG_Out(PID_CLI, MT_DBGOUT_ERR,
"\r\n CLI_TDTableInit:: WS MemAlloc Failed!");
MT_ERRLOG(0);
return G_FAILURE;
}
m_TDTable[ulTDNum].pTermStruct->pWS->ulTermId = ulTDNum + 1;
CLI_ResetEnviroment(m_TDTable[ulTDNum].pTermStruct->pWS);
EOS_Sprintf(szSemName, "CLI_TermSem%d", ulTDNum + 1);
if (G_SUCCESS != EOS_SemCreate(szSemName, 1, EOS_SM_FIFO, &(m_TDTable[ulTDNum].pTermStruct->ulSemID)))
{
MT_ERRLOG(0);
DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n SemID of Term %d Creat Failed!", ulTDNum + 1);
}
}
else
{
m_TDTable[ulTDNum].pTermStruct->pWS = G_NULL;
}
m_TDTable[ulTDNum].pTermStruct->ulTermId = ulTDNum + 1;
CLI_TaskDataInit(m_TDTable[ulTDNum].pTermStruct);
}
return G_SUCCESS;
}
/*==================================================================*/
/* 函數名 :CLI_GetTaskDataByPid */
/* 函數功能 :獲取當前任務的任務數據 */
/* 輸入參數 :_U32 ulPid 進程號 */
/* */
/* 輸出參數 :無 */
/* 返回值 :PTerm_Data_S 任務數據指針 */
/* 調用函數 :CLI_GetTaskData ( ) */
/* 被調函數 : */
/*==================================================================*/
PTerm_Data_S CLI_GetTaskDataByPid (_U32 ulPid)
{
_U32 ulTDIndex;
if (ulPid == CLI_PID_NULL)
{
MT_ERRLOG(0);
return G_NULL;
}
for (ulTDIndex = 0; ulTDIndex < m_ulCliMaxTermNum; ulTDIndex++)
{
if (m_TDTable[ulTDIndex].lTaskid == ulPid)
return m_TDTable[ulTDIndex].pTermStruct;
}
CLI_RECORD(CLI_STAT_GETTASK_DATA);
return G_NULL;
}
/*==================================================================*/
/* 函數名 :CLI_GetTaskDataByName */
/* 函數功能 :獲取當前任務的任務數據 */
/* 輸入參數 :szUsername 當前任務對應的用戶名 */
/* 輸出參數 :無 */
/* 返回值 :PTerm_Data_S 任務數據指針 */
/* 調用函數 :CLI_GetTaskData ( ) */
/* 被調函數 : */
/*==================================================================*/
PTerm_Data_S CLI_GetTaskDataByName (_S8 *szUsername)
{
_U32 ulTDIndex;
CLI_ASSURE_OR_NULL(szUsername != G_NULL && szUsername[0] != G_NULL);
for (ulTDIndex = 0; ulTDIndex < m_ulCliMaxTermNum; ulTDIndex++)
{
if (!strcmp(m_TDTable[ulTDIndex].pTermStruct->szCurUserName, szUsername))
return m_TDTable[ulTDIndex].pTermStruct;
}
return G_NULL;
}
/*==================================================================*/
/* 函數名 :CLI_GetCurrentTaskData */
/* 函數功能 :獲取當前任務的任務數據 */
/* 輸入參數 :_U32 ulPid 進程號 */
/* */
/* 輸出參數 :無 */
/* 返回值 :PTerm_Data_S 任務數據指針 */
/* 調用函數 :CLI_GetTaskData ( ) */
/* 被調函數 : */
/*==================================================================*/
PTerm_Data_S CLI_GetCurrentTaskData ( _VOID )
{
_U32 ulPid ;
/*--------------------------------------------------------------*/
/* 取得當前任務的ID號 */
/*--------------------------------------------------------------*/
if ((EOS_TaskGetSelfID(&ulPid)) == G_SUCCESS)
{
return CLI_GetTaskDataByPid(ulPid);
}
CLI_RECORD(CLI_STAT_GETTASK_DATA);
return G_NULL ;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -