我正在使用 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){}
}