VOS_INT GU_OamVComReadData(VOS_UINT8 ucDevIndex, VOS_UINT8 *pData, VOS_UINT32 uslength) { if(ucDevIndex != APP_VCOM_DEV_INDEX_LOG) { vos_printf("\r\n GU_OamVComReadData:PhyPort port is error: %d\n", ucDevIndex); return VOS_ERR; } #if (VOS_LINUX == VOS_OS_VER) down(&g_stVCOMRxBuffSem); #endif g_stVComDebugInfo.ulVCOMRcvNum++; g_stVComDebugInfo.ulVCOMRcvLen += uslength; if ((VOS_NULL_PTR == pData) || (0 == uslength)) { #if (VOS_LINUX == VOS_OS_VER) up(&g_stVCOMRxBuffSem); #endif vos_printf("\r\n GU_OamVComReadData:Send data is NULL\n"); return VOS_ERR; } if (CPM_PORT_BUTT == CPM_QueryPhyPort(CPM_OM_COMM)) { CPM_ConnectPorts(CPM_VCOM_PORT, CPM_OM_COMM); } /*lint -e40*/ OM_ACPU_DEBUG_TRACE((VOS_UINT8*)pData, uslength, OM_ACPU_USB_CB); /*lint +e40*/ if(VOS_OK != CPM_ComRcv(CPM_VCOM_PORT, pData, uslength)) { g_stVComDebugInfo.ulVCOMRcvErrNum++; g_stVComDebugInfo.ulVCOMRcvErrLen += uslength; vos_printf("\r\n Info: GU_OamVComReadData:Call CPM_ComRcv is fail, PhyPort is CPM_VCOM_PORT \n"); } #if (VOS_LINUX == VOS_OS_VER) up(&g_stVCOMRxBuffSem); #endif return VOS_OK; }
VOS_INT32 PPM_ReadPortData(CPM_PHY_PORT_ENUM_UINT32 enPhyPort, UDI_HANDLE UdiHandle, OM_PROT_HANDLE_ENUM_UINT32 enHandle) { ACM_WR_ASYNC_INFO stInfo; if (VOS_ERROR == UdiHandle) { LogPrint("\r\n PPM_PortCloseProc: Input HANDLE is err. \n"); g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBUdiHandleErr++; return VOS_ERR; } VOS_MemSet(&stInfo, 0, sizeof(stInfo)); /* 获取USB的IO CTRL口的读缓存 */ if (VOS_OK != DRV_UDI_IOCTL(UdiHandle, UDI_ACM_IOCTL_GET_READ_BUFFER_CB, &stInfo)) { LogPrint("\r\n PPM_ReadPortData:Call DRV_UDI_IOCTL is Failed\n"); g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBUdiHandleReadGetBufferErr++; return VOS_ERR; } /*lint -e40*/ OM_ACPU_DEBUG_CHANNEL_TRACE(enPhyPort, (VOS_UINT8*)stInfo.pVirAddr, stInfo.u32Size, OM_ACPU_USB_CB); /*lint +e40*/ if(VOS_OK != CPM_ComRcv(enPhyPort, (VOS_UINT8*)stInfo.pVirAddr, stInfo.u32Size)) { LogPrint1("\r\n Info: PPM_ReadPortData:Call CPM_ComRcv is NULL, PhyPort is %d\n", (VOS_INT)enPhyPort); g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBUdiCommRcvNullPtrErr++; } g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBRcvPktNum++; g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBRcvPktByte += stInfo.u32Size; if(VOS_OK != DRV_UDI_IOCTL(UdiHandle, UDI_ACM_IOCTL_RETUR_BUFFER_CB, &stInfo)) { LogPrint("\r\n PPM_ReadPortData:Call DRV_UDI_IOCTL UDI_ACM_IOCTL_RETUR_BUFFER_CB is Failed\n"); g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBUdiHandleReadBufferFreeErr++; } return VOS_OK; }
/***************************************************************************** 函 数 名 : GU_OamUSBReadData 功能描述 : 用于ACPU上面底软把数据通过ICC发送给OM模块 输入参数 : enPhyPort: 物理端口 UdiHandle:设备句柄 输出参数 : 无 返 回 值 : VOS_ERR/VOS_OK 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年2月2日 作 者 : zhuli 修改内容 : Creat Function *****************************************************************************/ VOS_INT32 GU_OamReadPortData(CPM_PHY_PORT_ENUM_UINT32 enPhyPort, UDI_HANDLE UdiHandle) { ACM_WR_ASYNC_INFO stInfo; CPM_PHY_PORT_ENUM_UINT32 enPcvoiceRet; CPM_PHY_PORT_ENUM_UINT32 enDiagRet; if (VOS_ERROR == UdiHandle) { LogPrint("\r\nGU_OamReadPortData: Input HANDLE is err. \n"); return VOS_ERR; } VOS_MemSet(&stInfo, 0, sizeof(stInfo)); /* 获取USB的IO CTRL口的读缓存 */ if (VOS_OK != DRV_UDI_IOCTL(UdiHandle, UDI_ACM_IOCTL_GET_READ_BUFFER_CB, &stInfo)) { LogPrint("\r\nGU_OamReadPortData:Call DRV_UDI_IOCTL is Failed\n"); return VOS_ERR; } /*lint -e40*/ OM_ACPU_DEBUG_TRACE((VOS_UINT8*)stInfo.pBuffer, stInfo.u32Size, OM_ACPU_USB_CB); /*lint +e40*/ /*判断当前是否承载的是Pcvoice*/ enPcvoiceRet = CPM_QueryPhyPort(CPM_PCVOICE_COMM); enDiagRet = CPM_QueryPhyPort(CPM_DIAG_COMM); if ((enPhyPort != enPcvoiceRet)&&(enPhyPort != enDiagRet)) { CPM_PnpAppPortCB(enPhyPort, VOS_TRUE); /*需要重新链接物理和逻辑端口关系*/ } if(VOS_OK != CPM_ComRcv(enPhyPort, (VOS_UINT8*)stInfo.pBuffer, stInfo.u32Size)) { LogPrint1("\r\n Info: GU_OamReadPortData:Call CPM_ComRcv is NULL, PhyPort is %d\n", (VOS_INT)enPhyPort); } if(VOS_OK != DRV_UDI_IOCTL(UdiHandle, UDI_ACM_IOCTL_RETUR_BUFFER_CB, &stInfo)) { LogPrint("\r\nGU_OamReadPortData:Call DRV_UDI_IOCTL UDI_ACM_IOCTL_RETUR_BUFFER_CB is Failed\n"); } return VOS_OK; }
/***************************************************************************** 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); } }