亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cli_init.c

?? 命令行在嵌入式系統的實現
?? C
?? 第 1 頁 / 共 3 頁
字號:
/************************************************************************
Copyright 200X - 200X+1.

filename     : CLI_Init.c

description  : 本文件實現命令行模塊主要部分的初始化操作

author       : Woodhead

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

#include "Ros.h"
#include "ML.h"
#include "Cli_MlPriv.h"
#include "Cli_Private.inc"
#include "CLI_Intp.inc"
#include "..\include\Cli_IO.h"
#include "CLI_Telnet.inc"
#include "CLI_User.inc"
#include "Cli_Log.inc"
#include "CLI_Cmd.inc"
#include "Board_Pub.h"
#include "Config\Cli_ConfigGlbVar.h"

/*任務數據表(表項數目為m_ulCliMaxTermNum)*/
/*說明: 該任務數據表為靜態表,其中前兩個分別為串口任務和MML終端  */
/*      的服務器端,后四個為telnet任務, 終端任務ID即取該表下標+1 */
/*      若為從設備,則由終端1到的6分別對應主設備的終端,終端0、7 */
/*      分別為從設備自己的串口和telnet任務接收函數               */
struct TD_S      *m_TDTable = G_NULL;
CT_MODE_RECORD_T *m_sModeMutex[CTM_TOTAL];                      /* 模式互斥結構 */
_S8              m_szHostName[HOSTNAME_LENGTH] ;                /* 主機設備名 */
TIMER_ID         m_CliSecTimer;                                 /* 命令行定時器   */
_U32             m_ulCliStat[CLI_STAT_BUTT];                    /* 命令行統計信息 */

/* 串口波特率 */
_U32             m_ulSerialBaudrate             = 0;

/* 最大終端個數, 包括各種終端類型(com/telnet/web等), 表m_TDTable的大小  */
_U32             m_ulCliMaxTermNum              = 0;

/* 命令行最大在線用戶個數 */
_U32             m_ulCliMaxOnlineUser           = 0;

/* Web網管終端在m_TDTable的起始索引和終止索引 */
#if ( CLI_WEB_SUPPORT == G_YES )
_U32             m_ulCliWebTermFirstIndex       = G_NULL_DWORD;
_U32             m_ulCliWebTermLastIndex        = G_NULL_DWORD;
#endif /* #if ( CLI_WEB_SUPPORT == G_YES ) */

#if MULTI_DEVICE_SUPPORT
_U8 m_CliIsMainDevice;

extern _U32 BOARD_IsMainDevice(_VOID);
#endif

/* 命令行模塊的多語種字符串ID的枚舉值的最大值 */
_U32            g_ul_EN_CLI_ML_PRIV_SID_BUTT = EN_CLI_ML_PRIV_SID_BUTT;

