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; }
/***************************************************************************** 函 数 名 : LogShow 功能描述 : 显示日志上报当前状态 输入参数 : VOID 输出参数 : 无 返 回 值 : VOID 修改历史 : 1.日 期 : 2008年9月11日 作 者 : 甘兰 47350 修改内容 : 新生成函数 *****************************************************************************/ VOS_VOID LogAcpuShow(VOS_VOID) { VOS_UINT32 ulBufferLen; if (LOG_TRUE == g_stLogEnt.ulPrintSwitch) { vos_printf("The Current Log State: ON\n"); } else { vos_printf("The Current Log State: OFF\n"); } #ifdef __LOG_BBIT__ vos_printf("The Data Type: STRING\n"); #else vos_printf("The Data Type: DOT\n"); #endif if (OM_OUTPUT_SHELL == g_stLogEnt.ulLogOutput) { vos_printf("The Output Type: COM\n"); } else if (OM_OUTPUT_FS == g_stLogEnt.ulLogOutput) { vos_printf("The Output Type: File System\n"); } else if (OM_OUTPUT_SDT == g_stLogEnt.ulLogOutput) { vos_printf("The Output Type: SDT\n"); } else { /*Make pclint happy*/ } if (VOS_TRUE == g_astLogFileInfo[LOG_FROM_PS_LOG].bIsWritten) { vos_printf("The Log File: OK\n"); } else { vos_printf("The Log File: ERROR\n"); } ulBufferLen = (VOS_UINT32)OM_RingBufferFreeBytes(g_stLogEnt.rngOmRbufId); vos_printf("Remainder Len of Log buffer:%ld\n", ulBufferLen); }
/***************************************************************************** 函 数 名 : 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; }
/***************************************************************************** 函 数 名 : 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_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; }
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; }