/*lint -e961*/
VOS_VOID    NAS_COMM_nsprintf
(
    VOS_CHAR                                *pcBuff,
    VOS_UINT16                              usOffset,
    const VOS_CHAR                          *String,
    VOS_INT32                               *pilOutLen
)
{
    /* delay begin */
    PS_LOG_RETURN();
    /* delay end */

    /* 入参检查 */
    if ( VOS_NULL_PTR == pilOutLen )
    {
        NAS_COMM_LOG_ERR("NAS_COMM_nsprintf, pilOutLen is NULL pointer!");
        TLPS_PRINT2LAYER_ERROR(NAS_COMM_nsprintf_ENUM, LNAS_FUNCTION_LABEL1);
        return;
    }

    if ( VOS_NULL_PTR == pcBuff )
    {
        NAS_COMM_LOG_ERR("NAS_COMM_nsprintf, pcBuff is NULL pointer!");
        TLPS_PRINT2LAYER_ERROR(NAS_COMM_nsprintf_ENUM, LNAS_FUNCTION_LABEL2);
        *pilOutLen = 0;
        return;
    }

    if ( VOS_NULL_PTR == String )
    {
        NAS_COMM_LOG_ERR("NAS_COMM_nsprintf, String is NULL pointer!");
        TLPS_PRINT2LAYER_ERROR(NAS_COMM_nsprintf_ENUM, LNAS_FUNCTION_LABEL3);
        *pilOutLen = 0;
        return;
    }

    if ((NAS_COMM_PRINT_BUFF_LEN - 2) >= usOffset )
    {
        /* 需要预留一个字符作为结束符 */
        *pilOutLen = VOS_nsprintf(pcBuff + usOffset,
                                  (NAS_COMM_PRINT_BUFF_LEN - 1) - usOffset,
                                  String);
        if( (0 == *pilOutLen) || (PS_NEG_ONE == *pilOutLen) )
        {
            NAS_COMM_LOG1_WARN("NAS_COMM_nsprintf, *pilOutLen=", *pilOutLen);
            TLPS_PRINT2LAYER_WARNING1(NAS_COMM_nsprintf_ENUM, LNAS_FUNCTION_LABEL4,
                                *pilOutLen);
            *pilOutLen = 0;
            return;
        }
    }
    else
    {

        NAS_COMM_LOG_ERR("NAS_COMM_nsprintf, Print too long!");
        TLPS_PRINT2LAYER_ERROR(NAS_COMM_nsprintf_ENUM, LNAS_FUNCTION_LABEL5);
        *pilOutLen = 0;
        return;
    }
}
VOS_VOID    NAS_COMM_nsprintf_3(
                    VOS_CHAR                                *pcBuff,
                    VOS_UINT16                              usOffset,
                    const VOS_CHAR                          *String,
                    VOS_UINT32                               para1,
                    VOS_UINT32                               para2,
                    VOS_UINT32                               para3,
                    VOS_INT32                               *pilOutLen )
{
    /* delay begin */
    PS_LOG_RETURN();
    /* delay end */

    /* 入参检查 */
    if ( VOS_NULL_PTR == pilOutLen )
    {
        NAS_COMM_LOG_ERR("NAS_COMM_nsprintf_3, pilOutLen is NULL pointer!");
        return;
    }

    if ( VOS_NULL_PTR == pcBuff )
    {
        NAS_COMM_LOG_ERR("NAS_COMM_nsprintf_3, pcBuff is NULL pointer!");
        *pilOutLen = 0;
        return;
    }

    if ( VOS_NULL_PTR == String )
    {
        NAS_COMM_LOG_ERR("NAS_COMM_nsprintf_3, String is NULL pointer!");
        *pilOutLen = 0;
        return;
    }

    if ((NAS_COMM_PRINT_BUFF_LEN - 2)>= usOffset )
    {
        /* 需要预留一个字符作为结束符 */
        *pilOutLen = VOS_nsprintf(pcBuff + usOffset,
                                  (NAS_COMM_PRINT_BUFF_LEN - 1) - usOffset,
                                  String,
                                  para1,
                                  para2,
                                  para3);
        if( (0 == *pilOutLen) || (PS_NEG_ONE == *pilOutLen) )
        {
            NAS_COMM_LOG1_WARN("NAS_COMM_nsprintf_3,*pilOutLen=", *pilOutLen);
            *pilOutLen = 0;
            return;
        }
    }
    else
    {
        NAS_COMM_LOG_ERR("NAS_COMM_nsprintf_3, Print too long!");

        *pilOutLen = 0;
        return;
    }
}
/*****************************************************************************
 函 数 名  : Log_BuildId
 功能描述  : 构建打印点类型的打印输出信息
 输入参数  : VOS_UINT32  ulLogId
                         VOS_UINT8  ucParaCnt
                         VOS_INT32 *plPara
                         VOS_CHAR          *pcDst
                         VOS_UINT32 *pulLen
 输出参数  : 无
 返 回 值  : VOS_VOID
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2007年4月24日
        作    者   : 李霄 46160
        修改内容   : 新生成函数

*****************************************************************************/
VOS_VOID Log_BuildId(VOS_UINT32  ulLogId, VOS_UINT8   ucParaCnt, VOS_INT32 *plPara,
                        VOS_CHAR   *pcDst,   VOS_UINT32 *pulLen)
{
    VOS_INT32             lTmpLen;
    VOS_INT32             lSpareLen;
    VOS_INT32             lOccupyLen;
    VOS_UINT8             i;

    *pulLen = 0;

    if (ucParaCnt > LOG_MAX_PARA_CNT)
    {
        ucParaCnt = LOG_MAX_PARA_CNT;
    }

    lTmpLen    = VOS_nsprintf( pcDst, LOG_MAX_COLUMN_VAL, "%d, ", ulLogId);
    LOG_AFFIRM (0 <= lTmpLen)

    lOccupyLen = lTmpLen;
    LOG_AFFIRM(LOG_MAX_COLUMN_VAL >= lOccupyLen)
    lSpareLen  = LOG_MAX_COLUMN_VAL - lOccupyLen;

    lTmpLen    = VOS_nsprintf( pcDst + lOccupyLen, (VOS_UINT32)lSpareLen, "%u, ", LOG_GetTick());
    LOG_AFFIRM(0 <= lTmpLen)

    lOccupyLen += lTmpLen;
    LOG_AFFIRM(LOG_MAX_COLUMN_VAL >= lOccupyLen)
    lSpareLen  = LOG_MAX_COLUMN_VAL - lOccupyLen;

    for (i = 0; i < ucParaCnt; i ++)
    {
        lTmpLen = VOS_nsprintf( pcDst + lOccupyLen, (VOS_UINT32)lSpareLen, "%d, ", *plPara);
        LOG_AFFIRM(0 <= lTmpLen)

        lOccupyLen += lTmpLen;
        LOG_AFFIRM(LOG_MAX_COLUMN_VAL >= lOccupyLen)
        lSpareLen  = LOG_MAX_COLUMN_VAL - lOccupyLen;
        plPara++;
    }

    *pulLen = (VOS_UINT32)(LOG_MAX_COLUMN_VAL - lSpareLen);

    return;
}
Exemple #4
0
/*****************************************************************************
 Function   : CreateFidsTask
 Description: create tasks of all FIDs
 Input      : void
            : void
 Return     : VOS_OK on success or errno on failure
 *****************************************************************************/
