linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/11] HIDHost E2E tests and fixes
@ 2014-01-16 23:25 Ravi kumar Veeramally
  2014-01-16 23:25 ` [PATCH 01/11] android/hidhost: Fix connection state notification on profile unregister Ravi kumar Veeramally
                   ` (11 more replies)
  0 siblings, 12 replies; 15+ messages in thread
From: Ravi kumar Veeramally @ 2014-01-16 23:25 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

Patch set contains few fixes which are noticed while writing
tests and success test cases for hidhost.

Ravi kumar Veeramally (11):
  android/hidhost: Fix connection state notification on profile
    unregister
  android/hidhost: Fix miscalculation of get report event struct length
  android/hidhost: Remove unnecessary check
  android/tester: Add HIDhost Connect test
  android/tester: Add HIDhost Disconnect test
  android/tester: Add HIDhost VirtualUnplug test
  android/tester: Add HIDhost GetProtocol test
  android/tester: Add HIDhost SetProtocol test
  android/tester: Add HIDhost GetReport test
  android/tester: Add HIDhost SetReport test
  android/tester: Add HIDhost SendData test

 android/android-tester.c | 517 ++++++++++++++++++++++++++++++++++++++++++++++-
 android/hal-hidhost.c    |   3 +-
 android/hidhost.c        |  14 +-
 3 files changed, 511 insertions(+), 23 deletions(-)

-- 
1.8.3.2


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH 01/11] android/hidhost: Fix connection state notification on profile unregister
  2014-01-16 23:25 [PATCH 00/11] HIDHost E2E tests and fixes Ravi kumar Veeramally
@ 2014-01-16 23:25 ` Ravi kumar Veeramally
  2014-01-16 23:25 ` [PATCH 02/11] android/hidhost: Fix miscalculation of get report event struct length Ravi kumar Veeramally
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 15+ messages in thread
From: Ravi kumar Veeramally @ 2014-01-16 23:25 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

Issue found while writing end2end tests. Usually profile unregister is
called when final cleanup of bluetoothd. Freeing connected hid devices
through g_slist_foreach is a asynchronous call. Profile is cleaned up
and and ipc also complete cleanup. But free_hid_devices tries to notify
hal which doesn't exist that time. So behaviour is unexpected.
---
 android/hidhost.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/android/hidhost.c b/android/hidhost.c
index aed9899..c004063 100644
--- a/android/hidhost.c
+++ b/android/hidhost.c
@@ -1328,7 +1328,6 @@ 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);
 }
 
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 02/11] android/hidhost: Fix miscalculation of get report event struct length
  2014-01-16 23:25 [PATCH 00/11] HIDHost E2E tests and fixes Ravi kumar Veeramally
  2014-01-16 23:25 ` [PATCH 01/11] android/hidhost: Fix connection state notification on profile unregister Ravi kumar Veeramally
@ 2014-01-16 23:25 ` Ravi kumar Veeramally
  2014-01-20 15:22   ` Szymon Janc
  2014-01-16 23:25 ` [PATCH 03/11] android/hidhost: Remove unnecessary check Ravi kumar Veeramally
                   ` (9 subsequent siblings)
  11 siblings, 1 reply; 15+ messages in thread
From: Ravi kumar Veeramally @ 2014-01-16 23:25 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

---
 android/hal-hidhost.c | 3 ++-
 android/hidhost.c     | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/android/hal-hidhost.c b/android/hal-hidhost.c
index fd3ad2d..5445d08 100644
--- a/android/hal-hidhost.c
+++ b/android/hal-hidhost.c
@@ -73,7 +73,8 @@ static void handle_get_report(void *buf, uint16_t len)
 {
 	struct hal_ev_hidhost_get_report *ev = buf;
 
-	if (len != sizeof(*ev) + ev->len) {
+	if (len != sizeof(*ev) + sizeof(struct hal_ev_hidhost_get_report)
+								+ ev->len) {
 		error("invalid get report event, aborting");
 		exit(EXIT_FAILURE);
 	}
diff --git a/android/hidhost.c b/android/hidhost.c
index c004063..8a2668c 100644
--- a/android/hidhost.c
+++ b/android/hidhost.c
@@ -371,13 +371,14 @@ static void bt_hid_notify_get_report(struct hid_device *dev, uint8_t *buf,
 	ba2str(&dev->dst, address);
 	DBG("device %s", address);
 
-	ev_len = sizeof(*ev) + sizeof(struct hal_ev_hidhost_get_report) + 1;
+	ev_len = sizeof(*ev) + sizeof(struct hal_ev_hidhost_get_report);
 
 	if (!((buf[0] == (HID_MSG_DATA | HID_DATA_TYPE_INPUT)) ||
 			(buf[0] == (HID_MSG_DATA | HID_DATA_TYPE_OUTPUT)) ||
 			(buf[0]	== (HID_MSG_DATA | HID_DATA_TYPE_FEATURE)))) {
 		ev = g_malloc0(ev_len);
 		ev->status = buf[0];
+		ev->len = 0;
 		bdaddr2android(&dev->dst, ev->bdaddr);
 		goto send;
 	}
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 03/11] android/hidhost: Remove unnecessary check
  2014-01-16 23:25 [PATCH 00/11] HIDHost E2E tests and fixes Ravi kumar Veeramally
  2014-01-16 23:25 ` [PATCH 01/11] android/hidhost: Fix connection state notification on profile unregister Ravi kumar Veeramally
  2014-01-16 23:25 ` [PATCH 02/11] android/hidhost: Fix miscalculation of get report event struct length Ravi kumar Veeramally
@ 2014-01-16 23:25 ` Ravi kumar Veeramally
  2014-01-16 23:25 ` [PATCH 04/11] android/tester: Add HIDhost Connect test Ravi kumar Veeramally
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 15+ messages in thread
From: Ravi kumar Veeramally @ 2014-01-16 23:25 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

HID device will return unsupported or invalid response for unsupported
or invalid get/set protocol request. Need not to check prior to that.
---
 android/hidhost.c | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/android/hidhost.c b/android/hidhost.c
index 8a2668c..968b6f2 100644
--- a/android/hidhost.c
+++ b/android/hidhost.c
@@ -900,11 +900,6 @@ static void bt_hid_get_protocol(const void *buf, uint16_t len)
 
 	dev = l->data;
 
-	if (dev->boot_dev) {
-		status = HAL_STATUS_UNSUPPORTED;
-		goto failed;
-	}
-
 	hdr = HID_MSG_GET_PROTOCOL | cmd->mode;
 	fd = g_io_channel_unix_get_fd(dev->ctrl_io);
 
@@ -955,11 +950,6 @@ static void bt_hid_set_protocol(const void *buf, uint16_t len)
 
 	dev = l->data;
 
-	if (dev->boot_dev) {
-		status = HAL_STATUS_UNSUPPORTED;
-		goto failed;
-	}
-
 	hdr = HID_MSG_SET_PROTOCOL | cmd->mode;
 	fd = g_io_channel_unix_get_fd(dev->ctrl_io);
 
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 04/11] android/tester: Add HIDhost Connect test
  2014-01-16 23:25 [PATCH 00/11] HIDHost E2E tests and fixes Ravi kumar Veeramally
                   ` (2 preceding siblings ...)
  2014-01-16 23:25 ` [PATCH 03/11] android/hidhost: Remove unnecessary check Ravi kumar Veeramally
@ 2014-01-16 23:25 ` Ravi kumar Veeramally
  2014-01-16 23:25 ` [PATCH 05/11] android/tester: Add HIDhost Disconnect test Ravi kumar Veeramally
                   ` (7 subsequent siblings)
  11 siblings, 0 replies; 15+ messages in thread
