【问题标题】:Using glib and gtk+ to control ftdi device over USB使用 glib 和 gtk+ 通过 USB 控制 ftdi 设备
【发布时间】:2013-05-19 19:07:14
【问题描述】:

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

我想创建事件驱动的控件,例如 GTK 中用于检测按钮何时被单击等的信号。我为此找到了 glib 库,我在文档中阅读了它似乎很清楚。我知道我必须使用 g_io_add_watch() 之类的函数来添加要检测的事件,我可以定义我的函数将由该事件“触发”,例如“G_IO_IN”意味着它将在有一些输出时触发设备。我只是在网上找不到任何有用的例子。

另一件事是,我不明白如何同时使用 GTK+2.0 和 glib,因为它们都有自己的程序循环来检测事件(GTK+2.0 的 gtk_main() 和 glib 中的 GMainLoop)。

如果您分享一些有趣的示例、链接、教程等,我会非常高兴。也许我需要知道更具体的词汇,因为我在网上找不到任何有用的东西来解决这个问题。 谢谢!

【问题讨论】:

  • GTK+ 使用 glib,因此对于 GUI 内容,您很少需要直接使用 glib API。一个值得注意的例外是 g_signal_connect() 系列函数,用于将 GTK+ 信号处理程序连接到您的图形元素(例如单击示例中的按钮时),因为过时的 gtk_signal_connect() 在很久以前就已经贬值了。另一方面,gtk_main() 仍然是启动主 GUI 循环的首选方式。
  • 是的,我正在使用g_signal_connect() 来定义 GUI 事件,我只是不确定如何集成对 ftdi 驱动程序信号的检测,因此可以使用像 G_OBJECT 这样的设备来使用g_signal_connect() 创建一个事件?
  • 哦,我明白了,很遗憾,我无法帮助您处理 ftdi 驱动程序信号(没有足够的经验)。但是要发出 GTK+ 信号,请查看 g_signal_emit_() 系列函数,以及它们周围的文档。您还可以创建、发出和处理自己的 GTK+ 信号(如果我没记错的话,通过 marshallers)。
  • 我明白了,所以似乎可以定义自定义 GTK+ 信号,我查找了关键字 marshallers。问题还没有解决,但是谢谢,至少我不再走投无路了。

标签: c gtk glib uart ftdi


【解决方案1】:

GTK+ 使用 GLib,主循环也不例外。这意味着GTK+ loopGMainLoop,因此所有GLib 函数都可以与它一起使用。

这是对prove this 的 GTK+ 代码的引用。

【讨论】:

  • 我明白了。所以请告诉我,如果我引用#include <gtk/gtk.h>,我还会引用(通过转换)glib 吗?如果我通过g_io_add_watch(...) 定义事件,然后启动gtk_main() 循环,它会等待这些事件发生吗?
  • #include <gtk/gtk.h> 将引入#include <glib.h>#include <glib-object.h>。这没有记录,所以我个人将它们明确地包含在我的项目中。对于第二个问题,答案是“是的,您可以使用g_io_add_watch()”和“不,主循环不会等待”。 g_io_add_watch() 不会暂停循环,但会设计一个回调调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 2013-07-01
  • 1970-01-01
相关资源
最近更新 更多