From 21e9cf9739f551b6d556b5eb0ab3948bc472949e Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Mon, 29 Oct 2007 10:45:35 +0000 Subject: [PATCH] Implemented the win32 serial_drain function using WaitCommEvent. --- serial_win32.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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; }