Последовательные порты Java: способ установки порога получения при использовании асинхронного.прочитать уведомление - PullRequest
0 голосов
/ 30 июля 2010

У меня есть код, использующий API JavaComm.Он реализует SerialPortEventListener, и прием символов происходит асинхронно.Это работает нормально, за исключением того, что мой обратный вызов serialEvent уведомляется после получения примерно 17 символов, для моего анализа пакета мне нужно, чтобы он был уведомлен, когда было получено <= 6 символов.Есть ли способ настроить последовательный API для вызова асинхронного.уведомление при указанном нет.символов было получено? </p>

Спасибо, Фред.

1 Ответ

1 голос
/ 30 июля 2010

Все, что вы получаете, это поток и SerialPortEvent.DATA_AVAILABLE, когда данные доступны в потоке. Что вы можете сделать, это добавить уровень косвенности и создать свой собственный слушатель, который будет вызываться, когда пройдено 6 символов, и просто передается в байтовом массиве с более чем 6 символами. Я добавил, где вы должны вставить код ниже. Реализация зависит от вас.

  public void serialEvent(SerialPortEvent event) {
    switch (event.getEventType()) {
    case SerialPortEvent.BI:
    case SerialPortEvent.OE:
    case SerialPortEvent.FE:
    case SerialPortEvent.PE:
    case SerialPortEvent.CD:
    case SerialPortEvent.CTS:
    case SerialPortEvent.DSR:
    case SerialPortEvent.RI:
    case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
      break;
    case SerialPortEvent.DATA_AVAILABLE:
      byte[] readBuffer = new byte[20];

      try {
        while (inputStream.available() > 0) {
          int numBytes = inputStream.read(readBuffer);
        }
        // partition readBuffer into chunks of 6 bytes
        ...
        registeredListener.dataReceived(sixByteByteArray);
      } catch (IOException e) {
      }
      break;
    }
  }
...