/*==================================================================*/
/*      函數名      :CLI_ProcessMsg                                 */
/*      函數功能    :命令行通用消息處理                             */
/*      輸入參數    :PTerm_Data_S pTermStruct  任務數據指針         */
/*      輸出參數    :PTerm_Data_S pTermStruct  任務數據指針         */
/*      返回值      :無                                             */
/*      調用函數    :無                                             */
/*      備注        :環境變量的初始化不在該函數中進行               */
/*==================================================================*/
_VOID CLI_ProcessMsg(ST_MSG *pMsg)
{
    ST_DBG_MSG* pDbgMsg;
    ST_TIMER_NOTIFY_MSG *pstNotify;
#if MULTI_DEVICE_SUPPORT
    PNMS_MSG_S pNmsMsg;
    PST_MSCLI_MSG pstMsCliMsg;
    PTerm_Data_S pTermStruct;
#endif

    if (pMsg == G_NULL || pMsg->usDstPid != PID_CLI)
    {
        DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n!CLI:recieved error message!");
        MT_ERRLOG(0);
        return ;
    }
    DBG_Out(PID_CLI, EN_DBG_OUT_CHN_31,
            "\r\n CLI_ProcessMsg:: Received msg (Code:%x)", pMsg->usMsgCode);

    switch (pMsg->usSrcPid)
    {
        case PID_DEBUG:
            if( G_NULL != g_pfn_CFG_CLI_CmdTestProc )
            {
                pDbgMsg = (ST_DBG_MSG *)&( pMsg->ucData[pMsg->usDataOffset] );
                (_VOID)g_pfn_CFG_CLI_CmdTestProc(pDbgMsg);
            }
            break;

        case PID_ROS_TIMER:
            pstNotify = (ST_TIMER_NOTIFY_MSG*)&( pMsg->ucData[pMsg->usDataOffset]);
            if (pstNotify->TimerId == m_CliSecTimer)
            {
                CLI_PeriodProc();
            }
            break;

    #if MULTI_DEVICE_SUPPORT
    /* 主從設備命令行之間的交互消息 */
        case PID_AGENT:
            // here no break
        case PID_CLI:
            if (pMsg->usSrcPid == PID_CLI)
            {
                pstMsCliMsg = (PST_MSCLI_MSG)&( pMsg->ucData[pMsg->usDataOffset]);

                if (!CLI_IS_TERMID_VALIDE(pstMsCliMsg->ucTermID))
                {
                    CLI_RECORD(CLI_STAT_RECEIVED_UNWANTED);
                    DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n!  CLI:recieved error message from other device!");
                    break;
                }

                pTermStruct = m_TDTable[pstMsCliMsg->ucTermID - 1].pTermStruct;
            }
            else
            {
                pNmsMsg = (PNMS_MSG_S)&( pMsg->ucData[pMsg->usDataOffset]);
                pstMsCliMsg = (PST_MSCLI_MSG)pNmsMsg->ucData;
                pTermStruct = m_TDTable[1].pTermStruct; // 網管分配的終端為第二個
            }

            switch (pMsg->usMsgCode)
            {
                /* 接收透傳上層設備下發的透傳命令 */
                case MSG_CODE_AGENT_SEND_CMD:
                case MSG_CODE_CLI_TRANSCMD:
                    /* 如果該終端的接收狀態不正確,直接返回 */
                    if (pTermStruct->iSocket != SOCKET_FOR_MML || pTermStruct->ucTermStatus != TERM_LOGED)
                    {
                        DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
                                "\r\n CLI: Term %d cannot process this command",pTermStruct->ulTermId);
                        break;
                    }

                    /* 如果命令超長,直接返回 */
                    if (EOS_StrLen((_S8 *)(pstMsCliMsg->ucData)) > CT_MAX_CMDBUF)
                    {
                        DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
                                "\r\n CLI: Term %d received too long Command:\r\n    %s",pTermStruct->ulTermId,  pTermStruct->szRecvBuf);
                        break;
                    }

                    /* 設置該終端的語種與上層終端一致 */
                    ML_SetLanguage(pTermStruct->ulTermId, pstMsCliMsg->ucLan);

                    /* 從消息包中接收命令串 */
                    EOS_StrNCpy(pTermStruct->szRecvBuf, (_S8 *)(pstMsCliMsg->ucData), TERM_IO_BUFFER);
                    if (pTermStruct->ulTermId == 2)
                        EOS_StrCat(pTermStruct->szRecvBuf, "\r\n");
                    pTermStruct->iRecvLen = (_S32)EOS_StrLen(pTermStruct->szRecvBuf);

                    /* 注意命令的執行必須告知模式,否則無法使用現有命令解釋機制 */
                    pTermStruct->pWS->ulCurrentMode =
                            (_U32)(pstMsCliMsg->ucMode < CTM_TOTAL ? pstMsCliMsg->ucMode: 0);

                    DBG_Out(PID_CLI, CLI_DBGOUT_NOTE,
                            "\r\n CLI: Term %d received Command:%s",pTermStruct->ulTermId,  pTermStruct->szRecvBuf);
                    break;

                case MSG_CODE_CLI_FEEDBACK:
                    /* 接收反饋信息的終端狀態不正確,直接返回 */
                    if (pTermStruct->ucTermStatus != TERM_WAIT_RESPONSE)
                    {
                        DBG_Out(PID_CLI, CLI_DBGOUT_NOTE,
                                "\r\n CLI: Term %d Cannot Output the feedback info",pstMsCliMsg->ucTermID);
                    }
                    else if ((EOS_StrLen(pTermStruct->szSendBuf) + EOS_StrLen((_S8*)(pstMsCliMsg->ucData)))
                       < (TERM_IO_BUFFER - TERM_OUT_FOR_RESPONSE))
                    {
                        /* 復制反饋內容到發送緩沖區 */
                        DBG_Out(PID_CLI, CLI_DBGOUT_NOTE,
                                "\r\n CLI: Term %d received Output info:%s",pstMsCliMsg->ucTermID,  pTermStruct->szSendBuf);
                        /* 注意: 應當保證從此處到該信息的輸出之前不調用IO_OutToTerm */
                        EOS_StrCat(pTermStruct->szSendBuf, (_S8*)(pstMsCliMsg->ucData));
                        pTermStruct->iSendLen = (_S32)EOS_StrLen(pTermStruct->szSendBuf);
                    }
                    break;

                case MSG_CODE_CLI_EXECRESP:
                    if (pTermStruct->ucTermStatus == TERM_WAIT_RESPONSE)
                    {
                        DBG_Out(PID_CLI, CLI_DBGOUT_NOTE,
                                "\r\n CLI: Term %d received excute response",pstMsCliMsg->ucTermID,  pTermStruct->szSendBuf);
                        /* 注意: 應當保證從此處到該信息的輸出之前不調用IO_OutToTerm */
                        EOS_StrCat(pTermStruct->szSendBuf, CMD_RESPONED_END);
                        break;
                    }
                    //else分支直接往下走

                default:
                    CLI_RECORD(CLI_STAT_RECEIVED_UNWANTED);
                    DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
                            "\r\n CLI: No process for message:Code-%d!", pMsg->usMsgCode);
                    break;
            }
            break;
        #endif

        default:
            CLI_RECORD(CLI_STAT_RECEIVED_UNWANTED);
            DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
                    "\r\n CLI: No process for message from PID:%d!", pMsg->usSrcPid);
            break;
    }
}

#if MULTI_DEVICE_SUPPORT
/*==================================================================*/
/*      函數名      :CLI_MSMsgCreat                                 */
/*      函數功能    :主從命令的消息構建函數                         */
/*      輸入參數    :PTerm_Data_S pTermStruct  任務數據指針         */
/*      輸出參數    :PTerm_Data_S pTermStruct  任務數據指針         */
/*      返回值      :無                                             */
/*      調用函數    :無                                             */
/*      備注        :環境變量的初始化不在該函數中進行               */
/*==================================================================*/
ST_MSG* CLI_MSMsgCreat(_U32 usDeviceID, _U32 ulTermID, _U16 usMSmsgType, _S8 *szSend)
{
    _U32 ulSize;
    PST_MSCLI_MSG pstCliMsg;
    ST_MSG       *pstMsg;

    if (szSend == G_NULL)
        ulSize = sizeof(ST_MSCLI_MSG);
    else
        ulSize = sizeof(ST_MSCLI_MSG) + EOS_StrLen(szSend);

    pstMsg = ROS_MsgAlloc(PUBLIC_LENS_TOTAL + ulSize, ROS_MSG_ALLOC_OPT_LEAK_CHECK );
    if (pstMsg == G_NULL)
    {
        DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n  CLI(error return): CLI_MSMsgCreat:: ROS_MsgAlloc");
        MT_ERRLOG(0);
        return G_NULL;
    }

    /* 填充消息包的內容 */
    pstMsg->usSrcBid        = g_usTransLocalBID;
    pstMsg->usDstBid        = g_usTransLocalBID;
    pstMsg->usSrcPid        = PID_CLI;
    pstMsg->usDstPid        = PID_CLI;
    pstMsg->usMsgCode       = usMSmsgType;

    pstMsg->usDataOffset    = 0;
    pstMsg->usDataLens      = (_U16)ulSize;

    pstCliMsg = (PST_MSCLI_MSG)&( pstMsg->ucData[pstMsg->usDataOffset] );

    pstCliMsg->ucLan         = ML_GetLanguage(ulTermID);

    /* 由于主從命令行的終端ID不是完全對應的,因此需要作算術映射 */
    if (m_CliIsMainDevice != G_TRUE && ulTermID >= 2)
        ulTermID -= 2;
    else if (m_CliIsMainDevice == G_TRUE)
        ulTermID += 2;

    pstCliMsg->ucTermID      = (_U8)ulTermID;

    if (szSend != G_NULL)
        EOS_StrCpy((_S8 *)(pstCliMsg->ucData), szSend);

    return pstMsg;
}
#endif

