From 6c6424fc4e44a53522c09e8c7b7735ba5c3398f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Danis?= Date: Sat, 15 Dec 2012 09:59:47 +0100 Subject: [PATCH] device : Add EndGroupHandle key in attributes storage End group handle should also be converted/saved for each group in device's attributes file. --- doc/settings-storage.txt | 8 +++++--- src/adapter.c | 8 +++++--- src/device.c | 10 ++++++++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/doc/settings-storage.txt b/doc/settings-storage.txt index 351b17e65..11b127fd6 100644 --- a/doc/settings-storage.txt +++ b/doc/settings-storage.txt @@ -94,10 +94,12 @@ Attributes are stored using their handle as group name (decimal format). Each group contains: - UUID String 128-bit UUID of the attribute + UUID String 128-bit UUID of the attribute - Value String Value of the attribute as hexadecimal encoded - string + Value String Value of the attribute as hexadecimal encoded + string + + EndGroupHandle Integer End group handle in decimal format Sample: [1] diff --git a/src/adapter.c b/src/adapter.c index 67537901d..32826080d 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2410,7 +2410,8 @@ static gboolean record_has_uuid(const sdp_record_t *rec, } static void store_attribute_uuid(GKeyFile *key_file, uint16_t start, - char *att_uuid, uuid_t uuid) + uint16_t end, char *att_uuid, + uuid_t uuid) { char handle[6], uuid_str[33]; int i; @@ -2434,6 +2435,7 @@ static void store_attribute_uuid(GKeyFile *key_file, uint16_t start, sprintf(handle, "%hu", start); g_key_file_set_string(key_file, handle, "UUID", att_uuid); g_key_file_set_string(key_file, handle, "Value", uuid_str); + g_key_file_set_integer(key_file, handle, "EndGroupHandle", end); } static void store_sdp_record(char *local, char *peer, int handle, char *value) @@ -2526,7 +2528,7 @@ static void convert_sdp_entry(char *key, char *value, void *user_data) key_file = g_key_file_new(); g_key_file_load_from_file(key_file, filename, 0, NULL); - store_attribute_uuid(key_file, start, prim_uuid, uuid); + store_attribute_uuid(key_file, start, end, prim_uuid, uuid); data = g_key_file_to_data(key_file, &length, NULL); if (length > 0) { @@ -2588,7 +2590,7 @@ static void convert_primaries_entry(char *key, char *value, void *user_data) bt_string2uuid(&uuid, uuid_str); sdp_uuid128_to_uuid(&uuid); - store_attribute_uuid(key_file, start, prim_uuid, uuid); + store_attribute_uuid(key_file, start, end, prim_uuid, uuid); } g_strfreev(services); diff --git a/src/device.c b/src/device.c index 8f8220321..ffcf57ce9 100644 --- a/src/device.c +++ b/src/device.c @@ -1899,6 +1899,7 @@ static void load_att_info(struct btd_device *device, const gchar *local, for (handle = groups; *handle; handle++) { gboolean uuid_ok; + gint end; str = g_key_file_get_string(key_file, *handle, "UUID", NULL); if (!str) @@ -1914,8 +1915,16 @@ static void load_att_info(struct btd_device *device, const gchar *local, if (!str) continue; + end = g_key_file_get_integer(key_file, *handle, + "EndGroupHandle", NULL); + if (end == 0) { + g_free(str); + continue; + } + prim = g_new0(struct gatt_primary, 1); prim->range.start = atoi(*handle); + prim->range.end = end; switch (strlen(str)) { case 4: @@ -2499,6 +2508,7 @@ static void store_primaries_from_sdp_record(GKeyFile *key_file, g_key_file_set_string(key_file, handle, "UUID", prim_uuid); g_key_file_set_string(key_file, handle, "Value", uuid_str); + g_key_file_set_integer(key_file, handle, "EndGroupHandle", end); done: g_free(prim_uuid); -- 2.47.3