如何在C++中使用Bluez5 DBUS API来配对和连接新设备?
我正在为英特尔Edison写蓝牙驱动程序。 Board软件是最新版本,我正在开发使用基于Eclipse的IDE。 此爱迪生版本中的Bluez版本号是5.37。如何在C++中使用Bluez5 DBUS API来配对和连接新设备?
我设计它必须满足以下要求的系统:
- 扫描附近的蓝牙设备。 [X]
- 根据名称和MAC地址检测传感器设备。 [X]
- 自动配对并连接传感器设备。 []
最后一项是问题,因为我可以检测传感器设备,但我无法使用bluez5接口将它们配对。到目前为止,我已经尝试使用d-BUS接口,但它不工作,因为我不断收到以下错误信息:在界面中的“org.bluez.Manager”有特色“的”
法“FindAdapter”不存在
代码在这里介绍。请注意:
- DBusConnection *连接 - > DBUS_BUS_SYSTEM
- 为const char *适配器 - > “hci0”。
代码:
DBusMessage *msg, *reply;
DBusError err;
const char *reply_path;
char *path;
msg = dbus_message_new_method_call("org.bluez", "/","org.bluez.Manager", "FindAdapter");
dbus_message_append_args(msg, DBUS_TYPE_STRING, &adapter,DBUS_TYPE_INVALID);
dbus_error_init(&err);
reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, &err);
dbus_message_unref(msg);
任何想法?
为了给你一个anwser,Pair和Connect与device-api.txt关联。要调用这些方法,您可以发送DBUS消息(就像你在上面提供的代码所做的那样),或建立具有以下参数代理对象(文档中找到):
名称:“org.bluez”
接口“org.bluez.Device1”
path:“/ org/bluez/dev_AA_BB_CC_DD_EE”其中AA_BB_CC_DD_EE是您的设备mac地址。
如果您选择构建代理对象,则可以通过代理调用诸如Pair或Connect之类的方法。
你能解释一下你在上面的代码中想达到什么吗?我知道你想找到使用哪个适配器(我看到“FindAdapter”方法),但是你似乎已经知道你的适配器名称是“hci0”。
我一直与最近配合bluez暴露的DBus API和我不熟悉的界面“org.bluez.Manager”。
后的官方文档(https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc)我能找到一个快速搜索以下提交指定的接口是在2012年下降了: https://git.kernel.org/cgit/bluetooth/bluez.git/commit/doc?id=86a7b07c22f3a595ba3c48092359287905bf0878
我也注意到你正在使用的DBus低级别API,正如freedesktop自己建议的(阅读页面底部:https://dbus.freedesktop.org/doc/api/html/group__DBus.html),这是非常复杂的API,用于在其他语言中创建绑定。如果可以,请切换到GLib GDBus以获得更简单的API。
您可以使用一些更高级的API,例如Qt5现在有一个蓝牙模块(它也使用蓝色底层)。也许这可以更直接地使用。 – Venemo