Java串行通信: way to set receieve threshold when using async.读取通知

标签 java asynchronous serial-port

我有一些使用 JavaComm API 的代码。它实现了 SerialPortEventListener 并且字符的接收是异步发生的。这工作正常,除了我的串行事件回调在收到大约 17 个字符后收到通知,对于我的数据包解析,我需要在收到 <= 6 个字符时收到通知。有没有办法配置串行 API 来调用 async.指定编号时的通知。已收到字符数?

谢谢你, 弗雷德。

最佳答案

当数据在流中可用时,您得到的只是一个流和一个 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;
    }
  }

关于Java串行通信: way to set receieve threshold when using async.读取通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3367872/

相关文章:

java - 如何在绑定(bind) fragment 上实现拉动刷新?

java - Android 通知未显示

java - Executor Service 上的异步进程

linux - 如何知道 "lag"/串口传输延迟?

c# - 在 C# 中以编程方式更改串行端口配置

java - 调用 'Class.forName' 时未选中强制转换警告

Java:双击文本文件。我想将文件加载到文本编辑器中,但如何获取单击文件的文件路径?

java - 如何使用 Spring 制作异步 REST?

javascript - 如何从异步调用返回响应?

java - 动态查找字符串以寻址串行端口