* [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