OSDN Git Service

shared/gatt-client: Don't reset database on service changed
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tue, 10 Nov 2015 13:13:15 +0000 (15:13 +0200)
committerJohan Hedberg <johan.hedberg@intel.com>
Tue, 10 Nov 2015 18:46:18 +0000 (20:46 +0200)
If the remote send a full reset, 0x0001 - 0xffff, just discovery the
attributes again as device may send this even though nothing has
changed.

src/shared/gatt-client.c

index 3aaa089..06ac763 100644 (file)
@@ -1406,6 +1406,10 @@ static void process_service_changed(struct bt_gatt_client *client,
 {
        struct discovery_op *op;
 
+       /* On full database reset just re-run attribute discovery */
+       if (start_handle == 0x0001 && end_handle == 0xffff)
+               goto discover;
+
        /* Invalidate and remove all effected notify callbacks */
        gatt_client_remove_all_notify_in_range(client, start_handle,
                                                                end_handle);
@@ -1417,6 +1421,7 @@ static void process_service_changed(struct bt_gatt_client *client,
         */
        gatt_db_clear_range(client->db, start_handle, end_handle);
 
+discover:
        op = discovery_op_create(client, start_handle, end_handle,
                                                service_changed_complete,
                                                service_changed_failure);