* RE: l2cap sockets not properly multiplexed on ARM
From: Tim Tisdall @ 2013-10-30 15:06 UTC (permalink / raw)
To: Alexander Holler; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <527114A4.5010207@ahsoftware.de>
Yes, confirmed with gatttool. I used 3 terminals with one running btmon and the other 2 gatttool. I started btmon then ran gatttool on one terminal starting the notifications. Then I started another gatttool in another terminal and that new one then showed the results of both devices while the first gatttool stopped displaying any new notifications. You can see in the btmon that the values are coming from 2 different connection handles but the results are all coming through the 2nd gatttool. Here's the outputs using 3 terminals connected to the device (first listing was connected first):
So it's perfectly clear: This all works fine on an x86 machine, but is an issue on ARM
--------------------
root@linaro-server:~# gatttool -i 0 -b 78:C5:E5:6C:47:D3 --char-write-req --handle=0x002b --value=0100 --listen
Characteristic value was written successfully
Notification handle = 0x002a value: e9
Notification handle = 0x002a value: f9
Notification handle = 0x002a value: 06
Notification handle = 0x002a value: db
Notification handle = 0x002a value: e8
Notification handle = 0x002a value: f0
Notification handle = 0x002a value: dd
Notification handle = 0x002a value: fa
Notification handle = 0x002a value: 00
Notification handle = 0x002a value: f7
Notification handle = 0x002a value: 00
--------------------
root@linaro-server:~# gatttool -i 0 -b 78:C5:E5:6C:47:A2 --char-write-req --handle=0x002b --value=0100 --listen
Characteristic value was written successfully
Notification handle = 0x002e value: fa
Notification handle = 0x0032 value: c1
Notification handle = 0x002a value: 0b
Notification handle = 0x002e value: e7
Notification handle = 0x0032 value: da
Notification handle = 0x002a value: 9d
Notification handle = 0x002e value: 80
Notification handle = 0x0032 value: 80
Notification handle = 0x002a value: ff
Notification handle = 0x002e value: fa
Notification handle = 0x0032 value: c8
Notification handle = 0x0032 value: c1
Notification handle = 0x002a value: 43
Notification handle = 0x002a value: f4
Notification handle = 0x002a value: ee
Notification handle = 0x002a value: e0
Notification handle = 0x002a value: f0
Notification handle = 0x002a value: fe
Notification handle = 0x002a value: 04
Notification handle = 0x002a value: fe
Notification handle = 0x002a value: 17
Notification handle = 0x002e value: 35
Notification handle = 0x0032 value: 83
Notification handle = 0x002a value: 07
Notification handle = 0x002e value: f5
Notification handle = 0x0032 value: c1
Notification handle = 0x0032 value: ca
Notification handle = 0x002e value: 11
Notification handle = 0x0032 value: c4
Notification handle = 0x002e value: 06
Notification handle = 0x0032 value: ba
Notification handle = 0x002a value: fc
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: c6
Notification handle = 0x0032 value: c0
Notification handle = 0x002a value: e3
Notification handle = 0x002a value: f7
Notification handle = 0x002a value: b4
Notification handle = 0x002a value: f8
Notification handle = 0x002a value: 03
Notification handle = 0x002a value: f5
Notification handle = 0x002a value: 0d
Notification handle = 0x002a value: 04
Notification handle = 0x002a value: fc
Notification handle = 0x002a value: 02
Notification handle = 0x002a value: ae
Notification handle = 0x002e value: 9f
Notification handle = 0x0032 value: a5
Notification handle = 0x002a value: 14
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: b2
Notification handle = 0x002a value: e8
Notification handle = 0x0032 value: a8
Notification handle = 0x002a value: 08
Notification handle = 0x002e value: 0e
Notification handle = 0x0032 value: c4
Notification handle = 0x002a value: 57
Notification handle = 0x002e value: 7a
Notification handle = 0x002a value: fd
Notification handle = 0x002e value: f9
Notification handle = 0x002a value: 10
Notification handle = 0x002a value: ea
Notification handle = 0x002a value: 22
Notification handle = 0x002a value: ff
Notification handle = 0x002a value: 4d
Notification handle = 0x002e value: df
Notification handle = 0x0032 value: d8
Notification handle = 0x002a value: 03
Notification handle = 0x002e value: ff
Notification handle = 0x0032 value: b6
Notification handle = 0x002a value: 19
Notification handle = 0x002e value: 08
Notification handle = 0x0032 value: f8
Notification handle = 0x002a value: f4
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: ea
Notification handle = 0x002a value: 01
Notification handle = 0x0032 value: ba
Notification handle = 0x0032 value: c2
--------------------
root@linaro-server:~# /usr/src/bluez-4.101/monitor/btmon
Bluetooth monitor ver 4.101
[hci0] 14:59:31.455948 = New Index: 00:02:72:3E:7F:9B (BR/EDR,USB,hci0)
[hci0] 14:59:37.419288 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 d3 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 14:59:37.426536 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 14:59:39.342084 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 40 00 00 00 d3 47 6c e5 c5 78 36 00 00 00 ..@....Gl..x6...
2a 00 05 *..
{hci0} 14:59:39.342742 @ Device Connected: 78:C5:E5:6C:47:D3 (1) flags 0x0000
[hci0] 14:59:39.356628 < ACL Data: handle 64 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
[hci0] 14:59:39.511039 > ACL Data: handle 64 flags 0x02 dlen 16
0c 00 05 00 12 07 08 00 10 00 20 00 00 00 2c 01 .......... ...,.
[hci0] 14:59:39.513756 < ACL Data: handle 64 flags 0x00 dlen 10
06 00 05 00 13 07 02 00 00 00 ..........
[hci0] 14:59:39.513982 < HCI Command: LE Connection Update (0x08|0x0013) plen 14
40 00 10 00 20 00 00 00 2c 01 01 00 01 00 @... ...,.....
[hci0] 14:59:39.515988 > HCI Event: Command Status (0x0f) plen 4
00 01 13 20 ...
[hci0] 14:59:39.578489 > ACL Data: handle 64 flags 0x02 dlen 5
01 00 04 00 13 .....
[hci0] 14:59:39.645900 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e9 .....*..
[hci0] 14:59:39.647117 > HCI Event: Number of Completed Packets (0x13) plen 5
01 40 00 02 00 .@...
[hci0] 14:59:39.781014 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f9 .....*..
[hci0] 14:59:39.915999 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 06 .....*..
[hci0] 14:59:39.983479 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 db .....*..
[hci0] 14:59:40.185988 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e8 .....*..
[hci0] 14:59:40.253477 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f0 .....*..
[hci0] 14:59:40.590870 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 dd .....*..
[hci0] 14:59:40.595926 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fa .....*..
[hci0] 14:59:40.793513 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 14:59:46.452653 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 a2 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 14:59:46.454025 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 14:59:47.507002 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 41 00 00 00 a2 47 6c e5 c5 78 2d 00 00 00 ..A....Gl..x-...
2a 00 05 *..
[hci0] 14:59:47.516637 < ACL Data: handle 65 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
{hci0} 14:59:47.507516 @ Device Connected: 78:C5:E5:6C:47:A2 (1) flags 0x0000
[hci0] 14:59:47.964127 > HCI Event: Disconn Complete (0x05) plen 4
00 41 00 08 .A..
{hci0} 14:59:47.974180 @ Device Disconnected: 78:C5:E5:6C:47:A2 (1)
[hci0] 14:59:54.564158 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 b4 .....*..
[hci0] 14:59:54.698625 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 05 .....*..
[hci0] 14:59:54.766114 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 14:59:54.968591 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 14:59:55.171092 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 14 .....*..
[hci0] 14:59:55.306083 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 02 .....*..
[hci0] 14:59:55.441107 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ee .....*..
[hci0] 14:59:55.508612 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f8 .....*..
[hci0] 14:59:55.576088 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 14:59:55.711106 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 1b .....*..
[hci0] 14:59:55.778607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 14:59:55.913607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0f .....*..
[hci0] 14:59:55.981116 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 14:59:56.183619 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:24.952798 < HCI Command: LE Set Scan Parameters (0x08|0x000b) plen 7
01 10 00 10 00 00 00 .......
[hci0] 15:00:24.954958 > HCI Event: Command Complete (0x0e) plen 4
01 0b 20 00 .. .
[hci0] 15:00:24.959834 < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
01 01 ..
[hci0] 15:00:24.962354 > HCI Event: Command Complete (0x0e) plen 4
01 0c 20 00 .. .
{hci0} 15:00:24.963556 @ Discovering: 0x01 (0)
[hci0] 15:00:25.074841 > HCI Event: LE Meta Event (0x3e) plen 15
02 01 00 00 a2 47 6c e5 c5 78 03 02 01 05 a2 .....Gl..x.....
[hci0] 15:00:25.077321 > HCI Event: LE Meta Event (0x3e) plen 25
02 01 04 00 a2 47 6c e5 c5 78 0d 0c 09 4f 42 50 .....Gl..x...OBP
34 32 35 2d 34 37 41 32 a4 425-47A2.
{hci0} 15:00:25.075571 @ Device Found: 78:C5:E5:6C:47:A2 (1) rssi -94 flags 0x0000
02 01 05 ...
{hci0} 15:00:25.078879 @ Device Found: 78:C5:E5:6C:47:A2 (1) rssi -92 flags 0x0000
0c 09 4f 42 50 34 32 35 2d 34 37 41 32 ..OBP425-47A2
[hci0] 15:00:29.259153 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 15:00:29.394528 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 15:00:30.976520 < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
00 01 ..
[hci0] 15:00:30.982418 > HCI Event: Command Complete (0x0e) plen 4
01 0c 20 00 .. .
{hci0} 15:00:30.983404 @ Discovering: 0x00 (0)
[hci0] 15:00:33.275402 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 a2 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 15:00:33.279443 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 15:00:33.592636 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 41 00 00 00 a2 47 6c e5 c5 78 2d 00 00 00 ..A....Gl..x-...
2a 00 05 *..
{hci0} 15:00:33.593285 @ Device Connected: 78:C5:E5:6C:47:A2 (1) flags 0x0000
[hci0] 15:00:33.606593 < ACL Data: handle 65 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
[hci0] 15:00:33.639078 > ACL Data: handle 65 flags 0x02 dlen 16
0c 00 05 00 12 01 08 00 10 00 20 00 00 00 2c 01 .......... ...,.
[hci0] 15:00:33.645585 < ACL Data: handle 65 flags 0x00 dlen 10
06 00 05 00 13 01 02 00 00 00 ..........
[hci0] 15:00:33.645863 < HCI Command: LE Connection Update (0x08|0x0013) plen 14
41 00 10 00 20 00 00 00 2c 01 01 00 01 00 A... ...,.....
[hci0] 15:00:33.659465 > HCI Event: Command Status (0x0f) plen 4
00 01 13 20 ...
[hci0] 15:00:33.695413 > ACL Data: handle 65 flags 0x02 dlen 5
01 00 04 00 13 .....
[hci0] 15:00:33.751539 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fa ........
[hci0] 15:00:33.752586 > HCI Event: Number of Completed Packets (0x13) plen 5
01 41 00 02 00 .A...
[hci0] 15:00:33.752835 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:34.820181 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0b .....*..
[hci0] 15:00:34.821134 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 e7 ........
[hci0] 15:00:34.821273 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 da .....2..
[hci0] 15:00:34.932695 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 9d .....*..
[hci0] 15:00:34.934604 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 80 ........
[hci0] 15:00:34.934743 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 80 .....2..
[hci0] 15:00:35.045312 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ff .....*..
[hci0] 15:00:35.045539 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fa ........
[hci0] 15:00:35.047351 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c8 .....2..
[hci0] 15:00:35.157812 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:36.279077 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 43 .....*.C
[hci0] 15:00:36.414070 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f4 .....*..
[hci0] 15:00:36.481571 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ee .....*..
[hci0] 15:00:36.616574 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e0 .....*..
[hci0] 15:00:36.684053 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f0 .....*..
[hci0] 15:00:36.886559 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:37.021553 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 15:00:37.494080 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:38.870323 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 17 .....*..
[hci0] 15:00:38.875497 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 35 .......5
[hci0] 15:00:38.875625 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 83 .....2..
[hci0] 15:00:38.926466 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 07 .....*..
[hci0] 15:00:38.927533 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 f5 ........
[hci0] 15:00:38.927672 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:39.151579 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ca .....2..
[hci0] 15:00:39.263964 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 11 ........
[hci0] 15:00:39.265848 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c4 .....2..
[hci0] 15:00:39.265989 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 06 ........
[hci0] 15:00:39.266111 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ba .....2..
[hci0] 15:00:39.320324 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fc .....*..
[hci0] 15:00:39.321448 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:39.321573 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c6 .....2..
[hci0] 15:00:40.022479 > HCI Event: LE Meta Event (0x3e) plen 10
03 00 40 00 1e 00 00 00 2c 01 ..@.....,.
[hci0] 15:00:41.345357 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c0 .....2..
[hci0] 15:00:42.572098 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e3 .....*..
[hci0] 15:00:42.722098 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 15:00:43.096607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 b4 .....*..
[hci0] 15:00:43.171601 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f8 .....*..
[hci0] 15:00:43.284093 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 15:00:44.971623 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f5 .....*..
[hci0] 15:00:45.084106 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0d .....*..
[hci0] 15:00:45.234114 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 15:00:45.271610 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fc .....*..
[hci0] 15:00:45.497127 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 02 .....*..
[hci0] 15:00:46.632779 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ae .....*..
[hci0] 15:00:46.634611 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 9f ........
[hci0] 15:00:46.634738 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 a5 .....2..
[hci0] 15:00:46.745405 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 14 .....*..
[hci0] 15:00:46.747312 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:46.747446 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 b2 .....2..
[hci0] 15:00:46.801502 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e8 .....*..
[hci0] 15:00:46.802618 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 a8 .....2..
[hci0] 15:00:46.970391 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 08 .....*..
[hci0] 15:00:46.973070 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 0e ........
[hci0] 15:00:46.973195 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c4 .....2..
[hci0] 15:00:47.026653 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 57 .....*.W
[hci0] 15:00:47.027765 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 7a .......z
[hci0] 15:00:47.139021 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fd .....*..
[hci0] 15:00:47.140909 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 f9 ........
[hci0] 15:00:50.071664 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 10 .....*..
[hci0] 15:00:50.184154 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ea .....*..
[hci0] 15:00:50.296659 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 22 .....*."
[hci0] 15:00:50.371649 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ff .....*..
[hci0] 15:00:50.795432 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 4d .....*.M
[hci0] 15:00:50.801677 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 df ........
[hci0] 15:00:50.801815 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 d8 .....2..
[hci0] 15:00:50.851667 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 15:00:50.852711 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 ff ........
[hci0] 15:00:50.852851 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 b6 .....2..
[hci0] 15:00:50.907932 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 19 .....*..
[hci0] 15:00:50.909037 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 08 ........
[hci0] 15:00:50.909177 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 f8 .....2..
[hci0] 15:00:51.020415 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f4 .....*..
[hci0] 15:00:51.022325 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:51.022470 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ea .....2..
[hci0] 15:00:51.132937 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 01 .....*..
[hci0] 15:00:51.134846 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ba .....2..
[hci0] 15:00:51.245438 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c2 .....2..
[hci0] 15:00:58.766551 < HCI Command: Disconnect (0x01|0x0006) plen 3
40 00 13 @..
[hci0] 15:00:58.772294 > HCI Event: Command Status (0x0f) plen 4
00 01 06 04 ....
[hci0] 15:00:58.773594 > HCI Event: Disconn Complete (0x05) plen 4
00 40 00 16 .@..
{hci0} 15:00:58.774541 @ Device Disconnected: 78:C5:E5:6C:47:D3 (1)
[hci0] 15:01:02.796566 < HCI Command: Disconnect (0x01|0x0006) plen 3
41 00 13 A..
[hci0] 15:01:02.803369 > HCI Event: Command Status (0x0f) plen 4
00 01 06 04 ....
[hci0] 15:01:03.170637 > HCI Event: Disconn Complete (0x05) plen 4
00 41 00 22 .A."
{hci0} 15:01:03.179209 @ Device Disconnected: 78:C5:E5:6C:47:A2 (1)
________________________________________
From: Alexander Holler [holler@ahsoftware.de]
Sent: October 30, 2013 10:16 AM
To: Tim Tisdall
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: l2cap sockets not properly multiplexed on ARM
Am 30.10.2013 14:15, schrieb Tim Tisdall:
> The problem exists on the other end of the socket; the kernel side.
Do you have tried using gattool to verify that?
Regards,
Alexander Holler
^ permalink raw reply
* RE: l2cap sockets not properly multiplexed on ARM
From: Tim Tisdall @ 2013-10-30 15:10 UTC (permalink / raw)
To: Alexander Holler; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <D9B9EB3A112B8F489DFFA00A6D5C0FE2032419A8@AD-BR-EX-2.adroot.flemingc.local>
Okay, I tried it again with the other notifications on the 2nd device shut off. (same result) I noticed that if I shut off the 2nd gatttool the notification return back to the first running gatttool.
________________________________________
From: linux-bluetooth-owner@vger.kernel.org [linux-bluetooth-owner@vger.kernel.org] on behalf of Tim Tisdall [tim.tisdall@flemingcollege.ca]
Sent: October 30, 2013 11:06 AM
To: Alexander Holler
Cc: linux-bluetooth@vger.kernel.org
Subject: RE: l2cap sockets not properly multiplexed on ARM
Yes, confirmed with gatttool. I used 3 terminals with one running btmon and the other 2 gatttool. I started btmon then ran gatttool on one terminal starting the notifications. Then I started another gatttool in another terminal and that new one then showed the results of both devices while the first gatttool stopped displaying any new notifications. You can see in the btmon that the values are coming from 2 different connection handles but the results are all coming through the 2nd gatttool. Here's the outputs using 3 terminals connected to the device (first listing was connected first):
So it's perfectly clear: This all works fine on an x86 machine, but is an issue on ARM
--------------------
root@linaro-server:~# gatttool -i 0 -b 78:C5:E5:6C:47:D3 --char-write-req --handle=0x002b --value=0100 --listen
Characteristic value was written successfully
Notification handle = 0x002a value: e9
Notification handle = 0x002a value: f9
Notification handle = 0x002a value: 06
Notification handle = 0x002a value: db
Notification handle = 0x002a value: e8
Notification handle = 0x002a value: f0
Notification handle = 0x002a value: dd
Notification handle = 0x002a value: fa
Notification handle = 0x002a value: 00
Notification handle = 0x002a value: f7
Notification handle = 0x002a value: 00
--------------------
root@linaro-server:~# gatttool -i 0 -b 78:C5:E5:6C:47:A2 --char-write-req --handle=0x002b --value=0100 --listen
Characteristic value was written successfully
Notification handle = 0x002e value: fa
Notification handle = 0x0032 value: c1
Notification handle = 0x002a value: 0b
Notification handle = 0x002e value: e7
Notification handle = 0x0032 value: da
Notification handle = 0x002a value: 9d
Notification handle = 0x002e value: 80
Notification handle = 0x0032 value: 80
Notification handle = 0x002a value: ff
Notification handle = 0x002e value: fa
Notification handle = 0x0032 value: c8
Notification handle = 0x0032 value: c1
Notification handle = 0x002a value: 43
Notification handle = 0x002a value: f4
Notification handle = 0x002a value: ee
Notification handle = 0x002a value: e0
Notification handle = 0x002a value: f0
Notification handle = 0x002a value: fe
Notification handle = 0x002a value: 04
Notification handle = 0x002a value: fe
Notification handle = 0x002a value: 17
Notification handle = 0x002e value: 35
Notification handle = 0x0032 value: 83
Notification handle = 0x002a value: 07
Notification handle = 0x002e value: f5
Notification handle = 0x0032 value: c1
Notification handle = 0x0032 value: ca
Notification handle = 0x002e value: 11
Notification handle = 0x0032 value: c4
Notification handle = 0x002e value: 06
Notification handle = 0x0032 value: ba
Notification handle = 0x002a value: fc
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: c6
Notification handle = 0x0032 value: c0
Notification handle = 0x002a value: e3
Notification handle = 0x002a value: f7
Notification handle = 0x002a value: b4
Notification handle = 0x002a value: f8
Notification handle = 0x002a value: 03
Notification handle = 0x002a value: f5
Notification handle = 0x002a value: 0d
Notification handle = 0x002a value: 04
Notification handle = 0x002a value: fc
Notification handle = 0x002a value: 02
Notification handle = 0x002a value: ae
Notification handle = 0x002e value: 9f
Notification handle = 0x0032 value: a5
Notification handle = 0x002a value: 14
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: b2
Notification handle = 0x002a value: e8
Notification handle = 0x0032 value: a8
Notification handle = 0x002a value: 08
Notification handle = 0x002e value: 0e
Notification handle = 0x0032 value: c4
Notification handle = 0x002a value: 57
Notification handle = 0x002e value: 7a
Notification handle = 0x002a value: fd
Notification handle = 0x002e value: f9
Notification handle = 0x002a value: 10
Notification handle = 0x002a value: ea
Notification handle = 0x002a value: 22
Notification handle = 0x002a value: ff
Notification handle = 0x002a value: 4d
Notification handle = 0x002e value: df
Notification handle = 0x0032 value: d8
Notification handle = 0x002a value: 03
Notification handle = 0x002e value: ff
Notification handle = 0x0032 value: b6
Notification handle = 0x002a value: 19
Notification handle = 0x002e value: 08
Notification handle = 0x0032 value: f8
Notification handle = 0x002a value: f4
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: ea
Notification handle = 0x002a value: 01
Notification handle = 0x0032 value: ba
Notification handle = 0x0032 value: c2
--------------------
root@linaro-server:~# /usr/src/bluez-4.101/monitor/btmon
Bluetooth monitor ver 4.101
[hci0] 14:59:31.455948 = New Index: 00:02:72:3E:7F:9B (BR/EDR,USB,hci0)
[hci0] 14:59:37.419288 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 d3 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 14:59:37.426536 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 14:59:39.342084 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 40 00 00 00 d3 47 6c e5 c5 78 36 00 00 00 ..@....Gl..x6...
2a 00 05 *..
{hci0} 14:59:39.342742 @ Device Connected: 78:C5:E5:6C:47:D3 (1) flags 0x0000
[hci0] 14:59:39.356628 < ACL Data: handle 64 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
[hci0] 14:59:39.511039 > ACL Data: handle 64 flags 0x02 dlen 16
0c 00 05 00 12 07 08 00 10 00 20 00 00 00 2c 01 .......... ...,.
[hci0] 14:59:39.513756 < ACL Data: handle 64 flags 0x00 dlen 10
06 00 05 00 13 07 02 00 00 00 ..........
[hci0] 14:59:39.513982 < HCI Command: LE Connection Update (0x08|0x0013) plen 14
40 00 10 00 20 00 00 00 2c 01 01 00 01 00 @... ...,.....
[hci0] 14:59:39.515988 > HCI Event: Command Status (0x0f) plen 4
00 01 13 20 ...
[hci0] 14:59:39.578489 > ACL Data: handle 64 flags 0x02 dlen 5
01 00 04 00 13 .....
[hci0] 14:59:39.645900 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e9 .....*..
[hci0] 14:59:39.647117 > HCI Event: Number of Completed Packets (0x13) plen 5
01 40 00 02 00 .@...
[hci0] 14:59:39.781014 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f9 .....*..
[hci0] 14:59:39.915999 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 06 .....*..
[hci0] 14:59:39.983479 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 db .....*..
[hci0] 14:59:40.185988 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e8 .....*..
[hci0] 14:59:40.253477 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f0 .....*..
[hci0] 14:59:40.590870 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 dd .....*..
[hci0] 14:59:40.595926 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fa .....*..
[hci0] 14:59:40.793513 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 14:59:46.452653 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 a2 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 14:59:46.454025 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 14:59:47.507002 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 41 00 00 00 a2 47 6c e5 c5 78 2d 00 00 00 ..A....Gl..x-...
2a 00 05 *..
[hci0] 14:59:47.516637 < ACL Data: handle 65 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
{hci0} 14:59:47.507516 @ Device Connected: 78:C5:E5:6C:47:A2 (1) flags 0x0000
[hci0] 14:59:47.964127 > HCI Event: Disconn Complete (0x05) plen 4
00 41 00 08 .A..
{hci0} 14:59:47.974180 @ Device Disconnected: 78:C5:E5:6C:47:A2 (1)
[hci0] 14:59:54.564158 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 b4 .....*..
[hci0] 14:59:54.698625 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 05 .....*..
[hci0] 14:59:54.766114 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 14:59:54.968591 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 14:59:55.171092 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 14 .....*..
[hci0] 14:59:55.306083 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 02 .....*..
[hci0] 14:59:55.441107 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ee .....*..
[hci0] 14:59:55.508612 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f8 .....*..
[hci0] 14:59:55.576088 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 14:59:55.711106 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 1b .....*..
[hci0] 14:59:55.778607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 14:59:55.913607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0f .....*..
[hci0] 14:59:55.981116 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 14:59:56.183619 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:24.952798 < HCI Command: LE Set Scan Parameters (0x08|0x000b) plen 7
01 10 00 10 00 00 00 .......
[hci0] 15:00:24.954958 > HCI Event: Command Complete (0x0e) plen 4
01 0b 20 00 .. .
[hci0] 15:00:24.959834 < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
01 01 ..
[hci0] 15:00:24.962354 > HCI Event: Command Complete (0x0e) plen 4
01 0c 20 00 .. .
{hci0} 15:00:24.963556 @ Discovering: 0x01 (0)
[hci0] 15:00:25.074841 > HCI Event: LE Meta Event (0x3e) plen 15
02 01 00 00 a2 47 6c e5 c5 78 03 02 01 05 a2 .....Gl..x.....
[hci0] 15:00:25.077321 > HCI Event: LE Meta Event (0x3e) plen 25
02 01 04 00 a2 47 6c e5 c5 78 0d 0c 09 4f 42 50 .....Gl..x...OBP
34 32 35 2d 34 37 41 32 a4 425-47A2.
{hci0} 15:00:25.075571 @ Device Found: 78:C5:E5:6C:47:A2 (1) rssi -94 flags 0x0000
02 01 05 ...
{hci0} 15:00:25.078879 @ Device Found: 78:C5:E5:6C:47:A2 (1) rssi -92 flags 0x0000
0c 09 4f 42 50 34 32 35 2d 34 37 41 32 ..OBP425-47A2
[hci0] 15:00:29.259153 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 15:00:29.394528 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 15:00:30.976520 < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
00 01 ..
[hci0] 15:00:30.982418 > HCI Event: Command Complete (0x0e) plen 4
01 0c 20 00 .. .
{hci0} 15:00:30.983404 @ Discovering: 0x00 (0)
[hci0] 15:00:33.275402 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 a2 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 15:00:33.279443 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 15:00:33.592636 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 41 00 00 00 a2 47 6c e5 c5 78 2d 00 00 00 ..A....Gl..x-...
2a 00 05 *..
{hci0} 15:00:33.593285 @ Device Connected: 78:C5:E5:6C:47:A2 (1) flags 0x0000
[hci0] 15:00:33.606593 < ACL Data: handle 65 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
[hci0] 15:00:33.639078 > ACL Data: handle 65 flags 0x02 dlen 16
0c 00 05 00 12 01 08 00 10 00 20 00 00 00 2c 01 .......... ...,.
[hci0] 15:00:33.645585 < ACL Data: handle 65 flags 0x00 dlen 10
06 00 05 00 13 01 02 00 00 00 ..........
[hci0] 15:00:33.645863 < HCI Command: LE Connection Update (0x08|0x0013) plen 14
41 00 10 00 20 00 00 00 2c 01 01 00 01 00 A... ...,.....
[hci0] 15:00:33.659465 > HCI Event: Command Status (0x0f) plen 4
00 01 13 20 ...
[hci0] 15:00:33.695413 > ACL Data: handle 65 flags 0x02 dlen 5
01 00 04 00 13 .....
[hci0] 15:00:33.751539 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fa ........
[hci0] 15:00:33.752586 > HCI Event: Number of Completed Packets (0x13) plen 5
01 41 00 02 00 .A...
[hci0] 15:00:33.752835 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:34.820181 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0b .....*..
[hci0] 15:00:34.821134 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 e7 ........
[hci0] 15:00:34.821273 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 da .....2..
[hci0] 15:00:34.932695 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 9d .....*..
[hci0] 15:00:34.934604 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 80 ........
[hci0] 15:00:34.934743 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 80 .....2..
[hci0] 15:00:35.045312 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ff .....*..
[hci0] 15:00:35.045539 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fa ........
[hci0] 15:00:35.047351 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c8 .....2..
[hci0] 15:00:35.157812 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:36.279077 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 43 .....*.C
[hci0] 15:00:36.414070 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f4 .....*..
[hci0] 15:00:36.481571 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ee .....*..
[hci0] 15:00:36.616574 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e0 .....*..
[hci0] 15:00:36.684053 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f0 .....*..
[hci0] 15:00:36.886559 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:37.021553 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 15:00:37.494080 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:38.870323 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 17 .....*..
[hci0] 15:00:38.875497 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 35 .......5
[hci0] 15:00:38.875625 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 83 .....2..
[hci0] 15:00:38.926466 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 07 .....*..
[hci0] 15:00:38.927533 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 f5 ........
[hci0] 15:00:38.927672 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:39.151579 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ca .....2..
[hci0] 15:00:39.263964 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 11 ........
[hci0] 15:00:39.265848 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c4 .....2..
[hci0] 15:00:39.265989 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 06 ........
[hci0] 15:00:39.266111 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ba .....2..
[hci0] 15:00:39.320324 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fc .....*..
[hci0] 15:00:39.321448 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:39.321573 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c6 .....2..
[hci0] 15:00:40.022479 > HCI Event: LE Meta Event (0x3e) plen 10
03 00 40 00 1e 00 00 00 2c 01 ..@.....,.
[hci0] 15:00:41.345357 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c0 .....2..
[hci0] 15:00:42.572098 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e3 .....*..
[hci0] 15:00:42.722098 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 15:00:43.096607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 b4 .....*..
[hci0] 15:00:43.171601 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f8 .....*..
[hci0] 15:00:43.284093 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 15:00:44.971623 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f5 .....*..
[hci0] 15:00:45.084106 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0d .....*..
[hci0] 15:00:45.234114 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 15:00:45.271610 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fc .....*..
[hci0] 15:00:45.497127 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 02 .....*..
[hci0] 15:00:46.632779 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ae .....*..
[hci0] 15:00:46.634611 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 9f ........
[hci0] 15:00:46.634738 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 a5 .....2..
[hci0] 15:00:46.745405 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 14 .....*..
[hci0] 15:00:46.747312 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:46.747446 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 b2 .....2..
[hci0] 15:00:46.801502 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e8 .....*..
[hci0] 15:00:46.802618 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 a8 .....2..
[hci0] 15:00:46.970391 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 08 .....*..
[hci0] 15:00:46.973070 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 0e ........
[hci0] 15:00:46.973195 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c4 .....2..
[hci0] 15:00:47.026653 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 57 .....*.W
[hci0] 15:00:47.027765 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 7a .......z
[hci0] 15:00:47.139021 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fd .....*..
[hci0] 15:00:47.140909 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 f9 ........
[hci0] 15:00:50.071664 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 10 .....*..
[hci0] 15:00:50.184154 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ea .....*..
[hci0] 15:00:50.296659 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 22 .....*."
[hci0] 15:00:50.371649 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ff .....*..
[hci0] 15:00:50.795432 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 4d .....*.M
[hci0] 15:00:50.801677 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 df ........
[hci0] 15:00:50.801815 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 d8 .....2..
[hci0] 15:00:50.851667 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 15:00:50.852711 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 ff ........
[hci0] 15:00:50.852851 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 b6 .....2..
[hci0] 15:00:50.907932 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 19 .....*..
[hci0] 15:00:50.909037 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 08 ........
[hci0] 15:00:50.909177 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 f8 .....2..
[hci0] 15:00:51.020415 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f4 .....*..
[hci0] 15:00:51.022325 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:51.022470 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ea .....2..
[hci0] 15:00:51.132937 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 01 .....*..
[hci0] 15:00:51.134846 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ba .....2..
[hci0] 15:00:51.245438 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c2 .....2..
[hci0] 15:00:58.766551 < HCI Command: Disconnect (0x01|0x0006) plen 3
40 00 13 @..
[hci0] 15:00:58.772294 > HCI Event: Command Status (0x0f) plen 4
00 01 06 04 ....
[hci0] 15:00:58.773594 > HCI Event: Disconn Complete (0x05) plen 4
00 40 00 16 .@..
{hci0} 15:00:58.774541 @ Device Disconnected: 78:C5:E5:6C:47:D3 (1)
[hci0] 15:01:02.796566 < HCI Command: Disconnect (0x01|0x0006) plen 3
41 00 13 A..
[hci0] 15:01:02.803369 > HCI Event: Command Status (0x0f) plen 4
00 01 06 04 ....
[hci0] 15:01:03.170637 > HCI Event: Disconn Complete (0x05) plen 4
00 41 00 22 .A."
{hci0} 15:01:03.179209 @ Device Disconnected: 78:C5:E5:6C:47:A2 (1)
________________________________________
From: Alexander Holler [holler@ahsoftware.de]
Sent: October 30, 2013 10:16 AM
To: Tim Tisdall
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: l2cap sockets not properly multiplexed on ARM
Am 30.10.2013 14:15, schrieb Tim Tisdall:
> The problem exists on the other end of the socket; the kernel side.
Do you have tried using gattool to verify that?
Regards,
Alexander Holler
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* RE: l2cap sockets not properly multiplexed on ARM
From: Tim Tisdall @ 2013-10-30 15:16 UTC (permalink / raw)
To: Alexander Holler; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <D9B9EB3A112B8F489DFFA00A6D5C0FE2032419C0@AD-BR-EX-2.adroot.flemingc.local>
Before someone asks...
root@linaro-server:~# cat /proc/cpuinfo
Processor : ARMv7 Processor rev 2 (v7l)
BogoMIPS : 59.90
Features : swp half thumb fastmult vfp edsp neon vfpv3 tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc08
CPU revision : 2
Hardware : sun4i
Revision : 0000
Serial : 0000000000000000
root@linaro-server:~# lscpu
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
root@linaro-server:~# uname -a
Linux linaro-server 3.4.43 #6 PREEMPT Mon Aug 19 16:40:34 EDT 2013 armv7l armv7l armv7l GNU/Linux
But this isn't the only ARM machine or only kernel I've had this problem on...
________________________________________
From: linux-bluetooth-owner@vger.kernel.org [linux-bluetooth-owner@vger.kernel.org] on behalf of Tim Tisdall [tim.tisdall@flemingcollege.ca]
Sent: October 30, 2013 11:10 AM
To: Alexander Holler
Cc: linux-bluetooth@vger.kernel.org
Subject: RE: l2cap sockets not properly multiplexed on ARM
Okay, I tried it again with the other notifications on the 2nd device shut off. (same result) I noticed that if I shut off the 2nd gatttool the notification return back to the first running gatttool.
________________________________________
From: linux-bluetooth-owner@vger.kernel.org [linux-bluetooth-owner@vger.kernel.org] on behalf of Tim Tisdall [tim.tisdall@flemingcollege.ca]
Sent: October 30, 2013 11:06 AM
To: Alexander Holler
Cc: linux-bluetooth@vger.kernel.org
Subject: RE: l2cap sockets not properly multiplexed on ARM
Yes, confirmed with gatttool. I used 3 terminals with one running btmon and the other 2 gatttool. I started btmon then ran gatttool on one terminal starting the notifications. Then I started another gatttool in another terminal and that new one then showed the results of both devices while the first gatttool stopped displaying any new notifications. You can see in the btmon that the values are coming from 2 different connection handles but the results are all coming through the 2nd gatttool. Here's the outputs using 3 terminals connected to the device (first listing was connected first):
So it's perfectly clear: This all works fine on an x86 machine, but is an issue on ARM
--------------------
root@linaro-server:~# gatttool -i 0 -b 78:C5:E5:6C:47:D3 --char-write-req --handle=0x002b --value=0100 --listen
Characteristic value was written successfully
Notification handle = 0x002a value: e9
Notification handle = 0x002a value: f9
Notification handle = 0x002a value: 06
Notification handle = 0x002a value: db
Notification handle = 0x002a value: e8
Notification handle = 0x002a value: f0
Notification handle = 0x002a value: dd
Notification handle = 0x002a value: fa
Notification handle = 0x002a value: 00
Notification handle = 0x002a value: f7
Notification handle = 0x002a value: 00
--------------------
root@linaro-server:~# gatttool -i 0 -b 78:C5:E5:6C:47:A2 --char-write-req --handle=0x002b --value=0100 --listen
Characteristic value was written successfully
Notification handle = 0x002e value: fa
Notification handle = 0x0032 value: c1
Notification handle = 0x002a value: 0b
Notification handle = 0x002e value: e7
Notification handle = 0x0032 value: da
Notification handle = 0x002a value: 9d
Notification handle = 0x002e value: 80
Notification handle = 0x0032 value: 80
Notification handle = 0x002a value: ff
Notification handle = 0x002e value: fa
Notification handle = 0x0032 value: c8
Notification handle = 0x0032 value: c1
Notification handle = 0x002a value: 43
Notification handle = 0x002a value: f4
Notification handle = 0x002a value: ee
Notification handle = 0x002a value: e0
Notification handle = 0x002a value: f0
Notification handle = 0x002a value: fe
Notification handle = 0x002a value: 04
Notification handle = 0x002a value: fe
Notification handle = 0x002a value: 17
Notification handle = 0x002e value: 35
Notification handle = 0x0032 value: 83
Notification handle = 0x002a value: 07
Notification handle = 0x002e value: f5
Notification handle = 0x0032 value: c1
Notification handle = 0x0032 value: ca
Notification handle = 0x002e value: 11
Notification handle = 0x0032 value: c4
Notification handle = 0x002e value: 06
Notification handle = 0x0032 value: ba
Notification handle = 0x002a value: fc
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: c6
Notification handle = 0x0032 value: c0
Notification handle = 0x002a value: e3
Notification handle = 0x002a value: f7
Notification handle = 0x002a value: b4
Notification handle = 0x002a value: f8
Notification handle = 0x002a value: 03
Notification handle = 0x002a value: f5
Notification handle = 0x002a value: 0d
Notification handle = 0x002a value: 04
Notification handle = 0x002a value: fc
Notification handle = 0x002a value: 02
Notification handle = 0x002a value: ae
Notification handle = 0x002e value: 9f
Notification handle = 0x0032 value: a5
Notification handle = 0x002a value: 14
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: b2
Notification handle = 0x002a value: e8
Notification handle = 0x0032 value: a8
Notification handle = 0x002a value: 08
Notification handle = 0x002e value: 0e
Notification handle = 0x0032 value: c4
Notification handle = 0x002a value: 57
Notification handle = 0x002e value: 7a
Notification handle = 0x002a value: fd
Notification handle = 0x002e value: f9
Notification handle = 0x002a value: 10
Notification handle = 0x002a value: ea
Notification handle = 0x002a value: 22
Notification handle = 0x002a value: ff
Notification handle = 0x002a value: 4d
Notification handle = 0x002e value: df
Notification handle = 0x0032 value: d8
Notification handle = 0x002a value: 03
Notification handle = 0x002e value: ff
Notification handle = 0x0032 value: b6
Notification handle = 0x002a value: 19
Notification handle = 0x002e value: 08
Notification handle = 0x0032 value: f8
Notification handle = 0x002a value: f4
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: ea
Notification handle = 0x002a value: 01
Notification handle = 0x0032 value: ba
Notification handle = 0x0032 value: c2
--------------------
root@linaro-server:~# /usr/src/bluez-4.101/monitor/btmon
Bluetooth monitor ver 4.101
[hci0] 14:59:31.455948 = New Index: 00:02:72:3E:7F:9B (BR/EDR,USB,hci0)
[hci0] 14:59:37.419288 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 d3 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 14:59:37.426536 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 14:59:39.342084 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 40 00 00 00 d3 47 6c e5 c5 78 36 00 00 00 ..@....Gl..x6...
2a 00 05 *..
{hci0} 14:59:39.342742 @ Device Connected: 78:C5:E5:6C:47:D3 (1) flags 0x0000
[hci0] 14:59:39.356628 < ACL Data: handle 64 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
[hci0] 14:59:39.511039 > ACL Data: handle 64 flags 0x02 dlen 16
0c 00 05 00 12 07 08 00 10 00 20 00 00 00 2c 01 .......... ...,.
[hci0] 14:59:39.513756 < ACL Data: handle 64 flags 0x00 dlen 10
06 00 05 00 13 07 02 00 00 00 ..........
[hci0] 14:59:39.513982 < HCI Command: LE Connection Update (0x08|0x0013) plen 14
40 00 10 00 20 00 00 00 2c 01 01 00 01 00 @... ...,.....
[hci0] 14:59:39.515988 > HCI Event: Command Status (0x0f) plen 4
00 01 13 20 ...
[hci0] 14:59:39.578489 > ACL Data: handle 64 flags 0x02 dlen 5
01 00 04 00 13 .....
[hci0] 14:59:39.645900 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e9 .....*..
[hci0] 14:59:39.647117 > HCI Event: Number of Completed Packets (0x13) plen 5
01 40 00 02 00 .@...
[hci0] 14:59:39.781014 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f9 .....*..
[hci0] 14:59:39.915999 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 06 .....*..
[hci0] 14:59:39.983479 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 db .....*..
[hci0] 14:59:40.185988 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e8 .....*..
[hci0] 14:59:40.253477 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f0 .....*..
[hci0] 14:59:40.590870 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 dd .....*..
[hci0] 14:59:40.595926 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fa .....*..
[hci0] 14:59:40.793513 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 14:59:46.452653 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 a2 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 14:59:46.454025 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 14:59:47.507002 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 41 00 00 00 a2 47 6c e5 c5 78 2d 00 00 00 ..A....Gl..x-...
2a 00 05 *..
[hci0] 14:59:47.516637 < ACL Data: handle 65 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
{hci0} 14:59:47.507516 @ Device Connected: 78:C5:E5:6C:47:A2 (1) flags 0x0000
[hci0] 14:59:47.964127 > HCI Event: Disconn Complete (0x05) plen 4
00 41 00 08 .A..
{hci0} 14:59:47.974180 @ Device Disconnected: 78:C5:E5:6C:47:A2 (1)
[hci0] 14:59:54.564158 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 b4 .....*..
[hci0] 14:59:54.698625 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 05 .....*..
[hci0] 14:59:54.766114 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 14:59:54.968591 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 14:59:55.171092 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 14 .....*..
[hci0] 14:59:55.306083 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 02 .....*..
[hci0] 14:59:55.441107 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ee .....*..
[hci0] 14:59:55.508612 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f8 .....*..
[hci0] 14:59:55.576088 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 14:59:55.711106 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 1b .....*..
[hci0] 14:59:55.778607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 14:59:55.913607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0f .....*..
[hci0] 14:59:55.981116 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 14:59:56.183619 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:24.952798 < HCI Command: LE Set Scan Parameters (0x08|0x000b) plen 7
01 10 00 10 00 00 00 .......
[hci0] 15:00:24.954958 > HCI Event: Command Complete (0x0e) plen 4
01 0b 20 00 .. .
[hci0] 15:00:24.959834 < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
01 01 ..
[hci0] 15:00:24.962354 > HCI Event: Command Complete (0x0e) plen 4
01 0c 20 00 .. .
{hci0} 15:00:24.963556 @ Discovering: 0x01 (0)
[hci0] 15:00:25.074841 > HCI Event: LE Meta Event (0x3e) plen 15
02 01 00 00 a2 47 6c e5 c5 78 03 02 01 05 a2 .....Gl..x.....
[hci0] 15:00:25.077321 > HCI Event: LE Meta Event (0x3e) plen 25
02 01 04 00 a2 47 6c e5 c5 78 0d 0c 09 4f 42 50 .....Gl..x...OBP
34 32 35 2d 34 37 41 32 a4 425-47A2.
{hci0} 15:00:25.075571 @ Device Found: 78:C5:E5:6C:47:A2 (1) rssi -94 flags 0x0000
02 01 05 ...
{hci0} 15:00:25.078879 @ Device Found: 78:C5:E5:6C:47:A2 (1) rssi -92 flags 0x0000
0c 09 4f 42 50 34 32 35 2d 34 37 41 32 ..OBP425-47A2
[hci0] 15:00:29.259153 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 15:00:29.394528 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 15:00:30.976520 < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
00 01 ..
[hci0] 15:00:30.982418 > HCI Event: Command Complete (0x0e) plen 4
01 0c 20 00 .. .
{hci0} 15:00:30.983404 @ Discovering: 0x00 (0)
[hci0] 15:00:33.275402 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 a2 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 15:00:33.279443 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 15:00:33.592636 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 41 00 00 00 a2 47 6c e5 c5 78 2d 00 00 00 ..A....Gl..x-...
2a 00 05 *..
{hci0} 15:00:33.593285 @ Device Connected: 78:C5:E5:6C:47:A2 (1) flags 0x0000
[hci0] 15:00:33.606593 < ACL Data: handle 65 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
[hci0] 15:00:33.639078 > ACL Data: handle 65 flags 0x02 dlen 16
0c 00 05 00 12 01 08 00 10 00 20 00 00 00 2c 01 .......... ...,.
[hci0] 15:00:33.645585 < ACL Data: handle 65 flags 0x00 dlen 10
06 00 05 00 13 01 02 00 00 00 ..........
[hci0] 15:00:33.645863 < HCI Command: LE Connection Update (0x08|0x0013) plen 14
41 00 10 00 20 00 00 00 2c 01 01 00 01 00 A... ...,.....
[hci0] 15:00:33.659465 > HCI Event: Command Status (0x0f) plen 4
00 01 13 20 ...
[hci0] 15:00:33.695413 > ACL Data: handle 65 flags 0x02 dlen 5
01 00 04 00 13 .....
[hci0] 15:00:33.751539 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fa ........
[hci0] 15:00:33.752586 > HCI Event: Number of Completed Packets (0x13) plen 5
01 41 00 02 00 .A...
[hci0] 15:00:33.752835 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:34.820181 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0b .....*..
[hci0] 15:00:34.821134 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 e7 ........
[hci0] 15:00:34.821273 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 da .....2..
[hci0] 15:00:34.932695 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 9d .....*..
[hci0] 15:00:34.934604 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 80 ........
[hci0] 15:00:34.934743 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 80 .....2..
[hci0] 15:00:35.045312 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ff .....*..
[hci0] 15:00:35.045539 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fa ........
[hci0] 15:00:35.047351 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c8 .....2..
[hci0] 15:00:35.157812 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:36.279077 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 43 .....*.C
[hci0] 15:00:36.414070 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f4 .....*..
[hci0] 15:00:36.481571 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ee .....*..
[hci0] 15:00:36.616574 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e0 .....*..
[hci0] 15:00:36.684053 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f0 .....*..
[hci0] 15:00:36.886559 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:37.021553 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 15:00:37.494080 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:38.870323 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 17 .....*..
[hci0] 15:00:38.875497 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 35 .......5
[hci0] 15:00:38.875625 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 83 .....2..
[hci0] 15:00:38.926466 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 07 .....*..
[hci0] 15:00:38.927533 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 f5 ........
[hci0] 15:00:38.927672 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:39.151579 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ca .....2..
[hci0] 15:00:39.263964 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 11 ........
[hci0] 15:00:39.265848 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c4 .....2..
[hci0] 15:00:39.265989 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 06 ........
[hci0] 15:00:39.266111 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ba .....2..
[hci0] 15:00:39.320324 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fc .....*..
[hci0] 15:00:39.321448 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:39.321573 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c6 .....2..
[hci0] 15:00:40.022479 > HCI Event: LE Meta Event (0x3e) plen 10
03 00 40 00 1e 00 00 00 2c 01 ..@.....,.
[hci0] 15:00:41.345357 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c0 .....2..
[hci0] 15:00:42.572098 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e3 .....*..
[hci0] 15:00:42.722098 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 15:00:43.096607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 b4 .....*..
[hci0] 15:00:43.171601 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f8 .....*..
[hci0] 15:00:43.284093 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 15:00:44.971623 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f5 .....*..
[hci0] 15:00:45.084106 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0d .....*..
[hci0] 15:00:45.234114 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 15:00:45.271610 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fc .....*..
[hci0] 15:00:45.497127 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 02 .....*..
[hci0] 15:00:46.632779 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ae .....*..
[hci0] 15:00:46.634611 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 9f ........
[hci0] 15:00:46.634738 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 a5 .....2..
[hci0] 15:00:46.745405 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 14 .....*..
[hci0] 15:00:46.747312 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:46.747446 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 b2 .....2..
[hci0] 15:00:46.801502 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e8 .....*..
[hci0] 15:00:46.802618 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 a8 .....2..
[hci0] 15:00:46.970391 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 08 .....*..
[hci0] 15:00:46.973070 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 0e ........
[hci0] 15:00:46.973195 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c4 .....2..
[hci0] 15:00:47.026653 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 57 .....*.W
[hci0] 15:00:47.027765 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 7a .......z
[hci0] 15:00:47.139021 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fd .....*..
[hci0] 15:00:47.140909 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 f9 ........
[hci0] 15:00:50.071664 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 10 .....*..
[hci0] 15:00:50.184154 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ea .....*..
[hci0] 15:00:50.296659 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 22 .....*."
[hci0] 15:00:50.371649 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ff .....*..
[hci0] 15:00:50.795432 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 4d .....*.M
[hci0] 15:00:50.801677 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 df ........
[hci0] 15:00:50.801815 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 d8 .....2..
[hci0] 15:00:50.851667 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 15:00:50.852711 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 ff ........
[hci0] 15:00:50.852851 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 b6 .....2..
[hci0] 15:00:50.907932 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 19 .....*..
[hci0] 15:00:50.909037 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 08 ........
[hci0] 15:00:50.909177 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 f8 .....2..
[hci0] 15:00:51.020415 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f4 .....*..
[hci0] 15:00:51.022325 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:51.022470 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ea .....2..
[hci0] 15:00:51.132937 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 01 .....*..
[hci0] 15:00:51.134846 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ba .....2..
[hci0] 15:00:51.245438 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c2 .....2..
[hci0] 15:00:58.766551 < HCI Command: Disconnect (0x01|0x0006) plen 3
40 00 13 @..
[hci0] 15:00:58.772294 > HCI Event: Command Status (0x0f) plen 4
00 01 06 04 ....
[hci0] 15:00:58.773594 > HCI Event: Disconn Complete (0x05) plen 4
00 40 00 16 .@..
{hci0} 15:00:58.774541 @ Device Disconnected: 78:C5:E5:6C:47:D3 (1)
[hci0] 15:01:02.796566 < HCI Command: Disconnect (0x01|0x0006) plen 3
41 00 13 A..
[hci0] 15:01:02.803369 > HCI Event: Command Status (0x0f) plen 4
00 01 06 04 ....
[hci0] 15:01:03.170637 > HCI Event: Disconn Complete (0x05) plen 4
00 41 00 22 .A."
{hci0} 15:01:03.179209 @ Device Disconnected: 78:C5:E5:6C:47:A2 (1)
________________________________________
From: Alexander Holler [holler@ahsoftware.de]
Sent: October 30, 2013 10:16 AM
To: Tim Tisdall
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: l2cap sockets not properly multiplexed on ARM
Am 30.10.2013 14:15, schrieb Tim Tisdall:
> The problem exists on the other end of the socket; the kernel side.
Do you have tried using gattool to verify that?
Regards,
Alexander Holler
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* [PATCH 1/2] android/hal: Add initial socket implementation
From: Marcin Kraglak @ 2013-10-30 15:16 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Marcin Kraglak
Added socket api opcodes and structures and its implementation
in hal-sock.c.
---
android/hal-msg.h | 20 ++++++++++++++++++++
android/hal-sock.c | 28 ++++++++++++++++++++++++++--
2 files changed, 46 insertions(+), 2 deletions(-)
diff --git a/android/hal-msg.h b/android/hal-msg.h
index d2a0e2a..7c67948 100644
--- a/android/hal-msg.h
+++ b/android/hal-msg.h
@@ -210,6 +210,26 @@ struct hal_cmd_le_test_mode {
uint8_t data[0];
} __attribute__((packed));
+/* Bluetooth Socket HAL api */
+
+#define HAL_OP_SOCK_LISTEN 0x01
+struct hal_op_sock_listen {
+ uint8_t type;
+ uint8_t name[256];
+ uint8_t uuid[16];
+ uint16_t channel;
+ uint8_t flags;
+} __attribute__((packed));
+
+#define HAL_OP_SOCK_CONNECT 0x02
+struct hal_op_sock_connect {
+ uint8_t bdaddr[6];
+ uint8_t type;
+ uint8_t uuid[16];
+ uint16_t channel;
+ uint8_t flags;
+} __attribute__((packed));
+
#define HAL_OP_HID_CONNECT 0x01
struct hal_cmd_hid_connect {
uint8_t bdaddr[6];
diff --git a/android/hal-sock.c b/android/hal-sock.c
index 7642ee3..131877a 100644
--- a/android/hal-sock.c
+++ b/android/hal-sock.c
@@ -15,18 +15,33 @@
*
*/
+#include <stdbool.h>
+#include <stdint.h>
#include <stdlib.h>
+#include <string.h>
+#include "hal-ipc.h"
#include "hal-log.h"
+#include "hal-msg.h"
#include "hal.h"
static bt_status_t sock_listen_rfcomm(const char *service_name,
const uint8_t *uuid, int chan,
int *sock, int flags)
{
+ struct hal_op_sock_listen cmd;
+
DBG("");
- return BT_STATUS_UNSUPPORTED;
+ cmd.flags = flags;
+ cmd.type = BTSOCK_RFCOMM;
+ cmd.channel = chan;
+ memcpy(cmd.uuid, uuid, sizeof(cmd.uuid));
+ memset(cmd.name, 0, sizeof(cmd.name));
+ memcpy(cmd.name, service_name, strlen(service_name));
+
+ return hal_ipc_cmd(HAL_SERVICE_ID_SOCK, HAL_OP_SOCK_LISTEN,
+ sizeof(cmd), &cmd, NULL, NULL, sock);
}
static bt_status_t sock_listen(btsock_type_t type, const char *service_name,
@@ -58,6 +73,8 @@ static bt_status_t sock_connect(const bt_bdaddr_t *bdaddr, btsock_type_t type,
const uint8_t *uuid, int chan,
int *sock, int flags)
{
+ struct hal_op_sock_connect cmd;
+
if ((!uuid && chan <= 0) || !bdaddr || !sock) {
error("invalid params: bd_addr %p, uuid %p, chan %d, sock %p",
bdaddr, uuid, chan, sock);
@@ -66,7 +83,14 @@ static bt_status_t sock_connect(const bt_bdaddr_t *bdaddr, btsock_type_t type,
DBG("uuid %p chan %d sock %p type %d", uuid, chan, sock, type);
- return BT_STATUS_UNSUPPORTED;
+ cmd.flags = flags;
+ cmd.type = type;
+ cmd.channel = chan;
+ memcpy(cmd.uuid, uuid, sizeof(cmd.uuid));
+ memcpy(cmd.bdaddr, bdaddr, sizeof(cmd.bdaddr));
+
+ return hal_ipc_cmd(HAL_SERVICE_ID_SOCK, HAL_OP_SOCK_CONNECT,
+ sizeof(cmd), &cmd, NULL, NULL, sock);
}
static btsock_interface_t sock_if = {
--
1.8.4.1
^ permalink raw reply related
* [PATCH 2/2] android: Initial implementation of socket interface
From: Marcin Kraglak @ 2013-10-30 15:16 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Marcin Kraglak
In-Reply-To: <1383146193-13240-1-git-send-email-marcin.kraglak@tieto.com>
Add stub implementation of socket interace on daemon side.
---
android/main.c | 4 ++++
android/socket.c | 42 ++++++++++++++++++++++++++++++++++++++++++
android/socket.h | 3 +++
3 files changed, 49 insertions(+)
diff --git a/android/main.c b/android/main.c
index 6ff30a9..2b40621 100644
--- a/android/main.c
+++ b/android/main.c
@@ -213,6 +213,10 @@ static gboolean cmd_watch_cb(GIOChannel *io, GIOCondition cond,
bt_hid_handle_cmd(hal_cmd_io, msg->opcode, msg->payload,
msg->len);
break;
+ case HAL_SERVICE_ID_SOCK:
+ bt_sock_handle_cmd(hal_cmd_io, msg->opcode, msg->payload,
+ msg->len);
+ break;
default:
ipc_send_rsp(hal_cmd_io, msg->service_id, HAL_STATUS_FAILED);
break;
diff --git a/android/socket.c b/android/socket.c
index 22d2acb..39709cd 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -26,8 +26,50 @@
#include "lib/bluetooth.h"
#include "log.h"
+#include "hal-msg.h"
+#include "hal-ipc.h"
+#include "ipc.h"
#include "socket.h"
+
+static int handle_listen(void *buf)
+{
+ return -1;
+}
+
+static int handle_connect(void *buf)
+{
+ return -1;
+}
+
+void bt_sock_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
+ uint16_t len)
+{
+ int fd;
+
+ switch (opcode) {
+ case HAL_OP_SOCK_LISTEN:
+ fd = handle_listen(buf);
+ if (fd < 0)
+ break;
+
+ ipc_send(io, HAL_SERVICE_ID_SOCK, opcode, 0, NULL, fd);
+ return;
+ case HAL_OP_SOCK_CONNECT:
+ fd = handle_connect(buf);
+ if (fd < 0)
+ break;
+
+ ipc_send(io, HAL_SERVICE_ID_SOCK, opcode, 0, NULL, fd);
+ return;
+ default:
+ DBG("Unhandled command, opcode 0x%x", opcode);
+ break;
+ }
+
+ ipc_send_rsp(io, HAL_SERVICE_ID_SOCK, HAL_STATUS_FAILED);
+}
+
bool bt_socket_register(GIOChannel *io, const bdaddr_t *addr)
{
DBG("");
diff --git a/android/socket.h b/android/socket.h
index b13e84c..2b3b940 100644
--- a/android/socket.h
+++ b/android/socket.h
@@ -21,5 +21,8 @@
*
*/
+void bt_sock_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
+ uint16_t len);
+
bool bt_socket_register(GIOChannel *io, const bdaddr_t *addr);
void bt_socket_unregister(void);
--
1.8.4.1
^ permalink raw reply related
* [PATCH 1/2] android: Add initial sdp implementation
From: Marcin Kraglak @ 2013-10-30 15:18 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Marcin Kraglak
Add and remove records to sdp server. This api will
be used in android's profiles implementations.
---
android/adapter.c | 11 +++++++++++
android/adapter.h | 4 ++++
2 files changed, 15 insertions(+)
diff --git a/android/adapter.c b/android/adapter.c
index 15b65e5..325d0f0 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -26,6 +26,7 @@
#include <glib.h>
#include "lib/bluetooth.h"
+#include "src/sdpd.h"
#include "src/shared/mgmt.h"
#include "lib/mgmt.h"
#include "log.h"
@@ -528,6 +529,16 @@ error:
ipc_send_rsp(io, HAL_SERVICE_ID_BLUETOOTH, status);
}
+int bt_adapter_service_add(sdp_record_t *rec)
+{
+ return add_record_to_server(&adapter->bdaddr, rec);
+}
+
+void bt_adapter_service_remove(uint32_t handle)
+{
+ remove_record_from_server(handle);
+}
+
const bdaddr_t *bt_adapter_get_address(void)
{
return &adapter->bdaddr;
diff --git a/android/adapter.h b/android/adapter.h
index 2afc67a..c5ba76b 100644
--- a/android/adapter.h
+++ b/android/adapter.h
@@ -27,6 +27,7 @@
#include <glib.h>
#include "lib/bluetooth.h"
+#include "lib/sdp.h"
typedef void (*bt_adapter_ready)(int err);
@@ -38,5 +39,8 @@ void bt_adapter_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
const bdaddr_t *bt_adapter_get_address(void);
+int bt_adapter_service_add(sdp_record_t *rec);
+void bt_adapter_service_remove(uint32_t handle);
+
bool bt_adapter_register(GIOChannel *io);
void bt_adapter_unregister(void);
--
1.8.4.1
^ permalink raw reply related
* [PATCH 2/2] android: Add supported uuids when adapter initialized
From: Marcin Kraglak @ 2013-10-30 15:18 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Marcin Kraglak
In-Reply-To: <1383146314-13456-1-git-send-email-marcin.kraglak@tieto.com>
It will set class of device with proper service hints.
We set it statically because we don't want to change
class of device while adding/removing sdp services.
---
android/adapter.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/android/adapter.c b/android/adapter.c
index 325d0f0..e54264d 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -37,6 +37,24 @@
static GIOChannel *notification_io = NULL;
+/*
+ * This is an array of supported uuids and service hints. We add them via mgmt
+ * interface when adapter is initialized. Uuids are in reverse orded.
+ */
+static const struct mgmt_cp_add_uuid sup_uuids[] = {
+ /* OBEX */
+ {{0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 0x00,
+ 0x10, 0x00, 0x00, 0x05, 0x11, 0x00, 0x00}, 0x10},
+ /* TELEPHONY */
+ {{0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 0x00,
+ 0x10, 0x00, 0x00, 0x1f, 0x11, 0x00, 0x00}, 0x40},
+ /* CAPTURING */
+ {{0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 0x00,
+ 0x10, 0x00, 0x00, 0x0d, 0x11, 0x00, 0x00}, 0x08},
+ /* NETWORKING */
+ {{0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 0x00,
+ 0x10, 0x00, 0x00, 0x15, 0x11, 0x00, 0x00}, 0x02} };
+
struct bt_adapter {
uint16_t index;
struct mgmt *mgmt;
@@ -252,6 +270,38 @@ static void load_link_keys(GSList *keys)
g_free(cp);
}
+static void add_uuid_complete(uint8_t status, uint16_t length,
+ const void *param, void *user_data)
+{
+ if (status != MGMT_STATUS_SUCCESS) {
+ error("Failed to add UUID: %s (0x%02x)",
+ mgmt_errstr(status), status);
+ return;
+ }
+
+ mgmt_dev_class_changed_event(adapter->index, length, param, NULL);
+}
+
+static void add_uuids(void)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof(sup_uuids) / sizeof(sup_uuids[0]); i++)
+ mgmt_send(adapter->mgmt, MGMT_OP_ADD_UUID, adapter->index,
+ sizeof(sup_uuids[i]), &sup_uuids[i],
+ add_uuid_complete, NULL, NULL);
+}
+
+static void clear_uuids(void)
+{
+ struct mgmt_cp_remove_uuid cp;
+
+ memset(&cp, 0, sizeof(cp));
+
+ mgmt_send(adapter->mgmt, MGMT_OP_REMOVE_UUID, adapter->index,
+ sizeof(cp), &cp, NULL, NULL, NULL);
+}
+
static void set_mode_complete(uint8_t status, uint16_t length,
const void *param, void *user_data)
{
@@ -330,6 +380,9 @@ static void read_info_complete(uint8_t status, uint16_t length, const void *para
set_mode(MGMT_OP_SET_PAIRABLE, 0x01);
+ clear_uuids();
+ add_uuids();
+
return;
failed:
--
1.8.4.1
^ permalink raw reply related
* [RFC] android/hal: Add support for repacking received IPC data to HAL data
From: Szymon Janc @ 2013-10-30 15:30 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
Some HAL defined types that are passed as type-len-value in properties
callback needs to be repacked at runtime to match defined types.
This is due to HAL using data types without strict refined sizes like
enums or unpacked structures. This is needed only if data is passed as
TLV. With data passed to callbacks as parameters compiler will handle
types convertion.
Currently only enum types are supported.
---
This is only for received events. Same needs to be done when sending props
from HAL lib to daemon.
android/hal-bluetooth.c | 104 ++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 96 insertions(+), 8 deletions(-)
diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index 2237063..a6228d7 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -29,6 +29,13 @@
static const bt_callbacks_t *bt_hal_cbacks = NULL;
+#define create_enum_prop(prop, hal_prop, type) do { \
+ type *pe = malloc(sizeof(type)); \
+ prop.val = pe; \
+ prop.len = sizeof(*pe); \
+ *pe = *((uint8_t *) (hal_prop->val)); \
+} while (0)
+
static void handle_adapter_state_changed(void *buf)
{
struct hal_ev_adapter_state_changed *ev = buf;
@@ -37,10 +44,58 @@ static void handle_adapter_state_changed(void *buf)
bt_hal_cbacks->adapter_state_changed_cb(ev->state);
}
-static void repack_properties(bt_property_t *send_props,
+static void adapter_props_to_hal(bt_property_t *send_props,
+ struct hal_property *hal_prop,
+ uint8_t num_props, void *buff_end)
+{
+ void *p = hal_prop;
+ uint8_t i;
+
+ for (i = 0; i < num_props; i++) {
+ if (p + sizeof(*hal_prop) + hal_prop->len > buff_end) {
+ error("invalid adapter properties event, aborting");
+ exit(EXIT_FAILURE);
+ }
+
+ send_props[i].type = hal_prop->type;
+
+ switch (hal_prop->type) {
+ case HAL_PROP_ADAPTER_TYPE:
+ create_enum_prop(send_props[i], hal_prop,
+ bt_device_type_t);
+ break;
+ case HAL_PROP_ADAPTER_SCAN_MODE:
+ create_enum_prop(send_props[i], hal_prop,
+ bt_scan_mode_t);
+ break;
+ case HAL_PROP_ADAPTER_SERVICE_REC:
+ default:
+ send_props[i].len = hal_prop->len;
+ send_props[i].val = hal_prop->val;
+ break;
+ }
+ }
+}
+
+static void adapter_hal_props_cleanup(bt_property_t *props, uint8_t num)
+{
+ uint8_t i;
+
+ for (i = 0; i < num; i++) {
+ switch (props[i].type) {
+ case HAL_PROP_ADAPTER_TYPE:
+ case HAL_PROP_ADAPTER_SCAN_MODE:
+ free(props[i].val);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+static void device_props_to_hal(bt_property_t *send_props,
struct hal_property *hal_prop,
- uint8_t num_props,
- void *buff_end)
+ uint8_t num_props, void *buff_end)
{
void *p = hal_prop;
uint8_t i;
@@ -52,14 +107,41 @@ static void repack_properties(bt_property_t *send_props,
}
send_props[i].type = hal_prop->type;
- send_props[i].len = hal_prop->len;
- send_props[i].val = hal_prop->val;
+
+ switch (hal_prop->type) {
+ case HAL_PROP_DEVICE_TYPE:
+ create_enum_prop(send_props[i], hal_prop,
+ bt_device_type_t);
+ break;
+ case HAL_PROP_DEVICE_SERVICE_REC:
+ case HAL_PROP_DEVICE_VERSION_INFO:
+ default:
+ send_props[i].len = hal_prop->len;
+ send_props[i].val = hal_prop->val;
+ break;
+ }
p += sizeof(*hal_prop) + hal_prop->len;
hal_prop = p;
}
}
+
+static void device_hal_props_cleanup(bt_property_t *props, uint8_t num)
+{
+ uint8_t i;
+
+ for (i = 0; i < num; i++) {
+ switch (props[i].type) {
+ case HAL_PROP_DEVICE_TYPE:
+ free(props[i].val);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
static void handle_adapter_props_changed(void *buf, uint16_t len)
{
struct hal_ev_adapter_props_changed *ev = buf;
@@ -68,9 +150,11 @@ static void handle_adapter_props_changed(void *buf, uint16_t len)
if (!bt_hal_cbacks->adapter_properties_cb)
return;
- repack_properties(props, ev->props, ev->num_props, buf + len);
+ adapter_props_to_hal(props, ev->props, ev->num_props, buf + len);
bt_hal_cbacks->adapter_properties_cb(ev->status, ev->num_props, props);
+
+ adapter_hal_props_cleanup(props, ev->num_props);
}
static void handle_bond_state_change(void *buf)
@@ -140,9 +224,11 @@ static void handle_device_found(void *buf, uint16_t len)
if (!bt_hal_cbacks->device_found_cb)
return;
- repack_properties(props, ev->props, ev->num_props, buf + len);
+ device_props_to_hal(props, ev->props, ev->num_props, buf + len);
bt_hal_cbacks->device_found_cb(ev->num_props, props);
+
+ device_hal_props_cleanup(props, ev->num_props);
}
static void handle_device_state_changed(void *buf, uint16_t len)
@@ -153,11 +239,13 @@ static void handle_device_state_changed(void *buf, uint16_t len)
if (!bt_hal_cbacks->remote_device_properties_cb)
return;
- repack_properties(props, ev->props, ev->num_props, buf + len);
+ device_props_to_hal(props, ev->props, ev->num_props, buf + len);
bt_hal_cbacks->remote_device_properties_cb(ev->status,
(bt_bdaddr_t *)ev->bdaddr,
ev->num_props, props);
+
+ device_hal_props_cleanup(props, ev->num_props);
}
/* will be called from notification thread context */
--
1.8.4.1
^ permalink raw reply related
* [PATCH] android: Use Android headers instead of local ones
From: Andrei Emeltchenko @ 2013-10-30 15:51 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Add path to Android libhardware library headers
---
android/Android.mk | 1 +
1 file changed, 1 insertion(+)
diff --git a/android/Android.mk b/android/Android.mk
index fc1b276..88dff4b 100644
--- a/android/Android.mk
+++ b/android/Android.mk
@@ -86,6 +86,7 @@ LOCAL_SRC_FILES := \
LOCAL_C_INCLUDES += \
$(call include-path-for, system-core) \
+ $(call include-path-for, libhardware) \
LOCAL_SHARED_LIBRARIES := \
libcutils \
--
1.7.10.4
^ permalink raw reply related
* Re: l2cap sockets not properly multiplexed on ARM
From: Anderson Lizardo @ 2013-10-30 18:36 UTC (permalink / raw)
To: Tim Tisdall; +Cc: Alexander Holler, linux-bluetooth@vger.kernel.org
In-Reply-To: <D9B9EB3A112B8F489DFFA00A6D5C0FE2032419D0@AD-BR-EX-2.adroot.flemingc.local>
Hi Tim,
On Wed, Oct 30, 2013 at 11:16 AM, Tim Tisdall
<tim.tisdall@flemingcollege.ca> wrote:
> root@linaro-server:~# uname -a
> Linux linaro-server 3.4.43 #6 PREEMPT Mon Aug 19 16:40:34 EDT 2013 armv7l armv7l armv7l GNU/Linux
Are you using this same kernel version on x86?
PS: please follow mailing list etiquette and refrain from top-posting
and only quote the part of emails you want to comment on. See e.g.
http://linux.sgms-centre.com/misc/netiquette.php#toppost
Best Regards,
--
Anderson Lizardo
Instituto Nokia de Tecnologia - INdT
Manaus - Brazil
^ permalink raw reply
* Re: Intel 7260 bluetooth malfunction when it is connected to EHCI bus
From: Tedd Ho-Jeong An @ 2013-10-30 19:36 UTC (permalink / raw)
To: Hui Wang
Cc: Marcel Holtmann, Johan Hedberg, xiong.y.zhang, Gustavo F. Padovan,
linux-bluetooth@vger.kernel.org development
In-Reply-To: <52707428.9070908@canonical.com>
[-- Attachment #1: Type: text/plain, Size: 5449 bytes --]
On Wednesday, October 30, 2013 10:51:20 AM Hui Wang wrote:
> On 10/29/2013 07:16 PM, Marcel Holtmann wrote:
> > Hi Hui,
> >
> >> The problem is:
> >> On the machine which has Intel 7260 BT module, i use it to connect a
> >> bluetooth headset, it can successfully scan and connect to the headset,
> >> when i play sound to the bt headset, the problem comes, if the bt module
> >> is connected to the XHCI, it can work very well.
> >>
> >> u@u-Lenovo-B4400:~$ lsusb -t
> >> 1-7:1.0: No such file or directory
> >> /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
> >> /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M
> >>
> >> |__ Port 6: Dev 8, If 0, Class=HID, Driver=usbhid, 1.5M
> >> |__ Port 7: Dev 2, If 0, Class=vend., Driver=, 12M
> >> |__ Port 11: Dev 3, If 0, Class='bInterfaceClass 0xe0 not yet
> >> |handled', Driver=btusb, 12M __ Port 11: Dev 3, If 1,
> >> |Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M>>
> >> But if the bt module is connected to the EHCI, it always fails to play
> >> sound.
> >>
> >> u@u-Lenovo-B4400:~$ lsusb -t
> >> /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
> >> /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M
> >> /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/3p, 480M
> >>
> >> |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/8p, 480M
> >>
> >> /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/3p, 480M
> >>
> >> |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
> >> |
> >> |__ Port 5: Dev 3, If 0, Class='bInterfaceClass 0xe0 not yet
> >> |handled', Driver=btusb, 12M __ Port 5: Dev 3, If 1,
> >> |Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
> >> |__ Port 6: Dev 4, If 0, Class='bInterfaceClass 0x0e not yet
> >> |handled', Driver=uvcvideo, 480M __ Port 6: Dev 4, If 1,
> >> |Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo,
> >> |480M>
> > can you paste /sys/kernel/debug/usb/devices here.
> >
> > If the uvcvideo driver is also using ISOC URBs, we might have just
> > exhausted the bandwidth of the USB bus here or these two devices just do
> > not play nice with each other.
> >
> > Try to unload the uvcvideo driver and try it again.
>
> Thanks for your reply, follow your instruction, i totally disabled the
> camera from the BIOS, then the usb tree like this,
> u@u-Lenovo-B4400:~$ lsusb -t
> 1-1.3:1.0: No such file or directory
> /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
> /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M
> /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
>
> |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/8p, 480M
>
> /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
>
> |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
> |
> |__ Port 2: Dev 3, If 0, Class=HID, Driver=usbhid, 1.5M
> |__ Port 3: Dev 4, If 0, Class=vend., Driver=, 12M
> |__ Port 5: Dev 5, If 0, Class='bInterfaceClass 0xe0 not yet
>
> handled', Driver=btusb, 12M
>
> |__ Port 5: Dev 5, If 1, Class='bInterfaceClass 0xe0 not yet
>
> handled', Driver=btusb, 12M
> u@u-Lenovo-B4400:~$ uname -a
> Linux u-Lenovo-B4400 3.12.0-031200rc6-generic #201310191635 SMP Sat Oct
> 19 20:36:43 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
>
> I re-did the test, the result is same as before, after the headset is
> connected and i play audio, no sound is heard from the headset.
> And hciconfig output shows still no SCO packets received by BT driver.
> u@u-Lenovo-B4400:~$ hciconfig
> hci0: Type: BR/EDR Bus: USB
> BD Address: 00:15:00:CC:2D:D2 ACL MTU: 1021:5 SCO MTU: 96:5
> UP RUNNING PSCAN
> RX bytes:5853 acl:61 sco:0 events:298 errors:0
> TX bytes:19212 acl:68 sco:1 commands:179 errors:0
>
> This is the debug output of "sudo cat /sys/kernel/debug/usb/devices"
> after those operations,
> u@u-Lenovo-B4400:~$ sudo cat /sys/kernel/debug/usb/devices
>
> T: Bus=04 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=5000 MxCh= 4
> B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
> D: Ver= 3.00 Cls=09(hub ) Sub=00 Prot=03 MxPS= 9 #Cfgs= 1
> P: Vendor=1d6b ProdID=0003 Rev= 3.05
> S: Manufacturer=Linux 3.12.0-rc6-WR5.0.1.4_standard+ xhci_hcd
> S: Product=xHCI Host Controller
> S: SerialNumber=0000:00:14.0
> C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
> I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
> E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms
>
> T: Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh=14
> B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
> D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
> P: Vendor=1d6b ProdID=0002 Rev= 3.05
> S: Manufacturer=Linux 3.12.0-rc6-WR5.0.1.4_standard+ xhci_hcd
> S: Product=xHCI Host Controller
> S: SerialNumber=0000:00:14.0
> C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
> I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
> E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms
>
> T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 3
> B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
> D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
> P: Vendor=1d6b ProdID=0002 Rev= 3.05
> S: Manufacturer=Linux 3.12.0-rc6-WR5.0.1.4_standard+ ehci_hcd
> S: Product=EHCI Host Controller
[-- Attachment #2: Type: text/html, Size: 39997 bytes --]
^ permalink raw reply
* pull request: bluetooth 2013-10-30
From: Gustavo Padovan @ 2013-10-30 19:38 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, linux-bluetooth, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 964 bytes --]
Hi John,
A last fix to the 3.12. I ended forgetting to send it before, I hope we can
still make the way to 3.12. It is a revert and it fixes an issue with bluetooth
suspend/hibernate that had many bug reports. Please pull or let me know of any
problems. Thanks!
Gustavo
--
The following changes since commit c7515d2365a6b8a018950198ebe1f5be793cd4bb:
brcmsmac: call bcma_core_pci_power_save() from non-atomic context (2013-09-26 14:02:34 -0400)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth master
for you to fetch changes up to b1a8014471b01dd862de9f91bbbff1296afac42d:
Bluetooth: revert: "Bluetooth: Add missing reset_resume dev_pm_ops" (2013-10-02 16:01:49 -0300)
----------------------------------------------------------------
Hans de Goede (1):
Bluetooth: revert: "Bluetooth: Add missing reset_resume dev_pm_ops"
drivers/bluetooth/btusb.c | 1 -
1 file changed, 1 deletion(-)
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply
* Re: l2cap sockets not properly multiplexed on ARM
From: Marcel Holtmann @ 2013-10-30 19:40 UTC (permalink / raw)
To: Tim Tisdall; +Cc: Alexander Holler, linux-bluetooth@vger.kernel.org
In-Reply-To: <D9B9EB3A112B8F489DFFA00A6D5C0FE2032419A8@AD-BR-EX-2.adroot.flemingc.local>
Hi Tim,
> Yes, confirmed with gatttool. I used 3 terminals with one running btmon and the other 2 gatttool. I started btmon then ran gatttool on one terminal starting the notifications. Then I started another gatttool in another terminal and that new one then showed the results of both devices while the first gatttool stopped displaying any new notifications. You can see in the btmon that the values are coming from 2 different connection handles but the results are all coming through the 2nd gatttool. Here's the outputs using 3 terminals connected to the device (first listing was connected first):
>
> So it's perfectly clear: This all works fine on an x86 machine, but is an issue on ARM
you must be hitting some non obvious race condition. My first guess is that we have some sort of unaligned access somewhere that ends up that we put the data into the wrong L2CAP channel.
Can you have a look at Documentation/dynamic-debug-howto.txt and enable the debug section for the bluetooth.ko kernel module. I wonder if we see something fishy in there.
In the end we have to trace the whole flow of the packets and figure out at which point this ended up being send to the wrong channel.
Do you have the chance to run bluetooth-next tree for testing purposes? I rather debug this against the latest tree. I have no ARM platform lying around. So you have to be my test subject ;)
Regards
Marcel
^ permalink raw reply
* Re: Intel 7260 bluetooth malfunction when it is connected to EHCI bus
From: Marcel Holtmann @ 2013-10-30 19:44 UTC (permalink / raw)
To: Hui Wang
Cc: Tedd An, Johan Hedberg, xiong.y.zhang, Gustavo F. Padovan,
linux-bluetooth@vger.kernel.org development
In-Reply-To: <52707428.9070908@canonical.com>
Hi Hui,
>>> The problem is:
>>> On the machine which has Intel 7260 BT module, i use it to connect a bluetooth headset,
>>> it can successfully scan and connect to the headset, when i play sound to the bt headset,
>>> the problem comes, if the bt module is connected to the XHCI, it can work very well.
>>>
>>> u@u-Lenovo-B4400:~$ lsusb -t
>>> 1-7:1.0: No such file or directory
>>> /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
>>> /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M
>>> |__ Port 6: Dev 8, If 0, Class=HID, Driver=usbhid, 1.5M
>>> |__ Port 7: Dev 2, If 0, Class=vend., Driver=, 12M
>>> |__ Port 11: Dev 3, If 0, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
>>> |__ Port 11: Dev 3, If 1, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
>>>
>>> But if the bt module is connected to the EHCI, it always fails to play sound.
>>>
>>> u@u-Lenovo-B4400:~$ lsusb -t
>>> /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
>>> /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M
>>> /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/3p, 480M
>>> |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/8p, 480M
>>> /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/3p, 480M
>>> |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
>>> |__ Port 5: Dev 3, If 0, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
>>> |__ Port 5: Dev 3, If 1, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
>>> |__ Port 6: Dev 4, If 0, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
>>> |__ Port 6: Dev 4, If 1, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
>> can you paste /sys/kernel/debug/usb/devices here.
>>
>> If the uvcvideo driver is also using ISOC URBs, we might have just exhausted the bandwidth of the USB bus here or these two devices just do not play nice with each other.
>>
>> Try to unload the uvcvideo driver and try it again.
> Thanks for your reply, follow your instruction, i totally disabled the camera from the BIOS, then the usb tree like this,
> u@u-Lenovo-B4400:~$ lsusb -t
> 1-1.3:1.0: No such file or directory
> /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
> /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M
> /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
> |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/8p, 480M
> /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
> |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
> |__ Port 2: Dev 3, If 0, Class=HID, Driver=usbhid, 1.5M
> |__ Port 3: Dev 4, If 0, Class=vend., Driver=, 12M
> |__ Port 5: Dev 5, If 0, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
> |__ Port 5: Dev 5, If 1, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
> u@u-Lenovo-B4400:~$ uname -a
> Linux u-Lenovo-B4400 3.12.0-031200rc6-generic #201310191635 SMP Sat Oct 19 20:36:43 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
>
> I re-did the test, the result is same as before, after the headset is connected and i play audio, no sound is heard from the headset.
> And hciconfig output shows still no SCO packets received by BT driver.
> u@u-Lenovo-B4400:~$ hciconfig
> hci0: Type: BR/EDR Bus: USB
> BD Address: 00:15:00:CC:2D:D2 ACL MTU: 1021:5 SCO MTU: 96:5
> UP RUNNING PSCAN
> RX bytes:5853 acl:61 sco:0 events:298 errors:0
> TX bytes:19212 acl:68 sco:1 commands:179 errors:0
this is strange. The only reason I can think of is that you do not have the firmware installed and or it is not loaded correctly. Does dmesg give any indication that something failed here.
Since this is a 3.12 kernel it should have native support for Intel specific setup routing. Any chance you can run btmon -w <file> before plugging the device into the bus. Maybe something goes wrong with the setup routine on EHCI.
Regards
Marcel
^ permalink raw reply
* RE: l2cap sockets not properly multiplexed on ARM
From: Tim Tisdall @ 2013-10-30 20:45 UTC (permalink / raw)
To: Marcel Holtmann; +Cc: Alexander Holler, linux-bluetooth@vger.kernel.org
In-Reply-To: <4A213FF7-48BA-4906-8868-7C3A227EF954@holtmann.org>
> Can you have a look at Documentation/dynamic-debug-howto.txt and enable t=
he debug section for the bluetooth.ko kernel module. I wonder if we see som=
ething fishy in there.=0A=
=0A=
That document looks rather long and confusing... what exactly do I need to=
type to get the debugging statements working for bluetooth.ko?=0A=
=0A=
>Do you have the chance to run bluetooth-next tree for testing purposes? I =
rather debug this against the latest tree. I have no ARM platform lying aro=
und. So you have to be my test subject ;)=0A=
=0A=
My understanding is that the latest versions of the bluetooth code require =
kernel versions past 3.4, is this correct? Most of the devices I have only=
have the 3.0 kernel available because they're intended to run Android. Or=
is it possible to run it with the 3.4 kernel? In either case, where can I=
find the bluetooth-next tree?=0A=
^ permalink raw reply
* Re: l2cap sockets not properly multiplexed on ARM
From: Marcel Holtmann @ 2013-10-30 20:57 UTC (permalink / raw)
To: Tim Tisdall; +Cc: Alexander Holler, linux-bluetooth@vger.kernel.org
In-Reply-To: <D9B9EB3A112B8F489DFFA00A6D5C0FE203241A33@AD-BR-EX-2.adroot.flemingc.local>
Hi Tim,
>> Can you have a look at Documentation/dynamic-debug-howto.txt and enable the debug section for the bluetooth.ko kernel module. I wonder if we see something fishy in there.
>
> That document looks rather long and confusing... what exactly do I need to type to get the debugging statements working for bluetooth.ko?
This how you enable it based on file name:
echo -n "file l2cap_core.c +pfl" > /sys/kernel/debug/dynamic_debug/control
echo -n "file l2cap_sock.c +pfl" > /sys/kernel/debug/dynamic_debug/control
Or enabling for the whole module like this:
echo -n “module bluetooth +pfl" > /sys/kernel/debug/dynamic_debug/control
>> Do you have the chance to run bluetooth-next tree for testing purposes? I rather debug this against the latest tree. I have no ARM platform lying around. So you have to be my test subject ;)
>
> My understanding is that the latest versions of the bluetooth code require kernel versions past 3.4, is this correct? Most of the devices I have only have the 3.0 kernel available because they're intended to run Android. Or is it possible to run it with the 3.4 kernel? In either case, where can I find the bluetooth-next tree?
You can always run older userspace on newer kernel. At least that is what is suppose to work. So newer kernel should expose the same interface. Unless we are talking like 5 years old userspace. Then we might be in trouble. However running a bluetooth-next instead of 3.0 or 3.4 is certainly possible.
You find the latest kernel code here:
git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git
We need to find the spot where we for some reason send the SKB to the wrong socket. And that only for ARM as it seems. Seriously, this is a strange behavior.
Btw. sending on the socket works just fine? Meaning btmon shows it going out with the correct ACL handle to the right remote LE device?
Regards
Marcel
^ permalink raw reply
* [RFC 0/5] Disconnect complete refactoring
From: Andre Guedes @ 2013-10-30 22:01 UTC (permalink / raw)
To: linux-bluetooth
Hi all,
This patch set does some code refactoring in disconnect complete event handler
and related functions from Mgmt layer.
This refactoring used to be one patch from LE auto connection patch set, but
since Marcel asked me to do more changes, I put all these refactoring patches
in its own patch set.
Regards,
Andre Guedes (5):
Bluetooth: Check address in mgmt_disconnect_failed()
Bluetooth: Add an extra check in mgmt_device_disconnected()
Bluetooth: Remove link type check in hci_disconn_complete_evt()
Bluetooth: Remove unneeded check in hci_disconn_complete_evt()
Bluetooth: Refactor hci_disconn_complete_evt
net/bluetooth/hci_event.c | 61 ++++++++++++++++++++++-------------------------
net/bluetooth/mgmt.c | 15 +++++++++++-
2 files changed, 43 insertions(+), 33 deletions(-)
--
1.8.4
^ permalink raw reply
* [RFC 1/5] Bluetooth: Check address in mgmt_disconnect_failed()
From: Andre Guedes @ 2013-10-30 22:01 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383170504-16602-1-git-send-email-andre.guedes@openbossa.org>
Check the address and address type in mgmt_disconnect_failed() otherwise
we may wrongly fail the MGMT_OP_DISCONNECT command.
Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
---
net/bluetooth/mgmt.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index 22cf547..6a74aa7 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -4613,6 +4613,8 @@ void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 link_type, u8 addr_type, u8 status)
{
+ u8 bdaddr_type = link_to_bdaddr(link_type, addr_type);
+ struct mgmt_cp_disconnect *cp;
struct mgmt_rp_disconnect rp;
struct pending_cmd *cmd;
@@ -4623,8 +4625,16 @@ void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
if (!cmd)
return;
+ cp = cmd->param;
+
+ if (bacmp(bdaddr, &cp->addr.bdaddr))
+ return;
+
+ if (cp->addr.type != bdaddr_type)
+ return;
+
bacpy(&rp.addr.bdaddr, bdaddr);
- rp.addr.type = link_to_bdaddr(link_type, addr_type);
+ rp.addr.type = bdaddr_type;
cmd_complete(cmd->sk, cmd->index, MGMT_OP_DISCONNECT,
mgmt_status(status), &rp, sizeof(rp));
--
1.8.4
^ permalink raw reply related
* [RFC 2/5] Bluetooth: Add an extra check in mgmt_device_disconnected()
From: Andre Guedes @ 2013-10-30 22:01 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383170504-16602-1-git-send-email-andre.guedes@openbossa.org>
This patch adds an extra check in mgmt_device_disconnected() so we only
send the "Device Disconnected" event if it is ACL_LINK or LE_LINK link
type.
Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
---
net/bluetooth/mgmt.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index 6a74aa7..a03ca3c 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -4595,6 +4595,9 @@ void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
struct mgmt_ev_device_disconnected ev;
struct sock *sk = NULL;
+ if (link_type != ACL_LINK && link_type != LE_LINK)
+ return;
+
mgmt_pending_foreach(MGMT_OP_DISCONNECT, hdev, disconnect_rsp, &sk);
bacpy(&ev.addr.bdaddr, bdaddr);
--
1.8.4
^ permalink raw reply related
* [RFC 3/5] Bluetooth: Remove link type check in hci_disconn_complete_evt()
From: Andre Guedes @ 2013-10-30 22:01 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383170504-16602-1-git-send-email-andre.guedes@openbossa.org>
We can safely remove the link type check from hci_disconn_complete_
evt() since this check in not required for mgmt_disconnect_failed()
and mgmt_device_disconnected() does it internally.
Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
---
net/bluetooth/hci_event.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 5935f74..4673cfb 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -1795,8 +1795,7 @@ static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
if (ev->status == 0)
conn->state = BT_CLOSED;
- if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags) &&
- (conn->type == ACL_LINK || conn->type == LE_LINK)) {
+ if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
if (ev->status) {
mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
conn->dst_type, ev->status);
--
1.8.4
^ permalink raw reply related
* [RFC 4/5] Bluetooth: Remove unneeded check in hci_disconn_complete_evt()
From: Andre Guedes @ 2013-10-30 22:01 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383170504-16602-1-git-send-email-andre.guedes@openbossa.org>
According to b644ba336 (patch that introduced HCI_CONN_MGMT_CONNECTED
flag), the HCI_CONN_MGMT_CONNECTED flag tracks when mgmt has been
notified about the connection.
That being said, there is no point in checking this flag in hci_
disconn_complete_evt() since neither mgmt_disconnect_failed() nor
mgmt_device_disconnected() depend on it. Below follows more details:
* mgmt_disconnect_failed() removes pending MGMT_OP_DISCONNECT
commands, it doesn't matter if that connection was notified or not.
* mgmt_device_disconnected() sends the mgmt event only if the link
type is ACL_LINK or LE_LINK. For those connection type, the flag is
always set.
So this patch removes the HCI_CONN_MGMT_CONNECTED check.
Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
---
net/bluetooth/hci_event.c | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 4673cfb..9225a9c 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -1795,16 +1795,14 @@ static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
if (ev->status == 0)
conn->state = BT_CLOSED;
- if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
- if (ev->status) {
- mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
- conn->dst_type, ev->status);
- } else {
- u8 reason = hci_to_mgmt_reason(ev->reason);
+ if (ev->status) {
+ mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
+ conn->dst_type, ev->status);
+ } else {
+ u8 reason = hci_to_mgmt_reason(ev->reason);
- mgmt_device_disconnected(hdev, &conn->dst, conn->type,
- conn->dst_type, reason);
- }
+ mgmt_device_disconnected(hdev, &conn->dst, conn->type,
+ conn->dst_type, reason);
}
if (ev->status == 0) {
--
1.8.4
^ permalink raw reply related
* [RFC 5/5] Bluetooth: Refactor hci_disconn_complete_evt
From: Andre Guedes @ 2013-10-30 22:01 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383170504-16602-1-git-send-email-andre.guedes@openbossa.org>
hci_disconn_complete_evt() logic is more complicated than what it
should be, making it hard to follow and add new features.
So this patch does some code refactoring by handling the error cases
in the beginning of the function and by moving the main flow into the
first level of function scope. No change is done in the event handling
logic itself.
Besides organizing this messy code, this patch makes easier to add
code for handling LE auto connection (which will be added in a further
patch).
Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
---
net/bluetooth/hci_event.c | 56 +++++++++++++++++++++++------------------------
1 file changed, 28 insertions(+), 28 deletions(-)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 9225a9c..981d858 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -1782,7 +1782,9 @@ static u8 hci_to_mgmt_reason(u8 err)
static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
{
struct hci_ev_disconn_complete *ev = (void *) skb->data;
+ u8 reason = hci_to_mgmt_reason(ev->reason);
struct hci_conn *conn;
+ u8 type;
BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
@@ -1792,40 +1794,38 @@ static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
if (!conn)
goto unlock;
- if (ev->status == 0)
- conn->state = BT_CLOSED;
-
if (ev->status) {
mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
- conn->dst_type, ev->status);
- } else {
- u8 reason = hci_to_mgmt_reason(ev->reason);
-
- mgmt_device_disconnected(hdev, &conn->dst, conn->type,
- conn->dst_type, reason);
+ conn->dst_type, ev->status);
+ goto unlock;
}
- if (ev->status == 0) {
- u8 type = conn->type;
+ conn->state = BT_CLOSED;
- if (type == ACL_LINK && conn->flush_key)
- hci_remove_link_key(hdev, &conn->dst);
- hci_proto_disconn_cfm(conn, ev->reason);
- hci_conn_del(conn);
+ mgmt_device_disconnected(hdev, &conn->dst, conn->type,
+ conn->dst_type, reason);
- /* Re-enable advertising if necessary, since it might
- * have been disabled by the connection. From the
- * HCI_LE_Set_Advertise_Enable command description in
- * the core specification (v4.0):
- * "The Controller shall continue advertising until the Host
- * issues an LE_Set_Advertise_Enable command with
- * Advertising_Enable set to 0x00 (Advertising is disabled)
- * or until a connection is created or until the Advertising
- * is timed out due to Directed Advertising."
- */
- if (type == LE_LINK)
- mgmt_reenable_advertising(hdev);
- }
+
+ if (conn->type == ACL_LINK && conn->flush_key)
+ hci_remove_link_key(hdev, &conn->dst);
+
+ type = conn->type;
+
+ hci_proto_disconn_cfm(conn, ev->reason);
+ hci_conn_del(conn);
+
+ /* Re-enable advertising if necessary, since it might
+ * have been disabled by the connection. From the
+ * HCI_LE_Set_Advertise_Enable command description in
+ * the core specification (v4.0):
+ * "The Controller shall continue advertising until the Host
+ * issues an LE_Set_Advertise_Enable command with
+ * Advertising_Enable set to 0x00 (Advertising is disabled)
+ * or until a connection is created or until the Advertising
+ * is timed out due to Directed Advertising."
+ */
+ if (type == LE_LINK)
+ mgmt_reenable_advertising(hdev);
unlock:
hci_dev_unlock(hdev);
--
1.8.4
^ permalink raw reply related
* Re: l2cap sockets not properly multiplexed on ARM
From: Alexander Holler @ 2013-10-30 23:06 UTC (permalink / raw)
To: Marcel Holtmann; +Cc: Tim Tisdall, linux-bluetooth@vger.kernel.org
In-Reply-To: <4A213FF7-48BA-4906-8868-7C3A227EF954@holtmann.org>
Am 30.10.2013 20:40, schrieb Marcel Holtmann:
...
>> So it's perfectly clear: This all works fine on an x86 machine, but is an issue on ARM
...
> Do you have the chance to run bluetooth-next tree for testing purposes?
As Anderson Lizardo already mentioned, maybe first verify that the x86
kernel 3.4 doesn't have the same problem and that it's really a problem
of the ARM kernel. Up to now he didn't say what kernel version he uses
on x86.
Regards.
Alexander Holler
^ permalink raw reply
* [PATCH 00/14] android: Initial support for pairing
From: Szymon Janc @ 2013-10-31 2:55 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
Hi,
Following patches add support for pairing with remote device. Currently
link keys are not yet stored on fs.
This was tested for ssp and legacy pairing with haltest on PC only.
Still need to test those on Android. Some debugs logs from that code
could probably be also improved.
Comments are welcome.
BR
Szymon Janc
Szymon Janc (14):
android: Add missing bonding state definitions to IPC specification
android: Add missing bond state definition to IPC header
android: Add support for handling new link key mgmt event
android: Make load_link_keys function load keys
android: Set default IO capability on daemon start
android: Add support for handling create bond command
android: Add support for handling cancel bond command
android: Add support for handling remove bond command
android: Add support for sending pin code request
android: Add initial support for sending SSP request event
android: Add support for entry variant in SSP request event
android: Add support for notify variant in SSP request event
android: Add support for handling pin reply command
android: Add support for handling SSP reply command
android/adapter.c | 468 +++++++++++++++++++++++++++++++++++++++++++++++-
android/hal-ipc-api.txt | 4 +
android/hal-msg.h | 4 +
3 files changed, 467 insertions(+), 9 deletions(-)
--
1.8.4.rc3
^ permalink raw reply
* [PATCH 01/14] android: Add missing bonding state definitions to IPC specification
From: Szymon Janc @ 2013-10-31 2:55 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1383188154-22905-1-git-send-email-szymon.janc@tieto.com>
---
android/hal-ipc-api.txt | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/android/hal-ipc-api.txt b/android/hal-ipc-api.txt
index e7af8a3..a5d1980 100644
--- a/android/hal-ipc-api.txt
+++ b/android/hal-ipc-api.txt
@@ -370,6 +370,10 @@ Notifications:
Remote address (6 octets)
Bond state (1 octet)
+ Valid bond state values: 0x00 = None
+ 0x01 = Bonding
+ 0x02 = Bonded
+
Opcode 0x89 - ACL State Changed notification
Notification parameters: Status (1 octect)
--
1.8.4.rc3
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox