+ DCB dcb;
+ if ( GetCommState( fd, &dcb ) ) {
+ dcb.BaudRate = baud;
+ dcb.fOutxCtsFlow = FALSE;
+ dcb.fOutxDsrFlow = FALSE;
+ dcb.fOutX = TRUE;
+ dcb.fInX = TRUE;
+
+ if ( !SetCommState( fd, &dcb ) ) {
+ LPVOID lpMsgBuf;
+ FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ GetLastError(),
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ (LPTSTR) &lpMsgBuf,
+ 0,
+ NULL );
+
+ SG_LOG( SG_IO, SG_ALERT, "Unable to update port settings: "
+ << (const char*) lpMsgBuf );
+ LocalFree( lpMsgBuf );
+ return false;
+ }
+ } else {
+ LPVOID lpMsgBuf;
+ FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ GetLastError(),
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ (LPTSTR) &lpMsgBuf,
+ 0,
+ NULL );
+
+ SG_LOG( SG_IO, SG_ALERT, "Unable to poll port settings: "
+ << (const char*) lpMsgBuf );
+ LocalFree( lpMsgBuf );
+ return false;
+ }
+