From ad51f761edfa667ee0485d6808fbf87bb9197c60 Mon Sep 17 00:00:00 2001 From: "matthias.ringwald@gmail.com" Date: Fri, 20 Dec 2013 21:30:36 +0000 Subject: [PATCH] respond with attribute UUID instead of attribute value in find information response --- ble/att.c | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/ble/att.c b/ble/att.c index 4614e7eeb..00f8e1d53 100644 --- a/ble/att.c +++ b/ble/att.c @@ -271,7 +271,7 @@ static uint16_t handle_find_information_request2(uint8_t * response_buffer, uint printf("ATT_FIND_INFORMATION_REQUEST: from %04X to %04X\n", start_handle, end_handle); uint16_t offset = 1; - uint16_t pair_len = 0; + uint16_t uuid_len = 0; att_iterator_t it; att_iterator_init(&it); @@ -280,41 +280,35 @@ static uint16_t handle_find_information_request2(uint8_t * response_buffer, uint if (!it.handle) break; if (it.handle > end_handle) break; if (it.handle < start_handle) continue; - - att_update_value_len(&it); - + // printf("Handle 0x%04x\n", it.handle); - // check if value has same len as last one - uint16_t this_pair_len = 2 + it.value_len; + uint16_t this_uuid_len = (it.flags & ATT_PROPERTY_UUID128) ? 16 : 2; + + // check if value has same len as last one if not first result if (offset > 1){ - if (pair_len != this_pair_len) { + if (this_uuid_len != uuid_len) { break; } } - + // first if (offset == 1) { - pair_len = this_pair_len; - if (it.value_len == 2) { - response_buffer[offset] = 0x01; // format - } else { - response_buffer[offset] = 0x02; - } + uuid_len = this_uuid_len; + // set format field + response_buffer[offset] = (it.flags & ATT_PROPERTY_UUID128) ? 0x02 : 0x01; offset++; - } + } // space? - if (offset + pair_len > response_buffer_size) { - if (offset > 2) break; - it.value_len = response_buffer_size - 4; - } + if (offset + 2 + uuid_len > response_buffer_size) break; // store bt_store_16(response_buffer, offset, it.handle); offset += 2; - uint16_t bytes_copied = att_copy_value(&it, 0, response_buffer + offset, it.value_len); - offset += bytes_copied; + + memcpy(response_buffer + offset, it.uuid, uuid_len); + offset += uuid_len; } if (offset == 1){