/*********************************************************************/
/* 函數名稱 : CLI_CfgGlbVarInit()                                    */
/* 函數功能 : 與配置相關的模塊變量的初始化                           */
/* 輸入參數 :                                                        */
/* 輸出參數 :                                                        */
/* 返回     :                                                        */
/* 上層函數 : CLI_ConfigInit()                                       */
/* 創建者   :                                                        */
/* 修改記錄 :                                                        */
/*********************************************************************/
_U32 CLI_CfgGlbVarInit( _VOID )
{
    _U32                i, ulSize;
    _U8                *pucMem;

    /* 命令行最大在線用戶個數( 最前兩個分別為串口任務和MML終端的服務器端, 保留 ) */
    m_ulCliMaxOnlineUser = 2 + g_ul_CFG_CLI_MAX_TELNET_CLIENT_NUM;

    #if MULTI_DEVICE_SUPPORT
    {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产欧美一区二区| 亚洲国产精品t66y| 国模大尺度一区二区三区| 中文在线一区二区| 看电影不卡的网站| 婷婷久久综合九色国产成人 | 欧美一区二区精品| 久久精品国产精品青草| 久久精品视频免费| 成人国产一区二区三区精品| 日本成人在线看| 午夜av一区二区三区| 亚洲乱码一区二区三区在线观看| ww亚洲ww在线观看国产| 欧美巨大另类极品videosbest | 欧美性猛交xxxx乱大交退制版 | 亚洲天堂精品在线观看| 日韩免费看网站| 日韩一区二区三区精品视频| 欧美在线一二三四区| 91麻豆国产香蕉久久精品| 国产91精品入口| a亚洲天堂av| 成人激情图片网| 91丝袜国产在线播放| av在线播放不卡| 成人一级视频在线观看| 成人免费视频一区| 91麻豆免费在线观看| 欧美日韩高清一区二区不卡 | 日韩一级视频免费观看在线| 欧美日本一道本在线视频| 欧美一区三区四区| 久久精品夜夜夜夜久久| 亚洲欧美区自拍先锋| 蜜桃视频在线观看一区二区| 91免费视频观看| 精品久久久久久久久久久久久久久 | 久久精品夜色噜噜亚洲a∨| 99精品国产91久久久久久| 91国偷自产一区二区使用方法| 欧美精品丝袜中出| 国产精品欧美一级免费| 性欧美疯狂xxxxbbbb| 精品一区二区国语对白| 欧美日韩另类一区| 国产三级一区二区三区| 爽爽淫人综合网网站| 成人午夜在线免费| 久久伊人中文字幕| 亚洲国产一区二区三区| 91在线视频18| 久久精品视频免费观看| 久久精品国产在热久久| 777午夜精品免费视频| 一区二区三区日韩| 99国产精品99久久久久久| 久久午夜老司机| 久久不见久久见免费视频1| 26uuu国产电影一区二区| 蜜桃久久精品一区二区| 日韩三级精品电影久久久| 日韩中文字幕区一区有砖一区 | 欧美午夜片在线看| 亚洲一级电影视频| 久久综合色一综合色88| 欧美日韩精品一区二区三区蜜桃 | 国产99一区视频免费| 久久久久国产成人精品亚洲午夜| 美女在线一区二区| 欧美一级片在线看| 国产乱子伦视频一区二区三区| 日韩片之四级片| 成人性生交大片免费看中文| 国产精品亲子伦对白| 欧美日韩中字一区| 午夜欧美电影在线观看| 欧美精品九九99久久| 国产一区二区伦理片| 亚洲精品一二三| 欧美tickling网站挠脚心| 大桥未久av一区二区三区中文| 一区二区免费在线| 精品国产乱码久久久久久影片| av一本久道久久综合久久鬼色| 亚洲r级在线视频| 国产精品久久久久久久浪潮网站 | 91精品国产综合久久香蕉麻豆| 韩国欧美国产1区| 亚洲一区在线电影| 久久精品在线免费观看| 91精品国产色综合久久| 在线观看免费视频综合| 国产成人免费9x9x人网站视频| 看片网站欧美日韩| 国产做a爰片久久毛片| 裸体健美xxxx欧美裸体表演| 久久国产精品无码网站| 国产美女av一区二区三区| 亚洲免费资源在线播放| 成人精品高清在线| 蜜桃视频在线观看一区二区| 亚洲大尺度视频在线观看| 日韩精品一级中文字幕精品视频免费观看| 国产精品久久久久久久久果冻传媒 | 久草中文综合在线| 看片网站欧美日韩| 久久av老司机精品网站导航| 婷婷一区二区三区| 久久国产婷婷国产香蕉| 麻豆成人免费电影| 国产资源精品在线观看| 国产成人亚洲精品青草天美 | 99精品热视频| 色欧美88888久久久久久影院| 高潮精品一区videoshd| 成人av手机在线观看| 欧美伊人久久久久久久久影院 | 亚洲视频每日更新| 亚洲特级片在线| 亚洲成人精品影院| 久久www免费人成看片高清| 国产伦精品一区二区三区视频青涩| 国产精品一区久久久久| 在线观看视频一区二区 | 中文字幕av资源一区| 樱桃视频在线观看一区| 麻豆精品视频在线观看免费| 国产91综合一区在线观看| 欧美老年两性高潮| 中文字幕第一页久久| 蜜桃在线一区二区三区| 色哟哟一区二区在线观看| 日韩欧美高清dvd碟片| 亚洲综合久久久久| 成人小视频在线| 精品国产髙清在线看国产毛片| √…a在线天堂一区| 国内成人精品2018免费看| 一本色道久久综合狠狠躁的推荐| 久久精品夜色噜噜亚洲aⅴ| 日韩成人精品在线观看| 成人av电影免费观看| 日韩精品最新网址| 欧美aⅴ一区二区三区视频| 91香蕉视频mp4| 欧美激情艳妇裸体舞| 肉丝袜脚交视频一区二区| 色综合天天天天做夜夜夜夜做| 欧美xxx久久| 丝袜美腿亚洲色图| 成人一道本在线| 久久久一区二区三区捆绑**| 麻豆精品久久精品色综合| 欧美一区二区三区小说| 午夜精品免费在线| 欧美一区2区视频在线观看| 久久99精品一区二区三区三区| 日韩一区二区三区在线| 国产美女主播视频一区| 久久精品一区四区| 日本久久电影网| 蜜臀99久久精品久久久久久软件| 久久先锋影音av| 欧美色中文字幕| 看电视剧不卡顿的网站| 国产精品日韩精品欧美在线| 色综合久久中文综合久久97 | 中文字幕亚洲一区二区av在线| 欧美亚一区二区| av电影在线观看一区| 偷拍一区二区三区| 久久青草国产手机看片福利盒子 | 欧美96一区二区免费视频| 在线免费亚洲电影| 成人国产亚洲欧美成人综合网| 日韩高清在线一区| 久久精品人人做人人爽97| 在线观看亚洲a| av激情成人网| 狠狠色狠狠色综合| 尤物在线观看一区| 中文字幕亚洲欧美在线不卡| 欧美tickling挠脚心丨vk| 日本高清不卡aⅴ免费网站| 蜜桃视频免费观看一区| 亚洲午夜视频在线| 一区二区欧美在线观看| 中文字幕国产精品一区二区| 欧美人与禽zozo性伦| 一本高清dvd不卡在线观看| 国产在线精品免费av| 亚洲一区二区精品久久av| 国产精品亲子乱子伦xxxx裸| 91精品午夜视频| 欧美日韩成人激情| 色妞www精品视频| 国产高清不卡一区二区| 精品写真视频在线观看| 午夜不卡av免费|