// Set communication timeout void ser_set_timeout_ms( ser_handler id, u32 timeout ) { if( timeout == SER_NO_TIMEOUT ) ser_win32_set_timeouts( (HANDLE)id, MAXDWORD, 0, 0, 0, 0 ); else if( timeout == SER_INF_TIMEOUT ) ser_win32_set_timeouts( (HANDLE)id, 0, 0, 0, 0, 0 ); else ser_win32_set_timeouts( (HANDLE)id, 0, 0, timeout, 0, 0 ); }
// Helper: set communication timeout static int ser_set_timeout_ms( HANDLE hComm, u32 timeout ) { if( timeout == SER_NO_TIMEOUT ) return ser_win32_set_timeouts( hComm, MAXDWORD, 0, 0, 0, 0 ); else if( timeout == SER_INF_TIMEOUT ) return ser_win32_set_timeouts( hComm, 0, 0, 0, 0, 0 ); else return ser_win32_set_timeouts( hComm, 0, 0, timeout, 0, 0 ); }
int ser_setup( ser_handler id, u32 baud, int databits, int parity, int stopbits, int flow ) { HANDLE hComm = id->hnd; DCB dcb; dcb.DCBlength = sizeof(DCB); if( GetCommState( hComm, &dcb ) == FALSE ) { CloseHandle( hComm ); return SER_ERR; } dcb.BaudRate = baud; dcb.ByteSize = databits; dcb.Parity = parity == SER_PARITY_NONE ? NOPARITY : ( parity == SER_PARITY_EVEN ? EVENPARITY : ODDPARITY ); dcb.StopBits = stopbits == SER_STOPBITS_1 ? ONESTOPBIT : ( stopbits == SER_STOPBITS_1_5 ? ONE5STOPBITS : TWOSTOPBITS ); dcb.fBinary = TRUE; dcb.fDsrSensitivity = FALSE; dcb.fParity = parity != SER_PARITY_NONE ? TRUE : FALSE; dcb.fOutX = FALSE; dcb.fInX = FALSE; dcb.fNull = FALSE; /**/ dcb.fAbortOnError = FALSE; dcb.fOutxDsrFlow = FALSE; dcb.fDtrControl = DTR_CONTROL_DISABLE; dcb.fDsrSensitivity = FALSE; if( flow == SER_FLOW_NONE ) { dcb.fRtsControl = RTS_CONTROL_DISABLE; dcb.fOutxCtsFlow = FALSE; } else { dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; dcb.fOutxCtsFlow = TRUE; } if( SetCommState( hComm, &dcb ) == FALSE ) { CloseHandle( hComm ); return SER_ERR; } if( ser_win32_set_timeouts( hComm, 0, 0, 0, 0, 0 ) == SER_ERR ) { CloseHandle( hComm ); return SER_ERR; } FlushFileBuffers( hComm ); return SER_OK; }
int ser_setup( ser_handler id, u32 baud, int databits, int parity, int stopbits ) { HANDLE hComm = ( HANDLE )id; DCB dcb; if( GetCommState( hComm, &dcb ) == FALSE ) { CloseHandle( hComm ); return SER_ERR; } dcb.BaudRate = baud; dcb.ByteSize = databits; dcb.Parity = parity == SER_PARITY_NONE ? NOPARITY : ( parity == SER_PARITY_EVEN ? EVENPARITY : ODDPARITY ); dcb.StopBits = stopbits == SER_STOPBITS_1 ? ONESTOPBIT : ( stopbits == SER_STOPBITS_1_5 ? ONE5STOPBITS : TWOSTOPBITS ); dcb.fBinary = TRUE; dcb.fDsrSensitivity = FALSE; dcb.fParity = parity != SER_PARITY_NONE ? TRUE : FALSE; dcb.fOutX = FALSE; dcb.fInX = FALSE; dcb.fNull = FALSE; /**/ dcb.fAbortOnError = FALSE; dcb.fOutxCtsFlow = FALSE; dcb.fOutxDsrFlow = FALSE; // dcb.fDtrControl = DTR_CONTROL_DISABLE; -- prevents data being read with LM3S eval board dcb.fDsrSensitivity = FALSE; dcb.fRtsControl = RTS_CONTROL_DISABLE; dcb.fOutxCtsFlow = FALSE; if( !SetCommState( hComm, &dcb ) ) { CloseHandle( hComm ); return SER_ERR; } if( ser_win32_set_timeouts( hComm, 0, 0, 0, 0, 0 ) == SER_ERR ) { CloseHandle( hComm ); return SER_ERR; } FlushFileBuffers( hComm ); return SER_OK; }