From c856cc1ef4b705d34bc03ccc579511d568995d75 Mon Sep 17 00:00:00 2001 From: hedgecrw85 Date: Tue, 18 Feb 2020 12:14:37 -0600 Subject: [PATCH] Ensure data was actually received on waitForEvent on Windows --- src/main/c/Windows/SerialPort_Windows.c | 35 ++++++++++++++---- .../resources/Windows/x86/jSerialComm.dll | Bin 113152 -> 113664 bytes .../resources/Windows/x86_64/jSerialComm.dll | Bin 132096 -> 132608 bytes 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/main/c/Windows/SerialPort_Windows.c b/src/main/c/Windows/SerialPort_Windows.c index f77a9d7..f5405d3 100644 --- a/src/main/c/Windows/SerialPort_Windows.c +++ b/src/main/c/Windows/SerialPort_Windows.c @@ -527,7 +527,7 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configEventF // Get event flags from Java class int eventsToMonitor = env->GetIntField(obj, eventFlagsField); - int eventFlags = 0; + int eventFlags = EV_ERR; if (((eventsToMonitor & com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DATA_AVAILABLE) > 0) || ((eventsToMonitor & com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DATA_RECEIVED) > 0)) eventFlags |= EV_RXCHAR; @@ -566,7 +566,7 @@ JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_waitForEvent(JNI } // Wait for a serial port event - DWORD eventMask, numBytesRead, readResult = WAIT_FAILED; + DWORD eventMask = 0, numBytesRead, errorsMask, readResult = WAIT_FAILED; if (WaitCommEvent(serialPortHandle, &eventMask, &overlappedStruct) == FALSE) { if (GetLastError() != ERROR_IO_PENDING) // Problem occurred @@ -587,14 +587,29 @@ JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_waitForEvent(JNI readResult = WaitForSingleObject(overlappedStruct.hEvent, 750); continueWaiting = ((readResult == WAIT_TIMEOUT) && (env->GetIntField(obj, eventFlagsField) != 0)); } - if ((readResult != WAIT_OBJECT_0) || (GetOverlappedResult(serialPortHandle, &overlappedStruct, &numBytesRead, TRUE) == FALSE)) + if ((readResult != WAIT_OBJECT_0) || (GetOverlappedResult(serialPortHandle, &overlappedStruct, &numBytesRead, FALSE) == FALSE)) numBytesRead = 0; } } + // Ensure that new data actually was received + COMSTAT commInfo; + if (!ClearCommError(serialPortHandle, &errorsMask, &commInfo)) + { + // Problem detected, close port + int numRetries = 10; + PurgeComm(serialPortHandle, PURGE_RXABORT | PURGE_RXCLEAR | PURGE_TXABORT | PURGE_TXCLEAR); + while (env->GetBooleanField(obj, isOpenedField) && !CloseHandle(serialPortHandle) && (numRetries-- > 0)); + serialPortHandle = INVALID_HANDLE_VALUE; + env->SetLongField(obj, serialPortHandleField, -1l); + env->SetBooleanField(obj, isOpenedField, JNI_FALSE); + return -1; + } + numBytesRead = commInfo.cbInQue; + // Return type of event if successful CloseHandle(overlappedStruct.hEvent); - return ((eventMask & EV_RXCHAR) > 0) ? com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DATA_AVAILABLE : + return (((eventMask & EV_RXCHAR) > 0) && numBytesRead) ? com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DATA_AVAILABLE : (((eventMask & EV_TXEMPTY) > 0) ? com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DATA_WRITTEN : 0); } @@ -637,7 +652,8 @@ JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_bytesAvailable(J return -1; COMSTAT commInfo; - if (!ClearCommError(serialPortHandle, NULL, &commInfo)) + DWORD errorsMask; + if (!ClearCommError(serialPortHandle, &errorsMask, &commInfo)) { // Problem detected, close port int numRetries = 10; @@ -660,7 +676,8 @@ JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_bytesAwaitingWri return -1; COMSTAT commInfo; - if (!ClearCommError(serialPortHandle, NULL, &commInfo)) + DWORD errorsMask; + if (!ClearCommError(serialPortHandle, &errorsMask, &commInfo)) return -1; DWORD numBytesToWrite = commInfo.cbOutQue; @@ -676,7 +693,8 @@ JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_readBytes(JNIEnv // Check for a disconnected serial port COMSTAT commInfo; - if (!ClearCommError(serialPortHandle, NULL, &commInfo)) + DWORD errorsMask; + if (!ClearCommError(serialPortHandle, &errorsMask, &commInfo)) { // Problem detected, close port int numRetries = 10; @@ -738,7 +756,8 @@ JNIEXPORT jint JNICALL Java_com_fazecast_jSerialComm_SerialPort_writeBytes(JNIEn // Check for a disconnected serial port COMSTAT commInfo; - if (!ClearCommError(serialPortHandle, NULL, &commInfo)) + DWORD errorsMask; + if (!ClearCommError(serialPortHandle, &errorsMask, &commInfo)) { // Problem detected, close port int numRetries = 10; diff --git a/src/main/resources/Windows/x86/jSerialComm.dll b/src/main/resources/Windows/x86/jSerialComm.dll index 959d21df3f0add19b552be87f20943a27122bb7b..0f35915c95c5ff494d56646b6b9208a0fbc34b63 100644 GIT binary patch delta 11413 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 diff --git a/src/main/resources/Windows/x86_64/jSerialComm.dll b/src/main/resources/Windows/x86_64/jSerialComm.dll index 77cb54f3031202b0fc0e5380defd35fd259152c8..c2fcf94693c6cfb125fc06b2d9ea0637f97b586a 100644 GIT binary patch delta 21129 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 XAqlEXFS99%OrL@y^VwtOX!w5svEcE{ delta 20860 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