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

📄 cli_debug.c

📁 命令行在嵌入式系统的实现
💻 C
📖 第 1 页 / 共 4 页
字号:
    pModulename = CT_GetParamByName("module", ulTermID);

    if (!EOS_StriCmp(pModulename, "all"))
    {
        for (i = 0; g_st_CFG_ModuleStatDisp[i].szModuleName[0] != '\0'; i++)
        {
            if (g_st_CFG_ModuleStatDisp[i].pClearFile != G_NULL)
            {
                IO_PrintToTerm(ulTermID, PUB_STRING_OUT, "\r\n\r\n ==== CLEAR STATISTIC OF MODULE : ");
                IO_PrintToTerm(ulTermID, PUB_STRING_OUT, g_st_CFG_ModuleStatDisp[i].szModuleName);
                g_st_CFG_ModuleStatDisp[i].pClearFile();
            }
        }
        return G_SUCCESS;
    }

    for (i = 0; g_st_CFG_ModuleStatDisp[i].szModuleName[0] != '\0'; i++)
    {
        if (!EOS_StriCmp(g_st_CFG_ModuleStatDisp[i].szModuleName, pModulename))
        {
            if (g_st_CFG_ModuleStatDisp[i].pClearFile != G_NULL)
            {
                IO_PrintToTerm(ulTermID, PUB_STRING_OUT, "\r\n\r\n ==== CLEAR STATISTIC OF MODULE : ");
                IO_PrintToTerm(ulTermID, PUB_STRING_OUT, g_st_CFG_ModuleStatDisp[i].szModuleName);
                g_st_CFG_ModuleStatDisp[i].pClearFile();
            }
            else
            {
                IO_PrintToTerm(ulTermID, PUB_STRING_OUT, "\r\n  There is no clear statistic function of module " );
                IO_PrintToTerm(ulTermID, PUB_STRING_OUT, g_st_CFG_ModuleStatDisp[i].szModuleName );
            }
            return G_SUCCESS;
        }
    }

    return G_FAILURE;
}



/*---------- MML终端接收透传命令字的模拟命令 -----------*/
/*------------------------------------------------------*/
_U32 CLI_MmlCmdTest(_U32 ulTermID)
{
    _S8 *pParam[8];
    _U32 i;
    _S8 szParam[80];

    (_VOID)ulTermID;

    m_TDTable[1].pTermStruct->szRecvBuf[0] = 0;

    for (i = 0; i < 8; i ++)
    {
        EOS_Sprintf(szParam, "cmd-string%d", i+1);
        pParam[i] = CT_GetParamByName(szParam, ulTermID);
        if (pParam[i] != G_NULL)
        {
            EOS_StrCat(m_TDTable[1].pTermStruct->szRecvBuf, pParam[i]);
            EOS_StrCat(m_TDTable[1].pTermStruct->szRecvBuf, " ");
        }
        else
            break;
    }
    EOS_StrCat(m_TDTable[1].pTermStruct->szRecvBuf, "\r\n");
    m_TDTable[1].pTermStruct->iRecvLen = (_S32)EOS_StrLen(m_TDTable[1].pTermStruct->szRecvBuf);

    return G_SUCCESS;
}






_U32 CLI_MsTestGet(_U32 ulTermID)
{
    CT_SetDeviceID(ulTermID, 1);
    return G_SUCCESS;
}

_U32 CLI_MsTestExec(_U32 ulTermID)
{
    _S8 *pParam;
    _U32 i;

    pParam = CT_GetParamByName("type", ulTermID);
    if (!EOS_StriCmp("normal", pParam))
    {
        IO_Print(CLI_MONITOR_ENABLE);
        IO_OutString("kkkkkkk");
    }
    else if (!EOS_StriCmp("long-resp",pParam))
    {
        for (i = 0; i < 20; i++)
        {
            IO_Print(CLI_MONITOR_ENABLE);
            CLI_DELAY(100);
        }
    }
    else
    {
        IO_Print(CLI_MONITOR_ENABLE);
        CLI_DELAY(2500);
        IO_Print(CLI_MONITOR_ENABLE);
    }

    return G_SUCCESS;
}

