Re: GATT issue, possible bluez bug?

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

 



Hi Luiz


On Tue, 22 Mar 2022 at 07:55, Adam Pigg <adam@xxxxxxxxxxx> wrote:
>
> Hi Luiz
>
> On Tue, 22 Mar 2022 at 00:44, Luiz Augusto von Dentz
> <luiz.dentz@xxxxxxxxx> wrote:
> >
> > Hi Adam,
> >
> > On Mon, Mar 21, 2022 at 4:03 PM Adam Pigg <adam@xxxxxxxxxxx> wrote:
> > >
> > > Hi
> > >
> > > A bit of background, I write a linux desktop/mobile app called
> > > Amazfish which interfaces with several watches over BLE using their
> > > GATT services.  To do this, I use the bluez dbus api (technically a
> > > thin wrapper around it I wrote called qble
> > > https://github.com/piggz/qble)
> > >
> > > All has been good so far, I support several generations of
> > > Huami/Amazfit watches, as well as the open source Pinetime and
> > > Bangle.js.  For the Amazfit watches, i have implementations for older
> > > devies such as the Bip, and newer ones such as the GTS.
> > >
> > > Much of the reverse engineering comes from the Android Gadget Bridge
> > > project, which supports many more devices.
> > >
> > > My community of users donated to buy me a newer device called a GTR2,
> > > which, according to the GB devs uses the same protocol as the slightly
> > > older GTS, and the packet captures I have from Android would support
> > > this.
> > >
> > > But this is where my trouble starts with Bluez, my existing
> > > implementation doesnt work at all.  Normally, after a connection, I
> > > would wait for the ServicesResolved signal, which happens pretty fast
> > > on all other devices, but on the GTR2, it takes about 30 seconds, by
> > > which time, the watch has disconnected. (i get a disconnected signal
> > > immediately after the ServicesResolved signal)
> > >
> > > To rule out my code, I have tried several things:
> > > Gatttool
> > > With gattool, i can connect, get the services, enable a notification,
> > > write a value and get the expected results seemingly fine
> > >
> > > Python-gatt (using the bluez dbus api)
> > > Im unable to iterate the services, like my app, it takes 30 seconds to
> > > get the signal and then swiftly disconnects
> > >
> > > Gattlib (https://github.com/labapart/gattlib)
> > > Gattlib is interesting as it appears to have "borrowed" much of its
> > > code directly from bluez.  When built against the system bluez, if the
> > > version is > 5.42, it will use the dbus api.  When I do this, again im
> > > unable to list services on the watch.  However, if I edit the build to
> > > force it to use its internal gatt implementation, which appears to be
> > > the same one used by gatttool, then, it IS able to interrogate the
> > > watch.
> > >
> > > I have attached 3 files
> > > 1. test python program which should print services, and associated btmon
> > > 2. btmon output while using gatttool
> > > 3. btmon output running gattlib discover example
> > >
> > > Note, other than discovery, I havnt been able to get gattlib to
> > > read/write/notify!
> > >
> > > It seems as though I may be triggering a bug in the bluez dbus api?
> > > Can anyone suggest anything?
> >
> > What version are you using? I would first try with the latest to see
> > if that something already fixed.
> >
> >
> Im using 5.63 already, which is the latest tag (on opensuse tumbleweed)
>
> I'll also try bluetoothctl and attach logs using that, though I
> suspect it will behave the same as the python library and my own
> library.
>

Attached is the output of btmon while using bluetoothctl

bluetoothctl behaves the same as my lib and python, it is unable to
list services, and after a while, emits the ServicesResolved and
disconnected messages at the same time.  Im sure it should be able to
list the services immediately after connect just like gatttool can.

Thanks


> > --
> > Luiz Augusto von Dentz
bluetoothctl:

[bluetooth]# connect F8:C3:D1:B0:5A:3A
Attempting to connect to F8:C3:D1:B0:5A:3A
[CHG] Device F8:C3:D1:B0:5A:3A Connected: yes
Connection successful
[Amazfit GTR 2]# menu gatt
Menu gatt:
Available commands:
-------------------
list-attributes [dev/local]                       List attributes
select-attribute <attribute/UUID>                 Select attribute
attribute-info [attribute/UUID]                   Select attribute
read [offset]                                     Read attribute value
write <data=xx xx ...> [offset] [type]            Write attribute value
acquire-write                                     Acquire Write file descriptor
release-write                                     Release Write file descriptor
acquire-notify                                    Acquire Notify file descriptor
release-notify                                    Release Notify file descriptor
notify <on/off>                                   Notify attribute value
clone [dev/attribute/UUID]                        Clone a device or attribute
register-application [UUID ...]                   Register profile to connect
unregister-application                            Unregister profile
register-service <UUID> [handle]                  Register application service.
unregister-service <UUID/object>                  Unregister application service
register-includes <UUID> [handle]                 Register as Included service in.
unregister-includes <Service-UUID><Inc-UUID>      Unregister Included service.
register-characteristic <UUID> <Flags=read,write,notify...> [handle] Register application characteristic
unregister-characteristic <UUID/object>           Unregister application characteristic
register-descriptor <UUID> <Flags=read,write...> [handle] Register application descriptor
unregister-descriptor <UUID/object>               Unregister application descriptor
back                                              Return to main menu
version                                           Display version
quit                                              Quit program
exit                                              Quit program
help                                              Display help about this program
export                                            Print environment variables
[Amazfit GTR 2]# list-attributes
[Amazfit GTR 2]# list-attributes
[CHG] Device F8:C3:D1:B0:5A:3A ServicesResolved: yes
[CHG] Device F8:C3:D1:B0:5A:3A ServicesResolved: no
[CHG] Device F8:C3:D1:B0:5A:3A Connected: no
[bluetooth]# list-attributes
Missing device address argument
[bluetooth]#



----------

btmon:

piggz@adam-laptop ~ $ sudo btmon
Bluetooth monitor ver 5.63
= Note: Linux version 5.16.14-1-default (x86_64)                                                                                                                                     0.789481
= Note: Bluetooth subsystem version 2.22                                                                                                                                             0.789491
= New Index: DC:53:60:51:00:C6 (Primary,USB,hci0)                                                                                                                             [hci0] 0.789493
= Open Index: DC:53:60:51:00:C6                                                                                                                                               [hci0] 0.789495
= Index Info: DC:53:60:51:00:C6 (Intel Corp.)                                                                                                                                 [hci0] 0.789497
@ MGMT Open: bluetoothd (privileged) version 1.21                                                                                                                           {0x0001} 0.789501
< HCI Command: LE Set Scan Parameters (0x08|0x000b) plen 7                                                                                                                #1 [hci0] 23.828121
        Type: Passive (0x00)
        Interval: 60.000 msec (0x0060)
        Window: 60.000 msec (0x0060)
        Own address type: Public (0x00)
        Filter policy: Accept all advertisement (0x00)
> HCI Event: Command Complete (0x0e) plen 4                                                                                                                               #2 [hci0] 23.945934
      LE Set Scan Parameters (0x08|0x000b) ncmd 1
        Status: Success (0x00)
< HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2                                                                                                                    #3 [hci0] 23.945959
        Scanning: Enabled (0x01)
        Filter duplicates: Enabled (0x01)
> HCI Event: Command Complete (0x0e) plen 4                                                                                                                               #4 [hci0] 23.946923
      LE Set Scan Enable (0x08|0x000c) ncmd 2
        Status: Success (0x00)
> HCI Event: LE Meta Event (0x3e) plen 40                                                                                                                                 #5 [hci0] 24.036976
      LE Advertising Report (0x02)
        Num reports: 1
        Event type: Scannable undirected - ADV_SCAN_IND (0x02)
        Address type: Random (0x01)
        Address: 59:99:99:79:5A:A2 (Resolvable)
        Data length: 28
        16-bit Service UUIDs (complete): 1 entry
          Google (0xfe9f)
        Service Data (UUID 0xfe9f): 0000000000000000000000000000000000000000
        RSSI: -79 dBm (0xb1)
> HCI Event: LE Meta Event (0x3e) plen 43                                                                                                                                 #6 [hci0] 24.935972
      LE Advertising Report (0x02)
        Num reports: 1
        Event type: Connectable undirected - ADV_IND (0x00)
        Address type: Random (0x01)
        Address: F8:C3:D1:B0:5A:3A (Static)
        Data length: 31
        Flags: 0x02
          LE General Discoverable Mode
        Company: Anhui Huami Information Technology Co., Ltd. (343)
          Data: 02ffffffffffffffffffffffffffffffff02f8c3d1b05a3a
        RSSI: -55 dBm (0xc9)
< HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2                                                                                                                    #7 [hci0] 24.936049
        Scanning: Disabled (0x00)
        Filter duplicates: Disabled (0x00)
> HCI Event: Command Complete (0x0e) plen 4                                                                                                                               #8 [hci0] 24.960963
      LE Set Scan Enable (0x08|0x000c) ncmd 2
        Status: Success (0x00)
< HCI Command: LE Create Connection (0x08|0x000d) plen 25                                                                                                                 #9 [hci0] 24.961101
        Scan interval: 60.000 msec (0x0060)
        Scan window: 60.000 msec (0x0060)
        Filter policy: Accept list is not used (0x00)
        Peer address type: Random (0x01)
        Peer address: F8:C3:D1:B0:5A:3A (Static)
        Own address type: Public (0x00)
        Min connection interval: 30.00 msec (0x0018)
        Max connection interval: 50.00 msec (0x0028)
        Connection latency: 0 (0x0000)
        Supervision timeout: 420 msec (0x002a)
        Min connection length: 0.000 msec (0x0000)
        Max connection length: 0.000 msec (0x0000)
> HCI Event: Command Status (0x0f) plen 4                                                                                                                                #10 [hci0] 24.961888
      LE Create Connection (0x08|0x000d) ncmd 2
        Status: Success (0x00)
> HCI Event: LE Meta Event (0x3e) plen 19                                                                                                                                #11 [hci0] 25.792901
      LE Connection Complete (0x01)
        Status: Success (0x00)
        Handle: 3585
        Role: Central (0x00)
        Peer address type: Random (0x01)
        Peer address: F8:C3:D1:B0:5A:3A (Static)
        Connection interval: 50.00 msec (0x0028)
        Connection latency: 0 (0x0000)
        Supervision timeout: 420 msec (0x002a)
        Central clock accuracy: 0x00
@ MGMT Event: Device Connected (0x000b) plen 44                                                                                                                     {0x0001} [hci0] 25.792971
        LE Address: F8:C3:D1:B0:5A:3A (Static)
        Flags: 0x00000008
          Connection Locally Initiated
        Data length: 31
        Flags: 0x02
          LE General Discoverable Mode
        Company: Anhui Huami Information Technology Co., Ltd. (343)
          Data: 02ffffffffffffffffffffffffffffffff02f8c3d1b05a3a
< HCI Command: LE Read Remote Used Features (0x08|0x0016) plen 2                                                                                                         #12 [hci0] 25.793193
        Handle: 3585
> HCI Event: Command Status (0x0f) plen 4                                                                                                                                #13 [hci0] 25.793895
      LE Read Remote Used Features (0x08|0x0016) ncmd 1
        Status: Success (0x00)
> HCI Event: LE Meta Event (0x3e) plen 12                                                                                                                                #14 [hci0] 25.841893
      LE Read Remote Used Features (0x04)
        Status: Success (0x00)
        Handle: 3585
        Features: 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00
          LE Encryption
< HCI Command: LE Start Encryption (0x08|0x0019) plen 28                                                                                                                 #15 [hci0] 25.841997
        Handle: 3585
        Random number: 0x4466d17a4fe0a6d4
        Encrypted diversifier: 0xdc96
        Long term key: 86f2f8d5c8b54af78af65be71cd95bc0
> HCI Event: Command Status (0x0f) plen 4                                                                                                                                #16 [hci0] 25.842883
      LE Start Encryption (0x08|0x0019) ncmd 1
        Status: Success (0x00)
> HCI Event: Encryption Change (0x08) plen 4                                                                                                                             #17 [hci0] 26.290886
        Status: Success (0x00)
        Handle: 3585
        Encryption: Enabled with AES-CCM (0x01)
< ACL Data TX: Handle 3585 flags 0x00 dlen 7                                                                                                                             #18 [hci0] 26.291150
      ATT: Exchange MTU Request (0x02) len 2
        Client RX MTU: 517
> ACL Data RX: Handle 3585 flags 0x02 dlen 7                                                                                                                             #19 [hci0] 26.340636
      ATT: Exchange MTU Request (0x02) len 2
        Client RX MTU: 247
< ACL Data TX: Handle 3585 flags 0x00 dlen 7                                                                                                                             #20 [hci0] 26.341105
      ATT: Exchange MTU Response (0x03) len 2
        Server RX MTU: 517
> HCI Event: Number of Completed Packets (0x13) plen 5                                                                                                                   #21 [hci0] 26.341885
        Num handles: 1
        Handle: 3585
        Count: 1
> HCI Event: Number of Completed Packets (0x13) plen 5                                                                                                                   #22 [hci0] 26.391907
        Num handles: 1
        Handle: 3585
        Count: 1
> ACL Data RX: Handle 3585 flags 0x02 dlen 7                                                                                                                             #23 [hci0] 26.440658
      ATT: Exchange MTU Response (0x03) len 2
        Server RX MTU: 252
< ACL Data TX: Handle 3585 flags 0x00 dlen 7                                                                                                                             #24 [hci0] 26.441186
      ATT: Read Request (0x0a) len 2
        Handle: 0x0032
> HCI Event: Number of Completed Packets (0x13) plen 5                                                                                                                   #25 [hci0] 26.490891
        Num handles: 1
        Handle: 3585
        Count: 1
> ACL Data RX: Handle 3585 flags 0x02 dlen 12                                                                                                                            #26 [hci0] 26.540658
      ATT: Read Response (0x0b) len 7
        Value: 01570140000101
< ACL Data TX: Handle 3585 flags 0x00 dlen 7                                                                                                                             #27 [hci0] 26.541145
      ATT: Read Request (0x0a) len 2
        Handle: 0x0016
> HCI Event: Number of Completed Packets (0x13) plen 5                                                                                                                   #28 [hci0] 26.640888
        Num handles: 1
        Handle: 3585
        Count: 1
> ACL Data RX: Handle 3585 flags 0x02 dlen 19                                                                                                                            #29 [hci0] 26.641236
      ATT: Read Response (0x0b) len 14
        Value: 416d617a66697420475452203200
< ACL Data TX: Handle 3585 flags 0x00 dlen 7                                                                                                                             #30 [hci0] 26.641557
      ATT: Read Request (0x0a) len 2
        Handle: 0x0018
> HCI Event: Number of Completed Packets (0x13) plen 5                                                                                                                   #31 [hci0] 26.690889
        Num handles: 1
        Handle: 3585
        Count: 1
> ACL Data RX: Handle 3585 flags 0x02 dlen 7                                                                                                                             #32 [hci0] 29.073366
      ATT: Exchange MTU Request (0x02) len 2
        Client RX MTU: 247
< ACL Data TX: Handle 3585 flags 0x00 dlen 7                                                                                                                             #33 [hci0] 29.073754
      ATT: Exchange MTU Response (0x03) len 2
        Server RX MTU: 247
> HCI Event: Number of Completed Packets (0x13) plen 5                                                                                                                   #34 [hci0] 29.090909
        Num handles: 1
        Handle: 3585
        Count: 1
> ACL Data RX: Handle 3585 flags 0x02 dlen 11                                                                                                                            #35 [hci0] 29.790616
      ATT: Read By Type Request (0x08) len 6
        Handle range: 0x0001-0xffff
        Attribute type: Characteristic (0x2803)
< ACL Data TX: Handle 3585 flags 0x00 dlen 27                                                                                                                            #36 [hci0] 29.791232
< ACL Data TX: Handle 3585 flags 0x01 dlen 27                                                                                                                            #37 [hci0] 29.791274
< ACL Data TX: Handle 3585 flags 0x01 dlen 8                                                                                                                             #38 [hci0] 29.791289
      ATT: Read By Type Response (0x09) len 57
        Attribute data length: 7
        Attribute data list: 8 entries
        Handle: 0x0002
        Value: 020300002a
        Handle: 0x0004
        Value: 020500012a
        Handle: 0x0006
        Value: 020700a62a
        Handle: 0x0009
        Value: 200a00052a
        Handle: 0x000c
        Value: 0a0d00292b
        Handle: 0x000e
        Value: 020f002a2b
        Handle: 0x0010
        Value: 0211003a2b
        Handle: 0x0013
        Value: 021400502a
> HCI Event: Number of Completed Packets (0x13) plen 5                                                                                                                   #39 [hci0] 29.840901
        Num handles: 1
        Handle: 3585
        Count: 1
> HCI Event: Number of Completed Packets (0x13) plen 5                                                                                                                   #40 [hci0] 29.841879
        Num handles: 1
        Handle: 3585
        Count: 1
> HCI Event: Number of Completed Packets (0x13) plen 5                                                                                                                   #41 [hci0] 29.842882
        Num handles: 1
        Handle: 3585
        Count: 1
> ACL Data RX: Handle 3585 flags 0x02 dlen 11                                                                                                                            #42 [hci0] 29.890579
      ATT: Read By Type Request (0x08) len 6
        Handle range: 0x0014-0xffff
        Attribute type: Characteristic (0x2803)
< ACL Data TX: Handle 3585 flags 0x00 dlen 9                                                                                                                             #43 [hci0] 29.890738
      ATT: Error Response (0x01) len 4
        Read By Type Request (0x08)
        Handle: 0x0014
        Error: Attribute Not Found (0x0a)
> HCI Event: Number of Completed Packets (0x13) plen 5                                                                                                                   #44 [hci0] 29.940895
        Num handles: 1
        Handle: 3585
        Count: 1
> ACL Data RX: Handle 3585 flags 0x02 dlen 11                                                                                                                            #45 [hci0] 29.990588
      ATT: Read By Type Request (0x08) len 6
        Handle range: 0x0001-0xffff
        Attribute type: Device Name (0x2a00)
< ACL Data TX: Handle 3585 flags 0x00 dlen 18                                                                                                                            #46 [hci0] 29.991016
      ATT: Read By Type Response (0x09) len 13
        Attribute data length: 12
        Attribute data list: 1 entry
        Handle: 0x0003
        Value: 426c75655a20352e3633
> HCI Event: Number of Completed Packets (0x13) plen 5                                                                                                                   #47 [hci0] 30.040906
        Num handles: 1
        Handle: 3585
        Count: 1
< HCI Command: Disconnect (0x01|0x0006) plen 3                                                                                                                           #48 [hci0] 58.673128
        Handle: 3585
        Reason: Remote User Terminated Connection (0x13)
> HCI Event: Command Status (0x0f) plen 4                                                                                                                                #49 [hci0] 58.790939
      Disconnect (0x01|0x0006) ncmd 1
        Status: Success (0x00)
> HCI Event: Disconnect Complete (0x05) plen 4                                                                                                                           #50 [hci0] 58.791937
        Status: Success (0x00)
        Handle: 3585
        Reason: Connection Terminated By Local Host (0x16)
@ MGMT Event: Device Disconnected (0x000c) plen 8                                                                                                                   {0x0001} [hci0] 58.791993
        LE Address: F8:C3:D1:B0:5A:3A (Static)
        Reason: Connection terminated by local host (0x02)



[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