From efca7b84667368fe6a187ead7ff361502eb3b914 Mon Sep 17 00:00:00 2001 From: Harald Wolff Date: Wed, 11 Jan 2017 13:51:51 +0100 Subject: [PATCH] =?UTF-8?q?NewSerialPort:=20open()/close()=20=C3=BCberarbe?= =?UTF-8?q?itet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hwo/io/NewSerialPort/NewSerialPort.java | 39 ++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/org/hwo/io/NewSerialPort/NewSerialPort.java b/src/org/hwo/io/NewSerialPort/NewSerialPort.java index abeebf6..dcbcb78 100644 --- a/src/org/hwo/io/NewSerialPort/NewSerialPort.java +++ b/src/org/hwo/io/NewSerialPort/NewSerialPort.java @@ -168,19 +168,26 @@ public class NewSerialPort { } public boolean open(){ + if (wasOpened) + return false; + int r = nsp_open(nsp); wasOpened = (r == 0); System.err.println(String.format("nsp_open(): %d",r)); - fireConnectionStateChanged(); + if (wasOpened) + fireConnectionStateChanged(); return wasOpened; } + public void close(){ - nsp_close(nsp); - wasOpened = false; - fireConnectionStateChanged(); + if (wasOpened){ + nsp_close(nsp); + wasOpened = false; + fireConnectionStateChanged(); + } } public boolean isOpen(){ @@ -350,18 +357,30 @@ public class NewSerialPort { @Override public void write(byte[] b, int off, int len) throws IOException { - int nWritten = nsp_write_bytes(nsp, b, off, len); + int nWritten = 0; + + for (int redo=0;redo<5;redo++){ + nWritten = nsp_write_bytes(nsp, b, off, len); + if (nWritten == -11){ + try { + Thread.sleep(5); + } catch (Exception e){ + + } + } else if (nWritten != len){ + throw new IOException(String.format("nsp_write_bytes() returned %d", nWritten)); + } else { + break; + } + } if (nWritten != len){ - throw new IOException(String.format("nsp_write_bytes() returned %d", nWritten)); + throw new IOException(String.format("nsp_write_bytes() returned %d after retry", nWritten)); } } @Override public void write(byte[] b) throws IOException { - int nWritten = nsp_write_bytes(nsp, b, 0, b.length); - if (nWritten != b.length){ - throw new IOException(String.format("nsp_write_bytes() returned %d", nWritten)); - } + write(b, 0, b.length); } }