|  |  |  | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|