* [RFC 1/3] android: Update HAL API to Android 4.4.3-r1.1
@ 2014-06-11 11:30 Szymon Janc
2014-06-11 11:31 ` [RFC 2/3] android/gatt: Update set_adv_data IPC to HAL API change Szymon Janc
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Szymon Janc @ 2014-06-11 11:30 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
---
android/hal-gatt.c | 4 +++-
android/hardware/bt_gatt_client.h | 4 +++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/android/hal-gatt.c b/android/hal-gatt.c
index 6f0d2c5..a4ad0f2 100644
--- a/android/hal-gatt.c
+++ b/android/hal-gatt.c
@@ -975,7 +975,9 @@ static bt_status_t set_adv_data(int server_if, bool set_scan_rsp,
bool include_name, bool include_txpower,
int min_interval, int max_interval,
int appearance, uint16_t manufacturer_len,
- char *manufacturer_data)
+ char *manufacturer_data,
+ uint16_t service_data_len, char *service_data,
+ uint16_t service_uuid_len, char *service_uuid)
{
char buf[IPC_MTU];
struct hal_cmd_gatt_client_set_adv_data *cmd = (void *) buf;
diff --git a/android/hardware/bt_gatt_client.h b/android/hardware/bt_gatt_client.h
index d6b0cb4..cf4fabe 100644
--- a/android/hardware/bt_gatt_client.h
+++ b/android/hardware/bt_gatt_client.h
@@ -278,7 +278,9 @@ typedef struct {
/** Set the advertising data or scan response data */
bt_status_t (*set_adv_data)(int server_if, bool set_scan_rsp, bool include_name,
bool include_txpower, int min_interval, int max_interval, int appearance,
- uint16_t manufacturer_len, char* manufacturer_data);
+ uint16_t manufacturer_len, char* manufacturer_data,
+ uint16_t service_data_len, char* service_data,
+ uint16_t service_uuid_len, char* service_uuid);
/** Test mode interface */
bt_status_t (*test_command)( int command, btgatt_test_params_t* params);
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [RFC 2/3] android/gatt: Update set_adv_data IPC to HAL API change
2014-06-11 11:30 [RFC 1/3] android: Update HAL API to Android 4.4.3-r1.1 Szymon Janc
@ 2014-06-11 11:31 ` Szymon Janc
2014-06-11 11:31 ` [RFC 3/3] android: Re-enable support for Android 4.4.2 Szymon Janc
2014-06-12 10:21 ` [RFC 1/3] android: Update HAL API to Android 4.4.3-r1.1 Szymon Janc
2 siblings, 0 replies; 4+ messages in thread
From: Szymon Janc @ 2014-06-11 11:31 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
---
android/gatt.c | 19 +++++++++----------
android/hal-gatt.c | 28 ++++++++++++++++++++++++++--
android/hal-msg.h | 4 +++-
3 files changed, 38 insertions(+), 13 deletions(-)
diff --git a/android/gatt.c b/android/gatt.c
index 558b203..649a482 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -3464,19 +3464,18 @@ static void handle_client_set_adv_data(const void *buf, uint16_t len)
return;
}
- DBG("scan_rsp=%u name=%u tx=%u min=%d max=%d app=%d manufacturer=%u",
+ DBG("scan_rsp=%u name=%u tx=%u min=%d max=%d app=%d",
cmd->set_scan_rsp, cmd->include_name, cmd->include_txpower,
- cmd->min_interval, cmd->max_interval, cmd->appearance,
- cmd->manufacturer_len);
+ cmd->min_interval, cmd->max_interval, cmd->appearance);
- /*
- * TODO
- * Currently kernel is setting all except for vendor data.
- * This should be implemented when kernel supports it.
- */
+ DBG("manufacturer=%u service_data=%u service_uuid=%u",
+ cmd->manufacturer_len, cmd->service_data_len,
+ cmd->service_uuid_len);
- if (cmd->manufacturer_len) {
- error("gatt: Manufacturer advertising data not supported");
+ /* TODO This should be implemented when kernel supports it */
+ if (cmd->manufacturer_len || cmd->service_data_len ||
+ cmd->service_uuid_len) {
+ error("gatt: Extra advertising data not supported");
status = HAL_STATUS_FAILED;
goto failed;
}
diff --git a/android/hal-gatt.c b/android/hal-gatt.c
index a4ad0f2..a8f5bd1 100644
--- a/android/hal-gatt.c
+++ b/android/hal-gatt.c
@@ -981,11 +981,18 @@ static bt_status_t set_adv_data(int server_if, bool set_scan_rsp,
{
char buf[IPC_MTU];
struct hal_cmd_gatt_client_set_adv_data *cmd = (void *) buf;
- size_t cmd_len = sizeof(*cmd) + manufacturer_len;
+ size_t cmd_len;
+ uint8_t *data;
if (!interface_ready())
return BT_STATUS_NOT_READY;
+ cmd_len = sizeof(*cmd) + manufacturer_len + service_data_len +
+ service_uuid_len;
+
+ if (cmd_len > IPC_MTU)
+ return BT_STATUS_FAIL;
+
cmd->server_if = server_if;
cmd->set_scan_rsp = set_scan_rsp;
cmd->include_name = include_name;
@@ -994,8 +1001,25 @@ static bt_status_t set_adv_data(int server_if, bool set_scan_rsp,
cmd->max_interval = max_interval;
cmd->appearance = appearance;
cmd->manufacturer_len = manufacturer_len;
+ cmd->service_data_len = service_data_len;
+ cmd->service_uuid_len = service_uuid_len;
+
+ data = cmd->data;
+
+ if (manufacturer_data && manufacturer_len) {
+ memcpy(data, manufacturer_data, manufacturer_len);
+ data += manufacturer_len;
+ }
+
+ if (service_data && service_data_len) {
+ memcpy(data, service_data, service_data_len);
+ data += service_data_len;
+ }
- memcpy(cmd->manufacturer_data, manufacturer_data, manufacturer_len);
+ if (service_uuid && service_uuid_len) {
+ memcpy(data, service_uuid, service_uuid_len);
+ data += service_uuid_len;
+ }
return hal_ipc_cmd(HAL_SERVICE_ID_GATT, HAL_OP_GATT_CLIENT_SET_ADV_DATA,
cmd_len, cmd, 0, NULL, NULL);
diff --git a/android/hal-msg.h b/android/hal-msg.h
index 65cf81f..50ae914 100644
--- a/android/hal-msg.h
+++ b/android/hal-msg.h
@@ -745,7 +745,9 @@ struct hal_cmd_gatt_client_set_adv_data {
int32_t max_interval;
int32_t appearance;
uint16_t manufacturer_len;
- uint8_t manufacturer_data[0];
+ uint16_t service_data_len;
+ uint16_t service_uuid_len;
+ uint8_t data[0];
} __attribute__((packed));
#define GATT_CLIENT_TEST_CMD_ENABLE 0x01
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [RFC 3/3] android: Re-enable support for Android 4.4.2
2014-06-11 11:30 [RFC 1/3] android: Update HAL API to Android 4.4.3-r1.1 Szymon Janc
2014-06-11 11:31 ` [RFC 2/3] android/gatt: Update set_adv_data IPC to HAL API change Szymon Janc
@ 2014-06-11 11:31 ` Szymon Janc
2014-06-12 10:21 ` [RFC 1/3] android: Update HAL API to Android 4.4.3-r1.1 Szymon Janc
2 siblings, 0 replies; 4+ messages in thread
From: Szymon Janc @ 2014-06-11 11:31 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
Due to very unfortunate change Android 4.4.3-r1.1 BT GATT HAL API is
not backward compatible. This adds support for 4.4.3-r1.1 and 4.4.2.
On android PLATFORM_VERSION is used to determine which API should be
used. On Linux we always build with latest API.
---
android/Android.mk | 3 +++
android/Makefile.am | 3 +++
android/hal-gatt.c | 37 ++++++++++++++++++++++++++++++++++++-
android/hal-utils.h | 2 ++
4 files changed, 44 insertions(+), 1 deletion(-)
diff --git a/android/Android.mk b/android/Android.mk
index a9a0982..199334f 100644
--- a/android/Android.mk
+++ b/android/Android.mk
@@ -3,12 +3,15 @@ LOCAL_PATH := external/bluetooth
# Retrieve BlueZ version from configure.ac file
BLUEZ_VERSION := `grep "^AC_INIT" $(LOCAL_PATH)/bluez/configure.ac | sed -e "s/.*,.\(.*\))/\1/"`
+ANDROID_VERSION := `echo $(PLATFORM_VERSION) | awk -F. '{ printf "0x%02d%02d%02d",$$1,$$2,$$3 }'`
+
# Specify pathmap for glib and sbc
pathmap_INCL += glib:external/bluetooth/glib \
sbc:external/bluetooth/sbc \
# Specify common compiler flags
BLUEZ_COMMON_CFLAGS := -DVERSION=\"$(BLUEZ_VERSION)\" \
+ -DANDROID_VERSION=$(ANDROID_VERSION) \
-DANDROID_STORAGEDIR=\"/data/misc/bluetooth\" \
# Enable warnings enabled in autotools build
diff --git a/android/Makefile.am b/android/Makefile.am
index 3429adb..a9a9e7d 100644
--- a/android/Makefile.am
+++ b/android/Makefile.am
@@ -1,4 +1,7 @@
if ANDROID
+
+AM_CFLAGS += -DANDROID_VERSION=0xFFFFFF
+
android_plugindir = $(abs_top_srcdir)/android/.libs
noinst_PROGRAMS += android/system-emulator
diff --git a/android/hal-gatt.c b/android/hal-gatt.c
index a8f5bd1..043c379 100644
--- a/android/hal-gatt.c
+++ b/android/hal-gatt.c
@@ -971,7 +971,7 @@ static int get_device_type(const bt_bdaddr_t *bd_addr)
return dev_type;
}
-static bt_status_t set_adv_data(int server_if, bool set_scan_rsp,
+static bt_status_t set_adv_data_real(int server_if, bool set_scan_rsp,
bool include_name, bool include_txpower,
int min_interval, int max_interval,
int appearance, uint16_t manufacturer_len,
@@ -1025,6 +1025,41 @@ static bt_status_t set_adv_data(int server_if, bool set_scan_rsp,
cmd_len, cmd, 0, NULL, NULL);
}
+/*
+ * This is temporary solution and support for older Android versions might
+ * be removed at any time.
+ */
+#if ANDROID_VERSION < PLATFORM_VER(4,4,3)
+static bt_status_t set_adv_data(int server_if, bool set_scan_rsp,
+ bool include_name, bool include_txpower,
+ int min_interval, int max_interval,
+ int appearance, uint16_t manufacturer_len,
+ char *manufacturer_data)
+{
+ return set_adv_data_real(server_if, set_scan_rsp, include_name,
+ include_txpower, min_interval,
+ max_interval, appearance,
+ manufacturer_len, manufacturer_data,
+ 0, NULL, 0, NULL);
+}
+#else
+static bt_status_t set_adv_data(int server_if, bool set_scan_rsp,
+ bool include_name, bool include_txpower,
+ int min_interval, int max_interval,
+ int appearance, uint16_t manufacturer_len,
+ char *manufacturer_data,
+ uint16_t service_data_len, char *service_data,
+ uint16_t service_uuid_len, char *service_uuid)
+{
+ return set_adv_data_real(server_if, set_scan_rsp, include_name,
+ include_txpower, min_interval,
+ max_interval, appearance,
+ manufacturer_len, manufacturer_data,
+ service_data_len, service_data,
+ service_uuid_len, service_uuid);
+}
+#endif
+
static bt_status_t test_command(int command, btgatt_test_params_t *params)
{
struct hal_cmd_gatt_client_test_command cmd;
diff --git a/android/hal-utils.h b/android/hal-utils.h
index 8a1d015..0c994ee 100644
--- a/android/hal-utils.h
+++ b/android/hal-utils.h
@@ -17,6 +17,8 @@
#include <hardware/bluetooth.h>
+#define PLATFORM_VER(a,b,c) ((a << 16) | ( b << 8) | c)
+
#define MAX_UUID_STR_LEN 37
#define HAL_UUID_LEN 16
#define MAX_ADDR_STR_LEN 18
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [RFC 1/3] android: Update HAL API to Android 4.4.3-r1.1
2014-06-11 11:30 [RFC 1/3] android: Update HAL API to Android 4.4.3-r1.1 Szymon Janc
2014-06-11 11:31 ` [RFC 2/3] android/gatt: Update set_adv_data IPC to HAL API change Szymon Janc
2014-06-11 11:31 ` [RFC 3/3] android: Re-enable support for Android 4.4.2 Szymon Janc
@ 2014-06-12 10:21 ` Szymon Janc
2 siblings, 0 replies; 4+ messages in thread
From: Szymon Janc @ 2014-06-12 10:21 UTC (permalink / raw)
To: linux-bluetooth
On Wednesday 11 of June 2014 13:30:59 Szymon Janc wrote:
> ---
> android/hal-gatt.c | 4 +++-
> android/hardware/bt_gatt_client.h | 4 +++-
> 2 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/android/hal-gatt.c b/android/hal-gatt.c
> index 6f0d2c5..a4ad0f2 100644
> --- a/android/hal-gatt.c
> +++ b/android/hal-gatt.c
> @@ -975,7 +975,9 @@ static bt_status_t set_adv_data(int server_if, bool set_scan_rsp,
> bool include_name, bool include_txpower,
> int min_interval, int max_interval,
> int appearance, uint16_t manufacturer_len,
> - char *manufacturer_data)
> + char *manufacturer_data,
> + uint16_t service_data_len, char *service_data,
> + uint16_t service_uuid_len, char *service_uuid)
> {
> char buf[IPC_MTU];
> struct hal_cmd_gatt_client_set_adv_data *cmd = (void *) buf;
> diff --git a/android/hardware/bt_gatt_client.h b/android/hardware/bt_gatt_client.h
> index d6b0cb4..cf4fabe 100644
> --- a/android/hardware/bt_gatt_client.h
> +++ b/android/hardware/bt_gatt_client.h
> @@ -278,7 +278,9 @@ typedef struct {
> /** Set the advertising data or scan response data */
> bt_status_t (*set_adv_data)(int server_if, bool set_scan_rsp, bool include_name,
> bool include_txpower, int min_interval, int max_interval, int appearance,
> - uint16_t manufacturer_len, char* manufacturer_data);
> + uint16_t manufacturer_len, char* manufacturer_data,
> + uint16_t service_data_len, char* service_data,
> + uint16_t service_uuid_len, char* service_uuid);
>
> /** Test mode interface */
> bt_status_t (*test_command)( int command, btgatt_test_params_t* params);
>
Applied.
--
Best regards,
Szymon Janc
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-06-12 10:21 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-11 11:30 [RFC 1/3] android: Update HAL API to Android 4.4.3-r1.1 Szymon Janc
2014-06-11 11:31 ` [RFC 2/3] android/gatt: Update set_adv_data IPC to HAL API change Szymon Janc
2014-06-11 11:31 ` [RFC 3/3] android: Re-enable support for Android 4.4.2 Szymon Janc
2014-06-12 10:21 ` [RFC 1/3] android: Update HAL API to Android 4.4.3-r1.1 Szymon Janc
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.