Bluetooth năng lượng thấp quản lý các thông số kết nối dường như đã thay đổi trong Android 6.Android 6.0 kẹo xốp marshmallow BLE: Kết nối thông số
Tôi có một thiết bị ngoại vi BLE những người cần sử dụng một số thông số kết nối cụ thể (đặc biệt, khoảng thời gian kết nối) và tôi muốn sử dụng khoảng thời gian kết nối tối thiểu được phép theo đặc tả BLE (tức là 7,5ms).
SDK Android không cho phép chọn nó từ phía BLE GAP Central (điện thoại thông minh), do đó, cách thích hợp để làm điều đó là làm cho thiết bị ngoại vi GAP của tôi gửi L2CAP Connection Parameter Update Request
sau khi kết nối GAP được thực hiện.
Các thông số tôi yêu cầu là:
- conn khoảng phút: 7,5ms
- conn khoảng tối đa: 7,5ms
- nô lệ thời gian chờ: 0
- giám sát thời gian chờ: 2000 mili giây
Điều này hoạt động như mong đợi với tất cả các thiết bị Android mà tôi đã thử nghiệm, từ 4,3 đến 5.x: sau khi gửi L2CAP Connection Parameter Update Request
, thiết bị của tôi nhận được L2CAP Connection Parameter Update Response
với 0x0000 (được chấp nhận), tiếp theo là LE Connection Update Complete event
nơi tôi có thể thấy rằng các thông số kết nối được yêu cầu cũng được tính đến.
Bây giờ, với máy tính bảng Nexus 9 hoặc với 2 thiết bị Nexus 5 khác nhau, tất cả đều có Android 6.0.1, tôi có thể thấy rằng L2CAP Connection Parameter Update Request
luôn bị từ chối (Tôi nhận được L2CAP Connection Parameter Update Response
với 0x0001 (bị từ chối)). Sau đó, tôi nhận được một số LE Connection Update Complete event
nơi tôi có thể thấy rằng các tham số kết nối được yêu cầu KHÔNG được tính đến.
Tôi đã thử điều này với 2 cách triển khai khác nhau ở bên ngoại vi (một với ST Microelectronics 'BlueNRG, một với NRF52 của Nordic Semiconductor), cả hai đều có cùng kết quả.
Sau đó, sau khi thử nghiệm thêm: Tôi đã thử các bộ tham số khác nhau, thay đổi khoảng thời gian tối đa của conn (tôi giữ các thông số khác giống nhau). Dưới đây là những gì tôi tìm thấy:
- với tối đa khoảng conn = 18.75ms, cập nhật theo yêu cầu đã được chấp nhận với khoảng thời gian thiết lập để 18.75ms
- với tối đa khoảng conn = 17.50ms, cập nhật theo yêu cầu đã được chấp nhận với thiết lập khoảng thời gian để 15.00 ms
- với conn tối đa khoảng thời gian = 15.00ms, cập nhật theo yêu cầu đã được chấp nhận với thiết lập khoảng thời gian để 15.00ms
- với tối đa khoảng conn = 13.75ms, cập nhật theo yêu cầu đã được chấp nhận với khoảng thời gian thiết lập để 11.25ms
- với tối đa khoảng conn = 11,25ms, yêu cầu cập nhật đã được chấp nhận với khoảng thời gian được đặt thành 11,25ms
- với bất kỳ giá trị tối đa khoảng thời gian nào khác dưới 11,25ms, tôi bị từ chối.
Vì vậy, quan sát là một cái gì đó đã thay đổi rõ ràng với cách ngăn xếp BLE của Android 6 xử lý các thông số kết nối. Nhưng dường như không có bất kỳ loại thông tin hoặc tài liệu nào để xác nhận điều đó.
Quan sát của tôi dẫn đến kết luận rằng khoảng thời gian kết nối tối thiểu được phép hiện là 11.25ms (thực sự phù hợp với nhu cầu của tôi) thay vì 7,5ms trong các phiên bản Android trước đó. Nhưng đã tìm thấy nó theo kinh nghiệm, tôi muốn chắc chắn rằng tôi không thiếu một số ràng buộc/quy tắc khác hoặc nếu tối thiểu đó sẽ không động, tùy thuộc vào mức pin hiện tại ...
Điều gì sẽ là tuyệt vời sẽ có tương đương với Apple's Bluetooth Design Guidelines (xem §3.6) để thiết lập những điều rõ ràng về cách một LE Ngoại vi nên đối phó với chủ đề này.
Có ai có cùng vấn đề hoặc biết một số thông tin hữu ích khác từ Google không?
Tôi muốn thêm điều đó vào btm_ble_api.h, các giá trị của BTM_BLE_CONN_INT_MIN [0x0006] và BTM_BLE_CONN_INT_MAX [0x0C80] chưa thay đổi.Sự từ chối này có lẽ không xảy ra trong l2c_ble.c. – GPS