From: Ravi kumar Veeramally @ 2014-01-16 23:25 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

Emulated HID SDP and L2CAP Control and Interrupt channels.
---
 android/android-tester.c | 231 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 221 insertions(+), 10 deletions(-)

diff --git a/android/android-tester.c b/android/android-tester.c
index 6f0e962..0888a68 100644
--- a/android/android-tester.c
+++ b/android/android-tester.c
@@ -69,6 +69,16 @@ struct socket_data {
 	bool test_channel;
 };
 
+struct hidhost_generic_data {
+	bthh_status_t expected_status;
+	int expected_conn_state;
+	int expected_cb_count;
+	bthh_protocol_mode_t expected_protocol_mode;
+	int expected_report;
+	bthh_callbacks_t expected_hal_cb;
+	int expected_report_size;
+};
+
 #define WAIT_FOR_SIGNAL_TIME 2 /* in seconds */
 #define EMULATOR_SIGNAL "emulator_started"
 
@@ -97,6 +107,14 @@ struct test_data {
 
 	int cb_count;
 	GSList *expected_properties_list;
+
+	/* hidhost */
+	uint16_t sdp_handle;
+	uint16_t sdp_cid;
+	uint16_t ctrl_handle;
+	uint16_t ctrl_cid;
+	uint16_t intr_handle;
+	uint16_t intr_cid;
 };
 
 static char exec_dir[PATH_MAX + 1];
@@ -1933,15 +1951,6 @@ static bt_callbacks_t bt_callbacks = {
 	.le_test_mode_cb = NULL
 };
 
-static bthh_callbacks_t bthh_callbacks = {
-	.size = sizeof(bthh_callbacks),
-	.connection_state_cb = NULL,
-	.hid_info_cb = NULL,
-	.protocol_mode_cb = NULL,
-	.idle_time_cb = NULL,
-	.get_report_cb = NULL,
-	.virtual_unplug_cb = NULL
-};
 
 static void setup(struct test_data *data)
 {
@@ -3076,7 +3085,80 @@ clean:
 		close(sock_fd);
 }
 
-static void setup_hidhost_interface(const void *test_data)
+static void hidhost_connection_state_cb(bt_bdaddr_t *bd_addr,
+						bthh_connection_state_t state)
+{
+	struct test_data *data = tester_get_data();
+	const struct hidhost_generic_data *test = data->test_data;
+
+	data->cb_count++;
+
+	if (state == BTHH_CONN_STATE_CONNECTED)
+		tester_setup_complete();
+
+	if (test && test->expected_hal_cb.connection_state_cb)
+		test->expected_hal_cb.connection_state_cb(bd_addr, state);
+}
+
+static void hidhost_virual_unplug_cb(bt_bdaddr_t *bd_addr, bthh_status_t status)
+{
+	struct test_data *data = tester_get_data();
+	const struct hidhost_generic_data *test = data->test_data;
+
+	data->cb_count++;
+
+	if (test && test->expected_hal_cb.virtual_unplug_cb)
+		test->expected_hal_cb.virtual_unplug_cb(bd_addr, status);
+}
+
+static void hidhost_hid_info_cb(bt_bdaddr_t *bd_addr, bthh_hid_info_t hid)
+{
+	struct test_data *data = tester_get_data();
+	const struct hidhost_generic_data *test = data->test_data;
+
+	data->cb_count++;
+
+	if (test && test->expected_hal_cb.hid_info_cb)
+		test->expected_hal_cb.hid_info_cb(bd_addr, hid);
+}
+
+static void hidhost_protocol_mode_cb(bt_bdaddr_t *bd_addr,
+						bthh_status_t status,
+						bthh_protocol_mode_t mode)
+{
+	struct test_data *data = tester_get_data();
+	const struct hidhost_generic_data *test = data->test_data;
+
+	data->cb_count++;
+
+	if (test && test->expected_hal_cb.protocol_mode_cb)
+		test->expected_hal_cb.protocol_mode_cb(bd_addr, status, mode);
+}
+
+static void hidhost_get_report_cb(bt_bdaddr_t *bd_addr, bthh_status_t status,
+						uint8_t *report, int size)
+{
+	struct test_data *data = tester_get_data();
+	const struct hidhost_generic_data *test = data->test_data;
+
+	data->cb_count++;
+
+	if (test && test->expected_hal_cb.get_report_cb)
+		test->expected_hal_cb.get_report_cb(bd_addr, status, report,
+									size);
+}
+
+static bthh_callbacks_t bthh_callbacks = {
+	.size = sizeof(bthh_callbacks),
+	.connection_state_cb = hidhost_connection_state_cb,
+	.hid_info_cb = hidhost_hid_info_cb,
+	.protocol_mode_cb = hidhost_protocol_mode_cb,
+	.idle_time_cb = NULL,
+	.get_report_cb = hidhost_get_report_cb,
+	.virtual_unplug_cb = hidhost_virual_unplug_cb
+};
+
+static void setup_hidhost(const void *test_data)
 {
 	struct test_data *data = tester_get_data();
 	bt_status_t status;
@@ -3105,10 +3187,135 @@ static void setup_hidhost_interface(const void *test_data)
 		tester_setup_failed();
 		return;
 	}
+}
 
+static void setup_hidhost_interface(const void *test_data)
+{
+	setup_hidhost(test_data);
 	tester_setup_complete();
 }
 
