From e33059d1d0c04d61c55d99fa17444f55b5f288f6 Mon Sep 17 00:00:00 2001 From: Harald Wolff Date: Tue, 8 Sep 2015 09:59:11 +0200 Subject: [PATCH] NSP: Win32+, Updates --- src/native/nsp32.dll | Bin 0 -> 49928 bytes src/org/hwo/ByteArrayHelper.java | 28 +++++++ src/org/hwo/io/NewSerialPort/HandShake.java | 24 ++++++ .../hwo/io/NewSerialPort/NewSerialPort.java | 73 +++++++++++++++++- src/org/hwo/io/NewSerialPort/Parity.java | 22 ++++++ src/org/hwo/nativeloader/NativeLoader.java | 59 +++++++++----- 6 files changed, 186 insertions(+), 20 deletions(-) create mode 100755 src/native/nsp32.dll create mode 100644 src/org/hwo/ByteArrayHelper.java diff --git a/src/native/nsp32.dll b/src/native/nsp32.dll new file mode 100755 index 0000000000000000000000000000000000000000..6dfdb234f0559a873622c7ead9ff49c57d5a9ff0 GIT binary patch literal 49928 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 f06_^fcll{!tH tokens = new LinkedList(); + + if (includePortName){ + tokens.add(String.format("PN=%s",this.portName)); + } + + tokens.add(String.format("B=%d",this.baudRate)); + tokens.add(String.format("P=%s",this.parity.getLetter())); + tokens.add(String.format("H=%s", this.handShake.getLetter())); + tokens.add(String.format("SB=%d", (this.stopbit2) ? 2 : 1 )); + + return StringHelper.join(tokens, ";"); + } + + public boolean parseSettings(String settings){ + String[] tokens = settings.split(";"); + + for (String token: tokens){ + String[] st = token.split("=", 2); + + if (st.length == 2){ + if (st[0].equals("PN")){ + this.setPortName(st[1]); + } + if (st[0].equals("B")){ + this.setBaudRate(Integer.parseInt(st[1])); + } + if (st[0].equals("P")){ + this.setParity( Parity.fromLetter(st[1])); + } + if (st[0].equals("H")){ + this.setHandShake( HandShake.fromLetter(st[1])); + } + if (st[0].equals("SB")){ + this.setStopBit2( st[1].equals("2")); + } + } + + } + return true; + } + private static native long nsp_alloc(); @@ -176,9 +239,14 @@ public class NewSerialPort { public class NewSerialPortInputStream extends InputStream { @Override - public int read() throws IOException { + public int read() throws IOException { + if (autoOpen && !isOpen()) + open(); + int ch = nsp_read(nsp); if (ch < 0){ + if (ch == nsp_RET_TIMEOUT) + return -1; NewSerialPort.this.close(); throw new IOException(String.format("nsp_read()=%d", ch)); }; @@ -190,6 +258,9 @@ public class NewSerialPort { { @Override public void write(int arg0){ + if (autoOpen && !isOpen()) + open(); + if (nsp_write(nsp, arg0)<0) NewSerialPort.this.close(); } diff --git a/src/org/hwo/io/NewSerialPort/Parity.java b/src/org/hwo/io/NewSerialPort/Parity.java index 7c1a604..bc5f740 100644 --- a/src/org/hwo/io/NewSerialPort/Parity.java +++ b/src/org/hwo/io/NewSerialPort/Parity.java @@ -8,7 +8,29 @@ public enum Parity { this.value = v; } + public static Parity fromLetter(String letter){ + if (letter.equals("N")) + return NONE; + if (letter.equals("E")) + return EVEN; + if (letter.equals("O")) + return ODD; + return null; + } + public int getValue(){ return this.value; } + + public String getLetter(){ + switch (this.value){ + case 0: + return "N"; + case 1: + return "E"; + case 2: + return "O"; + } + return ""; + } } diff --git a/src/org/hwo/nativeloader/NativeLoader.java b/src/org/hwo/nativeloader/NativeLoader.java index 531a65b..6a364ba 100644 --- a/src/org/hwo/nativeloader/NativeLoader.java +++ b/src/org/hwo/nativeloader/NativeLoader.java @@ -47,33 +47,53 @@ public class NativeLoader { } - public static void loadLibrary(String libName) - { - if (OsDetect.getOperatingSystem()==OsType.LINUX){ - System.err.println("Linux erkannt. Patche java.library.path"); - System.setProperty("java.library.path",String.format(".:%s",System.getProperty("java.library.path"))); - } - - + public static boolean tryLoad(String libName){ try { System.loadLibrary(libName); - return; + return true; } catch (UnsatisfiedLinkError e) { - System.err.println("Native Library " + libName + " failed to load."); + System.err.println(""); + System.err.println(""); + System.err.println("** tryLoad(...) A *****************************"); + System.err.println(""); + e.printStackTrace(); + + + try + { + System.load(libName); + return true; + } catch (UnsatisfiedLinkError ee) + { + System.err.println(""); + System.err.println(""); + System.err.println("** tryLoad(...) B *****************************"); + System.err.println(""); + ee.printStackTrace(); + } } + return false; + } + + public static void loadLibrary(String libName) + { + //if (OsDetect.getOperatingSystem()==OsType.LINUX){ + // System.err.println("Linux erkannt. Patche java.library.path"); + System.setProperty("java.library.path",String.format(".:%s",System.getProperty("java.library.path"))); + //} - String platformLibName = calculateLibraryName(libName); - - try - { - System.loadLibrary("./"+platformLibName); + + if (tryLoad(libName)) + return; + + String platformLibName = calculateLibraryName(libName); + if (tryLoad(platformLibName)) + return; + + if (tryLoad(new File("").getAbsolutePath() + File.separator + platformLibName)) return; - } catch (UnsatisfiedLinkError e) - { - System.err.println("Native Library " + platformLibName + " failed to load."); - } String resourcePath; @@ -104,6 +124,7 @@ public class NativeLoader { System.load(tempLibFile.getAbsolutePath()); } catch (Exception e) { + e.printStackTrace(); throw new RuntimeException(e); }