Exemplo n.º 1
0
/*****************************************************************************
 函 数 名  : Log_BufInput
 功能描述  : 将打印信息写入缓存
 输入参数  : VOS_CHAR *pcLogStr
                         VOS_UINT32 ulLen
 输出参数  : 无
 返 回 值  : VOS_VOID
 调用函数  :
 被调函数  :

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

*****************************************************************************/
VOS_INT32 Log_BufInput(VOS_CHAR *pcLogStr, VOS_UINT32 ulLen)
{
    VOS_INT32     sRet;

#if (VOS_OS_VER == VOS_LINUX)
    if( in_interrupt() )
    {
        return VOS_ERR;
    }
#endif

    if (0 < ulLen)
    {
        if(VOS_OK != VOS_SmP(g_logBuffSem, 0))
        {
            return VOS_ERR;
        }

        if ((ulLen + sizeof(VOS_UINT32)) > (VOS_UINT32)OM_RingBufferFreeBytes(g_stLogEnt.rngOmRbufId))
        {
            VOS_SmV(g_logBuffSem);
            return VOS_ERR;
        }

        sRet = OM_RingBufferPut(g_stLogEnt.rngOmRbufId, (VOS_CHAR*)(&ulLen), sizeof(VOS_UINT32));
        if ((VOS_INT32)sizeof(VOS_UINT32) == sRet)
        {
            sRet = OM_RingBufferPut(g_stLogEnt.rngOmRbufId, pcLogStr, (VOS_INT32)ulLen);
            VOS_SmV(g_logBuffSem);

            if (ulLen == (VOS_UINT32)sRet)
            {
                VOS_SmV(g_stLogEnt.semOmPrint);
                return VOS_OK ;
            }
            else
            {
                vos_printf("\nLog, Error, rngBufPut Data not OK");
            }
        }
        else
        {
            VOS_SmV(g_logBuffSem);
            vos_printf("\nLog, Error, rngBufPut DataLen not OK");
        }
    }
    return VOS_ERR;
}
Exemplo n.º 2
0
/*****************************************************************************
 函 数 名  : Log_BufInput
 功能描述  : 将打印信息写入缓存
 输入参数  : char *pcLogStr
                         unsigned long ulLen
 输出参数  : 无
 返 回 值  : void
 调用函数  :
 被调函数  :

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

*****************************************************************************/
int Log_BufInput(char *pcLogStr, unsigned long ulLen)
{
    int     sRet;

#if (VOS_OS_VER == VOS_LINUX)
    if( in_interrupt() )
    {
        return VOS_ERR;
    }
#endif

    if (0 < ulLen)
    {
        if(VOS_OK != VOS_SmP(g_logBuffSem, 0))
        {
            return VOS_ERR;
        }

        if ((ulLen + sizeof(unsigned long)) > (unsigned long)OM_RingBufferFreeBytes(g_stLogEnt.rngOmRbufId))
        {
            VOS_SmV(g_logBuffSem);
            return VOS_ERR;
        }

        sRet = OM_RingBufferPut(g_stLogEnt.rngOmRbufId, (char*)(&ulLen), sizeof(unsigned long));
        if ((int)sizeof(unsigned long) == sRet)
        {
            sRet = OM_RingBufferPut(g_stLogEnt.rngOmRbufId, pcLogStr, (long)ulLen);
            VOS_SmV(g_logBuffSem);

            if (ulLen == (unsigned long)sRet)
            {
                VOS_SmV(g_stLogEnt.semOmPrint);
                return VOS_OK ;
            }
            else
            {
                vos_printf("\nLog, Error, rngBufPut Data not OK");
            }
        }
        else
        {
            VOS_SmV(g_logBuffSem);
            vos_printf("\nLog, Error, rngBufPut DataLen not OK");
        }
    }
    return VOS_ERR;
}
VOS_UINT32 SCM_SoftDecodeDataRcv(VOS_UINT8 *pucBuffer, VOS_UINT32 ulLen)
{
    VOS_INT32                           sRet;

    diag_PTR(EN_DIAG_PTR_SCM_SOFTDECODE);

    if (ulLen > (VOS_UINT32)OM_RingBufferFreeBytes(g_stSCMDataRcvTaskCtrlInfo.rngOmRbufId))
    {
        g_stScmSoftDecodeInfo.stRbInfo.ulBufferNotEnough++;
        diag_PTR(EN_DIAG_PTR_SCM_ERR1);

        return VOS_ERR;
    }

    sRet = OM_RingBufferPut(g_stSCMDataRcvTaskCtrlInfo.rngOmRbufId,
                            (VOS_CHAR *)pucBuffer,
                            (VOS_INT)ulLen);

    if (ulLen == (VOS_UINT32)sRet)
    {
        if (VOS_OK == VOS_SmV(g_stSCMDataRcvTaskCtrlInfo.SmID))
        {
            g_stScmSoftDecodeInfo.stPutInfo.ulDataLen += sRet;
            g_stScmSoftDecodeInfo.stPutInfo.ulNum++;

            return VOS_OK;
        }
    }

    g_stScmSoftDecodeInfo.stRbInfo.ulRingBufferPutErr++;
    diag_PTR(EN_DIAG_PTR_SCM_ERR2);

    return VOS_ERR;
}
Exemplo n.º 4
0
VOS_INT NFExt_RingBufferPut( OM_RING_ID rngId, VOS_CHAR *buffer, VOS_INT nbytes )
{
    VOS_UINT32  ulFlags;
    VOS_INT     iRst;

    iRst = 0;

    spin_lock_irqsave(&g_stExEntity.stLockTxTask, ulFlags);
    if ((VOS_UINT32)OM_RingBufferFreeBytes(g_stExEntity.pRingBufferId) >= sizeof(NF_EXT_DATA_RING_BUF_STRU) )
    {
        iRst = OM_RingBufferPut(rngId, buffer, nbytes);
    }
    spin_unlock_irqrestore(&g_stExEntity.stLockTxTask, ulFlags);

    return iRst;
}
Exemplo n.º 5
0
VOS_UINT32 NAS_CC_PutErrLogRingBuf(
    VOS_CHAR                           *pbuffer,
    VOS_UINT32                          ulbytes
)
{
    VOS_UINT32                          ulFreeSize;
    VOS_UINT32                          ulCount;
    OM_RING_ID                          pTafRingBuffer;

    pTafRingBuffer = NAS_CC_GetErrLogRingBufAddr();
    if (VOS_NULL_PTR == pTafRingBuffer)
    {
        return 0;
    }

    /* 如果写入比RING BUFFER还大则不写入 */
    if (ulbytes > TAF_SDC_RING_BUFFER_SIZE)
    {
        return 0;
    }

    /* 获取RING BUFFER剩余空间大小 */
    ulFreeSize = (VOS_UINT32)OM_RingBufferFreeBytes(pTafRingBuffer);

    ulCount = NAS_CC_GetErrlogOverflowCnt();

    /* 如果剩余空间不足写入的大小,则清空RING BUFFER */
    if (ulFreeSize < ulbytes)
    {
        ulCount++;
        NAS_CC_SetErrlogOverflowCnt(ulCount);

        OM_RingBufferFlush(pTafRingBuffer);
    }

    /* 写入RING BUFFER */
    return (VOS_UINT32)OM_RingBufferPut(pTafRingBuffer, pbuffer, (VOS_INT)ulbytes);
}
VOS_VOID TTF_MNTN_ErrlogBufPut(VOS_UINT32 ulPid,  VOS_CHAR *pBuffer, VOS_UINT32 ulBytes)
{
    MODEM_ID_ENUM_UINT16    enModemId;
    VOS_UINT32              ulRslt;
    VOS_UINT32              ulBuffFreeSize;
    OM_RING_ID              pRingId;

    if (VOS_NULL_PTR == pBuffer)
    {
        TTF_LOG(ulPid, 0, PS_PRINT_WARNING,
            "TTF_MNTN_ErrlogBufPut: pBuffer NULL PTR");

        return;
    }

    enModemId = VOS_GetModemIDFromPid(ulPid);

    if (enModemId >= MODEM_ID_BUTT)
    {
        TTF_LOG1(ulPid, 0, PS_PRINT_ERROR,
            "TTF_MNTN_ErrlogBufPut: Invalid ModemId ", enModemId);

        return;
    }

    pRingId   = TTF_ERR_LOG_ENT_RINGID_GET(enModemId);

    if (VOS_NULL_PTR == pRingId)
    {
        TTF_LOG(ulPid, 0, PS_PRINT_WARNING,
            "TTF_MNTN_ErrlogBufPut: pRingId NULL PTR");

        return;
    }

    ulRslt = VOS_SmP(TTF_ERR_LOG_ENT_SEM_GET(enModemId), TTF_ERR_SEM_TIMEOUT_LEN);

    if(VOS_OK != ulRslt)
    {
        TTF_LOG2(ulPid, 0, PS_PRINT_WARNING,
            "TTF_MNTN_ErrlogBufPut: Create TTF_ERR_LOG_ENT_SEM<1>, ulRslt<2> fail!", enModemId, (VOS_INT32)ulRslt);

        return;
    }

    ulBuffFreeSize  =(VOS_UINT32) OM_RingBufferFreeBytes(pRingId);

    /* Buffer不足,溢出处理 */
    if (ulBuffFreeSize < (ulBytes + TTF_ERR_LOG_ENT_GET_BUF_RSV_LEN(enModemId)))
    {
        TTF_ERR_LOG_ENT_UPDT_BUFFER_OVER_CNT(enModemId, 1);
        OM_RingBufferFlush(pRingId);
    }

    ulRslt = (VOS_UINT32)OM_RingBufferPut(pRingId, pBuffer, (VOS_INT)ulBytes);

    if (ulBytes != ulRslt)
    {
        OM_RingBufferFlush(pRingId);
    }

    VOS_SmV(TTF_ERR_LOG_ENT_SEM_GET(enModemId));

    return;
}
VOS_UINT32 OM_PrintfDataPut(VOS_CHAR *pucDataBuf, VOS_UINT32 ulDataLen)
{
    VOS_UINT32          ulFreeSize;
    VOS_UINT32          ulRet;
    VOS_UINT32          ulReturn = OM_OK;
    VOS_UINT32          ulBufAlignLen;
    VOS_CHAR            *pcWarning;

    /* OM Printf未初始化时,将打印输出到SHELL,打印时跳过模块ID四个字节 */
    if(VOS_FALSE == g_bIsPrintfInit)
    {
#if (VOS_OS_VER == VOS_LINUX)
        printk( "%s", pucDataBuf + OM_PRINTF_OFFSET);
#else
        printf( "%s", pucDataBuf + OM_PRINTF_OFFSET);
#endif
        return OM_OK;
    }

    g_stOmPrintfErrRecord.ulOmPrintfRecvLen += ulDataLen;
    g_stOmPrintfErrRecord.usOmPrintfRecvCount++;

    /* 获取buffer保护的信号量 */
    if(VOS_OK != VOS_SmP(g_ulOmPrintfBuffSem, 0))
    {
        g_ulPrintfErrType = OM_ERR_FAILTAKESEM;
        return OM_ERR_FAILTAKESEM;
    }

    /* 查看OM Printf ringbuffer 剩余空间 */
    ulFreeSize = (VOS_UINT32)OM_RingBufferFreeBytes(g_pstOmPrintfBufId);

    ulBufAlignLen = (ulDataLen+OM_ALIGNMENT)&(~OM_ALIGNMENT);

    /* 数据长度加四字节长度字段 */
    if ((ulBufAlignLen + sizeof(VOS_UINT32)) > ulFreeSize)
    {
       g_stOmPrintfErrRecord.ulOmPrintfNoPrintfBufferLostLen
                          += ((OM_PRINTF_BUFFER_SIZE - ulFreeSize) + ulDataLen);
       g_stOmPrintfErrRecord.usOmPrintfNoPrintfBufferLostCount++;
       g_ulPrintfErrType = OM_ERR_NOBUF;

       /* OM Printf缓冲区满时,清空ringbuffer,提示用户有数据丢失 */
       OM_RingBufferFlush(g_pstOmPrintfBufId);

       pcWarning = "OM_Printf:Warning!Some data lost!\n";

       *((VOS_UINT32*)pucDataBuf)     = WUEPS_PID_OM;
       *(((VOS_UINT32*)pucDataBuf)+1) = LOG_LEVEL_INFO;

       /* 跳过用于存放模块ID的前四字节 */
       VOS_StrCpy(pucDataBuf + OM_PRINTF_OFFSET, pcWarning );
       ulDataLen = VOS_StrLen(pcWarning)+OM_PRINTF_OFFSET;
       ulBufAlignLen = (ulDataLen+OM_ALIGNMENT)&(~OM_ALIGNMENT);

       ulReturn = OM_ERR_NOBUF;
    }

    /* 把长度字段放入OM Printf ringbuffer*/
    ulRet = (VOS_UINT32)OM_RingBufferPut(g_pstOmPrintfBufId, (VOS_CHAR *)&ulDataLen,
                                         (VOS_INT)sizeof(VOS_UINT32));
    if(sizeof(VOS_UINT32) != ulRet)
    {
        OM_RingBufferFlush(g_pstOmPrintfBufId);
        VOS_SmV(g_ulOmPrintfBuffSem);
        g_ulPrintfErrType = OM_ERR_FAILPUTDATA;
        return OM_ERR_FAILPUTDATA;
    }

    /* 把数据放入OM Printf ringbuffer*/
    ulRet = (VOS_UINT32)OM_RingBufferPut(g_pstOmPrintfBufId, pucDataBuf,(VOS_INT)ulBufAlignLen);
    if(ulBufAlignLen != ulRet)
    {
        OM_RingBufferFlush(g_pstOmPrintfBufId);
        VOS_SmV(g_ulOmPrintfBuffSem);
        g_ulPrintfErrType = OM_ERR_FAILPUTDATA;
        return OM_ERR_FAILPUTDATA;
    }

    VOS_SmV(g_ulOmPrintfBuffSem);

    /* 释放自处理任务信号量 */
    VOS_SmV(g_ulPrintfTaskSem);

    return ulReturn;

}