Đây là một phần giải thích tại sao điều này xảy ra.
https://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root
Đây là nhận của tôi về nó:
Hệ thống phân cấp cuộc gọi bluetooth thực tế dường như là:
QT triển khai (thư viện) của Bluetooth được gọi là "Bluetooth (mô-đun).
Lưu ý rằng mô-đun này KHÔNG giống nhau trong mọi phiên bản QT và nó thực sự bị thiếu trong một số phiên bản.
"Thư viện" mô-đun QT là bản sao / sửa đổi QT của "bluez".
"bluez" dựa trên "hci".
Lưu ý - Tôi đã sử dụng trực tiếp "hci", bỏ qua "bluez" và không tìm thấy bất kỳ sự cố nào khi sử dụng trực tiếp. Trên thực tế, việc triển khai QT bị thiếu khi đặt lại vật lý "Thiết bị Bluetooth được tìm thấy với cuộc gọi thành công cuối cùng cho chúng". Vì vậy, tôi sử dụng "hci" để đặt lại cơ sở dữ liệu không xác định của thiết bị Bluetooth được tìm thấy lần trước.
Bây giờ có các ví dụ về QT C/C++
ví dụ btscanner hoạt động như mong đợi - trả về các thiết bị lân cận và "dịch vụ" của nó
btchat về cơ bản cũng vậy, nhưng không thành công với lỗi trên.
Cả hai ví dụ này chỉ thực hiện ba TÍN HIỆU
bắt đầu
tìm thấy thiết bị
đã kết thúc
**KHÔNG CÓ TÍN HIỆU "thiết bị được tìm thấy" ** trong btchat,
có trong btscanner!!
Do đó, "vấn đề" xảy ra với việc triển khai btchat của "bluez" và btchat sử dụng các chức năng QT KHÁC - thêm một lớp KHÁC để gọi/sử dụng "bluez"...
Vì việc sử dụng các chức năng QT là trong thời gian thực nên việc tìm ra trình tự của các cuộc gọi và nơi nó bị kẹt là một thách thức.