1ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/****************************************************************************** 2ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 3ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Copyright (C) 2009-2013 Broadcom Corporation 4ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 5ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Licensed under the Apache License, Version 2.0 (the "License"); 6ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * you may not use this file except in compliance with the License. 7ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * You may obtain a copy of the License at: 8ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 9ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * http://www.apache.org/licenses/LICENSE-2.0 10ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 11ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Unless required by applicable law or agreed to in writing, software 12ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * distributed under the License is distributed on an "AS IS" BASIS, 13ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * See the License for the specific language governing permissions and 15ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * limitations under the License. 16ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 17ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ******************************************************************************/ 18ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 19ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <string.h> 20ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bt_target.h" 215cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "bt_utils.h" 22ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "gap_int.h" 23ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 24ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*****************************************************************************/ 25ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/* G L O B A L GAP D A T A */ 26ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*****************************************************************************/ 27ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if GAP_DYNAMIC_MEMORY == FALSE 28ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattatGAP_CB gap_cb; 29ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 30ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 31ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/***************************************************************************** 32ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Callbacks passed to BTM - 33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** There are different callbacks based on the control block index so that 34ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** more than one command can be pending at a time. 35ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** NOTE: There must be 1 callback for each control block defined 36ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** GAP_MAX_BLOCKS 37ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 38ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Also, the inquiry results event has its own callback; Not handled here! 39ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta******************************************************************************/ 40ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btm_cback(UINT16 index, void *p_data) 41ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 42ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGAP_INFO *p_cb; 43ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGAP_INQ_CMPL inq_cmpl; 44ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 45ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Make sure that the index is valid AND it is in use */ 46ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (index < GAP_MAX_BLOCKS && gap_cb.blk[index].in_use) 47ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 48ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb = &gap_cb.blk[index]; 49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 50ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* If the callback is non-NULL, call it with the specified event */ 51ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch (p_cb->event) 52ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 53ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GAP_EVT_INQUIRY_COMPLETE: 54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* pass the number of results to caller */ 55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta inq_cmpl.num_results = ((tBTM_INQUIRY_CMPL *)p_data)->num_resp; 56ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta inq_cmpl.status = (((tBTM_INQUIRY_CMPL *)p_data)->status == BTM_SUCCESS) ? BT_PASS : GAP_ERR_PROCESSING; 58ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 59ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_data = &inq_cmpl; 60ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 61d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati GAP_TRACE_EVENT(" GAP Inquiry Complete Event (Status 0x%04x, Result(s) %d)", 62ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta inq_cmpl.status, inq_cmpl.num_results); 63ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 64ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 65ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GAP_EVT_DISCOVERY_COMPLETE: 66ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (*((UINT16 *) p_data)) 67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 68d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati GAP_TRACE_EVENT(" GAP Discovery Complete Event(SDP Result: 0x%04x)", *((UINT16 *) p_data)); 69ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 70ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 71ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 72d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati GAP_TRACE_EVENT(" GAP Discovery Successfully Completed"); 73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 74ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 75ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 77ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GAP_EVT_REM_NAME_COMPLETE: 78ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* override the BTM error code with a GAP error code */ 79ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ((tGAP_REMOTE_DEV_NAME *)p_data)->status = 80ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta gap_convert_btm_status ((tBTM_STATUS)((tBTM_REMOTE_DEV_NAME *)p_data)->status); 81ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 82d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati GAP_TRACE_EVENT(" GAP Remote Name Complete Event (status 0x%04x)", ((tGAP_REMOTE_DEV_NAME *)p_data)->status); 83ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta }; 86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 87ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->gap_cback) 88ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->gap_cback(p_cb->event, p_data); 89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 90ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Deallocate the control block */ 91ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta gap_free_cb(p_cb); 92ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 93ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 94ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 95ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 96ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*** Callback functions for BTM_CMPL_CB ***/ 97ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid gap_btm_cback0(void *p1) 98ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 99ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cback(0, p1); 100ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 101ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 102ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if GAP_MAX_BLOCKS > 1 103ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid gap_btm_cback1(void *p1) 104ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 105ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cback(1, p1); 106ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 107ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 108ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if GAP_MAX_BLOCKS > 2 109ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid gap_btm_cback2(void *p1) 110ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 111ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_cback(2, p1); 112ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/* There is only one instance of this because only 1 inquiry can be active at a time */ 116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid gap_inq_results_cb(tBTM_INQ_RESULTS *p_results, UINT8 *p_eir) 117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 118ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGAP_INFO *p_cb; 119ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 index; 1205cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_eir); 121ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 122d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati GAP_TRACE_EVENT ("GAP Inquiry Results Callback (bdaddr [%02x%02x%02x%02x%02x%02x])", 123ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_results->remote_bd_addr[0], p_results->remote_bd_addr[1], 124ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_results->remote_bd_addr[2], p_results->remote_bd_addr[3], 125ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_results->remote_bd_addr[4], p_results->remote_bd_addr[5]); 126d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati GAP_TRACE_EVENT (" (COD [%02x%02x%02x], clkoff 0x%04x)", 127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_results->dev_class[0], p_results->dev_class[1], p_results->dev_class[2], 128ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_results->clock_offset); 129ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 130ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Find the control block which has an Inquiry Active and call its results callback */ 131ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (index = 0, p_cb = &gap_cb.blk[0]; index < GAP_MAX_BLOCKS; index++, p_cb++) 132ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 133ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Look for the control block that is using inquiry */ 134ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->in_use && (p_cb->event == GAP_EVT_INQUIRY_COMPLETE)) 135ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 136ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Notify the higher layer if they care */ 137ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->gap_inq_rslt_cback) 138ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->gap_inq_rslt_cback (GAP_EVT_INQUIRY_RESULTS, (tGAP_INQ_RESULTS *)p_results); 139ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 140ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 141ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 142ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 143ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 144ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 145ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 146ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function gap_find_addr_name_cb 147ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 148ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Processes the remote name request event when the Find Addr by Name 149ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** request is active. The following procedure takes place: 150ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1. Check the resulting name (If return status is ok) 151ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 2. If name matches requested name, we're done, call the appl's callback 152ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** with the BD ADDR. 153ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 3. Otherwise get the next BD ADDR out of the inquiry database and intiate 154ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** another remote name request. 155ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4. If there are no more BD ADDRs, then call the appl's callback with a FAIL 156ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** status. 157ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 158ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns void 159ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 160ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 161ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid gap_find_addr_name_cb (tBTM_REMOTE_DEV_NAME *p) 162ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 163ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGAP_FINDADDR_CB *p_cb = &gap_cb.findaddr_cb; 164ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGAP_FINDADDR_RESULTS *p_result = &p_cb->results; 165ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 166ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->in_use) 167ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 168ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p->status == BTM_SUCCESS) 169ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 170d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati GAP_TRACE_EVENT(" GAP: FindAddrByName Rem Name Cmpl Evt (Status 0x%04x, Name [%s])", 171ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p->status, p->remote_bd_name); 172ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 173ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* See if the returned name matches the desired name; if not initiate another search */ 174ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!strncmp ((char *)p_result->devname, (char *) p->remote_bd_name, strlen ((char *) p_result->devname))) 175ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 176ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* We found the device! Copy it into the return structure */ 177ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy (p_result->bd_addr, p_cb->p_cur_inq->results.remote_bd_addr, BD_ADDR_LEN); 178ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_result->status = BT_PASS; 179ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else /* The name doesn't match so initiate another search */ 181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 182ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Get the device address of the next database entry */ 183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_cb->p_cur_inq = BTM_InqDbNext(p_cb->p_cur_inq)) != NULL) 184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((BTM_ReadRemoteDeviceName (p_cb->p_cur_inq->results.remote_bd_addr, 1868fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta (tBTM_CMPL_CB *) gap_find_addr_name_cb, BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED) 187ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return; /* This routine will get called again with the next results */ 188ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 189ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_result->status = gap_convert_btm_status ((tBTM_STATUS) p->status); 190ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 191ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 192ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_result->status = GAP_EOINQDB; /* No inquiry results; we're done! */ 193ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 194ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 195ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 197d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati GAP_TRACE_EVENT(" GAP: FindAddrByName Rem Name Cmpl Evt (Status 0x%04x)", p->status); 198ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_result->status = gap_convert_btm_status ((tBTM_STATUS) p->status); 199ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 200ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* If this code is reached, the process has completed so call the appl's callback with results */ 202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->p_cback) 203ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->p_cback (GAP_EVT_FIND_ADDR_COMPLETE, (tGAP_FINDADDR_RESULTS *) p_result); 204ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 205ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Clear out the control block */ 206ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->in_use = FALSE; 207ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->p_cback = (tGAP_CALLBACK *) NULL; 208ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 209ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function gap_find_addr_inq_cb 214ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 215ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Processes the inquiry complete event when the Find Addr by Name 216ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** request is active. This callback performs one of the two following 217ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** steps: 218ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1. If the remote name is retrieved automatically, the DB is searched 219ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** immediately, and the results are returned in the appls callback. 220ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 221ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 2. If remote name is not automatic, retrieve the first BTM INQ 222ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** database entry and initiate a remote name request. 223ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 224ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns void 225ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 226ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 227ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid gap_find_addr_inq_cb (tBTM_INQUIRY_CMPL *p) 228ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 229ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGAP_FINDADDR_CB *p_cb = &gap_cb.findaddr_cb; 230ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGAP_FINDADDR_RESULTS *p_result = &p_cb->results; 231ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 232ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->in_use) 233ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 235d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati GAP_TRACE_EVENT(" GAP: FindAddrByName Inq Cmpl Evt (Status 0x%04x, Result(s) %d)", 236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p->status, p->num_resp); 237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 238ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p->status == BTM_SUCCESS) 239ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 240ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Step 1: If automatically retrieving remote names then search the local database */ 241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_result->status = gap_find_local_addr_by_name (p_result->devname, p_result->bd_addr)) == GAP_NO_DATA_AVAIL) 242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Step 2: The name is not stored automatically, so a search of all devices needs to 244ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * be initiated. 245ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta */ 246ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_cb->p_cur_inq = BTM_InqDbFirst()) != NULL) 247ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 248ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((BTM_ReadRemoteDeviceName (p_cb->p_cur_inq->results.remote_bd_addr, 2498fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta (tBTM_CMPL_CB *) gap_find_addr_name_cb, BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED) 250ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return; /* Wait for the response in gap_find_addr_name_cb() */ 251ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 252ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_result->status = gap_convert_btm_status (p->status); 253ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 254ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 255ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_result->status = GAP_EOINQDB; /* No inquiry results; we're done! */ 256ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 257ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 258ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 259ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_result->status = gap_convert_btm_status (p->status); 260ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 261ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* If this code is reached, the process has completed so call the appl's callback with results */ 262ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->p_cback) 263ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->p_cback (GAP_EVT_FIND_ADDR_COMPLETE, (tGAP_FINDADDR_RESULTS *) p_result); 264ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 265ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Clear out the control block */ 266ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->in_use = FALSE; 267ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->p_cback = (tGAP_CALLBACK *) NULL; 268ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 269ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 270ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 271ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 272ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 273ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function gap_find_local_addr_by_name 274ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 275ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Searches through the internal inquiry database for a device 276ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** that has the same name as the one passed in. If found, the 277ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** device address is filled in. 278ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 279ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** NOTE: It only searches up to the first BTM_MAX_REM_BD_NAME_LEN 280ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** bytes because the inquiry database uses tBTM_BD_NAME. 281ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 282ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns BT_PASS if the name was found and the device address is filled in 283ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** GAP_EOINQDB if the name was not found in the database 284ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** GAP_NO_DATA_AVAIL if the name is not saved with the inquiry 285ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 286ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 287ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 gap_find_local_addr_by_name (const tBTM_BD_NAME devname, BD_ADDR bd_addr) 288ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 289ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 290ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/* If the remote name is retrieved automatically during an inquiry search the local db */ 291ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BTM_INQ_GET_REMOTE_NAME == TRUE) 292ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_INQ_INFO *p_result; 293ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 294ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_result = BTM_InqDbFirst(); 295ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 296ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta while (p_result) 297ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 298ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Check the entry for a device name match */ 299ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!strncmp ((char *)devname, (char *)p_result->remote_name, BTM_MAX_REM_BD_NAME_LEN)) 300ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 301ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy (bd_addr, p_result->results.remote_bd_addr, BD_ADDR_LEN); 302ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (BT_PASS); 303ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 304ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 305ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_result = BTM_InqDbNext(p_result); 306ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta }; 307ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 308ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (GAP_EOINQDB); 309ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#else 3105cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(devname); 3115cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(bd_addr); 312ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* No data available because we are not automatically saving the data */ 313ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (GAP_NO_DATA_AVAIL); 314ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 315ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 316ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 317ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 318ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 319ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 320ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function gap_allocate_cb 321ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 322ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Look through the GAP Control Blocks for a free one. 323ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 324ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns Pointer to the control block or NULL if not found 325ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 326ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 327ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattatGAP_INFO *gap_allocate_cb (void) 328ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 329ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGAP_INFO *p_cb = &gap_cb.blk[0]; 330ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 x; 331ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 332ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (x = 0; x < GAP_MAX_BLOCKS; x++, p_cb++) 333ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 334ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!p_cb->in_use) 335ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 336ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memset (p_cb, 0, sizeof (tGAP_INFO)); 337ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 338ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->in_use = TRUE; 339ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->index = x; 340ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->p_data = (void *)NULL; 341ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (p_cb); 342ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 343ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 344ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 345ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* If here, no free control blocks found */ 346ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (NULL); 347ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 348ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 349ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 350ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 351ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 352ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function gap_free_cb 353ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 354ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Release GAP control block. 355ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 356ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns Pointer to the control block or NULL if not found 357ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 358ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 359ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid gap_free_cb (tGAP_INFO *p_cb) 360ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 361ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb) 362ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 363ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->gap_cback = NULL; 364ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->in_use = FALSE; 365ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 366ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 367ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 368ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 369ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 370ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function gap_is_service_busy 372ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 373ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Look through the GAP Control Blocks that are in use 374ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** and check to see if the event waiting for is the command 375ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** requested. 376ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 377ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns TRUE if already in use 378ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** FALSE if not busy 379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 380ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 381ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN gap_is_service_busy (UINT16 request) 382ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 383ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGAP_INFO *p_cb = &gap_cb.blk[0]; 384ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 x; 385ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (x = 0; x < GAP_MAX_BLOCKS; x++, p_cb++) 387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->in_use && p_cb->event == request) 389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (TRUE); 390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 391ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* If here, service is not busy */ 393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (FALSE); 394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 396ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 399ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function gap_convert_btm_status 400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Converts a BTM error status into a GAP error status 402ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 403ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns GAP_UNKNOWN_BTM_STATUS is returned if not recognized 405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 gap_convert_btm_status (tBTM_STATUS btm_status) 408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch (btm_status) 410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_SUCCESS: 412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (BT_PASS); 413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_CMD_STARTED: 415ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (GAP_CMD_INITIATED); 416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_BUSY: 418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (GAP_ERR_BUSY); 419ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_MODE_UNSUPPORTED: 421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_ILLEGAL_VALUE: 422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (GAP_ERR_ILL_PARM); 423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 424ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_WRONG_MODE: 425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (GAP_DEVICE_NOT_UP); 426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 427ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_UNKNOWN_ADDR: 428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (GAP_BAD_BD_ADDR); 429ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 430ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTM_DEVICE_TIMEOUT: 431ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (GAP_ERR_TIMEOUT); 432ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 433ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 434ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return (GAP_ERR_PROCESSING); 435ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 436ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 437