rk
7 小时以前 99b89dc0ae4fbe90c6d629a223ad730986ffd8f3
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/i485/SerialPortModel.java
@@ -1,6 +1,5 @@
package com.doumee.keyCabinet.utils.i485;
import android.serialport.SerialPort;
import android.util.Log;
import java.io.File;
@@ -11,6 +10,8 @@
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import android_serialport_api.SerialPort;
public class SerialPortModel {
@@ -29,27 +30,24 @@
    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() {
        try {
            File device = new File(serialPortPath);
            serialPort = SerialPort
                    .newBuilder(device, baudrate)
                    .dataBits(dataBits)
                    .stopBits(stopBits)
                    .parity(parity)
                    .build();
            serialPort = new SerialPort(device, baudrate, 0);
            scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
            singleThreadExecutor = Executors.newSingleThreadExecutor();
        } catch (IOException e) {
@@ -72,7 +70,7 @@
        }
    }
    public void startRead(SerialPortReadObserver serialPortReadObserver) {
    public void startRead() {
        scheduledFuture = scheduledExecutorService.scheduleWithFixedDelay(() -> {
            InputStream inputStream = serialPort.getInputStream();
            byte[] bytes = new byte[2048];
@@ -89,23 +87,29 @@
            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());
                    }
                }
            }
        });