BOOL CGatewayInfoteamSerialToI::ProcessCommand(CCommandRoot* pCommand,CLayerManagerBase* pManager,HANDLE h_Handle,HANDLE hTransactionHandle) { CCommand_PS* pCommand_PS; CInterfaceManagerBase* pInterfaceManager; if(CGateway::ProcessCommand(pCommand, pManager, h_Handle, hTransactionHandle)) { if(CheckLayers(pCommand,pManager)) { pCommand_PS = (CCommand_PS*)pCommand; pInterfaceManager = (CInterfaceManagerBase*)pManager; switch(pCommand->GetCommandId()) { case INFOTEAM_SERIAL_PROCESS_PROTOCOL : return Process_ProcessProtocol(pCommand_PS,pInterfaceManager,h_Handle,hTransactionHandle); case INFOTEAM_SERIAL_PROCESS_PROTOCOL_MAXON : return Process_ProcessProtocolMaxon(pCommand_PS,pInterfaceManager,h_Handle,hTransactionHandle); case INFOTEAM_SERIAL_ABORT_PROTOCOL_MAXON : return Process_AbortProtocolMaxon(pCommand_PS,pInterfaceManager,h_Handle,hTransactionHandle); case INFOTEAM_SERIAL_SEND_CHUNK : return Process_SendChunk(pCommand_PS,pInterfaceManager,h_Handle,hTransactionHandle); case INFOTEAM_SERIAL_RECEIVE_DATA : return Process_ReceiveData(pCommand_PS,pInterfaceManager,h_Handle,hTransactionHandle); } } } return FALSE; }
int RS232Check(serial_driver_t *rs) { int waitingChars = 0; char buf[MaxLen]; int len = 0; int i = 0; /*sleep(1); char Sender[SENDER_LEN]; //获取发送方ip and port memset(Sender, 0, SENDER_LEN); memcpy(Sender, (void*)&rs, sizeof(rs)); SendRSData(buf,4, Sender);*/ if((waitingChars = rs->poll()) == 0) return 0; //DBPRINTF("---Begin poll size:%d %d\n",waitingChars,COMMBUFLEN_MAX_RS485_232); memset(buf,0x00,MaxLen); //接收完所有数据,考虑中间中断等,须分多次接收 /* do { if(len >= COMMBUFLEN_MAX_RS485_232) { printf("------RS232Check:Get data len = %d\n",len); break; } waitingChars = rs->read_buf(buf+len,waitingChars); len += waitingChars; // 如果是9600, 传输1 byte,约要1ms, mmsleep(10); //DBPRINTF("Get data packet len = %d\n",len); waitingChars=rs->poll(); if(waitingChars > 0) { i = 5; } else { mmsleep(10); i--; } } while(i); printf("RS232Check:Get data len = %d\n",len); */ TC3Cmdstruct c3buf; int result; char sendbuf[MaxLen]; int sendlen = 0; memset(sendbuf, 0 , sizeof(sendbuf)); i = 5; while(i--) { len = RS232WaitRespose(rs,gOptions.DeviceID,buf,200); printf("len %d\n",len); //len = 8; //buf[0]=0xaa;buf[1]=0x01;buf[2]=0x01;buf[3]=0x00;buf[4]=0x00;buf[5]=0x50;buf[6]=0x3c;buf[7]=0x55; if(0 > len) { return 0; } memset(&c3buf, 0, sizeof(TC3Cmdstruct)); DEBUGTRACE(buf,len); result = Process_ReceiveData(buf,len,&c3buf.framehead,RS485_232_MODE); if(result== EC_FINISH) { printf("c3 cmd = %d,data's len = %d \n ",c3buf.command,c3buf.datalen); BYTE currcmd = c3buf.command; // if(process_comm_cmd(&c3buf.command,c3buf.buf,c3buf.datalen,sendbuf,&sendlen,RS485_232_MODE) == CMD_SUCCESS) process_comm_cmd(&c3buf.command,c3buf.buf,c3buf.datalen,sendbuf,&sendlen,RS485_232_MODE) ; { // if(currcmd == c3buf.command) // c3buf.command = 200;//命令执行成功 c3buf.datalen = sendlen;// if(sendlen) memcpy(c3buf.buf,sendbuf,sendlen); Make_SendData(c3buf.buf,c3buf.command,c3buf.datalen,sendbuf,&sendlen); char Sender[SENDER_LEN]; //获取发送方ip and port memset(Sender, 0, SENDER_LEN); memcpy(Sender, (void*)&rs, sizeof(rs)); SendRSData(sendbuf,sendlen, Sender); printf("Rs232 runcommcmd OK ! sendlen = %d \n ",sendlen); return 0; } // else // printf("RS232 runcommcmd error ! \n "); } else { printf("-RS232Check error = 0x%x,\n", result); } } return -1; }