Linux bluetooth development
 help / color / mirror / Atom feed
* 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: 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

* 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: 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

* 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

* [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

* [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 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

* [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: 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/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

* 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

* 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: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: [PATCH] android/client: Define Android version for host
From: Johan Hedberg @ 2013-10-30 15:05 UTC (permalink / raw)
  To: Jerzy Kasenberg; +Cc: linux-bluetooth
In-Reply-To: <1383144442-16239-1-git-send-email-jerzy.kasenberg@tieto.com>

Hi Jerzy,

On Wed, Oct 30, 2013, Jerzy Kasenberg wrote:
> This patch defines PLATFORM_SDK_VERSION like it is handled in
> Android.mk. This value corresponds to current copy of headers
> from Android committed to bluez.
> ---
>  android/Makefile.am |    3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

Applied. Thanks.

Johan

^ permalink raw reply

* [PATCH] android/client: Define Android version for host
From: Jerzy Kasenberg @ 2013-10-30 14:47 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jerzy Kasenberg

This patch defines PLATFORM_SDK_VERSION like it is handled in
Android.mk. This value corresponds to current copy of headers
from Android committed to bluez.
---
 android/Makefile.am |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/android/Makefile.am b/android/Makefile.am
index 5690e93..de27dcf 100644
--- a/android/Makefile.am
+++ b/android/Makefile.am
@@ -61,7 +61,8 @@ android_haltest_SOURCES = android/client/haltest.c \
 
 android_haltest_LDADD = android/libhal-internal.la
 
-android_haltest_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/android
+android_haltest_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/android \
+			-DPLATFORM_SDK_VERSION=18
 
 android_haltest_LDFLAGS = -pthread
 
-- 
1.7.9.5


^ permalink raw reply related

* Re: [PATCH v2 BlueZ] android/hid: Fix not cleanup properly after disconnect
From: Johan Hedberg @ 2013-10-30 14:42 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: linux-bluetooth
In-Reply-To: <1383143094-21262-1-git-send-email-luiz.dentz@gmail.com>

Hi Luiz,

On Wed, Oct 30, 2013, Luiz Augusto von Dentz wrote:
> If the device is disconnected it should be removed from the list of
> connected devices and free its data.
> ---
> v2: Keep call to g_io_channel_shutdown

Applied. Thanks.

Johan

^ permalink raw reply

* Re: [PATCH] android: Fix compiler flags with Android version
From: Johan Hedberg @ 2013-10-30 14:32 UTC (permalink / raw)
  To: Jerzy Kasenberg; +Cc: linux-bluetooth
In-Reply-To: <1383142958-27510-1-git-send-email-jerzy.kasenberg@tieto.com>

Hi Jerzy,

On Wed, Oct 30, 2013, Jerzy Kasenberg wrote:
> This fixes commit that removed PLATFORM_SDK_VERSION when building
> haltest. Now all android targets get this define.
> ---
>  android/Android.mk |    6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)

Applied. Thanks.

Johan

^ permalink raw reply

* [PATCH v2 BlueZ] android/hid: Fix not cleanup properly after disconnect
From: Luiz Augusto von Dentz @ 2013-10-30 14:24 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

If the device is disconnected it should be removed from the list of
connected devices and free its data.
---
v2: Keep call to g_io_channel_shutdown

 android/hid.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/android/hid.c b/android/hid.c
index d6ca4b9..49e9c52 100644
--- a/android/hid.c
+++ b/android/hid.c
@@ -149,16 +149,11 @@ static gboolean ctrl_watch_cb(GIOChannel *chan, GIOCondition cond,
 	if ((cond & (G_IO_HUP | G_IO_ERR)) && hdev->intr_watch)
 		g_io_channel_shutdown(chan, TRUE, NULL);
 
-	hdev->ctrl_watch = 0;
-
-	if (hdev->ctrl_io) {
-		g_io_channel_unref(hdev->ctrl_io);
-		hdev->ctrl_io = NULL;
-	}
-
 	if (hdev->intr_io && !(cond & G_IO_NVAL))
 		g_io_channel_shutdown(hdev->intr_io, TRUE, NULL);
 
+	hid_device_free(hdev);
+
 	return FALSE;
 }
 
@@ -230,8 +225,7 @@ static void control_connect_cb(GIOChannel *chan, GError *conn_err,
 	return;
 
 failed:
-	g_io_channel_unref(hdev->ctrl_io);
-	hdev->ctrl_io = NULL;
+	hid_device_free(hdev);
 }
 
 static uint8_t bt_hid_connect(struct hal_cmd_hid_connect *cmd, uint16_t len)
-- 
1.8.3.1


^ permalink raw reply related

* [PATCH] android: Fix compiler flags with Android version
From: Jerzy Kasenberg @ 2013-10-30 14:22 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jerzy Kasenberg

This fixes commit that removed PLATFORM_SDK_VERSION when building
haltest. Now all android targets get this define.
---
 android/Android.mk |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/android/Android.mk b/android/Android.mk
index fc1b276..ae6d332 100644
--- a/android/Android.mk
+++ b/android/Android.mk
@@ -7,7 +7,8 @@ BLUEZ_VERSION := $(shell grep ^AC_INIT $(LOCAL_PATH)/../configure.ac | cpp -P -D
 pathmap_INCL += glib:external/bluetooth/glib
 
 # Specify common compiler flags
-BLUEZ_COMMON_CFLAGS := -DVERSION=\"$(BLUEZ_VERSION)\"
+BLUEZ_COMMON_CFLAGS := -DVERSION=\"$(BLUEZ_VERSION)\" \
+	-DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
 
 # Disable warnings enabled by Android but not enabled in autotools build
 BLUEZ_COMMON_CFLAGS += -Wno-pointer-arith
@@ -45,8 +46,7 @@ LOCAL_C_INCLUDES += \
 	$(LOCAL_PATH)/../src \
 	$(LOCAL_PATH)/../lib \
 
-LOCAL_CFLAGS := $(BLUEZ_COMMON_CFLAGS) \
-	-DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
+LOCAL_CFLAGS := $(BLUEZ_COMMON_CFLAGS)
 
 LOCAL_SHARED_LIBRARIES := \
 	libglib \
-- 
1.7.9.5


^ permalink raw reply related

* Re: l2cap sockets not properly multiplexed on ARM
From: Alexander Holler @ 2013-10-30 14:16 UTC (permalink / raw)
  To: Tim Tisdall; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <D9B9EB3A112B8F489DFFA00A6D5C0FE2032408B0@AD-BR-EX-2.adroot.flemingc.local>

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: [PATCH BlueZ] android/hid: Fix not cleanup properly after disconnect
From: Johan Hedberg @ 2013-10-30 14:06 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: linux-bluetooth
In-Reply-To: <1383141026-19961-1-git-send-email-luiz.dentz@gmail.com>

Hi Luiz,

On Wed, Oct 30, 2013, Luiz Augusto von Dentz wrote:
> If the device is disconnected it should be removed from the list of
> connected devices and free its data.
> ---
>  android/hid.c | 13 ++-----------
>  1 file changed, 2 insertions(+), 11 deletions(-)
> 
> diff --git a/android/hid.c b/android/hid.c
> index d6ca4b9..b198713 100644
> --- a/android/hid.c
> +++ b/android/hid.c
> @@ -149,15 +149,7 @@ static gboolean ctrl_watch_cb(GIOChannel *chan, GIOCondition cond,
>  	if ((cond & (G_IO_HUP | G_IO_ERR)) && hdev->intr_watch)
>  		g_io_channel_shutdown(chan, TRUE, NULL);
>  
> -	hdev->ctrl_watch = 0;
> -
> -	if (hdev->ctrl_io) {
> -		g_io_channel_unref(hdev->ctrl_io);
> -		hdev->ctrl_io = NULL;
> -	}
> -
> -	if (hdev->intr_io && !(cond & G_IO_NVAL))
> -		g_io_channel_shutdown(hdev->intr_io, TRUE, NULL);
> +	hid_device_free(hdev);

This change looses the shutdown call so it probably needs to stay in
this function.

Johan

^ permalink raw reply

* [PATCH BlueZ] android/hid: Fix not cleanup properly after disconnect
From: Luiz Augusto von Dentz @ 2013-10-30 13:50 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

If the device is disconnected it should be removed from the list of
connected devices and free its data.
---
 android/hid.c | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/android/hid.c b/android/hid.c
index d6ca4b9..b198713 100644
--- a/android/hid.c
+++ b/android/hid.c
@@ -149,15 +149,7 @@ static gboolean ctrl_watch_cb(GIOChannel *chan, GIOCondition cond,
 	if ((cond & (G_IO_HUP | G_IO_ERR)) && hdev->intr_watch)
 		g_io_channel_shutdown(chan, TRUE, NULL);
 
-	hdev->ctrl_watch = 0;
-
-	if (hdev->ctrl_io) {
-		g_io_channel_unref(hdev->ctrl_io);
-		hdev->ctrl_io = NULL;
-	}
-
-	if (hdev->intr_io && !(cond & G_IO_NVAL))
-		g_io_channel_shutdown(hdev->intr_io, TRUE, NULL);
+	hid_device_free(hdev);
 
 	return FALSE;
 }
@@ -230,8 +222,7 @@ static void control_connect_cb(GIOChannel *chan, GError *conn_err,
 	return;
 
 failed:
-	g_io_channel_unref(hdev->ctrl_io);
-	hdev->ctrl_io = NULL;
+	hid_device_free(hdev);
 }
 
 static uint8_t bt_hid_connect(struct hal_cmd_hid_connect *cmd, uint16_t len)
-- 
1.8.3.1


^ permalink raw reply related

* RE: l2cap sockets not properly multiplexed on ARM
From: Tim Tisdall @ 2013-10-30 13:15 UTC (permalink / raw)
  To: Alexander Holler; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <5270F19A.4030408@ahsoftware.de>

I knew someone would bring that up.  :)  I can't because python only supports sending 2 arguments to bind for that type of socket, and the result is what i want.  I'm using multiple dongles and need to specify which dongle to use for the connection.  However, before I even put that bind statement in there I still had the very same problem, so you can effectively remove that statement and the underlying system will just bind to whichever dongle it pleases and the same problem exists.  Everything works fine on x86 systems and on the ARM architectures the multiplexing goes south.

Also, I'm checking the return codes of everything and there's no errors occurring.  You can even see with the btmon log that the ACL packets are being addressed to the right connection handles but the data is coming out the wrong sockets.  The problem exists on the other end of the socket; the kernel side.

-Tim
________________________________________
From: Alexander Holler [holler@ahsoftware.de]
Sent: October 30, 2013 7:46 AM
To: Tim Tisdall
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: l2cap sockets not properly multiplexed on ARM

Am 30.10.2013 12:24, schrieb Alexander Holler:
> Am 29.10.2013 21:44, schrieb Tim Tisdall:
>
>> L2CAP sockets
>> -------------
>>
>> socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP)
>> bind(bdaddr, 0)  // bind to bluetooth address and PSM 0 (Python
>> doesn't support LE directly,
>>                   // but this is enough for binding to the right device
>
> That looks wrong. Try to bind to ATT_CID (4).
>

And don't forget to check the return code of bind (as well as of
setsockopt and other calls).

Regards,

Alexander Holler


^ permalink raw reply

* [PATCHv4 8/8] android: Use thread-safe helpers
From: Andrei Emeltchenko @ 2013-10-30 12:16 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1383135406-23658-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

Make use of thread-safe helpers.
---
 android/client/textconv.c |   15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/android/client/textconv.c b/android/client/textconv.c
index 1dc6ad0..effd1b3 100644
--- a/android/client/textconv.c
+++ b/android/client/textconv.c
@@ -19,6 +19,8 @@
 #include <stdio.h>
 #include <hardware/bluetooth.h>
 
+#include "../pthread-local.h"
+
 #include "textconv.h"
 
 /*
@@ -227,11 +229,12 @@ const char *enum_one_string(void *v, int i)
 	return (i == 0) && (m[0] != 0) ? m : NULL;
 }
 
+GLOBAL_INIT_THREAD_LOCAL_BUFFER(bdaddr);
 char *bdaddr2str(const bt_bdaddr_t *bd_addr)
 {
-	static char buf[MAX_ADDR_STR_LEN];
+	LOCAL_INIT_THREAD_LOCAL_BUFFER(char*, bdaddr, MAX_ADDR_STR_LEN);
 
-	return bt_bdaddr_t2str(bd_addr, buf);
+	return bt_bdaddr_t2str(bd_addr, bdaddr_tls_buffer);
 }
 
 static char *btuuid2str(const bt_uuid_t *uuid)
@@ -241,12 +244,14 @@ static char *btuuid2str(const bt_uuid_t *uuid)
 	return bt_uuid_t2str(uuid, buf);
 }
 
+GLOBAL_INIT_THREAD_LOCAL_BUFFER(property);
 char *btproperty2str(const bt_property_t *property)
 {
-	static char buf[4096];
 	char *p;
+	LOCAL_INIT_THREAD_LOCAL_BUFFER(char*, property, 4096);
 
-	p = buf + sprintf(buf, "type=%s len=%d val=",
+	p = property_tls_buffer + sprintf(property_tls_buffer,
+					"type=%s len=%d val=",
 					bt_property_type_t2str(property->type),
 					property->len);
 
@@ -334,5 +339,5 @@ char *btproperty2str(const bt_property_t *property)
 		sprintf(p, "%p", property->val);
 	}
 
-	return buf;
+	return property_tls_buffer;
 }
-- 
1.7.10.4


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox