From aa312b3a7545d24ea472812d9717a8748a8b1dc3 Mon Sep 17 00:00:00 2001 From: hedgecrw85 Date: Tue, 3 Apr 2018 11:57:48 -0500 Subject: [PATCH] No need for Java to load FTDI library --- build.gradle | 2 +- .../com/fazecast/jSerialComm/SerialPort.java | 35 +++++++++---------- .../jSerialComm/SerialPortDataListener.java | 2 +- .../fazecast/jSerialComm/SerialPortEvent.java | 2 +- .../jSerialComm/SerialPortPacketListener.java | 2 +- 5 files changed, 21 insertions(+), 22 deletions(-) diff --git a/build.gradle b/build.gradle index 8a5c90b..7d45ff5 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'osgi' group = 'com.fazecast' archivesBaseName = 'jSerialComm' -version = '2.0.1' +version = '2.0.2' ext.moduleName = 'com.fazecast.jSerialComm' assert hasProperty('java6Home'): "Set the property 'java6Home' in your gradle.properties file pointing to a Java 6 JDK installation" diff --git a/src/main/java/com/fazecast/jSerialComm/SerialPort.java b/src/main/java/com/fazecast/jSerialComm/SerialPort.java index 221aa87..fadc14d 100644 --- a/src/main/java/com/fazecast/jSerialComm/SerialPort.java +++ b/src/main/java/com/fazecast/jSerialComm/SerialPort.java @@ -42,7 +42,7 @@ 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 2.0.1 + * @version 2.0.2 * @see java.io.InputStream * @see java.io.OutputStream */ @@ -181,20 +181,16 @@ public final class SerialPort } // Get path of native library and copy file to working directory - String tempFileName = tempFileDirectory + (new Date()).getTime() + "-" + fileName, ftdiFileName = ""; - File tempNativeLibrary = new File(tempFileName), tempFtdiLibrary = null; + String tempFileName = tempFileDirectory + (new Date()).getTime() + "-" + fileName; + File tempNativeLibrary = new File(tempFileName); tempNativeLibrary.deleteOnExit(); - if (isWindows) - { - ftdiFileName = tempFileDirectory + "ftd2xx.dll"; - tempFtdiLibrary = new File(ftdiFileName); - tempFtdiLibrary.deleteOnExit(); - } try { - // Load the FTDI library if on Windows + // Copy the FTDI driver library to the system temp directory if on Windows if (isWindows) { + String ftdiFileName = tempFileDirectory + "ftd2xx.dll"; + File tempFtdiLibrary = new File(ftdiFileName); InputStream ftdiContents = SerialPort.class.getResourceAsStream("/" + libraryPath + "/ftd2xx.dll"); if (ftdiContents != null) { @@ -211,7 +207,6 @@ public final class SerialPort catch (FileNotFoundException e) {}; ftdiContents.close(); } - System.load(ftdiFileName); } // Load the native jSerialComm library @@ -223,15 +218,19 @@ public final class SerialPort } else { - FileOutputStream destinationFileContents = new FileOutputStream(tempNativeLibrary); - byte transferBuffer[] = new byte[4096]; - int numBytesRead; - - while ((numBytesRead = fileContents.read(transferBuffer)) > 0) - destinationFileContents.write(transferBuffer, 0, numBytesRead); + // Copy the native library to the system temp directory + try + { + FileOutputStream destinationFileContents = new FileOutputStream(tempNativeLibrary); + byte transferBuffer[] = new byte[4096]; + int numBytesRead; + while ((numBytesRead = fileContents.read(transferBuffer)) > 0) + destinationFileContents.write(transferBuffer, 0, numBytesRead); + destinationFileContents.close(); + } + catch (FileNotFoundException e) {}; fileContents.close(); - destinationFileContents.close(); // Load and initialize native library System.load(tempFileName); diff --git a/src/main/java/com/fazecast/jSerialComm/SerialPortDataListener.java b/src/main/java/com/fazecast/jSerialComm/SerialPortDataListener.java index 79703a6..ce96328 100644 --- a/src/main/java/com/fazecast/jSerialComm/SerialPortDataListener.java +++ b/src/main/java/com/fazecast/jSerialComm/SerialPortDataListener.java @@ -31,7 +31,7 @@ import java.util.EventListener; * This interface must be implemented to enable simple event-based serial port I/O. * * @author Will Hedgecock <will.hedgecock@fazecast.com> - * @version 2.0.1 + * @version 2.0.2 * @see java.util.EventListener */ public interface SerialPortDataListener extends EventListener diff --git a/src/main/java/com/fazecast/jSerialComm/SerialPortEvent.java b/src/main/java/com/fazecast/jSerialComm/SerialPortEvent.java index 4537fc0..3518176 100644 --- a/src/main/java/com/fazecast/jSerialComm/SerialPortEvent.java +++ b/src/main/java/com/fazecast/jSerialComm/SerialPortEvent.java @@ -31,7 +31,7 @@ import java.util.EventObject; * This class describes an asynchronous serial port event. * * @author Will Hedgecock <will.hedgecock@fazecast.com> - * @version 2.0.1 + * @version 2.0.2 * @see java.util.EventObject */ public final class SerialPortEvent extends EventObject diff --git a/src/main/java/com/fazecast/jSerialComm/SerialPortPacketListener.java b/src/main/java/com/fazecast/jSerialComm/SerialPortPacketListener.java index 210aced..6bed11b 100644 --- a/src/main/java/com/fazecast/jSerialComm/SerialPortPacketListener.java +++ b/src/main/java/com/fazecast/jSerialComm/SerialPortPacketListener.java @@ -31,7 +31,7 @@ package com.fazecast.jSerialComm; * Note: Using this interface will negate any serial port read timeout settings since they make no sense in an asynchronous context. * * @author Will Hedgecock <will.hedgecock@fazecast.com> - * @version 2.0.1 + * @version 2.0.2 * @see com.fazecast.jSerialComm.SerialPortDataListener * @see java.util.EventListener */