使用tinyos,SerialForwarder将数据转发到套接字。 我试图用主机打开套接字:“localhost”,port =“9001”,,但这总是会返回两个字节=“T!” !!
然后我尝试打开具有相同属性的TCP连接,但是我收到了这个警告:
warning unsuccessful read a timeout occurred before the terminator was reached
如何阅读SerialForwarder中的数据?
答案 0 :(得分:0)
你必须仔细阅读串行堆栈......它不是很容易,但它能做到。
您可以直接从串口读取。在这种情况下,您不需要串行转发器。几乎没有什么可以照顾的。
例如,如果您想要读取正在发送到PC串行端口的串行消息(usb传感器板就像串行一样工作,因为它们使用USB转换为FTDI芯片的串行转换器。)
在C#中(对于Java等同样...),您可以读取串行端口中的字节流。您可以解析此字节流以提取tinyos的标准串行消息。
这在TEP #113中以某种方式解释,虽然它有一些问题,但您应该能够找到这些问题并使您的程序正常工作。
正如在TEP 113中所述,标准串行数据包类似于:
7e 40 09 00 ef 05 7d 5d 06 01 02 03 04 05 7e
这意味着,数据包以十六进制7E
开头(我相信它的126或127),并以7E
结束。最后2个字节是数据包的CRC
。因此,当您遇到7E
时,您可以在c#程序中开始从串口读取数据,并在到达流中的下一个7E
时停止阅读。介于两者之间的一切都将是你的数据包。
您必须小心escaping
,如果7E
是您的数据包内容的一部分,不要与开始和结束的血液计量器混淆,它将被转义为其他东西..那也是在TEP 113中解释的。
我相信有一些用于计算CRC的C ++代码,您可以轻松地将其转换为C#或Java代码。
同时检查Serial.h
的源代码,其中包含有关如何在TinyOS中形成串行数据包的一些细节。