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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cli_init.c

?? 命令行在嵌入式系統(tǒng)的實(shí)現(xiàn)
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/************************************************************************
Copyright 200X - 200X+1.

filename     : CLI_Init.c

description  : 本文件實(shí)現(xiàn)命令行模塊主要部分的初始化操作

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"

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

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

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

/* 命令行最大在線用戶個(gè)數(shù) */
_U32             m_ulCliMaxOnlineUser           = 0;

/* Web網(wǎng)管終端在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;

/*==================================================================*/
/*      函數(shù)名      :CLI_ProcessMsg                                 */
/*      函數(shù)功能    :命令行通用消息處理                             */
/*      輸入?yún)?shù)    :PTerm_Data_S pTermStruct  任務(wù)數(shù)據(jù)指針         */
/*      輸出參數(shù)    :PTerm_Data_S pTermStruct  任務(wù)數(shù)據(jù)指針         */
/*      返回值      :無                                             */
/*      調(diào)用函數(shù)    :無                                             */
/*      備注        :環(huán)境變量的初始化不在該函數(shù)中進(jìn)行               */
/*==================================================================*/
_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
    /* 主從設(shè)備命令行之間的交互消息 */
        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; // 網(wǎng)管分配的終端為第二個(gè)
            }

            switch (pMsg->usMsgCode)
            {
                /* 接收透?jìng)魃蠈釉O(shè)備下發(fā)的透?jìng)髅?*/
                case MSG_CODE_AGENT_SEND_CMD:
                case MSG_CODE_CLI_TRANSCMD:
                    /* 如果該終端的接收狀態(tài)不正確,直接返回 */
                    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;
                    }

                    /* 如果命令超長(zhǎng),直接返回 */
                    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;
                    }

                    /* 設(shè)置該終端的語種與上層終端一致 */
                    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);

                    /* 注意命令的執(zhí)行必須告知模式,否則無法使用現(xiàn)有命令解釋機(jī)制 */
                    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:
                    /* 接收反饋信息的終端狀態(tài)不正確,直接返回 */
                    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))
                    {
                        /* 復(fù)制反饋內(nèi)容到發(fā)送緩沖區(qū) */
                        DBG_Out(PID_CLI, CLI_DBGOUT_NOTE,
                                "\r\n CLI: Term %d received Output info:%s",pstMsCliMsg->ucTermID,  pTermStruct->szSendBuf);
                        /* 注意: 應(yīng)當(dāng)保證從此處到該信息的輸出之前不調(diào)用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);
                        /* 注意: 應(yīng)當(dāng)保證從此處到該信息的輸出之前不調(diào)用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
/*==================================================================*/
/*      函數(shù)名      :CLI_MSMsgCreat                                 */
/*      函數(shù)功能    :主從命令的消息構(gòu)建函數(shù)                         */
/*      輸入?yún)?shù)    :PTerm_Data_S pTermStruct  任務(wù)數(shù)據(jù)指針         */
/*      輸出參數(shù)    :PTerm_Data_S pTermStruct  任務(wù)數(shù)據(jù)指針         */
/*      返回值      :無                                             */
/*      調(diào)用函數(shù)    :無                                             */
/*      備注        :環(huán)境變量的初始化不在該函數(shù)中進(jìn)行               */
/*==================================================================*/
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;
    }

    /* 填充消息包的內(nèi)容 */
    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不是完全對(duì)應(yīng)的,因此需要作算術(shù)映射 */
    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

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

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

    #if MULTI_DEVICE_SUPPORT
    {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区二区三区视频在线观看 | 欧美色图第一页| 欧美艳星brazzers| 在线成人免费视频| 2023国产一二三区日本精品2022| 国产午夜精品一区二区三区视频| 欧美极品美女视频| 一区二区三区电影在线播| 日韩激情视频在线观看| 国产高清一区日本| 欧洲另类一二三四区| 2023国产精华国产精品| 中文字幕综合网| 麻豆中文一区二区| 99国内精品久久| 在线成人免费观看| 国产精品日韩成人| 婷婷中文字幕综合| 韩国成人在线视频| 欧美午夜精品电影| 国产亚洲精品中文字幕| 亚洲 欧美综合在线网络| 顶级嫩模精品视频在线看| 欧美性生活一区| 国产日韩精品视频一区| 亚洲不卡在线观看| 成人av网址在线| 欧美videos大乳护士334| 亚洲在线成人精品| 国产999精品久久久久久 | 视频一区二区三区在线| 东方欧美亚洲色图在线| 日韩三区在线观看| 一区二区三区在线视频播放| 国产精品一区二区久久精品爱涩| 欧美日韩视频在线一区二区| 国产精品免费丝袜| 精品一区二区三区日韩| 欧美亚洲一区三区| 国产精品国产三级国产aⅴ无密码| 日本特黄久久久高潮| 一本高清dvd不卡在线观看| 亚洲精品一区二区三区四区高清| 亚洲国产aⅴ天堂久久| 成人午夜看片网址| 欧美日韩一区二区电影| 亚洲免费电影在线| 国产aⅴ精品一区二区三区色成熟| 日本国产一区二区| 亚洲视频 欧洲视频| 91亚洲永久精品| 一区二区三区不卡视频| 精品一区二区日韩| 久久午夜羞羞影院免费观看| 欧美一区二区三区四区视频| 成人免费在线视频观看| 国产米奇在线777精品观看| 欧美一区二区高清| 亚洲精品日日夜夜| 91在线免费播放| 日本一区二区在线不卡| 国产一区二区免费看| 精品毛片乱码1区2区3区| 日本aⅴ亚洲精品中文乱码| 欧美三级中文字| 亚洲h精品动漫在线观看| 成年人网站91| 中文字幕中文字幕在线一区| 成人性生交大片免费| 久久久国产精品麻豆| 国产真实乱对白精彩久久| 久久久亚洲精品一区二区三区| 麻豆国产一区二区| 日韩免费高清电影| 看电影不卡的网站| 精品理论电影在线| 激情综合网最新| 国产三级精品三级| 国产.欧美.日韩| 国产欧美精品区一区二区三区| 久久九九影视网| 色狠狠一区二区| 国精产品一区一区三区mba桃花 | 韩国三级中文字幕hd久久精品| 99精品偷自拍| 欧美精品tushy高清| 3d成人h动漫网站入口| eeuss鲁一区二区三区| 视频一区视频二区中文字幕| 一区二区三区在线观看欧美| 亚洲h在线观看| 一区二区三区免费在线观看| 91精选在线观看| 欧美一区二区播放| 94色蜜桃网一区二区三区| 午夜精品一区在线观看| 久久蜜桃av一区精品变态类天堂| 欧美性一区二区| 99久久精品免费观看| 激情文学综合丁香| 日韩精品电影一区亚洲| 亚洲美女屁股眼交3| 欧美精品一区二区三区蜜桃| 欧美大肚乱孕交hd孕妇| 久久看人人爽人人| 欧美精品一区二区不卡| 国产.欧美.日韩| 天堂一区二区在线| 久久综合999| 91精品办公室少妇高潮对白| 99riav久久精品riav| 欧美人妇做爰xxxⅹ性高电影| 成人激情校园春色| 亚洲精品一二三区| 亚洲国产sm捆绑调教视频| 粉嫩av一区二区三区| 欧美疯狂做受xxxx富婆| 国产精品情趣视频| 美女视频一区二区三区| 欧美视频在线观看一区二区| 中文在线资源观看网站视频免费不卡| 欧美高清一级片在线观看| 三级精品在线观看| 在线免费精品视频| 亚洲理论在线观看| 成人免费视频app| 久久九九99视频| 国产一区 二区 三区一级| 日韩视频一区二区三区在线播放 | 久久综合九色综合97婷婷女人| 久久久久久久久久电影| 天堂精品中文字幕在线| av一区二区三区| 91视频免费播放| 欧美日韩黄色影视| 欧美军同video69gay| 日韩免费观看2025年上映的电影| 国产欧美日韩在线观看| 一区二区免费看| 麻豆91免费看| 欧洲精品视频在线观看| 亚洲欧洲日韩女同| 国产麻豆欧美日韩一区| 日韩欧美色电影| 日韩精品91亚洲二区在线观看| 色欧美片视频在线观看 | 国产欧美精品在线观看| 亚洲h精品动漫在线观看| 欧美日韩视频在线观看一区二区三区 | 色猫猫国产区一区二在线视频| 国产午夜精品福利| 国产一区二区三区不卡在线观看| 精品欧美乱码久久久久久1区2区 | 国产剧情在线观看一区二区| 福利电影一区二区三区| 91亚洲国产成人精品一区二区三 | 成人精品高清在线| 欧美精品一区二区三区久久久| 亚洲www啪成人一区二区麻豆 | 国产精品久久久久久久久动漫 | 经典一区二区三区| 99精品视频在线观看免费| 午夜精品福利一区二区蜜股av| 69久久99精品久久久久婷婷 | 国产欧美中文在线| 成人午夜在线视频| 亚洲美女视频在线| 欧美乱妇20p| 国内精品写真在线观看| 国产日韩精品一区| 在线亚洲人成电影网站色www| 亚洲成av人片在线| 91精品国产综合久久久久久| 国产麻豆成人传媒免费观看| 亚洲欧洲成人自拍| 欧美乱熟臀69xxxxxx| 国产综合久久久久影院| 亚洲精品午夜久久久| 日韩一区二区三区高清免费看看| 国产精品一区二区你懂的| 亚洲天堂2016| 久久久久久久网| 日本韩国精品一区二区在线观看| 日本不卡中文字幕| 亚洲欧洲av在线| 久久综合色鬼综合色| 色吧成人激情小说| 国产电影精品久久禁18| 亚洲福利一区二区| 国产精品久久久久久亚洲毛片| 7777女厕盗摄久久久| 色综合中文字幕国产 | 精品一区二区国语对白| 伊人色综合久久天天| 国产欧美一区二区在线| 这里只有精品视频在线观看| 色综合久久久网| thepron国产精品| 国产精品18久久久久久vr| 美女国产一区二区|