_U32 CLI_ShowTermData(_U32 ulTermID)
{
    _U32 i, ulRet;
    _U32 ulFromTermId, ulToTermId;
    PTerm_Data_S pTermStruct;
    _S8 *pszTermId,szInfo[2048], szIp[32];

    /* 输入指针的合法性判断 */
    if( !CLI_IS_TERMID_VALIDE(ulTermID))
    {
        DBG_ASSERT(0);
        return G_FAILURE;
    }

    pszTermId = CT_GetParamByName( (_S8 *)"term-id", ulTermID );
    if( G_NULL == pszTermId )
    {
        DBG_ASSERT(0);
        return G_FAILURE;
    }

    /* 获取终端ID */
    if( 0 == EOS_StrCmp( pszTermId, "all") )
    {
        ulFromTermId = 1;
        ulToTermId   = m_ulCliMaxTermNum;
    }
    else
    {
        ulRet = EOS_atou( pszTermId, &ulFromTermId );
        if( G_SUCCESS != ulRet )
        {
            DBG_ASSERT(0);
            return G_FAILURE;
        }

        /* 终端ID的合法性检查 */
        if( m_ulCliMaxTermNum < ulFromTermId )
        {
            DBG_ASSERT(0);
            IO_OutString("Input Term Id is too large !");
            return G_FAILURE;
        }

        ulToTermId = ulFromTermId;
    }


    for( i = ulFromTermId; i <= ulToTermId; i ++ )
    {
        pTermStruct = m_TDTable[i - 1].pTermStruct;

        if( (pTermStruct->iSocket >= 0) || (pTermStruct->iSocket == SOCKET_FOR_WEB) )
        {
             EOS_IPAddrToStr( pTermStruct->ulClientIP, szIp );
        }
        else
        {
            EOS_StrCpy( szIp, "---" );
        }

        EOS_Sprintf(szInfo,
                "\r\n\r\n  ============================================"
                    "\r\n  Term ID              %ld"
                    "\r\n  Term Data address    0x%lx"
                    "\r\n  socket               %ld"
                    "\r\n  ulClientIP           %s(0x%lx)"
                    "\r\n  username             %s"
                    "\r\n  ulTimeLeft           %ld"
                    "\r\n  ucTermStatus         %ld"
                    "\r\n  ucUserLevel          %ld"
                    "\r\n  -------------------------------------"
                    "\r\n  pWS data address     0x%lx",
                    i,
                    (_U32)pTermStruct,
                    pTermStruct->iSocket,
                    szIp, pTermStruct->ulClientIP,
                    pTermStruct->szCurUserName,
                    pTermStruct->ulTimeLeft,
                    pTermStruct->ucTermStatus,
                    pTermStruct->ucUserLevel,
                    (_U32)pTermStruct->pWS
                    );
        IO_OutString(szInfo);

        if( i <= m_ulCliMaxOnlineUser )
        {
            DBG_ASSERT( G_NULL != pTermStruct->pWS );

            EOS_Sprintf(szInfo,
                    "\r\n  szCmd                %s"
                    "\r\n  ulLevel              %ld"
                    "\r\n  ulStatus             %ld",
                    pTermStruct->pWS->szCmdString,
                    pTermStruct->pWS->ulLevel,
                    pTermStruct->pWS->ulStatus
                    );
            IO_OutString(szInfo);
        }

    }

    return G_SUCCESS;

}


