From bc7cd0fe79953af39ec183c1ae64a55dfb46451f Mon Sep 17 00:00:00 2001 From: gohai Date: Fri, 14 Feb 2014 12:17:41 -0800 Subject: [PATCH 1/9] Support cu.* devices on OS X Opening /dev/cu.* doesn't require DCD to be asserted and succeeds immediately. --- src/java/jssc/SerialPortList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/jssc/SerialPortList.java b/src/java/jssc/SerialPortList.java index 5af9a95ea0..89d134e2e8 100644 --- a/src/java/jssc/SerialPortList.java +++ b/src/java/jssc/SerialPortList.java @@ -53,7 +53,7 @@ public class SerialPortList { break; } case SerialNativeInterface.OS_MAC_OS_X: { - PORTNAMES_REGEXP = Pattern.compile("tty.(serial|usbserial|usbmodem).*"); + PORTNAMES_REGEXP = Pattern.compile("(cu|tty).(serial|usbserial|usbmodem).*"); PORTNAMES_PATH = "/dev/"; break; } From ec95367f5fdab32ad0173faba89999005243ced1 Mon Sep 17 00:00:00 2001 From: gohai Date: Fri, 14 Feb 2014 12:20:07 -0800 Subject: [PATCH 2/9] Support all cu.* & tty.* devices on OS X This includes /dev/tty.Bluetooth-Modem and friends. --- src/java/jssc/SerialPortList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/jssc/SerialPortList.java b/src/java/jssc/SerialPortList.java index 89d134e2e8..188905737a 100644 --- a/src/java/jssc/SerialPortList.java +++ b/src/java/jssc/SerialPortList.java @@ -53,7 +53,7 @@ public class SerialPortList { break; } case SerialNativeInterface.OS_MAC_OS_X: { - PORTNAMES_REGEXP = Pattern.compile("(cu|tty).(serial|usbserial|usbmodem).*"); + PORTNAMES_REGEXP = Pattern.compile("(cu|tty)\\..+"); PORTNAMES_PATH = "/dev/"; break; } From 6c55bb04cf6271ec89d5878ef945c1c22da49ffa Mon Sep 17 00:00:00 2001 From: gohai Date: Fri, 14 Feb 2014 12:22:46 -0800 Subject: [PATCH 3/9] Don't open ports for getPortNames() Opening certain devices, such as serial endpoints over Bluetooth, can take a long time before they fail. Moreover, it's better to show devices even when the user currently doesn't have permissions to access them - else one might think of a problem with the device or driver, when a "sudo chmod 666" would do the trick. --- src/java/jssc/SerialPortList.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/java/jssc/SerialPortList.java b/src/java/jssc/SerialPortList.java index 188905737a..8da724f0aa 100644 --- a/src/java/jssc/SerialPortList.java +++ b/src/java/jssc/SerialPortList.java @@ -330,6 +330,7 @@ private static String[] getUnixBasedPortNames(String searchPath, Pattern pattern String fileName = file.getName(); if(!file.isDirectory() && !file.isFile() && pattern.matcher(fileName).find()){ String portName = searchPath + fileName; + /* long portHandle = serialInterface.openPort(portName, false);//Open port without TIOCEXCL if(portHandle < 0 && portHandle != SerialNativeInterface.ERR_PORT_BUSY){ continue; @@ -337,6 +338,7 @@ private static String[] getUnixBasedPortNames(String searchPath, Pattern pattern else if(portHandle != SerialNativeInterface.ERR_PORT_BUSY) { serialInterface.closePort(portHandle); } + */ portsTree.add(portName); } } From 4aa2399e20efcf9a4d994deeb4f64dfda94c2c90 Mon Sep 17 00:00:00 2001 From: gohai Date: Fri, 14 Feb 2014 12:29:04 -0800 Subject: [PATCH 4/9] Try to load native libraries without modifying the host system Before dynamically extracting the matching native library, first try to load it using System.loadLibrary(). This is helpful when it's not desired to modify the host system (but rather make changes to java.library.path). --- src/java/jssc/SerialNativeInterface.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/java/jssc/SerialNativeInterface.java b/src/java/jssc/SerialNativeInterface.java index c5264f5e8a..4979dc2252 100644 --- a/src/java/jssc/SerialNativeInterface.java +++ b/src/java/jssc/SerialNativeInterface.java @@ -150,7 +150,9 @@ else if(architecture.equals("arm")) {//since 2.1.0 boolean loadLib = false; - if(isLibFolderExist(libFolderPath)){ + if(loadLibFromPath("jSSC-"+libVersion)) { + // nothing more to do + } else if(isLibFolderExist(libFolderPath)){ if(isLibFileExist(libFolderPath + fileSeparator + libName)){ loadLib = true; } @@ -303,6 +305,21 @@ public static String getLibraryMinorSuffix() { */ public static native String getNativeLibraryVersion(); + /** + * Attempt to load a library using System.loadLibrary + * + * @param lib name of the library + * @return true if sucessful, false if not + */ + public static boolean loadLibFromPath(String lib) { + try { + System.loadLibrary(lib); + return true; + } catch (UnsatisfiedLinkError e) { + return false; + } + } + /** * Open port * From 475f912da6f3b8e084e0af1cc2cf592f663f6aab Mon Sep 17 00:00:00 2001 From: gohai Date: Fri, 14 Feb 2014 12:37:40 -0800 Subject: [PATCH 5/9] Add a Universal binary for OS X The command used to compile this on 10.9.1: g++ -shared -arch i386 -arch x86_64 -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/darwin" -I"/System/Library/Frameworks/IOKit.framework/Headers" -o libjSSC-2.8_universal.jnilib jssc.cpp --- .../libs/mac_os_x/libjSSC-2.8_universal.jnilib | Bin 0 -> 50204 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 src/java/libs/mac_os_x/libjSSC-2.8_universal.jnilib diff --git a/src/java/libs/mac_os_x/libjSSC-2.8_universal.jnilib b/src/java/libs/mac_os_x/libjSSC-2.8_universal.jnilib new file mode 100755 index 0000000000000000000000000000000000000000..bd3467f9038086fb8eea612c63b5e33a1661b42c GIT binary patch literal 50204 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 Date: Fri, 14 Feb 2014 13:44:11 -0800 Subject: [PATCH 6/9] Allow querying of USB properties getPortProperties() returns a map with keys and values as string. The currently available properties are: idProduct (lowercase hexadecimal zero-padded to four digits), idVendor (same as idProduct), manufacturer, product, serial. This is currently implemented for Linux and OS X (only in the Universal binary). The command used to compile this on 10.9.1: g++ -shared -arch i386 -arch x86_64 -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/darwin" -I"/System/Library/Frameworks/IOKit.framework/Headers" -framework CoreFoundation -framework IOKit -o libjSSC-2.8_universal.jnilib jssc.cpp --- src/cpp/_nix_based/jssc.cpp | 135 ++++++++++++++++++ src/cpp/jssc_SerialNativeInterface.h | 8 ++ src/java/jssc/SerialNativeInterface.java | 2 + src/java/jssc/SerialPortList.java | 75 ++++++++++ .../mac_os_x/libjSSC-2.8_universal.jnilib | Bin 50204 -> 59932 bytes 5 files changed, 220 insertions(+) diff --git a/src/cpp/_nix_based/jssc.cpp b/src/cpp/_nix_based/jssc.cpp index 634b620187..b12889b28f 100644 --- a/src/cpp/_nix_based/jssc.cpp +++ b/src/cpp/_nix_based/jssc.cpp @@ -40,7 +40,12 @@ #include //Needed for select() function #endif #ifdef __APPLE__ + #include + #include + #include + #include #include //Needed for IOSSIOSPEED in Mac OS X (Non standard baudrate) + #include // Needed for MAXPATHLEN #endif #include @@ -872,3 +877,133 @@ JNIEXPORT jintArray JNICALL Java_jssc_SerialNativeInterface_getLinesStatus env->SetIntArrayRegion(returnArray, 0, 4, returnValues); return returnArray; } + +JNIEXPORT jobjectArray JNICALL Java_jssc_SerialNativeInterface_getPortProperties + (JNIEnv *env, jclass cls, jstring portName) { + const char* portNameChar = (const char*)env->GetStringUTFChars(portName, NULL); + jclass stringClass = env->FindClass("Ljava/lang/String;"); + jobjectArray ret = env->NewObjectArray(5, stringClass, NULL); + +#ifdef __APPLE__ + + // this code is based on QtSerialPort + CFMutableDictionaryRef matching = IOServiceMatching(kIOSerialBSDServiceValue); + io_iterator_t iter = 0; + kern_return_t kr = IOServiceGetMatchingServices(kIOMasterPortDefault, matching, &iter); + if (kr != kIOReturnSuccess) { + env->ReleaseStringUTFChars(portName, portNameChar); + return ret; + } + + io_registry_entry_t service; + while ((service = IOIteratorNext(iter))) { + + // compare portName against cu and tty devices + bool found = false; + + CFTypeRef cu = 0; + cu = IORegistryEntrySearchCFProperty(service, kIOServicePlane, CFSTR(kIOCalloutDeviceKey), kCFAllocatorDefault, 0); + if (cu) { + char buffer[MAXPATHLEN]; + CFStringGetCString(CFStringRef(cu), buffer, sizeof(buffer), kCFStringEncodingUTF8); + //fprintf(stdout, "getPortProperties: %s\n", buffer); + //fflush(stdout); + if (strcmp(portNameChar, buffer) == 0) { + found = true; + } + CFRelease(cu); + } + + CFTypeRef tty = 0; + tty = IORegistryEntrySearchCFProperty(service, kIOServicePlane, CFSTR(kIODialinDeviceKey), kCFAllocatorDefault, 0); + if (tty) { + char buffer[MAXPATHLEN]; + CFStringGetCString(CFStringRef(tty), buffer, sizeof(buffer), kCFStringEncodingUTF8); + //fprintf(stdout, "getPortProperties: %s\n", buffer); + //fflush(stdout); + if (strcmp(portNameChar, buffer) == 0) { + found = true; + } + CFRelease(tty); + } + + if (!found) { + // not port we're looking for + //fprintf(stderr, "getPortProperties: %s not found", portNameChar); + //fflush(stderr); + IOObjectRelease(service); + continue; + } + + io_registry_entry_t entry = service; + do { + int val = 0; + char buffer[255]; + + CFTypeRef idProduct = 0; + idProduct = IORegistryEntrySearchCFProperty(entry, kIOServicePlane, CFSTR(kUSBProductID), kCFAllocatorDefault, 0); + if (idProduct && !env->GetObjectArrayElement(ret, 0)) { + CFNumberGetValue(CFNumberRef(idProduct), kCFNumberIntType, &val); + sprintf(buffer, "%04x", val); + jstring tmp = env->NewStringUTF(buffer); + env->SetObjectArrayElement(ret, 0, tmp); + env->DeleteLocalRef(tmp); + CFRelease(idProduct); + } + + CFTypeRef idVendor = 0; + idVendor = IORegistryEntrySearchCFProperty(entry, kIOServicePlane, CFSTR(kUSBVendorID), kCFAllocatorDefault, 0); + if (idVendor && !env->GetObjectArrayElement(ret, 1)) { + CFNumberGetValue(CFNumberRef(idVendor), kCFNumberIntType, &val); + sprintf(buffer, "%04x", val); + jstring tmp = env->NewStringUTF(buffer); + env->SetObjectArrayElement(ret, 1, tmp); + env->DeleteLocalRef(tmp); + CFRelease(idVendor); + } + + CFTypeRef manufacturer = 0; + manufacturer = IORegistryEntrySearchCFProperty(entry, kIOServicePlane, CFSTR(kUSBVendorString), kCFAllocatorDefault, 0); + if (manufacturer && !env->GetObjectArrayElement(ret, 2)) { + CFStringGetCString(CFStringRef(manufacturer), buffer, sizeof(buffer), kCFStringEncodingUTF8); + jstring tmp = env->NewStringUTF(buffer); + env->SetObjectArrayElement(ret, 2, tmp); + env->DeleteLocalRef(tmp); + CFRelease(manufacturer); + } + + CFTypeRef product = 0; + product = IORegistryEntrySearchCFProperty(entry, kIOServicePlane, CFSTR(kUSBProductString), kCFAllocatorDefault, 0); + if (product && !env->GetObjectArrayElement(ret, 3)) { + CFStringGetCString(CFStringRef(product), buffer, sizeof(buffer), kCFStringEncodingUTF8); + jstring tmp = env->NewStringUTF(buffer); + env->SetObjectArrayElement(ret, 3, tmp); + env->DeleteLocalRef(tmp); + CFRelease(product); + } + + CFTypeRef serial = 0; + serial = IORegistryEntrySearchCFProperty(entry, kIOServicePlane, CFSTR(kUSBSerialNumberString), kCFAllocatorDefault, 0); + if (serial && !env->GetObjectArrayElement(ret, 4)) { + CFStringGetCString(CFStringRef(serial), buffer, sizeof(buffer), kCFStringEncodingUTF8); + jstring tmp = env->NewStringUTF(buffer); + env->SetObjectArrayElement(ret, 4, tmp); + env->DeleteLocalRef(tmp); + CFRelease(serial); + } + + kr = IORegistryEntryGetParentEntry(entry, kIOServicePlane, &entry); + } while (kr == kIOReturnSuccess); + + IOObjectRelease(entry); + + IOObjectRelease(service); + } + + IOObjectRelease(iter); + +#endif // __APPLE__ + + env->ReleaseStringUTFChars(portName, portNameChar); + return ret; +} diff --git a/src/cpp/jssc_SerialNativeInterface.h b/src/cpp/jssc_SerialNativeInterface.h index 7029b1bbee..969da1e844 100644 --- a/src/cpp/jssc_SerialNativeInterface.h +++ b/src/cpp/jssc_SerialNativeInterface.h @@ -195,6 +195,14 @@ JNIEXPORT jintArray JNICALL Java_jssc_SerialNativeInterface_getLinesStatus JNIEXPORT jboolean JNICALL Java_jssc_SerialNativeInterface_sendBreak (JNIEnv *, jobject, jlong, jint); +/* + * Class: jssc_SerialNativeInterface + * Method: getPortProperties + * Signature: (Ljava/lang/String;)Ljava/lang/String; + */ +JNIEXPORT jobjectArray JNICALL Java_jssc_SerialNativeInterface_getPortProperties + (JNIEnv *, jclass, jstring); + #ifdef __cplusplus } #endif diff --git a/src/java/jssc/SerialNativeInterface.java b/src/java/jssc/SerialNativeInterface.java index 4979dc2252..aba50cdf52 100644 --- a/src/java/jssc/SerialNativeInterface.java +++ b/src/java/jssc/SerialNativeInterface.java @@ -500,4 +500,6 @@ public static boolean loadLibFromPath(String lib) { * @since 0.8 */ public native boolean sendBreak(long handle, int duration); + + public static native String[] getPortProperties(String portName); } diff --git a/src/java/jssc/SerialPortList.java b/src/java/jssc/SerialPortList.java index 8da724f0aa..38bb200851 100644 --- a/src/java/jssc/SerialPortList.java +++ b/src/java/jssc/SerialPortList.java @@ -25,7 +25,11 @@ package jssc; import java.io.File; +import java.io.FileReader; import java.util.Comparator; +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; import java.util.TreeSet; import java.util.regex.Pattern; @@ -347,4 +351,75 @@ else if(portHandle != SerialNativeInterface.ERR_PORT_BUSY) { } return returnArray; } + + public static Map getPortProperties(String portName) { + if(SerialNativeInterface.getOsType() == SerialNativeInterface.OS_LINUX) { + return getLinuxPortProperties(portName); + } else if(SerialNativeInterface.getOsType() == SerialNativeInterface.OS_MAC_OS_X) { + return getNativePortProperties(portName); + } else if(SerialNativeInterface.getOsType() == SerialNativeInterface.OS_WINDOWS){ + // TODO + return new HashMap(); + } else { + return new HashMap(); + } + } + + public static Map getLinuxPortProperties(String portName) { + Map props = new HashMap(); + try { + // portName has the format /dev/ttyUSB0 + String dev = portName.split("/")[2]; + File sysfsNode = new File("/sys/bus/usb-serial/devices/"+dev); + + // resolve the symbolic link and store the resulting components in an array + String[] sysfsPath = sysfsNode.getCanonicalPath().split("/"); + + // walk the tree to the root + for (int i=sysfsPath.length-2; 0 < i; i--) { + String curPath = "/"; + for (int j=1; j <= i; j++) { + curPath += sysfsPath[j]+"/"; + } + + // look for specific attributes + String[] attribs = { "idProduct", "idVendor", "manufacturer", "product", "serial" }; + for (int j=0; j < attribs.length; j++) { + try { + Scanner in = new Scanner(new FileReader(curPath+attribs[j])); + // we treat the values just as strings + props.put(attribs[j], in.next()); + } catch (Exception e) { + // ignore the attribute + } + } + + // stop once we have at least one attribute + if (0 < props.size()) { + break; + } + } + } catch (Exception e) { + // nothing to do, return what we have so far + } + return props; + } + + public static Map getNativePortProperties(String portName) { + Map props = new HashMap(); + try { + // use JNI functions to read those properties + String[] names = { "idProduct", "idVendor", "manufacturer", "product", "serial" }; + String[] values = SerialNativeInterface.getPortProperties(portName); + + for (int i=0; i < names.length; i++) { + if (values[i] != null) { + props.put(names[i], values[i]); + } + } + } catch (Exception e) { + // nothing to do, return what we have so far + } + return props; + } } diff --git a/src/java/libs/mac_os_x/libjSSC-2.8_universal.jnilib b/src/java/libs/mac_os_x/libjSSC-2.8_universal.jnilib index bd3467f9038086fb8eea612c63b5e33a1661b42c..012a1684bc300a2e4abe8d636e710c974647c6f2 100755 GIT binary patch literal 59932 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 delta 8314 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 E6Kde_LjV8( From c0d2c800daa5116728e93964846ca4ae6a857055 Mon Sep 17 00:00:00 2001 From: gohai Date: Fri, 6 Feb 2015 23:16:32 +0100 Subject: [PATCH 7/9] Recompile for armv6 hard float Command used to compile on a current Raspbian: g++ -shared -march=armv6 -mfpu=vfp -mfloat-abi=hard -I/usr/lib/jvm/jdk-7 -oracle-armhf/include -I/usr/lib/jvm/jdk-7-oracle-armhf/include/linux -o libjSSC-2.8_armhf.so jssc.cpp --- src/java/libs/linux/libjSSC-2.8_armhf.so | Bin 10631 -> 23090 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 src/java/libs/linux/libjSSC-2.8_armhf.so diff --git a/src/java/libs/linux/libjSSC-2.8_armhf.so b/src/java/libs/linux/libjSSC-2.8_armhf.so old mode 100644 new mode 100755 index 3742fbe08f4313d2b997ce0acaf96dffad5602b4..41680a417ffce8add436f91f2b98caf6dc464f99 GIT binary patch literal 23090 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 From 598c80b7c989b3bfb8f9b822eca24e3383574b29 Mon Sep 17 00:00:00 2001 From: gohai Date: Tue, 11 Apr 2017 14:16:12 +0200 Subject: [PATCH 8/9] Add aarch64 native library This was built with: g++ -shared -I /usr/lib/jdk1.8.0_121/include -I/usr/lib/jdk1.8.0_121/include/linux -o libjSSC-2.8_aarch64.so jssc.cpp --- src/java/libs/linux/libjSSC-2.8_aarch64.so | Bin 0 -> 25176 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 src/java/libs/linux/libjSSC-2.8_aarch64.so diff --git a/src/java/libs/linux/libjSSC-2.8_aarch64.so b/src/java/libs/linux/libjSSC-2.8_aarch64.so new file mode 100755 index 0000000000000000000000000000000000000000..38813ae5fa672737415ab07ce4a5912a75665737 GIT binary patch literal 25176 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 I{x|3UzaZ;>)c^nh literal 0 HcmV?d00001 From 4b316077c7f054bb76629e0addfb4e359cf0427d Mon Sep 17 00:00:00 2001 From: gohai Date: Thu, 15 Mar 2018 18:53:30 -0700 Subject: [PATCH 9/9] Add support for Raspbian (Raspberry Pi Debian) custom serial port names --- src/java/jssc/SerialPortList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/jssc/SerialPortList.java b/src/java/jssc/SerialPortList.java index 38bb200851..f3be259cbf 100644 --- a/src/java/jssc/SerialPortList.java +++ b/src/java/jssc/SerialPortList.java @@ -47,7 +47,7 @@ public class SerialPortList { serialInterface = new SerialNativeInterface(); switch (SerialNativeInterface.getOsType()) { case SerialNativeInterface.OS_LINUX: { - PORTNAMES_REGEXP = Pattern.compile("(ttyS|ttyUSB|ttyACM|ttyAMA|rfcomm|ttyO)[0-9]{1,3}"); + PORTNAMES_REGEXP = Pattern.compile("(serial|ttyS|ttyUSB|ttyACM|ttyAMA|rfcomm|ttyO)[0-9]{1,3}"); PORTNAMES_PATH = "/dev/"; break; }