Bluetooth: GATT: Handle ccc cfg values correctly on disconnect

* clear non-bonded ccc cfg values as per BT spec
 * address compare logic
 * check if cfg_changed is defined

Change-Id: Id002f22a6aac1b918d743ef1e73b7e5c4768a229
Signed-off-by: Roger Lendenmann <roger.lendenmann@intel.com>
This commit is contained in:
Roger Lendenmann 2016-06-07 20:23:22 +02:00 committed by Johan Hedberg
commit ee2dfbdcf0

View file

@ -645,7 +645,7 @@ static uint8_t disconnected_cb(const struct bt_gatt_attr *attr, void *user_data)
continue;
}
if (bt_addr_le_cmp(&conn->le.dst, &ccc->cfg[i].peer)) {
if (!bt_addr_le_cmp(&conn->le.dst, &ccc->cfg[i].peer)) {
struct bt_conn *tmp;
/* Skip if there is another peer connected */
@ -657,13 +657,19 @@ static uint8_t disconnected_cb(const struct bt_gatt_attr *attr, void *user_data)
}
bt_conn_unref(tmp);
/* Clear value if not paired */
if (!ccc->cfg[i].valid)
memset(&ccc->cfg[i].value, 0,
sizeof(ccc->cfg[i].value));
}
}
}
/* Reset value while disconnected */
memset(&ccc->value, 0, sizeof(ccc->value));
ccc->cfg_changed(ccc->value);
if (ccc->cfg_changed)
ccc->cfg_changed(ccc->value);
BT_DBG("ccc %p reseted", ccc);