bluez glib编程 --- API 功能介绍
遍历数组
g_variant_iter_next (GVariantIter, "{sa{sv}}", &gchar, &GVariantIter) g_variant_iter_next (GVariantIter, "{sv}", &gchar, &GVariant) g_variant_iter_next (GVariantIter, "s", &gchar)
从 GVariant 变量获取子成员变量
g_variant_get(GVariant, "(sa{sv}as)", &gchar, &GVariantIter, &GVariantIter) g_variant_get(GVariant, "(oa{sa{sv}})", &gchar, &GVariantIter) g_variant_get(GVariant, "(a{oa{sa{sv}}})", &GVariantIter) g_variant_get(GVariant, "ay", &GVariantIter); g_variant_get(GVariant, "s", &gchar)
判断 path 是不是 service_path 的前缀
g_str_has_prefix(service_path, path)
把 GVariant 变量转换为字符串形式,方便打印查看
gchar *value_str = g_variant_print(manufacturerData, TRUE);
连接蓝牙设备
variant_connect = g_dbus_proxy_call_sync( device1, "Connect", // 连接成功后,服务特征对象还得等一会儿才能出现,所以连接成功后不能立马通信 NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error );
注意:如果调用出现错误 le-connection-abort-by-local后,需要间隔一段时间再调用或者读取属性值 Connected,否则再调用Connect虽然没出现错误,但是还是未连接,如下:
读属性值
device1 = g_dbus_proxy_new_sync(conn, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.bluez", path, "org.bluez.Device1", NULL, &error); PRINT_WARN_LOG("Device1"); GVariant *flag_connected = NULL; flag_connected = g_dbus_proxy_get_cached_property(device1, "Connected");
注意:每次读属性值都得重新连接下接口,否则读取的属性不是最新的
和 bluetoothd 通信的步骤
1、连接总线
2、连接接口
3、方法调用 / 属性获取
连接总线
g_bus_get_sync
(总线+接口)连接
g_dbus_proxy_new_for_bus_sync
接口连接 + 方法调用
GVariant *managedObjects = g_dbus_connection_call_sync(
conn,
"org.bluez",
"/",
"org.freedesktop.DBus.ObjectManager",
"GetManagedObjects",
NULL,
G_VARIANT_TYPE("(a{oa{sa{sv}}})"),
G_DBUS_CALL_FLAGS_NONE,
-1,
NULL,
&error
);
接口连接
g_dbus_proxy_new_sync
方法调用
GVariant *result = g_dbus_proxy_call_sync(adapter1,
"RemoveDevice",
g_variant_new("(o)", path_object),
G_DBUS_CALL_FLAGS_NONE,
-1,
NULL,
&error);
属性获取
g_dbus_proxy_get_cached_property
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2018-07-17 STM32F103 ------ DMA 与 串口
2017-07-17 TCP ------ TCP创建服务器中出现的套接字