Home | History | Annotate | Download | only in sdp
      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