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。
标签:
bluez/dbus
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2018-07-22 Modbus