All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHv2 1/5] android/tester: Add support for GATT Notification in tester
@ 2014-09-30 11:03 Marcin Kraglak
  2014-09-30 11:03 ` [PATCHv2 2/5] android/tester: Add GATT Register For Notification Success Marcin Kraglak
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Marcin Kraglak @ 2014-09-30 11:03 UTC (permalink / raw)
  To: linux-bluetooth

Service register_for_notification and notification callbacks.
---
 android/tester-main.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++--
 android/tester-main.h | 18 ++++++++++++++++++
 2 files changed, 67 insertions(+), 2 deletions(-)

diff --git a/android/tester-main.c b/android/tester-main.c
index 5bf9096..2b9b410 100644
--- a/android/tester-main.c
+++ b/android/tester-main.c
@@ -717,6 +717,21 @@ static bool match_data(struct step *step)
 			tester_debug("Gatt write_param doesn't match");
 			return false;
 		}
+
+		if (exp->callback_result.notification_registered !=
+				step->callback_result.notification_registered) {
+			tester_debug("Gatt registered flag mismatch");
+			return false;
+		}
+
+		if (exp->callback_result.notify_params) {
+			if (memcmp(step->callback_result.notify_params,
+					exp->callback_result.notify_params,
+					sizeof(btgatt_notify_params_t))) {
+				tester_debug("Gatt notify_param doesn't match");
+				return false;
+			}
+		}
 	}
 
 	return true;
@@ -819,6 +834,9 @@ static void destroy_callback_step(void *data)
 	if (step->callback_result.write_params)
 		free(step->callback_result.write_params);
 
+	if (step->callback_result.notify_params)
+		free(step->callback_result.notify_params);
+
 	g_free(step);
 	g_atomic_int_dec_and_test(&scheduled_cbacks_num);
 }
@@ -1359,6 +1377,35 @@ static void gattc_write_descriptor_cb(int conn_id, int status,
 	schedule_callback_call(step);
 }
 
+static void gattc_register_for_notification_cb(int conn_id, int registered,
+						int status,
+						btgatt_srvc_id_t *srvc_id,
+						btgatt_gatt_id_t *char_id)
+{
+	struct step *step = g_new0(struct step, 1);
+
+	step->callback = CB_GATTC_REGISTER_FOR_NOTIFICATION;
+	step->callback_result.status = status;
+	step->callback_result.conn_id = conn_id;
+	step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id));
+	step->callback_result.characteristic = g_memdup(char_id,
+							sizeof(*char_id));
+	step->callback_result.notification_registered = registered;
+
+	schedule_callback_call(step);
+}
+
+static void gattc_notif_cb(int conn_id, btgatt_notify_params_t *p_data)
+{
+	struct step *step = g_new0(struct step, 1);
+
+	step->callback = CB_GATTC_NOTIFY;
+	step->callback_result.conn_id = conn_id;
+	step->callback_result.notify_params = g_memdup(p_data, sizeof(*p_data));
+
+	schedule_callback_call(step);
+}
+
 static void gatts_register_server_cb(int status, int server_if,
 							bt_uuid_t *app_uuid)
 {
@@ -1480,8 +1527,8 @@ static const btgatt_client_callbacks_t btgatt_client_callbacks = {
 	.get_characteristic_cb = gattc_get_characteristic_cb,
 	.get_descriptor_cb = gattc_get_descriptor_cb,
 	.get_included_service_cb = gattc_get_included_service_cb,
-	.register_for_notification_cb = NULL,
-	.notify_cb = NULL,
+	.register_for_notification_cb = gattc_register_for_notification_cb,
+	.notify_cb = gattc_notif_cb,
 	.read_characteristic_cb = gattc_read_characteristic_cb,
 	.write_characteristic_cb = gattc_write_characteristic_cb,
 	.read_descriptor_cb = gattc_read_descriptor_cb,
diff --git a/android/tester-main.h b/android/tester-main.h
index e152ff3..218bb2d 100644
--- a/android/tester-main.h
+++ b/android/tester-main.h
@@ -203,6 +203,22 @@
 		.callback_result.write_params = cb_write_data, \
 	}
 
+#define CALLBACK_GATTC_REGISTER_FOR_NOTIF(cb_res, cb_conn_id, cb_char,\
+						cb_service, cb_registered) { \
+		.callback = CB_GATTC_REGISTER_FOR_NOTIFICATION, \
+		.callback_result.conn_id = cb_conn_id, \
+		.callback_result.status = cb_res, \
+		.callback_result.service = cb_service, \
+		.callback_result.characteristic = cb_char, \
+		.callback_result.notification_registered = cb_registered \
+	}
+
+#define CALLBACK_GATTC_NOTIFY(cb_conn_id, cb_notify) { \
+		.callback = CB_GATTC_NOTIFY, \
+		.callback_result.conn_id = cb_conn_id, \
+		.callback_result.notify_params = cb_notify \
+	}
+
 #define CALLBACK_GATTC_DISCONNECT(cb_res, cb_prop, cb_conn_id, cb_client_id) { \
 		.callback = CB_GATTC_CLOSE, \
 		.callback_result.status = cb_res, \
@@ -450,6 +466,8 @@ struct bt_callback_data {
 	btgatt_srvc_id_t *included;
 	btgatt_read_params_t *read_params;
 	btgatt_write_params_t *write_params;
+	btgatt_notify_params_t *notify_params;
+	int notification_registered;
 	int char_prop;
 
 	btpan_control_state_t ctrl_state;
-- 
1.9.3


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

* [PATCHv2 2/5] android/tester: Add GATT Register For Notification Success
  2014-09-30 11:03 [PATCHv2 1/5] android/tester: Add support for GATT Notification in tester Marcin Kraglak
@ 2014-09-30 11:03 ` Marcin Kraglak
  2014-09-30 11:03 ` [PATCHv2 3/5] android/tester: Add GATT Deregister " Marcin Kraglak
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Marcin Kraglak @ 2014-09-30 11:03 UTC (permalink / raw)
  To: linux-bluetooth

Test GATT register for notification command.
---
 android/tester-gatt.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 76 insertions(+)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index 693a8a3..6f50176 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -117,6 +117,13 @@ struct write_char_data {
 	char *p_value;
 };
 
+struct notif_data {
+	int conn_id;
+	const bt_bdaddr_t *bdaddr;
+	btgatt_srvc_id_t *service;
+	btgatt_gatt_id_t *charac;
+};
+
 static bt_uuid_t client2_app_uuid = {
 	.uu = { 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
 				0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02 },
@@ -301,6 +308,13 @@ static struct write_char_data write_char_data_2 = {
 	.auth_req = 0
 };
 
+static struct notif_data notif_data_1 = {
+	.conn_id = CONN1_ID,
+	.service = &service_1,
+	.charac = &characteristic_1,
+	.bdaddr = &emu_remote_bdaddr_val,
+};
+
 struct set_read_params {
 	btgatt_read_params_t *params;
 	btgatt_srvc_id_t *srvc_id;
@@ -616,6 +630,18 @@ static struct pdu write_characteristic_3[] = {
 	end_pdu
 };
 
+static struct pdu notification_1[] = {
+	raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28),
+	raw_pdu(0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18),
+	raw_pdu(0x10, 0x11, 0x00, 0xff, 0xff, 0x00, 0x28),
+	raw_pdu(0x01, 0x11, 0x11, 0x00, 0x0a),
+	raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28),
+	raw_pdu(0x09, 0x07, 0x02, 0x00, 0x04, 0x00, 0x00, 0x19, 0x00),
+	raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28),
+	raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a),
+	end_pdu
+};
+
 static void gatt_client_register_action(void)
 {
 	struct test_data *data = tester_get_data();
@@ -836,6 +862,24 @@ static void gatt_client_write_characteristic_action(void)
 	schedule_action_verification(step);
 }
 
+static void gatt_client_register_for_notification_action(void)
+{
+	struct test_data *data = tester_get_data();
+	struct step *current_data_step = queue_peek_head(data->steps);
+	struct notif_data *notif_data = current_data_step->set_data;
+	const btgatt_client_interface_t *client = data->if_gatt->client;
+	struct step *step = g_new0(struct step, 1);
+	int status;
+
+	status = client->register_for_notification(notif_data->conn_id,
+							notif_data->bdaddr,
+							notif_data->service,
+							notif_data->charac);
+	step->action_status = status;
+
+	schedule_action_verification(step);
+}
+
 static void gatt_server_register_action(void)
 {
 	struct test_data *data = tester_get_data();
@@ -1851,6 +1895,38 @@ static struct test_case test_cases[] = {
 		ACTION_SUCCESS(bluetooth_disable_action, NULL),
 		CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
 	),
+	TEST_CASE_BREDRLE("Gatt Client - Register For Notification - Success",
+		ACTION_SUCCESS(init_pdus, notification_1),
+		ACTION_SUCCESS(bluetooth_enable_action, NULL),
+		CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON),
+		ACTION_SUCCESS(emu_setup_powered_remote_action, NULL),
+		ACTION_SUCCESS(emu_set_ssp_mode_action, NULL),
+		ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb),
+		ACTION_SUCCESS(gatt_client_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_client_start_scan_action,
+							INT_TO_PTR(APP1_ID)),
+		CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE),
+		ACTION_SUCCESS(gatt_client_stop_scan_action,
+							INT_TO_PTR(APP1_ID)),
+		ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req),
+		CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS,
+						prop_emu_remotes_default_set,
+						CONN1_ID, APP1_ID),
+		ACTION_SUCCESS(gatt_client_search_services, &search_services_1),
+		CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID),
+		ACTION_SUCCESS(gatt_client_get_characteristic_action,
+							&get_char_data_1),
+		CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS,
+				CONN1_ID, &service_1, &characteristic_1, 4),
+		ACTION_SUCCESS(gatt_client_register_for_notification_action,
+								&notif_data_1),
+		CALLBACK_GATTC_REGISTER_FOR_NOTIF(GATT_STATUS_SUCCESS, CONN1_ID,
+							&characteristic_1,
+							&service_1, 1),
+		ACTION_SUCCESS(bluetooth_disable_action, NULL),
+		CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
+	),
 
 	TEST_CASE_BREDRLE("Gatt Server - Register",
 		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
-- 
1.9.3


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

* [PATCHv2 3/5] android/tester: Add GATT Deregister For Notification Success
  2014-09-30 11:03 [PATCHv2 1/5] android/tester: Add support for GATT Notification in tester Marcin Kraglak
  2014-09-30 11:03 ` [PATCHv2 2/5] android/tester: Add GATT Register For Notification Success Marcin Kraglak
