Re: Getting ADV_IND and SCAN_RSP data with DBus

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Barry,

> I attempting to get the advertising data from a commercially available
> sensor device using the DBus API.
> The sensor device gives different manufacturer data depending if the
> event type is ADV_IND or SCAN_RSP, as you can see below in the btmon
> output.
> 
> With DBus I am subscribing to the InterfacesAdded signal which
> triggers when the device has been found. However, it only seems to
> give me the information for the SCAN_RSP.
> If I subscribe to the PropertiesChanged signal on the device, that is
> also only giving the data from the SCAN_RSP event.
> 
> How do I access both types of data with the DBus API?
> 
> Thanks,
> Barry
> 
> $ bluetoothctl -v
> bluetoothctl: 5.50
> 
> 
> btmon output for sensor device:
> 
>> HCI Event: LE Meta Event (0x3e) plen 43                                                                    #1969 [hci0] 740.157687
>      LE Advertising Report (0x02)
>        Num reports: 1
>        Event type: Connectable undirected - ADV_IND (0x00)
>        Address type: Random (0x01)
>        Address: DC:76:F7:E1:62:E0 (Static)
>        Data length: 31
>        Flags: 0x06
>          LE General Discoverable Mode
>          BR/EDR Not Supported
>        Company: Blue Maestro Limited (307)
>          Data: 1b640e10010400e701a527f50100
>        Name (complete): DC76F7E1
>        RSSI: -44 dBm (0xd4)
>> HCI Event: LE Meta Event (0x3e) plen 41                                                                    #1970 [hci0] 740.158684
>      LE Advertising Report (0x02)
>        Num reports: 1
>        Event type: Scan response - SCAN_RSP (0x04)
>        Address type: Random (0x01)
>        Address: DC:76:F7:E1:62:E0 (Static)
>        Data length: 29
>        Company: Blue Maestro Limited (307)
>          Data: 27fd27f227ea0000010201b600e4017100f4018c0000000000
>        RSSI: -44 dBm (0xd4)
> @ MGMT Event: Device Found (0x0012) plen 74
>                                   {0x0002} [hci0] 740.158704
>        LE Address: DC:76:F7:E1:62:E0 (Static)
>        RSSI: -44 dBm (0xd4)
>        Flags: 0x00000000
>        Data length: 60
>        Flags: 0x06
>          LE General Discoverable Mode
>          BR/EDR Not Supported
>        Company: Blue Maestro Limited (307)
>          Data: 1b640e10010400e701a527f50100
>        Name (complete): DC76F7E1
>        Company: Blue Maestro Limited (307)
>          Data: 27fd27f227ea0000010201b600e4017100f4018c0000000000
> @ MGMT Event: Device Found (0x0012) plen 74
>                                   {0x0001} [hci0] 740.158704
>        LE Address: DC:76:F7:E1:62:E0 (Static)
>        RSSI: -44 dBm (0xd4)
>        Flags: 0x00000000
>        Data length: 60
>        Flags: 0x06
>          LE General Discoverable Mode
>          BR/EDR Not Supported
>        Company: Blue Maestro Limited (307)
>          Data: 1b640e10010400e701a527f50100
>        Name (complete): DC76F7E1
>        Company: Blue Maestro Limited (307)
>          Data: 27fd27f227ea0000010201b600e4017100f4018c0000000000
> 
> 
> Device information from the InterfacesAdded DBus signal:
> 
> {'Adapter': '/org/bluez/hci0',
> 'Address': 'DC:76:F7:E1:62:E0',
> 'AddressType': 'random',
> 'Alias': 'DC76F7E1',
> 'Blocked': False,
> 'Connected': False,
> 'LegacyPairing': False,
> 'ManufacturerData': {307: [39, 253, 39, 242, 39, 234, 0, 0, 1, 2, 1,
> 182, 0, 228, 1, 113, 0, 244,1, 140, 0, 0, 0, 0, 0]},
> 'Name': 'DC76F7E1',
> 'Paired': False,
> 'RSSI': -51,
> 'ServicesResolved': False,
> 'Trusted': False,
> 'UUIDs': []}
> 
> Looking at the propertiesChanged signal on the device, it is also only
> showing the same manufacturer data:
> org.bluez.Device1 {'RSSI': -45, 'ManufacturerData': {307: [39, 253,
> 39, 242, 39, 234, 0, 0, 1, 2, 1, 182, 0, 228, 1, 113, 0, 244, 1, 140,
> 0, 0, 0, 0, 0]}} []
> org.bluez.Device1 {'RSSI': -52, 'ManufacturerData': {307: [39, 253,
> 39, 242, 39, 234, 0, 0, 1, 2, 1, 182, 0, 228, 1, 113, 0, 244, 1, 140,
> 0, 0, 0, 0, 0]}} []
> org.bluez.Device1 {'RSSI': -54, 'ManufacturerData': {307: [39, 253,
> 39, 242, 39, 234, 0, 0, 1, 2, 1, 182, 0, 228, 1, 113, 0, 244, 1, 140,
> 0, 0, 0, 0, 0]}} []
> org.bluez.Device1 {'RSSI': -45, 'ManufacturerData': {307: [39, 253,
> 39, 242, 39, 234, 0, 0, 1, 2, 1, 182, 0, 228, 1, 113, 0, 244, 1, 140,
> 0, 0, 0, 0, 0]}} []
> org.bluez.Device1 {'RSSI': -54, 'ManufacturerData': {307: [39, 253,
> 39, 242, 39, 234, 0, 0, 1, 2, 1, 182, 0, 228, 1, 113, 0, 244, 1, 140,
> 0, 0, 0, 0, 0]}} []
> org.bluez.Device1 {'RSSI': -52, 'ManufacturerData': {307: [39, 253,
> 39, 242, 39, 234, 0, 0, 1, 2, 1, 182, 0, 228, 1, 113, 0, 244, 1, 140,
> 0, 0, 0, 0, 0]}} []

this is nasty from the device. So the MGMT event should return the combined data from ADV_IND and SCAN_RSP and as you see we just concat that information coming from the kernel. However when it goes out via D-Bus, it actually gets overwritten and only one is provided.

Now the question is how we represent the same manufacturer data coming once from ADV_IND and second from SCAN_RSP via the D-Bus API. You need to have a look into doc/device-api.txt and the code in src/device.c on how we handle this.

Regards

Marcel




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux