⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cli_debug.c

📁 命令行在嵌入式系统的实现
💻 C
📖 第 1 页 / 共 4 页
字号:
/*               2、多个同名参数的缺省获取 */
/*               3、互斥参数的获取         */
/*               4、错误获取               */
/*               5、不存在的参数获取       */
/*               6、取正数                 */
/*               7、取负数                 */
/*       Param2: 取数的下标澹(一般为1)     */
/*       Param3: 1、使用字符串形式获取     */
/*               2、使用长整型形式获取     */

_U32 CLI_CmdTestIntp(_U32 Param1, _U32 Param2, _U32 Param3, _U32 Param4)
{
    CT_WS_P pWS;
    _U32 ulTermID;
    _S8 *szRet;
    _U32 ulResualt;
    _S8 szName[][30] = {
                    /*1、一般参数获取*/
                    "name1",
                    /*2、多个同名参数的缺省获取 */
                    "name",
                    /*3、互斥参数的获取 */
                    "mt-name1|mt-name2",
                    /*4、错误获取 */
                    "",
                    /*5、不存在的参数获取 */
                    "abcd",
                    /*6、取正数 */
                    "number",
                    /*7、取负数 */
                    "con-num",
                    /*8、不存在的参数获取*/
                    "name3",
                    /*9、16进制数获取*/
                    "hex-num",
                    /*10、大小写混杂*/
                    "NumBer"
                    };

    (_VOID)Param4;
    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. 不存在的参数获取       "
            "\r\n           6. 取正数                 "
            "\r\n           7. 取负数                 "
            "\r\n Param2 -- 取数的下标(一般为1)       "
            "\r\n Param3 -- 1. 使用字符串形式获取     "
            "\r\n           2. 使用长整型形式获取     "
                    );
        return G_SUCCESS;
    }

    ulTermID = 1;
    pWS = m_TDTable[ulTermID - 1].pTermStruct->pWS;

    EOS_StrCpy(pWS->NameBuf[0], "name");
    EOS_StrCpy(pWS->NameBuf[1], "name1");
    EOS_StrCpy(pWS->NameBuf[2], "name2");
    EOS_StrCpy(pWS->NameBuf[3], "mt-name1");
    EOS_StrCpy(pWS->NameBuf[4], "name");
    EOS_StrCpy(pWS->NameBuf[5], "number");
    EOS_StrCpy(pWS->NameBuf[6], "con-num");
    EOS_StrCpy(pWS->NameBuf[7], "hex-num");

    EOS_StrCpy(pWS->buffer[0], "name");
    EOS_StrCpy(pWS->buffer[1], "www");
    EOS_StrCpy(pWS->buffer[2], "mmm");
    EOS_StrCpy(pWS->buffer[3], "mt-name1");
    EOS_StrCpy(pWS->buffer[4], "ooo");
    EOS_StrCpy(pWS->buffer[5], "1050");
    EOS_StrCpy(pWS->buffer[6], "-1050");
    EOS_StrCpy(pWS->buffer[7], "0a0f");

    if (Param1 > 11 || Param1 == 0)
        return G_FAILURE;

    if (Param1 == 11)
    {
        szRet = CT_GetParamByName(G_NULL, ulTermID);
        if (szRet == G_NULL)
        {
            DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n Resualt: Get NULL");
            return G_FAILURE;
        }
        else
        {
            DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n Resualt: %s", szRet);
            return G_SUCCESS;
        }
    }

    if (Param2 > 1)
    {
        EOS_Sprintf(szName[Param1 - 1], "%s/%d", szName[1], Param2);
    }

    DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
            "\r\n\r\n CLI:GetByName (\"%s\", %d)", szName[Param1 - 1], ulTermID);
    if (Param3 == 1)
    {
        if (Param4 == 3)
            ulTermID = 3;

        szRet = CT_GetParamByName(szName[Param1 - 1], ulTermID);
        if (szRet == G_NULL)
            DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n Resualt: Get NULL");
        else
            DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n Resualt: %s", szRet);
    }
    else if (Param3 == 2)
    {
        if (CT_GetLongByName(szName[Param1 - 1], ulTermID, (_S32 *)&ulResualt) == G_SUCCESS)
            DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n Resualt: %d", ulResualt);
        else
            DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n Resualt: Get FAILED");
    }
    else
    {
        if (CT_GetHexByName(szName[Param1 - 1], ulTermID, &ulResualt) == G_SUCCESS)
            DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n Resualt: 0x%x", ulResualt);
        else
            DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n Resualt: Get FAILED");
    }
    return G_SUCCESS;
}

/*--------------------命令行的标准输出测试函数-----------------------*/
/*===================================================================*/
/*       CmdWord = 3                       */
/* 说明  Param1: 1、同步输出          */
/*               2、异步输出          */
/*       Param2: 1、终端ID(主要遍历串口终端与telnet终端即可) */
/*       Param3: 1、终端正常前提      */
/*               2、终端超时          */
/*               3、终端出现异常      */
/*               4、终端未被激活      */
/*               5、不存在的终端      */
/*               6、异步队列满        */
/*       Param4: 1、正常内容          */
/*               2、错误内容          */
/*               3、大量内容          */

_U32 CLI_CmdTestStandardIO(_U32 Param1, _U32 Param2, _U32 Param3, _U32 Param4)
{
    _U32 ulInfoID;
    _U32 ulTermID;
    _U32 ulCount, i;
    PTerm_Data_S pTermStruct;

    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 Param2 -- 1. 终端ID(主要遍历串口终端与telnet终端即可) "
            "\r\n Param3 -- 1. 终端正常前提      "
            "\r\n           2. 终端超时          "
            "\r\n           3. 终端出现异常      "
            "\r\n           4. 终端未被激活      "
            "\r\n           5. 不存在的终端      "
            "\r\n           6. 异步队列满        "
            "\r\n Param4 -- 1. 正常内容          "
            "\r\n           2. 错误内容          "
            "\r\n           3. 大量内容          "
                    );
        return G_SUCCESS;
    }

    /* 语种资源预置 */
    if (Param4 == 1)         //正常内容
    {
        ulInfoID = CLI_TIMEOUT_TELNET_FAIL;
        ulCount = 1;
    }
    else if(Param4 == 2)     //错误内容
    {
        ulInfoID = ML_NULL_STRING_SID + 5; /* ??? Tailor_LingJian */
        ulCount = 1;
    }
    else if (Param4 == 2)     //大量内容
    {
        ulInfoID = CLI_TIMEOUT_TELNET_FAIL;
        ulCount = 300;
    }
    else
    {
        ulInfoID = CLI_MONITOR_ENABLE;
        ulCount = 1;
    }

    /* 终端预置 */
    ulTermID = Param2;
    if (CLI_IS_TERMID_VALIDE(ulTermID))
        pTermStruct = m_TDTable[ulTermID - 1].pTermStruct;
    else
        return G_FAILURE;

    switch (Param3)
    {
        /* 终端正常 */
        case 1:
            if (!IS_TERM_NORMAL(pTermStruct))
            {
                DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n  CLI: 测试失败,请使终端%d正常先", ulTermID);
                return G_FAILURE;
            }
            break;

        /* 终端超时 */
        case 2:
            if (!IS_TERM_NORMAL(pTermStruct))
            {
                DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n  CLI: 测试失败,请使终端%d正常先", ulTermID);
                return G_FAILURE;
            }
            pTermStruct->ulTimeLeft = 0;
            DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n  CLI: 已经预置终端%d超时! ", ulTermID);
            break;

        /* 终端异常 */
        case 3:
            if (!IS_TERM_NORMAL(pTermStruct))
            {
                DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n  CLI: 测试失败,请使终端%d正常先", ulTermID);
                return G_FAILURE;
            }
            CLI_SetTermStatus(pTermStruct, TERM_SLEEPING);
            DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n  CLI: 已经预置终端%d异常! ", ulTermID);
            break;

        /* 终端未登录 */
        case 4:
            if (pTermStruct->ulTimeLeft == 0 || pTermStruct->ucTermStatus != TERM_SLEEPING)
            {
                DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n  CLI: 测试失败,请测试未登录终端");
                return G_FAILURE;
            }
            break;
        /* 终端不存在 */
        case 5:
            if (ulTermID > 0 && ulTermID <= m_ulCliMaxOnlineUser)
            {
                DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n  CLI: 测试失败,情测试不存在终端");
                return G_FAILURE;
            }
            break;
        default:
            return G_FAILURE;


    }

    /* 同步输出测试 */
    if (Param1 == 1)
    {
        for (i = 0; i < ulCount; i++)
        {
            if (IO_PrintToTerm(ulTermID, ulInfoID) != G_SUCCESS)
            {
                DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n  CLI: 第%d次同步输出错误", i);
            }
        }
    }
    /* 异步输出测试 */
    else if (Param1 == 2)
    {
        for (i = 0; i < ulCount; i++)
        {
            if (IO_SendToTerm(ulTermID, ulInfoID) != G_SUCCESS)
            {
                DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n  CLI: 第%d次异步输出错误", i);
            }
        }
    }
    else if (Param1 == 3)
    {
        IO_SendToAllTerm(ulTermID);
    }
    else
    {
        DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
                "\r\n CLI: test command error: %d, %d, %d, %d", Param1, Param2, Param3, Param4);
    }

    DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n  CLI: 测试完成,请观察终端%d", ulTermID);
    return G_SUCCESS;

}

