summaryrefslogtreecommitdiff
path: root/attrib/att.c
diff options
context:
space:
mode:
authorVinicius Costa Gomes <vinicius.gomes@openbossa.org>2010-08-18 18:22:17 -0300
committerJohan Hedberg <johan.hedberg@nokia.com>2010-09-22 22:34:26 +0300
commit9041deab6519ccf61b33041cbc2c5b39c1f32650 (patch)
treea22c86cdb82ccb2d593aba322b34333a83eb3e2a /attrib/att.c
parent37e3aa41e8604a67acd03746fbacaeccfb9a8aa3 (diff)
downloadbluez-9041deab6519ccf61b33041cbc2c5b39c1f32650.tar.gz
Add encoders/decoders for Indication/Confirmation
Diffstat (limited to 'attrib/att.c')
-rw-r--r--attrib/att.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/attrib/att.c b/attrib/att.c
index 905c85428..cb9e0fee5 100644
--- a/attrib/att.c
+++ b/attrib/att.c
@@ -509,6 +509,56 @@ uint16_t enc_notification(struct attribute *a, uint8_t *pdu, int len)
return a->len + 3;
}
+uint16_t enc_indication(struct attribute *a, uint8_t *pdu, int len)
+{
+ if (pdu == NULL)
+ return 0;
+
+ if (len < (a->len + 3))
+ return 0;
+
+ pdu[0] = ATT_OP_HANDLE_IND;
+ att_put_u16(a->handle, &pdu[1]);
+ memcpy(&pdu[3], a->data, a->len);
+
+ return a->len + 3;
+}
+
+struct attribute *dec_indication(const uint8_t *pdu, int len)
+{
+ struct attribute *a;
+
+ if (pdu == NULL)
+ return NULL;
+
+ if (pdu[0] != ATT_OP_HANDLE_IND)
+ return NULL;
+
+ a = malloc(sizeof(struct attribute) + len - 3);
+ if (a == NULL)
+ return NULL;
+
+ a->len = len - 3;
+
+ a->handle = att_get_u16((uint16_t *) &pdu[1]);
+ memcpy(a->data, &pdu[3], a->len);
+
+ return a;
+}
+
+uint16_t enc_confirmation(uint8_t *pdu, int len)
+{
+ if (pdu == NULL)
+ return 0;
+
+ if (len < 1)
+ return 0;
+
+ pdu[0] = ATT_OP_HANDLE_CNF;
+
+ return 1;
+}
+
uint16_t enc_mtu_req(uint16_t mtu, uint8_t *pdu, int len)
{
if (pdu == NULL)