* Reference table 3.5: Characteristic Properties bit field.
*/
- attr = btd_gatt_add_char(&uuid, 0x00, proxy_read_cb);
+ attr = btd_gatt_add_char(&uuid, 0x00, proxy_read_cb, NULL);
if (attr == NULL)
return -EINVAL;
uint16_t handle;
bt_uuid_t type;
btd_attr_read_t read_cb;
+ btd_attr_write_t write_cb;
uint16_t value_len;
uint8_t value[0];
};
struct btd_attribute *btd_gatt_add_char(const bt_uuid_t *uuid,
uint8_t properties,
- btd_attr_read_t read_cb)
+ btd_attr_read_t read_cb,
+ btd_attr_write_t write_cb)
{
struct btd_attribute *char_decl, *char_value = NULL;
char_value->type = *uuid;
char_value->read_cb = read_cb;
-
- /* TODO: Write callbacks */
+ char_value->write_cb = write_cb;
if (local_database_add(next_handle, char_value) < 0)
/* TODO: remove declaration */
typedef void (*btd_attr_read_t) (struct btd_attribute *attr,
btd_attr_read_result_t result,
void *user_data);
+/*
+ * Service implementation callback passed to core (ATT layer). It manages write
+ * operations received from remote devices.
+ * @attr: reference of the attribute to be changed.
+ * @value: new attribute value.
+ * @len: length of value.
+ */
+typedef void (*btd_attr_write_t) (struct btd_attribute *attr,
+ const uint8_t *value, size_t len);
/* btd_gatt_add_service - Add a service declaration to local attribute database.
* @uuid: Service UUID.
* @uuid: Characteristic UUID (16-bits or 128-bits).
* @properties: Characteristic properties. See Core SPEC 4.1 page 2183.
* @read_cb: Callback used to provide the characteristic value.
+ * @write_cb: Callback called to notify the implementation that a new value
+ * is available.
*
* Returns a reference to characteristic value attribute. In case of error,
* NULL is returned.
*/
struct btd_attribute *btd_gatt_add_char(const bt_uuid_t *uuid,
uint8_t properties,
- btd_attr_read_t read_cb);
+ btd_attr_read_t read_cb,
+ btd_attr_write_t write_cb);