2012-07-05 34 views
7
  • Chúng tôi đang cố gắng phát hiện sự kiện trong C/C++.
  • Chúng tôi đang sử dụng Bluez trên Linux làm Thư viện Bluetooth của chúng tôi.
  • Mục tiêu của chúng tôi là chạy tập lệnh bên ngoài khi sự kiện đó được kích hoạt.
  • Cụ thể, chúng tôi có tai nghe Motorola H730, với nút trên đó và chúng tôi đang tìm cách phát hiện báo chí của nút đó.
  • Chúng tôi đã ghép nối thiết bị bluetooth (hcitool) và chúng tôi có thể kết nối với nó (bluez-test-audio), nhưng sẽ quan tâm đến việc di chuyển phương pháp đó tới C/C++.
  • Kết quả của hcidump khi thiết bị được kết nối và nút được nhấn là:Bluetooth: Phát hiện sự kiện bằng Bluez

    HCI sniffer - phân tích gói dữ liệu Bluetooth ver 2.2
    thiết bị: hci0 snap_len: 1028 lọc: 0xffffffff

    HCI Sự kiện: chế độ Change (0x14) plen 6
    tình trạng 0x00 xử lý chế độ 21 khoảng 0x00 0
    chế độ: Active
    ACL dữ liệu: xử lý 21 cờ 0x02 dlen 17
    L2CAP (d): cid 0x0041 len 13 [m² 0]
    < ACL dữ liệu: xử lý 21 cờ 0x00 dlen 14
    L2CAP (d): cid 0x0047 len 10 [m² 0]
    < ACL dữ liệu: xử lý 21 cờ 0x00 dlen 22
    L2CAP (d): cid 0x0047 len 18 [m² 0]
    < ACL dữ liệu: xử lý 21 cờ 0x00 dlen 22
    L2CAP (d): cid 0x0047 len 18 [m² 0]
    HCI tổ chức sự kiện : Số gói đã hoàn thành (0x13) plen 5
    xử lý 21 gói 1
    ACL dữ liệu: xử lý 21 cờ 0x02 dlen 18
    L2CAP (d): cid 0x0041 len 14 [m² 0]
    < ACL dữ liệu: xử lý 21 cờ 0x00 dlen 14
    L2CAP (d): cid 0x0047 len 10 [m² 0]
    HCI sự kiện: số gói Completed (0x13) plen 5
    xử lý 21 gói 1
    HCI sự kiện: số gói Completed (0x13) plen 5
    xử lý 21 gói 1
    HCI sự kiện: số Completed Các gói (0x13) plen 5
    xử lý 21 gói 1
    HCI sự kiện: Chế độ Change (0x14) plen 6
    tình trạng 0x00 xử lý chế độ 21 khoảng 0x02 2048
    Mode: Sniff

  • Chúng tôi đã xem xét cho các tài liệu bluetooth và chưa có nhiều thành công.
    Làm cách nào chúng tôi có thể phát hiện sự kiện bluetooth trong C/C++ bằng Bluez?
+0

Bạn có thành công gì không? – Schrieveslaach

Trả lời

0

hcidump như được thu thập là nhật ký giữa máy chủ lưu trữ và bộ điều khiển thiết bị. Sự kiện là những người mà bộ điều khiển đã gửi đến máy chủ thiết bị và lệnh là yêu cầu/phản hồi gửi đến máy chủ thiết bị.

Hướng dẫn lập trình Bluez: http://people.csail.mit.edu/albert/bluez-intro/

1

Tôi đã làm điều tương tự vào năm ngoái. Cách tiếp cận mà tôi đã giải quyết là sử dụng libdbus-c++ để tạo ra các đối tượng/lớp C++ proxy để giao tiếp với bluez thông qua dbus.

  • Xác định giao diện bluetooth do tai nghe của bạn thực hiện. Tôi đã sử dụng d-feet và đã khám phá thiết bị khi thiết bị được kết nối. Bạn có thể tự kiểm soát và đọc trạng thái từ tai nghe ở đây, điều này có ích cho việc gỡ lỗi.
  • Tạo, tìm hoặc tạo mô tả dbus xml của các giao diện được yêu cầu. Tôi đã làm điều này bằng tay bằng cách dịch các đặc điểm kỹ thuật api từ bluez api documentation đến xml tuy nhiên tôi tin rằng bạn cũng có thể tạo chúng bằng cách nhìn vào dbus.
  • Sử dụng dbusxx-xml2cpp để tạo Proxy đối tượng
  • Xác định callback được gọi khi nút bấm của bạn được nhấn
  • Tích hợp ủy quyền các đối tượng vào mã của bạn theo yêu cầu

Bạn sẽ cần phải liên kết mã của bạn để libdbus- c + + và có nó cài đặt trên mục tiêu quá.

Bạn có thể sử dụng các đối tượng proxy được tạo để truy cập toàn bộ chức năng của tai nghe, điều này có thể hữu ích hơn rất nhiều so với việc bấm nút bấm!