bluez glib编程 --- signal 信号的监听

监听添加新对象的信号

复制代码
    objectManager = g_dbus_proxy_new_sync(conn,
                      G_DBUS_PROXY_FLAGS_NONE,
                      NULL,
                      "org.bluez",
                      "/",
                      "org.freedesktop.DBus.ObjectManager",
                      NULL,
                      &error);
    PRINT_ERROR_LOG("ObjectManager");

    g_signal_connect(objectManager, "g-signal", G_CALLBACK(objectManager_handler), NULL);
复制代码

对象使用的是 /,接口使用的是标准接口 org.freedesktop.DBus.ObjectManager

复制代码
static void  objectManager_handler (GDBusProxy *proxy,
                       gchar *sender_name,
                       gchar *signal_name,
                       GVariant *params,
                       gpointer user_data) {
    if (g_strcmp0(signal_name, "InterfacesAdded") == 0) {
        interfaces_added(proxy, params, user_data);
        return;
    } else if (g_strcmp0(signal_name, "InterfacesRemoved") == 0) {
        interfaces_removed(proxy, params, user_data);
    }
}
复制代码

 

监听属性改变的信号

复制代码
                properties1 = g_dbus_proxy_new_sync(conn,
                                G_DBUS_PROXY_FLAGS_NONE,
                                NULL,
                                "org.bluez",
                                path,
                                "org.freedesktop.DBus.Properties",
                                NULL,
                                &error);
                PRINT_WARN_LOG("Properties");
                g_signal_connect(properties1, "g-signal::PropertiesChanged", G_CALLBACK(properties_handler), NULL);
复制代码

上面代码如果使用的对象是 /org/bluez/hci0/dev_A4_C1_38_10_09_2C/service0021/char0022,则监听接口 org.bluez.GattCharacteristic1 的属性变化

特征对象有三个接口:

interface_name: org.freedesktop.DBus.Introspectable
interface_name: org.bluez.GattCharacteristic1
interface_name: org.freedesktop.DBus.Properties 

通过标准接口 org.freedesktop.DBus.Properties 监听接口 org.bluez.GattCharacteristic1 的属性变化

内存回收

g_dbus_proxy_new_sync 返回值所占内存的回收得等到信号 disconnect。

 

posted @   流水灯  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
历史上的今天:
2018-07-22 Modbus
点击右上角即可分享
微信分享提示