| | |
| | | private ScheduledExecutorService scheduledExecutorService; |
| | | private ExecutorService singleThreadExecutor; |
| | | private ScheduledFuture scheduledFuture; |
| | | private SerialPortReadObserver serialPortReadObserver; |
| | | private boolean isOk = false; |
| | | |
| | | private final Object writeLock = new Object(); |
| | | |
| | | public SerialPortModel(String serialPortPath, int baudrate, int dataBits, int stopBits, int parity) { |
| | | public SerialPortModel(String serialPortPath, int baudrate, int dataBits, int stopBits, int parity,SerialPortReadObserver portReadObserver) { |
| | | this.serialPortPath = serialPortPath; |
| | | this.baudrate = baudrate; |
| | | this.dataBits = dataBits; |
| | | this.stopBits = stopBits; |
| | | this.parity = parity; |
| | | this.serialPortReadObserver = portReadObserver; |
| | | } |
| | | |
| | | public boolean open() { |
| | |
| | | } |
| | | } |
| | | |
| | | public void startRead(SerialPortReadObserver serialPortReadObserver) { |
| | | public void startRead() { |
| | | scheduledFuture = scheduledExecutorService.scheduleWithFixedDelay(() -> { |
| | | InputStream inputStream = serialPort.getInputStream(); |
| | | byte[] bytes = new byte[2048]; |
| | |
| | | for(int i=0;i<length;i++){ |
| | | bytes2[i] = bytes[i]; |
| | | } |
| | | serialPortReadObserver.onResultBytes(bytes2); |
| | | }, 0, 50, TimeUnit.MILLISECONDS); |
| | | if(serialPortReadObserver!=null) { |
| | | serialPortReadObserver.onResultBytes(bytes2); |
| | | } |
| | | }, 0, 100, TimeUnit.MILLISECONDS); |
| | | } |
| | | |
| | | public void stopRead() { |
| | | scheduledFuture.cancel(true); |
| | | } |
| | | |
| | | public void write(byte[] bytes,SerialPortReadObserver serialPortReadObserver) { |
| | | public void write(byte[] bytes) { |
| | | singleThreadExecutor.execute(() -> { |
| | | synchronized (writeLock) { |
| | | try { |
| | | serialPort.getOutputStream().write(bytes); |
| | | serialPortReadObserver.onResult(null); |
| | | if(serialPortReadObserver!=null) { |
| | | serialPortReadObserver.onResult(null); |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | serialPortReadObserver.onResult(e.getMessage()); |
| | | if(serialPortReadObserver!=null) { |
| | | serialPortReadObserver.onResult(e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | | }); |