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;
}
Пример #2
0
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;
}