Linux bluetooth development
 help / color / mirror / Atom feed
* [PATCH] android/hal-pan: Fix order of event handler registration
From: Ravi kumar Veeramally @ 2013-11-19 21:24 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

IPC message handler determines handler offset with
opcode = msg->opcode - HAL_MINIMUM_EVENT. But here order is misplaced.
---
 android/hal-pan.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/android/hal-pan.c b/android/hal-pan.c
index e12eac8..e7b8a20 100644
--- a/android/hal-pan.c
+++ b/android/hal-pan.c
@@ -54,14 +54,14 @@ static void handle_ctrl_state(void *buf, uint16_t len)
  * index in table equals to 'opcode - HAL_MINIMUM_EVENT' */
 static const struct hal_ipc_handler ev_handlers[] = {
 	{	/* HAL_EV_PAN_CTRL_STATE */
-		.handler = handle_conn_state,
+		.handler = handle_ctrl_state,
 		.var_len = false,
-		.data_len = sizeof(struct hal_ev_pan_conn_state),
+		.data_len = sizeof(struct hal_ev_pan_ctrl_state),
 	},
 	{	/* HAL_EV_PAN_CONN_STATE */
-		.handler = handle_ctrl_state,
+		.handler = handle_conn_state,
 		.var_len = false,
-		.data_len = sizeof(struct hal_ev_pan_ctrl_state),
+		.data_len = sizeof(struct hal_ev_pan_conn_state),
 	},
 };
 
-- 
1.8.3.2


^ permalink raw reply related

* [PATCH] android/hal-a2dp: Fix expected size of hal_ev_a2dp conn_state and audio_state
From: Ravi kumar Veeramally @ 2013-11-19 20:59 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

---
 android/hal-a2dp.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/android/hal-a2dp.c b/android/hal-a2dp.c
index 7d91151..cf39ba2 100644
--- a/android/hal-a2dp.c
+++ b/android/hal-a2dp.c
@@ -54,12 +54,12 @@ static const struct hal_ipc_handler ev_handlers[] = {
 	{	/* HAL_EV_A2DP_CONN_STATE */
 		.handler = handle_conn_state,
 		.var_len = false,
-		.data_len = sizeof(struct hal_ev_pan_conn_state),
+		.data_len = sizeof(struct hal_ev_a2dp_conn_state),
 	},
 	{	/* HAL_EV_A2DP_AUDIO_STATE */
 		.handler = handle_audio_state,
 		.var_len = false,
-		.data_len = sizeof(struct hal_ev_pan_ctrl_state),
+		.data_len = sizeof(struct hal_ev_a2dp_audio_state),
 	},
 };
 
-- 
1.8.3.2


^ permalink raw reply related

* Re: [PATCHv3 0/2] PICS for GAP and HID
From: Johan Hedberg @ 2013-11-19 16:35 UTC (permalink / raw)
  To: Jakub Tyszkowski; +Cc: linux-bluetooth
In-Reply-To: <1384871775-8348-1-git-send-email-jakub.tyszkowski@tieto.com>

Hi Jakub,

On Tue, Nov 19, 2013, Jakub Tyszkowski wrote:
> Please note that some PICS marked as mandatory for LE were not
> selected because of Android 4.4 not supporting some LE Roles.
> 
> v3: layout changed, added: mandatory/optional/conditional
> 	markings and descriptions, # - not implemented mark
> v2: layout changed, each parameter description added
> v1: initial documents with PICS targeting Android 4.4
> 
> Jakub Tyszkowski (2):
>   android: Add PTS PICS for GAP
>   android: Add PTS PICS for HID
> 
>  android/pics-gap.txt | 708 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  android/pics-hid.txt | 285 +++++++++++++++++++++
>  2 files changed, 993 insertions(+)
>  create mode 100644 android/pics-gap.txt
>  create mode 100644 android/pics-hid.txt

Both patches have been applied. Thanks.

I did need to push an extra patch on top of these though since you
forgot to add the files to EXTRA_DIST in android/Makefile.am.

Johan

^ permalink raw reply

* Re: [PATCH 10/10] android/hal-bluetooth: Remove not needed check in get_adapter_property
From: Johan Hedberg @ 2013-11-19 16:29 UTC (permalink / raw)
  To: Szymon Janc; +Cc: linux-bluetooth
In-Reply-To: <1384876314-31347-10-git-send-email-szymon.janc@tieto.com>

Hi Szymon,

On Tue, Nov 19, 2013, Szymon Janc wrote:
> Properties types are verified on daemon side and proper error is
> returned on wrong type. No need to double check that on HAL side.
> ---
>  android/hal-bluetooth.c | 15 ---------------
>  1 file changed, 15 deletions(-)

All patches in this set have been applied. Thanks.

> --- a/android/hal-bluetooth.c
> +++ b/android/hal-bluetooth.c
> @@ -476,21 +476,6 @@ static int get_adapter_property(bt_property_type_t type)
>  	if (!interface_ready())
>  		return BT_STATUS_NOT_READY;
>  
> -	switch (type) {
> -	case BT_PROPERTY_BDNAME:
> -	case BT_PROPERTY_BDADDR:
> -	case BT_PROPERTY_UUIDS:
> -	case BT_PROPERTY_CLASS_OF_DEVICE:
> -	case BT_PROPERTY_TYPE_OF_DEVICE:
> -	case BT_PROPERTY_SERVICE_RECORD:
> -	case BT_PROPERTY_ADAPTER_SCAN_MODE:
> -	case BT_PROPERTY_ADAPTER_BONDED_DEVICES:
> -	case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT:
> -		break;
> -	default:
> -		return BT_STATUS_PARM_INVALID;
> -	}
> -

We should be consistent about this across all HALs. I just applied
patches from Ravi that added validity check to the HAL side, however now
it seems these should actually be on the daemon side (and now that I
think about it the daemon must in the name of robustness check them
anyway).

Johan

^ permalink raw reply

* Re: [PATCH_v2 1/4] android/hal-pan: Return error in case of unsupported PAN roles
From: Johan Hedberg @ 2013-11-19 16:20 UTC (permalink / raw)
  To: Ravi kumar Veeramally; +Cc: linux-bluetooth
In-Reply-To: <1384872988-19914-1-git-send-email-ravikumar.veeramally@linux.intel.com>

Hi Ravi,

On Tue, Nov 19, 2013, Ravi kumar Veeramally wrote:
> ---
>  android/hal-pan.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)

All four patches have been applied. Thanks.

Johan

^ permalink raw reply

* [PATCH 10/10] android/hal-bluetooth: Remove not needed check in get_adapter_property
From: Szymon Janc @ 2013-11-19 15:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1384876314-31347-1-git-send-email-szymon.janc@tieto.com>

Properties types are verified on daemon side and proper error is
returned on wrong type. No need to double check that on HAL side.
---
 android/hal-bluetooth.c | 15 ---------------
 1 file changed, 15 deletions(-)

diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index 68f1bd5..b04939e 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -476,21 +476,6 @@ static int get_adapter_property(bt_property_type_t type)
 	if (!interface_ready())
 		return BT_STATUS_NOT_READY;
 
-	switch (type) {
-	case BT_PROPERTY_BDNAME:
-	case BT_PROPERTY_BDADDR:
-	case BT_PROPERTY_UUIDS:
-	case BT_PROPERTY_CLASS_OF_DEVICE:
-	case BT_PROPERTY_TYPE_OF_DEVICE:
-	case BT_PROPERTY_SERVICE_RECORD:
-	case BT_PROPERTY_ADAPTER_SCAN_MODE:
-	case BT_PROPERTY_ADAPTER_BONDED_DEVICES:
-	case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT:
-		break;
-	default:
-		return BT_STATUS_PARM_INVALID;
-	}
-
 	/* type match IPC type */
 	cmd.type = type;
 
-- 
1.8.4.3


^ permalink raw reply related

* [PATCH 09/10] android/hal-bluetooth: Remove not needed check in set_adapter_property
From: Szymon Janc @ 2013-11-19 15:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1384876314-31347-1-git-send-email-szymon.janc@tieto.com>

Properties types are verified on daemon side and proper error is
returned on wrong type. No need to double check that on HAL side.
---
 android/hal-bluetooth.c | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index b8ffce6..68f1bd5 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -508,15 +508,6 @@ static int set_adapter_property(const bt_property_t *property)
 	if (!interface_ready())
 		return BT_STATUS_NOT_READY;
 
-	switch (property->type) {
-	case BT_PROPERTY_BDNAME:
-	case BT_PROPERTY_ADAPTER_SCAN_MODE:
-	case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT:
-		break;
-	default:
-		return BT_STATUS_PARM_INVALID;
-	}
-
 	/* type match IPC type */
 	cmd->type = property->type;
 	cmd->len = property->len;
-- 
1.8.4.3


^ permalink raw reply related

* [PATCH 08/10] android/hal-bluetooth: Handle dut mode receive event
From: Szymon Janc @ 2013-11-19 15:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1384876314-31347-1-git-send-email-szymon.janc@tieto.com>

