From 9f30381f3120ce7ea1dc65d7ba473d1e76619499 Mon Sep 17 00:00:00 2001 From: Claudio Takahasi Date: Mon, 24 Mar 2014 10:30:03 -0300 Subject: [PATCH] gatt: Assign write callback for external services This patch adds the callback for writing the external characteristic value. Internally, GDBusProxy implementation calls Set method of the "Value" property. At the moment, potential errors returned by the external service implementation are being ignored. The ATT operation (Write Command or Request) is not exposed to the external service implementation. GATT/GDBusProxy handles possible DBus errors returned, and notify the core using the callbacks informed. Write Command doesn't have callback since it doesn't return ATT errors. --- src/gatt-dbus.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/gatt-dbus.c b/src/gatt-dbus.c index ef137a8f7..cdb46c44a 100644 --- a/src/gatt-dbus.c +++ b/src/gatt-dbus.c @@ -179,6 +179,30 @@ static void proxy_read_cb(struct btd_attribute *attr, result(0, value, len, user_data); } +static void proxy_write_reply(const DBusError *derr, void *user_data) +{ + if (derr) + DBG("Write reply: %s", derr->message); +} + +static void proxy_write_cb(struct btd_attribute *attr, + const uint8_t *value, size_t len) +{ + GDBusProxy *proxy; + + proxy = g_hash_table_lookup(proxy_hash, attr); + if (!proxy) + /* FIXME: Attribute not found */ + return; + + g_dbus_proxy_set_property_array(proxy, "Value", DBUS_TYPE_BYTE, + value, len, proxy_write_reply, + NULL, NULL); + + DBG("Server: Write characteristic callback %s", + g_dbus_proxy_get_path(proxy)); +} + static int register_external_service(const struct external_app *eapp, GDBusProxy *proxy) { @@ -238,7 +262,8 @@ static int register_external_characteristics(GSList *proxies) * Reference table 3.5: Characteristic Properties bit field. */ - attr = btd_gatt_add_char(&uuid, 0x00, proxy_read_cb, NULL); + attr = btd_gatt_add_char(&uuid, 0x00, proxy_read_cb, + proxy_write_cb); if (attr == NULL) return -EINVAL; -- 2.11.0