@ 2014-09-30 11:03 ` Marcin Kraglak
  2014-09-30 11:03 ` [PATCHv2 4/5] android/tester: Add GATT Notification test - Indicate Marcin Kraglak
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Marcin Kraglak @ 2014-09-30 11:03 UTC (permalink / raw)
  To: linux-bluetooth

Test GATT Client deregister for notification command.
---
 android/tester-gatt.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index 6f50176..a98c142 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -880,6 +880,24 @@ static void gatt_client_register_for_notification_action(void)
 	schedule_action_verification(step);
 }
 
+static void gatt_client_deregister_for_notification_action(void)
+{
+	struct test_data *data = tester_get_data();
+	struct step *current_data_step = queue_peek_head(data->steps);
+	struct notif_data *notif_data = current_data_step->set_data;
+	const btgatt_client_interface_t *client = data->if_gatt->client;
+	struct step *step = g_new0(struct step, 1);
+	int status;
+
+	status = client->deregister_for_notification(notif_data->conn_id,
+							notif_data->bdaddr,
+							notif_data->service,
+							notif_data->charac);
+	step->action_status = status;
+
+	schedule_action_verification(step);
+}
+
 static void gatt_server_register_action(void)
 {
 	struct test_data *data = tester_get_data();
@@ -1927,6 +1945,43 @@ static struct test_case test_cases[] = {
 		ACTION_SUCCESS(bluetooth_disable_action, NULL),
 		CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
 	),
+	TEST_CASE_BREDRLE("Gatt Client - Deregister For Notification - Success",
+		ACTION_SUCCESS(init_pdus, notification_1),
+		ACTION_SUCCESS(bluetooth_enable_action, NULL),
+		CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON),
+		ACTION_SUCCESS(emu_setup_powered_remote_action, NULL),
+		ACTION_SUCCESS(emu_set_ssp_mode_action, NULL),
+		ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb),
+		ACTION_SUCCESS(gatt_client_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_client_start_scan_action,
+							INT_TO_PTR(APP1_ID)),
+		CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE),
+		ACTION_SUCCESS(gatt_client_stop_scan_action,
+							INT_TO_PTR(APP1_ID)),
+		ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req),
+		CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS,
+						prop_emu_remotes_default_set,
+						CONN1_ID, APP1_ID),
+		ACTION_SUCCESS(gatt_client_search_services, &search_services_1),
+		CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID),
+		ACTION_SUCCESS(gatt_client_get_characteristic_action,
+							&get_char_data_1),
+		CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS,
+				CONN1_ID, &service_1, &characteristic_1, 4),
+		ACTION_SUCCESS(gatt_client_register_for_notification_action,
+								&notif_data_1),
+		CALLBACK_GATTC_REGISTER_FOR_NOTIF(GATT_STATUS_SUCCESS, CONN1_ID,
+							&characteristic_1,
+							&service_1, 1),
+		ACTION_SUCCESS(gatt_client_deregister_for_notification_action,
+								&notif_data_1),
+		CALLBACK_GATTC_REGISTER_FOR_NOTIF(GATT_STATUS_SUCCESS, CONN1_ID,
+							&characteristic_1,
+							&service_1, 0),
+		ACTION_SUCCESS(bluetooth_disable_action, NULL),
+		CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
+	),
 
 	TEST_CASE_BREDRLE("Gatt Server - Register",
 		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
-- 
1.9.3


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

* [PATCHv2 4/5] android/tester: Add GATT Notification test - Indicate
  2014-09-30 11:03 [PATCHv2 1/5] android/tester: Add support for GATT Notification in tester Marcin Kraglak
  2014-09-30 11:03 ` [PATCHv2 2/5] android/tester: Add GATT Register For Notification Success Marcin Kraglak
  2014-09-30 11:03 ` [PATCHv2 3/5] android/tester: Add GATT Deregister " Marcin Kraglak
@ 2014-09-30 11:03 ` Marcin Kraglak
  2014-09-30 11:03 ` [PATCHv2 5/5] android/tester: Add GATT Notification test - Notify Marcin Kraglak
  2014-10-02 11:49 ` [PATCHv2 1/5] android/tester: Add support for GATT Notification in tester Szymon Janc
  4 siblings, 0 replies; 6+ messages in thread
From: Marcin Kraglak @ 2014-09-30 11:03 UTC (permalink / raw)
  To: linux-bluetooth

Test receiving notifications from remote device.
---
 android/tester-gatt.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 119 insertions(+)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index a98c142..06623e1 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -231,6 +231,7 @@ static btgatt_gatt_id_t desc_2 = {
 
 static btgatt_read_params_t read_params_1;
 static btgatt_write_params_t write_params_1;
+static btgatt_notify_params_t notify_params_1;
 
 static struct get_char_data get_char_data_1 = {
 	.conn_id = CONN1_ID,
@@ -334,6 +335,16 @@ struct set_write_params {
 	uint8_t status;
 };
 
+struct set_notify_params {
+	btgatt_notify_params_t *params;
+	uint8_t *value;
+	uint16_t len;
+	uint8_t is_notify;
+	btgatt_srvc_id_t *srvc_id;
+	btgatt_gatt_id_t *char_id;
+	bt_bdaddr_t *bdaddr;
+};
+
 static uint8_t value_1[] = {0x01};
 
 static struct set_read_params set_read_param_1 = {
@@ -406,6 +417,16 @@ static struct set_write_params set_write_param_3 = {
 	.status = 0x01
 };
 
+static struct set_notify_params set_notify_param_1 = {
+	.params = &notify_params_1,
+	.value = value_1,
+	.len = sizeof(value_1),
+	.is_notify = 0,
+	.srvc_id = &service_1,
+	.char_id = &characteristic_1,
+	.bdaddr = &emu_remote_bdaddr_val
+};
+
 static struct pdu search_service[] = {
 	raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28),
 	raw_pdu(0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18),
@@ -642,6 +663,20 @@ static struct pdu notification_1[] = {
 	end_pdu
 };
 
+static struct pdu notification_2[] = {
+	raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28),
+	raw_pdu(0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18),
+	raw_pdu(0x10, 0x11, 0x00, 0xff, 0xff, 0x00, 0x28),
+	raw_pdu(0x01, 0x11, 0x11, 0x00, 0x0a),
+	raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28),
+	raw_pdu(0x09, 0x07, 0x02, 0x00, 0x04, 0x00, 0x00, 0x19, 0x00),
+	raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28),
+	raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a),
+	raw_pdu(0x1d, 0x03, 0x00, 0x01),
+	raw_pdu(0x1e),
+	end_pdu
+};
+
 static void gatt_client_register_action(void)
 {
 	struct test_data *data = tester_get_data();
@@ -978,6 +1013,25 @@ static void gatt_cid_hook_cb(const void *data, uint16_t len, void *user_data)
 	}
 }
 
+static void gatt_remote_send_frame_action(void)
+{
+	struct test_data *t_data = tester_get_data();
+	struct bthost *bthost = hciemu_client_get_host(t_data->hciemu);
+	struct pdu *gatt_pdu = queue_pop_head(t_data->pdus);
+	struct step *step = g_new0(struct step, 1);
+
+	if (!gatt_pdu || !gatt_pdu->data) {
+		tester_print("No frame to send");
+		step->action_status = BT_STATUS_FAIL;
+	} else {
+		bthost_send_cid(bthost, cid_data.handle, cid_data.cid,
+						gatt_pdu->data, gatt_pdu->size);
+		step->action_status = BT_STATUS_SUCCESS;
+	}
+
+	schedule_action_verification(step);
+}
+
 static void gatt_conn_cb(uint16_t handle, void *user_data)
 {
 	struct test_data *data = tester_get_data();
@@ -1095,6 +1149,36 @@ static void init_write_params_action(void)
 	schedule_action_verification(step);
 }
 
+static void init_notify_params_action(void)
+{
+	struct test_data *data = tester_get_data();
+	struct step *current_data_step = queue_peek_head(data->steps);
+	struct step *step = g_new0(struct step, 1);
+	struct set_notify_params *set_param_data = current_data_step->set_data;
+	btgatt_notify_params_t *param = set_param_data->params;
+
+	memset(param, 0, sizeof(*param));
+
+	if (set_param_data->srvc_id)
+		memcpy(&param->srvc_id, set_param_data->srvc_id,
+						sizeof(btgatt_srvc_id_t));
+
+	if (set_param_data->char_id)
+		memcpy(&param->char_id, set_param_data->char_id,
+						sizeof(btgatt_gatt_id_t));
+
+	param->len = set_param_data->len;
+	param->is_notify = set_param_data->is_notify;
+
+	memcpy(&param->bda, set_param_data->bdaddr, sizeof(bt_bdaddr_t));
+	if (param->len != 0)
+		memcpy(&param->value, set_param_data->value, param->len);
+
+	step->action_status = BT_STATUS_SUCCESS;
+
+	schedule_action_verification(step);
+}
+
 static struct test_case test_cases[] = {
 	TEST_CASE_BREDRLE("Gatt Init",
 		ACTION_SUCCESS(dummy_action, NULL),
@@ -1982,6 +2066,41 @@ static struct test_case test_cases[] = {
 		ACTION_SUCCESS(bluetooth_disable_action, NULL),
 		CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
 	),
+	TEST_CASE_BREDRLE("Gatt Client - Register For Notification - Indicate",
+		ACTION_SUCCESS(init_pdus, notification_2),
+		ACTION_SUCCESS(init_notify_params_action, &set_notify_param_1),
+		ACTION_SUCCESS(bluetooth_enable_action, NULL),
+		CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON),
+		ACTION_SUCCESS(emu_setup_powered_remote_action, NULL),
+		ACTION_SUCCESS(emu_set_ssp_mode_action, NULL),
+		ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb),
+		ACTION_SUCCESS(gatt_client_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_client_start_scan_action,
+							INT_TO_PTR(APP1_ID)),
+		CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE),
+		ACTION_SUCCESS(gatt_client_stop_scan_action,
+							INT_TO_PTR(APP1_ID)),
+		ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req),
+		CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS,
+						prop_emu_remotes_default_set,
+						CONN1_ID, APP1_ID),
+		ACTION_SUCCESS(gatt_client_search_services, &search_services_1),
+		CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID),
+		ACTION_SUCCESS(gatt_client_get_characteristic_action,
+							&get_char_data_1),
+		CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS,
+				CONN1_ID, &service_1, &characteristic_1, 4),
+		ACTION_SUCCESS(gatt_client_register_for_notification_action,
+								&notif_data_1),
+		CALLBACK_GATTC_REGISTER_FOR_NOTIF(GATT_STATUS_SUCCESS, CONN1_ID,
+							&characteristic_1,
+							&service_1, 1),
+		ACTION_SUCCESS(gatt_remote_send_frame_action, NULL),
+		CALLBACK_GATTC_NOTIFY(CONN1_ID, &notify_params_1),
+		ACTION_SUCCESS(bluetooth_disable_action, NULL),
+		CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
+	),
 
 	TEST_CASE_BREDRLE("Gatt Server - Register",
 		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
-- 
1.9.3


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

* [PATCHv2 5/5] android/tester: Add GATT Notification test - Notify
  2014-09-30 11:03 [PATCHv2 1/5] android/tester: Add support for GATT Notification in tester Marcin Kraglak
                   ` (2 preceding siblings ...)
  2014-09-30 11:03 ` [PATCHv2 4/5] android/tester: Add GATT Notification test - Indicate Marcin Kraglak
@ 2014-09-30 11:03 ` Marcin Kraglak
  2014-10-02 11:49 ` [PATCHv2 1/5] android/tester: Add support for GATT Notification in tester Szymon Janc
  4 siblings, 0 replies; 6+ messages in thread
From: Marcin Kraglak @ 2014-09-30 11:03 UTC (permalink / raw)
  To: linux-bluetooth

Test receiving notifications in GATT Client.
---
 android/tester-gatt.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)

diff --git a/android/tester-gatt.c b/android/tester-gatt.c
index 06623e1..33febb3 100644
--- a/android/tester-gatt.c
+++ b/android/tester-gatt.c
@@ -427,6 +427,16 @@ static struct set_notify_params set_notify_param_1 = {
 	.bdaddr = &emu_remote_bdaddr_val
 };
 
+static struct set_notify_params set_notify_param_2 = {
+	.params = &notify_params_1,
+	.value = value_1,
+	.len = sizeof(value_1),
+	.is_notify = 1,
+	.srvc_id = &service_1,
+	.char_id = &characteristic_1,
+	.bdaddr = &emu_remote_bdaddr_val
+};
+
 static struct pdu search_service[] = {
 	raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28),
 	raw_pdu(0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18),
@@ -677,6 +687,19 @@ static struct pdu notification_2[] = {
 	end_pdu
 };
 
+static struct pdu notification_3[] = {
+	raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28),
+	raw_pdu(0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18),
+	raw_pdu(0x10, 0x11, 0x00, 0xff, 0xff, 0x00, 0x28),
+	raw_pdu(0x01, 0x11, 0x11, 0x00, 0x0a),
+	raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28),
+	raw_pdu(0x09, 0x07, 0x02, 0x00, 0x04, 0x00, 0x00, 0x19, 0x00),
+	raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28),
+	raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a),
+	raw_pdu(0x1b, 0x03, 0x00, 0x01),
+	end_pdu
+};
+
 static void gatt_client_register_action(void)
 {
 	struct test_data *data = tester_get_data();
@@ -2101,6 +2124,41 @@ static struct test_case test_cases[] = {
 		ACTION_SUCCESS(bluetooth_disable_action, NULL),
 		CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
 	),
+	TEST_CASE_BREDRLE("Gatt Client - Register For Notification - Notify",
+		ACTION_SUCCESS(init_pdus, notification_3),
+		ACTION_SUCCESS(init_notify_params_action, &set_notify_param_2),
+		ACTION_SUCCESS(bluetooth_enable_action, NULL),
+		CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON),
+		ACTION_SUCCESS(emu_setup_powered_remote_action, NULL),
+		ACTION_SUCCESS(emu_set_ssp_mode_action, NULL),
+		ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb),
+		ACTION_SUCCESS(gatt_client_register_action, &app1_uuid),
+		CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS),
+		ACTION_SUCCESS(gatt_client_start_scan_action,
+							INT_TO_PTR(APP1_ID)),
+		CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE),
+		ACTION_SUCCESS(gatt_client_stop_scan_action,
+							INT_TO_PTR(APP1_ID)),
+		ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req),
+		CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS,
+						prop_emu_remotes_default_set,
+						CONN1_ID, APP1_ID),
+		ACTION_SUCCESS(gatt_client_search_services, &search_services_1),
+		CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID),
+		ACTION_SUCCESS(gatt_client_get_characteristic_action,
+							&get_char_data_1),
+		CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS,
+				CONN1_ID, &service_1, &characteristic_1, 4),
+		ACTION_SUCCESS(gatt_client_register_for_notification_action,
+								&notif_data_1),
+		CALLBACK_GATTC_REGISTER_FOR_NOTIF(GATT_STATUS_SUCCESS, CONN1_ID,
+							&characteristic_1,
+							&service_1, 1),
+		ACTION_SUCCESS(gatt_remote_send_frame_action, NULL),
+		CALLBACK_GATTC_NOTIFY(CONN1_ID, &notify_params_1),
+		ACTION_SUCCESS(bluetooth_disable_action, NULL),
+		CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF),
+	),
 
 	TEST_CASE_BREDRLE("Gatt Server - Register",
 		ACTION_SUCCESS(gatt_server_register_action, &app1_uuid),
-- 
1.9.3


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

* Re: [PATCHv2 1/5] android/tester: Add support for GATT Notification in tester
  2014-09-30 11:03 [PATCHv2 1/5] android/tester: Add support for GATT Notification in tester Marcin Kraglak
                   ` (3 preceding siblings ...)
  2014-09-30 11:03 ` [PATCHv2 5/5] android/tester: Add GATT Notification test - Notify Marcin Kraglak
@ 2014-10-02 11:49 ` Szymon Janc
  4 siblings, 0 replies; 6+ messages in thread
From: Szymon Janc @ 2014-10-02 11:49 UTC (permalink / raw)
  To: Marcin Kraglak; +Cc: linux-bluetooth

Hi Marcin,

On Tuesday 30 of September 2014 13:03:02 Marcin Kraglak wrote:
> Service register_for_notification and notification callbacks.
> ---
>  android/tester-main.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++--
>  android/tester-main.h | 18 ++++++++++++++++++
>  2 files changed, 67 insertions(+), 2 deletions(-)
> 
> diff --git a/android/tester-main.c b/android/tester-main.c
> index 5bf9096..2b9b410 100644
> --- a/android/tester-main.c
> +++ b/android/tester-main.c
> @@ -717,6 +717,21 @@ static bool match_data(struct step *step)
>  			tester_debug("Gatt write_param doesn't match");
>  			return false;
>  		}
> +
> +		if (exp->callback_result.notification_registered !=
> +				step->callback_result.notification_registered) {
> +			tester_debug("Gatt registered flag mismatch");
> +			return false;
> +		}
> +
> +		if (exp->callback_result.notify_params) {
> +			if (memcmp(step->callback_result.notify_params,
> +					exp->callback_result.notify_params,
> +					sizeof(btgatt_notify_params_t))) {
> +				tester_debug("Gatt notify_param doesn't match");
> +				return false;
> +			}
> +		}
>  	}
>  
>  	return true;
> @@ -819,6 +834,9 @@ static void destroy_callback_step(void *data)
>  	if (step->callback_result.write_params)
>  		free(step->callback_result.write_params);
>  
> +	if (step->callback_result.notify_params)
> +		free(step->callback_result.notify_params);
> +
>  	g_free(step);
>  	g_atomic_int_dec_and_test(&scheduled_cbacks_num);
>  }
> @@ -1359,6 +1377,35 @@ static void gattc_write_descriptor_cb(int conn_id, int status,
>  	schedule_callback_call(step);
>  }
>  
> +static void gattc_register_for_notification_cb(int conn_id, int registered,
> +						int status,
> +						btgatt_srvc_id_t *srvc_id,
> +						btgatt_gatt_id_t *char_id)
> +{
> +	struct step *step = g_new0(struct step, 1);
> +
> +	step->callback = CB_GATTC_REGISTER_FOR_NOTIFICATION;
> +	step->callback_result.status = status;
> +	step->callback_result.conn_id = conn_id;
> +	step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id));
> +	step->callback_result.characteristic = g_memdup(char_id,
> +							sizeof(*char_id));
> +	step->callback_result.notification_registered = registered;
> +
> +	schedule_callback_call(step);
> +}
> +
> +static void gattc_notif_cb(int conn_id, btgatt_notify_params_t *p_data)
> +{
> +	struct step *step = g_new0(struct step, 1);
> +
> +	step->callback = CB_GATTC_NOTIFY;
> +	step->callback_result.conn_id = conn_id;
> +	step->callback_result.notify_params = g_memdup(p_data, sizeof(*p_data));
> +
> +	schedule_callback_call(step);
> +}
> +
>  static void gatts_register_server_cb(int status, int server_if,
>  							bt_uuid_t *app_uuid)
>  {
> @@ -1480,8 +1527,8 @@ static const btgatt_client_callbacks_t btgatt_client_callbacks = {
>  	.get_characteristic_cb = gattc_get_characteristic_cb,
>  	.get_descriptor_cb = gattc_get_descriptor_cb,
>  	.get_included_service_cb = gattc_get_included_service_cb,
> -	.register_for_notification_cb = NULL,
> -	.notify_cb = NULL,
> +	.register_for_notification_cb = gattc_register_for_notification_cb,
> +	.notify_cb = gattc_notif_cb,
>  	.read_characteristic_cb = gattc_read_characteristic_cb,
>  	.write_characteristic_cb = gattc_write_characteristic_cb,
>  	.read_descriptor_cb = gattc_read_descriptor_cb,
> diff --git a/android/tester-main.h b/android/tester-main.h
> index e152ff3..218bb2d 100644
> --- a/android/tester-main.h
> +++ b/android/tester-main.h
> @@ -203,6 +203,22 @@
>  		.callback_result.write_params = cb_write_data, \
>  	}
>  
> +#define CALLBACK_GATTC_REGISTER_FOR_NOTIF(cb_res, cb_conn_id, cb_char,\
> +						cb_service, cb_registered) { \
> +		.callback = CB_GATTC_REGISTER_FOR_NOTIFICATION, \
> +		.callback_result.conn_id = cb_conn_id, \
> +		.callback_result.status = cb_res, \
> +		.callback_result.service = cb_service, \
> +		.callback_result.characteristic = cb_char, \
> +		.callback_result.notification_registered = cb_registered \
> +	}
> +
> +#define CALLBACK_GATTC_NOTIFY(cb_conn_id, cb_notify) { \
> +		.callback = CB_GATTC_NOTIFY, \
> +		.callback_result.conn_id = cb_conn_id, \
> +		.callback_result.notify_params = cb_notify \
> +	}
> +
>  #define CALLBACK_GATTC_DISCONNECT(cb_res, cb_prop, cb_conn_id, cb_client_id) { \
>  		.callback = CB_GATTC_CLOSE, \
>  		.callback_result.status = cb_res, \
> @@ -450,6 +466,8 @@ struct bt_callback_data {
>  	btgatt_srvc_id_t *included;
>  	btgatt_read_params_t *read_params;
>  	btgatt_write_params_t *write_params;
> +	btgatt_notify_params_t *notify_params;
> +	int notification_registered;
>  	int char_prop;
>  
>  	btpan_control_state_t ctrl_state;

This needs to be rebased. 

-- 
Best regards, 
Szymon Janc

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

end of thread, other threads:[~2014-10-02 11:49 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-30 11:03 [PATCHv2 1/5] android/tester: Add support for GATT Notification in tester Marcin Kraglak
2014-09-30 11:03 ` [PATCHv2 2/5] android/tester: Add GATT Register For Notification Success Marcin Kraglak
2014-09-30 11:03 ` [PATCHv2 3/5] android/tester: Add GATT Deregister " Marcin Kraglak
2014-09-30 11:03 ` [PATCHv2 4/5] android/tester: Add GATT Notification test - Indicate Marcin Kraglak
2014-09-30 11:03 ` [PATCHv2 5/5] android/tester: Add GATT Notification test - Notify Marcin Kraglak
2014-10-02 11:49 ` [PATCHv2 1/5] android/tester: Add support for GATT Notification in tester Szymon Janc

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.