diff --git a/serial_win32.c b/serial_win32.c index 3439f47..2a224d5 100644 --- a/serial_win32.c +++ b/serial_win32.c @@ -105,6 +105,14 @@ serial_open (serial** out, const char* name) return -1; } + // Set the event mask for the drain function. + if (!SetCommMask (device->hFile, EV_TXEMPTY)) { + TRACE ("SetCommMask"); + CloseHandle (device->hFile); + free (device); + return -1; + } + *out = device; return 0; @@ -376,6 +384,17 @@ serial_drain (serial* device) if (device == NULL) return -1; // ERROR_INVALID_PARAMETER (The parameter is incorrect) + BOOL rc = 0; + DWORD mask = 0; + do { + rc = WaitCommEvent (device->hFile, &mask, NULL); + } while ( rc && !(mask & EV_TXEMPTY) ); + + if (!rc) { + TRACE ("WaitCommEvent"); + return -1; + } + return 0; }