VOS_UINT32 CreateFidsTask(VOS_VOID)
{
    VOS_UINT32              i;
    int                     ubyIndex;
    VOS_UINT32              ulReturnValue;
    VOS_UINT32              Argument[VOS_TARG_NUM] = {0};
    VOS_CHAR                acSelfTaskName[VOS_MAX_LENGTH_TASK_NAME];

    Argument[3] = VOS_NULL_DWORD;

    for(i=VOS_FID_DOPRAEND; i<VOS_FID_BUTT; i++)
    {
        vos_FidCtrlBlk[i].TaskArgument[0] = vos_FidCtrlBlk[i].Qid;
        vos_FidCtrlBlk[i].TaskArgument[1] = i;
        vos_FidCtrlBlk[i].TaskArgument[3] = VOS_NULL_DWORD;

        ulReturnValue   = VOS_CreateTask( vos_FidCtrlBlk[i].Name
                                        , &(vos_FidCtrlBlk[i].Tid)
                                        , vos_FidCtrlBlk[i].TaskFunction
                                        , vos_FidCtrlBlk[i].Priority
                                        , vos_FidCtrlBlk[i].StackSize
                                        , vos_FidCtrlBlk[i].TaskArgument);
        if( ulReturnValue != VOS_OK )
        {
            Print("# VOS_CreateTask Fail in CreateFidsTask.\r\n");
            return( ulReturnValue );
        }

        VOS_RecordFIDTIDInfo( i, vos_FidCtrlBlk[i].Tid );

        for( ubyIndex = 0; ubyIndex < VOS_MAX_SELF_TASK_OF_FID; ubyIndex++ )
        {
            if( vos_FidCtrlBlk[i].SelfProcTaskFunc[ubyIndex] != VOS_NULL_PTR )
            {
                VOS_nsprintf(acSelfTaskName, VOS_MAX_LENGTH_TASK_NAME-1, "F%d_I%d",i,ubyIndex);

                ulReturnValue   = VOS_CreateTask( acSelfTaskName,
                            &(vos_FidCtrlBlk[i].SelfProcTaskTid[ubyIndex]),
                            vos_FidCtrlBlk[i].SelfProcTaskFunc[ubyIndex],
                            vos_FidCtrlBlk[i].SelfProcTaskPriority[ubyIndex],
                            vos_FidCtrlBlk[i].SelfProcTaskStack[ubyIndex],
                            Argument);
                if( ulReturnValue != VOS_OK )
                {
                    Print("# VOS_CreateSelfTask Fail in CreateFidsTask.\r\n");
                    return( ulReturnValue );
                }
            }
        }
    }

    return( VOS_OK );
}
/*****************************************************************************
 函 数 名  : Log_BuildStr
 功能描述  : 构建字符串类型的打印输出信息
 输入参数  : VOS_CHAR          *pcFileName
                         VOS_UINT32  ulLineNum
                         LOG_LEVEL_EN   enPrintLev
                         VOS_CHAR          *pcOriStr
                         VOS_UINT8  ucParaCnt
                         VOS_INT32          *plPara
                         VOS_CHAR          *pcDstStr
                         VOS_UINT32 *pulLen
 输出参数  : 无
 返 回 值  : VOS_VOID
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2007年4月24日
        作    者   : 李霄 46160
        修改内容   : 新生成函数

*****************************************************************************/
VOS_VOID Log_BuildStr(VOS_CHAR *pcFileName,  VOS_UINT32  ulLineNum,
                      LOG_LEVEL_EN enPrintLev,  VOS_CHAR   *pcOriStr,
                      VOS_UINT8    ucParaCnt,   VOS_INT32  *plPara,
                      VOS_CHAR    *pcDstStr,    VOS_UINT32 *pulLen)
{
    VOS_INT32            lTmpLen;
    VOS_INT32            lStrLen;
    VOS_INT32            lOffset;
    VOS_INT32            lParamLen;
    VOS_INT32            lSpareLen;
    VOS_INT32            lOccupyLen;
    VOS_UINT8            i;

    *pulLen = 0;

    switch ( enPrintLev )
    {
        case LOG_LEVEL_ERROR :
            lTmpLen    = VOS_nsprintf( pcDstStr, LOG_MAX_COLUMN_VAL, "\nERROR,F: ");
            break;
        case LOG_LEVEL_WARNING :
            lTmpLen    = VOS_nsprintf( pcDstStr, LOG_MAX_COLUMN_VAL, "\nWARNING,F: ");
            break;
        case LOG_LEVEL_NORMAL :
            lTmpLen    = VOS_nsprintf( pcDstStr, LOG_MAX_COLUMN_VAL, "\nNORMAL,F: ");
            break;
        case LOG_LEVEL_INFO :
            lTmpLen    = VOS_nsprintf( pcDstStr, LOG_MAX_COLUMN_VAL, "\nINFO,F: ");
            break;
        default:
            lTmpLen    = VOS_nsprintf( pcDstStr, LOG_MAX_COLUMN_VAL, "\nF: ");
            break;
    }

    lOccupyLen = lTmpLen;
    LOG_AFFIRM(LOG_MAX_COLUMN_VAL >= lOccupyLen)

    lSpareLen  = LOG_MAX_COLUMN_VAL - lOccupyLen;
    LOG_AFFIRM(lSpareLen >= LOG_MAX_FILENAME_LEN)

        /* 将路径去除,只保留文件名称 */
    lOffset = Log_GetPathOffset(pcFileName);
    lTmpLen = (VOS_INT32)strlen(pcFileName + lOffset);
    if (lTmpLen < LOG_MAX_FILENAME_LEN)
    {
        memcpy(pcDstStr + lOccupyLen, pcFileName + lOffset, (VOS_UINT32)lTmpLen);
        lOccupyLen += lTmpLen;
    }
    else
    {
        memcpy(pcDstStr + lOccupyLen, pcFileName + lOffset, LOG_MAX_FILENAME_LEN);
        lOccupyLen += LOG_MAX_FILENAME_LEN;
    }

    lSpareLen   = LOG_MAX_COLUMN_VAL - lOccupyLen;

    lTmpLen = VOS_nsprintf( pcDstStr + lOccupyLen, (VOS_UINT32)lSpareLen,
                           ", Line: %u, Tick: %u, ", ulLineNum, LOG_GetTick());

    lOccupyLen += lTmpLen;
    lSpareLen   = LOG_MAX_COLUMN_VAL - lOccupyLen;

        /*=======================*/ /* 计算输出参数需要的长度 */
    lParamLen = ucParaCnt * LOG_MAX_PARA_LEN;
    lStrLen   = lSpareLen - lParamLen;
    LOG_AFFIRM(0 <= lStrLen)

        /*=======================*/ /* 加入字符串信息 */
    lTmpLen = (VOS_INT32)strlen(pcOriStr);
    if (lTmpLen <= lStrLen)
    {
        memcpy(pcDstStr + lOccupyLen, pcOriStr, (VOS_UINT32)lTmpLen);
        lOccupyLen += lTmpLen;
    }
    else
    {
        memcpy(pcDstStr + lOccupyLen, pcOriStr, (VOS_UINT32)lStrLen);
        lOccupyLen += lStrLen;
    }

    if (0 == ucParaCnt)
    {
        if (LOG_MAX_COLUMN_VAL == lOccupyLen)
        {
            *(pcDstStr + (lOccupyLen - 1)) = '\0';
        }
        else
        {
            *(pcDstStr + lOccupyLen) = '\0';
            lOccupyLen = lOccupyLen + 1;
        }

        LOG_AFFIRM(LOG_MAX_COLUMN_VAL >= lOccupyLen)
        *pulLen = (VOS_UINT32)lOccupyLen;
        return;
    }

    *(pcDstStr + lOccupyLen) = ':';
    lOccupyLen = lOccupyLen + 1;
    LOG_AFFIRM(LOG_MAX_COLUMN_VAL > lOccupyLen)

    lSpareLen = LOG_MAX_COLUMN_VAL - lOccupyLen;

        /*=======================*/ /* 加入参数 */
    for (i = 0; i < ucParaCnt; i++)
    {
        lTmpLen = VOS_nsprintf( pcDstStr + lOccupyLen, (VOS_UINT32)lSpareLen, " %d.", *(plPara + i));
        lOccupyLen += lTmpLen;
        LOG_AFFIRM(LOG_MAX_COLUMN_VAL >= lOccupyLen)

        lSpareLen  = LOG_MAX_COLUMN_VAL - lOccupyLen;
    }

    *pulLen = (VOS_UINT32)(LOG_MAX_COLUMN_VAL - lSpareLen);
    return;
}