VOS_VOID diag_VcomCtrlEvtCB(APP_VCOM_EVT_UINT32 event) { DIAG_PORT_CONNECT_STA_PFN pfnConn = DIAG_PORT_GET_CONN_CALLBACK(); g_diagVcomState[0] = event; if(APP_VCOM_EVT_OPEN == event) { DIAG_PORT_CHAN_STATE_SWITCH(EN_DIAG_VCOM_BEABER_DIAG_CTRL, ACM_EVT_DEV_READY); return; } else { DIAG_PORT_CHAN_STATE_SWITCH(EN_DIAG_VCOM_BEABER_DIAG_CTRL, ACM_EVT_DEV_SUSPEND); if((g_diagVcomState[0] != APP_VCOM_EVT_RELEASE) || (g_diagVcomState[1] != APP_VCOM_EVT_RELEASE)) { return; } //通知逻辑通道状态 if(pfnConn!=NULL) { pfnConn(DIAG_DISCONN); } } }
VOS_VOID diag_PortEvtCB(ACM_EVT_E ulEvt,DIAG_PORT_PHY_BEAR_ENUM enPort) { DIAG_PORT_CONNECT_STA_PFN pfnConn = DIAG_PORT_GET_CONN_CALLBACK(); DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_TCP_EVT+enPort, ulEvt, 0, 0); if(ACM_EVT_DEV_READY==ulEvt) { DIAG_PORT_CHAN_STATE_SWITCH(enPort,ACM_EVT_DEV_READY); return ; } else { if(diag_GetLogSendType() == EN_DIAG_SEND_LOG_TO_SD) { return ; } //通知逻辑通道状态 if(pfnConn!=NULL) { pfnConn(DIAG_DISCONN); } DIAG_PORT_CHAN_STATE_SWITCH(enPort,ACM_EVT_DEV_SUSPEND); } return; }
/***************************************************************************** 函 数 名 : diag_PortClose 功能描述 : 输入参数 : 输出参数 : 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年8月27日 修改内容 : Creat Function *****************************************************************************/ VOS_UINT32 diag_PortClose(DIAG_PORT_PHY_BEAR_ENUM enPort) { VOS_INT32 slVcomRet = 0; VOS_INT32 slHandle = UDI_INVALID_HANDLE; slHandle = DIAG_PORT_GET_HANDLE(enPort); if(slHandle ==UDI_INVALID_HANDLE) { return ERR_MSP_SUCCESS; } DIAG_DEBUG_SDM_FUN((DIAG_DEBUG_MSG_ID_ENUM)(EN_DIAG_DEBUG_TCP_CLOSE+(VOS_UINT32)enPort), 0, 0, 0); g_diagPort_ctrl.bFlag = VOS_FALSE; slVcomRet = udi_close(slHandle); if (slVcomRet == ERR_MSP_SUCCESS) { DIAG_PORT_HANDLE_SWITCH(enPort,UDI_INVALID_HANDLE); DIAG_PORT_CHAN_STATE_SWITCH(enPort,ACM_EVT_DEV_SUSPEND); return (VOS_UINT32)slVcomRet; } DIAG_DEBUG_SDM_FUN((DIAG_DEBUG_MSG_ID_ENUM)(EN_DIAG_DEBUG_TCP_CLOSE_ERR+(VOS_UINT32)enPort), (VOS_UINT32)slVcomRet, 0, 0); return ERR_MSP_FAILURE; }
/***************************************************************************** 函 数 名 : diag_PortOpen 功能描述 : 输入参数 : 输出参数 : 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年8月27日 修改内容 : Creat Function *****************************************************************************/ VOS_UINT32 diag_PortOpen(DIAG_PORT_PHY_BEAR_ENUM enPort,UDI_DEVICE_ID devid,\ VOS_VOID * pEvtCB,VOS_VOID* pWrtCB,VOS_VOID* pRdCB) { UDI_HANDLE slUartHd = 0; VOS_UINT32 ret = ERR_MSP_SUCCESS; UDI_OPEN_PARAM stParam = {0}; ACM_READ_BUFF_INFO stReadParam; if(DIAG_PORT_GET_HANDLE(enPort) != UDI_INVALID_HANDLE) { return ERR_MSP_SUCCESS; } DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_TCP_OPEN+enPort, 0, 0, 0); stParam.devid = devid; slUartHd = udi_open(&stParam); if(UDI_INVALID_HANDLE == slUartHd) { return ERR_MSP_FAILURE; } stReadParam.u32BuffSize = DIAG_DATA_READ_BUFFER_SIZE; stReadParam.u32BuffNum = DIAG_DATA_MAX_BUFFER_COUNT; ret = udi_ioctl(slUartHd,ACM_IOCTL_RELLOC_READ_BUFF,&stReadParam); if(ret) { DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_TCP_OPEN_ERR+enPort, (VOS_UINT32)slUartHd, ret, 1); goto ERR_OUT; } ret = udi_ioctl(slUartHd,ACM_IOCTL_SEND_BUFF_CAN_DMA,&stReadParam); if(ret) { DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_TCP_OPEN_ERR+enPort, (VOS_UINT32)slUartHd, ret, 2); goto ERR_OUT; } ret = udi_ioctl((int)slUartHd,ACM_IOCTL_SET_READ_CB, pRdCB); if(ret) { DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_TCP_OPEN_ERR+enPort, (VOS_UINT32)slUartHd, ret, 3); goto ERR_OUT; } ret = udi_ioctl((int)slUartHd,ACM_IOCTL_SET_WRITE_CB, pWrtCB); if(ret) { DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_TCP_OPEN_ERR+enPort, (VOS_UINT32)slUartHd, ret, 4); goto ERR_OUT; } ret = udi_ioctl((int)slUartHd, (int)ACM_IOCTL_SET_EVT_CB, pEvtCB); if(ret) { DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_TCP_OPEN_ERR+enPort, (VOS_UINT32)slUartHd, ret, 5); goto ERR_OUT; } ret = udi_ioctl((int)slUartHd, (int)ACM_IOCTL_WRITE_DO_COPY, 0); if(ret) { DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_TCP_OPEN_ERR+enPort, (VOS_UINT32)slUartHd, ret, 6); goto ERR_OUT; } g_diagPort_ctrl.bFlag = VOS_TRUE; DIAG_PORT_HANDLE_SWITCH(enPort,slUartHd); /*修改端口句柄*/ DIAG_PORT_CHAN_STATE_SWITCH(enPort,ACM_EVT_DEV_READY);/*打开之后修改端口状态*/ return ERR_MSP_SUCCESS; ERR_OUT: udi_close(slUartHd); return ret; }
/***************************************************************************** 函 数 名 : diag_PortRdCB 功能描述 : 输入参数 : 输出参数 : 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年8月27日 作 者 : heliping 修改内容 : Creat Function *****************************************************************************/ VOS_VOID diag_PortRdCB(DIAG_PORT_PHY_BEAR_ENUM enPort) { ACM_WR_ASYNC_INFO acmInfo = {}; UDI_HANDLE ulUdiHandle; VOS_UINT32 ret; VOS_UINT32 ulDataLen; VOS_CHAR* pdata; static VOS_UINT32 ulTotalLen = 0; #if(FEATURE_SOCP_ON_DEMAND == FEATURE_ON) DIAG_PORT_DATA_BUF_STRU * dataNode; #endif ulUdiHandle = DIAG_PORT_GET_HANDLE(enPort); if(ulUdiHandle == UDI_INVALID_HANDLE) { DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_UDI_READ_END,0,0,1); diag_printf("[%s]:invalid handle!!!!!!!!\n",__func__); return; } ret = (VOS_UINT32)udi_ioctl(ulUdiHandle,UDI_ACM_IOCTL_GET_READ_BUFFER_CB,&acmInfo); if(ret != ERR_MSP_SUCCESS) { DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_UDI_READ_END,0,0,2); diag_printf("[%s]:get read buffer callback err 0x%x!!!!!!!!\n",__func__,ret); return; } #if(FEATURE_SOCP_ON_DEMAND == FEATURE_ON) /*端口切换,丢弃链表中数据*/ if(DIAG_PORT_GET_CONN_PORT() != enPort) { for(;;) { dataNode = diag_PortGetNodeFromDataBuf(); if(dataNode == NULL) { break; } VOS_MemFree(MSP_PID_DIAG_APP_AGENT, dataNode->dataBuf); VOS_MemFree(MSP_PID_DIAG_APP_AGENT, dataNode); } } #endif ulDataLen = acmInfo.u32Size; #ifdef FEATURE_UPGRADE_TL pdata = acmInfo.pBuffer; #else pdata = acmInfo.pVirAddr; #endif ulTotalLen += ulDataLen; DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_UDI_READ_START,ulTotalLen,ulDataLen,0); /*设置当前物理通道及通道连接状态*/ DIAG_PORT_PORT_SWITCH(enPort); DIAG_PORT_CHAN_STATE_SWITCH(enPort,ACM_EVT_DEV_READY); DIAG_PORT_CHAN_STATE_SWITCH(enPort+1,ACM_EVT_DEV_READY); diag_PrintToFile(UsbCtrlRdCB_LogPath, pdata, ulDataLen); diag_TraceDebug(pdata, ulDataLen); #if(FEATURE_SOCP_ON_DEMAND == FEATURE_ON) /*SOCP不可用或者缓存非空*/ if((g_diagSocpIsEnable != TRUE) || (ERR_MSP_SUCCESS != diag_PortDataBufIsEmpty())) { DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_UDI_READ_END,0,0,3); diag_PortAddToDataBuf(enPort, (VOS_UINT8 *)(pdata),ulDataLen); ret = (VOS_UINT32)udi_ioctl(ulUdiHandle,UDI_ACM_IOCTL_RETUR_BUFFER_CB,&acmInfo); if(ret) { DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_UDI_READ_END,0,0,4); diag_printf("[%s]:return buffer to acm err 0x%x!!!!!!!!\n",__func__,ret); } if(ERR_MSP_SUCCESS != diag_SendMsg(MSP_PID_DIAG_APP_AGENT, MSP_PID_DIAG_APP_AGENT, ID_MSG_DIAG_CMD_PORT_REQ_TO_APP_AGENT, (VOS_UINT8 *)&ret, sizeof(VOS_UINT32))) { DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_UDI_READ_END,0,0,5); diag_printf("[%s]:send msg to diag app agent fail!!!!!!!!\n",__func__); } return; } #endif ret = SCM_SendDecoderSrc(DIAG_PORT_GET_DECODE_SRC(enPort),(VOS_UINT8 *)(pdata),ulDataLen); if(ret) { DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_UDI_READ_END,0,0,6); diag_printf("[%s]:SCM_SendDecoderSrc err 0x%x!!!!!!!!\n",__func__,ret); } ret = (VOS_UINT32)udi_ioctl(ulUdiHandle,UDI_ACM_IOCTL_RETUR_BUFFER_CB,&acmInfo); if(ret) { DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_UDI_READ_END,0,0,7); diag_printf("[%s]:SCM_SendDecoderSrc err 0x%x!!!!!!!!\n",__func__,ret); } return; }