Pass received data to callback if it is present.
---
 android/hal-bluetooth.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index 18e805b..b8ffce6 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -300,9 +300,17 @@ static void handle_acl_state_changed(void *buf, uint16_t len)
 
 static void handle_dut_mode_receive(void *buf, uint16_t len)
 {
+	struct hal_ev_dut_mode_receive *ev = buf;
+
 	DBG("");
 
-	/* TODO */
+	if (len != sizeof(*ev) + ev->len) {
+		error("invalid dut mode receive event (%u), aborting", len);
+		exit(EXIT_FAILURE);
+	}
+
+	if (bt_hal_cbacks->dut_mode_recv_cb)
+		bt_hal_cbacks->dut_mode_recv_cb(ev->opcode, ev->data, ev->len);
 }
 
 /* handlers will be called from notification thread context,
-- 
1.8.4.3


^ permalink raw reply related

* [PATCH 07/10] android/hal-bluetooth: Remove not needed __func__ from debug print
From: Szymon Janc @ 2013-11-19 15:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1384876314-31347-1-git-send-email-szymon.janc@tieto.com>

DBG macro already adds function name to print output.
---
 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 4689bf2..18e805b 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -724,7 +724,7 @@ static int ssp_reply(const bt_bdaddr_t *bd_addr, bt_ssp_variant_t variant,
 
 static const void *get_profile_interface(const char *profile_id)
 {
-	DBG("%s: %s", __func__, profile_id);
+	DBG("%s", profile_id);
 
 	if (!interface_ready())
 		return NULL;
-- 
1.8.4.3


^ permalink raw reply related

* [PATCH 06/10] android/hal-bluetooth: Add support for dut mode send command
From: Szymon Janc @ 2013-11-19 15:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1384876314-31347-1-git-send-email-szymon.janc@tieto.com>

This is used to send test HCI commands when DUT mode is enabled.
---
 android/hal-bluetooth.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index bd7d257..4689bf2 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -761,12 +761,20 @@ static int dut_mode_configure(uint8_t enable)
 
 static int dut_mode_send(uint16_t opcode, uint8_t *buf, uint8_t len)
 {
-	DBG("");
+	uint8_t cmd_buf[sizeof(struct hal_cmd_dut_mode_send) + len];
+	struct hal_cmd_dut_mode_send *cmd = (void *) cmd_buf;
+
+	DBG("opcode %u len %u", opcode, len);
 
 	if (!interface_ready())
 		return BT_STATUS_NOT_READY;
 
-	return BT_STATUS_UNSUPPORTED;
+	cmd->opcode = opcode;
+	cmd->len = len;
+	memcpy(cmd->data, buf, cmd->len);
+
+	return hal_ipc_cmd(HAL_SERVICE_ID_BLUETOOTH, HAL_OP_DUT_MODE_SEND,
+					sizeof(cmd_buf), cmd, 0, NULL, NULL);
 }
 
 static const bt_interface_t bluetooth_if = {
-- 
1.8.4.3


^ permalink raw reply related

* [PATCH 05/10] android/hal-bluetooth: Add support for dut mode configure command
From: Szymon Janc @ 2013-11-19 15:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1384876314-31347-1-git-send-email-szymon.janc@tieto.com>

This command is used to enter or exit DUT mode.
---
 android/hal-bluetooth.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index c74a9b3..bd7d257 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -746,12 +746,17 @@ static const void *get_profile_interface(const char *profile_id)
 
 static int dut_mode_configure(uint8_t enable)
 {
-	DBG("");
+	struct hal_cmd_dut_mode_conf cmd;
+
+	DBG("enable %u", enable);
 
 	if (!interface_ready())
 		return BT_STATUS_NOT_READY;
 
-	return BT_STATUS_UNSUPPORTED;
+	cmd.enable = enable;
+
+	return hal_ipc_cmd(HAL_SERVICE_ID_BLUETOOTH, HAL_OP_DUT_MODE_CONF,
+					sizeof(cmd), &cmd, 0, NULL, NULL);
 }
 
 static int dut_mode_send(uint16_t opcode, uint8_t *buf, uint8_t len)
-- 
1.8.4.3


^ permalink raw reply related

* [PATCH 04/10] android/hal-bluetooth: Add support for get remote service record cmd
From: Szymon Janc @ 2013-11-19 15:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1384876314-31347-1-git-send-email-szymon.janc@tieto.com>

---
 android/hal-bluetooth.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index b496995..c74a9b3 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -583,12 +583,19 @@ 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)
 {
+	struct hal_cmd_get_remote_service_rec cmd;
+
 	DBG("bdaddr: %s", bdaddr2str(remote_addr));
 
 	if (!interface_ready())
 		return BT_STATUS_NOT_READY;
 
-	return BT_STATUS_UNSUPPORTED;
+	memcpy(cmd.bdaddr, remote_addr, sizeof(cmd.bdaddr));
+	memcpy(cmd.uuid, uuid, sizeof(cmd.uuid));
+
+	return hal_ipc_cmd(HAL_SERVICE_ID_BLUETOOTH,
+					HAL_OP_GET_REMOTE_SERVICE_REC,
+					sizeof(cmd), &cmd, 0, NULL, NULL);
 }
 
 static int get_remote_services(bt_bdaddr_t *remote_addr)
-- 
1.8.4.3


^ permalink raw reply related

* [PATCH 03/10] android/hal-bluetooth: Add support for set remote device property cmd
From: Szymon Janc @ 2013-11-19 15:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1384876314-31347-1-git-send-email-szymon.janc@tieto.com>

This command is used to set remote device property of specified type.
---
 android/hal-bluetooth.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index e2a9ab3..b496995 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -558,13 +558,27 @@ 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)
 {
+	struct hal_cmd_set_remote_device_prop *cmd;
+	uint8_t buf[sizeof(*cmd) + property->len];
+
 	DBG("bdaddr: %s prop: %s", bdaddr2str(remote_addr),
-						btproperty2str(property));
+				bt_property_type_t2str(property->type));
 
 	if (!interface_ready())
 		return BT_STATUS_NOT_READY;
 
-	return BT_STATUS_UNSUPPORTED;
+	cmd = (void *) buf;
+
+	memcpy(cmd->bdaddr, remote_addr, sizeof(cmd->bdaddr));
+
+	/* type match IPC type */
+	cmd->type = property->type;
+	cmd->len = property->len;
+	memcpy(cmd->val, property->val, property->len);
+
+	return hal_ipc_cmd(HAL_SERVICE_ID_BLUETOOTH,
+					HAL_OP_SET_REMOTE_DEVICE_PROP,
+					sizeof(buf), cmd, 0, NULL, NULL);
 }
 
 static int get_remote_service_record(bt_bdaddr_t *remote_addr, bt_uuid_t *uuid)
-- 
1.8.4.3


^ permalink raw reply related

* [PATCH 02/10] android/hal-bluetooth: Add support for get remote device properties cmd
From: Szymon Janc @ 2013-11-19 15:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1384876314-31347-1-git-send-email-szymon.janc@tieto.com>

This command is used to get all properties of remote device.
---
 android/hal-bluetooth.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index 4a09a5c..e2a9ab3 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -520,12 +520,18 @@ static int set_adapter_property(const bt_property_t *property)
 
 static int get_remote_device_properties(bt_bdaddr_t *remote_addr)
 {
+	struct hal_cmd_get_remote_device_props cmd;
+
 	DBG("bdaddr: %s", bdaddr2str(remote_addr));
 
 	if (!interface_ready())
 		return BT_STATUS_NOT_READY;
 
-	return BT_STATUS_UNSUPPORTED;
+	memcpy(cmd.bdaddr, remote_addr, sizeof(cmd.bdaddr));
+
+	return hal_ipc_cmd(HAL_SERVICE_ID_BLUETOOTH,
+					HAL_OP_GET_REMOTE_DEVICE_PROPS,
+					sizeof(cmd), &cmd, 0, NULL, NULL);
 }
 
 static int get_remote_device_property(bt_bdaddr_t *remote_addr,
-- 
1.8.4.3


^ permalink raw reply related

* [PATCH 01/10] android/hal-bluetooth: Add support for get remote device property cmd
From: Szymon Janc @ 2013-11-19 15:51 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc

This command is used to get remote device property of specifided type.
---
 android/hal-bluetooth.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index 69c304a..4a09a5c 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -531,13 +531,22 @@ 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)
 {
+	struct hal_cmd_get_remote_device_prop cmd;
+
 	DBG("bdaddr: %s prop: %s", bdaddr2str(remote_addr),
 						bt_property_type_t2str(type));
 
 	if (!interface_ready())
 		return BT_STATUS_NOT_READY;
 
-	return BT_STATUS_UNSUPPORTED;
+	memcpy(cmd.bdaddr, remote_addr, sizeof(cmd.bdaddr));
+
+	/* type match IPC type */
+	cmd.type = type;
+
+	return hal_ipc_cmd(HAL_SERVICE_ID_BLUETOOTH,
+					HAL_OP_GET_REMOTE_DEVICE_PROP,
+					sizeof(cmd), &cmd, 0, NULL, NULL);
 }
 
 static int set_remote_device_property(bt_bdaddr_t *remote_addr,
-- 
1.8.4.3


^ permalink raw reply related

* [PATCH_v2 4/4] android/hidhost: Free all connected devices in profile cleanup call
From: Ravi kumar Veeramally @ 2013-11-19 14:56 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally
In-Reply-To: <1384872988-19914-1-git-send-email-ravikumar.veeramally@linux.intel.com>

This can be easily verified with haltest tool.
---
 android/hidhost.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/android/hidhost.c b/android/hidhost.c
index 049dd6d..502b10b 100644
--- a/android/hidhost.c
+++ b/android/hidhost.c
@@ -1226,6 +1226,14 @@ bool bt_hid_register(int sk, const bdaddr_t *addr)
 	return true;
 }
 
