forked from len0rd/rockbox
		
	git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5439 a1c6a512-1295-4272-9138-f99709370657
		
			
				
	
	
		
			139 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // UART wrapper implementation for the Win32 platform
 | |
| // make a new version of this file for different systems, e.g. Linux
 | |
| 
 | |
| #include <windows.h>
 | |
| #include "scalar_types.h" // (U)INT8/16/32
 | |
| #include "Uart.h"
 | |
| 
 | |
| // COMx for windows, returns NULL on error
 | |
| tUartHandle UartOpen(char* szPortName)
 | |
| {
 | |
| 	HANDLE serial_handle; 
 | |
| 	DCB  dcb;
 | |
| 	COMMTIMEOUTS cto = { 0, 0, 0, 0, 0 };
 | |
| 
 | |
| 	memset(&dcb,0,sizeof(dcb));
 | |
| 
 | |
| 	/* -------------------------------------------------------------------- */
 | |
| 	// set DCB to configure the serial port
 | |
| 	dcb.DCBlength       = sizeof(dcb);
 | |
| 
 | |
| 	dcb.fOutxCtsFlow    = 0;
 | |
| 	dcb.fOutxDsrFlow    = 0;
 | |
| 	dcb.fDtrControl     = DTR_CONTROL_ENABLE; // enable for power
 | |
| 	dcb.fDsrSensitivity = 0;
 | |
| 	dcb.fRtsControl     = RTS_CONTROL_ENABLE; // enable for power
 | |
| 	dcb.fOutX           = 0;
 | |
| 	dcb.fInX            = 0;
 | |
| 
 | |
| 	/* ----------------- misc parameters ----- */
 | |
| 	dcb.fErrorChar      = 0;
 | |
| 	dcb.fBinary         = 1;
 | |
| 	dcb.fNull           = 0;
 | |
| 	dcb.fAbortOnError   = 0;
 | |
| 	dcb.wReserved       = 0;
 | |
| 	dcb.XonLim          = 2;
 | |
| 	dcb.XoffLim         = 4;
 | |
| 	dcb.XonChar         = 0x13;
 | |
| 	dcb.XoffChar        = 0x19;
 | |
| 	dcb.EvtChar         = 0;
 | |
| 
 | |
| 	/* ----------------- defaults ----- */
 | |
| 	dcb.BaudRate = 4800;
 | |
| 	dcb.Parity   = NOPARITY;
 | |
| 	dcb.fParity  = 0;
 | |
| 	dcb.StopBits = ONESTOPBIT;
 | |
| 	dcb.ByteSize = 8;
 | |
| 
 | |
| 
 | |
| 	/* -------------------------------------------------------------------- */
 | |
| 	// opening serial port
 | |
| 	serial_handle = CreateFile(szPortName, GENERIC_READ | GENERIC_WRITE,
 | |
| 		0, NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
 | |
| 
 | |
| 	if (serial_handle == INVALID_HANDLE_VALUE)
 | |
| 	{
 | |
| 		//printf("Cannot open port \n");
 | |
| 		return NULL;
 | |
| 	}
 | |
| 
 | |
| 	SetCommMask(serial_handle, 0);
 | |
| 	SetCommTimeouts(serial_handle, &cto);
 | |
| 
 | |
| 	if(!SetCommState(serial_handle, &dcb))
 | |
| 	{
 | |
| 		//printf("Error setting up COM params\n");
 | |
| 		CloseHandle(serial_handle);
 | |
| 		return NULL;
 | |
| 	}
 | |
| 
 | |
| 	return serial_handle;
 | |
| }
 | |
| 
 | |
| // returns true on success, false on error
 | |
| bool UartConfig(tUartHandle handle, long lBaudRate, tParity nParity, tStopBits nStopBits, int nByteSize)
 | |
| {
 | |
| 	DCB  dcb;
 | |
| 	
 | |
| 	if (!GetCommState (handle, &dcb))
 | |
| 	{
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	dcb.BaudRate = lBaudRate;
 | |
| 	dcb.Parity	 = nParity;
 | |
| 	dcb.StopBits = nStopBits;
 | |
| 	dcb.ByteSize = nByteSize;
 | |
| 
 | |
| 	if(!SetCommState(handle, &dcb))
 | |
| 	{
 | |
| 		//DWORD dwErr = GetLastError();
 | |
| 		//printf("Error %d setting up COM params for baudrate byte\n", dwErr);
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| // returns how much data was actually transmitted
 | |
| long UartWrite(tUartHandle handle, unsigned char* pData, long lSize)
 | |
| {
 | |
| 	BOOL success;
 | |
| 	DWORD result_nbr;
 | |
| 
 | |
| 	success = WriteFile(handle, pData, lSize, &result_nbr, NULL);
 | |
| 
 | |
| 	if(!success)
 | |
| 	{
 | |
| 		return 0;
 | |
| 	}
 | |
| 
 | |
| 	return result_nbr;
 | |
| }
 | |
| 
 | |
| // returns how much data was actually received
 | |
| long UartRead(tUartHandle handle, unsigned char* pBuffer, long lSize)
 | |
| {
 | |
| 	BOOL success;
 | |
| 	DWORD read_nbr;
 | |
| 
 | |
| 	success = ReadFile(handle, pBuffer, lSize, &read_nbr, NULL);
 | |
| 	if(!success)
 | |
| 	{
 | |
| 		return 0;
 | |
| 	}
 | |
| 
 | |
| 	return read_nbr;
 | |
| }
 | |
| 
 | |
| 
 | |
| void UartClose(tUartHandle handle)
 | |
| {
 | |
| 	if (handle != NULL)
 | |
| 	{
 | |
| 		CloseHandle(handle);
 | |
| 	}
 | |
| 
 | |
| 	return;
 | |
| }
 | |
| 
 |