+static void hid_sdp_cid_hook_cb(const void *data, uint16_t len, void *user_data)
+{
+	struct test_data *t_data = tester_get_data();
+	struct bthost *bthost = hciemu_client_get_host(t_data->hciemu);
+	uint8_t pdu[] = { 0x07, /* PDU id */
+				0x00, 0x00, /* Transaction id */
+				0x01, 0x71, /* Response length */
+				0x01, 0x6E, /* Attributes length */
+				0x36, 0x01, 0x6b, 0x36, 0x01, 0x68, 0x09, 0x00,
+				0x00, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00,
+				0x01, 0x35, 0x03, 0x19, 0x11, 0x24, 0x09, 0x00,
+				0x04, 0x35, 0x0d, 0x35, 0x06, 0x19, 0x01, 0x00,
+				0x09, 0x00, 0x11, 0x35, 0x03, 0x19, 0x00, 0x11,
+				0x09, 0x00, 0x05, 0x35, 0x03, 0x19, 0x10, 0x02,
+				0x09, 0x00, 0x06, 0x35, 0x09, 0x09, 0x65, 0x6e,
+				0x09, 0x00, 0x6a, 0x09, 0x01, 0x00, 0x09, 0x00,
+				0x09, 0x35, 0x08, 0x35, 0x06, 0x19, 0x11, 0x24,
+				0x09, 0x01, 0x00, 0x09, 0x00, 0x0d, 0x35, 0x0f,
+				0x35, 0x0d, 0x35, 0x06, 0x19, 0x01, 0x00, 0x09,
+				0x00, 0x13, 0x35, 0x03, 0x19, 0x00, 0x11, 0x09,
+				0x01, 0x00, 0x25, 0x1e, 0x4c, 0x6f, 0x67, 0x69,
+				0x74, 0x65, 0x63, 0x68, 0x20, 0x42, 0x6c, 0x75,
+				0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x20, 0x4d,
+				0x6f, 0x75, 0x73, 0x65, 0x20, 0x4d, 0x35, 0x35,
+				0x35, 0x62, 0x09, 0x01, 0x01, 0x25, 0x0f, 0x42,
+				0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68,
+				0x20, 0x4d, 0x6f, 0x75, 0x73, 0x65, 0x09, 0x01,
+				0x02, 0x25, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x74,
+				0x65, 0x63, 0x68, 0x09, 0x02, 0x00, 0x09, 0x01,
+				0x00, 0x09, 0x02, 0x01, 0x09, 0x01, 0x11, 0x09,
+				0x02, 0x02, 0x08, 0x80, 0x09, 0x02, 0x03, 0x08,
+				0x21, 0x09, 0x02, 0x04, 0x28, 0x01, 0x09, 0x02,
+				0x05, 0x28, 0x01, 0x09, 0x02, 0x06, 0x35, 0x74,
+				0x35, 0x72, 0x08, 0x22, 0x25, 0x6e, 0x05, 0x01,
+				0x09, 0x02, 0xa1, 0x01, 0x85, 0x02, 0x09, 0x01,
+				0xa1, 0x00, 0x05, 0x09, 0x19, 0x01, 0x29, 0x08,
+				0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x08,
+				0x81, 0x02, 0x05, 0x01, 0x09, 0x30, 0x09, 0x31,
+				0x16, 0x01, 0xf8, 0x26, 0xff, 0x07, 0x75, 0x0c,
+				0x95, 0x02, 0x81, 0x06, 0x09, 0x38, 0x15, 0x81,
+				0x25, 0x7f, 0x75, 0x08, 0x95, 0x01, 0x81, 0x06,
+				0x05, 0x0c, 0x0a, 0x38, 0x02, 0x81, 0x06, 0x05,
+				0x09, 0x19, 0x09, 0x29, 0x10, 0x15, 0x00, 0x25,
+				0x01, 0x95, 0x08, 0x75, 0x01, 0x81, 0x02, 0xc0,
+				0xc0, 0x06, 0x00, 0xff, 0x09, 0x01, 0xa1, 0x01,
+				0x85, 0x10, 0x75, 0x08, 0x95, 0x06, 0x15, 0x00,
+				0x26, 0xff, 0x00, 0x09, 0x01, 0x81, 0x00, 0x09,
+				0x01, 0x91, 0x00, 0xc0, 0x09, 0x02, 0x07, 0x35,
+				0x08, 0x35, 0x06, 0x09, 0x04, 0x09, 0x09, 0x01,
+				0x00, 0x09, 0x02, 0x08, 0x28, 0x00, 0x09, 0x02,
+				0x09, 0x28, 0x01, 0x09, 0x02, 0x0a, 0x28, 0x01,
+				0x09, 0x02, 0x0b, 0x09, 0x01, 0x00, 0x09, 0x02,
+				0x0c, 0x09, 0x0c, 0x80, 0x09, 0x02, 0x0d, 0x28,
+				0x00, 0x09, 0x02, 0x0e, 0x28, 0x01,
+				0x00 /* no continuation */};
+
+	bthost_send_cid(bthost, t_data->sdp_handle, t_data->sdp_cid,
+						(void *)pdu, sizeof(pdu));
+}
+
+static void hid_sdp_search_cb(uint16_t handle, uint16_t cid, void *user_data)
+{
+	struct test_data *data = tester_get_data();
+	struct bthost *bthost = hciemu_client_get_host(data->hciemu);
+
+	data->sdp_handle = handle;
+	data->sdp_cid = cid;
+
+	bthost_add_cid_hook(bthost, handle, cid, hid_sdp_cid_hook_cb, NULL);
+}
+
+static void emu_powered_complete(uint16_t opcode, uint8_t status,
+					const void *param, uint8_t len,
+					void *user_data)
+{
+	struct test_data *data = tester_get_data();
+	const uint8_t *hid_addr = hciemu_get_client_bdaddr(data->hciemu);
+	bt_bdaddr_t bdaddr;
+	bt_status_t bt_status;
+
+	switch (opcode) {
+	case BT_HCI_CMD_WRITE_SCAN_ENABLE:
+	case BT_HCI_CMD_LE_SET_ADV_ENABLE:
+		break;
+	default:
+		return;
+	}
+
+	if (status) {
+		tester_setup_failed();
+		return;
+	}
+
+	data->cb_count = 0;
+	bdaddr2android((const bdaddr_t *) hid_addr, &bdaddr);
+	bt_status = data->if_hid->connect(&bdaddr);
+	if (bt_status != BT_STATUS_SUCCESS)
+		tester_setup_failed();
+
+}
+
+static void setup_hidhost_connect(const void *test_data)
+{
+	struct test_data *data = tester_get_data();
+	struct bthost *bthost;
+
+	setup_hidhost(test_data);
+
+	bthost = hciemu_client_get_host(data->hciemu);
+
+	/* Emulate SDP (PSM = 1) */
+	bthost_add_l2cap_server(bthost, 1, hid_sdp_search_cb, NULL);
+	/* Emulate Control Channel (PSM = 17) */
+	bthost_add_l2cap_server(bthost, 17, NULL, NULL);
+	/* Emulate Interrupt Channel (PSM = 19) */
+	bthost_add_l2cap_server(bthost, 19, NULL, NULL);
+
+	bthost_set_cmd_complete_cb(bthost, emu_powered_complete, data);
+	bthost_write_scan_enable(bthost, 0x03);
+}
+
 #define test_bredrle(name, data, test_setup, test, test_teardown) \
 	do { \
 		struct test_data *user; \
@@ -3454,5 +3661,9 @@ int main(int argc, char *argv[])
 	test_bredrle("HIDHost Init", NULL, setup_hidhost_interface,
 						test_dummy, teardown);
 
+	test_bredrle("HIDHost Connect Success",
+				NULL, setup_hidhost_connect,
+				test_dummy, teardown);
+
 	return tester_run();
 }
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 05/11] android/tester: Add HIDhost Disconnect test
  2014-01-16 23:25 [PATCH 00/11] HIDHost E2E tests and fixes Ravi kumar Veeramally
                   ` (3 preceding siblings ...)
  2014-01-16 23:25 ` [PATCH 04/11] android/tester: Add HIDhost Connect test Ravi kumar Veeramally
@ 2014-01-16 23:25 ` Ravi kumar Veeramally
  2014-01-16 23:25 ` [PATCH 06/11] android/tester: Add HIDhost VirtualUnplug test Ravi kumar Veeramally
                   ` (6 subsequent siblings)
  11 siblings, 0 replies; 15+ messages in thread
From: Ravi kumar Veeramally @ 2014-01-16 23:25 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

---
 android/android-tester.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/android/android-tester.c b/android/android-tester.c
index 0888a68..8edabb1 100644
--- a/android/android-tester.c
+++ b/android/android-tester.c
@@ -3316,6 +3316,30 @@ static void setup_hidhost_connect(const void *test_data)
 	bthost_write_scan_enable(bthost, 0x03);
 }
 
+static void hid_discon_cb(bt_bdaddr_t *bd_addr,	bthh_connection_state_t state)
+{
+	if (state == BTHH_CONN_STATE_DISCONNECTED)
+		tester_test_passed();
+}
+
+static const struct hidhost_generic_data hidhost_test_disconnect = {
+	.expected_hal_cb.connection_state_cb = hid_discon_cb,
+};
+
+static void test_hidhost_disconnect(const void *test_data)
+{
+	struct test_data *data = tester_get_data();
+	const uint8_t *hid_addr = hciemu_get_client_bdaddr(data->hciemu);
+	bt_bdaddr_t bdaddr;
+	bt_status_t bt_status;
+
+	data->cb_count = 0;
+	bdaddr2android((const bdaddr_t *) hid_addr, &bdaddr);
+	bt_status = data->if_hid->disconnect(&bdaddr);
+	if (bt_status != BT_STATUS_SUCCESS)
+		tester_test_failed();
+}
+
 #define test_bredrle(name, data, test_setup, test, test_teardown) \
 	do { \
 		struct test_data *user; \
@@ -3665,5 +3689,9 @@ int main(int argc, char *argv[])
 				NULL, setup_hidhost_connect,
 				test_dummy, teardown);
 
+	test_bredrle("HIDHost Disconnect Success",
+				&hidhost_test_disconnect, setup_hidhost_connect,
+				test_hidhost_disconnect, teardown);
+
 	return tester_run();
 }
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 06/11] android/tester: Add HIDhost VirtualUnplug test
  2014-01-16 23:25 [PATCH 00/11] HIDHost E2E tests and fixes Ravi kumar Veeramally
                   ` (4 preceding siblings ...)
  2014-01-16 23:25 ` [PATCH 05/11] android/tester: Add HIDhost Disconnect test Ravi kumar Veeramally
@ 2014-01-16 23:25 ` Ravi kumar Veeramally
  2014-01-16 23:25 ` [PATCH 07/11] android/tester: Add HIDhost GetProtocol test Ravi kumar Veeramally
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 15+ messages in thread
From: Ravi kumar Veeramally @ 2014-01-16 23:25 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

---
 android/android-tester.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/android/android-tester.c b/android/android-tester.c
index 8edabb1..2adbba1 100644
--- a/android/android-tester.c
+++ b/android/android-tester.c
@@ -3340,6 +3340,20 @@ static void test_hidhost_disconnect(const void *test_data)
 		tester_test_failed();
 }
 
+static void test_hidhost_virtual_unplug(const void *test_data)
+{
+	struct test_data *data = tester_get_data();
+	const uint8_t *hid_addr = hciemu_get_client_bdaddr(data->hciemu);
+	bt_bdaddr_t bdaddr;
+	bt_status_t bt_status;
+
+	data->cb_count = 0;
+	bdaddr2android((const bdaddr_t *) hid_addr, &bdaddr);
+	bt_status = data->if_hid->virtual_unplug(&bdaddr);
+	if (bt_status != BT_STATUS_SUCCESS)
+		tester_test_failed();
+}
+
 #define test_bredrle(name, data, test_setup, test, test_teardown) \
 	do { \
 		struct test_data *user; \
@@ -3693,5 +3707,9 @@ int main(int argc, char *argv[])
 				&hidhost_test_disconnect, setup_hidhost_connect,
 				test_hidhost_disconnect, teardown);
 
+	test_bredrle("HIDHost VirtualUnplug Success",
+				&hidhost_test_disconnect, setup_hidhost_connect,
+				test_hidhost_virtual_unplug, teardown);
+
 	return tester_run();
 }
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 07/11] android/tester: Add HIDhost GetProtocol test
  2014-01-16 23:25 [PATCH 00/11] HIDHost E2E tests and fixes Ravi kumar Veeramally
                   ` (5 preceding siblings ...)
  2014-01-16 23:25 ` [PATCH 06/11] android/tester: Add HIDhost VirtualUnplug test Ravi kumar Veeramally
@ 2014-01-16 23:25 ` Ravi kumar Veeramally
  2014-01-16 23:25 ` [PATCH 08/11] android/tester: Add HIDhost SetProtocol test Ravi kumar Veeramally
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 15+ messages in thread
From: Ravi kumar Veeramally @ 2014-01-16 23:25 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

---
 android/android-tester.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 99 insertions(+), 2 deletions(-)

diff --git a/android/android-tester.c b/android/android-tester.c
index 2adbba1..56be850 100644
--- a/android/android-tester.c
+++ b/android/android-tester.c
@@ -3195,6 +3195,64 @@ static void setup_hidhost_interface(const void *test_data)
 	tester_setup_complete();
 }
 
+#define HID_GET_REPORT_PROTOCOL		0x60
+#define HID_GET_BOOT_PROTOCOL		0x61
+
+static void hid_prepare_reply_protocol_mode(const void *data, uint16_t len)
+{
+	struct test_data *t_data = tester_get_data();
+	struct bthost *bthost = hciemu_client_get_host(t_data->hciemu);
+	uint8_t pdu[2] = { 0, 0 };
+	uint16_t pdu_len = 0;
+
+	pdu_len = 2;
+	pdu[0] = 0xa0;
+	pdu[1] = 0x00;
+
+	bthost_send_cid(bthost, t_data->ctrl_handle, t_data->ctrl_cid,
+						(void *)pdu, pdu_len);
+}
+
+static void hid_intr_cid_hook_cb(const void *data, uint16_t len,
+							void *user_data)
+{
+}
+
+static void hid_intr_connect_cb(uint16_t handle, uint16_t cid, void *user_data)
+{
+	struct test_data *data = tester_get_data();
+	struct bthost *bthost = hciemu_client_get_host(data->hciemu);
+
+	data->intr_handle = handle;
+	data->intr_cid = cid;
+
+	bthost_add_cid_hook(bthost, handle, cid, hid_intr_cid_hook_cb, NULL);
+}
+
+static void hid_ctrl_cid_hook_cb(const void *data, uint16_t len,
+							void *user_data)
+{
+	uint8_t header = ((uint8_t *) data)[0];
+
+	switch (header) {
+	case HID_GET_REPORT_PROTOCOL:
+	case HID_GET_BOOT_PROTOCOL:
+		hid_prepare_reply_protocol_mode(data, len);
+		break;
+	}
+}
+
+static void hid_ctrl_connect_cb(uint16_t handle, uint16_t cid, void *user_data)
+{
+	struct test_data *data = tester_get_data();
+	struct bthost *bthost = hciemu_client_get_host(data->hciemu);
+
+	data->ctrl_handle = handle;
+	data->ctrl_cid = cid;
+
+	bthost_add_cid_hook(bthost, handle, cid, hid_ctrl_cid_hook_cb, NULL);
+}
+
 static void hid_sdp_cid_hook_cb(const void *data, uint16_t len, void *user_data)
 {
 	struct test_data *t_data = tester_get_data();
@@ -3308,9 +3366,9 @@ static void setup_hidhost_connect(const void *test_data)
 	/* Emulate SDP (PSM = 1) */
 	bthost_add_l2cap_server(bthost, 1, hid_sdp_search_cb, NULL);
 	/* Emulate Control Channel (PSM = 17) */
-	bthost_add_l2cap_server(bthost, 17, NULL, NULL);
+	bthost_add_l2cap_server(bthost, 17, hid_ctrl_connect_cb, NULL);
 	/* Emulate Interrupt Channel (PSM = 19) */
-	bthost_add_l2cap_server(bthost, 19, NULL, NULL);
+	bthost_add_l2cap_server(bthost, 19, hid_intr_connect_cb, NULL);
 
 	bthost_set_cmd_complete_cb(bthost, emu_powered_complete, data);
 	bthost_write_scan_enable(bthost, 0x03);
@@ -3354,6 +3412,41 @@ static void test_hidhost_virtual_unplug(const void *test_data)
 		tester_test_failed();
 }
 
+static void hid_protocol_mode_cb(bt_bdaddr_t *bd_addr, bthh_status_t status,
+						bthh_protocol_mode_t mode)
+{
+	struct test_data *data = tester_get_data();
+	const struct hidhost_generic_data *test = data->test_data;
+
+	if (data->cb_count == test->expected_cb_count &&
+					status == test->expected_status &&
+					mode == test->expected_protocol_mode)
+		tester_test_passed();
+	else
+		tester_test_failed();
+}
+
+static const struct hidhost_generic_data hidhost_test_get_protocol = {
+	.expected_hal_cb.protocol_mode_cb = hid_protocol_mode_cb,
+	.expected_cb_count = 1,
+	.expected_protocol_mode = BTHH_BOOT_MODE,
+	.expected_status = BTHH_OK,
+};
+
+static void test_hidhost_get_protocol(const void *test_data)
+{
+	struct test_data *data = tester_get_data();
+	const uint8_t *hid_addr = hciemu_get_client_bdaddr(data->hciemu);
+	bt_bdaddr_t bdaddr;
+	bt_status_t bt_status;
+
+	data->cb_count = 0;
+	bdaddr2android((const bdaddr_t *) hid_addr, &bdaddr);
+	bt_status = data->if_hid->get_protocol(&bdaddr, BTHH_REPORT_MODE);
+	if (bt_status != BT_STATUS_SUCCESS)
+		tester_test_failed();
+}
+
 #define test_bredrle(name, data, test_setup, test, test_teardown) \
 	do { \
 		struct test_data *user; \
@@ -3711,5 +3804,9 @@ int main(int argc, char *argv[])
 				&hidhost_test_disconnect, setup_hidhost_connect,
 				test_hidhost_virtual_unplug, teardown);
 
+	test_bredrle("HIDHost GetProtocol Success",
+			&hidhost_test_get_protocol, setup_hidhost_connect,
+				test_hidhost_get_protocol, teardown);
+
 	return tester_run();
 }
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 08/11] android/tester: Add HIDhost SetProtocol test
  2014-01-16 23:25 [PATCH 00/11] HIDHost E2E tests and fixes Ravi kumar Veeramally
                   ` (6 preceding siblings ...)
  2014-01-16 23:25 ` [PATCH 07/11] android/tester: Add HIDhost GetProtocol test Ravi kumar Veeramally
@ 2014-01-16 23:25 ` Ravi kumar Veeramally
  2014-01-16 23:25 ` [PATCH 09/11] android/tester: Add HIDhost GetReport test Ravi kumar Veeramally
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 15+ messages in thread
From: Ravi kumar Veeramally @ 2014-01-16 23:25 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

---
 android/android-tester.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/android/android-tester.c b/android/android-tester.c
index 56be850..da1fc28 100644
--- a/android/android-tester.c
+++ b/android/android-tester.c
@@ -3197,6 +3197,8 @@ static void setup_hidhost_interface(const void *test_data)
 
 #define HID_GET_REPORT_PROTOCOL		0x60
 #define HID_GET_BOOT_PROTOCOL		0x61
+#define HID_SET_REPORT_PROTOCOL		0x70
+#define HID_SET_BOOT_PROTOCOL		0x71
 
 static void hid_prepare_reply_protocol_mode(const void *data, uint16_t len)
 {
@@ -3237,6 +3239,8 @@ static void hid_ctrl_cid_hook_cb(const void *data, uint16_t len,
 	switch (header) {
 	case HID_GET_REPORT_PROTOCOL:
 	case HID_GET_BOOT_PROTOCOL:
+	case HID_SET_REPORT_PROTOCOL:
+	case HID_SET_BOOT_PROTOCOL:
 		hid_prepare_reply_protocol_mode(data, len);
 		break;
 	}
@@ -3447,6 +3451,20 @@ static void test_hidhost_get_protocol(const void *test_data)
 		tester_test_failed();
 }
 
+static void test_hidhost_set_protocol(const void *test_data)
+{
+	struct test_data *data = tester_get_data();
+	const uint8_t *hid_addr = hciemu_get_client_bdaddr(data->hciemu);
+	bt_bdaddr_t bdaddr;
+	bt_status_t bt_status;
+
+	data->cb_count = 0;
+	bdaddr2android((const bdaddr_t *) hid_addr, &bdaddr);
+	bt_status = data->if_hid->set_protocol(&bdaddr, BTHH_REPORT_MODE);
+	if (bt_status != BT_STATUS_SUCCESS)
+		tester_test_failed();
+}
+
 #define test_bredrle(name, data, test_setup, test, test_teardown) \
 	do { \
 		struct test_data *user; \
@@ -3808,5 +3826,9 @@ int main(int argc, char *argv[])
 			&hidhost_test_get_protocol, setup_hidhost_connect,
 				test_hidhost_get_protocol, teardown);
 
+	test_bredrle("HIDHost SetProtocol Success",
+			&hidhost_test_get_protocol, setup_hidhost_connect,
+				test_hidhost_set_protocol, teardown);
+
 	return tester_run();
 }
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 09/11] android/tester: Add HIDhost GetReport test
  2014-01-16 23:25 [PATCH 00/11] HIDHost E2E tests and fixes Ravi kumar Veeramally
                   ` (7 preceding siblings ...)
  2014-01-16 23:25 ` [PATCH 08/11] android/tester: Add HIDhost SetProtocol test Ravi kumar Veeramally
@ 2014-01-16 23:25 ` Ravi kumar Veeramally
  2014-01-16 23:25 ` [PATCH 10/11] android/tester: Add HIDhost SetReport test Ravi kumar Veeramally
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 15+ messages in thread
From: Ravi kumar Veeramally @ 2014-01-16 23:25 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

---
 android/android-tester.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git a/android/android-tester.c b/android/android-tester.c
index da1fc28..f8d539d 100644
--- a/android/android-tester.c
+++ b/android/android-tester.c
@@ -3200,6 +3200,10 @@ static void setup_hidhost_interface(const void *test_data)
 #define HID_SET_REPORT_PROTOCOL		0x70
 #define HID_SET_BOOT_PROTOCOL		0x71
 
+#define HID_GET_INPUT_REPORT		0x49
+#define HID_GET_OUTPUT_REPORT		0x4a
+#define HID_GET_FEATURE_REPORT		0x4b
+
 static void hid_prepare_reply_protocol_mode(const void *data, uint16_t len)
 {
 	struct test_data *t_data = tester_get_data();
@@ -3215,6 +3219,22 @@ static void hid_prepare_reply_protocol_mode(const void *data, uint16_t len)
 						(void *)pdu, pdu_len);
 }
 
+static void hid_prepare_reply_report(const void *data, uint16_t len)
+{
+	struct test_data *t_data = tester_get_data();
+	struct bthost *bthost = hciemu_client_get_host(t_data->hciemu);
+	uint8_t pdu[3] = { 0, 0, 0 };
+	uint16_t pdu_len = 0;
+
+	pdu_len = 3;
+	pdu[0] = 0xa2;
+	pdu[1] = 0x01;
+	pdu[2] = 0x00;
+
+	bthost_send_cid(bthost, t_data->ctrl_handle, t_data->ctrl_cid,
+						(void *)pdu, pdu_len);
+}
+
 static void hid_intr_cid_hook_cb(const void *data, uint16_t len,
 							void *user_data)
 {
@@ -3243,6 +3263,11 @@ static void hid_ctrl_cid_hook_cb(const void *data, uint16_t len,
 	case HID_SET_BOOT_PROTOCOL:
 		hid_prepare_reply_protocol_mode(data, len);
 		break;
+	case HID_GET_INPUT_REPORT:
+	case HID_GET_OUTPUT_REPORT:
+	case HID_GET_FEATURE_REPORT:
+		hid_prepare_reply_report(data, len);
+		break;
 	}
 }
 
@@ -3465,6 +3490,41 @@ static void test_hidhost_set_protocol(const void *test_data)
 		tester_test_failed();
 }
 
+static void hid_get_report_cb(bt_bdaddr_t *bd_addr, bthh_status_t status,
+						uint8_t *report, int size)
+{
+	struct test_data *data = tester_get_data();
+	const struct hidhost_generic_data *test = data->test_data;
+
+	if (data->cb_count == test->expected_cb_count &&
+					status == test->expected_status &&
+					size == test->expected_report_size)
+		tester_test_passed();
+	else
+		tester_test_failed();
+}
+
+static const struct hidhost_generic_data hidhost_test_get_report = {
+	.expected_hal_cb.get_report_cb = hid_get_report_cb,
+	.expected_cb_count = 1,
+	.expected_status = BTHH_OK,
+	.expected_report_size = 2,
+};
+
+static void test_hidhost_get_report(const void *test_data)
+{
+	struct test_data *data = tester_get_data();
+	const uint8_t *hid_addr = hciemu_get_client_bdaddr(data->hciemu);
+	bt_bdaddr_t bdaddr;
+	bt_status_t bt_status;
+
+	data->cb_count = 0;
+	bdaddr2android((const bdaddr_t *) hid_addr, &bdaddr);
+	bt_status = data->if_hid->get_report(&bdaddr, BTHH_INPUT_REPORT, 1, 20);
+	if (bt_status != BT_STATUS_SUCCESS)
+		tester_test_failed();
+}
+
 #define test_bredrle(name, data, test_setup, test, test_teardown) \
 	do { \
 		struct test_data *user; \
@@ -3830,5 +3890,9 @@ int main(int argc, char *argv[])
 			&hidhost_test_get_protocol, setup_hidhost_connect,
 				test_hidhost_set_protocol, teardown);
 
+	test_bredrle("HIDHost GetReport Success",
+			&hidhost_test_get_report, setup_hidhost_connect,
+				test_hidhost_get_report, teardown);
+
 	return tester_run();
 }
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 10/11] android/tester: Add HIDhost SetReport test
  2014-01-16 23:25 [PATCH 00/11] HIDHost E2E tests and fixes Ravi kumar Veeramally
                   ` (8 preceding siblings ...)
  2014-01-16 23:25 ` [PATCH 09/11] android/tester: Add HIDhost GetReport test Ravi kumar Veeramally
@ 2014-01-16 23:25 ` Ravi kumar Veeramally
  2014-01-16 23:25 ` [PATCH 11/11] android/tester: Add HIDhost SendData test Ravi kumar Veeramally
  2014-01-20 15:30 ` [PATCH 00/11] HIDHost E2E tests and fixes Szymon Janc
  11 siblings, 0 replies; 15+ messages in thread
From: Ravi kumar Veeramally @ 2014-01-16 23:25 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

---
 android/android-tester.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/android/android-tester.c b/android/android-tester.c
index f8d539d..c79ea16 100644
--- a/android/android-tester.c
+++ b/android/android-tester.c
@@ -3204,6 +3204,10 @@ static void setup_hidhost_interface(const void *test_data)
 #define HID_GET_OUTPUT_REPORT		0x4a
 #define HID_GET_FEATURE_REPORT		0x4b
 
+#define HID_SET_INPUT_REPORT		0x51
+#define HID_SET_OUTPUT_REPORT		0x52
+#define HID_SET_FEATURE_REPORT		0x53
+
 static void hid_prepare_reply_protocol_mode(const void *data, uint16_t len)
 {
 	struct test_data *t_data = tester_get_data();
@@ -3268,6 +3272,12 @@ static void hid_ctrl_cid_hook_cb(const void *data, uint16_t len,
 	case HID_GET_FEATURE_REPORT:
 		hid_prepare_reply_report(data, len);
 		break;
+	/* HID device doesnot reply for this commads, so reaching pdu's
+	 * to hid device means assuming test passed */
+	case HID_SET_INPUT_REPORT:
+	case HID_SET_OUTPUT_REPORT:
+	case HID_SET_FEATURE_REPORT:
+		tester_test_passed();
 	}
 }
 
