From 8ae6c186e2c63345ca1f2b1abacc3d84c8fe6840 Mon Sep 17 00:00:00 2001 From: hedgecrw85 Date: Wed, 28 Oct 2015 10:21:07 -0500 Subject: [PATCH] Updated to version 1.3.9. --- .../com/fazecast/jSerialComm/SerialPort.java | 234 +++++++++--------- 1 file changed, 117 insertions(+), 117 deletions(-) diff --git a/src/main/java/com/fazecast/jSerialComm/SerialPort.java b/src/main/java/com/fazecast/jSerialComm/SerialPort.java index ba43d5d..4b3a7ae 100644 --- a/src/main/java/com/fazecast/jSerialComm/SerialPort.java +++ b/src/main/java/com/fazecast/jSerialComm/SerialPort.java @@ -38,9 +38,9 @@ import java.util.Date; /** * This class provides native access to serial ports and devices without requiring external libraries or tools. - * + * * @author Will Hedgecock <will.hedgecock@fazecast.com> - * @version 1.3.8 + * @version 1.3.9 * @see java.io.InputStream * @see java.io.OutputStream */ @@ -56,10 +56,10 @@ public final class SerialPort String OS = System.getProperty("os.name").toLowerCase(); String libraryPath = "", fileName = ""; String tempFileDirectory = System.getProperty("java.io.tmpdir"); - if ((tempFileDirectory.charAt(tempFileDirectory.length()-1) != '\\') && + if ((tempFileDirectory.charAt(tempFileDirectory.length()-1) != '\\') && (tempFileDirectory.charAt(tempFileDirectory.length()-1) != '/')) tempFileDirectory += "/"; - + // Force remove any previous versions of this library File directory = new File(tempFileDirectory); if (directory.exists()) @@ -69,7 +69,7 @@ public final class SerialPort if (listing.isFile() && listing.toString().contains("jSerialComm")) listing.delete(); } - + // Determine Operating System and architecture if (System.getProperty("java.vm.vendor").toLowerCase().contains("android")) { @@ -91,7 +91,7 @@ public final class SerialPort buildPropertiesFile.close(); } catch (Exception e) { e.printStackTrace(); } - + if (libraryPath.isEmpty()) libraryPath = "Android/armeabi"; isAndroid = true; @@ -135,11 +135,11 @@ public final class SerialPort cpuPropertiesFile.close(); } catch (Exception e) { e.printStackTrace(); } - + // Ensure that there was no error if (libraryPath.isEmpty()) libraryPath = "Linux/armv6"; - + // See if we need to use the hard-float dynamic linker File linkerFile = new File("/lib/ld-linux-armhf.so.3"); if (linkerFile.exists()) @@ -157,7 +157,7 @@ public final class SerialPort System.err.println("This operating system is not supported by the jSerialComm library."); System.exit(-1); } - + // Get path of native library and copy file to working directory String tempFileName = tempFileDirectory + (new Date()).getTime() + "-" + fileName; File tempNativeLibrary = new File(tempFileName); @@ -168,20 +168,20 @@ public final class SerialPort FileOutputStream destinationFileContents = new FileOutputStream(tempNativeLibrary); byte transferBuffer[] = new byte[4096]; int numBytesRead; - + while ((numBytesRead = fileContents.read(transferBuffer)) > 0) destinationFileContents.write(transferBuffer, 0, numBytesRead); - + fileContents.close(); destinationFileContents.close(); } catch (Exception e) { e.printStackTrace(); } - + // Load native library System.load(tempFileName); initializeLibrary(); } - + /** * Returns a list of all available serial ports on this machine. *

@@ -190,17 +190,17 @@ public final class SerialPort * Note that the {@link #openPort()} method must be called before any attempts to read from or write to the port. Likewise, {@link #closePort()} should be called when you are finished accessing the port. *

* All serial port parameters or timeouts can be changed at any time after the port has been opened. - * + * * @return An array of {@link SerialPort} objects. */ static public native SerialPort[] getCommPorts(); - + /** * Allocates a {@link SerialPort} object corresponding to the user-specified port descriptor. *

* On Windows machines, this descriptor should be in the form of "COM[*]".
* On Linux machines, the descriptor will look similar to "/dev/tty[*]". - * + * * @param portDescriptor The desired serial port to use with this library. * @return A SerialPort object. */ @@ -213,15 +213,15 @@ public final class SerialPort portDescriptor = "/dev/pts/" + portDescriptor.substring(portDescriptor.lastIndexOf('/')+1); else portDescriptor = "/dev/" + portDescriptor.substring(portDescriptor.lastIndexOf('/')+1); - + // Create SerialPort object SerialPort serialPort = new SerialPort(); serialPort.comPort = portDescriptor; serialPort.portString = "User-Specified Port"; - + return serialPort; } - + // Parity Values static final public int NO_PARITY = 0; static final public int ODD_PARITY = 1; @@ -233,7 +233,7 @@ public final class SerialPort static final public int ONE_STOP_BIT = 1; static final public int ONE_POINT_FIVE_STOP_BITS = 2; static final public int TWO_STOP_BITS = 3; - + // Flow Control constants static final public int FLOW_CONTROL_DISABLED = 0x00000000; static final public int FLOW_CONTROL_RTS_ENABLED = 0x00000001; @@ -242,7 +242,7 @@ public final class SerialPort static final public int FLOW_CONTROL_DTR_ENABLED = 0x00001000; static final public int FLOW_CONTROL_XONXOFF_IN_ENABLED = 0x00010000; static final public int FLOW_CONTROL_XONXOFF_OUT_ENABLED = 0x00100000; - + // Timeout Modes static final public int TIMEOUT_NONBLOCKING = 0x00000000; static final public int TIMEOUT_READ_SEMI_BLOCKING = 0x00000001; @@ -250,12 +250,12 @@ public final class SerialPort static final public int TIMEOUT_READ_BLOCKING = 0x00000100; static final public int TIMEOUT_WRITE_BLOCKING = 0x00001000; static final public int TIMEOUT_SCANNER = 0x00010000; - + // Serial Port Listening Events static final public int LISTENING_EVENT_DATA_AVAILABLE = 0x00000001; static final public int LISTENING_EVENT_DATA_RECEIVED = 0x00000010; static final public int LISTENING_EVENT_DATA_WRITTEN = 0x00000100; - + // Serial Port Parameters private volatile long portHandle = -1; private volatile int baudRate = 9600, dataBits = 8, stopBits = ONE_STOP_BIT, parity = NO_PARITY, eventFlags = 0; @@ -266,7 +266,7 @@ public final class SerialPort private volatile SerialPortEventListener serialEventListener = null; private volatile String portString, comPort; private volatile boolean isOpened = false; - + /** * Opens this serial port for reading and writing. *

@@ -281,7 +281,7 @@ public final class SerialPort // Return true if already opened if (isOpened) return true; - + // If this is an Android root application, we must explicitly allow serial port access to the library if (isAndroid) { @@ -312,7 +312,7 @@ public final class SerialPort try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); return false; } } } - + try { Thread.sleep(500); } catch (Exception e) { e.printStackTrace(); } if ((portHandle = openPortNative()) > 0) { @@ -323,7 +323,7 @@ public final class SerialPort } return isOpened; } - + /** * Closes this serial port. *

@@ -343,14 +343,14 @@ public final class SerialPort } return !isOpened; } - + /** * Returns whether the port is currently open and available for communication. - * + * * @return Whether the port is opened. */ public final boolean isOpen() { return isOpened; } - + // Serial Port Setup Methods private static native void initializeLibrary(); // Initializes the JNI code private static native void uninitializeLibrary(); // Un-initializes the JNI code @@ -364,48 +364,48 @@ public final class SerialPort private final native int bytesAvailable(long portHandle); // Returns number of bytes available for reading private final native int readBytes(long portHandle, byte[] buffer, long bytesToRead); // Reads bytes from serial port private final native int writeBytes(long portHandle, byte[] buffer, long bytesToWrite); // Write bytes to serial port - + /** * Returns the number of bytes available without blocking if {@link #readBytes} were to be called immediately * after this method returns. - * + * * @return The number of bytes currently available to be read, or -1 if the port is not open. */ public final int bytesAvailable() { return bytesAvailable(portHandle); } - + /** * Reads up to bytesToRead raw data bytes from the serial port and stores them in the buffer. *

