Linux bluetooth development
 help / color / mirror / Atom feed
* [RFCv2 0/2] Attribute database dump
@ 2014-06-02 13:19 Jakub Tyszkowski
  2014-06-02 13:19 ` [RFCv2 1/2] shared/gatt-db: Add databse dump Jakub Tyszkowski
  2014-06-02 13:19 ` [RFCv2 2/2] android/gatt: Add test command for database dump Jakub Tyszkowski
  0 siblings, 2 replies; 6+ messages in thread
From: Jakub Tyszkowski @ 2014-06-02 13:19 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jakub Tyszkowski

RFCv2 changes:
	* added check for not used attribute slots (in case more attributes were
		reserved using gatt_db_add_service than actually used)

RFC1 message:

This allows to dump attributes database content for debug purposes and PTS tests
needs.

Android API does not provide attribute handle information that is needes to
pass some PTS test cases. To avoid adding more and more logs to the daemon
databse, database dump is provided. This will simplify executing writes and
reads on some specific handles, which are requested by PTS and previously
required calling multiple API functions in haltest only to find proper attribute
to write to, or read from.

This dumps db in the following format:

[ att database dump start ]
attr_hnd: 00001, uuid: 2800, perm: 0000000, val_len: 00002, attr_value: 00 18                                            ..
attr_hnd: 00002, uuid: 2803, perm: 0000000, val_len: 00005, attr_value: 02 03 00 00 2a                                   ....*
attr_hnd: 00003, uuid: 2a00, perm: 0000001, val_len: 00000, attr_value: <read_cb>
.
.
.
attr_hnd: 00024, uuid: 2803, perm: 0000000, val_len: 00005, attr_value: 20 19 00 05 2a                                    ...*
attr_hnd: 00025, uuid: 2a05, perm: 0000001, val_len: 00000, attr_value:
attr_hnd: 00026, uuid: 2902, perm: 0000001, val_len: 00000, attr_value: <write_cb>
<empty>
<empty>
.
.
.
<empty>
[ att database dump end ]

Jakub Tyszkowski (2):
  shared/gatt-db: Add databse dump
  android/gatt: Add test command for database dump

 android/gatt.c       |  4 ++++
 android/hal-msg.h    |  1 +
 src/shared/gatt-db.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/shared/gatt-db.h |  1 +
 4 files changed, 58 insertions(+)

--
2.0.0

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

* [RFCv2 1/2] shared/gatt-db: Add databse dump
  2014-06-02 13:19 [RFCv2 0/2] Attribute database dump Jakub Tyszkowski
@ 2014-06-02 13:19 ` Jakub Tyszkowski
  2014-06-02 13:19 ` [RFCv2 2/2] android/gatt: Add test command for database dump Jakub Tyszkowski
  1 sibling, 0 replies; 6+ messages in thread
From: Jakub Tyszkowski @ 2014-06-02 13:19 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jakub Tyszkowski

This is usefull to execute and verify PTS test cases, and will be called
from haltest using gatt client 'test_command'.
---
 src/shared/gatt-db.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/shared/gatt-db.h |  1 +
 2 files changed, 53 insertions(+)

diff --git a/src/shared/gatt-db.c b/src/shared/gatt-db.c
index c11c5d1..7405998 100644
--- a/src/shared/gatt-db.c
+++ b/src/shared/gatt-db.c
@@ -761,3 +761,55 @@ bool gatt_db_get_attribute_permissions(struct gatt_db *db, uint16_t handle,
 	return true;
 
 }
+
+static void dump_data(const char *str, void *user_data)
+{
+	if (user_data)
+		printf("%s%s", (char *) user_data, str);
+	else
+		printf("%s", str);
+}
+
+static void dump_attribute(struct gatt_db_attribute *attr)
+{
+	char uuidstr[MAX_LEN_UUID_STR + 1];
+
+	if (!attr) {
+		util_debug(dump_data, NULL, " <empty>\n");
+		return;
+	}
+
+	bt_uuid_to_string(&attr->uuid, uuidstr, sizeof(uuidstr));
+	util_debug(dump_data, NULL,
+			"attr_hnd: %.5d, uuid: %s, perm: %.7d, val_len: %.5d, ",
+			attr->handle, uuidstr, attr->permissions,
+			attr->value_len);
+
+	if (attr->value_len) {
+		util_hexdump(':', attr->value, attr->value_len, dump_data,
+								"attr_value");
+	} else {
+		util_debug(dump_data, "attr_value:",
+					attr->read_func ? " <read_cb>" : "");
+		util_debug(dump_data, NULL,
+					attr->write_func ? " <write_cb>" : "");
+	}
+
+	util_debug(dump_data, NULL, "\n");
+}
+
+static void dump_service(void *data, void *user_data)
+{
+	struct gatt_db_service *srvc = data;
+	int i;
+
+	for (i = 0; i < srvc->num_handles; i++)
+		dump_attribute(srvc->attributes[i]);
+}
+
+void gatt_db_dump(struct gatt_db *db)
+{
+	util_debug(dump_data, NULL, "[ att database dump start ]\n");
+	queue_foreach(db->services, dump_service, NULL);
+	util_debug(dump_data, NULL, "[ att database dump end ]\n");
+}
diff --git a/src/shared/gatt-db.h b/src/shared/gatt-db.h
index a88f637..dad8b11 100644
--- a/src/shared/gatt-db.h
+++ b/src/shared/gatt-db.h
@@ -94,3 +94,4 @@ uint16_t gatt_db_get_end_handle(struct gatt_db *db, uint16_t handle);
 
 bool gatt_db_get_attribute_permissions(struct gatt_db *db, uint16_t handle,
 							uint32_t *permissions);
+void gatt_db_dump(struct gatt_db *db);
-- 
2.0.0


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

* [RFCv2 2/2] android/gatt: Add test command for database dump
  2014-06-02 13:19 [RFCv2 0/2] Attribute database dump Jakub Tyszkowski
  2014-06-02 13:19 ` [RFCv2 1/2] shared/gatt-db: Add databse dump Jakub Tyszkowski
@ 2014-06-02 13:19 ` Jakub Tyszkowski
  2014-06-02 15:05   ` Marcel Holtmann
  1 sibling, 1 reply; 6+ messages in thread
From: Jakub Tyszkowski @ 2014-06-02 13:19 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jakub Tyszkowski

With this we can check all attributes handles, uuids, permissions etc.
on demand without adding to much logs. This will help to execute and
verify some PTS test cases and debug.
---
 android/gatt.c    | 4 ++++
 android/hal-msg.h | 1 +
 2 files changed, 5 insertions(+)

diff --git a/android/gatt.c b/android/gatt.c
index 429181f..83a051b 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -3543,6 +3543,10 @@ static void handle_client_test_command(const void *buf, uint16_t len)
 		status = test_read_write(&bdaddr, &uuid, cmd->u1, cmd->u2,
 						cmd->u3, cmd->u4, cmd->u5);
 		break;
+	case GATT_CLIENT_TEST_CMD_DB_DUMP:
+		gatt_db_dump(gatt_db);
+		status = HAL_STATUS_SUCCESS;
+		break;
 	case GATT_CLIENT_TEST_CMD_PAIRING_CONFIG:
 	default:
 		status = HAL_STATUS_FAILED;
diff --git a/android/hal-msg.h b/android/hal-msg.h
index 5da62f3..ce86304 100644
--- a/android/hal-msg.h
+++ b/android/hal-msg.h
@@ -753,6 +753,7 @@ struct hal_cmd_gatt_client_set_adv_data {
 #define GATT_CLIENT_TEST_CMD_DISCOVER		0x04
 #define GATT_CLIENT_TEST_CMD_READ		0xe0
 #define GATT_CLIENT_TEST_CMD_WRITE		0xe1
+#define GATT_CLIENT_TEST_CMD_DB_DUMP		0xe2
 #define GATT_CLIENT_TEST_CMD_PAIRING_CONFIG	0xf0
 
 #define HAL_OP_GATT_CLIENT_TEST_COMMAND		0x16
-- 
2.0.0


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

* Re: [RFCv2 2/2] android/gatt: Add test command for database dump
  2014-06-02 13:19 ` [RFCv2 2/2] android/gatt: Add test command for database dump Jakub Tyszkowski
@ 2014-06-02 15:05   ` Marcel Holtmann
  2014-06-03  7:58     ` Tyszkowski Jakub
  0 siblings, 1 reply; 6+ messages in thread
From: Marcel Holtmann @ 2014-06-02 15:05 UTC (permalink / raw)
  To: Jakub Tyszkowski; +Cc: linux-bluetooth

Hi Jakub,

> With this we can check all attributes handles, uuids, permissions etc.
> on demand without adding to much logs. This will help to execute and
> verify some PTS test cases and debug.
> ---
> android/gatt.c    | 4 ++++
> android/hal-msg.h | 1 +
> 2 files changed, 5 insertions(+)
> 
> diff --git a/android/gatt.c b/android/gatt.c
> index 429181f..83a051b 100644
> --- a/android/gatt.c
> +++ b/android/gatt.c
> @@ -3543,6 +3543,10 @@ static void handle_client_test_command(const void *buf, uint16_t len)
> 		status = test_read_write(&bdaddr, &uuid, cmd->u1, cmd->u2,
> 						cmd->u3, cmd->u4, cmd->u5);
> 		break;
> +	case GATT_CLIENT_TEST_CMD_DB_DUMP:
> +		gatt_db_dump(gatt_db);
> +		status = HAL_STATUS_SUCCESS;
> +		break;
> 	case GATT_CLIENT_TEST_CMD_PAIRING_CONFIG:
> 	default:
> 		status = HAL_STATUS_FAILED;
> diff --git a/android/hal-msg.h b/android/hal-msg.h
> index 5da62f3..ce86304 100644
> --- a/android/hal-msg.h
> +++ b/android/hal-msg.h
> @@ -753,6 +753,7 @@ struct hal_cmd_gatt_client_set_adv_data {
> #define GATT_CLIENT_TEST_CMD_DISCOVER		0x04
> #define GATT_CLIENT_TEST_CMD_READ		0xe0
> #define GATT_CLIENT_TEST_CMD_WRITE		0xe1
> +#define GATT_CLIENT_TEST_CMD_DB_DUMP		0xe2
> #define GATT_CLIENT_TEST_CMD_PAIRING_CONFIG	0xf0

are these all defined by Bluedroid and Android Bluetooth Service or are some of these BlueZ specific? If so we need to comment that.

Regards

Marcel


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

* Re: [RFCv2 2/2] android/gatt: Add test command for database dump
  2014-06-02 15:05   ` Marcel Holtmann
@ 2014-06-03  7:58     ` Tyszkowski Jakub
  2014-06-03  9:24       ` Marcel Holtmann
  0 siblings, 1 reply; 6+ messages in thread
From: Tyszkowski Jakub @ 2014-06-03  7:58 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: linux-bluetooth

Hi Marcel,

> Hi Jakub,
>
>> With this we can check all attributes handles, uuids, permissions etc.
>> on demand without adding to much logs. This will help to execute and
>> verify some PTS test cases and debug.
>> ---
>> android/gatt.c    | 4 ++++
>> android/hal-msg.h | 1 +
>> 2 files changed, 5 insertions(+)
>>
>> diff --git a/android/gatt.c b/android/gatt.c
>> index 429181f..83a051b 100644
>> --- a/android/gatt.c
>> +++ b/android/gatt.c
>> @@ -3543,6 +3543,10 @@ static void handle_client_test_command(const void *buf, uint16_t len)
>> 		status = test_read_write(&bdaddr, &uuid, cmd->u1, cmd->u2,
>> 						cmd->u3, cmd->u4, cmd->u5);
>> 		break;
>> +	case GATT_CLIENT_TEST_CMD_DB_DUMP:
>> +		gatt_db_dump(gatt_db);
>> +		status = HAL_STATUS_SUCCESS;
>> +		break;
>> 	case GATT_CLIENT_TEST_CMD_PAIRING_CONFIG:
>> 	default:
>> 		status = HAL_STATUS_FAILED;
>> diff --git a/android/hal-msg.h b/android/hal-msg.h
>> index 5da62f3..ce86304 100644
>> --- a/android/hal-msg.h
>> +++ b/android/hal-msg.h
>> @@ -753,6 +753,7 @@ struct hal_cmd_gatt_client_set_adv_data {
>> #define GATT_CLIENT_TEST_CMD_DISCOVER		0x04
>> #define GATT_CLIENT_TEST_CMD_READ		0xe0
>> #define GATT_CLIENT_TEST_CMD_WRITE		0xe1
>> +#define GATT_CLIENT_TEST_CMD_DB_DUMP		0xe2
>> #define GATT_CLIENT_TEST_CMD_PAIRING_CONFIG	0xf0
>
> are these all defined by Bluedroid and Android Bluetooth Service or are some of these BlueZ specific? If so we need to comment that.

Some are defined by Android, but we added our own starting from 0xe0. I 
wonder if README entry wouldn't be better to actually comment that and 
describe parameters for commands we added, so they can be used in 
haltest without searching through the implementation.

>
> Regards
>
> Marcel
>

Regards,
Jakub

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

* Re: [RFCv2 2/2] android/gatt: Add test command for database dump
  2014-06-03  7:58     ` Tyszkowski Jakub
@ 2014-06-03  9:24       ` Marcel Holtmann
  0 siblings, 0 replies; 6+ messages in thread
From: Marcel Holtmann @ 2014-06-03  9:24 UTC (permalink / raw)
  To: Tyszkowski Jakub; +Cc: linux-bluetooth

Hi Jakub,

>>> With this we can check all attributes handles, uuids, permissions etc.
>>> on demand without adding to much logs. This will help to execute and
>>> verify some PTS test cases and debug.
>>> ---
>>> android/gatt.c    | 4 ++++
>>> android/hal-msg.h | 1 +
>>> 2 files changed, 5 insertions(+)
>>> 
>>> diff --git a/android/gatt.c b/android/gatt.c
>>> index 429181f..83a051b 100644
>>> --- a/android/gatt.c
>>> +++ b/android/gatt.c
>>> @@ -3543,6 +3543,10 @@ static void handle_client_test_command(const void *buf, uint16_t len)
>>> 		status = test_read_write(&bdaddr, &uuid, cmd->u1, cmd->u2,
>>> 						cmd->u3, cmd->u4, cmd->u5);
>>> 		break;
>>> +	case GATT_CLIENT_TEST_CMD_DB_DUMP:
>>> +		gatt_db_dump(gatt_db);
>>> +		status = HAL_STATUS_SUCCESS;
>>> +		break;
>>> 	case GATT_CLIENT_TEST_CMD_PAIRING_CONFIG:
>>> 	default:
>>> 		status = HAL_STATUS_FAILED;
>>> diff --git a/android/hal-msg.h b/android/hal-msg.h
>>> index 5da62f3..ce86304 100644
>>> --- a/android/hal-msg.h
>>> +++ b/android/hal-msg.h
>>> @@ -753,6 +753,7 @@ struct hal_cmd_gatt_client_set_adv_data {
>>> #define GATT_CLIENT_TEST_CMD_DISCOVER		0x04
>>> #define GATT_CLIENT_TEST_CMD_READ		0xe0
>>> #define GATT_CLIENT_TEST_CMD_WRITE		0xe1
>>> +#define GATT_CLIENT_TEST_CMD_DB_DUMP		0xe2
>>> #define GATT_CLIENT_TEST_CMD_PAIRING_CONFIG	0xf0
>> 
>> are these all defined by Bluedroid and Android Bluetooth Service or are some of these BlueZ specific? If so we need to comment that.
> 
> Some are defined by Android, but we added our own starting from 0xe0. I wonder if README entry wouldn't be better to actually comment that and describe parameters for commands we added, so they can be used in haltest without searching through the implementation.

the code should have a comment right there to distinguish BlueZ specific from generic ones. In addition a section in the README is a great idea.

Regards

Marcel


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

end of thread, other threads:[~2014-06-03  9:24 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-02 13:19 [RFCv2 0/2] Attribute database dump Jakub Tyszkowski
2014-06-02 13:19 ` [RFCv2 1/2] shared/gatt-db: Add databse dump Jakub Tyszkowski
2014-06-02 13:19 ` [RFCv2 2/2] android/gatt: Add test command for database dump Jakub Tyszkowski
2014-06-02 15:05   ` Marcel Holtmann
2014-06-03  7:58     ` Tyszkowski Jakub
2014-06-03  9:24       ` Marcel Holtmann

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