0

我正在使用 javax.comm 通过串行端口进行通信,我遇到的问题是我不确定如何在启动时轮询端口以获取设备(4x8 矩阵开关)的当前状态。当状态更改使用串行端口事件侦听器时,我能够漂亮地获取当前状态(即我向端口写入一些内容,侦听器在数据位更改时捕获它们)。

这是我捕获事件的代码。如何修改它以轮询当前状态而不实际更改状态?

public void serialEvent(SerialPortEvent event) {
    waitingForResponse = true;
    System.out.println("Serial Event Detected: " + event.getEventType() + " Going to read buffer..");

    switch(event.getEventType()) {
    case SerialPortEvent.BI:
        System.out.println("Data Event: BI");
    case SerialPortEvent.OE:
        System.out.println("Data Event: OE");
    case SerialPortEvent.FE:
        System.out.println("Data Event: FE");
    case SerialPortEvent.PE:
        System.out.println("Data Event: PE");
    case SerialPortEvent.CD:
        System.out.println("Data Event: CD");
    case SerialPortEvent.CTS:
        System.out.println("Data Event: CTS");
    case SerialPortEvent.DSR:
        System.out.println("Data Event: DSR");
    case SerialPortEvent.RI:
        System.out.println("Data Event: RI");
    case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
        System.out.println("Data Event: OUTPUT_BUGGER_EMPTY");
        break;
    case SerialPortEvent.DATA_AVAILABLE:
        System.out.println("Data available in buffer..");
        //byte[] readBuffer = new byte[11];

        try {              
            StringBuilder readBuffer = new StringBuilder();

            try{
                int value;     
                int byteLengthCounter = 0;
                // reading just one at a time
                while (byteLengthCounter < 8) {

                    value = inputStream.read();
                    readBuffer.append((char) value);
                    currentState = new String(readBuffer);
                    byteLengthCounter++;
                }
                System.out.println("Successful read. Current state: " + getCurrentState());
                byteLengthCounter = 0;

                waitingForResponse = false;

            }catch(Exception e){System.out.println("Did not read buffer: " + e);}

        } catch (Exception e) {System.out.println(e);}
        break;
    } 

    try{
        System.out.println("Going to close steam..");
        if (inputStream != null)    inputStream.close();
        //System.out.println("Going to close port..");
        //if (serialPort != null) serialPort.close();

        }catch (Exception e){}
}
4

1 回答 1

0

谢谢吉姆——你只是发送查询字符串并接收回复是绝对正确的。很简单!我的问题的答案取决于制造商以及我需要发送到我的设备的字符串。不知何故,我在手册中忽略了这一点。现在我可以“轮询”设备以返回其当前状态。简单的回答!感谢所有的帮助。

于 2014-01-06T15:28:45.113 回答