* The length of the byte buffer must be greater than or equal to the value passed in for bytesToRead *

* If no timeouts were specified or the read timeout was set to 0, this call will block until bytesToRead bytes of data have been successfully read from the serial port. - * Otherwise, this method will return after bytesToRead bytes of data have been read or the number of milliseconds specified by the read timeout have elapsed, + * Otherwise, this method will return after bytesToRead bytes of data have been read or the number of milliseconds specified by the read timeout have elapsed, * whichever comes first, regardless of the availability of more data. - * + * * @param buffer The buffer into which the raw data is read. * @param bytesToRead The number of bytes to read from the serial port. * @return The number of bytes successfully read, or -1 if there was an error reading from the port. */ public final int readBytes(byte[] buffer, long bytesToRead) { return readBytes(portHandle, buffer, bytesToRead); } - + /** * Writes up to bytesToWrite raw data bytes from the buffer parameter to the serial port. *

* The length of the byte buffer must be greater than or equal to the value passed in for bytesToWrite *

* If no timeouts were specified or the write timeout was set to 0, this call will block until bytesToWrite bytes of data have been successfully written the serial port. - * Otherwise, this method will return after bytesToWrite bytes of data have been written or the number of milliseconds specified by the write timeout have elapsed, + * Otherwise, this method will return after bytesToWrite bytes of data have been written or the number of milliseconds specified by the write timeout have elapsed, * whichever comes first, regardless of the availability of more data. - * + * * @param buffer The buffer containing the raw data to write to the serial port. * @param bytesToWrite The number of bytes to write to the serial port. * @return The number of bytes successfully written, or -1 if there was an error writing to the port. */ public final int writeBytes(byte[] buffer, long bytesToWrite) { return writeBytes(portHandle, buffer, bytesToWrite); } - + // Default Constructor private SerialPort() {} - + /** * Adds a {@link SerialPortDataListener} to the serial port interface. *

