2017-01-03 12 views
2

을 사용하여 BLE 센서에서 광고 패킷을 읽는 올바른 방법 BLE 센서에서 광고 패킷을 읽는 데 C++ 코드 (bluez 5.43 및 dbus 사용)를 구현하려고합니다. bluez DBus 문서에 따라 근처 장치를 검색하는 데 사용할 수있는 StartDiscovery StartDiscovery API가 있습니다. 그러나 근처의 BLE 장치에서 보급 알림 패킷을 저장/파싱 할 API를 찾을 수 없습니다. advertising-api.txt는 registeradvertisement API를 나열하지만 내 이해에 따라 광고 패킷을 생성하고 외부 장치에서 읽지 않는 경우에만 사용할 수 있습니다 (또는 잘못된 것입니까?) 누군가 BEF 근처의 광고 패킷을 얻는 올바른 방법으로 나를 안내 할 수 있습니까? bluez 및 DBus를 사용하는 기기?bluez 5.43 및 DBus

+0

내가 알기로, 당신은'StartDiscovery'를하고,'Device' 객체는 발견되는 동안 나타납니다. 이러한 개체의 속성은 아마도 광고 패킷의 데이터로 채워질 것입니다. – Velkan

+0

@Velkan : 응답 해 주셔서 감사합니다. 솔직히 나는 여기서 약간 혼란스러워. 나는 센서 패킷을 정기적으로 광고 패킷 형태로 전송하는 BLE 센서를 가지고 있습니다. 이 정보는 저에너지 스캔 응답에도 포함됩니다. 따라서 필요한 데이터를 구문 분석하려면 전체 응답이 필요합니다. dbus 및 bluez-5.43을 사용하여 구현하려고합니다. 어떤 특성이 낮은 에너지 스캔 응답을 제공한다고 생각하지 않습니다. 내가 틀렸다면 나를 바로 잡아주세요. – darkknight

+0

org.bluez.Device1에는 ServiceData 및 ManufacturerData가 있습니다. 그것들은 advertising-api.txt의 ServiceData 및 ManufacturerData와 같지 않습니까? 아마도 그들은 판독 값을 담고있는 AdvData를 포함하고 있을까요? – Velkan

답변

0

귀하가 마지막으로 언급 한 행동은 올바른 것입니다 (광고 데이터가 업데이트되지 않음) : BLE 장치가 항상 작동하지 않아야한다면, 잠들거나 돌아서 수 있습니다. 저전력 등이 있습니다.

이 컨텍스트에서 데이터가 어떤 식 으로든 "캐시 된"것은 이상한 것이 아닙니다. 내 경험에 비추어 볼 때, 스캔을 수행하고 장치를 발견하면 (연결하지 않아도) 장치 정보가 잠시 동안 저장됩니다.

귀하의 경우에는 광고를 통해 데이터를 전달하기 때문에 문제가 발생합니다. 그러나 에는 bluez가 장치에 대한 캐시 된 데이터를 모두 제거하도록하는 방법이 있습니다. : adapter-api는 RemoveDevice (개체 장치) 메서드를 제공합니다. 인수로 객체 경로 (예 : "/ org/bluez/hci0/dev_AA_BB_AA_BB_AA")를 취합니다.

C에서 DBus 바인딩을 찾고 있다면 GLib GDBus를 제안합니다 (freedesktop 웹 사이트의이 자습서 하단에 링크가 있습니다 : https://dbus.freedesktop.org/doc/dbus-tutorial.html). 당신이 bluetoothctl (명령을 사용하여 bluez과 상호 작용하는 도구)가 여기에 소스 코드를 찾을 수 있습니다 입심 GDbus 당신을 사용하여 bluez들에 의해 경제력되었다 잘 알고있는 경우

(명령을 찾을 하단에 보면 목록) : bluez하지만 bluetoothctl 소스 코드 GDBus를 사용하는 것이 더 straigthforward 가지 방법이 있습니다

https://git.kernel.org/cgit/bluetooth/bluez.git/tree/client/main.c가 시작이며 bluez와 함께 할 수 있습니다 거의 아무것도에 대한 예를 찾을 수 있습니다 =)

0

감사에 대한 모두에게 제안. 마침내 인텔의 tinyb 라이브러리를 사용하여 제조업체 데이터를 얻을 수있었습니다. 제조업체 데이터가 변경 될 때마다 알림을받을 수있는 enable_manufacturer_data_notifications API가 있습니다.