* [PATCHv5 2/7] android/haltest: Use pointer as parameter for debug
From: Andrei Emeltchenko @ 2013-11-01 15:19 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383319159-13060-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 e7d0659..43e8788 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
* [PATCHv5 1/7] android/haltest: Export print property
From: Andrei Emeltchenko @ 2013-11-01 15:19 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383319159-13060-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 | 109 --------------------------------------------
android/client/textconv.c | 110 +++++++++++++++++++++++++++++++++++++++++++++
android/client/textconv.h | 3 ++
3 files changed, 113 insertions(+), 109 deletions(-)
diff --git a/android/client/if-bt.c b/android/client/if-bt.c
index 3d97458..e7d0659 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,101 +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", ((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
* [PATCHv5 0/7] Improve logging for Android
From: Andrei Emeltchenko @ 2013-11-01 15:19 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:
* v5: Rebased against latest upstream and merged some patches, added several logs.
* 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 (7):
android/haltest: Export print property
android/haltest: Use pointer as parameter for debug
android/haltest: Fix print device name
android/hal: Add extra logs to HAL
android: Add thread-safe helpers
android: Use thread-safe helpers
android/daemon: Add logs to trace failed cmd
android/adapter.c | 2 +
android/client/if-bt.c | 111 +------------------------------------------
android/client/textconv.c | 114 +++++++++++++++++++++++++++++++++++++++++++++
android/client/textconv.h | 3 ++
android/hal-bluetooth.c | 34 +++++++++-----
android/pthread-local.h | 58 +++++++++++++++++++++++
6 files changed, 200 insertions(+), 122 deletions(-)
create mode 100644 android/pthread-local.h
--
1.7.10.4
^ permalink raw reply
* Re: [PATCH BlueZ 1/3] android/adapter: Log not implemented properties
From: Johan Hedberg @ 2013-11-01 14:41 UTC (permalink / raw)
To: Luiz Augusto von Dentz; +Cc: linux-bluetooth
In-Reply-To: <1383313965-30182-1-git-send-email-luiz.dentz@gmail.com>
Hi Luiz,
On Fri, Nov 01, 2013, Luiz Augusto von Dentz wrote:
> This makes it easier to stop which functions the HAL is calling.
> ---
> android/adapter.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 80 insertions(+)
All three patches have been applied. Thanks.
Johan
^ permalink raw reply
* Re: [PATCHv1 8/8] android/daemon: Refactor sending acl state
From: Johan Hedberg @ 2013-11-01 14:40 UTC (permalink / raw)
To: Andrei Emeltchenko; +Cc: linux-bluetooth
In-Reply-To: <1383313305-9442-8-git-send-email-Andrei.Emeltchenko.news@gmail.com>
Hi Andrei,
On Fri, Nov 01, 2013, Andrei Emeltchenko wrote:
> Sending ACL state change might be refactored.
> ---
> android/adapter.c | 32 ++++++++++++++++++--------------
> 1 file changed, 18 insertions(+), 14 deletions(-)
Patches 2-7 have been applied. 1/8 didn't apply and this last one is
quite unnecessary since there will never be more than two users and
you're actually adding more lines than you're removing.
Johan
^ permalink raw reply
* RE: l2cap sockets not properly multiplexed on ARM
From: Tim Tisdall @ 2013-11-01 14:11 UTC (permalink / raw)
To: Anderson Lizardo, Marcel Holtmann
Cc: Alexander Holler, linux-bluetooth@vger.kernel.org
In-Reply-To: <D9B9EB3A112B8F489DFFA00A6D5C0FE203241EBF@AD-BR-EX-2.adroot.flemingc.local>
> I was trying to get a 3.4.67 kernel running on one ARM device but unfortu=
nately I can't seem to get the bluetooth dongle to be recognized (something=
to do with the USB code, I suspect). It's probably still an issue, though=
, so I'd really appreciate if you managed to find that patch!=0A=
=0A=
Okay, I found out that I could get my bluetooth dongle working if I used a =
powered hub (the internal USB sockets are working but have no power). So, =
I tried it out and have the same issue with mixed up L2CAP sockets.=0A=
=0A=
-Tim=
^ permalink raw reply
* [PATCH BlueZ 3/3] android/socket: Log not implemented HAL functions
From: Luiz Augusto von Dentz @ 2013-11-01 13:52 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383313965-30182-1-git-send-email-luiz.dentz@gmail.com>
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This makes it easier to spot which functions the HAL is calling.
---
android/socket.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/android/socket.c b/android/socket.c
index 39709cd..b6eed6e 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -34,11 +34,15 @@
static int handle_listen(void *buf)
{
+ DBG("Not implemented");
+
return -1;
}
static int handle_connect(void *buf)
{
+ DBG("Not implemented");
+
return -1;
}
--
1.8.3.1
^ permalink raw reply related
* [PATCH BlueZ 2/3] android/hid: Log not implemented HAL functions
From: Luiz Augusto von Dentz @ 2013-11-01 13:52 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383313965-30182-1-git-send-email-luiz.dentz@gmail.com>
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This makes it easier to spot which functions the HAL is calling.
---
android/hid.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 75 insertions(+)
diff --git a/android/hid.c b/android/hid.c
index 6e6f606..e660552 100644
--- a/android/hid.c
+++ b/android/hid.c
@@ -564,6 +564,60 @@ static uint8_t bt_hid_disconnect(struct hal_cmd_hid_disconnect *cmd,
return HAL_STATUS_SUCCESS;
}
+static uint8_t bt_hid_virtual_unplug(struct hal_cmd_hid_vp *cmd, uint16_t len)
+{
+ DBG("Not Implemented");
+
+ return HAL_STATUS_FAILED;
+}
+
+static uint8_t bt_hid_info(struct hal_cmd_hid_set_info *cmd, uint16_t len)
+{
+ DBG("Not Implemented");
+
+ return HAL_STATUS_FAILED;
+}
+
+static uint8_t bt_hid_get_protocol(struct hal_cmd_hid_get_protocol *cmd,
+ uint16_t len)
+{
+ DBG("Not Implemented");
+
+ return HAL_STATUS_FAILED;
+}
+
+static uint8_t bt_hid_set_protocol(struct hal_cmd_hid_set_protocol *cmd,
+ uint16_t len)
+{
+ DBG("Not Implemented");
+
+ return HAL_STATUS_FAILED;
+}
+
+static uint8_t bt_hid_get_report(struct hal_cmd_hid_get_report *cmd,
+ uint16_t len)
+{
+ DBG("Not Implemented");
+
+ return HAL_STATUS_FAILED;
+}
+
+static uint8_t bt_hid_set_report(struct hal_cmd_hid_set_report *cmd,
+ uint16_t len)
+{
+ DBG("Not Implemented");
+
+ return HAL_STATUS_FAILED;
+}
+
+static uint8_t bt_hid_send_data(struct hal_cmd_hid_send_data *cmd,
+ uint16_t len)
+{
+ DBG("Not Implemented");
+
+ return HAL_STATUS_FAILED;
+}
+
void bt_hid_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf, uint16_t len)
{
uint8_t status = HAL_STATUS_FAILED;
@@ -575,6 +629,27 @@ void bt_hid_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf, uint16_t len)
case HAL_OP_HID_DISCONNECT:
status = bt_hid_disconnect(buf, len);
break;
+ case HAL_OP_HID_VP:
+ status = bt_hid_virtual_unplug(buf, len);
+ break;
+ case HAL_OP_HID_SET_INFO:
+ status = bt_hid_info(buf, len);
+ break;
+ case HAL_OP_HID_GET_PROTOCOL:
+ status = bt_hid_get_protocol(buf, len);
+ break;
+ case HAL_OP_HID_SET_PROTOCOL:
+ status = bt_hid_set_protocol(buf, len);
+ break;
+ case HAL_OP_HID_GET_REPORT:
+ status = bt_hid_get_report(buf, len);
+ break;
+ case HAL_OP_HID_SET_REPORT:
+ status = bt_hid_set_report(buf, len);
+ break;
+ case HAL_OP_HID_SEND_DATA:
+ status = bt_hid_send_data(buf, len);
+ break;
default:
DBG("Unhandled command, opcode 0x%x", opcode);
break;
--
1.8.3.1
^ permalink raw reply related
* [PATCH BlueZ 1/3] android/adapter: Log not implemented properties
From: Luiz Augusto von Dentz @ 2013-11-01 13:52 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This makes it easier to stop which functions the HAL is calling.
---
android/adapter.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 80 insertions(+)
diff --git a/android/adapter.c b/android/adapter.c
index f986020..0bf627f 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -940,6 +940,78 @@ static void send_adapter_address(void)
g_free(ev);
}
+static bool get_name(void)
+{
+ DBG("Not implemented");
+
+ /* TODO: Add implementation */
+
+ return false;
+}
+
+static bool get_uuids(void)
+{
+ DBG("Not implemented");
+
+ /* TODO: Add implementation */
+
+ return false;
+}
+
+static bool get_class(void)
+{
+ DBG("Not implemented");
+
+ /* TODO: Add implementation */
+
+ return false;
+}
+
+static bool get_type(void)
+{
+ DBG("Not implemented");
+
+ /* TODO: Add implementation */
+
+ return false;
+}
+
+static bool get_service(void)
+{
+ DBG("Not implemented");
+
+ /* TODO: Add implementation */
+
+ return false;
+}
+
+static bool get_scan_mode(void)
+{
+ DBG("Not implemented");
+
+ /* TODO: Add implementation */
+
+ return false;
+}
+
+static bool get_devices(void)
+{
+ DBG("Not implemented");
+
+ /* TODO: Add implementation */
+
+ return false;
+}
+
+static bool get_disc_timeout(void)
+{
+ DBG("Not implemented");
+
+ /* TODO: Add implementation */
+
+ return false;
+}
+
static bool get_property(void *buf, uint16_t len)
{
struct hal_cmd_get_adapter_prop *cmd = buf;
@@ -949,13 +1021,21 @@ static bool get_property(void *buf, uint16_t len)
send_adapter_address();
return true;
case HAL_PROP_ADAPTER_NAME:
+ return get_name();
case HAL_PROP_ADAPTER_UUIDS:
+ return get_uuids();
case HAL_PROP_ADAPTER_CLASS:
+ return get_class();
case HAL_PROP_ADAPTER_TYPE:
+ return get_type();
case HAL_PROP_ADAPTER_SERVICE_REC:
+ return get_service();
case HAL_PROP_ADAPTER_SCAN_MODE:
+ return get_scan_mode();
case HAL_PROP_ADAPTER_BONDED_DEVICES:
+ return get_devices();
case HAL_PROP_ADAPTER_DISC_TIMEOUT:
+ return get_disc_timeout();
default:
return false;
}
--
1.8.3.1
^ permalink raw reply related
* [PATCHv1 8/8] android/daemon: Refactor sending acl state
From: Andrei Emeltchenko @ 2013-11-01 13:41 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383313305-9442-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Sending ACL state change might be refactored.
---
android/adapter.c | 32 ++++++++++++++++++--------------
1 file changed, 18 insertions(+), 14 deletions(-)
diff --git a/android/adapter.c b/android/adapter.c
index 1109443..d5b32c3 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -628,11 +628,24 @@ static void mgmt_device_found_event(uint16_t index, uint16_t length,
confirm_name, eir, eir_len);
}
+static void send_acl_state_change(const bdaddr_t *addr, uint8_t status,
+ uint8_t state)
+{
+ struct hal_ev_acl_state_changed hal_ev;
+
+ hal_ev.status = status;
+ hal_ev.state = state;
+ bdaddr2android(addr, hal_ev.bdaddr);
+
+ ipc_send(notification_io, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_EV_ACL_STATE_CHANGED, sizeof(hal_ev), &hal_ev, -1);
+
+}
+
static void mgmt_device_connected_event(uint16_t index, uint16_t length,
const void *param, void *user_data)
{
const struct mgmt_ev_device_connected *ev = param;
- struct hal_ev_acl_state_changed hal_ev;
if (length < sizeof(*ev)) {
error("Too short device connected event (%u bytes)", length);
@@ -643,31 +656,22 @@ static void mgmt_device_connected_event(uint16_t index, uint16_t length,
/* TODO: Check Set bonding state */
- hal_ev.status = HAL_STATUS_SUCCESS;
- hal_ev.state = HAL_ACL_STATE_CONNECTED;
- bdaddr2android(&ev->addr.bdaddr, hal_ev.bdaddr);
-
- ipc_send(notification_io, HAL_SERVICE_ID_BLUETOOTH,
- HAL_EV_ACL_STATE_CHANGED, sizeof(hal_ev), &hal_ev, -1);
+ send_acl_state_change(&ev->addr.bdaddr, HAL_STATUS_SUCCESS,
+ HAL_ACL_STATE_CONNECTED);
}
static void mgmt_device_disconnected_event(uint16_t index, uint16_t length,
const void *param, void *user_data)
{
const struct mgmt_ev_device_disconnected *ev = param;
- struct hal_ev_acl_state_changed hal_ev;
if (length < sizeof(*ev)) {
error("Too short device disconnected event (%u bytes)", length);
return;
}
- hal_ev.status = HAL_STATUS_SUCCESS;
- hal_ev.state = HAL_ACL_STATE_DISCONNECTED;
- bdaddr2android(&ev->addr.bdaddr, hal_ev.bdaddr);
-
- ipc_send(notification_io, HAL_SERVICE_ID_BLUETOOTH,
- HAL_EV_ACL_STATE_CHANGED, sizeof(hal_ev), &hal_ev, -1);
+ send_acl_state_change(&ev->addr.bdaddr, HAL_STATUS_SUCCESS,
+ HAL_ACL_STATE_DISCONNECTED);
}
static void mgmt_connect_failed_event(uint16_t index, uint16_t length,
--
1.7.10.4
^ permalink raw reply related
* [PATCHv1 7/8] android/daemon: Add handler for device disconnected
From: Andrei Emeltchenko @ 2013-11-01 13:41 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383313305-9442-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Send event to callback thread which shall call acl state change callback.
---
android/adapter.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/android/adapter.c b/android/adapter.c
index 299a025..1109443 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -651,6 +651,25 @@ static void mgmt_device_connected_event(uint16_t index, uint16_t length,
HAL_EV_ACL_STATE_CHANGED, sizeof(hal_ev), &hal_ev, -1);
}
+static void mgmt_device_disconnected_event(uint16_t index, uint16_t length,
+ const void *param, void *user_data)
+{
+ const struct mgmt_ev_device_disconnected *ev = param;
+ struct hal_ev_acl_state_changed hal_ev;
+
+ if (length < sizeof(*ev)) {
+ error("Too short device disconnected event (%u bytes)", length);
+ return;
+ }
+
+ hal_ev.status = HAL_STATUS_SUCCESS;
+ hal_ev.state = HAL_ACL_STATE_DISCONNECTED;
+ bdaddr2android(&ev->addr.bdaddr, hal_ev.bdaddr);
+
+ ipc_send(notification_io, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_EV_ACL_STATE_CHANGED, sizeof(hal_ev), &hal_ev, -1);
+}
+
static void mgmt_connect_failed_event(uint16_t index, uint16_t length,
const void *param, void *user_data)
{
@@ -710,6 +729,10 @@ static void register_mgmt_handlers(void)
mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_CONNECTED, adapter->index,
mgmt_device_connected_event, NULL, NULL);
+ mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_DISCONNECTED,
+ adapter->index, mgmt_device_disconnected_event,
+ NULL, NULL);
+
mgmt_register(adapter->mgmt, MGMT_EV_CONNECT_FAILED, adapter->index,
mgmt_connect_failed_event, NULL, NULL);
--
1.7.10.4
^ permalink raw reply related
* [PATCHv1 6/8] android/hal: Add debug prints for every HAL callback
From: Andrei Emeltchenko @ 2013-11-01 13:41 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383313305-9442-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
This allows us to trace callbacks to Java.
---
android/hal-bluetooth.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index 91c5f97..7334d24 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -153,6 +153,8 @@ static void handle_adapter_props_changed(void *buf, uint16_t len)
struct hal_ev_adapter_props_changed *ev = buf;
bt_property_t props[ev->num_props];
+ DBG("");
+
if (!bt_hal_cbacks->adapter_properties_cb)
return;
@@ -168,6 +170,8 @@ static void handle_bond_state_change(void *buf)
struct hal_ev_bond_state_changed *ev = buf;
bt_bdaddr_t *addr = (bt_bdaddr_t *) ev->bdaddr;
+ DBG("state %u", ev->state);
+
if (bt_hal_cbacks->bond_state_changed_cb)
bt_hal_cbacks->bond_state_changed_cb(ev->status, addr,
ev->state);
@@ -180,6 +184,8 @@ static void handle_pin_request(void *buf)
bt_bdaddr_t *addr = (bt_bdaddr_t *) ev->bdaddr;
bt_bdname_t *name = (bt_bdname_t *) ev->name;
+ DBG("");
+
if (bt_hal_cbacks->pin_request_cb)
bt_hal_cbacks->pin_request_cb(addr, name, ev->class_of_dev);
}
@@ -191,6 +197,8 @@ static void handle_ssp_request(void *buf)
bt_bdaddr_t *addr = (bt_bdaddr_t *) ev->bdaddr;
bt_bdname_t *name = (bt_bdname_t *) ev->name;
+ DBG("");
+
if (bt_hal_cbacks->ssp_request_cb)
bt_hal_cbacks->ssp_request_cb(addr, name, ev->class_of_dev,
ev->pairing_variant,
@@ -218,6 +226,8 @@ static void handle_discovery_state_changed(void *buf)
{
struct hal_ev_discovery_state_changed *ev = buf;
+ DBG("");
+
if (bt_hal_cbacks->discovery_state_changed_cb)
bt_hal_cbacks->discovery_state_changed_cb(ev->state);
}
@@ -227,6 +237,8 @@ static void handle_device_found(void *buf, uint16_t len)
struct hal_ev_device_found *ev = buf;
bt_property_t props[ev->num_props];
+ DBG("");
+
if (!bt_hal_cbacks->device_found_cb)
return;
@@ -242,6 +254,8 @@ static void handle_device_state_changed(void *buf, uint16_t len)
struct hal_ev_remote_device_props *ev = buf;
bt_property_t props[ev->num_props];
+ DBG("");
+
if (!bt_hal_cbacks->remote_device_properties_cb)
return;
--
1.7.10.4
^ permalink raw reply related
* [PATCHv1 5/8] android/daemon: Add debug handlers for unhandled mgmt event
From: Andrei Emeltchenko @ 2013-11-01 13:41 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383313305-9442-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Add debug prints to some mgmt events.
---
android/adapter.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/android/adapter.c b/android/adapter.c
index 5a5fa2e..299a025 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -651,6 +651,24 @@ static void mgmt_device_connected_event(uint16_t index, uint16_t length,
HAL_EV_ACL_STATE_CHANGED, sizeof(hal_ev), &hal_ev, -1);
}
+static void mgmt_connect_failed_event(uint16_t index, uint16_t length,
+ const void *param, void *user_data)
+{
+ DBG("");
+}
+
+static void mgmt_auth_failed_event(uint16_t index, uint16_t length,
+ const void *param, void *user_data)
+{
+ DBG("");
+}
+
+static void mgmt_device_unpaired_event(uint16_t index, uint16_t length,
+ const void *param, void *user_data)
+{
+ DBG("");
+}
+
static void register_mgmt_handlers(void)
{
mgmt_register(adapter->mgmt, MGMT_EV_NEW_SETTINGS, adapter->index,
@@ -691,6 +709,15 @@ static void register_mgmt_handlers(void)
mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_CONNECTED, adapter->index,
mgmt_device_connected_event, NULL, NULL);
+
+ mgmt_register(adapter->mgmt, MGMT_EV_CONNECT_FAILED, adapter->index,
+ mgmt_connect_failed_event, NULL, NULL);
+
+ mgmt_register(adapter->mgmt, MGMT_EV_AUTH_FAILED, adapter->index,
+ mgmt_auth_failed_event, NULL, NULL);
+
+ mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_UNPAIRED, adapter->index,
+ mgmt_device_unpaired_event, NULL, NULL);
}
static void load_link_keys_complete(uint8_t status, uint16_t length,
--
1.7.10.4
^ permalink raw reply related
* [PATCHv1 4/8] android/hal: Handle acl_state_changed event
From: Andrei Emeltchenko @ 2013-11-01 13:41 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383313305-9442-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
android/hal-bluetooth.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index a0ee844..91c5f97 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -254,6 +254,18 @@ static void handle_device_state_changed(void *buf, uint16_t len)
device_hal_props_cleanup(props, ev->num_props);
}
+static void handle_acl_state_changed(void *buf)
+{
+ struct hal_ev_acl_state_changed *ev = buf;
+ bt_bdaddr_t *addr = (bt_bdaddr_t *) ev->bdaddr;
+
+ DBG("state %u", ev->state);
+
+ if (bt_hal_cbacks->acl_state_changed_cb)
+ bt_hal_cbacks->acl_state_changed_cb(ev->status, addr,
+ ev->state);
+}
+
/* will be called from notification thread context */
void bt_notify_adapter(uint16_t opcode, void *buf, uint16_t len)
{
@@ -287,6 +299,9 @@ void bt_notify_adapter(uint16_t opcode, void *buf, uint16_t len)
case HAL_EV_SSP_REQUEST:
handle_ssp_request(buf);
break;
+ case HAL_EV_ACL_STATE_CHANGED:
+ handle_acl_state_changed(buf);
+ break;
default:
DBG("Unhandled callback opcode=0x%x", opcode);
break;
--
1.7.10.4
^ permalink raw reply related
* [PATCHv1 3/8] android/daemon: Implement mgmt device connected event
From: Andrei Emeltchenko @ 2013-11-01 13:41 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383313305-9442-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Send HAL_EV_ACL_STATE_CHANGED event to HAL through IPC.
---
android/adapter.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/android/adapter.c b/android/adapter.c
index 5ce0797..5a5fa2e 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -628,6 +628,29 @@ static void mgmt_device_found_event(uint16_t index, uint16_t length,
confirm_name, eir, eir_len);
}
+static void mgmt_device_connected_event(uint16_t index, uint16_t length,
+ const void *param, void *user_data)
+{
+ const struct mgmt_ev_device_connected *ev = param;
+ struct hal_ev_acl_state_changed hal_ev;
+
+ if (length < sizeof(*ev)) {
+ error("Too short device connected event (%u bytes)", length);
+ return;
+ }
+
+ /* TODO: Update device */
+
+ /* TODO: Check Set bonding state */
+
+ hal_ev.status = HAL_STATUS_SUCCESS;
+ hal_ev.state = HAL_ACL_STATE_CONNECTED;
+ bdaddr2android(&ev->addr.bdaddr, hal_ev.bdaddr);
+
+ ipc_send(notification_io, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_EV_ACL_STATE_CHANGED, sizeof(hal_ev), &hal_ev, -1);
+}
+
static void register_mgmt_handlers(void)
{
mgmt_register(adapter->mgmt, MGMT_EV_NEW_SETTINGS, adapter->index,
@@ -665,6 +688,9 @@ static void register_mgmt_handlers(void)
mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_FOUND,
adapter->index, mgmt_device_found_event,
NULL, NULL);
+
+ mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_CONNECTED, adapter->index,
+ mgmt_device_connected_event, NULL, NULL);
}
static void load_link_keys_complete(uint8_t status, uint16_t length,
--
1.7.10.4
^ permalink raw reply related
* [PATCHv1 2/8] android/ipc: Update HAL IPC header
From: Andrei Emeltchenko @ 2013-11-01 13:41 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383313305-9442-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Add ACL states to the header.
---
android/hal-msg.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/android/hal-msg.h b/android/hal-msg.h
index 8a344d8..1d256f2 100644
--- a/android/hal-msg.h
+++ b/android/hal-msg.h
@@ -405,6 +405,9 @@ struct hal_ev_bond_state_changed {
uint8_t state;
} __attribute__((packed));
+#define HAL_ACL_STATE_CONNECTED 0x00
+#define HAL_ACL_STATE_DISCONNECTED 0x01
+
#define HAL_EV_ACL_STATE_CHANGED 0x89
struct hal_ev_acl_state_changed {
uint8_t status;
--
1.7.10.4
^ permalink raw reply related
* [PATCHv1 1/8] android/haltest: Fix print device name
From: Andrei Emeltchenko @ 2013-11-01 13:41 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
android/client/textconv.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/android/client/textconv.c b/android/client/textconv.c
index effd1b3..8e6bdb9 100644
--- a/android/client/textconv.c
+++ b/android/client/textconv.c
@@ -258,8 +258,7 @@ char *btproperty2str(const bt_property_t *property)
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", ((bt_bdname_t *) property->val)->name);
break;
case BT_PROPERTY_BDADDR:
--
1.7.10.4
^ permalink raw reply related
* RE: l2cap sockets not properly multiplexed on ARM
From: Tim Tisdall @ 2013-11-01 13:35 UTC (permalink / raw)
To: Anderson Lizardo, Marcel Holtmann
Cc: Alexander Holler, linux-bluetooth@vger.kernel.org
In-Reply-To: <CAJdJm_O1-=-cEKnuSmT026hr1JOkwiRZfC3Q_qagTWOna5JN7w@mail.gmail.com>
>> I actually need to know if bluetooth-next tree still has this issue. Tha=
t is first and foremost the one thing that needs to be checked.=0A=
=0A=
> I asked Tim to mention the kernel version on x86 vs. the version on=0A=
> ARM, because I vaguely remember this same issue being reported last=0A=
> year (or even 2011) and being fixed (If I find the patch, I will let=0A=
> you know). As Tim mentions later on, on x86 the issue does not happen=0A=
> on 3.8, but it is present on 3.2 (and I suspect it will also be=0A=
> present on 3.4 on x86 as well).=0A=
=0A=
I was going to say yesterday (until my computer suddenly died due to overhe=
ating): Can't it be assumed that it's okay in bluetooth-next since the iss=
ue seems to be gone with kernels > 3.4?=0A=
=0A=
I was trying to get a 3.4.67 kernel running on one ARM device but unfortuna=
tely I can't seem to get the bluetooth dongle to be recognized (something t=
o do with the USB code, I suspect). It's probably still an issue, though, =
so I'd really appreciate if you managed to find that patch!=0A=
=0A=
-Tim=0A=
=0A=
^ permalink raw reply
* Re: BUG in rfcomm_sock_getsockopt+0x128/0x200
From: Marcel Holtmann @ 2013-11-01 13:30 UTC (permalink / raw)
To: Fabio Rossi
Cc: linux-wireless@vger.kernel.org Wireless,
linux-bluetooth@vger.kernel.org development
In-Reply-To: <376684294.1810371383311879389.JavaMail.defaultUser@defaultHost>
Hi Fabio,
> I'm using the latest wireless-testing.git and I have found a problem, I get the
> following kernel trace:
>
> BUG: unable to handle kernel paging request at
> 00000009dd50350a
> IP: [<ffffffff815b6768>]
> rfcomm_sock_getsockopt+0x128/0x200
> PGD
> 0
> Oops: 0000 [#1] SMP
> Modules linked in: vboxpci(O) vboxnetadp(O) vboxnetflt(O) vboxdrv(O) fglrx(PO)
> ath5k ath mac80211 cfg80211
> CPU: 2 PID: 1475 Comm: bluetoothd Tainted: P O 3.12.0-rc5-wl #4
> Hardware name: System manufacturer System Product Name/P6T DELUXE V2, BIOS
> 1202 12/22/2010
> task: ffff88032e9ce360 ti: ffff880330654000 task.ti: ffff880330654000
> RIP: 0010:[<ffffffff815b6768>] [<ffffffff815b6768>]
> rfcomm_sock_getsockopt+0x128/0x200
> RSP: 0018:ffff880330655ed8 EFLAGS: 00010246
> RAX: 00000009dd503502 RBX: 0000000000000003 RCX: 00007fff7b30e298
> RDX: 0000000000000003 RSI: 0000000000000012 RDI: ffff8800bad88f00
> RBP: ffff880330655f28 R08: 00007fff7b30e29c R09: ffff8803306734d8
> R10: 00007fff7b30e298 R11: 0000000000000202 R12: ffff8800ba83ec00
> R13: 00007fff7b30e298 R14: 0000000000000003 R15: 00007fff7b30e29c
> FS: 00007f31c1d9d700(0000) GS:ffff88033fc80000(0000) knlGS:0000000000000000
> CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 00000009dd50350a CR3: 000000033048a000 CR4: 00000000000007e0
> Stack:
> ffff880330655f28 ffffffff815b5e2f ffff880330655f18 0002ffff81107bb6
> 0000000600000000 ffff8800bad88f00 0000000000000012 00007fff7b30e298
> 0000000000000003 00007fff7b30e29c ffff880330655f78 ffffffff814c6260
> Call Trace:
> [<ffffffff815b5e2f>] ? rfcomm_sock_setsockopt+0x5f/0x190
> [<ffffffff814c6260>] SyS_getsockopt+0x60/0xb0
> [<ffffffff815e5ba2>] system_call_fastpath+0x16/0x1b
> Code: 02 00 00 00 0f 47 d0 4c 89 ef e8 94 f0 cc ff 83 f8 01 19 c9 f7 d1 83 e1
> f2 e9 4b ff ff ff 0f 1f 44 00 00 49 8b 84 24 70 02 00 00 <4c> 8b 70 08 4c 89 c0
> e8 4c f6 cc ff 85 c0 49 89 d7 b9 f2 ff ff
> RIP [<ffffffff815b6768>] rfcomm_sock_getsockopt+0x128/0x200
> RSP <ffff880330655ed8>
> CR2: 00000009dd50350a
> ---[ end trace 6e62d73375e99d69 ]—
what socket option is your client program setting? Do you happen to know that. Would make it a lot easier to track this down.
Regards
Marcel
^ permalink raw reply
* Re: [PATCH BlueZ 1/4] android/hid: Rename hdev vars to dev
From: Johan Hedberg @ 2013-11-01 13:24 UTC (permalink / raw)
To: Luiz Augusto von Dentz; +Cc: linux-bluetooth
In-Reply-To: <1383311321-28429-1-git-send-email-luiz.dentz@gmail.com>
Hi Luiz,
On Fri, Nov 01, 2013, Luiz Augusto von Dentz wrote:
> From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
>
> ---
> android/hid.c | 248 +++++++++++++++++++++++++++++-----------------------------
> 1 file changed, 124 insertions(+), 124 deletions(-)
All four patches have been applied. Thanks.
Johan
^ permalink raw reply
* BUG in rfcomm_sock_getsockopt+0x128/0x200
From: Fabio Rossi @ 2013-11-01 13:17 UTC (permalink / raw)
To: linux-wireless, linux-bluetooth
I'm using the latest wireless-testing.git and I have found a problem, I get the
following kernel trace:
BUG: unable to handle kernel paging request at
00000009dd50350a
IP: [<ffffffff815b6768>]
rfcomm_sock_getsockopt+0x128/0x200
PGD
0
Oops: 0000 [#1] SMP
Modules linked in: vboxpci(O) vboxnetadp(O) vboxnetflt(O) vboxdrv(O) fglrx(PO)
ath5k ath mac80211 cfg80211
CPU: 2 PID: 1475 Comm: bluetoothd Tainted: P O 3.12.0-rc5-wl #4
Hardware name: System manufacturer System Product Name/P6T DELUXE V2, BIOS
1202 12/22/2010
task: ffff88032e9ce360 ti: ffff880330654000 task.ti: ffff880330654000
RIP: 0010:[<ffffffff815b6768>] [<ffffffff815b6768>]
rfcomm_sock_getsockopt+0x128/0x200
RSP: 0018:ffff880330655ed8 EFLAGS: 00010246
RAX: 00000009dd503502 RBX: 0000000000000003 RCX: 00007fff7b30e298
RDX: 0000000000000003 RSI: 0000000000000012 RDI: ffff8800bad88f00
RBP: ffff880330655f28 R08: 00007fff7b30e29c R09: ffff8803306734d8
R10: 00007fff7b30e298 R11: 0000000000000202 R12: ffff8800ba83ec00
R13: 00007fff7b30e298 R14: 0000000000000003 R15: 00007fff7b30e29c
FS: 00007f31c1d9d700(0000) GS:ffff88033fc80000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00000009dd50350a CR3: 000000033048a000 CR4: 00000000000007e0
Stack:
ffff880330655f28 ffffffff815b5e2f ffff880330655f18 0002ffff81107bb6
0000000600000000 ffff8800bad88f00 0000000000000012 00007fff7b30e298
0000000000000003 00007fff7b30e29c ffff880330655f78 ffffffff814c6260
Call Trace:
[<ffffffff815b5e2f>] ? rfcomm_sock_setsockopt+0x5f/0x190
[<ffffffff814c6260>] SyS_getsockopt+0x60/0xb0
[<ffffffff815e5ba2>] system_call_fastpath+0x16/0x1b
Code: 02 00 00 00 0f 47 d0 4c 89 ef e8 94 f0 cc ff 83 f8 01 19 c9 f7 d1 83 e1
f2 e9 4b ff ff ff 0f 1f 44 00 00 49 8b 84 24 70 02 00 00 <4c> 8b 70 08 4c 89 c0
e8 4c f6 cc ff 85 c0 49 89 d7 b9 f2 ff ff
RIP [<ffffffff815b6768>] rfcomm_sock_getsockopt+0x128/0x200
RSP <ffff880330655ed8>
CR2: 00000009dd50350a
---[ end trace 6e62d73375e99d69 ]---
After bisecting the problem I found the following bad commit:
commit 94a86df01082557e2de45865e538d7fb6c46231c
Author: Marcel Holtmann <marcel@holtmann.org>
Date: Sun Oct 13 10:34:02 2013 -0700
Bluetooth: Store RFCOMM address information in its own socket structure
The address information of RFCOMM sockets should be stored in its
own socket structure. Trying to generalize them is not helpful since
different transports have different address types.
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Fabio
^ permalink raw reply
* Re: [PATCH] android/client: Fix pin reply call when pin argument missing in cmd
From: Johan Hedberg @ 2013-11-01 13:11 UTC (permalink / raw)
To: Ravi kumar Veeramally; +Cc: linux-bluetooth
In-Reply-To: <1383308405-17782-1-git-send-email-ravikumar.veeramally@linux.intel.com>
Hi Ravi,
On Fri, Nov 01, 2013, Ravi kumar Veeramally wrote:
> If condition checks number of arguments properly but still executes
> EXEC command. It should display error message and return.
> ---
> android/client/if-bt.c | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/android/client/if-bt.c b/android/client/if-bt.c
> index 3d97458..2c3cc4a 100644
> --- a/android/client/if-bt.c
> +++ b/android/client/if-bt.c
> @@ -719,12 +719,15 @@ static void pin_reply_p(int argc, const char **argv)
> RETURN_IF_NULL(if_bluetooth);
> VERIFY_ADDR_ARG(2, &addr);
>
> - if (argc > 3) {
> - accept = 1;
> - pin_len = strlen(argv[3]);
> - memcpy(pin.pin, argv[3], pin_len);
> + if (argc != 4) {
> + haltest_error("Usage <address> <pin>\n");
> + return;
> }
>
> + accept = 1;
> + pin_len = strlen(argv[3]);
> + memcpy(pin.pin, argv[3], pin_len);
> +
> EXEC(if_bluetooth->pin_reply, &addr, accept, pin_len, &pin);
It seems to me that the original code might have been trying to do (if
it hadn't been broken like it now is) a negative pin reply in the case
that no parameter was given. At least I don't see any other code trying
to call if_bluetooth->pin_reply with accept=1 in haltest. So I'd
consider fixing that instead.
Johan
^ permalink raw reply
* [PATCH BlueZ 4/4] android/hid: Add handling of HAL_EV_HID_INFO
From: Luiz Augusto von Dentz @ 2013-11-01 13:08 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383311321-28429-1-git-send-email-luiz.dentz@gmail.com>
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
---
android/hid.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/android/hid.c b/android/hid.c
index 57ad5e4..6e6f606 100644
--- a/android/hid.c
+++ b/android/hid.c
@@ -58,6 +58,7 @@ static GSList *devices = NULL;
struct hid_device {
bdaddr_t dst;
uint8_t state;
+ uint8_t subclass;
uint16_t vendor;
uint16_t product;
uint16_t version;
@@ -260,6 +261,28 @@ static gboolean ctrl_watch_cb(GIOChannel *chan, GIOCondition cond,
return FALSE;
}
+static void bt_hid_set_info(struct hid_device *dev)
+{
+ struct hal_ev_hid_info ev;
+
+ DBG("");
+
+ bdaddr2android(&dev->dst, ev.bdaddr);
+ ev.attr = 0; /* TODO: Check what is this field */
+ ev.subclass = dev->subclass;
+ ev.app_id = 0; /* TODO: Check what is this field */
+ ev.vendor = dev->vendor;
+ ev.product = dev->product;
+ ev.version = dev->version;
+ ev.country = dev->country;
+ ev.descr_len = dev->rd_size;
+ memset(ev.descr, 0, sizeof(ev.descr));
+ memcpy(ev.descr, dev->rd_data, ev.descr_len);
+
+ ipc_send(notification_io, HAL_SERVICE_ID_HIDHOST, HAL_EV_HID_INFO,
+ sizeof(ev), &ev, -1);
+}
+
static int uhid_create(struct hid_device *dev)
{
GIOCondition cond = G_IO_IN | G_IO_ERR | G_IO_NVAL;
@@ -295,6 +318,8 @@ static int uhid_create(struct hid_device *dev)
dev->uhid_watch_id = g_io_add_watch(io, cond, uhid_event_cb, dev);
g_io_channel_unref(io);
+ bt_hid_set_info(dev);
+
return 0;
}
@@ -412,6 +437,10 @@ static void hid_sdp_search_cb(sdp_list_t *recs, int err, gpointer data)
if (data)
dev->country = data->val.uint8;
+ data = sdp_data_get(rec, SDP_ATTR_HID_DEVICE_SUBCLASS);
+ if (data)
+ dev->subclass = data->val.uint8;
+
data = sdp_data_get(rec, SDP_ATTR_HID_DESCRIPTOR_LIST);
if (data) {
if (!SDP_IS_SEQ(data->dtd))
--
1.8.3.1
^ permalink raw reply related
* [PATCH BlueZ 3/4] android/hal-hidhost: Add implemention of .hid_info_cb
From: Luiz Augusto von Dentz @ 2013-11-01 13:08 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383311321-28429-1-git-send-email-luiz.dentz@gmail.com>
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
---
android/hal-hidhost.c | 22 ++++++++++++++++++++++
android/hal-msg.h | 14 ++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/android/hal-hidhost.c b/android/hal-hidhost.c
index e148dc2..c20c785 100644
--- a/android/hal-hidhost.c
+++ b/android/hal-hidhost.c
@@ -40,6 +40,25 @@ static void handle_conn_state(void *buf)
ev->state);
}
+static void handle_info(void *buf)
+{
+ struct hal_ev_hid_info *ev = buf;
+ bthh_hid_info_t info;
+
+ info.attr_mask = ev->attr;
+ info.sub_class = ev->subclass;
+ info.app_id = ev->app_id;
+ info.vendor_id = ev->vendor;
+ info.product_id = ev->product;
+ info.version = ev->version;
+ info.ctry_code = ev->country;
+ info.dl_len = ev->descr_len;
+ memcpy(info.dsc_list, ev->descr, info.dl_len);
+
+ if (bt_hh_cbacks->hid_info_cb)
+ bt_hh_cbacks->hid_info_cb((bt_bdaddr_t *) ev->bdaddr, info);
+}
+
/* will be called from notification thread context */
void bt_notify_hh(uint16_t opcode, void *buf, uint16_t len)
{
@@ -50,6 +69,9 @@ void bt_notify_hh(uint16_t opcode, void *buf, uint16_t len)
case HAL_EV_HID_CONN_STATE:
handle_conn_state(buf);
break;
+ case HAL_EV_HID_INFO:
+ handle_info(buf);
+ break;
default:
DBG("Unhandled callback opcode=0x%x", opcode);
break;
diff --git a/android/hal-msg.h b/android/hal-msg.h
index 8a344d8..9276a2f 100644
--- a/android/hal-msg.h
+++ b/android/hal-msg.h
@@ -439,6 +439,20 @@ struct hal_ev_hid_conn_state {
uint8_t state;
} __attribute__((packed));
+#define HAL_EV_HID_INFO 0x82
+struct hal_ev_hid_info {
+ uint8_t bdaddr[6];
+ uint8_t attr;
+ uint8_t subclass;
+ uint8_t app_id;
+ uint16_t vendor;
+ uint16_t product;
+ uint16_t version;
+ uint8_t country;
+ uint16_t descr_len;
+ uint8_t descr[884];
+} __attribute__((packed));
+
#define HAL_EV_AV_CONNECTION_STATE 0x81
struct hal_ev_av_connection_state {
uint8_t state;
--
1.8.3.1
^ permalink raw reply related
* [PATCH BlueZ 2/4] android/hid: Fix passing vendor id as version to uHID
From: Luiz Augusto von Dentz @ 2013-11-01 13:08 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1383311321-28429-1-git-send-email-luiz.dentz@gmail.com>
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
---
android/hid.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/android/hid.c b/android/hid.c
index bbdc66a..57ad5e4 100644
--- a/android/hid.c
+++ b/android/hid.c
@@ -278,7 +278,7 @@ static int uhid_create(struct hid_device *dev)
ev.u.create.bus = BUS_BLUETOOTH;
ev.u.create.vendor = dev->vendor;
ev.u.create.product = dev->product;
- ev.u.create.version = dev->vendor;
+ ev.u.create.version = dev->version;
ev.u.create.country = dev->country;
ev.u.create.rd_size = dev->rd_size;
ev.u.create.rd_data = dev->rd_data;
--
1.8.3.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