diff --git a/src/main/cpp/_nix_based/jssc.cpp b/src/main/cpp/_nix_based/jssc.cpp index 634b62018..4c285af1a 100644 --- a/src/main/cpp/_nix_based/jssc.cpp +++ b/src/main/cpp/_nix_based/jssc.cpp @@ -545,7 +545,7 @@ JNIEXPORT jbyteArray JNICALL Java_jssc_SerialNativeInterface_readBytes FD_CLR(portHandle, &read_fd_set); jbyteArray returnArray = env->NewByteArray(byteCount); env->SetByteArrayRegion(returnArray, 0, byteCount, lpBuffer); - delete lpBuffer; + delete[] lpBuffer; return returnArray; } diff --git a/src/main/cpp/jssc_SerialNativeInterface.h b/src/main/cpp/jssc_SerialNativeInterface.h index 7029b1bbe..d2d1c3e2c 100644 --- a/src/main/cpp/jssc_SerialNativeInterface.h +++ b/src/main/cpp/jssc_SerialNativeInterface.h @@ -43,6 +43,8 @@ extern "C" { #define jssc_SerialNativeInterface_OS_SOLARIS 2L #undef jssc_SerialNativeInterface_OS_MAC_OS_X #define jssc_SerialNativeInterface_OS_MAC_OS_X 3L +#undef jssc_SerialNativeInterface_FREEBSD +#define jssc_SerialNativeInterface_FREEBSD 4L #undef jssc_SerialNativeInterface_ERR_PORT_BUSY #define jssc_SerialNativeInterface_ERR_PORT_BUSY -1LL #undef jssc_SerialNativeInterface_ERR_PORT_NOT_FOUND diff --git a/src/main/java/jssc/SerialNativeAccess.java b/src/main/java/jssc/SerialNativeAccess.java index f8c163695..885908485 100644 --- a/src/main/java/jssc/SerialNativeAccess.java +++ b/src/main/java/jssc/SerialNativeAccess.java @@ -79,6 +79,10 @@ else if(osName.equals("Mac OS X") || osName.equals("Darwin")){//os.name "Darwin" osName = "mac_os_x"; osType = SerialNativeInterface.OS_MAC_OS_X; }//<- since 0.9.0 + else if(osName.equals("FreeBSD")){ + osName = "freebsd"; + osType = SerialNativeInterface.OS_FREEBSD; + } if(architecture.equals("i386") || architecture.equals("i686")){ architecture = "x86"; @@ -87,28 +91,37 @@ else if(architecture.equals("amd64") || architecture.equals("universal")){//os.a architecture = "x86_64"; } else if(architecture.equals("arm")) {//since 2.1.0 - String floatStr = "sf"; - if(javaLibPath.toLowerCase().contains("gnueabihf") || javaLibPath.toLowerCase().contains("armhf")){ - floatStr = "hf"; - } - else { - try { - Process readelfProcess = Runtime.getRuntime().exec("readelf -A /proc/self/exe"); - BufferedReader reader = new BufferedReader(new InputStreamReader(readelfProcess.getInputStream())); - String buffer = ""; - while((buffer = reader.readLine()) != null && !buffer.isEmpty()){ - if(buffer.toLowerCase().contains("Tag_ABI_VFP_args".toLowerCase())){ - floatStr = "hf"; - break; + if(osName.equals("Linux")){ + String floatStr = "sf"; + if(javaLibPath.toLowerCase().contains("gnueabihf") || javaLibPath.toLowerCase().contains("armhf")){ + floatStr = "hf"; + } + else { + try { + Process readelfProcess = Runtime.getRuntime().exec("readelf -A /proc/self/exe"); + BufferedReader reader = new BufferedReader(new InputStreamReader(readelfProcess.getInputStream())); + String buffer = ""; + while((buffer = reader.readLine()) != null && !buffer.isEmpty()){ + if(buffer.toLowerCase().contains("Tag_ABI_VFP_args".toLowerCase())){ + floatStr = "hf"; + break; + } } + reader.close(); + } + catch (Exception ex) { + //Do nothing } - reader.close(); } - catch (Exception ex) { - //Do nothing + architecture = "arm" + floatStr; + } + else if(osName.equals("FreeBSD")){ + String floatStr = ""; + if(javaLibPath.toLowerCase().contains("armhf")){ + floatStr = "hf"; } + architecture = "arm" + floatStr; } - architecture = "arm" + floatStr; } libFolderPath = libRootFolder + fileSeparator + ".jssc" + fileSeparator + osName; @@ -268,4 +281,4 @@ public SerialNativeInterface getInterface() { // public String getLibraryMinorSuffix() { // return libMinorSuffix; // } -} \ No newline at end of file +} diff --git a/src/main/java/jssc/SerialNativeInterface.java b/src/main/java/jssc/SerialNativeInterface.java index 6bd8922a2..9b5548a92 100644 --- a/src/main/java/jssc/SerialNativeInterface.java +++ b/src/main/java/jssc/SerialNativeInterface.java @@ -18,6 +18,7 @@ public class SerialNativeInterface { public static final int OS_WINDOWS = 1; public static final int OS_SOLARIS = 2;//since 0.9.0 public static final int OS_MAC_OS_X = 3;//since 0.9.0 + public static final int OS_FREEBSD = 4; /** * @since 2.3.0 diff --git a/src/main/java/org/scream3r/jssc/SerialPort.java b/src/main/java/org/scream3r/jssc/SerialPort.java index 613dce389..1eb8fce84 100644 --- a/src/main/java/org/scream3r/jssc/SerialPort.java +++ b/src/main/java/org/scream3r/jssc/SerialPort.java @@ -265,7 +265,8 @@ public boolean setEventsMask(int mask) throws SerialPortException { checkPortOpened("setEventsMask()"); if(SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_LINUX || SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_SOLARIS || - SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_MAC_OS_X){//since 0.9.0 + SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_MAC_OS_X || //since 0.9.0 + SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_FREEBSD){ linuxMask = mask; if(mask > 0){ maskAssigned = true; @@ -299,7 +300,8 @@ public int getEventsMask() throws SerialPortException { checkPortOpened("getEventsMask()"); if(SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_LINUX || SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_SOLARIS || - SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_MAC_OS_X){//since 0.9.0 + SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_MAC_OS_X || //since 0.9.0 + SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_FREEBSD){ return linuxMask; } return serialInterface.getEventsMask(portHandle); @@ -1042,7 +1044,8 @@ private void addEventListener(SerialPortEventListener listener, int mask, boolea private EventThread getNewEventThread() { if(SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_LINUX || SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_SOLARIS || - SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_MAC_OS_X){//since 0.9.0 + SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_MAC_OS_X || //since 0.9.0 + SerialNativeAccess.getInstance().getOsType() == SerialNativeInterface.OS_FREEBSD){ return new LinuxEventThread(); } return new EventThread(); diff --git a/src/main/java/org/scream3r/jssc/SerialPortList.java b/src/main/java/org/scream3r/jssc/SerialPortList.java index 05094a3b4..9a81187cb 100644 --- a/src/main/java/org/scream3r/jssc/SerialPortList.java +++ b/src/main/java/org/scream3r/jssc/SerialPortList.java @@ -59,6 +59,11 @@ public class SerialPortList { PORTNAMES_PATH = "/dev/"; break; } + case SerialNativeInterface.OS_FREEBSD: { + PORTNAMES_REGEXP = Pattern.compile("(cuaU)[0-9]{1,3}"); + PORTNAMES_PATH = "/dev/"; + break; + } case SerialNativeInterface.OS_WINDOWS: { PORTNAMES_REGEXP = Pattern.compile(""); PORTNAMES_PATH = "";