@@ -417,7 +417,7 @@ public final class SerialPort *

* Only one listener can be registered at a time; however, that listener can be used to detect multiple types of serial port events. * Refer to {@link SerialPortDataListener} and {@link SerialPortPacketListener} for more information. - * + * * @param listener A {@link SerialPortDataListener} or {@link SerialPortPacketListener}implementation to be used for event-based serial port communications. * @return Whether the listener was successfully registered with the serial port. * @see SerialPortDataListener @@ -430,7 +430,7 @@ public final class SerialPort userDataListener = listener; serialEventListener = new SerialPortEventListener((userDataListener instanceof SerialPortPacketListener) ? ((SerialPortPacketListener)userDataListener).getPacketSize() : 0); - + eventFlags = 0; if ((listener.getListeningEvents() & LISTENING_EVENT_DATA_AVAILABLE) > 0) eventFlags |= LISTENING_EVENT_DATA_AVAILABLE; @@ -438,7 +438,7 @@ public final class SerialPort eventFlags |= LISTENING_EVENT_DATA_RECEIVED; if ((listener.getListeningEvents() & LISTENING_EVENT_DATA_WRITTEN) > 0) eventFlags |= LISTENING_EVENT_DATA_WRITTEN; - + if (isOpened) { configEventFlags(portHandle); @@ -446,7 +446,7 @@ public final class SerialPort } return true; } - + /** * Removes the associated {@link SerialPortDataListener} from the serial port interface. */ @@ -458,36 +458,36 @@ public final class SerialPort serialEventListener = null; } userDataListener = null; - + eventFlags = 0; if (isOpened) configEventFlags(portHandle); } - + /** * Returns an {@link java.io.InputStream} object associated with this serial port. *

* Allows for easier read access of the underlying data stream and abstracts away many low-level read details. *

* Make sure to call the {@link java.io.InputStream#close()} method when you are done using this stream. - * + * * @return An {@link java.io.InputStream} object associated with this serial port. * @see java.io.InputStream */ public final InputStream getInputStream() { return inputStream; } - + /** * Returns an {@link java.io.OutputStream} object associated with this serial port. *

* Allows for easier write access to the underlying data stream and abstracts away many low-level writing details. *

* Make sure to call the {@link java.io.OutputStream#close()} method when you are done using this stream. - * + * * @return An {@link java.io.OutputStream} object associated with this serial port. * @see java.io.OutputStream */ public final OutputStream getOutputStream() { return outputStream; } - + /** * Sets all serial port parameters at one time. *

@@ -501,7 +501,7 @@ public final class SerialPort *

* The parity parameter specifies how error detection is carried out. Again, the built-in constants should be used. * Acceptable values are {@link #NO_PARITY}, {@link #EVEN_PARITY}, {@link #ODD_PARITY}, {@link #MARK_PARITY}, and {@link #SPACE_PARITY}. - * + * * @param newBaudRate The desired baud rate for this serial port. * @param newDataBits The number of data bits to use per word. * @param newStopBits The number of stop bits to use. @@ -521,20 +521,20 @@ public final class SerialPort dataBits = newDataBits; stopBits = newStopBits; parity = newParity; - + if (isOpened) { try { Thread.sleep(200); } catch (Exception e) {} configPort(portHandle); } } - + /** * Sets the serial port read and write timeout parameters. *

* Note that write timeouts are only available on Windows-based systems. There is no functionality to set a write timeout on other operating systems. *

- * The built-in timeout mode constants should be used ({@link #TIMEOUT_NONBLOCKING}, {@link #TIMEOUT_READ_SEMI_BLOCKING}, + * The built-in timeout mode constants should be used ({@link #TIMEOUT_NONBLOCKING}, {@link #TIMEOUT_READ_SEMI_BLOCKING}, * {@link #TIMEOUT_WRITE_SEMI_BLOCKING}, {@link #TIMEOUT_READ_BLOCKING}, {@link #TIMEOUT_WRITE_BLOCKING}, {@link #TIMEOUT_SCANNER}) to specify how * timeouts are to be handled. *

@@ -552,23 +552,23 @@ public final class SerialPort * The {@link #TIMEOUT_NONBLOCKING} mode specifies that the corresponding {@link #readBytes(byte[],long)} or {@link #writeBytes(byte[],long)} call * will return immediately with any available data. *

- * The {@link #TIMEOUT_READ_SEMI_BLOCKING} or {@link #TIMEOUT_WRITE_SEMI_BLOCKING} modes specify that the corresponding calls will block until either + * The {@link #TIMEOUT_READ_SEMI_BLOCKING} or {@link #TIMEOUT_WRITE_SEMI_BLOCKING} modes specify that the corresponding calls will block until either * newReadTimeout or newWriteTimeout milliseconds of inactivity have elapsed or at least 1 byte of data can be written or read. *

* The {@link #TIMEOUT_READ_BLOCKING} or {@link #TIMEOUT_WRITE_BLOCKING} modes specify that the corresponding call will block until either - * newReadTimeout or newWriteTimeout milliseconds have elapsed since the start of the call or the total number of requested bytes can be written or + * newReadTimeout or newWriteTimeout milliseconds have elapsed since the start of the call or the total number of requested bytes can be written or * returned. *

* The {@link #TIMEOUT_SCANNER} mode is intended for use with the Java {@link java.util.Scanner} class for reading from the serial port. In this mode, * manually specified timeouts are ignored to ensure compatibility with the Java specification. *

- * A value of 0 for either newReadTimeout or newWriteTimeout indicates that a {@link #readBytes(byte[],long)} or + * A value of 0 for either newReadTimeout or newWriteTimeout indicates that a {@link #readBytes(byte[],long)} or * {@link #writeBytes(byte[],long)} call should block forever until it can return successfully (based upon the current timeout mode specified). *

- * It is important to note that non-Windows operating systems only allow decisecond (1/10th of a second) granularity for serial port timeouts. As such, your + * It is important to note that non-Windows operating systems only allow decisecond (1/10th of a second) granularity for serial port timeouts. As such, your * millisecond timeout value will be rounded to the nearest decisecond under Linux or Mac OS. To ensure consistent performance across multiple platforms, it is * advisable that you set your timeout values to be multiples of 100, although this is not strictly enforced. - * + * * @param newTimeoutMode The new timeout mode as specified above. * @param newReadTimeout The number of milliseconds of inactivity to tolerate before returning from a {@link #readBytes(byte[],long)} call. * @param newWriteTimeout The number of milliseconds of inactivity to tolerate before returning from a {@link #writeBytes(byte[],long)} call. @@ -583,50 +583,50 @@ public final class SerialPort } else readTimeout = Math.round((float)newReadTimeout / 100.0f) * 100; - + if (isOpened) { try { Thread.sleep(200); } catch (Exception e) {} configTimeouts(portHandle); } } - + /** * Sets the desired baud rate for this serial port. *

* The default baud rate is 9600 baud. - * + * * @param newBaudRate The desired baud rate for this serial port. */ public final void setBaudRate(int newBaudRate) { baudRate = newBaudRate; - + if (isOpened) { try { Thread.sleep(200); } catch (Exception e) {} configPort(portHandle); } } - + /** * Sets the desired number of data bits per word. *

* The default number of data bits per word is 8. - * + * * @param newDataBits The desired number of data bits per word. */ public final void setNumDataBits(int newDataBits) { dataBits = newDataBits; - + if (isOpened) { try { Thread.sleep(200); } catch (Exception e) {} configPort(portHandle); } } - + /** * Sets the desired number of stop bits per word. *

@@ -634,7 +634,7 @@ public final class SerialPort * in this method ({@link #ONE_STOP_BIT}, {@link #ONE_POINT_FIVE_STOP_BITS}, {@link #TWO_STOP_BITS}). *

* Note that {@link #ONE_POINT_FIVE_STOP_BITS} stop bits may not be available on non-Windows systems. - * + * * @param newStopBits The desired number of stop bits per word. * @see #ONE_STOP_BIT * @see #ONE_POINT_FIVE_STOP_BITS @@ -643,14 +643,14 @@ public final class SerialPort public final void setNumStopBits(int newStopBits) { stopBits = newStopBits; - + if (isOpened) { try { Thread.sleep(200); } catch (Exception e) {} configPort(portHandle); } } - + /** * Specifies what kind of flow control to enable for this serial port. *

@@ -675,7 +675,7 @@ public final class SerialPort *      Windows: CTS, RTS/CTS, DSR, DTR/DSR, Xon, Xoff, Xon/Xoff
*      Mac: RTS/CTS, Xon, Xoff, Xon/Xoff
*      Linux: RTS/CTS, Xon, Xoff, Xon/Xoff - * + * * @param newFlowControlSettings The desired type of flow control to enable for this serial port. * @see #FLOW_CONTROL_DISABLED * @see #FLOW_CONTROL_RTS_ENABLED @@ -688,20 +688,20 @@ public final class SerialPort public final void setFlowControl(int newFlowControlSettings) { flowControl = newFlowControlSettings; - + if (isOpened) { try { Thread.sleep(200); } catch (Exception e) {} configFlowControl(portHandle); } } - + /** * Sets the desired parity error-detection scheme to be used. *

* The parity parameter specifies how error detection is carried out. The built-in parity constants should be used. * Acceptable values are {@link #NO_PARITY}, {@link #EVEN_PARITY}, {@link #ODD_PARITY}, {@link #MARK_PARITY}, and {@link #SPACE_PARITY}. - * + * * @param newParity The desired parity scheme to be used. * @see #NO_PARITY * @see #EVEN_PARITY @@ -712,64 +712,64 @@ public final class SerialPort public final void setParity(int newParity) { parity = newParity; - + if (isOpened) { try { Thread.sleep(200); } catch (Exception e) {} configPort(portHandle); } } - + /** * Gets a descriptive string representing this serial port or the device connected to it. *

* This description is generated by the operating system and may or may not be a good representation of the actual port or * device it describes. - * + * * @return A descriptive string representing this serial port. */ public final String getDescriptivePortName() { return portString.trim(); } - + /** * Gets the operating system-defined device name corresponding to this serial port. - * + * * @return The system-defined device name of this serial port. */ public final String getSystemPortName() { return (isWindows ? comPort.substring(comPort.lastIndexOf('\\')+1) : comPort.substring(comPort.lastIndexOf('/')+1)); } - + /** * Gets the current baud rate of the serial port. - * + * * @return The current baud rate of the serial port. */ public final int getBaudRate() { return baudRate; } - + /** * Gets the current number of data bits per word. - * + * * @return The current number of data bits per word. */ public final int getNumDataBits() { return dataBits; } - + /** * Gets the current number of stop bits per word. *

* The return value should not be interpreted as an integer, but rather compared with the built-in stop bit constants * ({@link #ONE_STOP_BIT}, {@link #ONE_POINT_FIVE_STOP_BITS}, {@link #TWO_STOP_BITS}). - * + * * @return The current number of stop bits per word. * @see #ONE_STOP_BIT * @see #ONE_POINT_FIVE_STOP_BITS * @see #TWO_STOP_BITS */ public final int getNumStopBits() { return stopBits; } - + /** * Gets the current parity error-checking scheme. *

* The return value should not be interpreted as an integer, but rather compared with the built-in parity constants * ({@link #NO_PARITY}, {@link #EVEN_PARITY}, {@link #ODD_PARITY}, {@link #MARK_PARITY}, and {@link #SPACE_PARITY}). - * + * * @return The current parity scheme. * @see #NO_PARITY * @see #EVEN_PARITY @@ -778,7 +778,7 @@ public final class SerialPort * @see #SPACE_PARITY */ public final int getParity() { return parity; } - + /** * Gets the number of milliseconds of inactivity to tolerate before returning from a {@link #readBytes(byte[],long)} call. *

@@ -787,11 +787,11 @@ public final class SerialPort *

* Any value other than 0 indicates the number of milliseconds of inactivity that will be tolerated before the {@link #readBytes(byte[],long)} * call will return. - * + * * @return The number of milliseconds of inactivity to tolerate before returning from a {@link #readBytes(byte[],long)} call. */ public final int getReadTimeout() { return readTimeout; } - + /** * Gets the number of milliseconds of inactivity to tolerate before returning from a {@link #writeBytes(byte[],long)} call. *

@@ -802,11 +802,11 @@ public final class SerialPort * call will return. *

* Note that write timeouts are only available on Windows operating systems. This value is ignored on all other systems. - * + * * @return The number of milliseconds of inactivity to tolerate before returning from a {@link #writeBytes(byte[],long)} call. */ public final int getWriteTimeout() { return writeTimeout; } - + /** * Returns the flow control settings enabled on this serial port. *

@@ -825,7 +825,7 @@ public final class SerialPort *      Windows: CTS, RTS/CTS, DSR, DTR/DSR, Xon, Xoff, Xon/Xoff
*      Mac: RTS/CTS, Xon, Xoff, Xon/Xoff
*      Linux: RTS/CTS, Xon, Xoff, Xon/Xoff - * + * * @return The flow control settings enabled on this serial port. * @see #FLOW_CONTROL_DISABLED * @see #FLOW_CONTROL_RTS_ENABLED @@ -836,7 +836,7 @@ public final class SerialPort * @see #FLOW_CONTROL_XONXOFF_OUT_ENABLED */ public final int getFlowControlSettings() { return flowControl; } - + // Private EventListener class private final class SerialPortEventListener { @@ -844,15 +844,15 @@ public final class SerialPort private final byte[] dataPacket; private volatile int dataPacketIndex = 0; private Thread serialEventThread = null; - + public SerialPortEventListener(int packetSizeToReceive) { dataPacket = new byte[packetSizeToReceive]; } - + public final void startListening() { if (isListening) return; isListening = true; - + dataPacketIndex = 0; serialEventThread = new Thread(new Runnable() { @Override @@ -864,13 +864,13 @@ public final class SerialPort }); serialEventThread.start(); } - + public final void stopListening() { if (!isListening) return; isListening = false; - + int oldEventFlags = eventFlags; eventFlags = 0; configEventFlags(portHandle); @@ -878,7 +878,7 @@ public final class SerialPort serialEventThread = null; eventFlags = oldEventFlags; } - + public final void waitForSerialEvent() throws NullPointerException { switch (waitForEvent(portHandle)) @@ -923,27 +923,27 @@ public final class SerialPort } } } - + // InputStream interface class private final class SerialPortInputStream extends InputStream { public SerialPortInputStream() {} - + @Override public final int available() throws IOException { if (!isOpened) throw new IOException("This port appears to have been shutdown or disconnected."); - + return bytesAvailable(portHandle); } - + @Override public final int read() throws IOException { byte[] buffer = new byte[1]; int bytesRead; - + while (isOpened) { bytesRead = readBytes(portHandle, buffer, 1l); @@ -953,13 +953,13 @@ public final class SerialPort } throw new IOException("This port appears to have been shutdown or disconnected."); } - + @Override public final int read(byte[] b) throws IOException { return read(b, 0, b.length); } - + @Override public final int read(byte[] b, int off, int len) throws IOException { @@ -967,55 +967,55 @@ public final class SerialPort throw new IOException("This port appears to have been shutdown or disconnected."); if (len == 0) return 0; - + byte[] buffer = new byte[len]; int numRead = readBytes(portHandle, buffer, len); if (numRead > 0) System.arraycopy(buffer, 0, b, off, numRead); - + return numRead; } - + @Override public final long skip(long n) throws IOException { if (!isOpened) throw new IOException("This port appears to have been shutdown or disconnected."); - + byte[] buffer = new byte[(int)n]; return readBytes(portHandle, buffer, n); } } - + // OutputStream interface class private final class SerialPortOutputStream extends OutputStream { public SerialPortOutputStream() {} - + @Override public final void write(int b) throws IOException { if (!isOpened) throw new IOException("This port appears to have been shutdown or disconnected."); - + byte[] buffer = new byte[1]; buffer[0] = (byte)(b & 0x000000FF); if (writeBytes(portHandle, buffer, 1l) < 0) throw new IOException("This port appears to have been shutdown or disconnected."); } - + @Override public final void write(byte[] b) throws IOException { write(b, 0, b.length); } - + @Override public final void write(byte[] b, int off, int len) throws IOException { if (!isOpened) throw new IOException("This port appears to have been shutdown or disconnected."); - + byte[] buffer = new byte[len]; System.arraycopy(b, off, buffer, 0, len); if (writeBytes(portHandle, buffer, len) < 0)