12dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta/******************************************************************************
22dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *
32dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *  Copyright (C) 2014 The Android Open Source Project
42dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *  Copyright (C) 2003-2012 Broadcom Corporation
52dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *
62dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *  Licensed under the Apache License, Version 2.0 (the "License");
72dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *  you may not use this file except in compliance with the License.
82dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *  You may obtain a copy of the License at:
92dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *
102dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *  http://www.apache.org/licenses/LICENSE-2.0
112dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *
122dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *  Unless required by applicable law or agreed to in writing, software
132dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *  distributed under the License is distributed on an "AS IS" BASIS,
142dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
152dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *  See the License for the specific language governing permissions and
162dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *  limitations under the License.
172dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *
182dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta ******************************************************************************/
192dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta
202dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta/******************************************************************************
212dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *
222dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *  This is the implementation of the API for MCE subsystem
232dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta *
242dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta ******************************************************************************/
252dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta
262dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta#include "bta_api.h"
272dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta#include "bd.h"
282dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta#include "bta_sys.h"
292dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta#include "bta_mce_api.h"
302dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta#include "bta_mce_int.h"
312dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta#include "gki.h"
322dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta#include <string.h>
332dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta#include "port_api.h"
342dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta#include "sdp_api.h"
352dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta
362dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta/*****************************************************************************
372dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**  Constants
382dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta*****************************************************************************/
392dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta
402dc999935d4c69ae31ea93d9014165965dd373d6Hemant Guptastatic const tBTA_SYS_REG bta_mce_reg =
412dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta{
422dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    bta_mce_sm_execute,
432dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    NULL
442dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta};
452dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta
462dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta/*******************************************************************************
472dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**
482dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta** Function         BTA_MceEnable
492dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**
502dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta** Description      Enable the MCE I/F service. When the enable
512dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**                  operation is complete the callback function will be
522dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**                  called with a BTA_MCE_ENABLE_EVT. This function must
532dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**                  be called before other functions in the MCE API are
542dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**                  called.
552dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**
562dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta** Returns          BTA_MCE_SUCCESS if successful.
572dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**                  BTA_MCE_FAIL if internal failure.
582dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**
592dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta*******************************************************************************/
602dc999935d4c69ae31ea93d9014165965dd373d6Hemant GuptatBTA_MCE_STATUS BTA_MceEnable(tBTA_MCE_DM_CBACK *p_cback)
612dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta{
622dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    tBTA_MCE_STATUS status = BTA_MCE_FAILURE;
632dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    tBTA_MCE_API_ENABLE  *p_buf;
642dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta
652dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    APPL_TRACE_API(__FUNCTION__);
662dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    if(p_cback && FALSE == bta_sys_is_register(BTA_ID_MCE))
672dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    {
682dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta        memset(&bta_mce_cb, 0, sizeof(tBTA_MCE_CB));
692dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta
702dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta        /* register with BTA system manager */
712dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta        bta_sys_register(BTA_ID_MCE, &bta_mce_reg);
722dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta
732dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta        if (p_cback && (p_buf = (tBTA_MCE_API_ENABLE *) GKI_getbuf(sizeof(tBTA_MCE_API_ENABLE))) != NULL)
742dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta        {
752dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta            p_buf->hdr.event = BTA_MCE_API_ENABLE_EVT;
762dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta            p_buf->p_cback = p_cback;
772dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta            bta_sys_sendmsg(p_buf);
782dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta            status = BTA_MCE_SUCCESS;
792dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta        }
802dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    }
812dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    return(status);
822dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta}
832dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta
842dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta/*******************************************************************************
852dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**
862dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta** Function         BTA_MceGetRemoteMasInstances
872dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**
882dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta** Description      This function performs service discovery for the MAS service
892dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**                  by the given peer device. When the operation is completed
902dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**                  the tBTA_MCE_DM_CBACK callback function will be  called with
912dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**                  a BTA_MCE_MAS_DISCOVERY_COMP_EVT.
922dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**
932dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta** Returns          BTA_MCE_SUCCESS, if the request is being processed.
942dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**                  BTA_MCE_FAILURE, otherwise.
952dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta**
962dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta*******************************************************************************/
972dc999935d4c69ae31ea93d9014165965dd373d6Hemant GuptatBTA_MCE_STATUS BTA_MceGetRemoteMasInstances(BD_ADDR bd_addr)
982dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta{
992dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    tBTA_MCE_STATUS ret = BTA_MCE_FAILURE;
1002dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    tBTA_MCE_API_GET_REMOTE_MAS_INSTANCES *p_msg;
1012dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta
1022dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    APPL_TRACE_API(__FUNCTION__);
1032dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    if ((p_msg = (tBTA_MCE_API_GET_REMOTE_MAS_INSTANCES *)GKI_getbuf(sizeof(tBTA_MCE_API_GET_REMOTE_MAS_INSTANCES))) != NULL)
1042dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    {
1052dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta        p_msg->hdr.event = BTA_MCE_API_GET_REMOTE_MAS_INSTANCES_EVT;
1062dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta        bdcpy(p_msg->bd_addr, bd_addr);
1072dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta        bta_sys_sendmsg(p_msg);
1082dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta        ret = BTA_MCE_SUCCESS;
1092dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    }
1102dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta
1112dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta    return(ret);
1122dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta}
113