From: Santiago Carot-Nemesio <sancane@gmail.com>
To: linux-bluetooth@vger.kernel.org
Cc: Santiago Carot-Nemesio <sancane@gmail.com>
Subject: [PATCH 7/8] attrib-server: Allocate 128-bits UUIDs using highest available handlers
Date: Wed, 25 Jan 2012 14:12:40 +0100 [thread overview]
Message-ID: <1327497161-14764-8-git-send-email-sancane@gmail.com> (raw)
In-Reply-To: <1327497161-14764-7-git-send-email-sancane@gmail.com>
128-uuids services are grouped at the end of the handlers database list.
This group grows from the highest handlers toward lowers handlers
until the whole range is used or the last 16 bit-uuid service is reached.
---
src/attrib-server.c | 42 +++++++++++++++++++++++++++++++++++++++++-
1 files changed, 41 insertions(+), 1 deletions(-)
diff --git a/src/attrib-server.c b/src/attrib-server.c
index 3f72ff8..46448c0 100644
--- a/src/attrib-server.c
+++ b/src/attrib-server.c
@@ -1318,7 +1318,47 @@ static uint16_t find_uuid16_avail(struct btd_adapter *adapter, uint16_t nitems)
static uint16_t find_uuid128_avail(struct btd_adapter *adapter, uint16_t nitems)
{
- /* TODO: Allocate 128 uuids at the end of the list */
+ uint16_t handle = 0, end = 0xffff;
+ struct gatt_server *server;
+ GList *dl;
+ GSList *l;
+
+ l = g_slist_find_custom(servers, adapter, adapter_cmp);
+ if (l == NULL)
+ return 0;
+
+ server = l->data;
+ if (server->database == NULL)
+ return 0xffff - nitems + 1;
+
+ for (dl = g_list_last(server->database); dl; dl = dl->prev) {
+ struct attribute *a = dl->data;
+
+ if (handle == 0)
+ handle = a->handle;
+
+ if (bt_uuid_cmp(&a->uuid, &prim_uuid) != 0 &&
+ bt_uuid_cmp(&a->uuid, &snd_uuid) != 0)
+ continue;
+
+ if (end - handle >= nitems)
+ return end - nitems + 1;
+
+ if (a->len == 2) {
+ /* 16 bit UUID service definition */
+ return 0;
+ }
+
+ if (a->handle == 0x0001)
+ return 0;
+
+ end = a->handle - 1;
+ handle = 0;
+ }
+
+ if (end - 0x0001 >= nitems)
+ return end - nitems + 1;
+
return 0;
}
--
1.7.8.4
next prev parent reply other threads:[~2012-01-25 13:12 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-25 13:12 GATT improvements v3 Santiago Carot-Nemesio
2012-01-25 13:12 ` [PATCH 1/8] gatt-service: Add support for 128-bit Bluetooth UUIDs Santiago Carot-Nemesio
2012-01-25 13:12 ` [PATCH 2/8] gatt-service: Move va_end just after processing the argument list Santiago Carot-Nemesio
2012-01-25 13:12 ` [PATCH 3/8] gatt-service: Provide service uuid in attrib_db_find_avail function Santiago Carot-Nemesio
2012-01-25 13:12 ` [PATCH 4/8] attrib-server: Allocate 16-bits UUIDS at the begining of the list Santiago Carot-Nemesio
2012-01-25 13:12 ` [PATCH 5/8] attrib-server: Set database uuids as a double linked list Santiago Carot-Nemesio
2012-01-25 13:12 ` [PATCH 6/8] glib-compat: Add g_list_free_full to deal with issues in old GLib versions Santiago Carot-Nemesio
2012-01-25 13:12 ` Santiago Carot-Nemesio [this message]
2012-01-25 13:12 ` [PATCH 8/8] gatt-example: Fix g_assert checks when an uint16_t value overflows Santiago Carot-Nemesio
2012-02-03 8:37 ` GATT improvements v3 Santiago Carot
2012-02-03 18:48 ` Johan Hedberg
-- strict thread matches above, loose matches on Subject: below --
2012-01-25 10:03 GATT improvements v2 Santiago Carot-Nemesio
2012-01-25 10:03 ` [PATCH 1/8] gatt-service: Add support for 128-bit Bluetooth UUIDs Santiago Carot-Nemesio
2012-01-25 10:03 ` [PATCH 2/8] gatt-service: Move va_end just after processing the argument list Santiago Carot-Nemesio
2012-01-25 10:03 ` [PATCH 3/8] gatt-service: Provide service uuid in attrib_db_find_avail function Santiago Carot-Nemesio
2012-01-25 10:03 ` [PATCH 4/8] attrib-server: Allocate 16-bits UUIDS at the begining of the list Santiago Carot-Nemesio
2012-01-25 10:03 ` [PATCH 5/8] attrib-server: Set database uuids as a double linked list Santiago Carot-Nemesio
2012-01-25 10:03 ` [PATCH 6/8] glib-compat: Add g_list_free_full to deal with issues in old GLib versions Santiago Carot-Nemesio
2012-01-25 10:03 ` [PATCH 7/8] attrib-server: Allocate 128-bits UUIDs using highest available handlers Santiago Carot-Nemesio
2012-01-24 11:06 GATT service improvements Santiago Carot-Nemesio
2012-01-24 11:06 ` [PATCH 1/8] gatt-service: Add support for 128-bit Bluetooth UUIDs Santiago Carot-Nemesio
2012-01-24 11:06 ` [PATCH 2/8] gatt-service: Move va_end just after processing the argument list Santiago Carot-Nemesio
2012-01-24 11:06 ` [PATCH 3/8] gatt-service: Provide service uuid in attrib_db_find_avail function Santiago Carot-Nemesio
2012-01-24 11:06 ` [PATCH 4/8] attrib-server: Allocate 16-bits UUIDS at the begining of the list Santiago Carot-Nemesio
2012-01-24 11:06 ` [PATCH 5/8] attrib-server: Set database uuids as a double linked list Santiago Carot-Nemesio
2012-01-24 11:06 ` [PATCH 6/8] glib-compat: Add g_list_free_full to deal with issues in old GLib versions Santiago Carot-Nemesio
2012-01-24 11:06 ` [PATCH 7/8] attrib-server: Allocate 128-bits UUIDs using highest available handlers Santiago Carot-Nemesio
2012-01-24 13:48 ` Anderson Lizardo
2012-01-24 15:49 ` Santiago Carot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1327497161-14764-8-git-send-email-sancane@gmail.com \
--to=sancane@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).