diff --git a/native/org.eclipse.cdt.native.serial/jni/serial.c b/native/org.eclipse.cdt.native.serial/jni/serial.c index be6c549b1e8..5e783b61c7f 100644 --- a/native/org.eclipse.cdt.native.serial/jni/serial.c +++ b/native/org.eclipse.cdt.native.serial/jni/serial.c @@ -26,6 +26,7 @@ #include #include #include +#include #else #define WIN32_LEAN_AND_MEAN #define UNICODE @@ -251,6 +252,32 @@ JNIEXPORT void JNICALL FUNC(close0)(JNIEnv *env, jobject jobj, jlong handle) #endif } +JNIEXPORT jint JNICALL FUNC(available0)(JNIEnv * env, jobject jobj, jlong jhandle) +{ +#ifndef __MINGW32__ + int result = 0; + if (ioctl(jhandle, FIONREAD, &result ) < 0) { + throwIOException(env, "Error calling ioctl"); + return 0; + } + return result; +#else + COMSTAT stat; + DWORD errCode; +#ifdef _WIN64 + HANDLE handle = (HANDLE)jhandle; +#else + HANDLE handle = (HANDLE)(unsigned)jhandle; +#endif + + if (ClearCommError(handle, &errCode, &stat) == 0) { + throwIOException(env, "Error calling ClearCommError"); + return -1; + } + return (int)stat.cbInQue; +#endif +} + JNIEXPORT jint JNICALL FUNC(read1)(JNIEnv * env, jobject jobj, jlong jhandle, jbyteArray bytes, jint offset, jint size) { #ifndef __MINGW32__ diff --git a/native/org.eclipse.cdt.native.serial/os/linux/x86_64/libserial.so b/native/org.eclipse.cdt.native.serial/os/linux/x86_64/libserial.so index 8d792d5a42a..3b73b67c7a9 100755 Binary files a/native/org.eclipse.cdt.native.serial/os/linux/x86_64/libserial.so and b/native/org.eclipse.cdt.native.serial/os/linux/x86_64/libserial.so differ diff --git a/native/org.eclipse.cdt.native.serial/os/macosx/x86_64/libserial.jnilib b/native/org.eclipse.cdt.native.serial/os/macosx/x86_64/libserial.jnilib index 2c88702add3..9904a219062 100755 Binary files a/native/org.eclipse.cdt.native.serial/os/macosx/x86_64/libserial.jnilib and b/native/org.eclipse.cdt.native.serial/os/macosx/x86_64/libserial.jnilib differ diff --git a/native/org.eclipse.cdt.native.serial/os/win32/x86_64/serial.dll b/native/org.eclipse.cdt.native.serial/os/win32/x86_64/serial.dll index 849ad95d566..d2f654037b5 100755 Binary files a/native/org.eclipse.cdt.native.serial/os/win32/x86_64/serial.dll and b/native/org.eclipse.cdt.native.serial/os/win32/x86_64/serial.dll differ diff --git a/native/org.eclipse.cdt.native.serial/src/org/eclipse/cdt/serial/SerialPort.java b/native/org.eclipse.cdt.native.serial/src/org/eclipse/cdt/serial/SerialPort.java index 0b8f071b8ec..672895179cc 100644 --- a/native/org.eclipse.cdt.native.serial/src/org/eclipse/cdt/serial/SerialPort.java +++ b/native/org.eclipse.cdt.native.serial/src/org/eclipse/cdt/serial/SerialPort.java @@ -131,6 +131,15 @@ public class SerialPort { public void close() throws IOException { SerialPort.this.close(); } + + @Override + public int available() throws IOException { + if (isOpen()) { + return available0(handle); + } else { + return 0; + } + } }; private OutputStream outputStream = new OutputStream() { @@ -208,6 +217,8 @@ public class SerialPort { private native int read1(long handle, byte[] b, int off, int len) throws IOException; + private native int available0(long handle) throws IOException; + private native void write0(long handle, int b) throws IOException; private native void write1(long handle, byte[] b, int off, int len) throws IOException;