From a7462f82a88e798363149bc123b93a527fa08150 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Wed, 3 Feb 2016 16:54:15 +0200 Subject: [PATCH] drivers/nble: Add initial implementation of bt_gatt_write_ccc Change-Id: Iaf565c792fee6e2d39d199519199ee34f8f4ca57 Signed-off-by: Luiz Augusto von Dentz --- drivers/nble/gatt.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/drivers/nble/gatt.c b/drivers/nble/gatt.c index 1a4f6c47980..fe41c61a328 100644 --- a/drivers/nble/gatt.c +++ b/drivers/nble/gatt.c @@ -301,7 +301,27 @@ int bt_gatt_attr_write_ccc(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, uint16_t len, uint16_t offset) { - return -ENOSYS; + struct _bt_gatt_ccc *ccc = attr->user_data; + const uint16_t *data = buf; + + if (offset > sizeof(*data)) { + return -EINVAL; + } + + if (offset + len > sizeof(*data)) { + return -EFBIG; + } + + /* We expect to receive this only when the has really changed */ + ccc->value = sys_le16_to_cpu(*data); + + if (ccc->cfg_changed) { + ccc->cfg_changed(ccc->value); + } + + BT_DBG("handle 0x%04x value %u", attr->handle, ccc->value); + + return len; } int bt_gatt_attr_read_cep(struct bt_conn *conn,