Опросить последовательный порт в Java, чтобы получить текущее состояние устройства
Я использую 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){}
}
1 ответ
Спасибо, Джим, вы абсолютно правы, просто отправив строку запроса и получив ответ. Очень просто! Ответ на мой вопрос зависит от производителя и какой строки мне нужно было отправить на мое устройство. Каким-то образом я упустил это из виду в руководстве. Теперь я могу "опросить" устройство, чтобы вернуть его текущее состояние. Простой ответ! Спасибо за помощь.