Esempio n. 1
0
extern "C" BOOL	ReadByteEx (BYTE *data, int timeout, BOOL warn)
{
	if(data == NULL)
		return FALSE;
	if (ParPort == -1)
	{
		DWORD BytesReceived = 0;
		FT_SetTimeouts(ftHandleA,timeout*1000,0);
		ftStatus = FT_Read(ftHandleA,RxBuffer,1,&BytesReceived);
		if (ftStatus == FT_OK)
		{
			if (BytesReceived == 1)
			{
				// FT_Read OK
				*data = RxBuffer[0];
				return TRUE;
			}
			else
			{
				// FT_Read Timeout
				if (warn)
					MessageBox(topHWnd, "USB Error: Read Timeout", "ReadByteEx", MB_OK | MB_ICONERROR);
				return FALSE;
			}
		}
		else
		{
			// FT_Read Failed
			if (warn)
				MessageBox(topHWnd, "USB Error: Read Failed", "ReadByteEx", MB_OK | MB_ICONERROR);
			return FALSE;
		}
	}
	else
	{
		BYTE a, b;
		time_t starttime = time(NULL);
		shadow |= 0x20;
		pwControl(shadow);	// set port to input mode
		b = prStatus();		// wait for ACK
		while (!((b ^ c) & 0x20))
		{
			b = prStatus();
			if (time(NULL) > starttime + (time_t)timeout)
			{
				if (warn)
					MessageBox(topHWnd, "Timeout on data transfer!", "ReadByte", MB_OK | MB_ICONERROR);
				return FALSE;
			}
		}
		c = b;
		a = prData();		// read data
		shadow ^= 0x02;
		pwControl(shadow);	// signal byte received
		*data = a;
		return TRUE;
	}
}
Esempio n. 2
0
BOOL	WriteByteEx (BYTE data, int timeout, BOOL warn)
{
	if (ParPort == -1)
	{
		DWORD BytesWritten = 0;
		FT_SetTimeouts(ftHandleA,10000,0);
		TxBuffer[0] = data;
		ftStatus = FT_Write(ftHandleA,TxBuffer,1,&BytesWritten);
		if (ftStatus == FT_OK)
		{
			if (BytesWritten == 1)
			{
				// FT_Read OK
				return TRUE;
			}
			else
			{
				// FT_Write Timeout
				if (warn)
					MessageBox(topHWnd, "USB Error: Write Timeout", "WriteByteEx", MB_OK | MB_ICONERROR);
				return FALSE;
			}
		}
		else
		{
			// FT_Write Failed
			StatusText("FT STATUS = %i", ftStatus);
			MessageBox(topHWnd, "USB Error: Write Failed", "WriteByteEx", MB_OK | MB_ICONERROR);
			return FALSE;
		}
	}
	else
	{
		time_t starttime = time(NULL);
		BYTE b;
		shadow &= 0xDF;
		pwControl(shadow);	// set port to output mode
		pwData(data);		// output data
		shadow ^= 0x01;
		pwControl(shadow);	// signal byte sent
		b = prStatus();		// wait for ACK
		while (!((b ^ c) & 0x10))
		{
			b = prStatus();
			if (time(NULL) > starttime + (time_t)timeout)
			{
				if (warn)
					MessageBox(topHWnd, "Timeout on data transfer!", "WriteByte", MB_OK | MB_ICONERROR);
				return FALSE;
			}
		}
		c = b;
		return TRUE;
	}
}
Esempio n. 3
0
extern "C" void	InitPort (void)
{
	if (ParPort == -1)
	{
		DWORD modemWord = 0;
        usb_timeout_error = FALSE;
		ftStatus = FT_GetModemStatus (ftHandleB, &modemWord);
		if (ftStatus != FT_OK)
		{
			MessageBox(topHWnd, "USB Error: Get Power Status Failed!", "InitPort", MB_OK | MB_ICONERROR);
			return;
		}

		if (modemWord & 0x80)
			MessageBox(topHWnd, "USB CopyNES is OFF - turn on then hit OK", "InitPort", MB_OK | MB_ICONERROR);

		// flush receive/transmit buffers
		ftStatus = FT_Purge (ftHandleA, FT_PURGE_RX | FT_PURGE_TX);
		if (ftStatus != FT_OK)
		{
			MessageBox(topHWnd, "USB Error: Purge A Failed!", "InitPort", MB_OK | MB_ICONERROR);
			return;
		}

		ftStatus = FT_Purge (ftHandleB, FT_PURGE_RX | FT_PURGE_TX);
		if (ftStatus != FT_OK)
		{
			MessageBox(topHWnd, "USB Error: Purge B Failed!", "InitPort", MB_OK | MB_ICONERROR);
			return;
		}
		connection_initialized = TRUE;
	}
	else
	{
		if ((prECP() & 0x03) == 0x01)
		{
			pwECP(0x34);
			if (prECP() == 0x35)
				pwECP((prECP() & 0x1F) | 0x20);	// try to set ECP port to bidirectional mode
		}
		shadow |= 0x40;	// pull ACK line high - this way, printers won't listen to us
		pwControl(shadow);
		c = prStatus();
		connection_initialized = TRUE;
	}
}
Esempio n. 4
0
BOOL ReadByteReady (void)
{
	if (ParPort == -1)
	{
		DWORD EventDWord = 0;
		DWORD RxBytes = 0;
		DWORD TxBytes = 0;
		FT_GetStatus(ftHandleA,&RxBytes,&TxBytes,&EventDWord);
		if (RxBytes > 0)
			return TRUE;
		else
			return FALSE;
	}
	else
	{
		BYTE b;
		b = prStatus();		// wait for ACK
		if (!((b ^ c) & 0x20))
			return FALSE;
		return TRUE;
	}
}
Esempio n. 5
0
extern "C" BOOL ReadByteReady (void)    //check if byte is waiting in queue
{
	if (ParPort == -1)
	{
		DWORD EventDWord = 0;
		DWORD RxBytes = 0;
		DWORD TxBytes = 0;
  		if(usb_timeout_error) return FALSE;
		FT_GetStatus(ftHandleA,&RxBytes,&TxBytes,&EventDWord);
		if (RxBytes > 0)
			return TRUE;
		else
			return FALSE;
	}
	else
	{
		BYTE b;
		b = prStatus();		// wait for ACK
		if (!((b ^ c) & 0x20))
			return FALSE;
		return TRUE;
	}
}