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

📄 cli_init.c

📁 命令行在嵌入式系统的实现
💻 C
📖 第 1 页 / 共 3 页
字号:
}

/*==================================================================*/
/*      函数名      :CLI_DBInit                                     */
/*      函数功能    主机名初始化                                    */
/*==================================================================*/
_U32 CLI_DBInit( _VOID )
{
#if CLI_DBASE_SUPPORT
    _U32        ulRet;
    HostName_S  sHostName;

    /* 是否包含RDB模块 */
    if( G_YES != g_ul_INCLUDE_MODULE_CLI_RDB )
    {
        return G_SUCCESS;
    }

    /* 函数指针是否注册 */
    if(    ( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectQuery )
        || ( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectInsert )
      )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    if (G_SUCCESS != g_pfn_CFG_CLI_RDB_RecordDirectQuery(m_ulCliUserHandle,
                       m_usHostNameTable, 0, G_FALSE, &sHostName))
    {
        EOS_StrCpy(m_szHostName, " ");
        EOS_StrCpy(sHostName.szHostName,  " ");

        ulRet = g_pfn_CFG_CLI_RDB_RecordDirectInsert(m_ulCliUserHandle, m_usHostNameTable, 0, &sHostName);
        if( ulRet != G_SUCCESS )
        {
            MT_ERRLOG(ulRet);
            return G_FAILURE;
        }

    }
    else
    {
        EOS_StrNCpy(m_szHostName, sHostName.szHostName, (HOSTNAME_LENGTH - 1) );
        m_szHostName[HOSTNAME_LENGTH - 1] = '\0';
    }

    if( G_NULL != g_pfn_CFG_CLI_AclDBInit )
    {
        ulRet = g_pfn_CFG_CLI_AclDBInit();
        if( ulRet != G_SUCCESS )
        {
            MT_ERRLOG(ulRet);
            return G_FAILURE;
        }
    }

#else
    EOS_StrCpy(m_szHostName, " ");
#endif

    return G_SUCCESS;

}

/*********************************************************************/
/* 函数名称 : CLI_TasksCreat ()                                      */
/* 函数功能 : 命令行模块的任务创建                                   */
/* 输入参数 :                                                        */
/* 输出参数 :                                                        */
/* 返回     :                                                        */
/* 上层函数 :                                                        */
/* 创建者   :                                                        */
/* 修改记录 :                                                        */
/*********************************************************************/
_U32 CLI_TasksCreat(_VOID)
{
    _U32 ulRet;
    _U32 ulArg[2] = {0, 0};
    _U32 ulTaskID;

    /*串口终端*/
    ulRet = ROS_SelfTaskCreate(PID_CLI, "CLI_TASK_SERIAL",
                    EN_ROS_TASK_PRIORITY_NORMAL,
                    ROS_TASK_STACK_SIZE_DEFAULT,
                    ulArg, CLI_SerialTask, &ulTaskID);
    CLI_ASSURE_OR_FAIL(ulRet == G_SUCCESS);

    /* telnet服务器任务创建 */
    #if CLI_TELNET_SUPPORT
    if( G_YES == g_ul_INCLUDE_SUB_MODULE_CLI_TELNET )
    {
        if( G_NULL != g_pfn_CFG_CLI_TelnetTasksCreat )
        {
            ulRet = g_pfn_CFG_CLI_TelnetTasksCreat();
            CLI_ASSURE_OR_FAIL(ulRet == G_SUCCESS);
        }
        else
        {
            CLI_ASSURE_OR_FAIL(0);
        }
    }
    #endif

    ulRet = ROS_SelfTaskCreate( PID_CLI, "CLI_TASK_ASYNIO",
                    EN_ROS_TASK_PRIORITY_NORMAL,
                    ROS_TASK_STACK_SIZE_DEFAULT,
                    ulArg, IO_AsynDispTask, &ulTaskID);
    CLI_ASSURE_OR_FAIL(ulRet == G_SUCCESS);

    return G_SUCCESS;
}