@@ -3525,6 +3535,21 @@ static void test_hidhost_get_report(const void *test_data)
 		tester_test_failed();
 }
 
+static void test_hidhost_set_report(const void *test_data)
+{
+	struct test_data *data = tester_get_data();
+	const uint8_t *hid_addr = hciemu_get_client_bdaddr(data->hciemu);
+	bt_bdaddr_t bdaddr;
+	bt_status_t bt_status;
+	char *buf = "010101";
+
+	data->cb_count = 0;
+	bdaddr2android((const bdaddr_t *) hid_addr, &bdaddr);
+	bt_status = data->if_hid->set_report(&bdaddr, BTHH_INPUT_REPORT, buf);
+	if (bt_status != BT_STATUS_SUCCESS)
+		tester_test_failed();
+}
+
 #define test_bredrle(name, data, test_setup, test, test_teardown) \
 	do { \
 		struct test_data *user; \
@@ -3894,5 +3919,9 @@ int main(int argc, char *argv[])
 			&hidhost_test_get_report, setup_hidhost_connect,
 				test_hidhost_get_report, teardown);
 
+	test_bredrle("HIDHost SetReport Success",
+				NULL, setup_hidhost_connect,
+				test_hidhost_set_report, teardown);
+
 	return tester_run();
 }
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 11/11] android/tester: Add HIDhost SendData test
  2014-01-16 23:25 [PATCH 00/11] HIDHost E2E tests and fixes Ravi kumar Veeramally
                   ` (9 preceding siblings ...)
  2014-01-16 23:25 ` [PATCH 10/11] android/tester: Add HIDhost SetReport test Ravi kumar Veeramally