/*-----------------------------------------------------------------------------
函数名称    : CLI_LogSend
功能        : 日志调试, 发送(写)日志
-----------------------------------------------------------------------------*/
_U32 CLI_LogSend( _U32 ulTermID )
{
    _U32    i, ulRet;
    _U32    ulUserLevel, ulFrom, ulTo;
    _S8    *pszInputUserLevel;
    _S8     szLogInfo[64];

    /* !!!!!! 字符串的次序必须保证和枚举CLI_OPERAT_LEVEL_T严格一致 */
    const _S8 *szUserLevel[CT_AL_NULL + 1] =
    {
        "query",
        "operator",
        "admin",
        "super",
        "debug",
        "all"
    };

    const _S8 *szUserName[CT_AL_NULL] =
    {
        "log_query",
        "log_operator",
        "log_admin",
        "log_super",
        "log_debug"
    };

    szUserName[CT_AL_SUPER] = g_csz_CFG_CLI_SUPER_USER_NAME;
    szUserName[CT_AL_DEBUG] = g_csz_CFG_CLI_DBG_USER_NAME;

    /* 输入变量的合法性判断 */
    if( !CLI_IS_TERMID_VALIDE(ulTermID) )
    {
        DBG_ASSERT(0);
        return G_FAILURE;
    }

    /* 获取输入参数 */
    pszInputUserLevel = CT_GetParamByName("user-level", ulTermID);
    if( G_NULL == pszInputUserLevel )
    {
        DBG_ASSERT(0);
        return G_FAILURE;
    }

    ulRet = CT_GetUlongByName( "from", ulTermID, &ulFrom );
    if( G_SUCCESS != ulRet )
    {
        DBG_ASSERT(0);
        return G_FAILURE;
    }

    ulRet = CT_GetUlongByName( "to", ulTermID, &ulTo );
    if( G_SUCCESS != ulRet )
    {
        DBG_ASSERT(0);
        return G_FAILURE;
    }

    /* 参数范围的合法性检查 */
    for( i = 0; i <= CT_AL_NULL ; i ++ )
    {
        if( 0 == EOS_StriCmp( pszInputUserLevel, szUserLevel[i] ) )
        {
            break;
        }
    }

    if( i > CT_AL_NULL )
    {
        DBG_ASSERT(0);
        return G_FAILURE;
    }
    else
    {
        ulUserLevel = i;
    }

    if( ulFrom > ulTo )
    {
        (_VOID)IO_OutString( G_STR_HEAD"Input ulFrom > ulTo . Must be From <= to !" );
        return G_FAILURE;
    }

    DBG_Out( PID_CLI, EN_DBG_OUT_CHN_31, G_STR_HEAD"szUserLevel[%ld] -> %s : [%ld, %ld] ",
             ulUserLevel, szUserLevel[ulUserLevel], ulFrom, ulTo );

    /* 特定的用户级别写日志 */
    if( CT_AL_NULL != ulUserLevel )
    {
        /* 创建临时用户 */
        if( CT_AL_ADMIN >= ulUserLevel )
        {
            (_VOID)CLI_AddTermUser( szUserName[ulUserLevel],
                                    szUserName[ulUserLevel],
                                    (_U8)ulUserLevel,
                                    USER_FOR_CLI,
                                    ML_ENG );
        }

        for( i = ulFrom; i <= ulTo; i ++ )
        {
            EOS_Sprintf( szLogInfo, "log_%03ld", i );

            (_VOID)CLI_SaveUserLog(  szUserName[ulUserLevel],
                                     LOG_MODE_SERIAL,
                                     0,
                                     szLogInfo );
        }

        /* 删除临时用户 */
        if( CT_AL_ADMIN >= ulUserLevel )
        {
            (_VOID)CLI_DelTermUser( szUserName[ulUserLevel] );
        }

    }
    /* 所有级别用户交叉写日志 */
    else
    {
        /* 创建临时用户 */
        for( ulUserLevel = CT_AL_QUERY; ulUserLevel <= CT_AL_ADMIN; ulUserLevel ++ )
        {
            (_VOID)CLI_AddTermUser( szUserName[ulUserLevel],
                                    szUserName[ulUserLevel],
                                    (_U8)ulUserLevel,
                                    USER_FOR_CLI,
                                    ML_ENG );
        }

        for( ulUserLevel = 0, i = ulFrom; i <= ulTo; i ++ )
        {
            EOS_Sprintf( szLogInfo, "log_%03ld", i );

            (_VOID )CLI_SaveUserLog( szUserName[ulUserLevel],
                                     LOG_MODE_SERIAL,
                                     0,
                                     szLogInfo );

            ulUserLevel = ( ulUserLevel + 1 ) % CT_AL_NULL;
        }

        /* 删除临时用户 */
        for( ulUserLevel = CT_AL_QUERY; ulUserLevel <= CT_AL_ADMIN; ulUserLevel ++ )
        {
            (_VOID)CLI_DelTermUser( szUserName[ulUserLevel] );
        }

    }

    return G_SUCCESS;

}

⌨️ 快捷键说明

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