Я пишу код для отправки и получения данных с использованием последовательного порта Arduino, для этого я использую библиотеку jserialcomm. Для отправки и получения данных я использую DataListener библиотеки, которая определяет, была ли отправлена или получена группа байтов, проблема в том, что DataListener использует метод getListneningEvents для перечисления событий, которые DataListener будет можно использовать, но вы можете вернуть только один из них, потому что он перезаписывает абстрактный метод, который возвращает только одно целое число, в документации говорится, что вы можете вернуть одно или несколько событий, но я действительно не знаю, как это сделать, если вы можете помогите с этим плз.
public class MessageListener implements SerialPortMessageListener{
@Override
public int getListeningEvents() {
return SerialPort.LISTENING_EVENT_DATA_WRITTEN;
// return SerialPort.LISTENING_EVENT_DATA_RECEIVED;
// I want to return both methods
}
@Override
public byte[] getMessageDelimiter(){
return new byte[] {
(byte)0x0A
};
}
@Override
public boolean delimiterIndicatesEndOfMessage(){
return true;
}
@Override
public void serialEvent(SerialPortEvent event){
switch (event.getEventType()) {
//Evento para datos enviados
case SerialPort.LISTENING_EVENT_DATA_WRITTEN:
System.out.println("All bytes were successfully transmitted!");
break;
//Evento para datos recibidos
case SerialPort.LISTENING_EVENT_DATA_RECEIVED:
byte[] delimitedMessage = event.getReceivedData();
String mensaje = new String(delimitedMessage, StandardCharsets.UTF_8);
mensaje = mensaje.replace("\n", "");
System.out.println("Received the following delimited message: " + mensaje);
break;
}
}
}
Вы можете прослушать несколько событий, объединив их вместе:
return SerialPort.LISTENING_EVENT_DATA_WRITTEN | SerialPort.LISTENING_EVENT_DATA_RECEIVED;
Как это работает:
Предположим, что LISTENING_EVENT_DATA_WRITTEN
имеет значение 1
, а LISTENING_EVENT_DATA_RECEIVED
имеет значение 2
в двоичном виде:
1 = 01
2 = 10
Если теперь эти два числа объединить с помощью логического оператора ИЛИ |
, результат будет следующим:
01 | 10 = 11
Теперь библиотека проверяет,
11 & LISTENING_EVENT_DATA_WRITTEN == LISTENING_EVENT_DATA_WRITTEN
если это так, это "передается" вашему классу
О боже, не могу поверить, что я этого не знал, спасибо, чувак!