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