【问题标题】:Minimal GDBus client [closed]最小的 GDBus 客户端 [关闭]
【发布时间】:2018-07-10 15:29:25
【问题描述】:

我一直在尝试制作一个简单的程序,它可以自动完成 bluetoothctl 的一些功能。它不需要是 GPL 的,所以我不能只复制 bluetoothctl 的源代码。最大的绊脚石就是让一个简单的 D-Bus 程序运行起来。由于我的目标是嵌入式系统(尽管它相当强大),所以我负担不起运行 Python 或只使用任何编程语言的费用。

我在这里看到了几个问题,以及大量指向obsolete things 或断开链接或documentation 的网站,上面写着我“正在注册一些痛苦”。怎么没有一个简单的最小示例来设置 D-Bus 连接?

【问题讨论】:

    标签: c linux dbus


    【解决方案1】:

    这是一个 Makefile:

    LIBS=gio-2.0
    CFLAGS=-O0 -ggdb3 `pkg-config --cflags $(LIBS)`
    LDFLAGS=`pkg-config --libs $(LIBS)`
    
    .PHONY: clean
    default: gdbus-example
    gdbus-example: gdbus-example.o
        gcc $^ $(LDFLAGS) -o $@
    
    %.o: %.c
        gcc $(INCLUDE) $(CFLAGS) -o $@ -c $^
    
    clean:
        rm -f *.o gdbus-example
    

    这是一个用于构建的最小 C 文件,用于连接和监视 bluez:

    #include <stdio.h>
    #include <gio/gio.h>
    
    void name_appeared(GDBusConnection *connection,
                       const gchar *name,
                       const gchar *name_owner,
                       gpointer user_data)
    {
        printf("Name appeared: %s\n", name);
        printf("Owned by: %s\n", name_owner);
    }
    
    void name_vanished(GDBusConnection *connection,
                       const gchar *name,
                       gpointer user_data)
    {
        printf("Name vanished: %s\n", name);
    }
    
    int main(void)
    {
        GMainLoop *loop;
        GError *error;
        guint name;
    
        loop = g_main_loop_new(NULL, FALSE);
        name = g_bus_watch_name(G_BUS_TYPE_SYSTEM,
                                "org.bluez", // 
                                G_BUS_NAME_WATCHER_FLAGS_NONE,
                                name_appeared,
                                name_vanished,
                                NULL,
                                NULL);
    
        g_main_loop_run(loop);
    }
    

    这是我重新启动蓝牙服务的示例终端会话:

    $ ./gdbus-example 
    Name appeared: org.bluez
    Owned by: :1.16
    Name vanished: org.bluez
    Name appeared: org.bluez
    Owned by: :1.1152
    

    这里是gio documentation,其中包括 GDBus。它涵盖了如何构建和初始化 GDBus 程序。 DBus 项目指向high levellow level API 文档。

    【讨论】:

      猜你喜欢
      • 2010-11-08
      • 2011-12-19
      • 2011-01-30
      • 1970-01-01
      • 2010-12-26
      • 2022-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多