Tôi đang viết trình điều khiển bluetooth cho Intel Edison. Phần mềm Board mới nhất có sẵn và tôi đang phát triển bằng cách sử dụng IDE dựa trên Eclipse. Số phiên bản Bluez trong phiên bản edison này là 5,37.Làm cách nào để sử dụng API Bluez5 DBUS trong C++ để ghép nối và kết nối các thiết bị mới?
Tôi thiết kế một hệ thống trong đó có để đáp ứng các yêu cầu sau:
- Scan cho các thiết bị bluetooth xung quanh. [X]
- Phát hiện thiết bị cảm biến dựa trên tên và địa chỉ MAC. [X]
- Ghép nối và tự động kết nối các thiết bị cảm biến. []
Mục cuối cùng là vấn đề vì tôi có thể phát hiện thiết bị cảm biến nhưng tôi không thể ghép nối chúng bằng giao diện bluez5. Cho đến nay tôi đã cố gắng sử dụng giao diện D-BUS nhưng nó không hoạt động vì tôi tiếp tục nhận được thông báo lỗi sau:
Phương thức "FindAdapter" với chữ ký "s" trên giao diện "org.bluez.Manager" không tồn tại
Mã được trình bày ở đây. Xin lưu ý:
- DBusConnection * conn -> DBUS_BUS_SYSTEM
- const char * adapter -> "hci0".
Code:
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);
Bất kỳ ý tưởng?
Bạn có thể sử dụng một số API cấp cao hơn, ví dụ Qt5 có mô-đun Bluetooth ngay bây giờ (cũng sử dụng bluez dưới mui xe). Có lẽ điều đó có thể đơn giản hơn để sử dụng. – Venemo