使用glib通过USB将原始字节发送到FTDI设备

时间:2013-05-22 07:32:23

标签: c communication glib uart ftdi

我正在使用GTK + 2.0 GUI在C中开发一个简单的应用程序,当然,这个应用程序旨在控制通过USB端口连接的设备,并使用FTDI驱动程序通过USB模拟RS232异步协议端口。

我正在使用函数g_io_channel_write_chars()将数据发送到设备。问题是我发送的序列包含很多ASCII值但不匹配任何(可见)字符的值。

例如,当我发送\x40\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01时,它将无效。程序将因错误而停止。

GLib:ERROR:/build/buildd/glib2.0-2.34.1/./glib/giochannel.c:2382:g_io_channel_write_chars: code should not be reached Przerwane (core dumped)

如果我使用sprintf函数将此序列放入表中,则只会复制前两个值,并且此序列将被发送到设备而不会出错。

然后我的问题是,如何将任何字节发送到设备。这个有g_io_channel_write_chars()的等价物吗?我一直在研究GIOChannel的文档,但没有找到这样的东西。非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您需要确保频道不认为它正在发送文字。您遇到的崩溃可能是由于GIO试图根据其对频道编码的想法验证您的数据。

请注意,默认编码为UTF-8,并且由于并非所有字节序列都是有效的UTF-8,因此很容易导致随机二进制数据的验证失败。

使用参数NULL调用g_io_channel_set_encoding,这将使二进制数据安全:

  

编码NULL可以安全地与二进制数据一起使用。