【发布时间】:2013-01-16 14:20:15
【问题描述】:
我很难弄清楚如何正确使用 RXTX 传输(从今天的 Git 开始)。
我可以编写入站处理程序,该处理程序使用从串行端口读取的内容,对其进行解码,然后通过自定义出站处理程序将一些其他内容发送到串行端口。到目前为止还不错。
现在,有一个用例,我需要从主程序通过 MessageToByteEncoder(我之前谈到的同一个自定义 outboundhandler)编写消息(最后,这实际上是一个使用 Netty 的库) .所以基本上,我正在尝试与上述情况相同,只是我不通过解码器并发送要从主程序写入的消息,而不是入站处理程序。这种情况在我的情况下似乎不起作用:似乎什么都没有发生,就好像我的消息没有发送一样。不幸的是,Netty 中没有很多日志语句,我可能错了,但我遇到的问题可能会浮出水面,因为主线程不在事件循环中(这并不奇怪!:))。
不幸的是,RXTX 示例仅从入站处理程序(通过 ChannelHandlerContext)写入消息,因此我无法找出我做错了什么,或者 Netty 中最近添加的这个新功能是否存在错误。
有什么建议吗?
【问题讨论】:
-
实际上,我对这个问题进行了更多调查。我写了一个 Arduino 草图,在发送“AT\n”字符串时发回“OK”。到目前为止很好,我可以通过串行监视器检查。然后我简单地更改了 Rxtx 示例以指定正确的串行端口和正确的波特率。我可以看到 Arduino 收到了一些东西,但是当调用 buf.writeBytes(in, buf.writableBytes()) 时我卡在了 RxtxChannel.doReadBytes() 方法中......
-
哼。我可能已经发现了问题:如果我在调试模式下运行并在 RxtxChannel.doConnect() 中设置断点,我就可以完成这项工作。我想有一个竞争条件或者某个地方需要等待......
-
实际上,我现在可以确认这一点:如果我在 cpi.open(getClass().getName(), 1000) 之后添加类似 Thread.sleep(5000) 的内容,它可以正常工作!