/*********************************************************************/
/* 函数名称 : CLI_ProcessInit()                                      */
/* 函数功能 : 模块分段初始化函数                                     */
/* 输入参数 :                                                        */
/* 输出参数 :                                                        */
/* 返回     :                                                        */
/* 上层函数 :                                                        */
/* 创建者   :                                                        */
/* 修改记录 :                                                        */
/*********************************************************************/
_U32 CLI_ProcessInit(EN_PROCESS_INIT_PHASE ulPeriod)
{
    _U32 ulRet = G_SUCCESS;

    switch (ulPeriod)
    {
        case EN_PROCESS_INIT_PHASE_1:
            /* 日志表项的初始化 */
            ulRet = CLI_LogInit();

            /* 用户表初始化 */
            ulRet += CLI_UserTableInit();
            ulRet += CLI_DBInit();

            /* 模式结构初始化 */
            CT_InitSysModes();

            memset( &m_ulCliStat[0], 0, sizeof(m_ulCliStat));
            break;

        case EN_PROCESS_INIT_PHASE_2:
            /* 终端任务表初始化*/
            ulRet += CLI_TDTableInit();
            /* 命令行任务创建 */
            if (CLI_TasksCreat() != G_SUCCESS)
            {
                return G_FAILURE;
            }

            /* 注册命令模式与模式对象 */
            ulRet += CT_InitCmdTree();
            break;

        case EN_PROCESS_INIT_PHASE_3:
            /* 命令注册 */
            if( G_NULL != g_pfn_CFG_MT_RegCmdHub )
            {
                ulRet += g_pfn_CFG_MT_RegCmdHub();
            }

            if( G_NULL != g_pfn_CFG_MT_RegCmdDiag )
            {
                ulRet += g_pfn_CFG_MT_RegCmdDiag();
            }

            /* 用户信息初始化 */
            ulRet += CLI_LoadTermUser();
            break;

        case EN_PROCESS_INIT_PHASE_4:
            break;

        case EN_PROCESS_INIT_PHASE_5:
            break;

        case EN_PROCESS_INIT_PHASE_6:
            break;

        case EN_PROCESS_INIT_PHASE_7:
            /* 将全局命令链接到所有模式 */
            ulRet += CLI_GlobalCmdLink();

            /* 创建并启动秒定时 */
            if(G_SUCCESS != ROS_TimerRelCreate(&m_CliSecTimer))
            {
                DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
                        "\r\n CLI: Second timer creat failed!");
                return G_FAILURE;
            }
            ulRet += ROS_TimerRelStart(m_CliSecTimer, EN_TIMER_MODE_PERIOD,
                                      EOS_GetTicksPerSecond(), 0, 0);

            break;

        default:
            DBG_Out(PID_CLI, MT_DBGOUT_ERR, "\r\n CLI::Init phase error!");
            break;

    }
    if (ulRet == G_SUCCESS)
    {
        return G_SUCCESS;
    }

    MT_ERRLOG(ulPeriod);
    DBG_Out(PID_CLI, CLI_DBGOUT_ERR,
            "\r\n !!! CLI: module initial failed! ulPeriod = %ld", ulPeriod);
    return G_FAILURE;
}


/*********************************************************************/
/* 函数名称 : CLI_GetHostName()                                      */
/* 函数功能 : 对外提供的主机名获取函数                               */
/* 输入参数 :                                                        */
/* 输出参数 :                                                        */
/* 返回     : 主机名字符串                                           */
/*********************************************************************/
const _S8 *CLI_GetHostName(_VOID)
{
    return m_szHostName;
}

/*********************************************************************/
/* 函数名称 : CLI_SetHostName()                                      */
/* 函数功能 : 对外提供的设置主机名的函数                            */
/* 输入参数 :                                                        */
/* 输出参数 :                                                        */
/* 返回     : 成功/失败                                              */
/*********************************************************************/
_U32 CLI_SetHostName(const _S8 szNewHostName[])
{
    HostName_S sHostName;

    /* 入口指针的合法性检查 */
    if( G_NULL == szNewHostName )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    /* 新的主机名长度的合法性检查 */
    if( EOS_StrLen(szNewHostName) >= HOSTNAME_LENGTH )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    EOS_StrCpy( m_szHostName, szNewHostName );

#if CLI_DBASE_SUPPORT
    /* 是否包含RDB模块 */
    if( G_YES == g_ul_INCLUDE_MODULE_CLI_RDB )
    {
        /* 函数指针是否注册 */
        if( G_NULL == g_pfn_CFG_CLI_RDB_RecordDirectUpdate )
        {
            MT_ERRLOG(0);
            return G_FAILURE;
        }

        EOS_StrCpy (sHostName.szHostName, szNewHostName);
        (_VOID)g_pfn_CFG_CLI_RDB_RecordDirectUpdate(m_ulCliUserHandle, m_usHostNameTable, 0, &sHostName);
    }
#endif

    return G_SUCCESS;

}

/*********************************************************************/
/* 函数名称 : CLI_IsTermBusy()                                       */
/* 函数功能 : 终端是否忙                                             */
/* 输入参数 :                                                        */
/* 输出参数 :                                                        */
/* 返回     :                                                        */
/*********************************************************************/
_BOOL CLI_IsTermBusy(_U32 ulTermID)
{
    PTerm_Data_S pTermStruct;

    pTermStruct = m_TDTable[ulTermID - 1].pTermStruct;

    if (pTermStruct->ucTermStatus > TERM_LOGED)
        return G_TRUE;
    return G_FALSE;
}

⌨️ 快捷键说明

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