/* * $ Copyright Cypress Semiconductor $ */ /** @file * * Bluetooth SDP Application Programming Interface * */ #pragma once #include "wiced_bt_dev.h" #include "wiced_bt_sdp_defs.h" /** * @cond DUAL_MODE * @addtogroup sdp Service Discovery Protocol (SDP) * * The Service Discovery Protocol (SDP) allows a device to discover services offered by other devices, and * their associated parameters. For example, when you use a mobile phone with a Bluetooth headset, the phone * uses SDP to determine which Bluetooth profiles the headset can use (Headset Profile, Hands Free Profile, * Advanced Audio Distribution Profile (A2DP) etc.) and the protocol multiplexer settings needed for the phone to * connect to the headset using each of them. Each service is identified by a Universally Unique Identifier (UUID), * with official services (Bluetooth profiles) assigned a short form UUID (16 bits rather than the full 128). * @{ */ /***************************************************************************** * Constants ****************************************************************************/ /** SDP result - Success code and error codes */ enum wiced_bt_sdp_result_t { WICED_BT_SDP_SUCCESS = WICED_BT_SUCCESS, /**< SDP - Result: Success */ WICED_BT_SDP_INVALID_VERSION = 0x0001, /**< SDP - invalid version */ WICED_BT_SDP_INVALID_SERV_REC_HDL = 0x0002, /**< SDP - invalid service record */ WICED_BT_SDP_INVALID_REQ_SYNTAX = 0x0003, /**< SDP - invalid request syntax */ WICED_BT_SDP_INVALID_PDU_SIZE = 0x0004, /**< SDP - invalid PDU size */ WICED_BT_SDP_INVALID_CONT_STATE = 0x0005, /**< SDP - invalid controller state */ WICED_BT_SDP_NO_RESOURCES = 0x0006, /**< SDP - no resources */ WICED_BT_SDP_DI_REG_FAILED = 0x0007, /**< SDP - registration failed */ WICED_BT_SDP_DI_DISC_FAILED = 0x0008, /**< SDP - discovery failed */ WICED_BT_SDP_NO_DI_RECORD_FOUND = 0x0009, /**< SDP - no record found */ WICED_BT_SDP_ERR_ATTR_NOT_PRESENT = 0x000A, /**< SDP - no attribute present */ WICED_BT_SDP_ILLEGAL_PARAMETER = 0x000B, /**< SDP - Illegal parameter */ WICED_BT_SDP_NO_RECS_MATCH = 0xFFF0, /**< SDP - No records match */ WICED_BT_SDP_CONN_FAILED = 0xFFF1, /**< SDP - Connection failed */ WICED_BT_SDP_CFG_FAILED = 0xFFF2, /**< SDP - Configuration failed */ WICED_BT_SDP_GENERIC_ERROR = 0xFFF3, /**< SDP - Generic error */ WICED_BT_SDP_DB_FULL = 0xFFF4, /**< SDP - DB full */ WICED_BT_SDP_INVALID_PDU = 0xFFF5, /**< SDP - Invalid PDU */ WICED_BT_SDP_SECURITY_ERR = 0xFFF6, /**< SDP - Security Error */ WICED_BT_SDP_CONN_REJECTED = 0xFFF7, /**< SDP - Connection rejected */ WICED_BT_SDP_CANCEL = 0xFFF8 /**< SDP - cancel */ }; /** Define the PSM that SDP uses */ #define SDP_PSM 0x0001 /** Masks for attr_value field of wiced_bt_sdp_discovery_attribute_t */ #define SDP_DISC_ATTR_LEN_MASK 0x0FFF /** Masks for attr_len_type field of wiced_bt_sdp_discovery_attribute_t */ #define SDP_DISC_ATTR_TYPE(len_type) (len_type >> 12) /** Masks for attr_len */ #define SDP_DISC_ATTR_LEN(len_type) (len_type & SDP_DISC_ATTR_LEN_MASK) /** Maximum number of protocol list items (list_elem in wiced_bt_sdp_protocol_elem_t) */ #define SDP_MAX_LIST_ELEMS 3 /***************************************************************************** * Type Definitions ****************************************************************************/ /** * * Service discovery complete callback. * * If discovery was successful, the discovery results database (provided when #wiced_bt_sdp_service_search_request * or #wiced_bt_sdp_service_search_attribute_request was called) will be filled. * * Use the wiced_bt_sdp_find_* utility functions to parse the results. * * @param[in] sdp_result : SDP result code (see #wiced_bt_sdp_result_t ) * * @return Nothing * */ typedef void (wiced_bt_sdp_discovery_complete_cback_t) (uint16_t sdp_result); /** Attribute value */ typedef struct { /** Attribute value union */ union { uint8_t u8; /**< 8-bit integer */ uint16_t u16; /**< 16-bit integer */ uint32_t u32; /**< 32-bit integer */ uint8_t array[4]; /**< Variable length field */ struct t_sdp_discovery_attr *p_sub_attr; /**< Addr of first sub-attr (list)*/ } v; } wiced_bt_sdp_discovery_attribute_value_t; /** SDP Attribute */ typedef struct t_sdp_discovery_attr { struct t_sdp_discovery_attr *p_next_attr; /**< Addr of next linked attr */ uint16_t attr_id; /**< Attribute ID */ uint16_t attr_len_type; /**< Length and type fields */ wiced_bt_sdp_discovery_attribute_value_t attr_value; /**< Variable length entry data */ } wiced_bt_sdp_discovery_attribute_t; /** Discovery record from SDP search result */ typedef struct sdp_discovery_record_t { wiced_bt_sdp_discovery_attribute_t *p_first_attr; /**< First attribute of record */ struct sdp_discovery_record_t *p_next_rec; /**< Addr of next linked record */ uint32_t time_read; /**< The time the record was read */ } wiced_bt_sdp_discovery_record_t; /** SDP Max UUID filters. * num_uuid field of #wiced_bt_sdp_init_discovery_db API should be less than SDP_MAX_UUID_FILTERS */ #define SDP_MAX_UUID_FILTERS 3 /** SDP Max Attribute filters. * num_attr field of #wiced_bt_sdp_init_discovery_db API should be less than SDP_MAX_ATTR_FILTERS */ #define SDP_MAX_ATTR_FILTERS 12 /** Discovery database (used for performing service searches and holding search results) */ typedef struct { uint32_t mem_size; /**< Memory size of the DB */ uint32_t mem_free; /**< Memory still available */ wiced_bt_sdp_discovery_record_t *p_first_rec; /**< Addr of first record in DB */ uint16_t num_uuid_filters; /**< Number of UUIds to filter */ wiced_bt_uuid_t uid_filters[SDP_MAX_UUID_FILTERS]; /**< UUIDs to filter */ uint16_t num_attr_filters; /**< Number of attribute filters */ uint16_t attr_filters[SDP_MAX_ATTR_FILTERS]; /**< Attributes to filter */ uint8_t *p_free_mem; /**< Pointer to free memory */ }wiced_bt_sdp_discovery_db_t; /** SDP Max Protocol Parameters. * num_params field in #wiced_bt_sdp_protocol_elem_t structure */ #define SDP_MAX_PROTOCOL_PARAMS 2 /** This structure is used to add protocol lists and find protocol elements */ typedef struct { uint16_t protocol_uuid; /**< The protocol uuid */ uint16_t num_params; /**< Number of parameters */ uint16_t params[SDP_MAX_PROTOCOL_PARAMS]; /**< Contents of protocol parameters */ } wiced_bt_sdp_protocol_elem_t; /***************************************************************************** * SDP Server Database Macros ****************************************************************************/ /** SDP attribute 1 byte */ #define SDP_UINT1(value) (value) /** SDP attribute 2 byte */ #define SDP_UINT2(value) (value) >> 8, (value) & 0xff /** SDP attribute 4 byte */ #define SDP_UINT4(value) (value) >> 24, ((value) >> 16) & 0xff, ((value) >> 8) & 0xff, (value) & 0xff /** SDP attribute 8 byte */ #define SDP_UINT8(value) (value) >> 56, ((value) >> 48) & 0xff, ((value >> 40) >> 8) & 0xff, \ (value >> 32) & 0xff, ((value) >> 24) & 0xff, ((value) >> 16) & 0xff, \ ((value) >> 8) & 0xff, (value) & 0xff /** SDP attribute BOOLEAN type */ #define SDP_BOOLEAN SDP_UINT1 /** SDP attribute value UINT 1 byte */ #define SDP_ATTR_VALUE_UINT1(value) (UINT_DESC_TYPE << 3) | SIZE_ONE_BYTE, SDP_UINT1(value) /** SDP attribute value UINT 2 byte */ #define SDP_ATTR_VALUE_UINT2(value) (UINT_DESC_TYPE << 3) | SIZE_TWO_BYTES, SDP_UINT2(value) /** SDP attribute value UINT 4 byte */ #define SDP_ATTR_VALUE_UINT4(value) (UINT_DESC_TYPE << 3) | SIZE_FOUR_BYTES, SDP_UINT4(value) /** SDP attribute value UINT 8 byte */ #define SDP_ATTR_VALUE_UINT8(value) (UINT_DESC_TYPE << 3) | SIZE_EIGHT_BYTES, SDP_UINT8(value) /** SDP attribute value BOOLEAN type */ #define SDP_ATTR_VALUE_BOOLEAN(value) (BOOLEAN_DESC_TYPE << 3), SDP_UINT1(value) /** SDP attribute value text */ #define SDP_ATTR_VALUE_TEXT (TEXT_STR_DESC_TYPE << 3) | SIZE_IN_NEXT_BYTE /** SDP attribute value text 1 byte */ #define SDP_ATTR_VALUE_TEXT_1(len) (TEXT_STR_DESC_TYPE << 3) | SIZE_IN_NEXT_BYTE, SDP_UINT1(len) /** SDP attribute value text 2 byte */ #define SDP_ATTR_VALUE_TEXT_2(len) (TEXT_STR_DESC_TYPE << 3) | SIZE_IN_NEXT_WORD, SDP_UINT2(len) /** SDP attribute value text 4 byte */ #define SDP_ATTR_VALUE_TEXT_4(len) (TEXT_STR_DESC_TYPE << 3) | SIZE_IN_NEXT_LONG, SDP_UINT4(len) /** SDP attribute id with 1 byte value */ #define SDP_ATTR_UINT1(id, value) SDP_ATTR_ID(id), SDP_ATTR_VALUE_UINT1(value) /** SDP attribute id with 2 byte value */ #define SDP_ATTR_UINT2(id, value) SDP_ATTR_ID(id), SDP_ATTR_VALUE_UINT2(value) /** SDP attribute id with 4 byte value */ #define SDP_ATTR_UINT4(id, value) SDP_ATTR_ID(id), SDP_ATTR_VALUE_UINT4(value) /** SDP attribute id with 8 byte value */ #define SDP_ATTR_UINT8(id, value) SDP_ATTR_ID(id), SDP_ATTR_VALUE_UINT8(value) /** SDP attribute id with BOOLEAN value */ #define SDP_ATTR_BOOLEAN(id, value) SDP_ATTR_ID(id), SDP_ATTR_VALUE_BOOLEAN(value) /** SDP attribute id */ #define SDP_ATTR_ID SDP_ATTR_VALUE_UINT2 /** SDP attribute 16 bit UUID */ #define SDP_ATTR_UUID16(uuid) ((UUID_DESC_TYPE << 3) | SIZE_TWO_BYTES), SDP_UINT2(uuid) /** SDP attribute id with text */ #define SDP_ATTR_TEXT(id, len) SDP_ATTR_ID(id), SDP_ATTR_VALUE_TEXT, (len) /** SDP attribute id with 1 byte text value */ #define SDP_ATTR_TEXT_1(id, len) SDP_ATTR_ID(id), SDP_ATTR_VALUE_TEXT_1(len) /** SDP attribute id with 2 byte text value */ #define SDP_ATTR_TEXT_2(id, len) SDP_ATTR_ID(id), SDP_ATTR_VALUE_TEXT_2(len) /** SDP attribute id with 4 byte text value */ #define SDP_ATTR_TEXT_4(id, len) SDP_ATTR_ID(id), SDP_ATTR_VALUE_TEXT_4(len) /** SDP attribute Sequence 1 byte */ #define SDP_ATTR_SEQUENCE_1(length) ((DATA_ELE_SEQ_DESC_TYPE << 3) | SIZE_IN_NEXT_BYTE), (length) /** SDP attribute Sequence 2 byte */ #define SDP_ATTR_SEQUENCE_2(length) ((DATA_ELE_SEQ_DESC_TYPE << 3) | SIZE_IN_NEXT_WORD), SDP_UINT2(length) /** SDP attribute Sequence 4 byte */ #define SDP_ATTR_SEQUENCE_4(length) ((DATA_ELE_SEQ_DESC_TYPE << 3) | SIZE_IN_NEXT_LONG), SDP_UINT4(length) /** Service Record Handle 0x0000 */ #define SDP_ATTR_RECORD_HANDLE(handle) SDP_ATTR_UINT4(ATTR_ID_SERVICE_RECORD_HDL, handle) /** Service Class ID List 0x0001 */ #define SDP_ATTR_CLASS_ID(uuid) \ SDP_ATTR_ID(ATTR_ID_SERVICE_CLASS_ID_LIST), SDP_ATTR_SEQUENCE_1(3), \ SDP_ATTR_UUID16(uuid) /** Service Record State 0x0002 */ #define SDP_ATTR_SERVICE_RECORD_STATE(state) \ SDP_ATTR_UINT4(ATTR_ID_SERVICE_RECORD_STATE, state) /** Service ID 0x0003 */ #define SDP_ATTR_SERVICE_ID(uuid) \ SDP_ATTR_ID(ATTR_ID_SERVICE_ID), SDP_ATTR_SEQUENCE_1(3), \ SDP_ATTR_UUID16(uuid) /** Protocol Descriptor List 0x0004 for L2CAP */ #define SDP_ATTR_PROTOCOL_DESC_LIST(l2cap_chan) \ SDP_ATTR_ID(ATTR_ID_PROTOCOL_DESC_LIST), SDP_ATTR_SEQUENCE_1(13), \ SDP_ATTR_SEQUENCE_1(6), \ SDP_ATTR_UUID16(UUID_PROTOCOL_L2CAP), \ SDP_ATTR_VALUE_UINT2(1), \ SDP_ATTR_SEQUENCE_1(3), \ SDP_ATTR_UUID16(l2cap_chan) /** Protocol Descriptor List 0x0004 for SDP */ #define SDP_ATTR_SDP_PROTOCOL_DESC_LIST(l2cap_chan) \ SDP_ATTR_ID(ATTR_ID_PROTOCOL_DESC_LIST), SDP_ATTR_SEQUENCE_1(13), \ SDP_ATTR_SEQUENCE_1(6), \ SDP_ATTR_UUID16(UUID_PROTOCOL_L2CAP), \ SDP_ATTR_ID(l2cap_chan), \ SDP_ATTR_SEQUENCE_1(3), \ SDP_ATTR_UUID16(UUID_PROTOCOL_SDP) /** Protocol Descriptor List 0x0004 for HIDP */ #define SDP_ATTR_HIDP_PROTOCOL_DESC_LIST(l2cap_chan) \ SDP_ATTR_ID(ATTR_ID_PROTOCOL_DESC_LIST), SDP_ATTR_SEQUENCE_1(13), \ SDP_ATTR_SEQUENCE_1(6), \ SDP_ATTR_UUID16(UUID_PROTOCOL_L2CAP), \ SDP_ATTR_ID(l2cap_chan), \ SDP_ATTR_SEQUENCE_1(3), \ SDP_ATTR_UUID16(UUID_PROTOCOL_HIDP) /** Protocol Descriptor List 0x0004 for RFCOMM */ #define SDP_ATTR_RFCOMM_PROTOCOL_DESC_LIST(scn) \ SDP_ATTR_ID(ATTR_ID_PROTOCOL_DESC_LIST), SDP_ATTR_SEQUENCE_1(12), \ SDP_ATTR_SEQUENCE_1(3), \ SDP_ATTR_UUID16(UUID_PROTOCOL_L2CAP), \ SDP_ATTR_SEQUENCE_1(5), \ SDP_ATTR_UUID16(UUID_PROTOCOL_RFCOMM), \ SDP_ATTR_VALUE_UINT1(scn) /** Browse Group List 0x0005 */ #define SDP_ATTR_BROWSE_LIST \ SDP_ATTR_ID(ATTR_ID_BROWSE_GROUP_LIST), SDP_ATTR_SEQUENCE_1(3), \ SDP_ATTR_UUID16(UUID_SERVCLASS_PUBLIC_BROWSE_GROUP) /** Language Base 0x0006 */ #define SDP_ATTR_LANGUAGE_BASE_ATTR_ID_LIST \ SDP_ATTR_ID(ATTR_ID_LANGUAGE_BASE_ATTR_ID_LIST), SDP_ATTR_SEQUENCE_1(9), \ SDP_ATTR_VALUE_UINT2(LANG_ID_CODE_ENGLISH), \ SDP_ATTR_VALUE_UINT2(LANG_ID_CHAR_ENCODE_UTF8), \ SDP_ATTR_VALUE_UINT2(LANGUAGE_BASE_ID) /** Service Info Time to Live 0x0007 */ #define SDP_ATTR_SERVICE_INFO_TIME_TO_LIVE(seconds) \ SDP_ATTR_UINT4(ATTR_ID_SERVICE_INFO_TIME_TO_LIVE, seconds) /** Service Availability 0x0008 */ #define SDP_ATTR_SERVICE_AVAILABILITY(availability) \ SDP_ATTR_UINT1(ATTR_ID_SERVICE_AVAILABILITY, availability) /** BT Profile Descriptor List 0x0009 */ #define SDP_ATTR_PROFILE_DESC_LIST(uuid, version) \ SDP_ATTR_ID(ATTR_ID_BT_PROFILE_DESC_LIST), SDP_ATTR_SEQUENCE_1(8), \ SDP_ATTR_SEQUENCE_1(6), \ SDP_ATTR_UUID16(uuid), \ SDP_ATTR_VALUE_UINT2(version) /** Documentation URL 0x000A */ #define SDP_ATTR_DOCUMENTATION_URL(len) \ SDP_ATTR_TEXT_1(ATTR_ID_DOCUMENTATION_URL, len) /** Client Executable URL 0x000B */ #define SDP_ATTR_CLIENT_EXECUTABLE_URL(len) \ SDP_ATTR_TEXT_1(ATTR_ID_CLIENT_EXE_URL, len) /** Icon URL 0x000C */ #define SDP_ATTR_ICON_URL(len) \ SDP_ATTR_TEXT_1(ATTR_ID_ICON_URL, len) /** Service Name LANGUAGE_BASE_ID (0x0100) + 0x0000 = 0x0100 */ #define SDP_ATTR_SERVICE_NAME(len) \ SDP_ATTR_TEXT_1(ATTR_ID_SERVICE_NAME, len) /** Service Description LANGUAGE_BASE_ID (0x0100) + 0x0001 = 0x0101 */ #define SDP_ATTR_SERVICE_DESCRIPTION(len) \ SDP_ATTR_TEXT_1(ATTR_ID_SERVICE_DESCRIPTION, len) /** Provider Name LANGUAGE_BASE_ID (0x0100) + 0x0002 = 0x0102 */ #define SDP_ATTR_PROVIDER_NAME(len) \ SDP_ATTR_TEXT_1(ATTR_ID_PROVIDER_NAME, len) /** Group ID 0x0200 */ #define SDP_ATTR_GROUP_ID(uuid) \ SDP_ATTR_ID(ATTR_ID_GROUP_ID), \ SDP_ATTR_UUID16(uuid) #if 1 /** Version Number List 0x0200 */ #define SDP_ATTR_VERSION_NUMBER_LIST(version) \ SDP_ATTR_UINT2(ATTR_ID_SPECIFICATION_ID, version) #else /* Version Number List 0x0200 */ #define SDP_ATTR_VERSION_NUMBER_LIST(version) \ SDP_ATTR_ID(ATTR_ID_SPECIFICATION_ID), SDP_ATTR_SEQUENCE_1(3), \ SDP_ATTR_VALUE_UINT2(version) #endif /** Service Database State 0x0201 */ #define SDP_ATTR_SERVICE_DATABASE_STATE(state) \ SDP_ATTR_UINT4(ATTR_ID_VENDOR_ID, state) /****************************************************** * Function Declarations ******************************************************/ #ifdef __cplusplus extern "C" { #endif /* SDP Server APIs */ /** * * Initialize local SDP server database (database generated using * WICED BT Designer) * * @param[in] p_sdp_db: First element in database array * @param[in] size: size (in bytes) of SDP database * * @return TRUE if successful, FALSE otherwise * **/ wiced_bool_t wiced_bt_sdp_db_init (const uint8_t *p_sdp_db, uint16_t size); /* SDP Client APIs */ /** * * Initialize discovery database prior to performing service * discovery (using #wiced_bt_sdp_service_search_request or * #wiced_bt_sdp_service_search_request ). * * Provides a list of UUIDs and/or attribute IDs to search for. * * @param[in] p_db : Discovery database to initialize * @param[in] len : size of discovery database * @param[in] num_uuid : Number of UUIDs in p_uuid_list * @param[in] p_uuid_list : UUIDs to add to discovery database * @param[in] num_attr : Number of attributes in p_attr_list * @param[in] p_attr_list : Attributes to add to discovery database * * @return TRUE if successful, FALSE if one or more parameters are bad * **/ wiced_bool_t wiced_bt_sdp_init_discovery_db (wiced_bt_sdp_discovery_db_t *p_db, uint32_t len, uint16_t num_uuid, wiced_bt_uuid_t *p_uuid_list, uint16_t num_attr, uint16_t *p_attr_list); /** * * Cancel service search request * * @param[in] p_db : Discovery database of the request being cancelled * * @return TRUE if discovery cancelled, FALSE if a matching activity is not found. * **/ wiced_bool_t wiced_bt_sdp_cancel_service_search (wiced_bt_sdp_discovery_db_t *p_db); /** * * Initiate service search on remote device * * @param[in] p_bd_addr : Remote device address * @param[in] p_db : Discovery database of UUIDs and attribute IDs to search for (intialized using #wiced_bt_sdp_init_discovery_db ) * @param[in] p_cb : Callback for discovery results * * @return TRUE if discovery started, FALSE if failed. * **/ wiced_bool_t wiced_bt_sdp_service_search_request (uint8_t *p_bd_addr, wiced_bt_sdp_discovery_db_t *p_db, wiced_bt_sdp_discovery_complete_cback_t *p_cb); /** * * Initiate combined service search and attribute request on remote device * * @param[in] p_bd_addr : Remote device address * @param[in] p_db : Discovery database of UUIDs and attribute IDs to search for (intialized using #wiced_bt_sdp_init_discovery_db ) * @param[in] p_cb : Callback for discovery results * * @return TRUE if discovery started, FALSE if failed. * **/ wiced_bool_t wiced_bt_sdp_service_search_attribute_request (uint8_t *p_bd_addr, wiced_bt_sdp_discovery_db_t *p_db, wiced_bt_sdp_discovery_complete_cback_t *p_cb); /* API of utilities to find data in the local discovery database */ /** * * Parse results from service search. Look next record in discovery database * containing attribute ID. * * @param[in] p_db : Discovery results database * @param[in] attr_id : Attribute ID to find * @param[in] p_start_rec : Starting record to search from (if NULL, start from beginning of database) * * @return Pointer to matching record, or NULL * **/ wiced_bt_sdp_discovery_record_t *wiced_bt_sdp_find_attribute_in_db (wiced_bt_sdp_discovery_db_t *p_db, uint16_t attr_id, wiced_bt_sdp_discovery_record_t *p_start_rec); /** * * Parse SDP record. Look for requested attribute in the service record. * * @param[in] p_rec : Service record * @param[in] attr_id : Attribute ID to find * * @return Pointer to matching attribute entry, or NULL * **/ wiced_bt_sdp_discovery_attribute_t *wiced_bt_sdp_find_attribute_in_rec (wiced_bt_sdp_discovery_record_t *p_rec, uint16_t attr_id); /** * * Parse results from service search. Look next record in discovery database * containing requested service UUID (specified using uint16_t) * * @param[in] p_db : Discovery results database * @param[in] service_uuid: Service to find * @param[in] p_start_rec : Starting record to search from (if NULL, start from beginning of database) * * @return Pointer to matching record, or NULL * **/ wiced_bt_sdp_discovery_record_t *wiced_bt_sdp_find_service_in_db (wiced_bt_sdp_discovery_db_t *p_db, uint16_t service_uuid, wiced_bt_sdp_discovery_record_t *p_start_rec); /** * * Parse results from service search. Look next record in discovery database * containing requested service UUID (specified using wiced_bt_uuid_t structure) * * @param[in] p_db : Discovery results database * @param[in] p_uuid : Service to find * @param[in] p_start_rec : Starting record to search from (if NULL, start from beginning of database) * * @return Pointer to matching record, or NULL * **/ wiced_bt_sdp_discovery_record_t *wiced_bt_sdp_find_service_uuid_in_db (wiced_bt_sdp_discovery_db_t *p_db, wiced_bt_uuid_t *p_uuid, wiced_bt_sdp_discovery_record_t *p_start_rec); /** * * Parse SDP record. Look for requested protocol list element in the service record. * * @param[in] p_rec : Service record * @param[in] layer_uuid : protocol list element to find * @param[out] p_elem : protocol list element (if found) * * @return TRUE if found, else FALSE * **/ wiced_bool_t wiced_bt_sdp_find_protocol_list_elem_in_rec (wiced_bt_sdp_discovery_record_t *p_rec, uint16_t layer_uuid, wiced_bt_sdp_protocol_elem_t *p_elem); /** * * Parse SDP record. Look for requested protocol lists element in the service record. * * @param[in] p_rec : Service record * @param[in] layer_uuid : protocol lists element to find * @param[out] p_elem : protocol lists element (if found) * * @return TRUE if found, else FALSE * **/ wiced_bool_t wiced_bt_sdp_find_protocol_lists_elem_in_rec (wiced_bt_sdp_discovery_record_t *p_rec, uint16_t layer_uuid, wiced_bt_sdp_protocol_elem_t *p_elem); /** * * Parse SDP record. Look for version of requested profile. * * @param[in] p_rec : Service record * @param[in] profile_uuid: Profile to find * @param[out] p_version : Major/minor version of profile (if found) * * @return TRUE if found, FALSE if not * **/ wiced_bool_t wiced_bt_sdp_find_profile_version_in_rec (wiced_bt_sdp_discovery_record_t *p_rec, uint16_t profile_uuid, uint16_t *p_version); /** * * Parse SDP record. Look for service UUID * * @param[in] p_rec : Service record * @param[out] p_uuid : Service UUID of the record * * @return TRUE if found, FALSE if not * **/ wiced_bool_t wiced_bt_sdp_find_service_uuid_in_rec(wiced_bt_sdp_discovery_record_t *p_rec, wiced_bt_uuid_t *p_uuid); #ifdef __cplusplus } #endif /**@} sdp */ /* @endcond*/