From 9544ad46cd153073beba0ea6d9320f374fc7e27b Mon Sep 17 00:00:00 2001 From: Alexey Sokolov Date: Mon, 22 Apr 2013 10:19:21 +0300 Subject: [PATCH] Windows native part. Added using of "ERR_INCORRECT_SERIAL_PORT", checking the DCB structure on port opening like in _nix based version and a little refactoring was made --- src/cpp/windows/jssc.c++ | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/cpp/windows/jssc.c++ b/src/cpp/windows/jssc.c++ index c1e9f1b..285117f 100644 --- a/src/cpp/windows/jssc.c++ +++ b/src/cpp/windows/jssc.c++ @@ -44,27 +44,33 @@ JNIEXPORT jint JNICALL Java_jssc_SerialNativeInterface_openPort(JNIEnv *env, job strcat(portFullName, port); //<- since 2.1.0 - HANDLE hComm; - hComm = CreateFile(portFullName, - GENERIC_READ | GENERIC_WRITE, - 0, - 0, - OPEN_EXISTING, - FILE_FLAG_OVERLAPPED, - 0); + HANDLE hComm = CreateFile(portFullName, + GENERIC_READ | GENERIC_WRITE, + 0, + 0, + OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, + 0); env->ReleaseStringUTFChars(portName, port); - //since 0.9 -> - if(hComm == INVALID_HANDLE_VALUE){ + //since 2.3.0 -> + if(hComm != INVALID_HANDLE_VALUE){ + DCB *dcb = new DCB(); + if(!GetCommState(hComm, dcb)){ + hComm = (HANDLE)jssc_SerialNativeInterface_ERR_INCORRECT_SERIAL_PORT;//(-4)Incorrect serial port + } + delete dcb; + } + else { DWORD errorValue = GetLastError(); if(errorValue == ERROR_ACCESS_DENIED){ - hComm = (HANDLE)-1;//Port busy + hComm = (HANDLE)jssc_SerialNativeInterface_ERR_PORT_BUSY;//(-1)Port busy } else if(errorValue == ERROR_FILE_NOT_FOUND){ - hComm = (HANDLE)-2;//Port not found + hComm = (HANDLE)jssc_SerialNativeInterface_ERR_PORT_NOT_FOUND;//(-2)Port not found } } - //<- since 0.9 + //<- since 2.3.0 #if defined(_X86_) return (jint)hComm; #elif defined(__x86_64)