/*--------------------命令行的汇总输出测试函数-----------------------*/
/*===================================================================*/
/*       CmdWord = 4                       */
/* 说明  Param1: 1、简单字符串输出            */
/*               2、带回车的大字符串          */
/*               3、不带回车的大字符串        */
/*               4、循环调用输出              */
/*       Param2: 1、手动滚屏      */
/*               2、自动滚屏      */
_U32 CLI_CmdTestDirectIO(_U32 Param1, _U32 Param2, _U32 Param3, _U32 Param4)
{
    _S8 *szInfo;
    _S8 szTmp[80];
    _U32 i;
    PTerm_Data_S pTermStruct;
    (_VOID)Param3;
    (_VOID)Param4;

    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 Param2 -- 1、手动滚屏      "
            "\r\n           2、自动滚屏      "
                    );
        return G_SUCCESS;
    }


    pTermStruct = m_TDTable[Param3].pTermStruct;


    if (!IS_TERM_NORMAL(pTermStruct))
    {
        DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n  CLI: 测试失败,请先正常登录串口终端");
        return G_FAILURE;

    }
    szInfo = malloc(1024 * 20);
    if (szInfo == G_NULL)
    {
        return G_FAILURE;
    }
    szInfo[0] = '\0';

    EOS_StrCpy (szInfo, "\r\n  Test of function : OutToTerm");

    if (Param2 == 1)
        pTermStruct->ucScroll = SCROLL_MANUAL;
    else
        pTermStruct->ucScroll = SCROLL_AUTO;

    switch (Param1)
    {
        /* 1、简单字符串输出 */
        case 1:
            break;
        /* 2、带回车的大字符串          */
        case 2:
            for (i = 0; i < 200; i++)
            {
                EOS_Sprintf(szTmp, "\r\n  Test of function : OutToTerm(%d)", i);
                EOS_StrCat (szInfo, szTmp);
            }
            break;
        /* 3、不带回车的大字符串        */
        case 3:
            for (i = 0; i< 1000; i++)
            {
                EOS_Sprintf(szTmp, "123456789012345(%d)", i);
                EOS_StrCat (szInfo, szTmp);
            }
            break;
        /* 4、循环调用输出              */
        case 4:
            for (i = 0; i < 200; i++)
            {
                EOS_Sprintf(szInfo, "\r\n  Test of function : OutToTerm(%d)", i);
                IO_OutToTerm(pTermStruct, szInfo);
            }
            free(szInfo);
            return G_SUCCESS;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -