使用jSerialComm替代RXTXCOMM的串口控制


github地址:Fazecast/jSerialComm: Platform-independent serial port access for Java (github.com)

初始化(包含监听串口数据):(注意,在Linux环境下,初始化中的参数:mDevice值不需要‘/dev’的前缀,直接写设备名称即可“ttyS1”)

private com.fazecast.jSerialComm.SerialPort serialPort;public boolean install(String mDevices, int mBaudRate) {
        serialPort = com.fazecast.jSerialComm.SerialPort.getCommPort(mDevices);
        serialPort.addDataListener(new SerialPortDataListener() {
            @Override
            public int getListeningEvents() {
                return com.fazecast.jSerialComm.SerialPort.LISTENING_EVENT_DATA_AVAILABLE;
            }

            @Override
            public void serialEvent(SerialPortEvent serialPortEvent) {
                if (serialPortEvent.getEventType() != com.fazecast.jSerialComm.SerialPort.LISTENING_EVENT_DATA_AVAILABLE)
                    return;
                byte[] newData = new byte[serialPort.bytesAvailable()];
                int numRead = serialPort.readBytes(newData, newData.length);
                System.out.println("接收到串口数据长度为:" + numRead);
            }
        });
        serialPort.setFlowControl(com.fazecast.jSerialComm.SerialPort.FLOW_CONTROL_DISABLED);
        serialPort.setComPortParameters(mBaudRate, 8, com.fazecast.jSerialComm.SerialPort.ONE_STOP_BIT, com.fazecast.jSerialComm.SerialPort.NO_PARITY);
        serialPort.setComPortTimeouts(com.fazecast.jSerialComm.SerialPort.TIMEOUT_READ_BLOCKING | SerialPort.TIMEOUT_WRITE_BLOCKING, 1000, 1000);
        serialPort.openPort();return serialPort.isOpen();
    }

写数据:

    public void sendHexMsg(byte[] data) throws IOException {
        if (this.serialPort == null || !serialPort.isOpen()) {
            logger.error("发送串口数据失败,数据串口未启动");
            return;
        }
        serialPort.writeBytes(data, data.length);
    }

 

posted @ 2022-10-21 11:15  蜜铀  阅读(1194)  评论(0编辑  收藏  举报