uint16_t enc_read_by_type_req(uint16_t start, uint16_t end, bt_uuid_t *uuid, uint8_t *pdu, size_t len) { uint16_t min_len = sizeof(pdu[0]) + sizeof(start) + sizeof(end); uint16_t length; if (!uuid) return 0; if (uuid->type == BT_UUID16) length = 2; else if (uuid->type == BT_UUID128) length = 16; else return 0; if (len < min_len + length) return 0; pdu[0] = ATT_OP_READ_BY_TYPE_REQ; att_put_u16(start, &pdu[1]); att_put_u16(end, &pdu[3]); att_put_uuid(*uuid, &pdu[5]); return min_len + length; }
uint16_t enc_read_by_type_req(uint16_t start, uint16_t end, bt_uuid_t *uuid, uint8_t *pdu, size_t len) { uint16_t uuid_len; if (!uuid) return 0; if (uuid->type == BT_UUID16) uuid_len = 2; else if (uuid->type == BT_UUID128) uuid_len = 16; else return 0; /* Attribute Opcode (1 octet) */ pdu[0] = ATT_OP_READ_BY_TYPE_REQ; /* Starting Handle (2 octets) */ att_put_u16(start, &pdu[1]); /* Ending Handle (2 octets) */ att_put_u16(end, &pdu[3]); /* Attribute Type (2 or 16 octet UUID) */ att_put_uuid(*uuid, &pdu[5]); return 5 + uuid_len; }