@ 2014-01-16 23:25 ` Ravi kumar Veeramally
  2014-01-20 15:30 ` [PATCH 00/11] HIDHost E2E tests and fixes Szymon Janc
  11 siblings, 0 replies; 15+ messages in thread
From: Ravi kumar Veeramally @ 2014-01-16 23:25 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

---
 android/android-tester.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/android/android-tester.c b/android/android-tester.c
index c79ea16..2ef44ef 100644
--- a/android/android-tester.c
+++ b/android/android-tester.c
@@ -3208,6 +3208,8 @@ static void setup_hidhost_interface(const void *test_data)
 #define HID_SET_OUTPUT_REPORT		0x52
 #define HID_SET_FEATURE_REPORT		0x53
 
+#define HID_SEND_DATA			0xa2
+
 static void hid_prepare_reply_protocol_mode(const void *data, uint16_t len)
 {
 	struct test_data *t_data = tester_get_data();
@@ -3242,6 +3244,12 @@ static void hid_prepare_reply_report(const void *data, uint16_t len)
 static void hid_intr_cid_hook_cb(const void *data, uint16_t len,
 							void *user_data)
 {
+	uint8_t header = ((uint8_t *) data)[0];
+
+	switch (header) {
+	case HID_SEND_DATA:
+		tester_test_passed();
+	}
 }
 
 static void hid_intr_connect_cb(uint16_t handle, uint16_t cid, void *user_data)
@@ -3277,6 +3285,7 @@ static void hid_ctrl_cid_hook_cb(const void *data, uint16_t len,
 	case HID_SET_INPUT_REPORT:
 	case HID_SET_OUTPUT_REPORT:
 	case HID_SET_FEATURE_REPORT:
+	case HID_SEND_DATA:
 		tester_test_passed();
 	}
 }
@@ -3550,6 +3559,21 @@ static void test_hidhost_set_report(const void *test_data)
 		tester_test_failed();
 }
 
+static void test_hidhost_send_data(const void *test_data)
+{
+	struct test_data *data = tester_get_data();
+	const uint8_t *hid_addr = hciemu_get_client_bdaddr(data->hciemu);
+	bt_bdaddr_t bdaddr;
+	bt_status_t bt_status;
+	char *buf = "fe0201";
+
+	data->cb_count = 0;
+	bdaddr2android((const bdaddr_t *) hid_addr, &bdaddr);
+	bt_status = data->if_hid->send_data(&bdaddr, buf);
+	if (bt_status != BT_STATUS_SUCCESS)
+		tester_test_failed();
+}
+
 #define test_bredrle(name, data, test_setup, test, test_teardown) \
 	do { \
 		struct test_data *user; \
@@ -3923,5 +3947,9 @@ int main(int argc, char *argv[])
 				NULL, setup_hidhost_connect,
 				test_hidhost_set_report, teardown);
 
+	test_bredrle("HIDHost SendData Success",
+				NULL, setup_hidhost_connect,
+				test_hidhost_send_data, teardown);
+
 	return tester_run();
 }
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH 02/11] android/hidhost: Fix miscalculation of get report event struct length
  2014-01-16 23:25 ` [PATCH 02/11] android/hidhost: Fix miscalculation of get report event struct length Ravi kumar Veeramally
@ 2014-01-20 15:22   ` Szymon Janc
  0 siblings, 0 replies; 15+ messages in thread
From: Szymon Janc @ 2014-01-20 15:22 UTC (permalink / raw)
  To: Ravi kumar Veeramally; +Cc: linux-bluetooth

Hi Ravi,

