2015-02-03 18 views
5

Tôi có một hệ thống nhúng chạy một máy chủ GATT mà tôi đang cố gắng kết nối thông qua Android. Nhiệm vụ rất đơn giản: kết nối với máy chủ GATT, điều hướng các đặc tính và xác nhận khả năng đọc/ghi. Vấn đề là khi tôi thử và kết nối với một ứng dụng Android, nó cố gắng ghép nối với một "Passkey" thay vì với "Just Works" [https://developer.bluetooth.org/TechnologyOverview/Pages/LE-Security.aspx]. Điều này không được chấp nhận vì thiết bị nhúng của tôi không có bất kỳ phương pháp nào để hiển thị khóa cho người dùng sử dụng để ghép nối. Vì vậy, phương thức kết nối phải là Chỉ hoạt động.Làm thế nào để buộc Bluetooth LE "Chỉ hoạt động" Ghép nối trong Android

Tôi đã thử nhiều ứng dụng từ cửa hàng Play và tất cả chúng chỉ cố gắng ghép nối với Passkey. Nhưng đây là số điện thoại hiện tại tôi đang làm việc với: https://play.google.com/store/apps/details?id=com.macdom.ble.blescanner

Tôi làm việc này bằng ứng dụng LightBlue (được hỗ trợ trong OS X và iOS). Vì vậy, tôi biết thiết bị ngoại vi của tôi (máy chủ GATT) đang hoạt động: quảng cáo, có thể kết nối, có thể truy cập đặc trưng, ​​v.v.

Làm cách nào để Android sử dụng Chỉ hoạt động thay vì ghép nối Passkey? Có một cấu hình ngoại vi tôi đang thiếu?

Cảm ơn

+1

Thiết bị nhúng của bạn phải quảng cáo khả năng IO thích hợp trong giai đoạn xác thực bluetooth. Đặc biệt nó có lẽ nên được quảng cáo NoInpiutOutput. Làm thế nào để làm điều này phụ thuộc vào những gì bạn đang chạy trên hệ thống nhúng của bạn. Ví dụ: nếu bạn đang chạy Linux thì tác nhân đi kèm với bluez có thể chạy như sau: test-agent -c NoInputNoOutput – kaylum

+0

@kaylum ** đại lý thử nghiệm ** là gì? –

+1

@IgorGanapolsky test-agent là mã tác nhân ví dụ đi kèm với bluez. Nó được đổi tên thành 'simple-agent'. Mã nguồn [ở đây] (https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/test/simple-agent) – kaylum

Trả lời

3

Gốc của vấn đề là chế độ giao diện Linux đang ở. Thiết bị Bluetooth có hỗ trợ cả BR/EDR (Classic) và LE theo mặc định là trong hai chế độ. Nghĩa là, chúng có thể hoạt động như một thiết bị Cổ điển hoặc LE. Tôi không có cái nhìn sâu sắc về API Android và chưa cố gắng phát triển ứng dụng Android có thể phát hiện thiết bị chế độ kép và chọn kết nối với LE bằng cách sử dụng ghép nối Chỉ hoạt động. Nhưng tôi đã có thể tắt BR/EDR trên giao diện và xác thực Android đã phát hiện thấy nó trong quá trình quét dưới dạng giao diện LE (chế độ đơn). Ứng dụng Android sau đó được kết nối liền mạch bằng cách sử dụng ghép nối Chỉ hoạt động.

Sau đây là cách tôi vô hiệu hóa BR/EDR trên giao diện:

$ sudo hciconfig hci0 down 
$ sudo ./btmgmt bredr off 
hci0 Set BR/EDR complete, settings: connectable bondable le 
$ sudo hciconfig hci0 up 
$ sudo hciconfig hci0 leadv 

Bạn có thể xây dựng ứng dụng btmgmt trong Linux bằng cách tải và xây dựng Bluez. Ứng dụng btmgmt được xây dựng có điều kiện trên tham số cấu hình --enable-experimental.

CẬP NHẬT: Cách tiếp cận khác thay vì sửa đổi khả năng giao diện, chỉ cần sửa đổi khả năng giao diện được phát. Điều này được thực hiện thông qua các cờ quảng cáo. Sửa đổi cờ để phát sóng BR/EDR không được hỗ trợ. Đây là bit 2 và sẽ tạo ra một cờ phát sóng của 0x04. (Xem Bluetooth SIG doc CSS v4: Phần A, Phần 1.3.2)

+0

Rất vui khi bạn làm cho nó hoạt động. Nhưng không chắc chắn lời giải thích khá hợp lý. Vì bluetooth cổ điển cũng hỗ trợ ghép nối chỉ hoạt động. Có vẻ như vấn đề đã thay đổi thay vì được giải quyết. – kaylum

+1

Nó không phải là vấn đề của BR/EDR hỗ trợ Just Works. Tôi đang làm việc với các ứng dụng Android trên Cửa hàng Play đang đặt mặc định thành ghép nối Passkey. Cách duy nhất tôi có thể khiến họ làm việc là nếu giao diện ở chế độ đơn (chỉ LE). Có khả năng là có thể kiểm soát điều này với API của Android vì tôi không gặp vấn đề tương tự với ứng dụng iOS. Nhưng tôi đã được giao nhiệm vụ với mặt tích cực của mọi thứ. Và vì đây sẽ là thiết bị chỉ có LE.Có ý nghĩa khi quảng cáo BR/EDR không được hỗ trợ. – linsek

+0

Bằng cách "Sửa đổi cờ phát sóng BR/EDR không được hỗ trợ", bạn có nghĩa là sửa đổi chúng trên thiết bị từ xa hoặc android không? Điều này đã được sửa chữa ở phía bên android? – GPS

Các vấn đề liên quan