From ec141a423b38c74dfee428ade29c57da3a817c19 Mon Sep 17 00:00:00 2001 From: Bruna Moreira Date: Tue, 15 Feb 2011 10:16:48 -0400 Subject: [PATCH] Add encode/decode for write response The encode/decode functions for Write Response operations were created to keep consistency with the rest of GATT API. --- attrib/att.c | 21 +++++++++++++++++++++ attrib/att.h | 2 ++ src/attrib-server.c | 4 +--- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/attrib/att.c b/attrib/att.c index dff859723..3259fca62 100644 --- a/attrib/att.c +++ b/attrib/att.c @@ -526,6 +526,27 @@ uint16_t dec_write_req(const uint8_t *pdu, int len, uint16_t *handle, return len; } +uint16_t enc_write_resp(uint8_t *pdu, int len) +{ + if (pdu == NULL) + return 0; + + pdu[0] = ATT_OP_WRITE_RESP; + + return sizeof(pdu[0]); +} + +uint16_t dec_write_resp(const uint8_t *pdu, int len) +{ + if (pdu == NULL) + return 0; + + if (pdu[0] != ATT_OP_WRITE_RESP) + return 0; + + return len; +} + uint16_t enc_read_req(uint16_t handle, uint8_t *pdu, int len) { const uint16_t min_len = sizeof(pdu[0]) + sizeof(handle); diff --git a/attrib/att.h b/attrib/att.h index 7e81dc474..7d9afebe8 100644 --- a/attrib/att.h +++ b/attrib/att.h @@ -215,6 +215,8 @@ uint16_t enc_write_req(uint16_t handle, const uint8_t *value, int vlen, uint8_t *pdu, int len); uint16_t dec_write_req(const uint8_t *pdu, int len, uint16_t *handle, uint8_t *value, int *vlen); +uint16_t enc_write_resp(uint8_t *pdu, int len); +uint16_t dec_write_resp(const uint8_t *pdu, int len); uint16_t enc_read_req(uint16_t handle, uint8_t *pdu, int len); uint16_t enc_read_blob_req(uint16_t handle, uint16_t offset, uint8_t *pdu, int len); diff --git a/src/attrib-server.c b/src/attrib-server.c index 72f5b17b0..85b39a8eb 100644 --- a/src/attrib-server.c +++ b/src/attrib-server.c @@ -601,9 +601,7 @@ static uint16_t write_value(struct gatt_channel *channel, uint16_t handle, memcpy(&uuid, &a->uuid, sizeof(uuid_t)); attrib_db_update(handle, &uuid, value, vlen); - pdu[0] = ATT_OP_WRITE_RESP; - - return sizeof(pdu[0]); + return enc_write_resp(pdu, len); } static uint16_t mtu_exchange(struct gatt_channel *channel, uint16_t mtu,