+static void free_hid_devices(gpointer data, gpointer user_data)
+{
+	struct hid_device *dev = data;
+
+	bt_hid_notify_state(dev, HAL_HIDHOST_STATE_DISCONNECTED);
+	hid_device_free(dev);
+}
+
 void bt_hid_unregister(void)
 {
 	DBG("");
@@ -1233,6 +1241,8 @@ void bt_hid_unregister(void)
 	if (notification_sk < 0)
 		return;
 
+	g_slist_foreach(devices, free_hid_devices, NULL);
+	devices = NULL;
 	notification_sk = -1;
 
 	if (ctrl_io) {
-- 
1.8.3.2


^ permalink raw reply related

* [PATCH_v2 3/4] android/hidhost: Handle error case properly in interrupt_connect_cb
From: Ravi kumar Veeramally @ 2013-11-19 14:56 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally
In-Reply-To: <1384872988-19914-1-git-send-email-ravikumar.veeramally@linux.intel.com>

In case of conn_err in interrupt_connect_cb, device is freed but
connection status is not notified. Declared a local variable and
handled error case properly in case of conn_err and uhid failures.
Now connection status notified before freeing device.
---
 android/hidhost.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/android/hidhost.c b/android/hidhost.c
index df21f81..049dd6d 100644
--- a/android/hidhost.c
+++ b/android/hidhost.c
@@ -522,7 +522,6 @@ static int uhid_create(struct hid_device *dev)
 	dev->uhid_fd = open(UHID_DEVICE_FILE, O_RDWR | O_CLOEXEC);
 	if (dev->uhid_fd < 0) {
 		error("Failed to open uHID device: %s", strerror(errno));
-		bt_hid_notify_state(dev, HAL_HIDHOST_STATE_NO_HID);
 		return -errno;
 	}
 
@@ -541,7 +540,6 @@ static int uhid_create(struct hid_device *dev)
 		error("Failed to create uHID device: %s", strerror(errno));
 		close(dev->uhid_fd);
 		dev->uhid_fd = -1;
-		bt_hid_notify_state(dev, HAL_HIDHOST_STATE_NO_HID);
 		return -errno;
 	}
 
@@ -559,16 +557,20 @@ static void interrupt_connect_cb(GIOChannel *chan, GError *conn_err,
 							gpointer user_data)
 {
 	struct hid_device *dev = user_data;
+	uint8_t state;
 
 	DBG("");
 
 	if (conn_err) {
 		error("%s", conn_err->message);
+		state = HAL_HIDHOST_STATE_FAILED;
 		goto failed;
 	}
 
-	if (uhid_create(dev) < 0)
+	if (uhid_create(dev) < 0) {
+		state = HAL_HIDHOST_STATE_NO_HID;
 		goto failed;
+	}
 
 	dev->intr_watch = g_io_add_watch(dev->intr_io,
 				G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,
@@ -579,6 +581,7 @@ static void interrupt_connect_cb(GIOChannel *chan, GError *conn_err,
 	return;
 
 failed:
+	bt_hid_notify_state(dev, state);
 	hid_device_free(dev);
 }
 
-- 
1.8.3.2


^ permalink raw reply related

* [PATCH_v2 2/4] android: Handle multiple init(register) and cleanup(unregister) calls properly
From: Ravi kumar Veeramally @ 2013-11-19 14:56 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally
In-Reply-To: <1384872988-19914-1-git-send-email-ravikumar.veeramally@linux.intel.com>

This can be tested with haltest.
---
 android/a2dp.c      | 6 ++++++
 android/bluetooth.c | 6 ++++++
 android/hidhost.c   | 6 ++++++
 android/pan.c       | 6 ++++++
 4 files changed, 24 insertions(+)

diff --git a/android/a2dp.c b/android/a2dp.c
index 74d0082..a9e7c65 100644
--- a/android/a2dp.c
+++ b/android/a2dp.c
@@ -332,6 +332,9 @@ bool bt_a2dp_register(int sk, const bdaddr_t *addr)
 
 	DBG("");
 
+	if (notification_sk >= 0)
+		return false;
+
 	bacpy(&adapter_addr, addr);
 
 	server = bt_io_listen(connect_cb, NULL, NULL, NULL, &err,
@@ -365,6 +368,9 @@ void bt_a2dp_unregister(void)
 {
 	DBG("");
 
+	if (notification_sk < 0)
+		return;
+
 	notification_sk = -1;
 
 	bt_adapter_remove_record(record_id);
diff --git a/android/bluetooth.c b/android/bluetooth.c
index 7dc2ec3..11b9d76 100644
--- a/android/bluetooth.c
+++ b/android/bluetooth.c
@@ -2275,6 +2275,9 @@ bool bt_bluetooth_register(int sk)
 {
 	DBG("");
 
+	if (notification_sk >= 0)
+		return false;
+
 	notification_sk = sk;
 
 	return true;
@@ -2284,5 +2287,8 @@ void bt_bluetooth_unregister(void)
 {
 	DBG("");
 
+	if (notification_sk < 0)
+		return;
+
 	notification_sk = -1;
 }
diff --git a/android/hidhost.c b/android/hidhost.c
index 842b8ad..df21f81 100644
--- a/android/hidhost.c
+++ b/android/hidhost.c
@@ -1190,6 +1190,9 @@ bool bt_hid_register(int sk, const bdaddr_t *addr)
 
 	DBG("");
 
+	if (notification_sk >= 0)
+		return false;
+
 	bacpy(&adapter_addr, addr);
 
 	ctrl_io = bt_io_listen(connect_cb, NULL, NULL, NULL, &err,
@@ -1224,6 +1227,9 @@ void bt_hid_unregister(void)
 {
 	DBG("");
 
+	if (notification_sk < 0)
+		return;
+
 	notification_sk = -1;
 
 	if (ctrl_io) {
diff --git a/android/pan.c b/android/pan.c
index fba86b8..ada458a 100644
--- a/android/pan.c
+++ b/android/pan.c
@@ -95,6 +95,9 @@ bool bt_pan_register(int sk, const bdaddr_t *addr)
 {
 	DBG("");
 
+	if (notification_sk >= 0)
+		return false;
+
 	notification_sk = sk;
 
 	return true;
@@ -104,5 +107,8 @@ void bt_pan_unregister(void)
 {
 	DBG("");
 
+	if (notification_sk < 0)
+		return;
+
 	notification_sk = -1;
 }
-- 
1.8.3.2


^ permalink raw reply related

* [PATCH_v2 1/4] android/hal-pan: Return error in case of unsupported PAN roles
From: Ravi kumar Veeramally @ 2013-11-19 14:56 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

---
 android/hal-pan.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/android/hal-pan.c b/android/hal-pan.c
index 2bc560e..a2e6060 100644
--- a/android/hal-pan.c
+++ b/android/hal-pan.c
@@ -77,6 +77,9 @@ static bt_status_t pan_enable(int local_role)
 	if (!interface_ready())
 		return BT_STATUS_NOT_READY;
 
+	if (!(local_role == BTPAN_ROLE_PANU || local_role == BTPAN_ROLE_PANNAP))
+		return BT_STATUS_UNSUPPORTED;
+
 	cmd.local_role = local_role;
 
 	return hal_ipc_cmd(HAL_SERVICE_ID_PAN, HAL_OP_PAN_ENABLE,
@@ -112,6 +115,20 @@ static bt_status_t pan_connect(const bt_bdaddr_t *bd_addr, int local_role,
 	if (!interface_ready())
 		return BT_STATUS_NOT_READY;
 
+	switch (local_role) {
+	case BTPAN_ROLE_PANNAP:
+		if (remote_role != BTPAN_ROLE_PANU)
+			return BT_STATUS_UNSUPPORTED;
+		break;
+	case BTPAN_ROLE_PANU:
+		if (remote_role != BTPAN_ROLE_PANNAP &&
+						remote_role != BTPAN_ROLE_PANU)
+			return BT_STATUS_UNSUPPORTED;
+		break;
+	default:
+		return BT_STATUS_UNSUPPORTED;
+	}
+
 	memcpy(cmd.bdaddr, bd_addr, sizeof(cmd.bdaddr));
 	cmd.local_role = local_role;
 	cmd.remote_role = remote_role;
-- 
1.8.3.2


^ permalink raw reply related

* Re: [PATCH v3 0/6] android: IPC improvements
From: Luiz Augusto von Dentz @ 2013-11-19 14:44 UTC (permalink / raw)
  To: Szymon Janc; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <1384869762-3097-1-git-send-email-szymon.janc@tieto.com>

Hi Szymon,

On Tue, Nov 19, 2013 at 4:02 PM, Szymon Janc <szymon.janc@tieto.com> wrote:
> v3:
>  - fixed compilation on android 4.2
>
> Szymon Janc (6):
>   android/hal: Add initial code for IPC message handlers
>   android/hal-bluetooth: Register IPC message handlers
>   android/hal-hidhost: Use generic IPC message handling for events
>   android/hal-pan: Use generic IPC message handling for events
>   android/hal-a2dp: Use generic IPC message handling for events
>   android/hal: Check if command socket was shutdown by peer
>
>  android/hal-a2dp.c      |  41 +++++-----
>  android/hal-bluetooth.c | 208 ++++++++++++++++++++++++++++++------------------
>  android/hal-hidhost.c   |  76 ++++++++++--------
>  android/hal-ipc.c       | 123 +++++++++++++++++++---------
>  android/hal-ipc.h       |  10 +++
>  android/hal-pan.c       |  40 +++++-----
>  android/hal.h           |   4 -
>  7 files changed, 310 insertions(+), 192 deletions(-)
>
> --
> 1.8.4.3

Pushed, thanks.


-- 
Luiz Augusto von Dentz

^ permalink raw reply

* [PATCHv3 2/2] android: Add PTS PICS for HID
From: Jakub Tyszkowski @ 2013-11-19 14:36 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1384871775-8348-1-git-send-email-jakub.tyszkowski@tieto.com>

PTS PICS for HID, targeting Android 4.4.

---
 android/pics-hid.txt | 285 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 285 insertions(+)
 create mode 100644 android/pics-hid.txt

diff --git a/android/pics-hid.txt b/android/pics-hid.txt
new file mode 100644
index 0000000..b0b7d52
--- /dev/null
+++ b/android/pics-hid.txt
@@ -0,0 +1,285 @@
+HID PICS for the PTS tool.
+
+* - different than PTS defaults
+# - not yet implemented/supported
+
+M - mandatory
+O - optional
+
+		Roles
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_1_1	True (*)	Role: Host, Report protocol (O.1)
+TSPC_HID_1_2	False		Role: HID Role (O.1)
+TSPC_HID_1_3	False		Role: Host, Boot protocol (O.1)
+-------------------------------------------------------------------------------
+O.1: It is Mandatory to support One of these roles.
+-------------------------------------------------------------------------------
+
+
+		Application Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_2_1	True		Host: Establish HID connection (M.1)
+TSPC_HID_2_2	True		Host: Accept HID connection (M.1)
+TSPC_HID_2_3	True		Host: Terminate HID connection (M.1)
+TSPC_HID_2_4	True		Host: Accept termination of HID connection (M.1)
+TSPC_HID_2_5	True		Host: Support for virtual cables (M.1)
+TSPC_HID_2_6	True		Host: HID initiated connection (M.1)
+TSPC_HID_2_7	True		Host: Host initiated connection (M.1)
+TSPC_HID_2_8	True		Host: Host data transfer to HID (C.1)
+TSPC_HID_2_9	True		Host: HID data transfer to Host (C.1)
+TSPC_HID_2_10	False		Host: Boot mode data transfer to Host (C.2)
+TSPC_HID_2_11	False		Host : Boot mode data transfer to HID (C.2)
+TSPC_HID_2_12	False		Host : Support for Application to send
+					GET_Report (O)
+TSPC_HID_2_13	False		Host : Support for Application to send
+					SET_REPORT (O)
+TSPC_HID_2_14	False		Host : Support for sending HCI_CONTROL with
+					VIRTUAL_CABLE_UNPLUG (C.3)
+TSPC_HID_2_15	False		Host : Support for receiving HCI_CONTROL with
+					VIRTUAL_CABLE_UNPLUG (C.2)
+-------------------------------------------------------------------------------
+M.1: Mandatory to support IF (TSPC_HID_1_1) supported.
+C.1: Optional for Boot Mode Only Hosts (TSPC_HID_1_3); otherwise Mandatory
+	for Host Role (TSPC_HID_1_1).
+C.2: Mandatory for Boot Mode Only Hosts (TSPC_HID_1_3); otherwise Optional.
+C.3: Optional IF (TSPC_HID_2_5) supported, otherwise excluded.
+-------------------------------------------------------------------------------
+
+
+		Device to Host Transfers
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_3_1	False		Host : Data reports larger than host MTU on
+					Control channel (O)
+TSPC_HID_3_2	True (*)	Host : Data reports larger than host MTU on
+					Interrupt channel (C.1)
+TSPC_HID_3_3	True (*)	Host : Data reports to host (C.1)
+TSPC_HID_3_4	False		Host : Boot mode reports to host (C.2)
+-------------------------------------------------------------------------------
+C.1: Excluded for Boot Mode Only Hosts (TSPC_HID_1_3); otherwise Mandatory if
+	(TSPC_HID_2_12), otherwise Optional.
+C.2: Mandatory for Boot Mode Only Hosts (TSPC_HID_1_3); otherwise Optional.
+-------------------------------------------------------------------------------
+
+
+		Host to Device Transfers
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_4_1	False		Host : Data reports larger than device MTU on
+					Control channel (C.1)
+TSPC_HID_4_2	False		Host : Data reports larger than device MTU on
+					Interrupt channel (C.1)
+TSPC_HID_4_3	True (*)	Host : Data reports to device (C.2)
+TSPC_HID_4_4	False		Host : Boot mode reports to device (O)
+-------------------------------------------------------------------------------
+C.1: Excluded for Boot Mode Only Hosts (TSPC_HID_1_3); otherwise Optional
+C.2: Excluded for Boot Mode Only Hosts (TSPC_HID_1_3); otherwise Mandatory for
+	Host Role (TSPC_HID_1_1).
+-------------------------------------------------------------------------------
+
+
+		HID Control Commands
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_5_1	False		Host : Set_Protocol command (C.1)
+TSPC_HID_5_2	False		Host : Get_Protocol command (C.1)
+TSPC_HID_5_3	False		Host : Set_Idle command (O)
+TSPC_HID_5_4	False		Host : Get_Idle command (O)
+TSPC_HID_5_5	False (*)	Host : Set_Report command (M.1)
+TSPC_HID_5_6	False (*)	Host : Get_Report command (M.2)
+-------------------------------------------------------------------------------
+M.1: Mandatory IF (TSPC_HID_1_1) supported AND (TSPC_HID_2_13) supported.
+C.1: Mandatory for Boot Mode Only Hosts (TSPC_HID_1_3); otherwise Optional.
+	If either Set_Protocol or Get_Protocol supported, both are Mandatory.
+M.2: Mandatory IF (TSPC_HID_1_1) Supported AND (TSPC_HID_2_12) Supported
+-------------------------------------------------------------------------------
+
+
+		Host Link Manager Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_6_1	False		Host : Initiate Authentication before
+					connection completed (C.1)
+TSPC_HID_6_2	False		Host : Initiate Authentication after connection
+					completed (C.1)
+TSPC_HID_6_3	False		Host : Initiate pairing before connection
+					completed (C.2)
+TSPC_HID_6_4	False		Host : Initiate pairing after connection
+					completed (C.2)
+TSPC_HID_6_5	False		Host : Encryption (O)
+TSPC_HID_6_6	False		Host : Initiate encryption (C.3)
+TSPC_HID_6_7	False		Host : Accept encryption requests (C.3)
+TSPC_HID_6_8	True		Host : Role switch (Master/Slave) (M.1)
+TSPC_HID_6_9	True		Host : Request Master Slave switch (M.1)
+TSPC_HID_6_10	True		Host : Accept Master Slave switch requests (M.1)
+TSPC_HID_6_11	False		Host : Hold mode (O)
+TSPC_HID_6_12	True		Host : Sniff mode (M.1)
+TSPC_HID_6_13	False		Host : Park mode (O)
+-------------------------------------------------------------------------------
+C.1: If Host Authentication supported, both (TSPC_HID_6_1) AND (TSPC_HID_6_2)
+	must be supported.
+C.2: If Pairing supported both (TSPC_HID_6_3) AND (TSPC_HID_6_4) must
+	be supported.
+M.1: Mandatory IF (TSPC_HID_1_1) supported.
+C.3: Mandatory IF (TSPC_HID_6_5) encryption supported.
+-------------------------------------------------------------------------------
+
+
+		Host Link Control Requirements
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_7_1	True		Host : Supports inquiry, 79 channel (M.1)
+TSPC_HID_7_2	False (*)	Host : Supports inquiry scan, 79 channel (X)
+-------------------------------------------------------------------------------
+M.1: Mandatory to support IF (TSPC_HID_1_1) supported.
+X: Feature should not be used by a Host, but can be supported in LM.
+-------------------------------------------------------------------------------
+
+
+		HID Device Roles
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_8_1	False		Hid : Pointing HID (O.1)
+TSPC_HID_8_2	False		Hid : Keyboard HID (O.1)
+TSPC_HID_8_3	False		Hid : Identification HID (O.1)
+TSPC_HID_8_4	False		Hid : Other HID (O.1)
+-------------------------------------------------------------------------------
+O.1: It is Mandatory to support One of these roles IF (TSPC_HID_1_2)
+	is selected
+-------------------------------------------------------------------------------
+
+
+		HID Application Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_9_1	False		Hid : Establish HID connection (O)
+TSPC_HID_9_2	False (*)	Hid : Accept HID connection (M.1)
+TSPC_HID_9_3	False		Hid : Terminate HID connection (O)
+TSPC_HID_9_4	False (*)	Hid : Accept Termination of HID connection (M.1)
+TSPC_HID_9_5	False		Hid : Support for virtual cables (O)
+TSPC_HID_9_6	False		Hid : HID initiated reconnection (C.1)
+TSPC_HID_9_7	False		Hid : Host initiated reconnection (C.1)
+TSPC_HID_9_8	False		Hid : Host data transfer to HID (C.2)
+TSPC_HID_9_9	False		Hid : HID data transfer to Host (C.2)
+TSPC_HID_9_10	False		Hid : HID Boot mode data transfer to Host (C.3)
+TSPC_HID_9_11	False		Hid : Host Boot mode data transfer to HID (C.4)
+TSPC_HID_9_12	False		Hid : Output reports declared (C.4)
+TSPC_HID_9_13	False		Hid : Input reports declared (C.3)
+TSPC_HID_9_14	False		Hid : Feature reports declared (O)
+TSPC_HID_9_15	False		Hid : Support for sending HCI_CONTROL with
+					VIRTUAL_CABLE_UNPLUG (C.5)
+TSPC_HID_9_16	False		Hid : Support for receiving HCI_CONTROL with
+					VIRTUAL_CABLE_UNPLUG (C.5)
+-------------------------------------------------------------------------------
+M.1: Mandatory IF (TSPC_HID_1_2) supported.
+C.1: One of these is Mandatory IF (TSPC_HID_9_5) is supported
+	(SDP attribute 0x204=True)
+C.2: One of these is Mandatory.
+C.3: Mandatory IF (TSPC_HID_8_1) OR (TSPC_HID_8_2) is selected
+C.4: Mandatory IF (TSPC_HID_8_2) is supported (for status indicators)
+C.5: Optional IF (TSPC_HID_9_2) supported, otherwise excluded.
+-------------------------------------------------------------------------------
+
+
+		Device to Host Transfers
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_10_1	False		Hid : Data reports larger than host MTU on
+					Control channel (O)
+TSPC_HID_10_2	False		Hid : Data reports larger than host MTU on
+					Interrupt channel (O)
+TSPC_HID_10_3	False		Hid : Data reports to host (O)
+TSPC_HID_10_4	False		Hid : Boot mode reports to host (C.1)
+-------------------------------------------------------------------------------
+C.1: Mandatory IF (TSPC_HID_8_1) OR (TSPC_HID_8_2) is supported.
+	Optional for other HIDs.
+-------------------------------------------------------------------------------
+
+
+		Host to Device Transfers
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_11_1	False		Hid : Data reports larger than device MTU on
+					Control channel (O)
+TSPC_HID_11_2	False		Hid : Data reports larger than device MTU on
+					Interrupt channel (O)
+TSPC_HID_11_3	False		Hid : Data reports to device (O)
+TSPC_HID_11_4	False		Hid : Boot mode reports to device (C.1)
+-------------------------------------------------------------------------------
+C.1: Mandatory IF (TSPC_HID_8_2) is supported. Optional for other HIDs.
+-------------------------------------------------------------------------------
+
+
+		HID Control Commands
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_12_1	False		Hid : Set_Protocol command (C.1)
+TSPC_HID_12_2	False		Hid : Get_Protocol command (C.1)
+TSPC_HID_12_3	False		Hid : Set_Idle command (C.2)
+TSPC_HID_12_4	False		Hid : Get_Idle command (C.2)
+TSPC_HID_12_5	False		Hid : Set_Report command (C.3)
+TSPC_HID_12_6	False		Hid : Get_Report command (C.4)
+-------------------------------------------------------------------------------
+C.1: Mandatory IF (TSPC_HID_8_1) OR (TSPC_HID_8_2) is supported.
+	Optional for other HIDs. If either Set_Protocol or Get_Protocol
+	supported, both are Mandatory.
+C.2: Mandatory IF (TSPC_HID_8_2) Keyboard is selected. Optional for other HIDs.
+C.3: Mandatory IF (TSPC_HID_9_12) or (TSPC_HID_9_14) supported.
+C.4: Mandatory IF (TSPC_HID_9_13) or (TSPC_HID_9_14) supported
+-------------------------------------------------------------------------------
+
+
+		HID Link Manager Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_13_1	False		Hid : Host initiated Authentication before
+					connection completed (C.1)
+TSPC_HID_13_2	False		Hid : Host initiated Authentication after
+					connection completed (C.1)
+TSPC_HID_13_3	False		Hid : Initiate pairing before connection
+					completed (X)
+TSPC_HID_13_4	False		Hid : Initiate pairing after connection
+					completed (X)
+TSPC_HID_13_5	False		Hid : Encryption (C.1)
+TSPC_HID_13_6	False		Hid : Initiate encryption (O)
+TSPC_HID_13_7	False		Hid : Accept encryption requests (C.2)
+TSPC_HID_13_8	False		Hid : Role switch (Master/Slave) (C.3)
+TSPC_HID_13_9	False		Hid : Request Master Slave switch (O)
+TSPC_HID_13_10	False		Hid : Accept Master Slave switch requests (C.3)
+TSPC_HID_13_11	False		Hid : Hold mode (O)
+TSPC_HID_13_12	False		Hid : Sniff mode (O)
+TSPC_HID_13_13	False		Hid : Park mode (O)
+-------------------------------------------------------------------------------
+C.1: Mandatory IF (TSPC_HID_8_2) OR (TSPC_HID_8_3) is selected. Optional
+	for other HIDs.
+C.2: Mandatory IF (TSPC_HID_13_5) supported.
+C.3: Mandatory IF (TSPC_HID_9_6) is supported.
+X: Feature should not be used by a HID device, but can be supported in LM.
+-------------------------------------------------------------------------------
+
+
+		HID Link Control Requirements
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_HID_14_1	False		Hid : Supports inquiry, 79 channel (O)
+TSPC_HID_14_2	False (*)	Hid : Supports inquiry scan, 79 channel (M.1)
+TSPC_ALL	False		Enables all test cases when set to true.
+-------------------------------------------------------------------------------
+M.1: Mandatory IF (TSPC_HID_1_2) is supported.
+-------------------------------------------------------------------------------
-- 
1.8.4.1


^ permalink raw reply related

* [PATCHv3 1/2] android: Add PTS PICS for GAP
From: Jakub Tyszkowski @ 2013-11-19 14:36 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1384871775-8348-1-git-send-email-jakub.tyszkowski@tieto.com>

PTS PICS for GAP, targeting Android 4.4.

---
 android/pics-gap.txt | 708 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 708 insertions(+)
 create mode 100644 android/pics-gap.txt

diff --git a/android/pics-gap.txt b/android/pics-gap.txt
new file mode 100644
index 0000000..2343975
--- /dev/null
+++ b/android/pics-gap.txt
@@ -0,0 +1,708 @@
+GAP PICS for the PTS tool.
+
+* - different than PTS defaults
+# - not yet implemented/supported
+
+M - mandatory
+O - optional
+
+		Device Configuration
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_0_1	False		BR/EDR (C.1)
+TSPC_GAP_0_2	False		LE (C.2)
+TSPC_GAP_0_3	True (*)	BR/EDR/LE (C.3)
+-------------------------------------------------------------------------------
+C.1: Mandatory if ('End Product' or 'Host Subsystem') and ('BR Host' or
+	'BR/HS Host') are Supported ('End Product' or 'Host Subsystem' with 'BR'
+	or 'BR/HS Host' CC), otherwise excluded. Optional for
+	'Component (Tested)' or 'Component (Non-Tested)'.
+C.2: Mandatory if ('End Product' or 'Host Subsystem') and ('LE Host') are Supported
+	(End Product or Host Subsystem with LE Host CC), otherwise excluded.
+	Optional for 'Component (Tested)' or 'Component (Non-Tested)'.
+C.3: Mandatory if ('End Product' or 'Host Subsystem') and ('BR/LE Host' or
+	'BR/HS/LE Host') are Supported (End Product or Host Subsystem with
+	BR/LE or BR/HS/LE Host CC), otherwise excluded.
+	Optional for 'Component (Tested)' or 'Component (Non-tested)'.
+Note - Only one transport shall be supported.
+-------------------------------------------------------------------------------
+
+
+		Version Configuration
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_0A_1	False		Core Specification Addendum 3 (CSA3),
+					GAP Connection Parameters Changes,
+					Authentication and Lost Bond Changes,
+					Private Addressing Changes,
+					Dual Mode Addressing Changes,
+					Adopted 24 July 2012 (C.1)
+-------------------------------------------------------------------------------
+C.1: Mandatory if 'CSA3 Adopted 24 July 2012' is supported, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Modes
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_1_1	True (*)	Non-discoverable mode (C.1)
+TSPC_GAP_1_2	False		Limited-discoverable Mode (O)
+TSPC_GAP_1_3	True (*)	General-discoverable mode (O)
+TSPC_GAP_1_4	True (*)	Non-connectable mode (O)
+TSPC_GAP_1_5	True		Connectable mode (M)
+TSPC_GAP_1_6	False		Non-bondable mode (O)
+TSPC_GAP_1_7	True (*)	Bondable mode (C.2)
+-------------------------------------------------------------------------------
+C.1: Mandatory if TSPC_GAP_0_2 is supported, otherwise Optional.
+C.2: Mandatory if TSPC_GAP_3_5 is supported, otherwise Optional.
+-------------------------------------------------------------------------------
+
+
+		Security Aspects
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_2_1	True (*)	Authentication procedure (C.1)
+TSPC_GAP_2_2	True (*)	Support of LMP-Authentication (M)
+TSPC_GAP_2_3	True (*)	Initiate LMP-Authentication (C.5)
+TSPC_GAP_2_4	False		Security mode 1 (C.2)
+TSPC_GAP_2_5	True (*)	Security mode 2 (O)
+TSPC_GAP_2_6	False		Security mode 3 (C.7)
+TSPC_GAP_2_7	True (*)	Security mode 4 (C.4)
+TSPC_GAP_2_8	True (*)	Support of Authenticated link key (C.6)
+TSPC_GAP_2_9	True (*)	Support of Unauthenticated link key (C.6)
+TSPC_GAP_2_10	False		No security (C.6)
+-------------------------------------------------------------------------------
+C.1: Mandatory If (TSPC_GAP_2_5 or TSPC_GAP_2_6) is supported, otherwise
+	Optional.
+Note 1: The Authentication Procedure in item GAP, TSPC_GAP_2_1 is the one
+	described in Fig. 5.1 on page 198 in the GAP Profile Specification and
+	not the LMP-Authenticaion.
+C.2: Excluded if TSPC_GAP_2_7 is supported, otherwise Optional.
+C.5: Mandatory If (TSPC_GAP_2_5 or TSPC_GAP_2_6 or TSPC_GAP_2_7) is supported,
+	otherwise Optional.
+C.4: Mandatory if (Core Spec 2.1 or later) is supported, otherwise Excluded.
+Note 2. If a Core 2.0 and earlier design claims to support secure communcation
+	it should support either Security mode 2 or 3.
+Note 3. A Core 2.1 or later device shall always support secure communication
+	in Security Mode 4, and shall use that mode to connect with another
+	Core 2.1 or later device. It shall use Security Mode 2 only for
+	backward compatibility purposes with Core 2.0 and earlier devices.
+	Security Mode 1 is excluded for Core 2.1 or later devices based on
+	condition C.2.
+C.6: If TSPC_GAP_2_7 is supported then at least one of (TSPC_GAP_2_8 or
+	TSPC_GAP_2_9 or TSPC_GAP_2_10) is Mandatory, otherwise Excluded.
+C.7: Excluded if TSPC_GAP_2_7 is supported, otherwise Optional.
+-------------------------------------------------------------------------------
+
+
+		Idle Mode Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_3_1	True (*)	Initiation of general inquiry (C.1)
+TSPC_GAP_3_2	False		Initiation of limited inquiry (C.1)
+TSPC_GAP_3_3	True (*)	Initiation of name discover (O)
+TSPC_GAP_3_4	True (*)	Initiation of device discovery (O)
+TSPC_GAP_3_5	True (*)	Initiation of general bonding (O)
+TSPC_GAP_3_6	True (*)	Initiation of dedicated bonding (O)
+-------------------------------------------------------------------------------
+C.1: Mandatory to support at least one of TSPC_GAP_3_1 or TSPC_GAP_3_2 if
+	TSPC_GAP_3_5 is supported, otherwise Optional.
+-------------------------------------------------------------------------------
+
+
+		Establishment Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_4_1	True		Support link establishment as initiator (M)
+TSPC_GAP_4_2	True		Support link establishment as acceptor (M)
+TSPC_GAP_4_3	True (*)	Support channel establishment as initiator (O)
+TSPC_GAP_4_4	True		Support channel establishment as acceptor (M)
+TSPC_GAP_4_5	True (*)	Support connection establishment as initiator
+					(O)
+TSPC_GAP_4_6	True (*)	Support connection establishment as acceptor
+					(O)
+-------------------------------------------------------------------------------
+
+
+		LE Roles
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_5_1	False (*)	Broadcaster (C.1)
+TSPC_GAP_5_2	False		Observer (C.1)
+TSPC_GAP_5_3	False (*)	Peripheral (C.1)
+TSPC_GAP_5_4	True (*#)	Central (C.1)
+-------------------------------------------------------------------------------
+C.1: It is mandatory to support at least one of the defined roles.
+Note: 'LE Roles' is applicable for LE-only configurations, but it appears that
+	PTS is checking this precondition also in some BR/EDR/LE tests.
+-------------------------------------------------------------------------------
+
+
+		Broadcaster Physical Layer
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_6_1	False (*)	Broadcaster: Transmitter (M)
+TSPC_GAP_6_2	False		Broadcaster: Receiver (O)
+-------------------------------------------------------------------------------
+
+
+		Broadcaster Link Layer States
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_7_1	False (*)	Broadcaster: Standby (M)
+TSPC_GAP_7_2	False (*)	Broadcaster: Advertising (M)
+-------------------------------------------------------------------------------
+
+
+		Broadcaster Link Layer Advertising Event Types
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_8_1	False (*)	Broadcaster: Non-Connectable Undirected Event
+					(M)
+TSPC_GAP_8_2	False		Broadcaster: Scannable Undirected Event (O)
+-------------------------------------------------------------------------------
+
+
+		Broadcaster Link Layer Advertising Data Types
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_8A_1	False		AD Type-Service UUID (O)
+TSPC_GAP_8A_2	False		AD Type-Local Name (O)
+TSPC_GAP_8A_3	False (*)	AD Type-Flags (M)
+TSPC_GAP_8A_4	False		AD Type-Manufacturer Specific Data (O)
+TSPC_GAP_8A_5	False		AD Type-TX Power Level (O)
+TSPC_GAP_8A_6	False		AD Type-Security Manager Out of Band (OOB) (C.1)
+TSPC_GAP_8A_7	False		AD Type-Security manager TK Value (O)
+TSPC_GAP_8A_8	False		AD Type-Slave Connection Interval Range (O)
+TSPC_GAP_8A_9	False		AD Type-Service Solicitation (O)
+TSPC_GAP_8A_10	False		AD Type-Service Data (O)
+-------------------------------------------------------------------------------
+C.1: Optional if TSPC_SM_2_4 (OOB supported) is supported, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Broadcaster Connection Modes and Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_9_1	False (*)	Broadcaster: Non-Connectable Mode
+-------------------------------------------------------------------------------
+
+
+		Broadcaster Broadcasting and Observing Features
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_10_1	False (*)	Broadcaster: Broadcast Mode
+TSPC_GAP_11_1	False		Broadcaster: Privacy Feature
+TSPC_GAP_11_2	False		Broadcaster: Resolvable Private Address
+					Generation Procedure
+-------------------------------------------------------------------------------
+
+
+		Observer Physical Layer
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_12_1	True (#)	Observer: Receiver
+TSPC_GAP_12_2	False		Observer: Transmitter
+-------------------------------------------------------------------------------
+
+
+		Observer Link Layer States
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_13_1	True (#)	Observer: Standby
+TSPC_GAP_13_2	True (#)	Observer: Scanning
+-------------------------------------------------------------------------------
+
+
+		Observer Link Layer Scanning Types
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_14_1	True (#)	Observer: Passive Scanning
+TSPC_GAP_14_2	False		Observer: Active Scanning
+-------------------------------------------------------------------------------
+
+
+		Observer Connection Modes and Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_15_1	True (#)	Observer: Non-Connectable Mode
+-------------------------------------------------------------------------------
+
+
+		Observer Broadcasting and Observing Features
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_16_1	True (#)	Observer: Observation Procedure
+-------------------------------------------------------------------------------
+
+
+		Observer Privacy Feature
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_17_1	False		Observer: Privacy Feature (O)
+TSPC_GAP_17_2	False		Observer: Non-Resolvable Private Address
+					Generation Procedure (C.1)
+TSPC_GAP_17_3	False		Observer: Resolvable Private Address Resolution
+					Procedure (C.2)
+TSPC_GAP_17_4	False		Observer: Resolvable Private Address Generation
+					Procedure (C.3)
+-------------------------------------------------------------------------------
+C.1: Mandatory if TSPC_GAP_17_1 and TSPC_GAP_14_2 (Active Scanning) are
+	supported and TSPC_GAP_17_4 (Resolvable Private Address Generation
+	Procedure) is Not Supported; Optional if CSA3 or later and
+	TSPC_GAP_17_4 are supported, otherwise Excluded.
+C.2: Optional if TSPC_GAP_17_1 is supported, otherwise Excluded.
+C.3: Mandatory if CSA3 or later and TSPC_GAP_17_1 and TSPC_GAP_14_2
+	(Active Scanning) are supported and TSPC_GAP_17_2 (Non-Resolvable
+	Private	Address Generation Procedure) is not supported; Optional if
+	CSA3 or later and TSPC_GAP_17_2 (Non-Resolvable Private Address
+	Generation Procedure) are supported, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Peripheral Physical Layer
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_18_1	False		Peripheral: Transmitter
+TSPC_GAP_18_2	False		Peripheral: Receiver
+-------------------------------------------------------------------------------
+
+
+		Peripheral Link Layer States
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_19_1	False		Peripheral: Standby
+TSPC_GAP_19_2	False		Peripheral: Advertising
+TSPC_GAP_19_3	False		Peripheral: Connection, Slave Role
+-------------------------------------------------------------------------------
+
+
+		Peripheral Link Layer Advertising Event Types
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_20_1	False		Peripheral: Connectable Undirected Event
+TSPC_GAP_20_2	False		Peripheral: Connectable Directed Event
+TSPC_GAP_20_3	False		Peripheral: Non-Connectable Undirected Event
+TSPC_GAP_20_4	False		Peripheral: Scannable Undirected Event
+-------------------------------------------------------------------------------
+
+
+		Peripheral Link Layer Advertising Data Types
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_20A_1	False		AD Type-Service UUID (C.1)
+TSPC_GAP_20A_2	False		AD Type-Local Name (C.1)
+TSPC_GAP_20A_3	False		AD Type-Flags (C.2)
+TSPC_GAP_20A_4	False		AD Type-Manufacturer Specific Data (C.1)
+TSPC_GAP_20A_5	False		AD Type-TX Power Level (C.1)
+TSPC_GAP_20A_6	False		AD Type-Security Manager Out of Band (OOB) (C.3)
+TSPC_GAP_20A_7	False		AD Type-Security manager TK Value (C.1)
+TSPC_GAP_20A_8	False		AD Type-Slave Connection Interval Range (C.1)
+TSPC_GAP_20A_9	False		AD Type-Service Solicitation (C.1)
+TSPC_GAP_20A_10	False		AD Type-Service Data (C.1)
+-------------------------------------------------------------------------------
+C.1: Optional if (TSPC_GAP_20_1 or TSPC_GAP_20_3 or TSPC_GAP_20_4) is
+	supported, otherwise Excluded.
+C.2: Mandatory if TSPC_GAP_22_2 (Limited Discoverable Mode) or TSPC_GAP_22_3
+	(General Discoverable Mode) is supported, otherwise Optional.
+C.3: Optional if (TSPC_GAP_20_1 (Connectable Undirected Event) or TSPC_GAP_20_3
+	(Non-Connectable Undirected Event) or TSPC_GAP_20_4
+	(Scannable Undirected Event)) and TSPC_SM_2_4 (OOB supported) are
+	supported, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Peripheral Link Layer Control Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_21_1	False (*)	Peripheral: Connection Update Procedure (M)
+TSPC_GAP_21_2	False (*)	Peripheral: Channel Map Update Procedure (M)
+TSPC_GAP_21_3	False		Peripheral: Encryption Procedure (O)
+TSPC_GAP_21_4	False (*)	Peripheral: Feature Exchange Procedure (M)
+TSPC_GAP_21_5	False (*)	Peripheral: Version Exchange Procedure (M)
+TSPC_GAP_21_6	False (*)	Peripheral: Termination Procedure (M)
+-------------------------------------------------------------------------------
+
+
+		Peripheral Discovery Modes and Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_22_1	False		Peripheral: Non-Discoverable Mode (C.2)
+TSPC_GAP_22_2	False		Peripheral: Limited Discoverable Mode (C.1)
+TSPC_GAP_22_3	False		Peripheral: General Discoverable Mode (C.1)
+TSPC_GAP_22_4	False		Peripheral: Name Discovery Procedure (C.3)
+-------------------------------------------------------------------------------
+C.1: Optional if (TSPC_GAP_5_3 OR TSPC_GAP_42_2), otherwise Excluded.
+C.2: Mandatory if (TSPC_GAP_5_3 or TSPC_GAP_42_1) is supported,
+	otherwise Excluded.
+C.3: Optional if TSPC_GAP_5_3 is supported, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Peripheral Connection Modes and Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_23_1	False		Peripheral: Non-Connectable Mode (C.1)
+TSPC_GAP_23_2	False		Peripheral: Directed Connectable Mode (O)
+TSPC_GAP_23_3	False		Peripheral: Undirected Connectable Mode (M)
+TSPC_GAP_23_4	False		Peripheral: Connection Parameter Update
+					Procedure (O)
+TSPC_GAP_23_5	False		Peripheral: Terminate Connection Procedure (M)
+-------------------------------------------------------------------------------
+C.1: Mandatory if TSPC_GAP_5_3 (LE Only – Peripheral role) OR TSPC_GAP_42_3
+	(BR/EDR/LE – Non-Connectable Mode) OR TSPC_GAP_42_4
+	(BR/EDR/LE – Connectable Mode) is supported, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Peripheral Bonding Modes and Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_24_1	False		Peripheral: Non-Bondable Mode (M)
+TSPC_GAP_24_2	False		Peripheral: Bondable Mode (C.1)
+TSPC_GAP_24_3	False		Peripheral: Bonding Procedure  (C.2)
+TSPC_GAP_24_4	False		Peripheral: Multiple Bonds (C.3)
+-------------------------------------------------------------------------------
+C.1: Optional if TSPC_GAP_5_3 (LE Only – Peripheral role) OR (TSPC_GAP_38_3
+	(BR/EDR/LE – Peripheral role) AND NOT TSPC_GAP_42_6 (BR.EDR/LE -
+	Bondable Mode)) is supported, Mandatory if TSPC_GAP_42_6
+	(BR/EDR/LE – Bondable Mode) is supported, otherwise Excluded.
+C.2: Optional if TSPC_GAP_24_2 (Bondable Mode) is supported, otherwise Excluded
+-------------------------------------------------------------------------------
+
+
+		Peripheral Security Aspects Features
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_25_1	False		Peripheral: Security Mode (O)
+TSPC_GAP_25_2	False		Peripheral: Security Mode 2 (O)
+TSPC_GAP_25_3	False		Peripheral: Authentication Procedure (C.2)
+TSPC_GAP_25_4	False		Peripheral: Authorization Procedure (O)
+TSPC_GAP_25_5	False		Peripheral: Connection Data Signing Procedure
+					(O)
+TSPC_GAP_25_6	False		Peripheral: Authenticate Signed Data Procedure
+					(O)
+TSPC_GAP_25_7	False		Peripheral: Authenticated Pairing
+					(LE security mode 1 level 3) (C.1)
+TSPC_GAP_25_8	False		Peripheral: Unauthenticated Pairing
+					(LE security mode 1 level 2) (C.1)
+-------------------------------------------------------------------------------
+C.1: Optional if TSPC_GAP_25_1 is supported, otherwise Excluded.
+C.2: Mandatory if TSPC_GAP_0A_1 and TSPC_GAP_27_4 are supported,
+	otherwise Optional.
+-------------------------------------------------------------------------------
+
+
+		Peripheral Privacy Feature
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_26_1	False		Peripheral: Privacy Feature (O)
+TSPC_GAP_26_2	False		Peripheral: Non-Resolvable Private Address
+					Generation Procedure (C.1)
+TSPC_GAP_26_3	False		Peripheral: Resolvable Private Address
+					Generation Procedure (C.2)
+-------------------------------------------------------------------------------
+C.1: Optional if TSPC_GAP_26_1 is supported, otherwise Excluded.
+C.2: Mandatory if TSPC_GAP_26_1 is supported, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Peripheral GAP Characteristics
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_27_1	False (*)	Peripheral: Device Name (M)
+TSPC_GAP_27_2	False (*)	Peripheral: Appearance (M)
+TSPC_GAP_27_3	False		Peripheral: Peripheral Privacy Flag (C.1)
+TSPC_GAP_27_4	False		Peripheral: Reconnection Address (C.2)
+TSPC_GAP_27_5	False		Peripheral: Peripheral Preferred Connection
+					Parameters (O)
+TSPC_GAP_27_6	False		Peripheral: Writeable Device Name (O)
+TSPC_GAP_27_7	False		Peripheral: Writeable Appearance (O)
+TSPC_GAP_27_8	False		Peripheral: Writeable Peripheral Privacy Flag
+				(O)
+-------------------------------------------------------------------------------
+C.1: Mandatory if TSPC_GAP_26_1 is supported, otherwise Excluded.
+C.2: Optional if TSPC_GAP_26_1 and TSPC_GAP_27_3 are supported,
+	otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Central Physical Layer
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_28_1	True (*#)	Central: Transmitter (M)
+TSPC_GAP_28_2	True (*#)	Central: Receiver (M)
+-------------------------------------------------------------------------------
+
+
+		Central Link Layer States
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_29_1	True (*#)	Central: Standby (M)
+TSPC_GAP_29_2	True (*#)	Central: Scanning (M)
+TSPC_GAP_29_3	True (*#)	Central: Initiating (M)
+TSPC_GAP_29_4	True (*#)	Central: Connection, Master Role (M)
+-------------------------------------------------------------------------------
+
+
+		Central Link Layer Scanning Types
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_30_1	True (*#)	Central: Passive Scanning (O)
+TSPC_GAP_30_2	True (*#)	Central: Active Scanning (C.1)
+-------------------------------------------------------------------------------
+C.1: Mandatory if (TSPC_GAP_5_4 or TSPC_GAP_38_4) is supported.
+	Optional if TSPC_GAP_30_1 and (TSPC_GAP_5_4 OR TSPC_GAP_38_4)
+	is supported, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Central Link Layer Control Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_31_1	True (*#)	Central: Connection Update Procedure (M)
+TSPC_GAP_31_2	True (*#)	Central: Channel Map Update Procedure (M)
+TSPC_GAP_31_3	True (*#)	Central: Encryption Procedure (O)
+TSPC_GAP_31_4	True (*#)	Central: Feature Exchange Procedure (M)
+TSPC_GAP_31_5	True (*#)	Central: Version Exchange Procedure (M)
+TSPC_GAP_31_6	True (*#)	Central: Termination Procedure (M)
+-------------------------------------------------------------------------------
+
+
+		Central Discovery Modes and Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_32_1	False		Central: Limited Discovery Procedure (C.2)
+TSPC_GAP_32_2	True (*#)	Central: General Discovery Procedure (C.1)
+TSPC_GAP_32_3	True (*#)	Central: Name Discovery Procedure (C.3)
+-------------------------------------------------------------------------------
+C.1: Mandatory if (TSPC_GAP_5_4 or TSPC_GAP_40_1) is supported, else Excluded.
+C.2: Optional if (TSPC_GAP_5_4 or TSPC_GAP_40_2) is supported,
+	otherwise Excluded.
+C.3: Optional if (TSPC_GAP_5_4 or TSPC_GAP_40_4) is supported,
+	otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Central Connection Modes and Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_33_1	True (*#)	Central: Auto Connection Establishment
+					Procedure (C.3)
+TSPC_GAP_33_2	True (*#)	Central: General Connection Establishment
+					Procedure (C.1)
+TSPC_GAP_33_3	True (*#)	Central: Selective Connection Establishment
+					Procedure (C.3)
+TSPC_GAP_33_4	True (*#)	Central: Direct Connectin Establishment
+					Procedure (C.2)
+TSPC_GAP_33_5	True (*#)	Central: Connection Parameter Update Procedure
+					(C.2)
+TSPC_GAP_33_6	True (*#)	Central: Terminate Connection Procedure
+					(C.2)
+-------------------------------------------------------------------------------
+C.1: Mandatory if (TSPC_GAP_5_4 or TSPC_GAP_40_5) and TSPC_GAP_36_1 is
+	supported, otherwise Optional.
+C.2: Mandatory if (TSPC_GAP_5_4 or TSPC_GAP_40_5) is supported,
+	otherwise Excluded.
+C.3: Optional if (TSPC_GAP_5_4 or TSPC_GAP_40_5) is supported,
+	otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Central Bonding Modes and Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_34_1	False		Central: Non-Bondable Mode (C.1)
+TSPC_GAP_34_2	True (*#)	Central: Bondable Mode (C.2)
+TSPC_GAP_34_3	True (*#)	Central: Bonding Procedure (O)
+-------------------------------------------------------------------------------
+C.1: Mandatory if (TSPC_GAP_5_4 or 39/5) is supported, otherwise Excluded.
+C.2: Optional if (TSPC_GAP_5_4 or 39/6) is supported, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Central Security Features
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_35_1	True (*#)	Central: Security Mode 1 (O)
+TSPC_GAP_35_2	True (*#)	Central: Security Mode 2 (O)
+TSPC_GAP_35_3	True (*#)	Central: Authentication Procedure (O)
+TSPC_GAP_35_4	True (*#)	Central: Authorization Procedure (O)
+TSPC_GAP_35_5	True (*#)	Central: Connection Data Signing Procedure (O)
+TSPC_GAP_35_6	True (*#)	Central: Authenticate Signed Data Procedure (O)
+TSPC_GAP_35_7	False		Central: Authenticated Pairing
+					(LE security mode 1 level 3) (C.1)
+TSPC_GAP_35_8	False		Central: Unauthenticated Pairing
+					(LE security mode 1 level 2) (C.1)
+-------------------------------------------------------------------------------
+C.1: Optional if TSPC_GAP_35_1 is supported, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Central Privacy Feature
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_36_1	False		Central: Privacy Feature (C.3)
+TSPC_GAP_36_2	False		Central: Non-Resolvable Private Address
+					Generation Procedure (C.1)
+TSPC_GAP_36_3	False		Central: Resolvable Private Address Resolution
+					Procedure (C.2)
+TSPC_GAP_36_4	False		Central: Write to Privacy Characteristic
+					(Enable/Disable Privacy) (O)
+-------------------------------------------------------------------------------
+C.1: Mandatory if TSPC_GAP_36_1 and TSPC_GAP_30_2 are supported,
+	otherwise Excluded.
+C.2: Mandatory if TSPC_GAP_36_1 is supported, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Central GAP Characteristics
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_37_1	True (*#)	Central: Device Name (M)
+TSPC_GAP_37_2	True (*#)	Central: Appearance (M)
+-------------------------------------------------------------------------------
+
+
+		BR/EDR/LE Roles
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_38_1	False		BR/EDR/LE: Broadcaster (C.1)
+TSPC_GAP_38_2	True (*#)	BR/EDR/LE: Observer (C.1)
+TSPC_GAP_38_3	False		BR/EDR/LE: Peripheral (C.1)
+TSPC_GAP_38_4	True (*#)	BR/EDR/LE: Central (C.1)
+-------------------------------------------------------------------------------
+C.1: It is mandatory to support at least one of the defined roles.
+This table is applicable for BR/EDR/LE configurations. For LE-only
+configurations, see 'LE Roles' table for role declarations.
+-------------------------------------------------------------------------------
+
+
+		Central BR/EDR/LE Modes
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_39_1	True (*#)	Central BR/EDR/LE: Non-Discoverable Mode (C.1)
+TSPC_GAP_39_2	True (*#)	Central BR/EDR/LE: Discoverable Mode (C.2)
+TSPC_GAP_39_3	True (*#)	Central BR/EDR/LE: Non-Connectable Mode (C.3)
+TSPC_GAP_39_4	True (#)	Central BR/EDR/LE: Connectable Mode (M)
+TSPC_GAP_39_5	False		Central BR/EDR/LE: Non-Bondable Mode (C.4)
+TSPC_GAP_39_6	True (*#)	Central BR/EDR/LE: Bondable Mode (C.5)
+-------------------------------------------------------------------------------
+C.1: Mandatory if TSPC_GAP_1_1 is supported over BR/EDR, otherwise Excluded.
+C.2: Mandatory if (TSPC_GAP_1_2 or TSPC_GAP_1_3) is supported over BR/EDR,
+	otherwise Excluded.
+C.3: Mandatory if TSPC_GAP_1_4 is supported over BR/EDR, otherwise Excluded.
+C.4: Mandatory if TSPC_GAP_1_6 is supported over BR/EDR, otherwise Excluded.
+C.5: Mandatory if TSPC_GAP_1_7 is supported over BR/EDR, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Central BR/EDR/LE Idle Mode Procedures
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_40_1	True (*#)	Central BR/EDR/LE: General Discovery (C.1)
+TSPC_GAP_40_2	False		Central BR/EDR/LE: Limited Discovery (C.2)
+TSPC_GAP_40_3	True (*#)	Central BR/EDR/LE: Device Type Discovery (C.3)
+TSPC_GAP_40_4	True (*#)	Central BR/EDR/LE: Name Discovery (C.4)
+TSPC_GAP_40_5	True (*#)	Central BR/EDR/LE: Link Establishment (C.5)
+-------------------------------------------------------------------------------
+C.1: Mandatory if TSPC_GAP_3_1 is supported over BR/EDR, otherwise Excluded.
+C.2: Mandatory if TSPC_GAP_3_2 is supported over BR/EDR, otherwise Excluded.
+C.3: Mandatory if (TSPC_GAP_3_1 or TSPC_GAP_3_2) is supported over BR/EDR,
+	otherwise Excluded.
+C.4: Mandatory if TSPC_GAP_3_3 is supported over BR/EDR, otherwise Excluded.
+C.5: Mandatory if (TSPC_GAP_4_1 or TSPC_GAP_4_2) is supported over BR/EDR,
+	otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Central BR/EDR/LE Security Aspects
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_41_1	True (#)	Central BR/EDR/LE: Security Aspects (M)
+-------------------------------------------------------------------------------
+
+
+		Peripheral BR/EDR/LE Modes
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_42_1	False		Peripheral BR/EDR/LE: Non-Discoverable Mode
+				(C.1)
+TSPC_GAP_42_2	False		Peripheral BR/EDR/LE: Discoverable Mode
+				(C.2)
+TSPC_GAP_42_3	False		Peripheral BR/EDR/LE: Non-Connectable Mode
+				(C.3)
+TSPC_GAP_42_4	False (*)	Peripheral BR/EDR/LE: Connectable Mode  (M)
+TSPC_GAP_42_5	False		Peripheral BR/EDR/LE: Non-Bondable Mode (C.4)
+TSPC_GAP_42_6	False		Peripheral BR/EDR/LE: Bondable Mode (C.5)
+-------------------------------------------------------------------------------
+C.1: Mandatory if TSPC_GAP_1_1 is supported over BR/EDR, otherwise Excluded.
+C.2: Mandatory if (TSPC_GAP_1_2 or TSPC_GAP_1_3) is supported over BR/EDR,
+	otherwise Excluded.
+C.3: Mandatory if TSPC_GAP_1_4 is supported over BR/EDR, otherwise Excluded.
+C.4: Mandatory if TSPC_GAP_1_6 is supported over BR/EDR, otherwise Excluded.
+C.5: Mandatory if TSPC_GAP_1_7 is supported over BR/EDR, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
+		Peripheral BR/EDR/LE Security Aspects
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_GAP_43_1	False (*)	Peripheral BR/EDR/LE: Security Aspects (M)
+-------------------------------------------------------------------------------
+
+
+-------------------------------------------------------------------------------
+Parameter Name	Selected	Description
+-------------------------------------------------------------------------------
+TSPC_SM_1_1	False		Master Role (Initiator)
+TSPC_SM_1_2	False		Slave Role (Responder)
+TSPC_SM_2_4	False		OOB supported (O)
+TSPC_ALL	False		Turns on all
+-------------------------------------------------------------------------------
-- 
1.8.4.1


^ permalink raw reply related

* [PATCHv3 0/2] PICS for GAP and HID
From: Jakub Tyszkowski @ 2013-11-19 14:36 UTC (permalink / raw)
  To: linux-bluetooth

Please note that some PICS marked as mandatory for LE were not
selected because of Android 4.4 not supporting some LE Roles.

v3: layout changed, added: mandatory/optional/conditional
	markings and descriptions, # - not implemented mark
v2: layout changed, each parameter description added
v1: initial documents with PICS targeting Android 4.4

Jakub Tyszkowski (2):
  android: Add PTS PICS for GAP
  android: Add PTS PICS for HID

 android/pics-gap.txt | 708 +++++++++++++++++++++++++++++++++++++++++++++++++++
 android/pics-hid.txt | 285 +++++++++++++++++++++
 2 files changed, 993 insertions(+)
 create mode 100644 android/pics-gap.txt
 create mode 100644 android/pics-hid.txt

-- 
1.8.4.1


^ permalink raw reply

* [PATCH v3 6/6] android/hal: Check if command socket was shutdown by peer
From: Szymon Janc @ 2013-11-19 14:02 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1384869762-3097-1-git-send-email-szymon.janc@tieto.com>

This will allow to print proper error before exiting.
---
 android/hal-ipc.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/android/hal-ipc.c b/android/hal-ipc.c
index 5d622e1..b19704a 100644
--- a/android/hal-ipc.c
+++ b/android/hal-ipc.c
@@ -356,6 +356,12 @@ int hal_ipc_cmd(uint8_t service_id, uint8_t opcode, uint16_t len, void *param,
 		exit(EXIT_FAILURE);
 	}
 
+	/* socket was shutdown */
+	if (ret == 0) {
+		error("Command socket closed, aborting");
+		exit(EXIT_FAILURE);
+	}
+
 	memset(&msg, 0, sizeof(msg));
 	memset(&cmd, 0, sizeof(cmd));
 
-- 
1.8.4.3


^ permalink raw reply related

* [PATCH v3 5/6] android/hal-a2dp: Use generic IPC message handling for events
From: Szymon Janc @ 2013-11-19 14:02 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1384869762-3097-1-git-send-email-szymon.janc@tieto.com>

Register handlers on service init and unregister on cleanup.
---
 android/hal-a2dp.c | 41 +++++++++++++++++++++--------------------
 android/hal.h      |  1 -
 2 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/android/hal-a2dp.c b/android/hal-a2dp.c
index e9fadb7..7d91151 100644
--- a/android/hal-a2dp.c
+++ b/android/hal-a2dp.c
@@ -31,7 +31,7 @@ static bool interface_ready(void)
 	return cbs != NULL;
 }
 
-static void handle_conn_state(void *buf)
+static void handle_conn_state(void *buf, uint16_t len)
 {
 	struct hal_ev_a2dp_conn_state *ev = buf;
 
@@ -40,7 +40,7 @@ static void handle_conn_state(void *buf)
 						(bt_bdaddr_t *) (ev->bdaddr));
 }
 
-static void handle_audio_state(void *buf)
+static void handle_audio_state(void *buf, uint16_t len)
 {
 	struct hal_ev_a2dp_audio_state *ev = buf;
 
@@ -48,24 +48,20 @@ static void handle_audio_state(void *buf)
 		cbs->audio_state_cb(ev->state, (bt_bdaddr_t *)(ev->bdaddr));
 }
 
-/* will be called from notification thread context */
-void bt_notify_a2dp(uint8_t opcode, void *buf, uint16_t len)
-{
-	if (!interface_ready())
-		return;
-
-	switch (opcode) {
-	case HAL_EV_A2DP_CONN_STATE:
-		handle_conn_state(buf);
-		break;
-	case HAL_EV_A2DP_AUDIO_STATE:
-		handle_audio_state(buf);
-		break;
-	default:
-		DBG("Unhandled callback opcode=0x%x", opcode);
-		break;
-	}
-}
+/* handlers will be called from notification thread context,
+ * index in table equals to 'opcode - HAL_MINIMUM_EVENT' */
+static const struct hal_ipc_handler ev_handlers[] = {
+	{	/* HAL_EV_A2DP_CONN_STATE */
+		.handler = handle_conn_state,
+		.var_len = false,
+		.data_len = sizeof(struct hal_ev_pan_conn_state),
+	},
+	{	/* HAL_EV_A2DP_AUDIO_STATE */
+		.handler = handle_audio_state,
+		.var_len = false,
+		.data_len = sizeof(struct hal_ev_pan_ctrl_state),
+	},
+};
 
 static bt_status_t a2dp_connect(bt_bdaddr_t *bd_addr)
 {
@@ -105,6 +101,9 @@ static bt_status_t init(btav_callbacks_t *callbacks)
 
 	cbs = callbacks;
 
+	hal_ipc_register(HAL_SERVICE_ID_A2DP, ev_handlers,
+				sizeof(ev_handlers)/sizeof(ev_handlers[0]));
+
 	cmd.service_id = HAL_SERVICE_ID_A2DP;
 
 	return hal_ipc_cmd(HAL_SERVICE_ID_CORE, HAL_OP_REGISTER_MODULE,
@@ -126,6 +125,8 @@ static void cleanup()
 
 	hal_ipc_cmd(HAL_SERVICE_ID_CORE, HAL_OP_UNREGISTER_MODULE,
 					sizeof(cmd), &cmd, 0, NULL, NULL);
+
+	hal_ipc_unregister(HAL_SERVICE_ID_A2DP);
 }
 
 static btav_interface_t iface = {
diff --git a/android/hal.h b/android/hal.h
index 6bd4c5a..b475411 100644
--- a/android/hal.h
+++ b/android/hal.h
@@ -28,4 +28,3 @@ btav_interface_t *bt_get_a2dp_interface(void);
 
 void bt_thread_associate(void);
 void bt_thread_disassociate(void);
-void bt_notify_a2dp(uint8_t opcode, void *buf, uint16_t len);
-- 
1.8.4.3


^ permalink raw reply related


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