นี่คือคำอธิบายบางส่วนว่าทำไมสิ่งนี้ถึงเกิดขึ้น
https://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root
นี่คือสิ่งที่ฉันทำ:
ลำดับชั้นการโทรผ่านบลูทูธที่แท้จริงจะเป็นดังนี้:
การใช้งาน QT (ไลบรารี่ ) ของ Bluetooth ที่เรียกว่า "Bluetooth (โมดูล)
โปรดทราบว่าโมดูลนี้ไม่เหมือนกันในทุกเวอร์ชันของ QT และบางโมดูลขาดหายไปจริง ๆ
โมดูล QT "library" เป็นการคัดลอก / แก้ไข QT ของ "bluez"
"bluez" ขึ้นอยู่กับ "hci"
หมายเหตุ - ฉันใช้ "hci" โดยตรง โดยผ่าน "bluez" และไม่พบปัญหาใดๆ ในการใช้โดยตรง การใช้งาน QT จริง ๆ แล้วขาดการรีเซ็ตทางกายภาพ "พบอุปกรณ์บลูทู ธ ที่โทรสำเร็จครั้งล่าสุดสำหรับพวกเขา " ดังนั้นฉันจึงใช้ "hci" เพื่อรีเซ็ตฐานข้อมูลที่ไม่รู้จักของอุปกรณ์บลูทูธที่พบครั้งล่าสุด
ตอนนี้มีตัวอย่าง QT C/C++
ตัวอย่าง btscanner ทำงานตามที่คาดไว้ - ส่งคืนอุปกรณ์ใกล้เคียงและ "บริการ"
btchat โดยทั่วไปทำเหมือนกัน แต่ล้มเหลวด้วยข้อผิดพลาดข้างต้น
ทั้งสองตัวอย่างนี้ใช้สัญญาณเพียงสามสัญญาณเท่านั้น
เริ่ม
พบอุปกรณ์
เสร็จ
** ไม่มีสัญญาณ "พบอุปกรณ์" ** ใน btchat
มีใน btscanner !!
ดังนั้น "ปัญหา" จึงเกิดขึ้นกับการใช้งาน btchat ของ "bluez" และ btchat ใช้ฟังก์ชัน QT ที่แตกต่างกัน - เพิ่มเลเยอร์อื่นเพื่อโทร / ใช้ "bluez"...
เนื่องจากการใช้ฟังก์ชัน QT เป็นแบบเรียลไทม์ จึงเป็นเรื่องท้าทายในการค้นหาลำดับของการโทรและตำแหน่งที่ติดขัด