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
21ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bt_target.h"
225cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "bt_utils.h"
23ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "gap_int.h"
24ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btm_int.h"
25ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "gki.h"
26ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btu.h"
27ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
28ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
29ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
30ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_SetDiscoverableMode
31ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
32ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to allow or disallow a service to
33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  discovered (Inquiry Scans).
34ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
35ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      mode        - GAP_NON_DISCOVERABLE, GAP_LIMITED_DISCOVERABLE,
36ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                  or GAP_GENERAL_DISCOVERABLE
37ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
38ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  duration    - Amount of time for the duration of an inquiry scan.
39ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                The step size is in 0.625 msec intervals.
40ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                Range: 0x0012 - 0x1000 (11.25 - 2560 msecs)
41ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
42ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                If a value of '0' is entered the default of
43ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                0x0012 (11.25 msecs) will be used.
44ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                Note: The duration must be less than or equal to
45ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                the interval.
46ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
47ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  interval    - Amount of time between the start of two inquiry scans.
48ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                The step size is in 0.625 msec intervals.
49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                Range: 0x0012 - 0x1000 (11.25 - 2560 msecs)
50ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                If a value of '0' is entered the default of
51ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                0x800 (1.28 secs) will be used.
52ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
53ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          BT_PASS (0) if successful,
55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_ILL_PARM if a bad parameter is detected,
56ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_DEVICE_NOT_UP if the device is not active,
57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_PROCESSING if not enough resources to carry out request
58ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
59ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
60ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_SetDiscoverableMode (UINT16 mode, UINT16 duration, UINT16 interval)
61ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
62ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_STATUS status;
63ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
64ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    status = BTM_SetDiscoverability(mode, duration, interval);
65ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
66ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (gap_convert_btm_status (status));
67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
68ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
69ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
70ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
71ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
72ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_ReadDiscoverableMode
73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
74ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to retrieve the current discoverable mode
75ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  for the local device.
76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
77ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      duration    - pointer to the amount of time of an inquiry scan.
78ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                The step size is in 0.625 msec intervals.
79ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                Range: 0x0012 - 0x1000 (11.25 - 2560 msecs)
80ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
81ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  interval    - pointer to the amount of time between the start of
82ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                two inquiry scans.
83ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                The step size is in 0.625 msec intervals.
84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                Range: 0x0012 - 0x1000 (11.25 - 2560 msecs)
85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
87ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          GAP_NON_DISCOVERABLE, GAP_LIMITED_DISCOVERABLE, or
88ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_GENERAL_DISCOVERABLE
89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
90ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
91ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_ReadDiscoverableMode (UINT16 *duration, UINT16 *interval)
92ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
93ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (BTM_ReadDiscoverability(duration, interval));
94ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
95ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
96ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
97ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
98ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
99ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_SetConnectableMode
100ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
101ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to allow or disallow a
102ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  connections on the local device.
103ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
104ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      mode        - GAP_NON_CONNECTABLE, GAP_CONNECTABLE,
105ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
106ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  duration    - Amount of time for the duration of a page scan.
107ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                The step size is in 0.625 msec intervals.
108ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                Range: 0x0012 - 0x1000 (11.25 - 2560 msecs)
109ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
110ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                If a value of '0' is entered the default of
111ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                0x0012 (11.25 msecs) will be used.
112ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                Note: The duration must be less than or equal to
113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                the interval.
114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  interval    - Amount of time between the start of two page scans.
116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                The step size is in 0.625 msec intervals.
117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                Range: 0x0012 - 0x1000 (11.25 - 2560 msecs)
118ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                If a value of '0' is entered the default of
119ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                0x800 (1.28 secs) will be used.
120ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
121ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
122ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          BT_PASS (0) if successful,
123ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_ILL_PARM if a bad parameter is detected,
124ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_DEVICE_NOT_UP if the device is not active,
125ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_PROCESSING if not enough resources to carry out request
126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
128ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_SetConnectableMode (UINT16 mode, UINT16 duration, UINT16 interval)
129ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
130ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_STATUS status;
131ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
132ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    status = BTM_SetConnectability(mode, duration, interval);
133ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
134ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (gap_convert_btm_status (status));
135ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
136ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
137ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
138ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
139ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
140ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_FindAddrByName
141ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
142ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to retrieve a device address given
143ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  a device name.  It first looks in the current local inquiry
144ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  database for the device with the specified name.  If not found
145ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  it initiates a general inquiry.  Upon completion, it retrieves
146ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  the name for each device until a match is found or all devices
147ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  have been checked.  Note:  This process can take a while to
148ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  complete.
149ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
150ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      devname -
151ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
152ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  inqparms - pointer to the inquiry information
153ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      mode - GAP_GENERAL_INQUIRY or GAP_LIMITED_INQUIRY inquiry
154ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      duration - length in 1.28 sec intervals
155ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      max_resps - maximum amount of devices to search for before ending the inquiry
156ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      filter_cond_type - GAP_CLR_INQUIRY_FILTER, GAP_FILTER_COND_DEVICE_CLASS, or
157ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                         GAP_FILTER_COND_BD_ADDR
158ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      filter_cond - value for the filter (based on filter_cond_type)
159ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
160ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
161ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          BT_PASS if the name was immediately available.  (BD_ADDR is returned)
162ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_CMD_INITIATED if an inquiry has been initiated
163ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
164ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
165ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_FindAddrByName (BD_NAME devname, tGAP_INQ_PARMS *p_inq_parms, tGAP_CALLBACK *p_addr_cb,
166ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                           BD_ADDR bd_addr)
167ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
168ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16           status;
169ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_STATUS      btm_status;
170ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
171ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
172ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* If the remote name is retrieved automatically during an inquiry search the local db first */
173ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ((status = gap_find_local_addr_by_name (devname, bd_addr)) != BT_PASS)
174ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
175ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* If this code is used, the name wasn't in the current inquiry database */
176ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* A general inquiry must now be initiated */
177ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (gap_cb.findaddr_cb.in_use == FALSE)
178ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
179ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            gap_cb.findaddr_cb.p_cback = p_addr_cb;
180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            gap_cb.findaddr_cb.p_cur_inq = (tBTM_INQ_INFO *) NULL;     /* Reset to the beginning of the database */
181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BCM_STRNCPY_S ((char *)gap_cb.findaddr_cb.results.devname, sizeof(gap_cb.findaddr_cb.results.devname), (char *)devname, BTM_MAX_REM_BD_NAME_LEN);
182ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            /* make sure we have an end of string char */
184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            gap_cb.findaddr_cb.results.devname[BTM_MAX_REM_BD_NAME_LEN] = 0;
185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
186ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btm_status = BTM_StartInquiry (p_inq_parms, (tBTM_INQ_RESULTS_CB *) NULL,
187ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    (tBTM_CMPL_CB *) gap_find_addr_inq_cb);
188ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                gap_cb.findaddr_cb.in_use = TRUE;
189ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
190ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            /* convert the error code into a GAP code and check the results for any errors */
191ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if ((status = gap_convert_btm_status (btm_status)) == GAP_CMD_INITIATED)
192ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                gap_cb.findaddr_cb.in_use = TRUE;
193ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
194ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        else
195ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = GAP_ERR_BUSY;
196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
197ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
198ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (status);
199ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
200ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
203ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
204ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_ReadConnectableMode
205ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
206ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to retrieve the current connectability
207ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  mode for the local device.
208ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
209ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      duration    - pointer to the amount of time of an page scan.
210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                The step size is in 0.625 msec intervals.
211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                Range: 0x0012 - 0x1000 (11.25 - 2560 msecs)
212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  interval    - pointer to the amount of time between the start of
214ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                two page scans.
215ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                The step size is in 0.625 msec intervals.
216ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                Range: 0x0012 - 0x1000 (11.25 - 2560 msecs)
217ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
218ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
219ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          GAP_NON_CONNECTABLE, GAP_CONNECTABLE
220ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
221ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
222ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
223ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_ReadConnectableMode (UINT16 *duration, UINT16 *interval)
224ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
225ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (BTM_ReadConnectability(duration, interval));
226ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
227ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
228ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
229ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
230ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
231ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_SetSecurityMode
232ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
233ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Set security mode for the device
234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
235ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void
236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
238ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid GAP_SetSecurityMode (UINT8 sec_mode)
239ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
240ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTM_SetSecurityMode (sec_mode);
241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
244ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
245ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
246ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_Bond
247ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
248ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to perform bonding with peer device
249ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
250ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      bd_addr      - Address of the device to bond
251ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  pin_len      - length in bytes of the PIN Code
252ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  p_pin        - pointer to array with the PIN Code
253ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  trusted_mask - bitwise OR of trusted services (array of UINT32)
254ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
255ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
256ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT8 GAP_Bond (BD_ADDR bd_addr, UINT8 pin_len, UINT8 *p_pin, UINT32 trusted_mask[])
257ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
258ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return ((UINT8) BTM_SecBond (bd_addr, pin_len, p_pin, trusted_mask));
259ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
260ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
261ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
262ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
263ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
264ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_SecRegister
265ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
266ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Application manager calls this function to register for
267ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  security services.  There can be one and only one application
268ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  saving link keys.  BTM allows only first registration.
269ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
270ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          TRUE if registered OK, else FALSE
271ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
272ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
273ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN  GAP_SecRegister (tBTM_APPL_INFO *p_cb_info)
274ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
275ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (BTM_SecRegister (p_cb_info));
276ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
277ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
278ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
279ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
280ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
281ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_PinRsp
282ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
283ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called from UI after Security Manager submitted
284ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  PIN code request.
285ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
286ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      bd_addr      - Address of the device for which PIN was requested
287ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  res          - result of the operation BTM_SUCCESS if success
288ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  pin_len      - length in bytes of the PIN Code
289ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  p_pin        - pointer to array with the PIN Code
290ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  trusted_mask - bitwise OR of trusted services (array of UINT32)
291ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
292ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
293ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid GAP_PinRsp (BD_ADDR bd_addr, UINT8 res, UINT8 pin_len, UINT8 *p_pin, UINT32 trusted_mask[])
294ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
295ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTM_PINCodeReply (bd_addr, res, pin_len, p_pin, trusted_mask);
296ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
297ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
298ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
299ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
300ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
301ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_AuthorizeRsp
302ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
303ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called from UI after Security Manager submitted
304ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  authorization request
305ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
306ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      bd_addr      - Address of the device for which PIN was requested
307ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  res          - result of the operation BTM_SUCCESS if success
308ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  trusted_mask - bitwise OR of trusted services (array of UINT32)
309ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
310ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
311ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid GAP_AuthorizeRsp (BD_ADDR bd_addr, UINT8 res, UINT32 trusted_mask[])
312ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
313ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTM_DeviceAuthorized (bd_addr, res, trusted_mask);
314ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
315ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
316ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
317ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
318ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
319ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_SetPairableMode
320ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
321ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to allow or disallow pairing
322ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  on the local device.
323ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
324ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      mode        - GAP_ALLOW_PAIRING, GAP_DISALLOW_PAIRING
325ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  connect_only_pairable - TRUE or FALSE connect only to paired devices
326ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
327ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  callback    - The callback is called when a pin number is requested.
328ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
329ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          BT_PASS (0) if successful, or a non-zero error code
330ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
331ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
332ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
333ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_SetPairableMode (UINT16 mode, BOOLEAN connect_only_paired)
334ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
335ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_STATUS btm_status;
336ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16      status = BT_PASS;
337ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
338ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (mode == GAP_ALLOW_PAIRING)
339ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
340ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        btm_status = BTM_SetConnectability(BTM_CONNECTABLE, 0, 0);
341ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
342ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if ((status = gap_convert_btm_status (btm_status)) == BT_PASS)
343ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTM_SetPairableMode (TRUE, connect_only_paired);
344ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
345ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else if (mode == GAP_DISALLOW_PAIRING)
346ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
347ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        BTM_SetPairableMode (FALSE, connect_only_paired);
348ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
349ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else
350ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
351d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati        GAP_TRACE_ERROR ("GAP_SetPairableMode: illegal mode %d", mode);
352ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        status = GAP_ERR_ILL_MODE;
353ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
354ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (status);
355ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
356ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
357ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
358ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
359ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
360ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_StartInquiry
361ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
362ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function initiates a single inquiry.
363ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
364ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      p_inqparms - pointer to the inquiry information
365ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      mode - GAP_GENERAL_INQUIRY or GAP_LIMITED_INQUIRY inquiry
366ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      duration - length in 1.28 sec intervals
367ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      max_resps - maximum amount of devices to search for before ending the inquiry
368ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      filter_cond_type - GAP_CLR_INQUIRY_FILTER, GAP_FILTER_COND_DEVICE_CLASS, or
369ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                         GAP_FILTER_COND_BD_ADDR
370ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      filter_cond - value for the filter (based on filter_cond_type)
371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
372ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  p_results_cb - Pointer to the callback routine which gets called
373ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                 upon receipt of an inquiry result. If this field is
374ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                 NULL, the application is not notified.
375ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
376ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  p_cmpl_cb   - Pointer to the callback routine which gets called
377ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                upon completion.  If this field is NULL, the
378ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                application is not notified when completed.
379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
380ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
381ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          BT_PASS (0) if successful,
382ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_ILL_MODE if a bad mode parameter was passed
383ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_ILL_INQ_TIME if a bad interval or duration was passed
384ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_NO_CTRL_BLK if out of control blocks
385ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_ILL_PARM if a bad parameter was detected in BTM
386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_BUSY if the device already has an iquiry active
387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_DEVICE_NOT_UP if the device is not initialized yet
388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_PROCESSING if any other BTM error was returned
389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
391ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_StartInquiry (tGAP_INQ_PARMS *p_inq_parms, tGAP_CALLBACK *p_results_cb, tGAP_CALLBACK *p_cmpl_cb)
392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tGAP_INFO   *p_cb;
394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_STATUS  btm_status;
395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16       retval;
396ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /*** Make sure the parameters are valid before continuing ***/
398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (p_inq_parms->mode != GAP_GENERAL_INQUIRY && p_inq_parms->mode != GAP_LIMITED_INQUIRY)
399ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return (GAP_ERR_ILL_MODE);
400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (p_inq_parms->duration < GAP_MIN_INQUIRY_LEN   ||
402ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_inq_parms->duration > GAP_MAX_INQUIRY_LENGTH)
403ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return (GAP_ERR_ILL_INQ_TIME);
404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /*** get a control block for this operation ***/
406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ((p_cb = gap_allocate_cb()) != NULL)
407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_cb->gap_cback = p_cmpl_cb;
409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_cb->gap_inq_rslt_cback = p_results_cb;
410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_cb->event = GAP_EVT_INQUIRY_COMPLETE; /* Return event expected */
411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        btm_status = BTM_StartInquiry(p_inq_parms, gap_inq_results_cb,
413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                        (tBTM_CMPL_CB *) gap_cb.btm_cback[p_cb->index]);
414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
415ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* convert the error code into a GAP code and check the results for any errors */
416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if ((retval = gap_convert_btm_status (btm_status)) != GAP_CMD_INITIATED)
417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            gap_free_cb(p_cb);      /* Error starting the inquiry */
418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
419ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else
420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        retval = GAP_ERR_NO_CTRL_BLK;
421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (retval);
423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
424ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
427ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_StartPeriodicInquiry
429ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
430ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function initiates a periodic inquiry.
431ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
432ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      p_inqparms - pointer to the inquiry information
433ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      mode - GAP_GENERAL_INQUIRY or GAP_LIMITED_INQUIRY inquiry
434ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      duration - length in 1.28 sec intervals
435ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      max_resps - maximum amount of devices to search for before ending the inquiry
436ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      filter_cond_type - GAP_CLR_INQUIRY_FILTER, GAP_FILTER_COND_DEVICE_CLASS, or
437ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                         GAP_FILTER_COND_BD_ADDR
438ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      filter_cond - value for the filter (based on filter_cond_type)
439ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
440ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  min_time    - Minimum amount of time between consecutive inquiries.
441ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                The value is in 1.28 second intervals.
442ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                Range: 0x0002 - 0xFFFE (2.56 - 83883.52 seconds)
443ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
444ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  max_time    - Maximum amount of time between consecutive inquiries.
445ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                The value is in 1.28 sec intervals.
446ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                Range: 0x0003 - 0xFFFF (3.84 - 83884.8 seconds)
447ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
448ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  p_results_cb - Pointer to the callback routine which gets called
449ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                 upon receipt of an inquiry result. If this field is
450ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                 NULL, the application is not notified.
451ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
452ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
453ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          BT_PASS (0) if successful,
454ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_ILL_MODE if a bad mode parameter was passed
455ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_ILL_INQ_TIME if a bad interval or duration was passed
456ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_NO_CTRL_BLK if out of control blocks
457ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_ILL_PARM if a bad parameter was detected in BTM
458ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_BUSY if the device already has an iquiry active
459ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_DEVICE_NOT_UP if the device is not initialized yet
460ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_PROCESSING if any other BTM error was returned
461ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
462ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
463ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
464ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_StartPeriodicInquiry (tGAP_INQ_PARMS *p_inq_parms, UINT16 min_time,
465ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 UINT16 max_time, tGAP_CALLBACK *p_results_cb)
466ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
467ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tGAP_INFO   *p_cb;
468ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_STATUS  btm_status;
469ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16       retval = BT_PASS;
470ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
471ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /*** Make sure the parameters are valid before continuing ***/
472ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (p_inq_parms->mode != GAP_GENERAL_INQUIRY && p_inq_parms->mode != GAP_LIMITED_INQUIRY)
473ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return (GAP_ERR_ILL_MODE);
474ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
475ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (p_inq_parms->duration < GAP_MIN_INQUIRY_LEN     ||
476ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_inq_parms->duration > GAP_MAX_INQUIRY_LENGTH  ||
477ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        min_time <= p_inq_parms->duration               ||
478ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        min_time < GAP_PER_INQ_MIN_MIN_PERIOD           ||
479ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        min_time > GAP_PER_INQ_MAX_MIN_PERIOD           ||
480ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        max_time <= min_time                            ||
481ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        max_time < GAP_PER_INQ_MIN_MAX_PERIOD)
482ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
483ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return (GAP_ERR_ILL_INQ_TIME);
484ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
485ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
486ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /*** get a control block for this operation ***/
487ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ((p_cb = gap_allocate_cb()) != NULL)
488ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
489ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_cb->gap_inq_rslt_cback = p_results_cb;
490ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_cb->event = GAP_EVT_INQUIRY_COMPLETE; /* mark the inquiry event active */
491ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
492ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        btm_status = BTM_SetPeriodicInquiryMode(p_inq_parms, max_time, min_time,
493ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                                gap_inq_results_cb);
494ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
495ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* convert the error code into a GAP code and check the results for any errors */
496ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if ((retval = gap_convert_btm_status (btm_status)) != GAP_CMD_INITIATED)
497ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            gap_free_cb(p_cb);      /* Error starting the inquiry */
498ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
499ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else
500ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        retval = GAP_ERR_NO_CTRL_BLK;
501ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
502ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (retval);
503ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
504ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
505ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
506ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
507ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
508ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_CancelInquiry
509ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
510ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function cancels a single inquiry (if in progress)
511ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
512ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      None
513ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
514ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          BOOLEAN (TRUE if successful, otherwise FALSE)
515ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
516ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
517ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_CancelInquiry(void)
518ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
519ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tGAP_INFO   *p_cb = &gap_cb.blk[0];
520ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8        x;
521ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_STATUS  btm_status;
522ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16       status;
523ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
524ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btm_status = BTM_CancelInquiry();
525ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ((status = gap_convert_btm_status (btm_status)) == BT_PASS)
526ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
527ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* Free the control block that is waiting for the inquiry complete event */
528ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        for (x = 0; x < GAP_MAX_BLOCKS; x++, p_cb++)
529ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
530ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_cb->in_use && p_cb->event == GAP_EVT_INQUIRY_COMPLETE)
531ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
532ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                gap_free_cb(p_cb);
533ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                return (BT_PASS);
534ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
535ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
536ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
537ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* If here the control block was not found */
538ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        status = GAP_ERR_NO_CTRL_BLK;
539ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
540ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
541ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (status);
542ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
543ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
544ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
545ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
546ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
547ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_CancelPeriodicInquiry
548ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
549ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function cancels a periodic inquiry (if in progress)
550ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
551ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      None
552ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
553ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          BOOLEAN: (TRUE if successful, otherwise FALSE)
554ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
555ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
556ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_CancelPeriodicInquiry(void)
557ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
558ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tGAP_INFO   *p_cb = &gap_cb.blk[0];
559ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8        x;
560ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_STATUS  btm_status;
561ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16       status;
562ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
563ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btm_status = BTM_CancelPeriodicInquiry();
564ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ((status = gap_convert_btm_status (btm_status)) == BT_PASS)
565ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
566ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* Free the control block that is waiting for the inquiry complete event */
567ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        for (x = 0; x < GAP_MAX_BLOCKS; x++, p_cb++)
568ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
569ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_cb->in_use && p_cb->event == GAP_EVT_INQUIRY_COMPLETE)
570ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
571ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                gap_free_cb(p_cb);
572ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                return (BT_PASS);
573ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
574ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
575ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
576ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* If here the control block was not found */
577ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        status = GAP_ERR_NO_CTRL_BLK;
578ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
579ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
580ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (status);
581ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
582ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
583ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
584ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
585ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
586ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_GetFirstInquiryResult
587ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
588ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function retrieves the first valid inquiry result.
589ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
590ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      p_results - pointer to the inquiry results
591ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
592ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          BT_PASS (0) if successful, or a non-zero error code
593ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_EOINQDB if no more entries in the database.
594ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
595ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
596ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_GetFirstInquiryResult(tGAP_INQ_RESULTS *p_results)
597ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
598ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8 *ptr;
599ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
600ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    gap_cb.cur_inqptr = BTM_InqFirstResult();
601ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
602ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (gap_cb.cur_inqptr != NULL)
603ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
604ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(p_results, &gap_cb.cur_inqptr->results, sizeof(tBTM_INQ_RESULTS));
605ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
606ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        ptr = (UINT8 *)gap_cb.cur_inqptr->results.remote_bd_addr;
607d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati        GAP_TRACE_EVENT("GAP_GetFirstInqResult %02x%02x%02x%02x%02x%02x",
608ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    ptr[0],ptr[1],ptr[2],ptr[3],ptr[4],ptr[5]);
609ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return(BT_PASS);
610ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
611ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else
612ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
613d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati        GAP_TRACE_EVENT("GAP_FirstInqResults:  No BD_ADDRs Found");
614ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memset(p_results, 0, sizeof(tBTM_INQ_RESULTS));
615ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return(GAP_EOINQDB);
616ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
617ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
618ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
619ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
620ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
621ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
622ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_GetNextInquiryResult
623ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
624ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function retrieves the next valid inquiry result.
625ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
626ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      p_results  - pointer to the inquiry results
627ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
628ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          BT_PASS (0) if successful, or a non-zero status code
629ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_EOINQDB if no more entries in the database.
630ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
631ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
632ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_GetNextInquiryResult(tGAP_INQ_RESULTS *p_results)
633ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
634ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8 *ptr;
635ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
636ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /*** if the current inquiry db pointer is NULL then call the first entry ***/
637ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (gap_cb.cur_inqptr)
638ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
639ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        gap_cb.cur_inqptr = BTM_InqNextResult(gap_cb.cur_inqptr);
640ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (gap_cb.cur_inqptr != NULL)
641ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
642ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            memcpy(p_results, &gap_cb.cur_inqptr->results,
643ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                   sizeof(tGAP_INQ_RESULTS));
644ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
645ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            ptr = (UINT8 *)gap_cb.cur_inqptr->results.remote_bd_addr;
646d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati            GAP_TRACE_EVENT("GAP_GetNextInqResult %02x%02x%02x%02x%02x%02x",
647ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                        ptr[0],ptr[1],ptr[2],ptr[3],ptr[4],ptr[5]);
648ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
649ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            return(BT_PASS);
650ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
651ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        else
652ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
653d5bba906b0704cd60e824613bd2e438935ba5d89Sharvil Nanavati            GAP_TRACE_EVENT("GAP_NextInqResults:  No BD_ADDRs Found");
654ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            memset(p_results, 0, sizeof(tBTM_INQ_RESULTS));
655ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            return(GAP_EOINQDB);
656ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
657ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
658ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else
659ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return (GAP_GetFirstInquiryResult(p_results));
660ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
661ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
662ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
663ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
664ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
665ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_ReadLocalDeviceInfo
666ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
667ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function retrieves local device information to the caller.
668ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
669ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      name        - (output) pointer to the UTF-8 encoded string representing
670ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                the device name.
671ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
672ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  addr        - (output) pointer to the Bluetooth device address (BD_ADDR).
673ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
674ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  verinfo     - (output) pointer to the LMP version information.
675ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
676ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  features    - (output) pointer to the LMP features for the device.
677ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
678ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  NOTE:  Return parameters that are set to NULL are not retrieved.
679ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
680ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          BT_PASS (0) if successful, or a non-zero error code
681ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
682ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
683ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
684ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_ReadLocalDeviceInfo(UINT8 *name, BD_ADDR *addr, tGAP_LMP_VERSION *verinfo,
685ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                               tGAP_LMP_FEATURES *features)
686ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
6875cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(name);
6885cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(addr);
6895cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(verinfo);
6905cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(features);
691ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (GAP_UNSUPPORTED);
692ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
693ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
694ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
695ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
696ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
697ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
698ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_GetRemoteDeviceName
699ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
700ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      The remote name is retrieved from the specified remote device.  If
701ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_CMD_INITIATED is returned by the function, the command was
702ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  successfully sent to the controller.  The GAP_EVT_NAME_RESP event
703ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  is passed in the callback when the remote device name has been retrieved.
704ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
705ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:      addr        - The Bluetooth device address (BD_ADDR) of the remote
706ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                device.
707ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
708ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  callback    - pointer to the callback which is called after the
709ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                remote device has been retrieved.
710ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                p_data in the callback points to the structure containing the
711ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                status, device name length, and the UTF-8 encoded
712ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                device name. (type tBTM_REMOTE_DEV_NAME)
713ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                                The event field in the callback is set to GAP_EVT_REM_NAME_COMPLETE.
714ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  The callback is not called unless (GAP_CMD_INITIATED) is returned.
715ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
716ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
717ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns
718ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_CMD_INITIATED if remote search successfully initiated
719ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_BUSY if a remote name request is already in progress,
720ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_NO_CTRL_BLK if out of control blocks (too many commands pending)
721ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_BAD_BD_ADDR if the device address is bad,
722ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_DEVICE_NOT_UP if the device has not been initialized yet
723ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_PROCESSING if any other BTM error has been returned
724ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
725ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
726ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_GetRemoteDeviceName (BD_ADDR addr, tGAP_CALLBACK *callback)
727ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
728ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tGAP_INFO   *p_cb;
729ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16       retval;
730ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_STATUS  btm_status;
731ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
732ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ((p_cb = gap_allocate_cb()) != NULL)
733ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
734ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_cb->gap_cback = callback;
735ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_cb->event = GAP_EVT_REM_NAME_COMPLETE;     /* Return event expected */
736ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
7378fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta        btm_status = BTM_ReadRemoteDeviceName (addr, gap_cb.btm_cback[p_cb->index], BT_TRANSPORT_BR_EDR);
738ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
739ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* If the name was not returned immediately, or if an error occurred, release the control block */
740ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if ((retval = gap_convert_btm_status (btm_status)) != GAP_CMD_INITIATED)
741ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            gap_free_cb (p_cb);
742ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
743ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else
744ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        retval = GAP_ERR_NO_CTRL_BLK;
745ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
746ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (retval);
747ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
748ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
749ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
750ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
751ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_SetDeviceClass
752ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
753ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function updates the local Device Class.
754ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
755ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:
756ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  p_cod   - Pointer to the device class to set to
757ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
758ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  cmd     - the fields of the device class to update.
759ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                            GAP_SET_COD_MAJOR_MINOR, - overwrite major, minor class
760ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                            GAP_SET_COD_SERVICE_CLASS - set the bits in the input
761ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                            GAP_CLR_COD_SERVICE_CLASS - clear the bits in the input
762ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                            GAP_SET_COD_ALL - overwrite major, minor, set the bits in service class
763ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                            GAP_INIT_COD - overwrite major, minor, and service class
764ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
765ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          BT_PASS (0) if successful,
766ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_BUSY if a discovery is already in progress
767ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_ILL_PARM if an illegal parameter was detected
768ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  GAP_ERR_PROCESSING if any other BTM error has been returned
769ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
770ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
771ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16 GAP_SetDeviceClass(tGAP_COD *p_cod, UINT8 cmd)
772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
773ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_STATUS btm_status;
774ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8 *dev;
775ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16 service;
776ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8  minor, major;
777ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    DEV_CLASS dev_class;
778ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
779ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    dev = BTM_ReadDeviceClass();
780ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTM_COD_SERVICE_CLASS( service, dev );
781ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTM_COD_MINOR_CLASS(minor, dev );
782ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTM_COD_MAJOR_CLASS(major, dev );
783ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
784ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch(cmd)
785ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
786ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    case GAP_SET_COD_MAJOR_MINOR:
787ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK;
788ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK;
789ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        break;
790ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
791ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    case GAP_SET_COD_SERVICE_CLASS:
792ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* clear out the bits that is not SERVICE_CLASS bits */
793ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_cod->service &= BTM_COD_SERVICE_CLASS_MASK;
794ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        service = service | p_cod->service;
795ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        break;
796ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
797ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    case GAP_CLR_COD_SERVICE_CLASS:
798ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_cod->service &= BTM_COD_SERVICE_CLASS_MASK;
799ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        service = service & (~p_cod->service);
800ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        break;
801ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
802ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    case GAP_SET_COD_ALL:
803ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK;
804ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK;
805ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_cod->service &= BTM_COD_SERVICE_CLASS_MASK;
806ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        service = service | p_cod->service;
807ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        break;
808ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
809ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    case GAP_INIT_COD:
810ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK;
811ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK;
812ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        service = p_cod->service & BTM_COD_SERVICE_CLASS_MASK;
813ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        break;
814ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
815ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    default:
816ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return GAP_ERR_ILL_PARM;
817ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
818ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
819ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* convert the fields into the device class type */
820ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    FIELDS_TO_COD(dev_class, minor, major, service);
821ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
822ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btm_status = BTM_SetDeviceClass(dev_class);
823ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (gap_convert_btm_status (btm_status));
824ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
825ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
826ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
827ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
828ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_ReadDeviceClass
829ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
830ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function reads the local Device Class.
831ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
832ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:
833ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
834ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          PASS
835ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
836ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
837ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT16   GAP_ReadDeviceClass(tGAP_COD *p_cod)
838ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
839ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8 *dev;
840ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
841ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    dev = BTM_ReadDeviceClass();
842ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
843ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTM_COD_SERVICE_CLASS( p_cod->service, dev );
844ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTM_COD_MINOR_CLASS( p_cod->minor, dev );
845ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTM_COD_MAJOR_CLASS( p_cod->major, dev );
846ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
847ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (BT_PASS);
848ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
849ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
850ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
851ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
852ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_SetTraceLevel
853ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
854ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function sets the trace level for GAP.  If called with
855ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  a value of 0xFF, it simply returns the current trace level.
856ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
857ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          The new or current trace level
858ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
859ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
860ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaUINT8 GAP_SetTraceLevel (UINT8 new_level)
861ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
862ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (new_level != 0xFF)
863ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        gap_cb.trace_level = new_level;
864ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
865ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (gap_cb.trace_level);
866ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
867ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
868ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
869ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
870ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         GAP_Init
871ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
872ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Initializes the control blocks used by GAP.
873ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
874ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  This routine should not be called except once per
875ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                      stack invocation.
876ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
877ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          Nothing
878ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
879ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
880ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid GAP_Init(void)
881ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
882ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memset (&gap_cb, 0, sizeof (tGAP_CB));
883ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
884ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /*** Initialize the callbacks for BTM; Needs to be one per GAP_MAX_BLOCKS ***/
885ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    gap_cb.btm_cback[0] = gap_btm_cback0;
886ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if GAP_MAX_BLOCKS > 1
887ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    gap_cb.btm_cback[1] = gap_btm_cback1;
888ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
889ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if GAP_MAX_BLOCKS > 2
890ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    gap_cb.btm_cback[2] = gap_btm_cback2;
891ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
892ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
893ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if defined(GAP_INITIAL_TRACE_LEVEL)
894ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    gap_cb.trace_level = GAP_INITIAL_TRACE_LEVEL;
895ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#else
896ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    gap_cb.trace_level = BT_TRACE_LEVEL_NONE;    /* No traces */
897ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
898ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
899ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* Initialize the connection control block if included in build */
900ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if GAP_CONN_INCLUDED == TRUE
901ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    gap_conn_init();
902ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif  /* GAP_CONN_INCLUDED */
903ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
904ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
905ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    gap_attr_db_init();
906ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
907ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
908ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
909