On Friday 17 of January 2014 01:25:42 Ravi kumar Veeramally wrote:
> ---
>  android/hal-hidhost.c | 3 ++-
>  android/hidhost.c     | 3 ++-
>  2 files changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/android/hal-hidhost.c b/android/hal-hidhost.c
> index fd3ad2d..5445d08 100644
> --- a/android/hal-hidhost.c
> +++ b/android/hal-hidhost.c
> @@ -73,7 +73,8 @@ static void handle_get_report(void *buf, uint16_t len)
>  {
>  	struct hal_ev_hidhost_get_report *ev = buf;
>  
> -	if (len != sizeof(*ev) + ev->len) {
> +	if (len != sizeof(*ev) + sizeof(struct hal_ev_hidhost_get_report)
> +								+ ev->len) {

I don't understand this change. We have header and data len. There should be
no need for any extra calculations.


>  		error("invalid get report event, aborting");
>  		exit(EXIT_FAILURE);
>  	}
> diff --git a/android/hidhost.c b/android/hidhost.c
> index c004063..8a2668c 100644
> --- a/android/hidhost.c
> +++ b/android/hidhost.c
> @@ -371,13 +371,14 @@ static void bt_hid_notify_get_report(struct hid_device *dev, uint8_t *buf,
>  	ba2str(&dev->dst, address);
>  	DBG("device %s", address);
>  
> -	ev_len = sizeof(*ev) + sizeof(struct hal_ev_hidhost_get_report) + 1;
> +	ev_len = sizeof(*ev) + sizeof(struct hal_ev_hidhost_get_report);

I don't understand why there is double sizeof() in first place.(*ev is same type)

>  
>  	if (!((buf[0] == (HID_MSG_DATA | HID_DATA_TYPE_INPUT)) ||
>  			(buf[0] == (HID_MSG_DATA | HID_DATA_TYPE_OUTPUT)) ||
>  			(buf[0]	== (HID_MSG_DATA | HID_DATA_TYPE_FEATURE)))) {
>  		ev = g_malloc0(ev_len);
>  		ev->status = buf[0];
> +		ev->len = 0;
>  		bdaddr2android(&dev->dst, ev->bdaddr);
>  		goto send;
>  	}

I have a feeling that there is something wrong with ev_len calculations in
bt_hid_notify_get_report(). I'd rather prefer to have this function properly
fixed (and possibly refactored on how it handles ev data allocation).
 

-- 
Best regards, 
Szymon Janc

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 00/11] HIDHost E2E tests and fixes
  2014-01-16 23:25 [PATCH 00/11] HIDHost E2E tests and fixes Ravi kumar Veeramally
                   ` (10 preceding siblings ...)
  2014-01-16 23:25 ` [PATCH 11/11] android/tester: Add HIDhost SendData test Ravi kumar Veeramally
@ 2014-01-20 15:30 ` Szymon Janc
  2014-01-20 18:08   ` Ravi kumar Veeramally
  11 siblings, 1 reply; 15+ messages in thread
From: Szymon Janc @ 2014-01-20 15:30 UTC (permalink / raw)
  To: Ravi kumar Veeramally; +Cc: linux-bluetooth

Hi Ravi,

On Friday 17 of January 2014 01:25:40 Ravi kumar Veeramally wrote:
> Patch set contains few fixes which are noticed while writing
> tests and success test cases for hidhost.
> 
> Ravi kumar Veeramally (11):
>   android/hidhost: Fix connection state notification on profile
>     unregister
>   android/hidhost: Fix miscalculation of get report event struct length
>   android/hidhost: Remove unnecessary check
>   android/tester: Add HIDhost Connect test
>   android/tester: Add HIDhost Disconnect test
>   android/tester: Add HIDhost VirtualUnplug test
>   android/tester: Add HIDhost GetProtocol test
>   android/tester: Add HIDhost SetProtocol test
>   android/tester: Add HIDhost GetReport test
>   android/tester: Add HIDhost SetReport test
>   android/tester: Add HIDhost SendData test
> 
>  android/android-tester.c | 517 ++++++++++++++++++++++++++++++++++++++++++++++-
>  android/hal-hidhost.c    |   3 +-
>  android/hidhost.c        |  14 +-
>  3 files changed, 511 insertions(+), 23 deletions(-)
> 
> 

I've applied all patches except 2 and 9, thanks.
Please see comments for 02/11.

-- 
Best regards, 
Szymon Janc

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 00/11] HIDHost E2E tests and fixes
  2014-01-20 15:30 ` [PATCH 00/11] HIDHost E2E tests and fixes Szymon Janc
@ 2014-01-20 18:08   ` Ravi kumar Veeramally
  0 siblings, 0 replies; 15+ messages in thread
From: Ravi kumar Veeramally @ 2014-01-20 18:08 UTC (permalink / raw)
  To: Szymon Janc; +Cc: linux-bluetooth

Hi Szymon,

On 01/20/2014 05:30 PM, Szymon Janc wrote:
>   android/android-tester.c | 517 ++++++++++++++++++++++++++++++++++++++++++++++-
>   android/hal-hidhost.c    |   3 +-
>   android/hidhost.c        |  14 +-
>   3 files changed, 511 insertions(+), 23 deletions(-)
>
>
> I've applied all patches except 2 and 9, thanks.
> Please see comments for 02/11.
>
Ok, I will check what went wrong.

Thanks,
Ravi.

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2014-01-20 18:08 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-16 23:25 [PATCH 00/11] HIDHost E2E tests and fixes Ravi kumar Veeramally
2014-01-16 23:25 ` [PATCH 01/11] android/hidhost: Fix connection state notification on profile unregister Ravi kumar Veeramally
2014-01-16 23:25 ` [PATCH 02/11] android/hidhost: Fix miscalculation of get report event struct length Ravi kumar Veeramally
2014-01-20 15:22   ` Szymon Janc
2014-01-16 23:25 ` [PATCH 03/11] android/hidhost: Remove unnecessary check Ravi kumar Veeramally
2014-01-16 23:25 ` [PATCH 04/11] android/tester: Add HIDhost Connect test Ravi kumar Veeramally
2014-01-16 23:25 ` [PATCH 05/11] android/tester: Add HIDhost Disconnect test Ravi kumar Veeramally
2014-01-16 23:25 ` [PATCH 06/11] android/tester: Add HIDhost VirtualUnplug test Ravi kumar Veeramally
2014-01-16 23:25 ` [PATCH 07/11] android/tester: Add HIDhost GetProtocol test Ravi kumar Veeramally
2014-01-16 23:25 ` [PATCH 08/11] android/tester: Add HIDhost SetProtocol test Ravi kumar Veeramally
2014-01-16 23:25 ` [PATCH 09/11] android/tester: Add HIDhost GetReport test Ravi kumar Veeramally
2014-01-16 23:25 ` [PATCH 10/11] android/tester: Add HIDhost SetReport test Ravi kumar Veeramally
2014-01-16 23:25 ` [PATCH 11/11] android/tester: Add HIDhost SendData test Ravi kumar Veeramally
2014-01-20 15:30 ` [PATCH 00/11] HIDHost E2E tests and fixes Szymon Janc
2014-01-20 18:08   ` Ravi kumar Veeramally

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).