From 834f893558463d88b668a1eea64d4a35faa85e1b Mon Sep 17 00:00:00 2001 From: "matthias.ringwald@gmail.com" Date: Thu, 4 Dec 2014 09:34:35 +0000 Subject: [PATCH] add de_get_uuid32 --- include/btstack/sdp_util.h | 23 +++++++++++++---------- src/sdp_util.c | 14 ++++++++++++++ 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/include/btstack/sdp_util.h b/include/btstack/sdp_util.h index 44d3f9ed7..4c05efc26 100644 --- a/include/btstack/sdp_util.h +++ b/include/btstack/sdp_util.h @@ -109,20 +109,22 @@ typedef enum { #define SDP_OBEXFileTypeAny 0xFF // MARK: DateElement -void de_dump_data_element(uint8_t * record); -int de_get_len(uint8_t *header); +void de_dump_data_element(uint8_t * record); +int de_get_len(uint8_t *header); de_size_t de_get_size_type(uint8_t *header); de_type_t de_get_element_type(uint8_t *header); -int de_get_header_size(uint8_t * header); -void de_create_sequence(uint8_t *header); -void de_store_descriptor_with_len(uint8_t * header, de_type_t type, de_size_t size, uint32_t len); +int de_get_header_size(uint8_t * header); +void de_create_sequence(uint8_t *header); +void de_store_descriptor_with_len(uint8_t * header, de_type_t type, de_size_t size, uint32_t len); uint8_t * de_push_sequence(uint8_t *header); -void de_pop_sequence(uint8_t * parent, uint8_t * child); -void de_add_number(uint8_t *seq, de_type_t type, de_size_t size, uint32_t value); -void de_add_data( uint8_t *seq, de_type_t type, uint16_t size, uint8_t *data); +void de_pop_sequence(uint8_t * parent, uint8_t * child); +void de_add_number(uint8_t *seq, de_type_t type, de_size_t size, uint32_t value); +void de_add_data( uint8_t *seq, de_type_t type, uint16_t size, uint8_t *data); -int de_get_data_size(uint8_t * header); -void de_add_uuid128(uint8_t * seq, uint8_t * uuid); +int de_get_data_size(uint8_t * header); +void de_add_uuid128(uint8_t * seq, uint8_t * uuid); +uint32_t de_get_uuid32(uint8_t * element); +int de_get_normalized_uuid(uint8_t *uuid128, uint8_t *element); // MARK: SDP uint16_t sdp_append_attributes_in_attributeIDList(uint8_t *record, uint8_t *attributeIDList, uint16_t startOffset, uint16_t maxBytes, uint8_t *buffer); @@ -134,6 +136,7 @@ int sdp_filter_attributes_in_attributeIDList(uint8_t *record, uint8_t *att void sdp_create_spp_service(uint8_t *service, int service_id, const char *name); void sdp_normalize_uuid(uint8_t *uuid, uint32_t shortUUID); +int sdp_has_blueooth_base_uuid(uint8_t * uuid128); #if defined __cplusplus } diff --git a/src/sdp_util.c b/src/sdp_util.c index ad537d769..d583166cf 100644 --- a/src/sdp_util.c +++ b/src/sdp_util.c @@ -67,6 +67,10 @@ void sdp_normalize_uuid(uint8_t *uuid, uint32_t shortUUID){ net_store_32(uuid, 0, shortUUID); } +int sdp_has_blueooth_base_uuid(uint8_t * uuid128){ + return memcmp(&uuid128[4], &sdp_bluetooth_base_uuid[4], 12) == 0; +} + // MARK: DataElement getter de_size_t de_get_size_type(uint8_t *header){ return (de_size_t) (header[0] & 7); @@ -137,6 +141,16 @@ int de_get_normalized_uuid(uint8_t *uuid128, uint8_t *element){ return 1; } +// @returns 0 if no UUID16 or UUID32 is present, and UUID32 otherwise +uint32_t de_get_uuid32(uint8_t * element){ + uint8_t uuid128[16]; + int validUuid128 = de_get_normalized_uuid(uuid128, element); + if (!validUuid128) return 0; + int hasBlueoothBaseUuid = sdp_has_blueooth_base_uuid(uuid128); + if (!hasBlueoothBaseUuid) return 0; + return READ_NET_32(element, 0); +} + // functions to create record static void de_store_descriptor(uint8_t * header, de_type_t type, de_size_t size){ header[0] = (type << 3) | size;