* Re: [RFC v2 4/7] Bluetooth: Enable 6LoWPAN support for BT LE devices
From: Marcel Holtmann @ 2013-10-30 12:11 UTC (permalink / raw)
To: Jukka Rissanen; +Cc: linux-bluetooth@vger.kernel.org development
In-Reply-To: <1383123661-15087-5-git-send-email-jukka.rissanen@linux.intel.com>
Hi Jukka,
> Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
> ---
> net/bluetooth/6lowpan.c | 1128 ++++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 1127 insertions(+), 1 deletion(-)
>
> diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c
> index aff478b..1cba7fd 100644
> --- a/net/bluetooth/6lowpan.c
> +++ b/net/bluetooth/6lowpan.c
> @@ -11,6 +11,20 @@
> GNU General Public License for more details.
> */
>
> +/*
> + * The compression, uncompression and IPv6 packet fragmentation code
> + * is from net/ieee802154/6lowpan.c with these copyrights
> + *
> + * Copyright 2011, Siemens AG
> + * written by Alexander Smirnov <alex.bluesman.smirnov@gmail.com>
> + *
> + * Based on patches from Jon Smirl <jonsmirl@gmail.com>
> + * Copyright (c) 2011 Jon Smirl <jonsmirl@gmail.com>
> + *
> + * Jon's code is based on 6lowpan implementation for Contiki which is:
> + * Copyright (c) 2008, Swedish Institute of Computer Science.
> + */
> +
I really think this should consolidated into either net/core/6lowpan.c or net/6lowpan/6lowpan.c.
Regards
Marcel
^ permalink raw reply
* [PATCHv4 0/8] Improve logging for Android
From: Andrei Emeltchenko @ 2013-10-30 12:16 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383051459-29495-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Logging on Android is really important since we do not have specification
how and in which order hal functions are called, sometimes the only way is
to examine logs or read Java Bluetooth code.
Changes:
* v4: Rebased against latest upstream
* v3: Merged first two patches.
* v2: Added thread-safe helpers for printing properties, bdaddr, etc
after comments that simple printing is not thread-safe. The idea is to
use TLS (thread local storage) like bionic is doing for strerror for
example. More info can be found on manpage for pthread_key_create.
This patch series uses debug functions defined already for haltest and
allows to print very helpful logs on Android target like shown below:
...
hal-bluetooth.c:set_adapter_property() prop: type=BT_PROPERTY_ADAPTER_SCAN_MODE len=4 val=BT_SCAN_MODE_NONE
...
Andrei Emeltchenko (8):
android/haltest: Export print property
android/haltest: Use pointer as parameter for debug
android/hal: Print full property in debug
android/hal: Add extra logs
android/hal: Print adapter state
android/hal: Print adapter property in callback
android: Add thread-safe helpers
android: Use thread-safe helpers
android/client/if-bt.c | 112 +------------------------------------------
android/client/textconv.c | 115 +++++++++++++++++++++++++++++++++++++++++++++
android/client/textconv.h | 3 ++
android/hal-bluetooth.c | 28 ++++++-----
android/pthread-local.h | 58 +++++++++++++++++++++++
5 files changed, 194 insertions(+), 122 deletions(-)
create mode 100644 android/pthread-local.h
--
1.7.10.4
^ permalink raw reply
* [PATCHv4 1/8] android/haltest: Export print property
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>
Export property printing debug function.
---
android/client/if-bt.c | 110 ---------------------------------------------
android/client/textconv.c | 110 +++++++++++++++++++++++++++++++++++++++++++++
android/client/textconv.h | 3 ++
3 files changed, 113 insertions(+), 110 deletions(-)
diff --git a/android/client/if-bt.c b/android/client/if-bt.c
index a20a7c6..e9edec5 100644
--- a/android/client/if-bt.c
+++ b/android/client/if-bt.c
@@ -29,20 +29,6 @@ const bt_interface_t *if_bluetooth;
} \
} while (0)
-static char *bdaddr2str(const bt_bdaddr_t *bd_addr)
-{
- static char buf[MAX_ADDR_STR_LEN];
-
- return bt_bdaddr_t2str(bd_addr, buf);
-}
-
-static char *btuuid2str(const bt_uuid_t *uuid)
-{
- static char buf[MAX_UUID_STR_LEN];
-
- return bt_uuid_t2str(uuid, buf);
-}
-
static bt_scan_mode_t str2btscanmode(const char *str)
{
bt_scan_mode_t v = str2bt_scan_mode_t(str);
@@ -76,102 +62,6 @@ static bt_property_type_t str2btpropertytype(const char *str)
return (bt_property_type_t) atoi(str);
}
-static char *btproperty2str(bt_property_t property)
-{
- static char buf[4096];
- char *p;
-
- p = buf + sprintf(buf, "type=%s len=%d val=",
- bt_property_type_t2str(property.type),
- property.len);
-
- switch (property.type) {
- case BT_PROPERTY_BDNAME:
- case BT_PROPERTY_REMOTE_FRIENDLY_NAME:
- sprintf(p, "%*s", property.len,
- ((bt_bdname_t *) property.val)->name);
- break;
-
- case BT_PROPERTY_BDADDR:
- sprintf(p, "%s", bdaddr2str((bt_bdaddr_t *) property.val));
- break;
-
- case BT_PROPERTY_CLASS_OF_DEVICE:
- sprintf(p, "%06x", *((int *) property.val));
- break;
-
- case BT_PROPERTY_TYPE_OF_DEVICE:
- sprintf(p, "%s", bt_device_type_t2str(
- *((bt_device_type_t *) property.val)));
- break;
-
- case BT_PROPERTY_REMOTE_RSSI:
- sprintf(p, "%d", *((char *) property.val));
- break;
-
- case BT_PROPERTY_ADAPTER_SCAN_MODE:
- sprintf(p, "%s",
- bt_scan_mode_t2str(*((bt_scan_mode_t *) property.val)));
- break;
-
- case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT:
- sprintf(p, "%d", *((int *) property.val));
- break;
-
- case BT_PROPERTY_ADAPTER_BONDED_DEVICES:
- {
- int count = property.len / sizeof(bt_bdaddr_t);
- char *ptr = property.val;
-
- strcat(p, "{");
-
- while (count--) {
- strcat(p, bdaddr2str((bt_bdaddr_t *) ptr));
- if (count)
- strcat(p, ", ");
- ptr += sizeof(bt_bdaddr_t);
- }
-
- strcat(p, "}");
-
- }
- break;
-
- case BT_PROPERTY_UUIDS:
- {
- int count = property.len / sizeof(bt_uuid_t);
- char *ptr = property.val;
-
- strcat(p, "{");
-
- while (count--) {
- strcat(p, btuuid2str((bt_uuid_t *) ptr));
- if (count)
- strcat(p, ", ");
- ptr += sizeof(bt_uuid_t);
- }
-
- strcat(p, "}");
-
- }
- break;
-
- case BT_PROPERTY_SERVICE_RECORD:
- {
- bt_service_record_t *rec = property.val;
-
- sprintf(p, "{%s, %d, %s}", btuuid2str(&rec->uuid),
- rec->channel, rec->name);
- }
- break;
-
- default:
- sprintf(p, "%p", property.val);
- }
-
- return buf;
-}
-
static void dump_properties(int num_properties, bt_property_t *properties)
{
int i;
diff --git a/android/client/textconv.c b/android/client/textconv.c
index 32b1cab..8f27948 100644
--- a/android/client/textconv.c
+++ b/android/client/textconv.c
@@ -226,3 +226,113 @@ const char *enum_one_string(void *v, int i)
return (i == 0) && (m[0] != 0) ? m : NULL;
}
+
+char *bdaddr2str(const bt_bdaddr_t *bd_addr)
+{
+ static char buf[MAX_ADDR_STR_LEN];
+
+ return bt_bdaddr_t2str(bd_addr, buf);
+}
+
+static char *btuuid2str(const bt_uuid_t *uuid)
+{
+ static char buf[MAX_UUID_STR_LEN];
+
+ return bt_uuid_t2str(uuid, buf);
+}
+
+char *btproperty2str(bt_property_t property)
+{
+ static char buf[4096];
+ char *p;
+
+ p = buf + sprintf(buf, "type=%s len=%d val=",
+ bt_property_type_t2str(property.type),
+ property.len);
+
+ switch (property.type) {
+ case BT_PROPERTY_BDNAME:
+ case BT_PROPERTY_REMOTE_FRIENDLY_NAME:
+ sprintf(p, "%*s", property.len,
+ ((bt_bdname_t *) property.val)->name);
+ break;
+
+ case BT_PROPERTY_BDADDR:
+ sprintf(p, "%s", bdaddr2str((bt_bdaddr_t *) property.val));
+ break;
+
+ case BT_PROPERTY_CLASS_OF_DEVICE:
+ sprintf(p, "%06x", *((int *) property.val));
+ break;
+
+ case BT_PROPERTY_TYPE_OF_DEVICE:
+ sprintf(p, "%s", bt_device_type_t2str(
+ *((bt_device_type_t *) property.val)));
+ break;
+
+ case BT_PROPERTY_REMOTE_RSSI:
+ sprintf(p, "%d", *((char *) property.val));
+ break;
+
+ case BT_PROPERTY_ADAPTER_SCAN_MODE:
+ sprintf(p, "%s",
+ bt_scan_mode_t2str(*((bt_scan_mode_t *) property.val)));
+ break;
+
+ case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT:
+ sprintf(p, "%d", *((int *) property.val));
+ break;
+
+ case BT_PROPERTY_ADAPTER_BONDED_DEVICES:
+ {
+ int count = property.len / sizeof(bt_bdaddr_t);
+ char *ptr = property.val;
+
+ strcat(p, "{");
+
+ while (count--) {
+ strcat(p, bdaddr2str((bt_bdaddr_t *) ptr));
+ if (count)
+ strcat(p, ", ");
+ ptr += sizeof(bt_bdaddr_t);
+ }
+
+ strcat(p, "}");
+
+ }
+ break;
+
+ case BT_PROPERTY_UUIDS:
+ {
+ int count = property.len / sizeof(bt_uuid_t);
+ char *ptr = property.val;
+
+ strcat(p, "{");
+
+ while (count--) {
+ strcat(p, btuuid2str((bt_uuid_t *) ptr));
+ if (count)
+ strcat(p, ", ");
+ ptr += sizeof(bt_uuid_t);
+ }
+
+ strcat(p, "}");
+
+ }
+ break;
+
+ case BT_PROPERTY_SERVICE_RECORD:
+ {
+ bt_service_record_t *rec = property.val;
+
+ sprintf(p, "{%s, %d, %s}", btuuid2str(&rec->uuid),
+ rec->channel, rec->name);
+ }
+ break;
+
+ default:
+ sprintf(p, "%p", property.val);
+ }
+
+ return buf;
+}
diff --git a/android/client/textconv.h b/android/client/textconv.h
index 085b141..89b29c6 100644
--- a/android/client/textconv.h
+++ b/android/client/textconv.h
@@ -107,6 +107,9 @@ void str2bt_bdaddr_t(const char *str, bt_bdaddr_t *bd_addr);
char *bt_uuid_t2str(const bt_uuid_t *uuid, char *buf);
void str2bt_uuid_t(const char *str, bt_uuid_t *uuid);
+char *btproperty2str(bt_property_t property);
+char *bdaddr2str(const bt_bdaddr_t *bd_addr);
+
DECINTMAP(bt_status_t);
DECINTMAP(bt_state_t);
DECINTMAP(bt_device_type_t);
--
1.7.10.4
^ permalink raw reply related
* [PATCHv4 2/8] android/haltest: Use pointer as parameter for debug
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>
Pass structure as pointer. This makes it consistent with the rest of
the code and helps to reuse this function in other parts.
---
android/client/if-bt.c | 2 +-
android/client/textconv.c | 36 ++++++++++++++++++------------------
android/client/textconv.h | 2 +-
3 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/android/client/if-bt.c b/android/client/if-bt.c
index e9edec5..cbb828b 100644
--- a/android/client/if-bt.c
+++ b/android/client/if-bt.c
@@ -74,7 +74,7 @@ static void dump_properties(int num_properties, bt_property_t *properties)
bt_property_t prop;
memcpy(&prop, properties + i, sizeof(prop));
- haltest_info("prop: %s\n", btproperty2str(prop));
+ haltest_info("prop: %s\n", btproperty2str(&prop));
}
}
diff --git a/android/client/textconv.c b/android/client/textconv.c
index 8f27948..1dc6ad0 100644
--- a/android/client/textconv.c
+++ b/android/client/textconv.c
@@ -241,52 +241,52 @@ static char *btuuid2str(const bt_uuid_t *uuid)
return bt_uuid_t2str(uuid, buf);
}
-char *btproperty2str(bt_property_t property)
+char *btproperty2str(const bt_property_t *property)
{
static char buf[4096];
char *p;
p = buf + sprintf(buf, "type=%s len=%d val=",
- bt_property_type_t2str(property.type),
- property.len);
+ bt_property_type_t2str(property->type),
+ property->len);
- switch (property.type) {
+ switch (property->type) {
case BT_PROPERTY_BDNAME:
case BT_PROPERTY_REMOTE_FRIENDLY_NAME:
- sprintf(p, "%*s", property.len,
- ((bt_bdname_t *) property.val)->name);
+ sprintf(p, "%*s", property->len,
+ ((bt_bdname_t *) property->val)->name);
break;
case BT_PROPERTY_BDADDR:
- sprintf(p, "%s", bdaddr2str((bt_bdaddr_t *) property.val));
+ sprintf(p, "%s", bdaddr2str((bt_bdaddr_t *) property->val));
break;
case BT_PROPERTY_CLASS_OF_DEVICE:
- sprintf(p, "%06x", *((int *) property.val));
+ sprintf(p, "%06x", *((int *) property->val));
break;
case BT_PROPERTY_TYPE_OF_DEVICE:
sprintf(p, "%s", bt_device_type_t2str(
- *((bt_device_type_t *) property.val)));
+ *((bt_device_type_t *) property->val)));
break;
case BT_PROPERTY_REMOTE_RSSI:
- sprintf(p, "%d", *((char *) property.val));
+ sprintf(p, "%d", *((char *) property->val));
break;
case BT_PROPERTY_ADAPTER_SCAN_MODE:
sprintf(p, "%s",
- bt_scan_mode_t2str(*((bt_scan_mode_t *) property.val)));
+ bt_scan_mode_t2str(*((bt_scan_mode_t *) property->val)));
break;
case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT:
- sprintf(p, "%d", *((int *) property.val));
+ sprintf(p, "%d", *((int *) property->val));
break;
case BT_PROPERTY_ADAPTER_BONDED_DEVICES:
{
- int count = property.len / sizeof(bt_bdaddr_t);
- char *ptr = property.val;
+ int count = property->len / sizeof(bt_bdaddr_t);
+ char *ptr = property->val;
strcat(p, "{");
@@ -304,8 +304,8 @@ char *btproperty2str(bt_property_t property)
case BT_PROPERTY_UUIDS:
{
- int count = property.len / sizeof(bt_uuid_t);
- char *ptr = property.val;
+ int count = property->len / sizeof(bt_uuid_t);
+ char *ptr = property->val;
strcat(p, "{");
@@ -323,7 +323,7 @@ char *btproperty2str(bt_property_t property)
case BT_PROPERTY_SERVICE_RECORD:
{
- bt_service_record_t *rec = property.val;
+ bt_service_record_t *rec = property->val;
sprintf(p, "{%s, %d, %s}", btuuid2str(&rec->uuid),
rec->channel, rec->name);
@@ -331,7 +331,7 @@ char *btproperty2str(bt_property_t property)
break;
default:
- sprintf(p, "%p", property.val);
+ sprintf(p, "%p", property->val);
}
return buf;
diff --git a/android/client/textconv.h b/android/client/textconv.h
index 89b29c6..1c848ef 100644
--- a/android/client/textconv.h
+++ b/android/client/textconv.h
@@ -107,7 +107,7 @@ void str2bt_bdaddr_t(const char *str, bt_bdaddr_t *bd_addr);
char *bt_uuid_t2str(const bt_uuid_t *uuid, char *buf);
void str2bt_uuid_t(const char *str, bt_uuid_t *uuid);
-char *btproperty2str(bt_property_t property);
+char *btproperty2str(const bt_property_t *property);
char *bdaddr2str(const bt_bdaddr_t *bd_addr);
DECINTMAP(bt_status_t);
--
1.7.10.4
^ permalink raw reply related
* [PATCHv4 3/8] android/hal: Print full property in debug
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>
Instead of printing property type print type and value. Use exported
function from hal test tool.
---
android/hal-bluetooth.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index 2237063..89535ed 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -321,7 +321,7 @@ static int set_adapter_property(const bt_property_t *property)
char buf[sizeof(struct hal_cmd_set_adapter_prop) + property->len];
struct hal_cmd_set_adapter_prop *cmd = (void *) buf;
- DBG("prop: %s", bt_property_type_t2str(property->type));
+ DBG("prop: %s", btproperty2str(property));
if (!interface_ready())
return BT_STATUS_NOT_READY;
--
1.7.10.4
^ permalink raw reply related
* [PATCHv4 4/8] android/hal: Add extra logs
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>
Add extra log prints for printing properties and bluetooth addresses.
---
android/hal-bluetooth.c | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index 89535ed..93490f3 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -346,7 +346,7 @@ static int set_adapter_property(const bt_property_t *property)
static int get_remote_device_properties(bt_bdaddr_t *remote_addr)
{
- DBG("");
+ DBG("bdaddr: %s", bdaddr2str(remote_addr));
if (!interface_ready())
return BT_STATUS_NOT_READY;
@@ -357,7 +357,8 @@ static int get_remote_device_properties(bt_bdaddr_t *remote_addr)
static int get_remote_device_property(bt_bdaddr_t *remote_addr,
bt_property_type_t type)
{
- DBG("");
+ DBG("bdaddr: %s prop: %s", bdaddr2str(remote_addr),
+ bt_property_type_t2str(type));
if (!interface_ready())
return BT_STATUS_NOT_READY;
@@ -368,7 +369,8 @@ static int get_remote_device_property(bt_bdaddr_t *remote_addr,
static int set_remote_device_property(bt_bdaddr_t *remote_addr,
const bt_property_t *property)
{
- DBG("");
+ DBG("bdaddr: %s prop: %s", bdaddr2str(remote_addr),
+ btproperty2str(property));
if (!interface_ready())
return BT_STATUS_NOT_READY;
@@ -378,7 +380,7 @@ static int set_remote_device_property(bt_bdaddr_t *remote_addr,
static int get_remote_service_record(bt_bdaddr_t *remote_addr, bt_uuid_t *uuid)
{
- DBG("");
+ DBG("bdaddr: %s", bdaddr2str(remote_addr));
if (!interface_ready())
return BT_STATUS_NOT_READY;
@@ -388,7 +390,7 @@ static int get_remote_service_record(bt_bdaddr_t *remote_addr, bt_uuid_t *uuid)
static int get_remote_services(bt_bdaddr_t *remote_addr)
{
- DBG("");
+ DBG("bdaddr: %s", bdaddr2str(remote_addr));
if (!interface_ready())
return BT_STATUS_NOT_READY;
@@ -424,7 +426,7 @@ static int create_bond(const bt_bdaddr_t *bd_addr)
{
struct hal_cmd_create_bond cmd;
- DBG("");
+ DBG("bdaddr: %s", bdaddr2str(bd_addr));
if (!interface_ready())
return BT_STATUS_NOT_READY;
@@ -439,7 +441,7 @@ static int cancel_bond(const bt_bdaddr_t *bd_addr)
{
struct hal_cmd_cancel_bond cmd;
- DBG("");
+ DBG("bdaddr: %s", bdaddr2str(bd_addr));
if (!interface_ready())
return BT_STATUS_NOT_READY;
@@ -454,7 +456,7 @@ static int remove_bond(const bt_bdaddr_t *bd_addr)
{
struct hal_cmd_remove_bond cmd;
- DBG("");
+ DBG("bdaddr: %s", bdaddr2str(bd_addr));
if (!interface_ready())
return BT_STATUS_NOT_READY;
@@ -470,7 +472,7 @@ static int pin_reply(const bt_bdaddr_t *bd_addr, uint8_t accept,
{
struct hal_cmd_pin_reply cmd;
- DBG("");
+ DBG("bdaddr: %s", bdaddr2str(bd_addr));
if (!interface_ready())
return BT_STATUS_NOT_READY;
@@ -489,7 +491,7 @@ static int ssp_reply(const bt_bdaddr_t *bd_addr, bt_ssp_variant_t variant,
{
struct hal_cmd_ssp_reply cmd;
- DBG("");
+ DBG("bdaddr: %s", bdaddr2str(bd_addr));
if (!interface_ready())
return BT_STATUS_NOT_READY;
--
1.7.10.4
^ permalink raw reply related
* [PATCHv4 5/8] android/hal: Print adapter state
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>
---
android/hal-bluetooth.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index 93490f3..0908f06 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -33,6 +33,8 @@ static void handle_adapter_state_changed(void *buf)
{
struct hal_ev_adapter_state_changed *ev = buf;
+ DBG("state: %s", bt_state_t2str(ev->state));
+
if (bt_hal_cbacks->adapter_state_changed_cb)
bt_hal_cbacks->adapter_state_changed_cb(ev->state);
}
--
1.7.10.4
^ permalink raw reply related
* [PATCHv4 6/8] android/hal: Print adapter property in callback
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>
---
android/hal-bluetooth.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index 0908f06..1d5b04f 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -59,6 +59,8 @@ static void repack_properties(bt_property_t *send_props,
p += sizeof(*hal_prop) + hal_prop->len;
hal_prop = p;
+
+ DBG("prop[%d]: %s", i, btproperty2str(&send_props[i]));
}
}
--
1.7.10.4
^ permalink raw reply related
* [PATCHv4 7/8] android: Add 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>
Add thread safe helpers to make HAL debug printing thread-safe. The code
is inherited from Android bionic and it is used for strerror, strsignal,
etc.
---
android/pthread-local.h | 58 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 58 insertions(+)
create mode 100644 android/pthread-local.h
diff --git a/android/pthread-local.h b/android/pthread-local.h
new file mode 100644
index 0000000..bc3c0b3
--- /dev/null
+++ b/android/pthread-local.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2013 Intel Corp.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <pthread.h>
+#include <stdlib.h>
+
+#define GLOBAL_INIT_THREAD_LOCAL_BUFFER(name) \
+ static pthread_key_t __tls_ ## name ## _key; \
+ static void __tls_ ## name ## _key_destroy(void *buffer) \
+ { \
+ free(buffer); \
+ } \
+ static void __attribute__((constructor)) __tls_ ## name ## _key_init() \
+ { \
+ pthread_key_create(&__tls_ ## name ## _key, \
+ __tls_ ## name ## _key_destroy); \
+ }
+
+/*
+ * Leaves "name_tls_buffer" and "name_tls_buffer_size" defined and initialized.
+ */
+#define LOCAL_INIT_THREAD_LOCAL_BUFFER(type, name, byte_count) \
+ const size_t name ## _tls_buffer_size \
+ __attribute__((unused)) = byte_count; \
+ type name ## _tls_buffer = \
+ (pthread_getspecific(__tls_ ## name ## _key)); \
+ if (name ## _tls_buffer == NULL) { \
+ name ## _tls_buffer = (calloc(1, byte_count)); \
+ pthread_setspecific(__tls_ ## name ## _key, \
+ name ## _tls_buffer); \
+ }
--
1.7.10.4
^ permalink raw reply related
* [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
* 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
* [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: [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
* 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
* [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
* [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
* 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
* 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
* [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] 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
* RE: l2cap sockets not properly multiplexed on ARM
From: Tim Tisdall @ 2013-10-30 15:06 UTC (permalink / raw)
To: Alexander Holler; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <527114A4.5010207@ahsoftware.de>
Yes, confirmed with gatttool. I used 3 terminals with one running btmon and the other 2 gatttool. I started btmon then ran gatttool on one terminal starting the notifications. Then I started another gatttool in another terminal and that new one then showed the results of both devices while the first gatttool stopped displaying any new notifications. You can see in the btmon that the values are coming from 2 different connection handles but the results are all coming through the 2nd gatttool. Here's the outputs using 3 terminals connected to the device (first listing was connected first):
So it's perfectly clear: This all works fine on an x86 machine, but is an issue on ARM
--------------------
root@linaro-server:~# gatttool -i 0 -b 78:C5:E5:6C:47:D3 --char-write-req --handle=0x002b --value=0100 --listen
Characteristic value was written successfully
Notification handle = 0x002a value: e9
Notification handle = 0x002a value: f9
Notification handle = 0x002a value: 06
Notification handle = 0x002a value: db
Notification handle = 0x002a value: e8
Notification handle = 0x002a value: f0
Notification handle = 0x002a value: dd
Notification handle = 0x002a value: fa
Notification handle = 0x002a value: 00
Notification handle = 0x002a value: f7
Notification handle = 0x002a value: 00
--------------------
root@linaro-server:~# gatttool -i 0 -b 78:C5:E5:6C:47:A2 --char-write-req --handle=0x002b --value=0100 --listen
Characteristic value was written successfully
Notification handle = 0x002e value: fa
Notification handle = 0x0032 value: c1
Notification handle = 0x002a value: 0b
Notification handle = 0x002e value: e7
Notification handle = 0x0032 value: da
Notification handle = 0x002a value: 9d
Notification handle = 0x002e value: 80
Notification handle = 0x0032 value: 80
Notification handle = 0x002a value: ff
Notification handle = 0x002e value: fa
Notification handle = 0x0032 value: c8
Notification handle = 0x0032 value: c1
Notification handle = 0x002a value: 43
Notification handle = 0x002a value: f4
Notification handle = 0x002a value: ee
Notification handle = 0x002a value: e0
Notification handle = 0x002a value: f0
Notification handle = 0x002a value: fe
Notification handle = 0x002a value: 04
Notification handle = 0x002a value: fe
Notification handle = 0x002a value: 17
Notification handle = 0x002e value: 35
Notification handle = 0x0032 value: 83
Notification handle = 0x002a value: 07
Notification handle = 0x002e value: f5
Notification handle = 0x0032 value: c1
Notification handle = 0x0032 value: ca
Notification handle = 0x002e value: 11
Notification handle = 0x0032 value: c4
Notification handle = 0x002e value: 06
Notification handle = 0x0032 value: ba
Notification handle = 0x002a value: fc
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: c6
Notification handle = 0x0032 value: c0
Notification handle = 0x002a value: e3
Notification handle = 0x002a value: f7
Notification handle = 0x002a value: b4
Notification handle = 0x002a value: f8
Notification handle = 0x002a value: 03
Notification handle = 0x002a value: f5
Notification handle = 0x002a value: 0d
Notification handle = 0x002a value: 04
Notification handle = 0x002a value: fc
Notification handle = 0x002a value: 02
Notification handle = 0x002a value: ae
Notification handle = 0x002e value: 9f
Notification handle = 0x0032 value: a5
Notification handle = 0x002a value: 14
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: b2
Notification handle = 0x002a value: e8
Notification handle = 0x0032 value: a8
Notification handle = 0x002a value: 08
Notification handle = 0x002e value: 0e
Notification handle = 0x0032 value: c4
Notification handle = 0x002a value: 57
Notification handle = 0x002e value: 7a
Notification handle = 0x002a value: fd
Notification handle = 0x002e value: f9
Notification handle = 0x002a value: 10
Notification handle = 0x002a value: ea
Notification handle = 0x002a value: 22
Notification handle = 0x002a value: ff
Notification handle = 0x002a value: 4d
Notification handle = 0x002e value: df
Notification handle = 0x0032 value: d8
Notification handle = 0x002a value: 03
Notification handle = 0x002e value: ff
Notification handle = 0x0032 value: b6
Notification handle = 0x002a value: 19
Notification handle = 0x002e value: 08
Notification handle = 0x0032 value: f8
Notification handle = 0x002a value: f4
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: ea
Notification handle = 0x002a value: 01
Notification handle = 0x0032 value: ba
Notification handle = 0x0032 value: c2
--------------------
root@linaro-server:~# /usr/src/bluez-4.101/monitor/btmon
Bluetooth monitor ver 4.101
[hci0] 14:59:31.455948 = New Index: 00:02:72:3E:7F:9B (BR/EDR,USB,hci0)
[hci0] 14:59:37.419288 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 d3 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 14:59:37.426536 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 14:59:39.342084 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 40 00 00 00 d3 47 6c e5 c5 78 36 00 00 00 ..@....Gl..x6...
2a 00 05 *..
{hci0} 14:59:39.342742 @ Device Connected: 78:C5:E5:6C:47:D3 (1) flags 0x0000
[hci0] 14:59:39.356628 < ACL Data: handle 64 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
[hci0] 14:59:39.511039 > ACL Data: handle 64 flags 0x02 dlen 16
0c 00 05 00 12 07 08 00 10 00 20 00 00 00 2c 01 .......... ...,.
[hci0] 14:59:39.513756 < ACL Data: handle 64 flags 0x00 dlen 10
06 00 05 00 13 07 02 00 00 00 ..........
[hci0] 14:59:39.513982 < HCI Command: LE Connection Update (0x08|0x0013) plen 14
40 00 10 00 20 00 00 00 2c 01 01 00 01 00 @... ...,.....
[hci0] 14:59:39.515988 > HCI Event: Command Status (0x0f) plen 4
00 01 13 20 ...
[hci0] 14:59:39.578489 > ACL Data: handle 64 flags 0x02 dlen 5
01 00 04 00 13 .....
[hci0] 14:59:39.645900 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e9 .....*..
[hci0] 14:59:39.647117 > HCI Event: Number of Completed Packets (0x13) plen 5
01 40 00 02 00 .@...
[hci0] 14:59:39.781014 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f9 .....*..
[hci0] 14:59:39.915999 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 06 .....*..
[hci0] 14:59:39.983479 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 db .....*..
[hci0] 14:59:40.185988 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e8 .....*..
[hci0] 14:59:40.253477 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f0 .....*..
[hci0] 14:59:40.590870 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 dd .....*..
[hci0] 14:59:40.595926 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fa .....*..
[hci0] 14:59:40.793513 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 14:59:46.452653 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 a2 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 14:59:46.454025 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 14:59:47.507002 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 41 00 00 00 a2 47 6c e5 c5 78 2d 00 00 00 ..A....Gl..x-...
2a 00 05 *..
[hci0] 14:59:47.516637 < ACL Data: handle 65 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
{hci0} 14:59:47.507516 @ Device Connected: 78:C5:E5:6C:47:A2 (1) flags 0x0000
[hci0] 14:59:47.964127 > HCI Event: Disconn Complete (0x05) plen 4
00 41 00 08 .A..
{hci0} 14:59:47.974180 @ Device Disconnected: 78:C5:E5:6C:47:A2 (1)
[hci0] 14:59:54.564158 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 b4 .....*..
[hci0] 14:59:54.698625 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 05 .....*..
[hci0] 14:59:54.766114 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 14:59:54.968591 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 14:59:55.171092 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 14 .....*..
[hci0] 14:59:55.306083 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 02 .....*..
[hci0] 14:59:55.441107 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ee .....*..
[hci0] 14:59:55.508612 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f8 .....*..
[hci0] 14:59:55.576088 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 14:59:55.711106 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 1b .....*..
[hci0] 14:59:55.778607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 14:59:55.913607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0f .....*..
[hci0] 14:59:55.981116 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 14:59:56.183619 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:24.952798 < HCI Command: LE Set Scan Parameters (0x08|0x000b) plen 7
01 10 00 10 00 00 00 .......
[hci0] 15:00:24.954958 > HCI Event: Command Complete (0x0e) plen 4
01 0b 20 00 .. .
[hci0] 15:00:24.959834 < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
01 01 ..
[hci0] 15:00:24.962354 > HCI Event: Command Complete (0x0e) plen 4
01 0c 20 00 .. .
{hci0} 15:00:24.963556 @ Discovering: 0x01 (0)
[hci0] 15:00:25.074841 > HCI Event: LE Meta Event (0x3e) plen 15
02 01 00 00 a2 47 6c e5 c5 78 03 02 01 05 a2 .....Gl..x.....
[hci0] 15:00:25.077321 > HCI Event: LE Meta Event (0x3e) plen 25
02 01 04 00 a2 47 6c e5 c5 78 0d 0c 09 4f 42 50 .....Gl..x...OBP
34 32 35 2d 34 37 41 32 a4 425-47A2.
{hci0} 15:00:25.075571 @ Device Found: 78:C5:E5:6C:47:A2 (1) rssi -94 flags 0x0000
02 01 05 ...
{hci0} 15:00:25.078879 @ Device Found: 78:C5:E5:6C:47:A2 (1) rssi -92 flags 0x0000
0c 09 4f 42 50 34 32 35 2d 34 37 41 32 ..OBP425-47A2
[hci0] 15:00:29.259153 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 15:00:29.394528 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 15:00:30.976520 < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
00 01 ..
[hci0] 15:00:30.982418 > HCI Event: Command Complete (0x0e) plen 4
01 0c 20 00 .. .
{hci0} 15:00:30.983404 @ Discovering: 0x00 (0)
[hci0] 15:00:33.275402 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 a2 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 15:00:33.279443 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 15:00:33.592636 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 41 00 00 00 a2 47 6c e5 c5 78 2d 00 00 00 ..A....Gl..x-...
2a 00 05 *..
{hci0} 15:00:33.593285 @ Device Connected: 78:C5:E5:6C:47:A2 (1) flags 0x0000
[hci0] 15:00:33.606593 < ACL Data: handle 65 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
[hci0] 15:00:33.639078 > ACL Data: handle 65 flags 0x02 dlen 16
0c 00 05 00 12 01 08 00 10 00 20 00 00 00 2c 01 .......... ...,.
[hci0] 15:00:33.645585 < ACL Data: handle 65 flags 0x00 dlen 10
06 00 05 00 13 01 02 00 00 00 ..........
[hci0] 15:00:33.645863 < HCI Command: LE Connection Update (0x08|0x0013) plen 14
41 00 10 00 20 00 00 00 2c 01 01 00 01 00 A... ...,.....
[hci0] 15:00:33.659465 > HCI Event: Command Status (0x0f) plen 4
00 01 13 20 ...
[hci0] 15:00:33.695413 > ACL Data: handle 65 flags 0x02 dlen 5
01 00 04 00 13 .....
[hci0] 15:00:33.751539 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fa ........
[hci0] 15:00:33.752586 > HCI Event: Number of Completed Packets (0x13) plen 5
01 41 00 02 00 .A...
[hci0] 15:00:33.752835 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:34.820181 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0b .....*..
[hci0] 15:00:34.821134 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 e7 ........
[hci0] 15:00:34.821273 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 da .....2..
[hci0] 15:00:34.932695 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 9d .....*..
[hci0] 15:00:34.934604 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 80 ........
[hci0] 15:00:34.934743 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 80 .....2..
[hci0] 15:00:35.045312 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ff .....*..
[hci0] 15:00:35.045539 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fa ........
[hci0] 15:00:35.047351 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c8 .....2..
[hci0] 15:00:35.157812 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:36.279077 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 43 .....*.C
[hci0] 15:00:36.414070 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f4 .....*..
[hci0] 15:00:36.481571 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ee .....*..
[hci0] 15:00:36.616574 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e0 .....*..
[hci0] 15:00:36.684053 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f0 .....*..
[hci0] 15:00:36.886559 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:37.021553 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 15:00:37.494080 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:38.870323 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 17 .....*..
[hci0] 15:00:38.875497 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 35 .......5
[hci0] 15:00:38.875625 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 83 .....2..
[hci0] 15:00:38.926466 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 07 .....*..
[hci0] 15:00:38.927533 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 f5 ........
[hci0] 15:00:38.927672 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:39.151579 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ca .....2..
[hci0] 15:00:39.263964 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 11 ........
[hci0] 15:00:39.265848 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c4 .....2..
[hci0] 15:00:39.265989 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 06 ........
[hci0] 15:00:39.266111 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ba .....2..
[hci0] 15:00:39.320324 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fc .....*..
[hci0] 15:00:39.321448 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:39.321573 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c6 .....2..
[hci0] 15:00:40.022479 > HCI Event: LE Meta Event (0x3e) plen 10
03 00 40 00 1e 00 00 00 2c 01 ..@.....,.
[hci0] 15:00:41.345357 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c0 .....2..
[hci0] 15:00:42.572098 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e3 .....*..
[hci0] 15:00:42.722098 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 15:00:43.096607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 b4 .....*..
[hci0] 15:00:43.171601 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f8 .....*..
[hci0] 15:00:43.284093 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 15:00:44.971623 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f5 .....*..
[hci0] 15:00:45.084106 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0d .....*..
[hci0] 15:00:45.234114 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 15:00:45.271610 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fc .....*..
[hci0] 15:00:45.497127 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 02 .....*..
[hci0] 15:00:46.632779 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ae .....*..
[hci0] 15:00:46.634611 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 9f ........
[hci0] 15:00:46.634738 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 a5 .....2..
[hci0] 15:00:46.745405 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 14 .....*..
[hci0] 15:00:46.747312 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:46.747446 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 b2 .....2..
[hci0] 15:00:46.801502 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e8 .....*..
[hci0] 15:00:46.802618 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 a8 .....2..
[hci0] 15:00:46.970391 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 08 .....*..
[hci0] 15:00:46.973070 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 0e ........
[hci0] 15:00:46.973195 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c4 .....2..
[hci0] 15:00:47.026653 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 57 .....*.W
[hci0] 15:00:47.027765 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 7a .......z
[hci0] 15:00:47.139021 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fd .....*..
[hci0] 15:00:47.140909 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 f9 ........
[hci0] 15:00:50.071664 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 10 .....*..
[hci0] 15:00:50.184154 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ea .....*..
[hci0] 15:00:50.296659 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 22 .....*."
[hci0] 15:00:50.371649 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ff .....*..
[hci0] 15:00:50.795432 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 4d .....*.M
[hci0] 15:00:50.801677 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 df ........
[hci0] 15:00:50.801815 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 d8 .....2..
[hci0] 15:00:50.851667 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 15:00:50.852711 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 ff ........
[hci0] 15:00:50.852851 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 b6 .....2..
[hci0] 15:00:50.907932 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 19 .....*..
[hci0] 15:00:50.909037 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 08 ........
[hci0] 15:00:50.909177 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 f8 .....2..
[hci0] 15:00:51.020415 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f4 .....*..
[hci0] 15:00:51.022325 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:51.022470 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ea .....2..
[hci0] 15:00:51.132937 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 01 .....*..
[hci0] 15:00:51.134846 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ba .....2..
[hci0] 15:00:51.245438 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c2 .....2..
[hci0] 15:00:58.766551 < HCI Command: Disconnect (0x01|0x0006) plen 3
40 00 13 @..
[hci0] 15:00:58.772294 > HCI Event: Command Status (0x0f) plen 4
00 01 06 04 ....
[hci0] 15:00:58.773594 > HCI Event: Disconn Complete (0x05) plen 4
00 40 00 16 .@..
{hci0} 15:00:58.774541 @ Device Disconnected: 78:C5:E5:6C:47:D3 (1)
[hci0] 15:01:02.796566 < HCI Command: Disconnect (0x01|0x0006) plen 3
41 00 13 A..
[hci0] 15:01:02.803369 > HCI Event: Command Status (0x0f) plen 4
00 01 06 04 ....
[hci0] 15:01:03.170637 > HCI Event: Disconn Complete (0x05) plen 4
00 41 00 22 .A."
{hci0} 15:01:03.179209 @ Device Disconnected: 78:C5:E5:6C:47:A2 (1)
________________________________________
From: Alexander Holler [holler@ahsoftware.de]
Sent: October 30, 2013 10:16 AM
To: Tim Tisdall
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: l2cap sockets not properly multiplexed on ARM
Am 30.10.2013 14:15, schrieb Tim Tisdall:
> The problem exists on the other end of the socket; the kernel side.
Do you have tried using gattool to verify that?
Regards,
Alexander Holler
^ permalink raw reply
* RE: l2cap sockets not properly multiplexed on ARM
From: Tim Tisdall @ 2013-10-30 15:10 UTC (permalink / raw)
To: Alexander Holler; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <D9B9EB3A112B8F489DFFA00A6D5C0FE2032419A8@AD-BR-EX-2.adroot.flemingc.local>
Okay, I tried it again with the other notifications on the 2nd device shut off. (same result) I noticed that if I shut off the 2nd gatttool the notification return back to the first running gatttool.
________________________________________
From: linux-bluetooth-owner@vger.kernel.org [linux-bluetooth-owner@vger.kernel.org] on behalf of Tim Tisdall [tim.tisdall@flemingcollege.ca]
Sent: October 30, 2013 11:06 AM
To: Alexander Holler
Cc: linux-bluetooth@vger.kernel.org
Subject: RE: l2cap sockets not properly multiplexed on ARM
Yes, confirmed with gatttool. I used 3 terminals with one running btmon and the other 2 gatttool. I started btmon then ran gatttool on one terminal starting the notifications. Then I started another gatttool in another terminal and that new one then showed the results of both devices while the first gatttool stopped displaying any new notifications. You can see in the btmon that the values are coming from 2 different connection handles but the results are all coming through the 2nd gatttool. Here's the outputs using 3 terminals connected to the device (first listing was connected first):
So it's perfectly clear: This all works fine on an x86 machine, but is an issue on ARM
--------------------
root@linaro-server:~# gatttool -i 0 -b 78:C5:E5:6C:47:D3 --char-write-req --handle=0x002b --value=0100 --listen
Characteristic value was written successfully
Notification handle = 0x002a value: e9
Notification handle = 0x002a value: f9
Notification handle = 0x002a value: 06
Notification handle = 0x002a value: db
Notification handle = 0x002a value: e8
Notification handle = 0x002a value: f0
Notification handle = 0x002a value: dd
Notification handle = 0x002a value: fa
Notification handle = 0x002a value: 00
Notification handle = 0x002a value: f7
Notification handle = 0x002a value: 00
--------------------
root@linaro-server:~# gatttool -i 0 -b 78:C5:E5:6C:47:A2 --char-write-req --handle=0x002b --value=0100 --listen
Characteristic value was written successfully
Notification handle = 0x002e value: fa
Notification handle = 0x0032 value: c1
Notification handle = 0x002a value: 0b
Notification handle = 0x002e value: e7
Notification handle = 0x0032 value: da
Notification handle = 0x002a value: 9d
Notification handle = 0x002e value: 80
Notification handle = 0x0032 value: 80
Notification handle = 0x002a value: ff
Notification handle = 0x002e value: fa
Notification handle = 0x0032 value: c8
Notification handle = 0x0032 value: c1
Notification handle = 0x002a value: 43
Notification handle = 0x002a value: f4
Notification handle = 0x002a value: ee
Notification handle = 0x002a value: e0
Notification handle = 0x002a value: f0
Notification handle = 0x002a value: fe
Notification handle = 0x002a value: 04
Notification handle = 0x002a value: fe
Notification handle = 0x002a value: 17
Notification handle = 0x002e value: 35
Notification handle = 0x0032 value: 83
Notification handle = 0x002a value: 07
Notification handle = 0x002e value: f5
Notification handle = 0x0032 value: c1
Notification handle = 0x0032 value: ca
Notification handle = 0x002e value: 11
Notification handle = 0x0032 value: c4
Notification handle = 0x002e value: 06
Notification handle = 0x0032 value: ba
Notification handle = 0x002a value: fc
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: c6
Notification handle = 0x0032 value: c0
Notification handle = 0x002a value: e3
Notification handle = 0x002a value: f7
Notification handle = 0x002a value: b4
Notification handle = 0x002a value: f8
Notification handle = 0x002a value: 03
Notification handle = 0x002a value: f5
Notification handle = 0x002a value: 0d
Notification handle = 0x002a value: 04
Notification handle = 0x002a value: fc
Notification handle = 0x002a value: 02
Notification handle = 0x002a value: ae
Notification handle = 0x002e value: 9f
Notification handle = 0x0032 value: a5
Notification handle = 0x002a value: 14
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: b2
Notification handle = 0x002a value: e8
Notification handle = 0x0032 value: a8
Notification handle = 0x002a value: 08
Notification handle = 0x002e value: 0e
Notification handle = 0x0032 value: c4
Notification handle = 0x002a value: 57
Notification handle = 0x002e value: 7a
Notification handle = 0x002a value: fd
Notification handle = 0x002e value: f9
Notification handle = 0x002a value: 10
Notification handle = 0x002a value: ea
Notification handle = 0x002a value: 22
Notification handle = 0x002a value: ff
Notification handle = 0x002a value: 4d
Notification handle = 0x002e value: df
Notification handle = 0x0032 value: d8
Notification handle = 0x002a value: 03
Notification handle = 0x002e value: ff
Notification handle = 0x0032 value: b6
Notification handle = 0x002a value: 19
Notification handle = 0x002e value: 08
Notification handle = 0x0032 value: f8
Notification handle = 0x002a value: f4
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: ea
Notification handle = 0x002a value: 01
Notification handle = 0x0032 value: ba
Notification handle = 0x0032 value: c2
--------------------
root@linaro-server:~# /usr/src/bluez-4.101/monitor/btmon
Bluetooth monitor ver 4.101
[hci0] 14:59:31.455948 = New Index: 00:02:72:3E:7F:9B (BR/EDR,USB,hci0)
[hci0] 14:59:37.419288 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 d3 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 14:59:37.426536 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 14:59:39.342084 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 40 00 00 00 d3 47 6c e5 c5 78 36 00 00 00 ..@....Gl..x6...
2a 00 05 *..
{hci0} 14:59:39.342742 @ Device Connected: 78:C5:E5:6C:47:D3 (1) flags 0x0000
[hci0] 14:59:39.356628 < ACL Data: handle 64 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
[hci0] 14:59:39.511039 > ACL Data: handle 64 flags 0x02 dlen 16
0c 00 05 00 12 07 08 00 10 00 20 00 00 00 2c 01 .......... ...,.
[hci0] 14:59:39.513756 < ACL Data: handle 64 flags 0x00 dlen 10
06 00 05 00 13 07 02 00 00 00 ..........
[hci0] 14:59:39.513982 < HCI Command: LE Connection Update (0x08|0x0013) plen 14
40 00 10 00 20 00 00 00 2c 01 01 00 01 00 @... ...,.....
[hci0] 14:59:39.515988 > HCI Event: Command Status (0x0f) plen 4
00 01 13 20 ...
[hci0] 14:59:39.578489 > ACL Data: handle 64 flags 0x02 dlen 5
01 00 04 00 13 .....
[hci0] 14:59:39.645900 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e9 .....*..
[hci0] 14:59:39.647117 > HCI Event: Number of Completed Packets (0x13) plen 5
01 40 00 02 00 .@...
[hci0] 14:59:39.781014 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f9 .....*..
[hci0] 14:59:39.915999 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 06 .....*..
[hci0] 14:59:39.983479 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 db .....*..
[hci0] 14:59:40.185988 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e8 .....*..
[hci0] 14:59:40.253477 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f0 .....*..
[hci0] 14:59:40.590870 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 dd .....*..
[hci0] 14:59:40.595926 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fa .....*..
[hci0] 14:59:40.793513 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 14:59:46.452653 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 a2 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 14:59:46.454025 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 14:59:47.507002 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 41 00 00 00 a2 47 6c e5 c5 78 2d 00 00 00 ..A....Gl..x-...
2a 00 05 *..
[hci0] 14:59:47.516637 < ACL Data: handle 65 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
{hci0} 14:59:47.507516 @ Device Connected: 78:C5:E5:6C:47:A2 (1) flags 0x0000
[hci0] 14:59:47.964127 > HCI Event: Disconn Complete (0x05) plen 4
00 41 00 08 .A..
{hci0} 14:59:47.974180 @ Device Disconnected: 78:C5:E5:6C:47:A2 (1)
[hci0] 14:59:54.564158 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 b4 .....*..
[hci0] 14:59:54.698625 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 05 .....*..
[hci0] 14:59:54.766114 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 14:59:54.968591 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 14:59:55.171092 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 14 .....*..
[hci0] 14:59:55.306083 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 02 .....*..
[hci0] 14:59:55.441107 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ee .....*..
[hci0] 14:59:55.508612 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f8 .....*..
[hci0] 14:59:55.576088 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 14:59:55.711106 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 1b .....*..
[hci0] 14:59:55.778607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 14:59:55.913607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0f .....*..
[hci0] 14:59:55.981116 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 14:59:56.183619 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:24.952798 < HCI Command: LE Set Scan Parameters (0x08|0x000b) plen 7
01 10 00 10 00 00 00 .......
[hci0] 15:00:24.954958 > HCI Event: Command Complete (0x0e) plen 4
01 0b 20 00 .. .
[hci0] 15:00:24.959834 < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
01 01 ..
[hci0] 15:00:24.962354 > HCI Event: Command Complete (0x0e) plen 4
01 0c 20 00 .. .
{hci0} 15:00:24.963556 @ Discovering: 0x01 (0)
[hci0] 15:00:25.074841 > HCI Event: LE Meta Event (0x3e) plen 15
02 01 00 00 a2 47 6c e5 c5 78 03 02 01 05 a2 .....Gl..x.....
[hci0] 15:00:25.077321 > HCI Event: LE Meta Event (0x3e) plen 25
02 01 04 00 a2 47 6c e5 c5 78 0d 0c 09 4f 42 50 .....Gl..x...OBP
34 32 35 2d 34 37 41 32 a4 425-47A2.
{hci0} 15:00:25.075571 @ Device Found: 78:C5:E5:6C:47:A2 (1) rssi -94 flags 0x0000
02 01 05 ...
{hci0} 15:00:25.078879 @ Device Found: 78:C5:E5:6C:47:A2 (1) rssi -92 flags 0x0000
0c 09 4f 42 50 34 32 35 2d 34 37 41 32 ..OBP425-47A2
[hci0] 15:00:29.259153 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 15:00:29.394528 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 15:00:30.976520 < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
00 01 ..
[hci0] 15:00:30.982418 > HCI Event: Command Complete (0x0e) plen 4
01 0c 20 00 .. .
{hci0} 15:00:30.983404 @ Discovering: 0x00 (0)
[hci0] 15:00:33.275402 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 a2 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 15:00:33.279443 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 15:00:33.592636 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 41 00 00 00 a2 47 6c e5 c5 78 2d 00 00 00 ..A....Gl..x-...
2a 00 05 *..
{hci0} 15:00:33.593285 @ Device Connected: 78:C5:E5:6C:47:A2 (1) flags 0x0000
[hci0] 15:00:33.606593 < ACL Data: handle 65 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
[hci0] 15:00:33.639078 > ACL Data: handle 65 flags 0x02 dlen 16
0c 00 05 00 12 01 08 00 10 00 20 00 00 00 2c 01 .......... ...,.
[hci0] 15:00:33.645585 < ACL Data: handle 65 flags 0x00 dlen 10
06 00 05 00 13 01 02 00 00 00 ..........
[hci0] 15:00:33.645863 < HCI Command: LE Connection Update (0x08|0x0013) plen 14
41 00 10 00 20 00 00 00 2c 01 01 00 01 00 A... ...,.....
[hci0] 15:00:33.659465 > HCI Event: Command Status (0x0f) plen 4
00 01 13 20 ...
[hci0] 15:00:33.695413 > ACL Data: handle 65 flags 0x02 dlen 5
01 00 04 00 13 .....
[hci0] 15:00:33.751539 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fa ........
[hci0] 15:00:33.752586 > HCI Event: Number of Completed Packets (0x13) plen 5
01 41 00 02 00 .A...
[hci0] 15:00:33.752835 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:34.820181 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0b .....*..
[hci0] 15:00:34.821134 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 e7 ........
[hci0] 15:00:34.821273 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 da .....2..
[hci0] 15:00:34.932695 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 9d .....*..
[hci0] 15:00:34.934604 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 80 ........
[hci0] 15:00:34.934743 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 80 .....2..
[hci0] 15:00:35.045312 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ff .....*..
[hci0] 15:00:35.045539 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fa ........
[hci0] 15:00:35.047351 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c8 .....2..
[hci0] 15:00:35.157812 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:36.279077 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 43 .....*.C
[hci0] 15:00:36.414070 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f4 .....*..
[hci0] 15:00:36.481571 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ee .....*..
[hci0] 15:00:36.616574 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e0 .....*..
[hci0] 15:00:36.684053 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f0 .....*..
[hci0] 15:00:36.886559 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:37.021553 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 15:00:37.494080 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:38.870323 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 17 .....*..
[hci0] 15:00:38.875497 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 35 .......5
[hci0] 15:00:38.875625 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 83 .....2..
[hci0] 15:00:38.926466 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 07 .....*..
[hci0] 15:00:38.927533 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 f5 ........
[hci0] 15:00:38.927672 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:39.151579 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ca .....2..
[hci0] 15:00:39.263964 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 11 ........
[hci0] 15:00:39.265848 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c4 .....2..
[hci0] 15:00:39.265989 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 06 ........
[hci0] 15:00:39.266111 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ba .....2..
[hci0] 15:00:39.320324 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fc .....*..
[hci0] 15:00:39.321448 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:39.321573 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c6 .....2..
[hci0] 15:00:40.022479 > HCI Event: LE Meta Event (0x3e) plen 10
03 00 40 00 1e 00 00 00 2c 01 ..@.....,.
[hci0] 15:00:41.345357 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c0 .....2..
[hci0] 15:00:42.572098 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e3 .....*..
[hci0] 15:00:42.722098 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 15:00:43.096607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 b4 .....*..
[hci0] 15:00:43.171601 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f8 .....*..
[hci0] 15:00:43.284093 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 15:00:44.971623 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f5 .....*..
[hci0] 15:00:45.084106 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0d .....*..
[hci0] 15:00:45.234114 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 15:00:45.271610 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fc .....*..
[hci0] 15:00:45.497127 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 02 .....*..
[hci0] 15:00:46.632779 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ae .....*..
[hci0] 15:00:46.634611 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 9f ........
[hci0] 15:00:46.634738 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 a5 .....2..
[hci0] 15:00:46.745405 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 14 .....*..
[hci0] 15:00:46.747312 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:46.747446 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 b2 .....2..
[hci0] 15:00:46.801502 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e8 .....*..
[hci0] 15:00:46.802618 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 a8 .....2..
[hci0] 15:00:46.970391 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 08 .....*..
[hci0] 15:00:46.973070 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 0e ........
[hci0] 15:00:46.973195 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c4 .....2..
[hci0] 15:00:47.026653 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 57 .....*.W
[hci0] 15:00:47.027765 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 7a .......z
[hci0] 15:00:47.139021 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fd .....*..
[hci0] 15:00:47.140909 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 f9 ........
[hci0] 15:00:50.071664 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 10 .....*..
[hci0] 15:00:50.184154 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ea .....*..
[hci0] 15:00:50.296659 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 22 .....*."
[hci0] 15:00:50.371649 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ff .....*..
[hci0] 15:00:50.795432 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 4d .....*.M
[hci0] 15:00:50.801677 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 df ........
[hci0] 15:00:50.801815 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 d8 .....2..
[hci0] 15:00:50.851667 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 15:00:50.852711 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 ff ........
[hci0] 15:00:50.852851 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 b6 .....2..
[hci0] 15:00:50.907932 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 19 .....*..
[hci0] 15:00:50.909037 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 08 ........
[hci0] 15:00:50.909177 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 f8 .....2..
[hci0] 15:00:51.020415 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f4 .....*..
[hci0] 15:00:51.022325 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:51.022470 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ea .....2..
[hci0] 15:00:51.132937 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 01 .....*..
[hci0] 15:00:51.134846 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ba .....2..
[hci0] 15:00:51.245438 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c2 .....2..
[hci0] 15:00:58.766551 < HCI Command: Disconnect (0x01|0x0006) plen 3
40 00 13 @..
[hci0] 15:00:58.772294 > HCI Event: Command Status (0x0f) plen 4
00 01 06 04 ....
[hci0] 15:00:58.773594 > HCI Event: Disconn Complete (0x05) plen 4
00 40 00 16 .@..
{hci0} 15:00:58.774541 @ Device Disconnected: 78:C5:E5:6C:47:D3 (1)
[hci0] 15:01:02.796566 < HCI Command: Disconnect (0x01|0x0006) plen 3
41 00 13 A..
[hci0] 15:01:02.803369 > HCI Event: Command Status (0x0f) plen 4
00 01 06 04 ....
[hci0] 15:01:03.170637 > HCI Event: Disconn Complete (0x05) plen 4
00 41 00 22 .A."
{hci0} 15:01:03.179209 @ Device Disconnected: 78:C5:E5:6C:47:A2 (1)
________________________________________
From: Alexander Holler [holler@ahsoftware.de]
Sent: October 30, 2013 10:16 AM
To: Tim Tisdall
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: l2cap sockets not properly multiplexed on ARM
Am 30.10.2013 14:15, schrieb Tim Tisdall:
> The problem exists on the other end of the socket; the kernel side.
Do you have tried using gattool to verify that?
Regards,
Alexander Holler
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* RE: l2cap sockets not properly multiplexed on ARM
From: Tim Tisdall @ 2013-10-30 15:16 UTC (permalink / raw)
To: Alexander Holler; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <D9B9EB3A112B8F489DFFA00A6D5C0FE2032419C0@AD-BR-EX-2.adroot.flemingc.local>
Before someone asks...
root@linaro-server:~# cat /proc/cpuinfo
Processor : ARMv7 Processor rev 2 (v7l)
BogoMIPS : 59.90
Features : swp half thumb fastmult vfp edsp neon vfpv3 tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc08
CPU revision : 2
Hardware : sun4i
Revision : 0000
Serial : 0000000000000000
root@linaro-server:~# lscpu
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
root@linaro-server:~# uname -a
Linux linaro-server 3.4.43 #6 PREEMPT Mon Aug 19 16:40:34 EDT 2013 armv7l armv7l armv7l GNU/Linux
But this isn't the only ARM machine or only kernel I've had this problem on...
________________________________________
From: linux-bluetooth-owner@vger.kernel.org [linux-bluetooth-owner@vger.kernel.org] on behalf of Tim Tisdall [tim.tisdall@flemingcollege.ca]
Sent: October 30, 2013 11:10 AM
To: Alexander Holler
Cc: linux-bluetooth@vger.kernel.org
Subject: RE: l2cap sockets not properly multiplexed on ARM
Okay, I tried it again with the other notifications on the 2nd device shut off. (same result) I noticed that if I shut off the 2nd gatttool the notification return back to the first running gatttool.
________________________________________
From: linux-bluetooth-owner@vger.kernel.org [linux-bluetooth-owner@vger.kernel.org] on behalf of Tim Tisdall [tim.tisdall@flemingcollege.ca]
Sent: October 30, 2013 11:06 AM
To: Alexander Holler
Cc: linux-bluetooth@vger.kernel.org
Subject: RE: l2cap sockets not properly multiplexed on ARM
Yes, confirmed with gatttool. I used 3 terminals with one running btmon and the other 2 gatttool. I started btmon then ran gatttool on one terminal starting the notifications. Then I started another gatttool in another terminal and that new one then showed the results of both devices while the first gatttool stopped displaying any new notifications. You can see in the btmon that the values are coming from 2 different connection handles but the results are all coming through the 2nd gatttool. Here's the outputs using 3 terminals connected to the device (first listing was connected first):
So it's perfectly clear: This all works fine on an x86 machine, but is an issue on ARM
--------------------
root@linaro-server:~# gatttool -i 0 -b 78:C5:E5:6C:47:D3 --char-write-req --handle=0x002b --value=0100 --listen
Characteristic value was written successfully
Notification handle = 0x002a value: e9
Notification handle = 0x002a value: f9
Notification handle = 0x002a value: 06
Notification handle = 0x002a value: db
Notification handle = 0x002a value: e8
Notification handle = 0x002a value: f0
Notification handle = 0x002a value: dd
Notification handle = 0x002a value: fa
Notification handle = 0x002a value: 00
Notification handle = 0x002a value: f7
Notification handle = 0x002a value: 00
--------------------
root@linaro-server:~# gatttool -i 0 -b 78:C5:E5:6C:47:A2 --char-write-req --handle=0x002b --value=0100 --listen
Characteristic value was written successfully
Notification handle = 0x002e value: fa
Notification handle = 0x0032 value: c1
Notification handle = 0x002a value: 0b
Notification handle = 0x002e value: e7
Notification handle = 0x0032 value: da
Notification handle = 0x002a value: 9d
Notification handle = 0x002e value: 80
Notification handle = 0x0032 value: 80
Notification handle = 0x002a value: ff
Notification handle = 0x002e value: fa
Notification handle = 0x0032 value: c8
Notification handle = 0x0032 value: c1
Notification handle = 0x002a value: 43
Notification handle = 0x002a value: f4
Notification handle = 0x002a value: ee
Notification handle = 0x002a value: e0
Notification handle = 0x002a value: f0
Notification handle = 0x002a value: fe
Notification handle = 0x002a value: 04
Notification handle = 0x002a value: fe
Notification handle = 0x002a value: 17
Notification handle = 0x002e value: 35
Notification handle = 0x0032 value: 83
Notification handle = 0x002a value: 07
Notification handle = 0x002e value: f5
Notification handle = 0x0032 value: c1
Notification handle = 0x0032 value: ca
Notification handle = 0x002e value: 11
Notification handle = 0x0032 value: c4
Notification handle = 0x002e value: 06
Notification handle = 0x0032 value: ba
Notification handle = 0x002a value: fc
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: c6
Notification handle = 0x0032 value: c0
Notification handle = 0x002a value: e3
Notification handle = 0x002a value: f7
Notification handle = 0x002a value: b4
Notification handle = 0x002a value: f8
Notification handle = 0x002a value: 03
Notification handle = 0x002a value: f5
Notification handle = 0x002a value: 0d
Notification handle = 0x002a value: 04
Notification handle = 0x002a value: fc
Notification handle = 0x002a value: 02
Notification handle = 0x002a value: ae
Notification handle = 0x002e value: 9f
Notification handle = 0x0032 value: a5
Notification handle = 0x002a value: 14
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: b2
Notification handle = 0x002a value: e8
Notification handle = 0x0032 value: a8
Notification handle = 0x002a value: 08
Notification handle = 0x002e value: 0e
Notification handle = 0x0032 value: c4
Notification handle = 0x002a value: 57
Notification handle = 0x002e value: 7a
Notification handle = 0x002a value: fd
Notification handle = 0x002e value: f9
Notification handle = 0x002a value: 10
Notification handle = 0x002a value: ea
Notification handle = 0x002a value: 22
Notification handle = 0x002a value: ff
Notification handle = 0x002a value: 4d
Notification handle = 0x002e value: df
Notification handle = 0x0032 value: d8
Notification handle = 0x002a value: 03
Notification handle = 0x002e value: ff
Notification handle = 0x0032 value: b6
Notification handle = 0x002a value: 19
Notification handle = 0x002e value: 08
Notification handle = 0x0032 value: f8
Notification handle = 0x002a value: f4
Notification handle = 0x002e value: fb
Notification handle = 0x0032 value: ea
Notification handle = 0x002a value: 01
Notification handle = 0x0032 value: ba
Notification handle = 0x0032 value: c2
--------------------
root@linaro-server:~# /usr/src/bluez-4.101/monitor/btmon
Bluetooth monitor ver 4.101
[hci0] 14:59:31.455948 = New Index: 00:02:72:3E:7F:9B (BR/EDR,USB,hci0)
[hci0] 14:59:37.419288 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 d3 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 14:59:37.426536 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 14:59:39.342084 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 40 00 00 00 d3 47 6c e5 c5 78 36 00 00 00 ..@....Gl..x6...
2a 00 05 *..
{hci0} 14:59:39.342742 @ Device Connected: 78:C5:E5:6C:47:D3 (1) flags 0x0000
[hci0] 14:59:39.356628 < ACL Data: handle 64 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
[hci0] 14:59:39.511039 > ACL Data: handle 64 flags 0x02 dlen 16
0c 00 05 00 12 07 08 00 10 00 20 00 00 00 2c 01 .......... ...,.
[hci0] 14:59:39.513756 < ACL Data: handle 64 flags 0x00 dlen 10
06 00 05 00 13 07 02 00 00 00 ..........
[hci0] 14:59:39.513982 < HCI Command: LE Connection Update (0x08|0x0013) plen 14
40 00 10 00 20 00 00 00 2c 01 01 00 01 00 @... ...,.....
[hci0] 14:59:39.515988 > HCI Event: Command Status (0x0f) plen 4
00 01 13 20 ...
[hci0] 14:59:39.578489 > ACL Data: handle 64 flags 0x02 dlen 5
01 00 04 00 13 .....
[hci0] 14:59:39.645900 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e9 .....*..
[hci0] 14:59:39.647117 > HCI Event: Number of Completed Packets (0x13) plen 5
01 40 00 02 00 .@...
[hci0] 14:59:39.781014 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f9 .....*..
[hci0] 14:59:39.915999 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 06 .....*..
[hci0] 14:59:39.983479 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 db .....*..
[hci0] 14:59:40.185988 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e8 .....*..
[hci0] 14:59:40.253477 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f0 .....*..
[hci0] 14:59:40.590870 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 dd .....*..
[hci0] 14:59:40.595926 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fa .....*..
[hci0] 14:59:40.793513 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 14:59:46.452653 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 a2 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 14:59:46.454025 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 14:59:47.507002 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 41 00 00 00 a2 47 6c e5 c5 78 2d 00 00 00 ..A....Gl..x-...
2a 00 05 *..
[hci0] 14:59:47.516637 < ACL Data: handle 65 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
{hci0} 14:59:47.507516 @ Device Connected: 78:C5:E5:6C:47:A2 (1) flags 0x0000
[hci0] 14:59:47.964127 > HCI Event: Disconn Complete (0x05) plen 4
00 41 00 08 .A..
{hci0} 14:59:47.974180 @ Device Disconnected: 78:C5:E5:6C:47:A2 (1)
[hci0] 14:59:54.564158 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 b4 .....*..
[hci0] 14:59:54.698625 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 05 .....*..
[hci0] 14:59:54.766114 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 14:59:54.968591 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 14:59:55.171092 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 14 .....*..
[hci0] 14:59:55.306083 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 02 .....*..
[hci0] 14:59:55.441107 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ee .....*..
[hci0] 14:59:55.508612 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f8 .....*..
[hci0] 14:59:55.576088 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 14:59:55.711106 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 1b .....*..
[hci0] 14:59:55.778607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 14:59:55.913607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0f .....*..
[hci0] 14:59:55.981116 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 14:59:56.183619 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:24.952798 < HCI Command: LE Set Scan Parameters (0x08|0x000b) plen 7
01 10 00 10 00 00 00 .......
[hci0] 15:00:24.954958 > HCI Event: Command Complete (0x0e) plen 4
01 0b 20 00 .. .
[hci0] 15:00:24.959834 < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
01 01 ..
[hci0] 15:00:24.962354 > HCI Event: Command Complete (0x0e) plen 4
01 0c 20 00 .. .
{hci0} 15:00:24.963556 @ Discovering: 0x01 (0)
[hci0] 15:00:25.074841 > HCI Event: LE Meta Event (0x3e) plen 15
02 01 00 00 a2 47 6c e5 c5 78 03 02 01 05 a2 .....Gl..x.....
[hci0] 15:00:25.077321 > HCI Event: LE Meta Event (0x3e) plen 25
02 01 04 00 a2 47 6c e5 c5 78 0d 0c 09 4f 42 50 .....Gl..x...OBP
34 32 35 2d 34 37 41 32 a4 425-47A2.
{hci0} 15:00:25.075571 @ Device Found: 78:C5:E5:6C:47:A2 (1) rssi -94 flags 0x0000
02 01 05 ...
{hci0} 15:00:25.078879 @ Device Found: 78:C5:E5:6C:47:A2 (1) rssi -92 flags 0x0000
0c 09 4f 42 50 34 32 35 2d 34 37 41 32 ..OBP425-47A2
[hci0] 15:00:29.259153 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 15:00:29.394528 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 00 .....*..
[hci0] 15:00:30.976520 < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
00 01 ..
[hci0] 15:00:30.982418 > HCI Event: Command Complete (0x0e) plen 4
01 0c 20 00 .. .
{hci0} 15:00:30.983404 @ Discovering: 0x00 (0)
[hci0] 15:00:33.275402 < HCI Command: LE Create Connection (0x08|0x000d) plen 25
60 00 30 00 00 00 a2 47 6c e5 c5 78 00 28 00 38 `.0....Gl..x.(.8
00 00 00 2a 00 00 00 00 00 ...*.....
[hci0] 15:00:33.279443 > HCI Event: Command Status (0x0f) plen 4
00 01 0d 20 ...
[hci0] 15:00:33.592636 > HCI Event: LE Meta Event (0x3e) plen 19
01 00 41 00 00 00 a2 47 6c e5 c5 78 2d 00 00 00 ..A....Gl..x-...
2a 00 05 *..
{hci0} 15:00:33.593285 @ Device Connected: 78:C5:E5:6C:47:A2 (1) flags 0x0000
[hci0] 15:00:33.606593 < ACL Data: handle 65 flags 0x00 dlen 9
05 00 04 00 12 2b 00 01 00 .....+...
[hci0] 15:00:33.639078 > ACL Data: handle 65 flags 0x02 dlen 16
0c 00 05 00 12 01 08 00 10 00 20 00 00 00 2c 01 .......... ...,.
[hci0] 15:00:33.645585 < ACL Data: handle 65 flags 0x00 dlen 10
06 00 05 00 13 01 02 00 00 00 ..........
[hci0] 15:00:33.645863 < HCI Command: LE Connection Update (0x08|0x0013) plen 14
41 00 10 00 20 00 00 00 2c 01 01 00 01 00 A... ...,.....
[hci0] 15:00:33.659465 > HCI Event: Command Status (0x0f) plen 4
00 01 13 20 ...
[hci0] 15:00:33.695413 > ACL Data: handle 65 flags 0x02 dlen 5
01 00 04 00 13 .....
[hci0] 15:00:33.751539 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fa ........
[hci0] 15:00:33.752586 > HCI Event: Number of Completed Packets (0x13) plen 5
01 41 00 02 00 .A...
[hci0] 15:00:33.752835 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:34.820181 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0b .....*..
[hci0] 15:00:34.821134 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 e7 ........
[hci0] 15:00:34.821273 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 da .....2..
[hci0] 15:00:34.932695 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 9d .....*..
[hci0] 15:00:34.934604 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 80 ........
[hci0] 15:00:34.934743 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 80 .....2..
[hci0] 15:00:35.045312 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ff .....*..
[hci0] 15:00:35.045539 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fa ........
[hci0] 15:00:35.047351 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c8 .....2..
[hci0] 15:00:35.157812 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:36.279077 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 43 .....*.C
[hci0] 15:00:36.414070 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f4 .....*..
[hci0] 15:00:36.481571 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ee .....*..
[hci0] 15:00:36.616574 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e0 .....*..
[hci0] 15:00:36.684053 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f0 .....*..
[hci0] 15:00:36.886559 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:37.021553 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 15:00:37.494080 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fe .....*..
[hci0] 15:00:38.870323 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 17 .....*..
[hci0] 15:00:38.875497 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 35 .......5
[hci0] 15:00:38.875625 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 83 .....2..
[hci0] 15:00:38.926466 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 07 .....*..
[hci0] 15:00:38.927533 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 f5 ........
[hci0] 15:00:38.927672 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c1 .....2..
[hci0] 15:00:39.151579 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ca .....2..
[hci0] 15:00:39.263964 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 11 ........
[hci0] 15:00:39.265848 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c4 .....2..
[hci0] 15:00:39.265989 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 06 ........
[hci0] 15:00:39.266111 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ba .....2..
[hci0] 15:00:39.320324 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fc .....*..
[hci0] 15:00:39.321448 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:39.321573 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c6 .....2..
[hci0] 15:00:40.022479 > HCI Event: LE Meta Event (0x3e) plen 10
03 00 40 00 1e 00 00 00 2c 01 ..@.....,.
[hci0] 15:00:41.345357 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c0 .....2..
[hci0] 15:00:42.572098 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e3 .....*..
[hci0] 15:00:42.722098 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f7 .....*..
[hci0] 15:00:43.096607 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 b4 .....*..
[hci0] 15:00:43.171601 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f8 .....*..
[hci0] 15:00:43.284093 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 15:00:44.971623 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f5 .....*..
[hci0] 15:00:45.084106 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 0d .....*..
[hci0] 15:00:45.234114 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 04 .....*..
[hci0] 15:00:45.271610 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fc .....*..
[hci0] 15:00:45.497127 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 02 .....*..
[hci0] 15:00:46.632779 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ae .....*..
[hci0] 15:00:46.634611 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 9f ........
[hci0] 15:00:46.634738 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 a5 .....2..
[hci0] 15:00:46.745405 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 14 .....*..
[hci0] 15:00:46.747312 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:46.747446 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 b2 .....2..
[hci0] 15:00:46.801502 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 e8 .....*..
[hci0] 15:00:46.802618 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 a8 .....2..
[hci0] 15:00:46.970391 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 08 .....*..
[hci0] 15:00:46.973070 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 0e ........
[hci0] 15:00:46.973195 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c4 .....2..
[hci0] 15:00:47.026653 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 57 .....*.W
[hci0] 15:00:47.027765 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 7a .......z
[hci0] 15:00:47.139021 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 fd .....*..
[hci0] 15:00:47.140909 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 f9 ........
[hci0] 15:00:50.071664 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 10 .....*..
[hci0] 15:00:50.184154 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ea .....*..
[hci0] 15:00:50.296659 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 22 .....*."
[hci0] 15:00:50.371649 > ACL Data: handle 64 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 ff .....*..
[hci0] 15:00:50.795432 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 4d .....*.M
[hci0] 15:00:50.801677 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 df ........
[hci0] 15:00:50.801815 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 d8 .....2..
[hci0] 15:00:50.851667 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 03 .....*..
[hci0] 15:00:50.852711 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 ff ........
[hci0] 15:00:50.852851 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 b6 .....2..
[hci0] 15:00:50.907932 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 19 .....*..
[hci0] 15:00:50.909037 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 08 ........
[hci0] 15:00:50.909177 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 f8 .....2..
[hci0] 15:00:51.020415 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 f4 .....*..
[hci0] 15:00:51.022325 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2e 00 fb ........
[hci0] 15:00:51.022470 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ea .....2..
[hci0] 15:00:51.132937 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 2a 00 01 .....*..
[hci0] 15:00:51.134846 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 ba .....2..
[hci0] 15:00:51.245438 > ACL Data: handle 65 flags 0x02 dlen 8
04 00 04 00 1b 32 00 c2 .....2..
[hci0] 15:00:58.766551 < HCI Command: Disconnect (0x01|0x0006) plen 3
40 00 13 @..
[hci0] 15:00:58.772294 > HCI Event: Command Status (0x0f) plen 4
00 01 06 04 ....
[hci0] 15:00:58.773594 > HCI Event: Disconn Complete (0x05) plen 4
00 40 00 16 .@..
{hci0} 15:00:58.774541 @ Device Disconnected: 78:C5:E5:6C:47:D3 (1)
[hci0] 15:01:02.796566 < HCI Command: Disconnect (0x01|0x0006) plen 3
41 00 13 A..
[hci0] 15:01:02.803369 > HCI Event: Command Status (0x0f) plen 4
00 01 06 04 ....
[hci0] 15:01:03.170637 > HCI Event: Disconn Complete (0x05) plen 4
00 41 00 22 .A."
{hci0} 15:01:03.179209 @ Device Disconnected: 78:C5:E5:6C:47:A2 (1)
________________________________________
From: Alexander Holler [holler@ahsoftware.de]
Sent: October 30, 2013 10:16 AM
To: Tim Tisdall
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: l2cap sockets not properly multiplexed on ARM
Am 30.10.2013 14:15, schrieb Tim Tisdall:
> The problem exists on the other end of the socket; the kernel side.
Do you have tried using gattool to verify that?
Regards,
Alexander Holler
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* [PATCH 1/2] android/hal: Add initial socket implementation
From: Marcin Kraglak @ 2013-10-30 15:16 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Marcin Kraglak
Added socket api opcodes and structures and its implementation
in hal-sock.c.
---
android/hal-msg.h | 20 ++++++++++++++++++++
android/hal-sock.c | 28 ++++++++++++++++++++++++++--
2 files changed, 46 insertions(+), 2 deletions(-)
diff --git a/android/hal-msg.h b/android/hal-msg.h
index d2a0e2a..7c67948 100644
--- a/android/hal-msg.h
+++ b/android/hal-msg.h
@@ -210,6 +210,26 @@ struct hal_cmd_le_test_mode {
uint8_t data[0];
} __attribute__((packed));
+/* Bluetooth Socket HAL api */
+
+#define HAL_OP_SOCK_LISTEN 0x01
+struct hal_op_sock_listen {
+ uint8_t type;
+ uint8_t name[256];
+ uint8_t uuid[16];
+ uint16_t channel;
+ uint8_t flags;
+} __attribute__((packed));
+
+#define HAL_OP_SOCK_CONNECT 0x02
+struct hal_op_sock_connect {
+ uint8_t bdaddr[6];
+ uint8_t type;
+ uint8_t uuid[16];
+ uint16_t channel;
+ uint8_t flags;
+} __attribute__((packed));
+
#define HAL_OP_HID_CONNECT 0x01
struct hal_cmd_hid_connect {
uint8_t bdaddr[6];
diff --git a/android/hal-sock.c b/android/hal-sock.c
index 7642ee3..131877a 100644
--- a/android/hal-sock.c
+++ b/android/hal-sock.c
@@ -15,18 +15,33 @@
*
*/
+#include <stdbool.h>
+#include <stdint.h>
#include <stdlib.h>
+#include <string.h>
+#include "hal-ipc.h"
#include "hal-log.h"
+#include "hal-msg.h"
#include "hal.h"
static bt_status_t sock_listen_rfcomm(const char *service_name,
const uint8_t *uuid, int chan,
int *sock, int flags)
{
+ struct hal_op_sock_listen cmd;
+
DBG("");
- return BT_STATUS_UNSUPPORTED;
+ cmd.flags = flags;
+ cmd.type = BTSOCK_RFCOMM;
+ cmd.channel = chan;
+ memcpy(cmd.uuid, uuid, sizeof(cmd.uuid));
+ memset(cmd.name, 0, sizeof(cmd.name));
+ memcpy(cmd.name, service_name, strlen(service_name));
+
+ return hal_ipc_cmd(HAL_SERVICE_ID_SOCK, HAL_OP_SOCK_LISTEN,
+ sizeof(cmd), &cmd, NULL, NULL, sock);
}
static bt_status_t sock_listen(btsock_type_t type, const char *service_name,
@@ -58,6 +73,8 @@ static bt_status_t sock_connect(const bt_bdaddr_t *bdaddr, btsock_type_t type,
const uint8_t *uuid, int chan,
int *sock, int flags)
{
+ struct hal_op_sock_connect cmd;
+
if ((!uuid && chan <= 0) || !bdaddr || !sock) {
error("invalid params: bd_addr %p, uuid %p, chan %d, sock %p",
bdaddr, uuid, chan, sock);
@@ -66,7 +83,14 @@ static bt_status_t sock_connect(const bt_bdaddr_t *bdaddr, btsock_type_t type,
DBG("uuid %p chan %d sock %p type %d", uuid, chan, sock, type);
- return BT_STATUS_UNSUPPORTED;
+ cmd.flags = flags;
+ cmd.type = type;
+ cmd.channel = chan;
+ memcpy(cmd.uuid, uuid, sizeof(cmd.uuid));
+ memcpy(cmd.bdaddr, bdaddr, sizeof(cmd.bdaddr));
+
+ return hal_ipc_cmd(HAL_SERVICE_ID_SOCK, HAL_OP_SOCK_CONNECT,
+ sizeof(cmd), &cmd, NULL, NULL, sock);
}
static btsock_interface_t sock_if = {
--
1.8.4.1
^ permalink raw reply related
* [PATCH 2/2] android: Initial implementation of socket interface
From: Marcin Kraglak @ 2013-10-30 15:16 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Marcin Kraglak
In-Reply-To: <1383146193-13240-1-git-send-email-marcin.kraglak@tieto.com>
Add stub implementation of socket interace on daemon side.
---
android/main.c | 4 ++++
android/socket.c | 42 ++++++++++++++++++++++++++++++++++++++++++
android/socket.h | 3 +++
3 files changed, 49 insertions(+)
diff --git a/android/main.c b/android/main.c
index 6ff30a9..2b40621 100644
--- a/android/main.c
+++ b/android/main.c
@@ -213,6 +213,10 @@ static gboolean cmd_watch_cb(GIOChannel *io, GIOCondition cond,
bt_hid_handle_cmd(hal_cmd_io, msg->opcode, msg->payload,
msg->len);
break;
+ case HAL_SERVICE_ID_SOCK:
+ bt_sock_handle_cmd(hal_cmd_io, msg->opcode, msg->payload,
+ msg->len);
+ break;
default:
ipc_send_rsp(hal_cmd_io, msg->service_id, HAL_STATUS_FAILED);
break;
diff --git a/android/socket.c b/android/socket.c
index 22d2acb..39709cd 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -26,8 +26,50 @@
#include "lib/bluetooth.h"
#include "log.h"
+#include "hal-msg.h"
+#include "hal-ipc.h"
+#include "ipc.h"
#include "socket.h"
+
+static int handle_listen(void *buf)
+{
+ return -1;
+}
+
+static int handle_connect(void *buf)
+{
+ return -1;
+}
+
+void bt_sock_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
+ uint16_t len)
+{
+ int fd;
+
+ switch (opcode) {
+ case HAL_OP_SOCK_LISTEN:
+ fd = handle_listen(buf);
+ if (fd < 0)
+ break;
+
+ ipc_send(io, HAL_SERVICE_ID_SOCK, opcode, 0, NULL, fd);
+ return;
+ case HAL_OP_SOCK_CONNECT:
+ fd = handle_connect(buf);
+ if (fd < 0)
+ break;
+
+ ipc_send(io, HAL_SERVICE_ID_SOCK, opcode, 0, NULL, fd);
+ return;
+ default:
+ DBG("Unhandled command, opcode 0x%x", opcode);
+ break;
+ }
+
+ ipc_send_rsp(io, HAL_SERVICE_ID_SOCK, HAL_STATUS_FAILED);
+}
+
bool bt_socket_register(GIOChannel *io, const bdaddr_t *addr)
{
DBG("");
diff --git a/android/socket.h b/android/socket.h
index b13e84c..2b3b940 100644
--- a/android/socket.h
+++ b/android/socket.h
@@ -21,5 +21,8 @@
*
*/
+void bt_sock_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
+ uint16_t len);
+
bool bt_socket_register(GIOChannel *io, const bdaddr_t *addr);
void bt_socket_unregister(void);
--
1.8.4.1
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox