1 /******************************************************************************
2  *
3  *  Copyright 2015 The Android Open Source Project
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 /******************************************************************************
20  *
21  *  This is the public interface file for the BTA SDP I/F
22  *
23  ******************************************************************************/
24 #ifndef BTA_SDP_API_H
25 #define BTA_SDP_API_H
26 
27 #include <cstdint>
28 
29 #include "bt_target.h"  // Must be first to define build configuration
30 
31 #include "bta/include/bta_api.h"
32 #include "bta/include/bta_sdp_api.h"
33 #include "include/hardware/bt_sdp.h"  // bluetooth_sdp_record
34 #include "types/bluetooth/uuid.h"
35 #include "types/raw_address.h"
36 
37 using bluetooth::Uuid;
38 
39 /* status values */
40 #define BTA_SDP_SUCCESS 0 /* Successful operation. */
41 #define BTA_SDP_FAILURE 1 /* Generic failure. */
42 #define BTA_SDP_BUSY 2    /* Temporarily can not handle this request. */
43 
44 typedef uint8_t tBTA_SDP_STATUS;
45 
46 /* SDP I/F callback events */
47 /* events received by tBTA_SDP_DM_CBACK */
48 #define BTA_SDP_ENABLE_EVT 0             /* SDP service i/f enabled*/
49 #define BTA_SDP_SEARCH_EVT 1             /* SDP Service started */
50 #define BTA_SDP_SEARCH_COMP_EVT 2        /* SDP search complete */
51 #define BTA_SDP_CREATE_RECORD_USER_EVT 3 /* SDP search complete */
52 #define BTA_SDP_REMOVE_RECORD_USER_EVT 4 /* SDP search complete */
53 #define BTA_SDP_MAX_EVT 5                /* max number of SDP events */
54 
55 #define BTA_SDP_MAX_RECORDS 15
56 
57 typedef uint16_t tBTA_SDP_EVT;
58 
59 /* data associated with BTA_SDP_DISCOVERY_COMP_EVT */
60 typedef struct {
61   tBTA_SDP_STATUS status;
62   RawAddress remote_addr;
63   bluetooth::Uuid uuid;
64   int record_count;
65   bluetooth_sdp_record records[BTA_SDP_MAX_RECORDS];
66 } tBTA_SDP_SEARCH_COMP;
67 
68 typedef union {
69   tBTA_SDP_STATUS status;               /* BTA_SDP_SEARCH_EVT */
70   tBTA_SDP_SEARCH_COMP sdp_search_comp; /* BTA_SDP_SEARCH_COMP_EVT */
71 } tBTA_SDP;
72 
73 /* SDP DM Interface callback */
74 typedef void(tBTA_SDP_DM_CBACK)(tBTA_SDP_EVT event, tBTA_SDP* p_data,
75                                 void* user_data);
76 
77 /* MCE configuration structure */
78 typedef struct {
79   uint16_t sdp_db_size;        /* The size of p_sdp_db */
80   tSDP_DISCOVERY_DB* p_sdp_db; /* The data buffer to keep SDP database */
81 } tBTA_SDP_CFG;
82 
83 /*******************************************************************************
84  *
85  * Function         BTA_SdpEnable
86  *
87  * Description      Enable the SDP I/F service. When the enable
88  *                  operation is complete the callback function will be
89  *                  called with a BTA_SDP_ENABLE_EVT. This function must
90  *                  be called before other functions in the MCE API are
91  *                  called.
92  *
93  * Returns          BTA_SDP_SUCCESS if successful.
94  *                  BTA_SDP_FAIL if internal failure.
95  *
96  ******************************************************************************/
97 extern tBTA_SDP_STATUS BTA_SdpEnable(tBTA_SDP_DM_CBACK* p_cback);
98 
99 /*******************************************************************************
100  *
101  * Function         BTA_SdpSearch
102  *
103  * Description      Start a search for sdp records for a specific BD_ADDR with a
104  *                  specific profile uuid.
105  *                  When the search operation is completed, the callback
106  *                  function will be called with a BTA_SDP_SEARCH_EVT.
107  * Returns          BTA_SDP_SUCCESS if successful.
108  *                  BTA_SDP_FAIL if internal failure.
109  *
110  ******************************************************************************/
111 extern tBTA_SDP_STATUS BTA_SdpSearch(const RawAddress& bd_addr,
112                                      const bluetooth::Uuid& uuid);
113 
114 /*******************************************************************************
115  *
116  * Function         BTA_SdpCreateRecordByUser
117  *
118  * Description      This function is used to request a callback to create a SDP
119  *                  record. The registered callback will be called with event
120  *                  BTA_SDP_CREATE_RECORD_USER_EVT.
121  *
122  * Returns          BTA_SDP_SUCCESS, if the request is being processed.
123  *                  BTA_SDP_FAILURE, otherwise.
124  *
125  ******************************************************************************/
126 extern tBTA_SDP_STATUS BTA_SdpCreateRecordByUser(void* user_data);
127 
128 /*******************************************************************************
129  *
130  * Function         BTA_SdpRemoveRecordByUser
131  *
132  * Description      This function is used to request a callback to remove a SDP
133  *                  record. The registered callback will be called with event
134  *                  BTA_SDP_REMOVE_RECORD_USER_EVT.
135  *
136  * Returns          BTA_SDP_SUCCESS, if the request is being processed.
137  *                  BTA_SDP_FAILURE, otherwise.
138  *
139  ******************************************************************************/
140 extern tBTA_SDP_STATUS BTA_SdpRemoveRecordByUser(void* user_data);
141 
142 #endif /* BTA_SDP_API_H */
143