0

所以我正在尝试使用 JSSC 库向我的设备发送命令,但还没有成功。这是我的代码,从几个在线示例构建:

static SerialPort tPort = new SerialPort("/dev/ttyUSB0");
public static void main(String[] args) {
    String[] portNames = SerialPortList.getPortNames();
    for (String tPortName : portNames) {
        System.out.println(tPortName);
    }

    try {
        tPort.openPort();
        tPort.setParams(
                SerialPort.BAUDRATE_9600, 
                SerialPort.DATABITS_8, 
                SerialPort.STOPBITS_1, 
                SerialPort.PARITY_NONE);
        tPort.setFlowControlMode(SerialPort.FLOWCONTROL_XONXOFF_IN|SerialPort.FLOWCONTROL_XONXOFF_OUT);

        int mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR; //Prepare mask
        tPort.writeBytes("AT".getBytes()); //Write data to port
        tPort.setEventsMask(mask); //Set mask
        tPort.addEventListener(new SerialPortReader()); //Add SerialPortEventListener

    } catch (SerialPortException ex) {
        ex.printStackTrace(System.out);
    }
}

static class SerialPortReader implements SerialPortEventListener {
    public void serialEvent(SerialPortEvent event) {
        if(event.isRXCHAR()){//If data is available
            System.out.println("available!");
            if(event.getEventValue() == 10){//Check bytes count in the input buffer
                //Read data, if 10 bytes available 
                try {
                    byte buffer[] = tPort.readBytes(10);
                } catch (SerialPortException ex) {
                    System.out.println(ex);
                }
            }
        } else if(event.isCTS()){//If CTS line has changed state
            if(event.getEventValue() == 1){//If line is ON
                System.out.println("CTS - ON");
            } else {
                System.out.println("CTS - OFF");
            }
        } else if(event.isDSR()){ //If DSR line has changed state
            if(event.getEventValue() == 1){ //If line is ON
                System.out.println("DSR - ON");
            } else {
                System.out.println("DSR - OFF");
            }
        }
    }
}

当我运行它时,我得到的唯一输出是

CTS - OFF
DSR - OFF

设备没有明显响应。但是当我使用这个配置使用 minicom

    lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
    x A -    Serial Device      : /dev/ttyUSB0                              x
    x B - Lockfile Location     : /var/lock                                 x
    x C -   Callin Program      :                                           x
    x D -  Callout Program      :                                           x
    x E -    Bps/Par/Bits       : 9600 8N1                                  x
    x F - Hardware Flow Control : No                                        x
    x G - Software Flow Control : No                                        x
    x                                                                       x
    x    Change which setting?                                              x
    mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

设备返回一些东西。

我做错了什么?

编辑:我尝试使用超时方法阅读,并且该方法不断抛出超时。

4

2 回答 2

0

至少你应该在发送到端口addEventListener 之前调用writeBytes.

如果.setFlowControl(SerialPort.FLOWCONTROL_NONE)您想要与minicom.

于 2015-06-24T07:40:08.060 回答
0

显然我错过了指定为了被视为消息的规范,输入字符串必须以 CR 结尾。添加CR字符后,设备返回了一些东西。愚蠢的错误(doh)。

于 2015-06-24T16:06:17.310 回答