1 /****************************************************************************** 2 * 3 * Copyright 2014 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 implementation of the API for SDP search subsystem 22 * 23 ******************************************************************************/ 24 25 #include <string.h> 26 27 #include "bt_common.h" 28 #include "bta_api.h" 29 #include "bta_sdp_api.h" 30 #include "bta_sdp_int.h" 31 #include "bta_sys.h" 32 #include "port_api.h" 33 #include "sdp_api.h" 34 35 /***************************************************************************** 36 * Constants 37 ****************************************************************************/ 38 39 static const tBTA_SYS_REG bta_sdp_reg = {bta_sdp_sm_execute, NULL}; 40 41 /******************************************************************************* 42 * 43 * Function BTA_SdpEnable 44 * 45 * Description Enable the SDP search I/F service. When the enable 46 * operation is complete the callback function will be 47 * called with a BTA_SDP_ENABLE_EVT. This function must 48 * be called before other functions in the SDP search API are 49 * called. 50 * 51 * Returns BTA_SDP_SUCCESS if successful. 52 * BTA_SDP_FAIL if internal failure. 53 * 54 ******************************************************************************/ 55 tBTA_SDP_STATUS BTA_SdpEnable(tBTA_SDP_DM_CBACK* p_cback) { 56 tBTA_SDP_STATUS status = BTA_SDP_FAILURE; 57 58 APPL_TRACE_API(__func__); 59 if (p_cback && !bta_sys_is_register(BTA_ID_SDP)) { 60 memset(&bta_sdp_cb, 0, sizeof(tBTA_SDP_CB)); 61 62 /* register with BTA system manager */ 63 bta_sys_register(BTA_ID_SDP, &bta_sdp_reg); 64 65 if (p_cback) { 66 tBTA_SDP_API_ENABLE* p_buf = 67 (tBTA_SDP_API_ENABLE*)osi_malloc(sizeof(tBTA_SDP_API_ENABLE)); 68 p_buf->hdr.event = BTA_SDP_API_ENABLE_EVT; 69 p_buf->p_cback = p_cback; 70 bta_sys_sendmsg(p_buf); 71 status = BTA_SDP_SUCCESS; 72 } 73 } 74 return status; 75 } 76 77 /******************************************************************************* 78 * 79 * Function BTA_SdpSearch 80 * 81 * Description This function performs service discovery for a specific 82 * service on given peer device. When the operation is 83 * completed the tBTA_SDP_DM_CBACK callback function will be 84 * called with a BTA_SDP_SEARCH_COMPLETE_EVT. 85 * 86 * Returns BTA_SDP_SUCCESS, if the request is being processed. 87 * BTA_SDP_FAILURE, otherwise. 88 * 89 ******************************************************************************/ 90 tBTA_SDP_STATUS BTA_SdpSearch(const RawAddress& bd_addr, 91 const bluetooth::Uuid& uuid) { 92 tBTA_SDP_API_SEARCH* p_msg = 93 (tBTA_SDP_API_SEARCH*)osi_malloc(sizeof(tBTA_SDP_API_SEARCH)); 94 95 APPL_TRACE_API("%s", __func__); 96 97 p_msg->hdr.event = BTA_SDP_API_SEARCH_EVT; 98 p_msg->bd_addr = bd_addr; 99 p_msg->uuid = uuid; 100 101 bta_sys_sendmsg(p_msg); 102 103 return BTA_SDP_SUCCESS; 104 } 105 106 /******************************************************************************* 107 * 108 * Function BTA_SdpCreateRecordByUser 109 * 110 * Description This function is used to request a callback to create a SDP 111 * record. The registered callback will be called with event 112 * BTA_SDP_CREATE_RECORD_USER_EVT. 113 * 114 * Returns BTA_SDP_SUCCESS, if the request is being processed. 115 * BTA_SDP_FAILURE, otherwise. 116 * 117 ******************************************************************************/ 118 tBTA_SDP_STATUS BTA_SdpCreateRecordByUser(void* user_data) { 119 tBTA_SDP_API_RECORD_USER* p_msg = 120 (tBTA_SDP_API_RECORD_USER*)osi_malloc(sizeof(tBTA_SDP_API_RECORD_USER)); 121 122 APPL_TRACE_API("%s", __func__); 123 124 p_msg->hdr.event = BTA_SDP_API_CREATE_RECORD_USER_EVT; 125 p_msg->user_data = user_data; 126 127 bta_sys_sendmsg(p_msg); 128 129 return BTA_SDP_SUCCESS; 130 } 131 132 /******************************************************************************* 133 * 134 * Function BTA_SdpRemoveRecordByUser 135 * 136 * Description This function is used to request a callback to remove a SDP 137 * record. The registered callback will be called with event 138 * BTA_SDP_REMOVE_RECORD_USER_EVT. 139 * 140 * Returns BTA_SDP_SUCCESS, if the request is being processed. 141 * BTA_SDP_FAILURE, otherwise. 142 * 143 ******************************************************************************/ 144 tBTA_SDP_STATUS BTA_SdpRemoveRecordByUser(void* user_data) { 145 tBTA_SDP_API_RECORD_USER* p_msg = 146 (tBTA_SDP_API_RECORD_USER*)osi_malloc(sizeof(tBTA_SDP_API_RECORD_USER)); 147 148 APPL_TRACE_API("%s", __func__); 149 150 p_msg->hdr.event = BTA_SDP_API_REMOVE_RECORD_USER_EVT; 151 p_msg->user_data = user_data; 152 153 bta_sys_sendmsg(p_msg); 154 155 return BTA_SDP_SUCCESS; 156 } 157