Re: [PATCH 7/8] attrib-server: Allocate 128-bits UUIDs using highest available handlers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Anderson,

2012/1/24 Anderson Lizardo <anderson.lizardo@xxxxxxxxxxxxx>:
> Hi Santiago,
>
> On Tue, Jan 24, 2012 at 7:06 AM, Santiago Carot-Nemesio
> <sancane@xxxxxxxxx> wrote:
>> 128-uuids services are grouped at the end of the handlers database list.
>> This group grows up 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 |   47 ++++++++++++++++++++++++++++++++++++++++++++++-
>>  1 files changed, 46 insertions(+), 1 deletions(-)
>>
>> diff --git a/src/attrib-server.c b/src/attrib-server.c
>> index e52571c..f2bf5ef 100644
>> --- a/src/attrib-server.c
>> +++ b/src/attrib-server.c
>> @@ -1317,7 +1317,52 @@ 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 */
>> +       struct gatt_server *server;
>> +       uint16_t handle = 0, end = 0xffff;
>> +       gboolean pick = TRUE;
>> +       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 (pick) {
>> +                       handle = a->handle;
>> +                       pick = FALSE;
>> +               }
>
> I suspect you can get this code a lot simpler without using this
> "pick" variable. Unfortunately, I don't have time to look at this
> further right now.
>
>> +
>> +               if (bt_uuid_cmp(&a->uuid, &prim_uuid) != 0 &&
>> +                               bt_uuid_cmp(&a->uuid, &snd_uuid) != 0)
>> +                       continue;
>
> At this point you know a->uuid is either primary or secondary. So I
> don't think it is necessary to check again below.
>
>> +
>> +               if ((bt_uuid_cmp(&a->uuid, &prim_uuid) == 0 ||
>> +                               bt_uuid_cmp(&a->uuid, &snd_uuid) == 0) &&
>> +                               end - handle >= nitems)
>> +                       return end - nitems + 1;
>
> Same below. At this point, they are guaranteed to be either primary or
> secondary uuids. You only need to check for a->len.
>

Thanks for the feedback, I'll send a new set with the changes suggested.
Regards.
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux