/***************************************************************************** 函 数 名 : FC_ACORE_CResetCallback 功能描述 : FcACore需要注册到底软C核复位接口中的回调函数 输入参数 : DRV_RESET_CALLCBFUN_MOMENT enParam 指示时复位处理前还是复位成功后 int userdata 用户自定义数据 输出参数 : 无 返 回 值 : VOS_OK/VOS_ERR 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2013年4月22日 作 者 : caikai 修改内容 : 新生成函数 *****************************************************************************/ VOS_INT FC_ACORE_CResetCallback(DRV_RESET_CALLCBFUN_MOMENT enParam, VOS_INT userdata) { VOS_UINT32 ulResult; if ( DRV_RESET_CALLCBFUN_RESET_BEFORE == enParam ) /* 复位处理时调用 */ { FC_ACORE_CResetSendNotify(ID_FC_ACORE_CRESET_START_IND); ulResult = VOS_SmP(g_ulFcACoreCResetDoneSem, FC_ACORE_CRESET_TIMEOUT_LEN); if (VOS_OK != ulResult) { FC_LOG1(PS_PRINT_ERROR, "FC_ACORE_CRESET_Callback, wait g_ulFcACoreResetDoneSem timeout! ulResult = %d\r\n", (VOS_INT32)ulResult); return VOS_ERR; } } else if ( DRV_RESET_CALLCBFUN_RESET_AFTER == enParam ) /* 复位成功后调用 */ { FC_ACORE_CResetSendNotify(ID_FC_ACORE_CRESET_END_IND); } else { FC_LOG(PS_PRINT_ERROR,"FC_ACORE_CResetCallback, enParam invalid !\n"); return VOS_ERR; } return VOS_OK; }
VOS_VOID PPM_PortPseudoSyncGetSmp(OM_PROT_HANDLE_ENUM_UINT32 enHandle) { #if 0 if (OM_USB_IND_PORT_HANDLE == enHandle) { if (VOS_OK != VOS_SmP(g_stUsbIndPseudoSync.ulPseudoSyncSemId, 0)) { g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBIndPseudoSyncFailNum++; g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBIndPseudoSyncFailSlice = OM_GetSlice(); } } else if (OM_USB_CFG_PORT_HANDLE == enHandle) { if (VOS_OK != VOS_SmP(g_stUsbCfgPseudoSync.ulPseudoSyncSemId, 0)) { g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBCnfPseudoSyncFailNum++; g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBCnfPseudoSyncFailSlice = OM_GetSlice(); } } else { ; } #endif return; }
VOS_VOID diag_PortAddToDataBuf(DIAG_PORT_PHY_BEAR_ENUM enPort, VOS_UINT8 * data, VOS_UINT32 dataSize) { DIAG_PORT_DATA_BUF_STRU * pNewNode = NULL; /*申请一个节点大小*/ pNewNode = (DIAG_PORT_DATA_BUF_STRU *)VOS_MemAlloc(MSP_PID_DIAG_APP_AGENT, DYNAMIC_MEM_PT, sizeof(DIAG_PORT_DATA_BUF_STRU)); if (NULL == pNewNode) { diag_printf("%s: alloc mem for new node fail\n", __FUNCTION__); return; } /*申请数据空间*/ pNewNode->dataBuf = (VOS_UINT8 *)VOS_MemAlloc(MSP_PID_DIAG_APP_AGENT, DYNAMIC_MEM_PT, dataSize); if (NULL == pNewNode->dataBuf) { diag_printf("%s: alloc mem for data buf fail\n", __FUNCTION__); return; } pNewNode->port = enPort; pNewNode->dataLen = dataSize; VOS_MemCpy(pNewNode->dataBuf, data, dataSize); (VOS_VOID)VOS_SmP(g_diagPortSem,0); /* 插入节点到链表尾部 */ blist_add_tail(&pNewNode->dataList, &g_diagPortDataBuf.dataList); (VOS_VOID)VOS_SmV(g_diagPortSem); }
int RingBuffer_Put(RingBuffer *rb, void *element) { int end, retval; #ifdef RING_BUFFER_THREAD_SAFE VOS_SmP(rb->sem, 50); #endif end = (rb->start + rb->count) % rb->size; memcpy(rb->buffer + end * rb->element_size, element, rb->element_size); if (RingBuffer_IsFull(rb)) { rb->start = (rb->start + 1) % rb->size; /* full, overwrite */ retval = RING_BUFFER_OVERWRITE; } else { ++rb->count; retval = RING_BUFFER_NORMAL; } #ifdef RING_BUFFER_THREAD_SAFE VOS_SmV(rb->sem); #endif return retval; }
VOS_VOID IMM_RbRxFreeMemTask(VOS_VOID) { /* 解决UT死循环问题 */ #ifdef __UT_CENTER__ VOS_UINT32 ulLoop; #endif IMM_RbRxFreeMemTaskInit(); #ifndef __UT_CENTER__ for ( ; ; ) #else for (ulLoop = 0; ulLoop < 1; ulLoop++) #endif { /* semphore take g_stImcLinuxManageEntity.ulRatRxRelSkBuffSem */ if(VOS_OK != VOS_SmP(g_ulImmMemRbFreeSem, 0)) { IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_RB, IMM_RbRxFreeMemTask : ERROR : VOS_SmP Failed!\n"); continue; } /* 释放 */ IMM_RbMemFreeFromQue(); #if ( FEATURE_ON == FEATURE_IMM_MEM_DEBUG ) IMM_MntnRptPoolLeakInfo(); #endif } }/* IMM_RbRxFreeMemTask */
/***************************************************************************** Prototype : PPM_SockATComSend Description : 提供给上层AT发送数据的接口. Input : pucVirAddr: 数据虚地址 pucPhyAddr: 数据实地址 ulLength: 数据长度 Output : void Return Value : VOS_ERR - 发送失败 VOS_OK - 发送成功 History : --- Date : 2014-05-29 Author : h59254 Modification: Created function *****************************************************************************/ VOS_INT32 PPM_SockATComSend(VOS_UINT8* pucVirAddr, VOS_UINT8 *pucPhyAddr, VOS_UINT16 uslength) { SOCKET socket; VOS_INT nSndNum; if (VOS_FALSE == g_ulSockATInitState) { return VOS_ERR; } (VOS_VOID)VOS_SmP(g_astSockInfo[SOCKET_AT].SmClose, 0); socket = g_astSockInfo[SOCKET_AT].socket; if (SOCK_NULL == socket) { VOS_SmV(g_astSockInfo[SOCKET_AT].SmClose); return VOS_ERR; } /* 调用send将数据通过socket发送出去,走TCP */ nSndNum = send(socket, pucVirAddr, uslength, 0); VOS_SmV(g_astSockInfo[SOCKET_AT].SmClose); if (nSndNum != uslength) { return VOS_ERR; } return VOS_OK; }
L4A_RX_INFO_STRU* l4a_GetExeCmdNode(VOS_UINT32 ulMsgId,VOS_UINT32 ulFlag) { LIST_S* pHeadNode = NULL; L4A_RX_INFO_STRU* pTempNode = NULL; LIST_S* me = NULL; /* 获取链表头 */ pHeadNode= l4a_GetNodeHead(); /*添加信号量保护*/ /* coverity[check_return] */ VOS_SmP(g_ulL4aNodeSem,0); /* 在链表中查找每个子命令结点*/ blist_for_each(me, pHeadNode) { pTempNode = blist_entry(me, L4A_RX_INFO_STRU, HiL4aList); L4A_INFO_LOG("%s, msgid req 0x%x, cnf 0x%x.\n",__FUNCTION__, pTempNode->ulReqMsgId, pTempNode->ulCnfMsgId); /* 找到需要的节点*/ if (((L4A_REQ_FLAG == ulFlag)&&(ulMsgId == pTempNode->ulReqMsgId))|| \ ((L4A_CNF_FLAG == ulFlag)&&(ulMsgId == pTempNode->ulCnfMsgId))) { VOS_SmV(g_ulL4aNodeSem); return pTempNode; } }
/***************************************************************************** Prototype : PPM_SockOMIndComSend Description : 提供给上层OM 主动上报数据发送的接口. Input : pucVirAddr: 数据虚地址 pucPhyAddr: 数据实地址 ulLength: 数据长度 Output : void Return Value : VOS_ERR - 发送失败 VOS_OK - 发送成功 History : --- Date : 2014-05-29 Author : h59254 Modification: Created function *****************************************************************************/ VOS_INT32 PPM_SockOMIndComSend(VOS_UINT8 *pucVirAddr, VOS_UINT8 *pucPhyAddr, VOS_UINT16 uslength) { SOCKET socket; VOS_INT nSndNum; struct sockaddr_in stToAddr; (VOS_VOID)VOS_SmP(g_astSockInfo[SOCKET_OM_IND].SmClose, 0); socket = g_astSockInfo[SOCKET_OM_IND].socket; if (SOCK_NULL == socket) { VOS_SmV(g_astSockInfo[SOCKET_OM_IND].SmClose); return VOS_ERR; } VOS_MemSet(&stToAddr, 0, sizeof(stToAddr)); stToAddr.sin_family = AF_INET; stToAddr.sin_addr.s_addr = inet_addr(SOCK_WIFI_DEFAULT_ADDR); /* 目的端口 */ stToAddr.sin_port = htons(SOCK_OM_IND_DST_PORT_NUM); /* 调用send将数据通过socket发送出去,走UDP */ nSndNum = sendto(socket, pucVirAddr, uslength, 0, &stToAddr, sizeof(stToAddr)); VOS_SmV(g_astSockInfo[SOCKET_OM_IND].SmClose); if (nSndNum != uslength) { return VOS_ERR; } return VOS_OK; }
VOS_VOID CSD_DL_ProcDataTask(VOS_VOID) { VOS_UINT32 *pulDownLinkSem; pulDownLinkSem = CSD_GetDownLinkDataSem(); for ( ; ; ) { /* 获取下行取数据信号量 */ if (VOS_OK != VOS_SmP( *pulDownLinkSem, 0 )) { CSD_NORMAL_LOG(ACPU_PID_CSD, "CSD_DL_ProcDataTask:: VOS_SmP pulDownLinkSem then continue !"); #ifdef __PC_UT__ break; #else continue; #endif } /*获取当前是否挂断电话*/ if (AT_CSD_CALL_STATE_ON != CSD_GetCallState()) { /*释放数据*/ CSD_DL_ClearData(); #if 0 /*使能中断*/ DICC_EnableIsr(ACPU_PID_CSD, DICC_SERVICE_TYPE_CSD_DATA, DICC_CPU_ID_ACPU); #endif CSD_ERROR_LOG(ACPU_PID_CSD, "CSD_DL_ProcDataTask:: AT_CSD_CALL_STATE_OFF Receive ISR"); #ifdef __PC_UT__ break; #else continue; #endif } CSD_DL_SendData(); #if 0 /* 使能中断 */ DICC_EnableIsr(ACPU_PID_CSD, DICC_SERVICE_TYPE_CSD_DATA, DICC_CPU_ID_ACPU); #endif #ifdef __PC_UT__ break; #endif } }
VOS_UINT32 OM_StopLogSaveReq(APP_OM_MSG_EX_STRU *pstAppToOmMsg, VOS_UINT16 usReturnPrimId) { VOS_UINT32 ulResult = VOS_ERR; /* 获取校准结果 */ ulResult = *(VOS_UINT32*)(pstAppToOmMsg->aucPara); if ( LOG_FILE_DISABLE == g_ulLogFileSaveFlg ) { OM_SendResult(pstAppToOmMsg->ucFuncType, ulResult, usReturnPrimId); return VOS_OK; } /* 对临界资源g_stLogFileInfo进行保护 */ if (VOS_OK != VOS_SmP(g_stLogFileSaveInfo.ulSem, LOG_SEM_TIMEOUT_VALUE)) { g_ulLittleImgLogErr = LOG_OPERATION_POST_SEM_FAIL; OM_SendResult(pstAppToOmMsg->ucFuncType, ulResult, usReturnPrimId); return VOS_ERR; } /* 更新使能标记 */ g_ulLogFileSaveFlg = LOG_FILE_DISABLE; if (VOS_OK == ulResult) { /*清除LOG文件*/ OM_LittleImgClearAllLogFile(); } else { OM_LittleImgCloseLogFile(); } VOS_SmV(g_stLogFileSaveInfo.ulSem); /* 将结果保存到NV项中 */ ulResult = NV_WritePart(en_NV_Item_LOG_FILE_SAVE, 0, (VOS_UINT32*)(pstAppToOmMsg->aucPara), sizeof(VOS_UINT32)); OM_SendResult(pstAppToOmMsg->ucFuncType, ulResult, usReturnPrimId); /* 释放信号量资源 */ if (VOS_OK != VOS_SmDelete(g_stLogFileSaveInfo.ulSem)) { g_ulLittleImgLogErr = LOG_OPERATION_DELETE_SEM_FAIL; return VOS_ERR; } return VOS_OK; }
VOS_VOID TTF_MNTN_ErrlogBufGet(VOS_UINT32 ulPid, MODEM_ID_ENUM_UINT16 enModemId, VOS_CHAR *pBuffer, VOS_UINT32 ulBytes) { VOS_UINT32 ulRslt; OM_RING_ID pRingId; if (VOS_NULL_PTR == pBuffer) { TTF_LOG(ulPid, 0, PS_PRINT_ERROR, "TTF_MNTN_ErrlogBufGet: pBuffer NULL PTR"); return; } if (enModemId >= MODEM_ID_BUTT) { TTF_LOG1(ulPid, 0, PS_PRINT_ERROR, "TTF_MNTN_ErrlogBufGet: Invalid ModemId ", enModemId); return; } pRingId = TTF_ERR_LOG_ENT_RINGID_GET(enModemId); if (VOS_NULL_PTR == pRingId) { TTF_LOG(ulPid, 0, PS_PRINT_ERROR, "TTF_MNTN_ErrlogBufGet: 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_ErrlogBufGet: VOS_SmP <1>, ulRslt<2> fail!", enModemId, (VOS_INT32)ulRslt); return; } ulRslt = (VOS_UINT32)OM_RingBufferGet(pRingId, pBuffer, (VOS_INT)ulBytes); if (ulRslt != ulBytes) { OM_RingBufferFlush(pRingId); TTF_LOG2(ulPid, 0, PS_PRINT_ERROR, "TTF_MNTN_ErrlogBufGet: ERROR OM_RingBufferGet fail!", (VOS_INT32)ulRslt, (VOS_INT32)ulBytes); } VOS_SmV(TTF_ERR_LOG_ENT_SEM_GET(enModemId)); }
VOS_INT ADS_UL_CCpuResetCallback( DRV_RESET_CALLCBFUN_MOMENT enParam, VOS_INT iUserData ) { ADS_CCPU_RESET_IND_STRU *pstMsg = VOS_NULL_PTR; /* 参数为0表示复位前调用 */ if (DRV_RESET_CALLCBFUN_RESET_BEFORE == enParam) { /* 构造消息 */ pstMsg = (ADS_CCPU_RESET_IND_STRU*)PS_ALLOC_MSG_WITH_HEADER_LEN(ACPU_PID_ADS_UL, sizeof(ADS_CCPU_RESET_IND_STRU)); if (VOS_NULL_PTR == pstMsg) { ADS_ERROR_LOG(ACPU_PID_ADS_UL, "ADS_CCPU_RESET_IND_STRU: Malloc Msg Failed!\r\n"); return VOS_ERROR; } /* 填写消息头 */ pstMsg->ulReceiverPid = ACPU_PID_ADS_UL; pstMsg->enMsgId = ID_ADS_CCPU_RESET_START_IND; /* 发消息 */ if (VOS_OK != PS_SEND_MSG(ACPU_PID_ADS_UL, pstMsg)) { ADS_ERROR_LOG(ACPU_PID_ADS_UL, "ADS_UL_CCpuResetCallback: Send Msg Failed!\r\n"); return VOS_ERROR; } /* 等待回复信号量初始为锁状态,等待消息处理完后信号量解锁。 */ if (VOS_OK != VOS_SmP(ADS_GetULResetSem(), ADS_RESET_TIMEOUT_LEN)) { ADS_ERROR_LOG(ACPU_PID_ADS_UL, "ADS_UL_CCpuResetCallback: Lock Binary SEM Failed!\r\n"); ADS_UL_DBG_LOCK_BINARY_SEM_FAIL_NUM(1); return VOS_ERROR; } return VOS_OK; } /* 复位后 */ else if (DRV_RESET_CALLCBFUN_RESET_AFTER == enParam) { ADS_UL_DBG_SAVE_CCPU_RESET_SUCCESS_NUM(1); return VOS_OK; } else { return VOS_ERROR; } }
/***************************************************************************** 函 数 名 : Log_SelfTask 功能描述 : 打印自处理任务 输入参数 : VOS_UINT32 ulPara1 VOS_UINT32 ulPara2 VOS_UINT32 ulPara3 VOS_UINT32 ulPara4 输出参数 : 无 返 回 值 : VOS_VOID 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2007年4月24日 作 者 : 李霄 46160 修改内容 : 新生成函数 *****************************************************************************/ VOS_VOID Log_SelfTask(VOS_UINT32 ulPara1, VOS_UINT32 ulPara2, VOS_UINT32 ulPara3, VOS_UINT32 ulPara4) { VOS_INT32 sRet; VOS_UINT32 ulLen; /*lint -e813*/ VOS_CHAR acTmpStr[LOG_MAX_COLUMN_VAL_EX + 1]; /*lint +e813*/ ulPara1 = ulPara1; ulPara2 = ulPara2; ulPara3 = ulPara3; ulPara4 = ulPara4; Log_Init(); for(;;) { if(VOS_OK != VOS_SmP(g_stLogEnt.semOmPrint, 0)) { continue; } if (LOG_NULL_PTR == g_stLogEnt.rngOmRbufId) { continue; } if (LOG_TRUE == OM_RingBufferIsEmpty(g_stLogEnt.rngOmRbufId)) { continue; } sRet = OM_RingBufferGet(g_stLogEnt.rngOmRbufId, (VOS_CHAR*)(&ulLen), sizeof(VOS_UINT32)); if (sizeof(VOS_UINT32) != (VOS_UINT32)sRet) { continue; } if(LOG_MAX_COLUMN_VAL_EX < ulLen) { OM_RingBufferFlush(g_stLogEnt.rngOmRbufId); continue; } sRet = OM_RingBufferGet(g_stLogEnt.rngOmRbufId, acTmpStr, (VOS_INT32)ulLen); if (ulLen == (VOS_UINT32)sRet) { Log_Output(g_stLogEnt.ulLogOutput, acTmpStr, ulLen); } } }
/***************************************************************************** 函 数 名 : ftm_mailbox_taskproc 功能描述 : 读邮箱数据自处理任务 输入参数 : 无 输出参数 : 无 返 回 值 : 无 *****************************************************************************/ VOS_VOID ftm_mailbox_taskproc(VOS_UINT32 ulPara0, VOS_UINT32 ulPara1, VOS_UINT32 ulPara2, VOS_UINT32 ulPara3) { /*lint -save -e716*/ while(1) /*lint -restore*/ { if(VOS_ERR == VOS_SmP(g_mailbox_readsem, 0)) { HAL_SDMLOG("[%s] VOS_Smp(g_mailbox_readsem, 0) error\n", __FUNCTION__); } /*vote for lock*/ drx_msp_fid_vote_lock(DRX_FTM_MAILBOX_VOTE); /* LTE CT 原语 */ if(ftm_mailbox_msgproc(EN_MAILBOX_SERVICE_LTE_CT) > 0) { //VOS_SmV(g_mailbox_readsem); continue; } /* LTE BT 原语 */ if(ftm_mailbox_msgproc(EN_MAILBOX_SERVICE_LTE_BT) > 0) { //VOS_SmV(g_mailbox_readsem); continue; } /* TDS CT 原语 */ if(ftm_mailbox_msgproc(EN_MAILBOX_SERVICE_TDS_CT) > 0) { //VOS_SmV(g_mailbox_readsem); continue; } /* TDS BT 原语 */ if(ftm_mailbox_msgproc(EN_MAILBOX_SERVICE_TDS_BT) > 0) { //VOS_SmV(g_mailbox_readsem); continue; } /*vote for lock*/ drx_msp_fid_vote_unlock(DRX_FTM_MAILBOX_VOTE); //VOS_SmV(g_mailbox_readsem); } }
VOS_VOID diag_TcpPortLock(DIAG_TCPIP_PORT_ENUM enTcpPort) { DIAG_TCPIP_CTRL_INFO_STRU *pstDiagTcpInfo; VOS_UINT32 ret; pstDiagTcpInfo = diag_GetTcpInfo(); ret = VOS_SmP(pstDiagTcpInfo->astTcpIpPort[enTcpPort].hSem,0); if(ret != ERR_MSP_SUCCESS) { } g_diagTcpPortLock ++; }
/***************************************************************************** Function Name : drx_msp_fid_vote Description : msp fids reject vote to sleep Input :drx_msp_fid_vote_e e_drx_vote Output : None Return : None History : *****************************************************************************/ VOS_VOID drx_msp_fid_vote_lock(drx_msp_fid_vote_e e_drx_vote) { VOS_INT32 vote_status_temp = 0; VOS_INT32 vote_status_bit_shift = 0; /* create sem */ if(0 ==g_drx_vote_sem) { if ( VOS_OK != VOS_SmBCreate( "DRX", 1, VOS_SEMA4_FIFO, &g_drx_vote_sem)) { vos_printf("%s: create sem failed!\n",__FUNCTION__); return; } } if(e_drx_vote >=DRX_MSP_VOTE_BUTT) { vos_printf("%s: e_drx_vote si too larger!\n",__FUNCTION__); return ; } /* modify current status */ if(VOS_OK != VOS_SmP(g_drx_vote_sem, 0)) { vos_printf("%s: post sem failed!\n",__FUNCTION__); return ; } /* save current status */ vote_status_temp = gbl_drx_msp_vote_status; vote_status_bit_shift = 0x1<<((VOS_INT32)e_drx_vote); set_drx_status_bit(vote_status_bit_shift); if((DRX_MSP_VOTE_SLEEP_OK == vote_status_temp) && (DRX_MSP_VOTE_SLEEP_OK != gbl_drx_msp_vote_status)) { #if(VOS_OS_VER == VOS_VXWORKS) DRV_PWRCTRL_SLEEPVOTE_LOCK(PWRCTRL_SLEEP_OAM); #endif #if(VOS_OS_VER == VOS_LINUX) wake_lock(&msp_wakelock); #endif gbl_drx_cur_vote_status.drx_msp_cur_vote_status |= vote_status_bit_shift; } VOS_SmV(g_drx_vote_sem); }
/***************************************************************************** 函 数 名 : 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; }
/***************************************************************************** 函 数 名 : Log_SelfTask 功能描述 : 打印自处理任务 输入参数 : unsigned long ulPara1 unsigned long ulPara2 unsigned long ulPara3 unsigned long ulPara4 输出参数 : 无 返 回 值 : void 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2007年4月24日 作 者 : 李霄 46160 修改内容 : 新生成函数 *****************************************************************************/ void Log_SelfTask(unsigned long ulPara1, unsigned long ulPara2, unsigned long ulPara3, unsigned long ulPara4) { int sRet; unsigned long ulLen; /*lint -e813*/ char acTmpStr[LOG_MAX_COLUMN_VAL_EX + 1]; /*lint +e813*/ Log_Init(); for(;;) { if(VOS_OK != VOS_SmP(g_stLogEnt.semOmPrint, 0)) { continue; } if (LOG_NULL_PTR == g_stLogEnt.rngOmRbufId) { continue; } if (LOG_TRUE == OM_RingBufferIsEmpty(g_stLogEnt.rngOmRbufId)) { continue; } sRet = OM_RingBufferGet(g_stLogEnt.rngOmRbufId, (char*)(&ulLen), sizeof(unsigned long)); if (sizeof(unsigned long) != (unsigned long)sRet) { continue; } if(LOG_MAX_COLUMN_VAL_EX < ulLen) { OM_RingBufferFlush(g_stLogEnt.rngOmRbufId); continue; } sRet = OM_RingBufferGet(g_stLogEnt.rngOmRbufId, acTmpStr, (long)ulLen); if (ulLen == (unsigned long)sRet) { Log_Output(g_stLogEnt.ulLogOutput, acTmpStr, ulLen); } } }
DIAG_PORT_DATA_BUF_STRU * diag_PortGetNodeFromDataBuf(VOS_VOID) { DIAG_PORT_DATA_BUF_STRU * pNode = NULL; (VOS_VOID)VOS_SmP(g_diagPortSem,0); if(ERR_MSP_SUCCESS == diag_PortDataBufIsEmpty()) { (VOS_VOID)VOS_SmV(g_diagPortSem); return NULL; } pNode = blist_entry(g_diagPortDataBuf.dataList.next, DIAG_PORT_DATA_BUF_STRU, dataList); blist_del(&pNode->dataList); (VOS_VOID)VOS_SmV(g_diagPortSem); return pNode; }
VOS_VOID TTF_MemRbRxFreeMemTask(VOS_VOID) { /* 解决UT死循环问题 */ #ifdef __UT_CENTER__ VOS_UINT32 ulLoop; #endif VOS_UINT32 ulLoopCnt = 0; VOS_UINT32 ulSmRst = VOS_OK; TTF_RbRxFreeMemTaskInit(); #ifndef __UT_CENTER__ for ( ; ; ) #else for (ulLoop = 0; ulLoop < 1; ulLoop++) #endif { ulSmRst = VOS_SmP(g_ulTtfMemRbFreeSem, 0); /* take信号量失败是异常失败 */ if(VOS_OK != ulSmRst) { ulLoopCnt++; if (ulLoopCnt >= TTF_MEM_RB_TASK_FAIL_CNT_MAX) { DRV_SYSTEM_ERROR((VOS_INT)(TTF_MEM_RB_TASK_FAIL_SEM_ERR), (VOS_INT)ulSmRst, (VOS_INT)g_ulTtfMemRbFreeSem, (VOS_VOID *)&g_ulFreeTtfMemBlkNoticNum, 2 * sizeof(VOS_UINT32)); } TTF_LOG1(UEPS_PID_TTF_MEM_RB_FREE, PS_PRINT_ERROR, "TTF_MemRb, TTF_MEM_RB_RxFreeMemTask : ERROR : VOS_SmP Failed, Error Code = %d !\n", (VOS_INT)ulSmRst); VOS_TaskDelay(2); continue; } /* 释放 */ TTF_MemFreeFromQue(); } }/* TTF_MemRbRxFreeMemTask */
/***************************************************************************** Prototype : Sock_ShutdownAll Description : 关闭所有的SOCKET连接 Input : VOS_VOID Output : VOS_VOID Return Value : VOS_VOID History : --- Date : 2008-05-3 Author : g47350 Modification: Created function *****************************************************************************/ VOS_VOID PPM_SockShutdownAll(VOS_VOID) { VOS_UINT32 ulIndex; for (ulIndex = 0; ulIndex < SOCKET_BUTT; ulIndex++) { if (SOCK_NULL != g_astSockInfo[ulIndex].socket) { (VOS_VOID)VOS_SmP(g_astSockInfo[ulIndex].SmClose, 0); closesocket(g_astSockInfo[ulIndex].socket); g_astSockInfo[ulIndex].socket = SOCK_NULL; VOS_SmV(g_astSockInfo[ulIndex].SmClose); } } return; }
/***************************************************************************** Function Name : drx_msp_fid_unvote Description : msp fids vote to sleep Input :drx_msp_fid_vote_e e_drx_vote Output : None Return : None History : *****************************************************************************/ VOS_VOID drx_msp_fid_vote_unlock(drx_msp_fid_vote_e e_drx_vote) { VOS_INT32 vote_status_temp = 0; VOS_INT32 vote_status_bit_shift = 0; if(e_drx_vote >=DRX_MSP_VOTE_BUTT) { vos_printf("%s: e_drx_vote si too larger!\n",__FUNCTION__); return ; } /* modify current status */ if(VOS_OK != VOS_SmP(g_drx_vote_sem, 0)) { vos_printf("%s: post sem failed!\n",__FUNCTION__); return ; } /* save current status */ vote_status_temp = gbl_drx_msp_vote_status; vote_status_bit_shift = 0x1<<((VOS_INT32)e_drx_vote); clear_drx_status_bit(vote_status_bit_shift);/*lint !e502 */ if((DRX_MSP_VOTE_SLEEP_OK != vote_status_temp) && (DRX_MSP_VOTE_SLEEP_OK == gbl_drx_msp_vote_status)) { #if(VOS_OS_VER == VOS_VXWORKS) DRV_PWRCTRL_SLEEPVOTE_UNLOCK(PWRCTRL_SLEEP_OAM); #endif #if(VOS_OS_VER == VOS_LINUX) wake_unlock(&msp_wakelock); #endif gbl_drx_cur_vote_status.drx_msp_cur_vote_status &= (~vote_status_bit_shift);/*lint !e502 */ } VOS_SmV(g_drx_vote_sem); }
int RingBuffer_Backspace(RingBuffer *rb, unsigned int skip_cnt) { int retval; #ifdef RING_BUFFER_THREAD_SAFE VOS_SmP(rb->sem, 50); #endif if (RingBuffer_GetCount(rb) < skip_cnt) { retval = RING_BUFFER_NO_SKIP; } else { rb->start = (rb->start + rb->count - skip_cnt) % rb->size; rb->count = skip_cnt; retval = RING_BUFFER_NORMAL; } #ifdef RING_BUFFER_THREAD_SAFE VOS_SmV(rb->sem); #endif return retval; }
BST_ERR_ENUM_UINT8 BST_OS_PalRecvSem( BST_OS_PAL_SEM_T stSemHandle, BST_UINT32 ulTimeOut ) { if( BST_PAL_IsSemInValid( stSemHandle ) ) { return BST_ERR_ILLEGAL_PARAM; } #if (VOS_RTOSCK == VOS_OS_VER) if( VOS_OK == VOS_SmP(stSemHandle, (BST_INT32)ulTimeOut)) #else if( OK == semTake(stSemHandle, (BST_INT32)ulTimeOut)) #endif { return BST_NO_ERROR_MSG; } else { return BST_ERR_SYNC_TIMEOUT; } }
int RingBuffer_Get(RingBuffer *rb, void *element) { int retval; #ifdef RING_BUFFER_THREAD_SAFE VOS_SmP(rb->sem, 50); #endif if (!RingBuffer_IsEmpty(rb)) { memcpy(element, rb->buffer + rb->start * rb->element_size, rb->element_size); rb->start = (rb->start + 1) % rb->size; --rb->count; retval = 320; } else { retval = 0; } #ifdef RING_BUFFER_THREAD_SAFE VOS_SmV(rb->sem); #endif return retval; }
/***************************************************************************** Prototype : Sock_ServerProc Description : 服务器线程,用来处理服务器端和客户端的所有请求。 Input : lpParameter - Unused. Output : void Return Value : void History : --- Date : 2008-05-3 Author : g47350 Modification: Created function *****************************************************************************/ VOS_VOID PPM_SockServerProc(COMM_SOCKET_CTRL_INFO_STRU *pstSockInfo) { VOS_INT8 acRcvBuf[OM_APP_SPLIT_MSG_LEN]; VOS_INT lRevSize = 0; VOS_ULONG ulLockLevel; for(;;) { lRevSize = recv(pstSockInfo->socket, acRcvBuf, OM_APP_SPLIT_MSG_LEN, 0); VOS_SpinLockIntLock(&g_stSockTaskSpinLock, ulLockLevel); /*客户端已经关闭,需要将其清空*/ #if (VOS_LINUX == VOS_OS_VER) if (0 >= lRevSize) #else if ((SOCKET_ERROR == lRevSize) || (0 == lRevSize)) #endif { (VOS_VOID)VOS_SmP(pstSockInfo->SmClose, 0); closesocket(pstSockInfo->socket); pstSockInfo->socket = SOCK_NULL; VOS_SmV(pstSockInfo->SmClose); VOS_SpinUnlockIntUnlock(&g_stSockTaskSpinLock, ulLockLevel); continue; } /*将接收到的数据提交给上层处理*/ CPM_ComRcv(pstSockInfo->enPhyPort, acRcvBuf, lRevSize); VOS_SpinUnlockIntUnlock(&g_stSockTaskSpinLock, ulLockLevel); } }
VOS_VOID diag_LockCoderSrcBuf(VOS_VOID) { (VOS_VOID)VOS_SmP(g_DiagLogSem,0); g_LockBufTimes++; }
/***************************************************************************** Function : TF_TaskEntry Description: entry of the task Input : void Return : void Other : *****************************************************************************/ VOS_VOID TF_TaskEntry(VOS_UINT32 ulPara0, VOS_UINT32 ulPara1, VOS_UINT32 ulPara2, VOS_UINT32 ulPara3) { if ( VOS_OK != VOS_SmCCreate( "TF", 0, VOS_SEMA4_FIFO, &(g_stTFControl.ulSem))) { Print("TF: creat sem error.\r\n"); return; } if(VOS_OK != DRV_SDMMC_ADD_HOOK( 0, (VOS_VOID *)TF_InsertNotify)) { Print("TF: register hook to lowersoftware error.\r\n"); return; } TF_ConfigLed(); TF_NVAutoResume(); DRV_ONLINE_UPDATE_RESULT(); /* main loop */ for ( ; ; ) { if ( VOS_OK != VOS_SmP(g_stTFControl.ulSem, 0) ) { continue; } /* light LED updating */ PS_TURN_ON_UPDATE_VERSION_LED(); /*lint -e746 修改人:徐铖 51137 ;检视人:蒋开波 00105005; 原因:该告警是因为OSA的VOS_ULFUNCPTR原型定义时没有在形参中加入void */ /* AUTH */ if ( VOS_NULL_PTR != g_stTFControl.pulFunctionAddress ) { if ( VOS_OK != g_stTFControl.pulFunctionAddress() ) { /* light LED fail to update */ PS_TURN_ON_UPDATE_VERSION_FAIL_LED(); Print("TF AUTH fail.\r\n"); continue; } } /*lint +e746 修改人:徐铖 51137; 检视人:蒋开波 00105005;*/ if(VOS_TRUE == DRV_TF_NVBACKUP_FLAG()) { /* NV Backup*/ if ( VOS_OK != NV_Backup() ) { /* light LED fail to update */ PS_TURN_ON_UPDATE_VERSION_FAIL_LED(); Print("TF backup fail.\r\n"); continue; } } /*set the flag of update */ DRV_SET_UPDATA_FLAG(0); /* reboot */ VOS_FlowReboot(); } }
/***************************************************************************** Function : VOS_Sm_AsyP Description: to lock the resource asynchronous Input : ulSmID -- ID of semaphore Return : VOS_OK on success and errno on failure *****************************************************************************/ VOS_UINT32 VOS_Sm_AsyP( VOS_SEM Sm_ID ) { return(VOS_SmP( Sm_ID, 1 )); }