/****************************************************************************** * * Copyright 1999-2012 Broadcom Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ #pragma once #include #include "internal_include/bt_target.h" #include "types/bluetooth/uuid.h" #include "types/raw_address.h" /* Masks for attr_value field of tSDP_DISC_ATTR */ #define SDP_DISC_ATTR_LEN_MASK 0x0FFF #define SDP_DISC_ATTR_TYPE(len_type) ((len_type) >> 12) #define SDP_DISC_ATTR_LEN(len_type) ((len_type)&SDP_DISC_ATTR_LEN_MASK) #define SDP_MAX_LIST_ELEMS 3 /* Define a structure to hold the discovered service information. */ typedef struct { union { uint8_t u8; /* 8-bit integer */ uint16_t u16; /* 16-bit integer */ uint32_t u32; /* 32-bit integer */ struct t_sdp_disc_attr* p_sub_attr; /* Addr of first sub-attr (list)*/ uint8_t array[]; /* Variable length field */ /* flexible array member */ /* requiring backing store */ /* from SDP DB */ } v; } tSDP_DISC_ATVAL; typedef struct t_sdp_disc_attr { struct t_sdp_disc_attr* p_next_attr; /* Addr of next linked attr */ uint16_t attr_id; /* Attribute ID */ uint16_t attr_len_type; /* Length and type fields */ tSDP_DISC_ATVAL attr_value; /* Variable length entry data */ } tSDP_DISC_ATTR; typedef struct t_sdp_disc_rec { tSDP_DISC_ATTR* p_first_attr; /* First attribute of record */ struct t_sdp_disc_rec* p_next_rec; /* Addr of next linked record */ uint32_t time_read; /* The time the record was read */ RawAddress remote_bd_addr; /* Remote BD address */ } tSDP_DISC_REC; typedef struct { uint32_t mem_size; /* Memory size of the DB */ uint32_t mem_free; /* Memory still available */ tSDP_DISC_REC* p_first_rec; /* Addr of first record in DB */ uint16_t num_uuid_filters; /* Number of UUIds to filter */ bluetooth::Uuid uuid_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 */ uint8_t* raw_data; /* Received record from server. allocated/released by client */ uint32_t raw_size; /* size of raw_data */ uint32_t raw_used; /* length of raw_data used */ } tSDP_DISCOVERY_DB; /* This structure is used to add protocol lists and find protocol elements */ typedef struct { uint16_t protocol_uuid; uint16_t num_params; uint16_t params[SDP_MAX_PROTOCOL_PARAMS]; } tSDP_PROTOCOL_ELEM; typedef struct { uint16_t num_elems; tSDP_PROTOCOL_ELEM list_elem[SDP_MAX_LIST_ELEMS]; } tSDP_PROTO_LIST_ELEM;