15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 3819a24084c0fd90d56e54653b4b286e085037da6Mudumba Ananth * Copyright (C) 1999-2014 Broadcom Corporation 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * This file contains functions that handle inquiries. These include 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * setting discoverable mode, controlling the mode of the Baseband, and 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * maintaining a small database of inquiry responses, with API for people 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * to browse it. 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdlib.h> 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdio.h> 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stddef.h> 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3379ecab5d0418fde77e9afcdd451bd713af73e180Chris Manton#include "device/include/controller.h" 34d3842ed786d7adf1de9f0f9b2cd0de18fa5576e2Andre Eisenbach#include "osi/include/time.h" 35d3842ed786d7adf1de9f0f9b2cd0de18fa5576e2Andre Eisenbach 36d3842ed786d7adf1de9f0f9b2cd0de18fa5576e2Andre Eisenbach#include "bt_types.h" 37258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h" 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcimsgs.h" 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_api.h" 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h" 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcidefs.h" 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov/* 3 second timeout waiting for responses */ 4578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#define BTM_INQ_REPLY_TIMEOUT_MS (3 * 1000) 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* TRUE to enable DEBUG traces for btm_inq */ 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTM_INQ_DEBUG 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTM_INQ_DEBUG FALSE 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 5178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov 5278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovextern fixed_queue_t *btu_general_alarm_queue; 5378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************************************************/ 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* L O C A L D A T A D E F I N I T I O N S */ 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************************************************/ 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const LAP general_inq_lap = {0x9e,0x8b,0x33}; 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const LAP limited_inq_lap = {0x9e,0x8b,0x00}; 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT16 BTM_EIR_UUID_LKUP_TBL[BTM_EIR_MAX_SERVICES] = 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_SERVICE_DISCOVERY_SERVER, 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_BROWSE_GROUP_DESCRIPTOR, */ 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_PUBLIC_BROWSE_GROUP, */ 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_SERIAL_PORT, 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_LAN_ACCESS_USING_PPP, 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_DIALUP_NETWORKING, 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_IRMC_SYNC, 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_OBEX_OBJECT_PUSH, 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_OBEX_FILE_TRANSFER, 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_IRMC_SYNC_COMMAND, 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HEADSET, 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_CORDLESS_TELEPHONY, 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_AUDIO_SOURCE, 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_AUDIO_SINK, 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_AV_REM_CTRL_TARGET, 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_ADV_AUDIO_DISTRIBUTION, */ 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_AV_REMOTE_CONTROL, 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_VIDEO_CONFERENCING, */ 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_INTERCOM, 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_FAX, 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HEADSET_AUDIO_GATEWAY, 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_WAP, */ 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_WAP_CLIENT, */ 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_PANU, 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_NAP, 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_GN, 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_DIRECT_PRINTING, 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_REFERENCE_PRINTING, */ 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_IMAGING, 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_IMAGING_RESPONDER, 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_IMAGING_AUTO_ARCHIVE, 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_IMAGING_REF_OBJECTS, 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HF_HANDSFREE, 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_AG_HANDSFREE, 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_DIR_PRT_REF_OBJ_SERVICE, 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_REFLECTED_UI, */ 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_BASIC_PRINTING, 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_PRINTING_STATUS, 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HUMAN_INTERFACE, 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_CABLE_REPLACEMENT, 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HCRP_PRINT, 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HCRP_SCAN, 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_COMMON_ISDN_ACCESS, */ 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_VIDEO_CONFERENCING_GW, */ 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_UDI_MT, */ 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_UDI_TA, */ 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_VCP, */ 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_SAP, 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_PBAP_PCE, 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_PBAP_PSE, 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_PHONE_ACCESS, 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HEADSET_HS, 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_PNP_INFORMATION, 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_GENERIC_NETWORKING, */ 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_GENERIC_FILETRANSFER, */ 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_GENERIC_AUDIO, */ 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_GENERIC_TELEPHONY, */ 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_UPNP_SERVICE, */ 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_UPNP_IP_SERVICE, */ 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_ESDP_UPNP_IP_PAN, */ 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_ESDP_UPNP_IP_LAP, */ 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_ESDP_UPNP_IP_L2CAP, */ 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_VIDEO_SOURCE, 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_VIDEO_SINK, 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UUID_SERVCLASS_VIDEO_DISTRIBUTION */ 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_MESSAGE_ACCESS, 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_MESSAGE_NOTIFICATION, 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HDP_SOURCE, 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HDP_SINK 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************************************************/ 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* L O C A L F U N C T I O N P R O T O T Y P E S */ 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************************************************/ 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_initiate_inquiry (tBTM_INQUIRY_VAR_ST *p_inq); 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic tBTM_STATUS btm_set_inq_event_filter (UINT8 filter_cond_type, tBTM_INQ_FILT_COND *p_filt_cond); 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_clr_inq_result_flt (void); 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 btm_convert_uuid_to_eir_service( UINT16 uuid16 ); 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_set_eir_uuid( UINT8 *p_eir, tBTM_INQ_RESULTS *p_results ); 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 *btm_eir_get_uuid_list( UINT8 *p_eir, UINT8 uuid_size, 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_num_uuid, UINT8 *p_uuid_list_type ); 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT16 btm_convert_uuid_to_uuid16( UINT8 *p_uuid, UINT8 uuid_size ); 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_SetDiscoverability 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set the device into or out of 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** discoverable mode. Discoverable mode means inquiry 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** scans are enabled. If a value of '0' is entered for window or 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** interval, the default values are used. 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_SUCCESS if successful 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_BUSY if a setting of the filter is already in progress 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_NO_RESOURCES if couldn't get a memory pool buffer 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_ILLEGAL_VALUE if a bad parameter was detected 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_WRONG_MODE if the device is not up. 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_SetDiscoverability (UINT16 inq_mode, UINT16 window, UINT16 interval) 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 scan_mode = 0; 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 service_class; 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_cod; 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 major, minor; 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project DEV_CLASS cod; 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project LAP temp_lap[2]; 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN is_limited; 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN cod_limited; 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1735344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_SetDiscoverability"); 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE && BLE_INCLUDED == TRUE) 17530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (controller_get_interface()->supports_ble()) 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1773aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if (btm_ble_set_discoverability((UINT16)(inq_mode)) 1783aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach == BTM_SUCCESS) 1793aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach { 1803aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach btm_cb.btm_inq_vars.discoverable_mode &= (~BTM_BLE_DISCOVERABLE_MASK); 181819a24084c0fd90d56e54653b4b286e085037da6Mudumba Ananth btm_cb.btm_inq_vars.discoverable_mode |= (inq_mode & BTM_BLE_DISCOVERABLE_MASK); 1823aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach } 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project inq_mode &= ~BTM_BLE_DISCOVERABLE_MASK; 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*** Check mode parameter ***/ 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (inq_mode > BTM_MAX_DISCOVERABLE) 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_ILLEGAL_VALUE); 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Make sure the controller is active */ 19230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!controller_get_interface()->get_is_ready()) 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_DEV_RESET); 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the window and/or interval is '0', set to default values */ 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!window) 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project window = BTM_DEFAULT_DISC_WINDOW; 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!interval) 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project interval = BTM_DEFAULT_DISC_INTERVAL; 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2025344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_SetDiscoverability: mode %d [NonDisc-0, Lim-1, Gen-2], window 0x%04x, interval 0x%04x", 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project inq_mode, window, interval); 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*** Check for valid window and interval parameters ***/ 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*** Only check window and duration if mode is connectable ***/ 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (inq_mode != BTM_NON_DISCOVERABLE) 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* window must be less than or equal to interval */ 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (window < HCI_MIN_INQUIRYSCAN_WINDOW || 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project window > HCI_MAX_INQUIRYSCAN_WINDOW || 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project interval < HCI_MIN_INQUIRYSCAN_INTERVAL || 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project interval > HCI_MAX_INQUIRYSCAN_INTERVAL || 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project window > interval) 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_ILLEGAL_VALUE); 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Set the IAC if needed */ 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (inq_mode != BTM_NON_DISCOVERABLE) 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (inq_mode & BTM_LIMITED_DISCOVERABLE) 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Use the GIAC and LIAC codes for limited discoverable mode */ 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy (temp_lap[0], limited_inq_lap, LAP_LEN); 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy (temp_lap[1], general_inq_lap, LAP_LEN); 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_write_cur_iac_lap (2, (LAP * const) temp_lap)) 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_NO_RESOURCES); /* Cannot continue */ 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_write_cur_iac_lap (1, (LAP * const) &general_inq_lap)) 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_NO_RESOURCES); /* Cannot continue */ 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project scan_mode |= HCI_INQUIRY_SCAN_ENABLED; 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Send down the inquiry scan window and period if changed */ 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((window != btm_cb.btm_inq_vars.inq_scan_window) || 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (interval != btm_cb.btm_inq_vars.inq_scan_period)) 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btsnd_hcic_write_inqscan_cfg (interval, window)) 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_scan_window = window; 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_scan_period = interval; 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_NO_RESOURCES); 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.btm_inq_vars.connectable_mode & BTM_CONNECTABLE_MASK) 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project scan_mode |= HCI_PAGE_SCAN_ENABLED; 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btsnd_hcic_write_scan_enable (scan_mode)) 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.discoverable_mode &= (~BTM_DISCOVERABLE_MASK); 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.discoverable_mode |= inq_mode; 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_NO_RESOURCES); 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Change the service class bit if mode has changed */ 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cod = BTM_ReadDeviceClass(); 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_COD_SERVICE_CLASS(service_class, p_cod); 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project is_limited = (inq_mode & BTM_LIMITED_DISCOVERABLE) ? TRUE : FALSE; 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cod_limited = (service_class & BTM_COD_SERVICE_LMTD_DISCOVER) ? TRUE : FALSE; 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (is_limited ^ cod_limited) 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_COD_MINOR_CLASS(minor, p_cod ); 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_COD_MAJOR_CLASS(major, p_cod ); 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (is_limited) 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project service_class |= BTM_COD_SERVICE_LMTD_DISCOVER; 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project service_class &= ~BTM_COD_SERVICE_LMTD_DISCOVER; 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project FIELDS_TO_COD(cod, minor, major, service_class); 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (void) BTM_SetDeviceClass (cod); 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_SUCCESS); 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_SetInquiryScanType 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set the iquiry scan-type to 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** standard or interlaced. 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_SUCCESS if successful 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_MODE_UNSUPPORTED if not a 1.2 device 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_WRONG_MODE if the device is not up. 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_SetInquiryScanType (UINT16 scan_type) 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3015344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_SetInquiryScanType"); 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (scan_type != BTM_SCAN_TYPE_STANDARD && scan_type != BTM_SCAN_TYPE_INTERLACED) 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_ILLEGAL_VALUE); 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* whatever app wants if device is not 1.2 scan type should be STANDARD */ 30630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!controller_get_interface()->supports_interlaced_inquiry_scan()) 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_MODE_UNSUPPORTED); 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check for scan type if configuration has been changed */ 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (scan_type != btm_cb.btm_inq_vars.inq_scan_type) 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (BTM_IsDeviceUp()) 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btsnd_hcic_write_inqscan_type ((UINT8)scan_type)) 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_scan_type = scan_type; 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_NO_RESOURCES); 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else return (BTM_WRONG_MODE); 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_SUCCESS); 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_SetPageScanType 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set the page scan-type to 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** standard or interlaced. 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_SUCCESS if successful 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_MODE_UNSUPPORTED if not a 1.2 device 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_WRONG_MODE if the device is not up. 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_SetPageScanType (UINT16 scan_type) 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3385344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_SetPageScanType"); 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (scan_type != BTM_SCAN_TYPE_STANDARD && scan_type != BTM_SCAN_TYPE_INTERLACED) 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_ILLEGAL_VALUE); 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* whatever app wants if device is not 1.2 scan type should be STANDARD */ 34330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!controller_get_interface()->supports_interlaced_inquiry_scan()) 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_MODE_UNSUPPORTED); 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check for scan type if configuration has been changed */ 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (scan_type != btm_cb.btm_inq_vars.page_scan_type) 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (BTM_IsDeviceUp()) 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btsnd_hcic_write_pagescan_type ((UINT8)scan_type)) 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.page_scan_type = scan_type; 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_NO_RESOURCES); 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else return (BTM_WRONG_MODE); 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_SUCCESS); 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_SetInquiryMode 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set standard or with RSSI 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** mode of the inquiry for local device. 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Output Params: mode - standard, with RSSI, extended 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_SUCCESS if successful 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_NO_RESOURCES if couldn't get a memory pool buffer 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_ILLEGAL_VALUE if a bad parameter was detected 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_WRONG_MODE if the device is not up. 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_SetInquiryMode (UINT8 mode) 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 37930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson const controller_t *controller = controller_get_interface(); 3805344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_SetInquiryMode"); 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (mode == BTM_INQ_RESULT_STANDARD) 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* mandatory mode */ 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (mode == BTM_INQ_RESULT_WITH_RSSI) 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 38730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!controller->supports_rssi_with_inquiry_results()) 38830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return (BTM_MODE_UNSUPPORTED); 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (mode == BTM_INQ_RESULT_EXTENDED) 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!controller->supports_extended_inquiry_response()) 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_MODE_UNSUPPORTED); 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_ILLEGAL_VALUE); 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!BTM_IsDeviceUp()) 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_WRONG_MODE); 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_write_inquiry_mode (mode)) 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_NO_RESOURCES); 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_SUCCESS); 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_ReadDiscoverability 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to read the current discoverability 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** mode of the device. 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Output Params: p_window - current inquiry scan duration 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_interval - current inquiry scan interval 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_NON_DISCOVERABLE, BTM_LIMITED_DISCOVERABLE, or 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_GENERAL_DISCOVERABLE 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT16 BTM_ReadDiscoverability (UINT16 *p_window, UINT16 *p_interval) 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4235344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_ReadDiscoverability"); 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_window) 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_window = btm_cb.btm_inq_vars.inq_scan_window; 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_interval) 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_interval = btm_cb.btm_inq_vars.inq_scan_period; 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (btm_cb.btm_inq_vars.discoverable_mode); 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_SetPeriodicInquiryMode 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set the device periodic inquiry mode. 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** If the duration is zero, the periodic inquiry mode is cancelled. 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Note: We currently do not allow concurrent inquiry and periodic inquiry. 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: p_inqparms - pointer to the inquiry information 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** mode - GENERAL or LIMITED inquiry 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** duration - length in 1.28 sec intervals (If '0', the inquiry is CANCELLED) 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** max_resps - maximum amount of devices to search for before ending the inquiry 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** filter_cond_type - BTM_CLR_INQUIRY_FILTER, BTM_FILTER_COND_DEVICE_CLASS, or 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_FILTER_COND_BD_ADDR 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** filter_cond - value for the filter (based on filter_cond_type) 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** max_delay - maximum amount of time between successive inquiries 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** min_delay - minimum amount of time between successive inquiries 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_results_cb - callback returning pointer to results (tBTM_INQ_RESULTS) 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_CMD_STARTED if successfully started 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_ILLEGAL_VALUE if a bad parameter is detected 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_NO_RESOURCES if could not allocate a message buffer 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_SUCCESS - if cancelling the periodic inquiry 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_BUSY - if an inquiry is already active 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_WRONG_MODE if the device is not up. 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_SetPeriodicInquiryMode (tBTM_INQ_PARMS *p_inqparms, UINT16 max_delay, 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 min_delay, tBTM_INQ_RESULTS_CB *p_results_cb) 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status; 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4695344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_SetPeriodicInquiryMode: mode: %d, dur: %d, rsps: %d, flt: %d, min: %d, max: %d", 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inqparms->mode, p_inqparms->duration, p_inqparms->max_resps, 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inqparms->filter_cond_type, min_delay, max_delay); 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*** Make sure the device is ready ***/ 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!BTM_IsDeviceUp()) 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_WRONG_MODE); 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Only one active inquiry is allowed in this implementation. 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project Also do not allow an inquiry if the inquiry filter is being updated */ 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->inq_active || p_inq->inqfilt_active) 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_BUSY); 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If illegal parameters return FALSE */ 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inqparms->mode != BTM_GENERAL_INQUIRY && 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inqparms->mode != BTM_LIMITED_INQUIRY) 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_ILLEGAL_VALUE); 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Verify the parameters for this command */ 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inqparms->duration < BTM_MIN_INQUIRY_LEN || 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inqparms->duration > BTM_MAX_INQUIRY_LENGTH || 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project min_delay <= p_inqparms->duration || 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project min_delay < BTM_PER_INQ_MIN_MIN_PERIOD || 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project min_delay > BTM_PER_INQ_MAX_MIN_PERIOD || 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project max_delay <= min_delay || 494ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta max_delay < BTM_PER_INQ_MIN_MAX_PERIOD) 495ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* max_delay > BTM_PER_INQ_MAX_MAX_PERIOD)*/ 496ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* BTM_PER_INQ_MAX_MAX_PERIOD set to 1's in all bits. Condition resulting in false always*/ 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_ILLEGAL_VALUE); 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Save the inquiry parameters to be used upon the completion of setting/clearing the inquiry filter */ 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inqparms = *p_inqparms; 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->per_min_delay = min_delay; 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->per_max_delay = max_delay; 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_cmpl_info.num_resp = 0; /* Clear the results counter */ 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->p_inq_results_cb = p_results_cb; 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_active = (UINT8)((p_inqparms->mode == BTM_LIMITED_INQUIRY) ? 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (BTM_LIMITED_INQUIRY_ACTIVE | BTM_PERIODIC_INQUIRY_ACTIVE) : 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (BTM_GENERAL_INQUIRY_ACTIVE | BTM_PERIODIC_INQUIRY_ACTIVE)); 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If a filter is specified, then save it for later and clear the current filter. 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project The setting of the filter is done upon completion of clearing of the previous 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filter. 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inqparms->filter_cond_type != BTM_CLR_INQUIRY_FILTER) 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->state = BTM_INQ_CLR_FILT_STATE; 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inqparms->filter_cond_type = BTM_CLR_INQUIRY_FILTER; 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* The filter is not being used so simply clear it; the inquiry can start after this operation */ 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->state = BTM_INQ_SET_FILT_STATE; 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Before beginning the inquiry the current filter must be cleared, so initiate the command */ 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((status = btm_set_inq_event_filter (p_inqparms->filter_cond_type, &p_inqparms->filter_cond)) != BTM_CMD_STARTED) 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If set filter command is not succesful reset the state */ 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->p_inq_results_cb = NULL; 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->state = BTM_INQ_INACTIVE_STATE; 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (status); 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_CancelPeriodicInquiry 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function cancels a periodic inquiry 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_NO_RESOURCES if could not allocate a message buffer 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_SUCCESS - if cancelling the periodic inquiry 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_WRONG_MODE if the device is not up. 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_CancelPeriodicInquiry(void) 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status = BTM_SUCCESS; 5535344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_CancelPeriodicInquiry called"); 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*** Make sure the device is ready ***/ 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!BTM_IsDeviceUp()) 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_WRONG_MODE); 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Only cancel if one is active */ 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.btm_inq_vars.inq_active & BTM_PERIODIC_INQUIRY_ACTIVE) 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_active = BTM_INQUIRY_INACTIVE; 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.p_inq_results_cb = (tBTM_INQ_RESULTS_CB *) NULL; 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_exit_per_inq ()) 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_NO_RESOURCES; 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the event filter is in progress, mark it so that the processing of the return 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event will be ignored */ 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_inq->inqfilt_active) 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->pending_filt_complete_event++; 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inqfilt_active = FALSE; 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_counter++; 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (status); 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_SetConnectability 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set the device into or out of 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** connectable mode. Discoverable mode means page scans enabled. 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_SUCCESS if successful 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_ILLEGAL_VALUE if a bad parameter is detected 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_NO_RESOURCES if could not allocate a message buffer 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_WRONG_MODE if the device is not up. 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_SetConnectability (UINT16 page_mode, UINT16 window, UINT16 interval) 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 scan_mode = 0; 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5995344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_SetConnectability"); 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE && BLE_INCLUDED == TRUE) 60230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (controller_get_interface()->supports_ble()) 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6043aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if (btm_ble_set_connectability(page_mode) != BTM_SUCCESS) 6053aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach { 6063aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach return BTM_NO_RESOURCES; 6073aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach } 6083aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach p_inq->connectable_mode &= (~BTM_BLE_CONNECTABLE_MASK); 6093aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach p_inq->connectable_mode |= (page_mode & BTM_BLE_CONNECTABLE_MASK); 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project page_mode &= ~BTM_BLE_CONNECTABLE_MASK; 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*** Check mode parameter ***/ 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (page_mode != BTM_NON_CONNECTABLE && page_mode != BTM_CONNECTABLE) 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_ILLEGAL_VALUE); 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Make sure the controller is active */ 61930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!controller_get_interface()->get_is_ready()) 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_DEV_RESET); 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the window and/or interval is '0', set to default values */ 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!window) 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project window = BTM_DEFAULT_CONN_WINDOW; 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!interval) 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project interval = BTM_DEFAULT_CONN_INTERVAL; 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6295344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_SetConnectability: mode %d [NonConn-0, Conn-1], window 0x%04x, interval 0x%04x", 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project page_mode, window, interval); 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*** Check for valid window and interval parameters ***/ 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*** Only check window and duration if mode is connectable ***/ 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (page_mode == BTM_CONNECTABLE) 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* window must be less than or equal to interval */ 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (window < HCI_MIN_PAGESCAN_WINDOW || 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project window > HCI_MAX_PAGESCAN_WINDOW || 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project interval < HCI_MIN_PAGESCAN_INTERVAL || 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project interval > HCI_MAX_PAGESCAN_INTERVAL || 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project window > interval) 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_ILLEGAL_VALUE); 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project scan_mode |= HCI_PAGE_SCAN_ENABLED; 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((window != p_inq->page_scan_window) || 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (interval != p_inq->page_scan_period)) 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->page_scan_window = window; 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->page_scan_period = interval; 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_write_pagescan_cfg (interval, window)) 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_NO_RESOURCES); 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Keep the inquiry scan as previouosly set */ 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->discoverable_mode & BTM_DISCOVERABLE_MASK) 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project scan_mode |= HCI_INQUIRY_SCAN_ENABLED; 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btsnd_hcic_write_scan_enable (scan_mode)) 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->connectable_mode &= (~BTM_CONNECTABLE_MASK); 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->connectable_mode |= page_mode; 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_SUCCESS); 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_NO_RESOURCES); 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_ReadConnectability 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to read the current discoverability 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** mode of the device. 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Output Params p_window - current page scan duration 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_interval - current time between page scans 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_NON_CONNECTABLE or BTM_CONNECTABLE 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT16 BTM_ReadConnectability (UINT16 *p_window, UINT16 *p_interval) 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6885344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_ReadConnectability"); 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_window) 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_window = btm_cb.btm_inq_vars.page_scan_window; 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_interval) 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_interval = btm_cb.btm_inq_vars.page_scan_period; 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (btm_cb.btm_inq_vars.connectable_mode); 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_IsInquiryActive 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function returns a bit mask of the current inquiry state 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_INQUIRY_INACTIVE if inactive (0) 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_LIMITED_INQUIRY_ACTIVE if a limted inquiry is active 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_GENERAL_INQUIRY_ACTIVE if a general inquiry is active 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_PERIODIC_INQUIRY_ACTIVE if a periodic inquiry is active 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT16 BTM_IsInquiryActive (void) 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7145344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_IsInquiryActive"); 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(btm_cb.btm_inq_vars.inq_active); 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_CancelInquiry 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function cancels an inquiry if active 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_SUCCESS if successful 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_NO_RESOURCES if could not allocate a message buffer 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_WRONG_MODE if the device is not up. 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_CancelInquiry(void) 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status = BTM_SUCCESS; 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 7367f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) 7377f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie UINT8 active_mode=p_inq->inq_active; 7387f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 7395344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_CancelInquiry called"); 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*** Make sure the device is ready ***/ 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!BTM_IsDeviceUp()) 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_WRONG_MODE); 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Only cancel if not in periodic mode, otherwise the caller should call BTM_CancelPeriodicMode */ 746ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_inq->inq_active &BTM_INQUIRY_ACTIVE_MASK) != 0 && 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (!(p_inq->inq_active & BTM_PERIODIC_INQUIRY_ACTIVE))) 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_active = BTM_INQUIRY_INACTIVE; 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->state = BTM_INQ_INACTIVE_STATE; 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->p_inq_results_cb = (tBTM_INQ_RESULTS_CB *) NULL; /* Do not notify caller anymore */ 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->p_inq_cmpl_cb = (tBTM_CMPL_CB *) NULL; /* Do not notify caller anymore */ 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the event filter is in progress, mark it so that the processing of the return 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event will be ignored */ 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->inqfilt_active) 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inqfilt_active = FALSE; 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->pending_filt_complete_event++; 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initiate the cancel inquiry */ 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7647f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie if (((p_inq->inqparms.mode & BTM_BR_INQUIRY_MASK) != 0) 7657f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) 7667f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie &&(active_mode & BTM_BR_INQUIRY_MASK) 7677f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 7687f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie ) 769ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 770ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!btsnd_hcic_inq_cancel()) 771ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = BTM_NO_RESOURCES; 772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 7747f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie if (((p_inq->inqparms.mode & BTM_BLE_INQUIRY_MASK) != 0) 7757f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) 7767fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta &&(active_mode & BTM_BLE_INQ_ACTIVE_MASK) 7777f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 7787f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie ) 7797fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta btm_ble_stop_inquiry(); 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Do not send the BUSY_LEVEL event yet. Wait for the cancel_complete event 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * and then send the BUSY_LEVEL event 7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * btm_acl_update_busy_level (BTM_BLI_INQ_DONE_EVT); 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7880830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora p_inq->inq_counter++; 7890830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora btm_clr_inq_result_flt(); 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (status); 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_StartInquiry 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to start an inquiry. 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: p_inqparms - pointer to the inquiry information 803ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** mode - GENERAL or LIMITED inquiry, BR/LE bit mask seperately 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** duration - length in 1.28 sec intervals (If '0', the inquiry is CANCELLED) 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** max_resps - maximum amount of devices to search for before ending the inquiry 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** filter_cond_type - BTM_CLR_INQUIRY_FILTER, BTM_FILTER_COND_DEVICE_CLASS, or 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_FILTER_COND_BD_ADDR 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** filter_cond - value for the filter (based on filter_cond_type) 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_results_cb - Pointer to the callback routine which gets called 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** upon receipt of an inquiry result. If this field is 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** NULL, the application is not notified. 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_cmpl_cb - Pointer to the callback routine which gets called 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** upon completion. If this field is NULL, the 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** application is not notified when completed. 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns tBTM_STATUS 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_CMD_STARTED if successfully initiated 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_BUSY if already in progress 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_ILLEGAL_VALUE if parameter(s) are out of range 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_NO_RESOURCES if could not allocate resources to start the command 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_WRONG_MODE if the device is not up. 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_StartInquiry (tBTM_INQ_PARMS *p_inqparms, tBTM_INQ_RESULTS_CB *p_results_cb, 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_CMPL_CB *p_cmpl_cb) 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 828ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_STATUS status = BTM_CMD_STARTED; 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8315344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_StartInquiry: mode: %d, dur: %d, rsps: %d, flt: %d", 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inqparms->mode, p_inqparms->duration, p_inqparms->max_resps, 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inqparms->filter_cond_type); 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Only one active inquiry is allowed in this implementation. 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project Also do not allow an inquiry if the inquiry filter is being updated */ 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->inq_active || p_inq->inqfilt_active) 8380830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora { 8390830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora#if (defined BLE_INCLUDED && BLE_INCLUDED == TRUE) 8400830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora /*check if LE observe is already running*/ 8410830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora if(p_inq->scan_type==INQ_LE_OBSERVE && p_inq->p_inq_ble_results_cb!=NULL) 8420830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora { 8435344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API("BTM_StartInquiry: LE observe in progress"); 8440830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora p_inq->scan_type = INQ_GENERAL; 8450830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora p_inq->inq_active = BTM_INQUIRY_INACTIVE; 8460830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora btm_cb.ble_ctr_cb.inq_var.scan_type = BTM_BLE_SCAN_MODE_NONE; 8470830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora btsnd_hcic_ble_set_scan_enable (BTM_BLE_SCAN_DISABLE, BTM_BLE_DUPLICATE_ENABLE); 8480830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora } 8490830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora else 8500830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora#endif 8510830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora { 8520830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora return (BTM_BUSY); 8535344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API("BTM_StartInquiry: return BUSY"); 8540830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora } 8550830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora } 8560830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora else 8570830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora p_inq->scan_type = INQ_GENERAL; 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*** Make sure the device is ready ***/ 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!BTM_IsDeviceUp()) 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_WRONG_MODE); 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_inqparms->mode & BTM_BR_INQUIRY_MASK)!= BTM_GENERAL_INQUIRY && 864ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (p_inqparms->mode & BTM_BR_INQUIRY_MASK)!= BTM_LIMITED_INQUIRY 865ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE) 866ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta && (p_inqparms->mode & BTM_BLE_INQUIRY_MASK)!= BTM_BLE_GENERAL_INQUIRY 867ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta && (p_inqparms->mode & BTM_BLE_INQUIRY_MASK)!= BTM_BLE_LIMITED_INQUIRY 868ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 869ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ) 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_ILLEGAL_VALUE); 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8727f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) 8737f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie if(p_inq->next_state==BTM_FINISH) 8747f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie return BTM_ILLEGAL_VALUE; 8757f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 8767f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 8777f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Save the inquiry parameters to be used upon the completion of setting/clearing the inquiry filter */ 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inqparms = *p_inqparms; 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initialize the inquiry variables */ 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->state = BTM_INQ_ACTIVE_STATE; 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->p_inq_cmpl_cb = p_cmpl_cb; 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->p_inq_results_cb = p_results_cb; 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_cmpl_info.num_resp = 0; /* Clear the results counter */ 886ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_inq->inq_active = p_inqparms->mode; 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8885344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG("BTM_StartInquiry: p_inq->inq_active = 0x%02x", p_inq->inq_active); 8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8907f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie/* interleave scan minimal conditions */ 8917f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (BLE_INCLUDED==TRUE && (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE)) 8927f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 8937f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie /* check if both modes are present */ 8947f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie if((p_inqparms->mode & BTM_BLE_INQUIRY_MASK) && (p_inqparms->mode & BTM_BR_INQUIRY_MASK)) 8957f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie { 8965344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API("BTM:Interleave Inquiry Mode Set"); 8977f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inqparms->duration=p_inqparms->intl_duration[p_inq->next_state]; 8987f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->inqparms.duration=p_inqparms->duration; 8997f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie } 9007f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie else 9017f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie { 9025344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API("BTM:Single Mode: No interleaving, Mode:0x%02x", p_inqparms->mode); 9037f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->next_state=BTM_NO_INTERLEAVING; 9047f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie } 9057f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 9067f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 9077f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 9087f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* start LE inquiry here if requested */ 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 9117f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie if ((p_inqparms->mode & BTM_BLE_INQUIRY_MASK) 9127f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) 9137f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie &&(p_inq->next_state==BTM_BLE_ONE || p_inq->next_state==BTM_BLE_TWO || 9147f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->next_state==BTM_NO_INTERLEAVING) 9157f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 9167f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie ) 9177f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9197f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) 9207f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->inq_active = (p_inqparms->mode & BTM_BLE_INQUIRY_MASK); 9215344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API("BTM:Starting LE Scan with duration %d and activeMode:0x%02x", 9227f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inqparms->duration, (p_inqparms->mode & BTM_BLE_INQUIRY_MASK)); 9237f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 92430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!controller_get_interface()->supports_ble()) 9253aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach { 9263aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach p_inq->inqparms.mode &= ~ BTM_BLE_INQUIRY_MASK; 9273aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach status = BTM_ILLEGAL_VALUE; 9283aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach } 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BLE for now does not support filter condition for inquiry */ 9303aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach else if ((status = btm_ble_start_inquiry((UINT8)(p_inqparms->mode & BTM_BLE_INQUIRY_MASK), 9313aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach p_inqparms->duration)) != BTM_CMD_STARTED) 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9335344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_ERROR("Err Starting LE Inquiry."); 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inqparms.mode &= ~ BTM_BLE_INQUIRY_MASK; 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9367f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (!defined(BTA_HOST_INTERLEAVE_SEARCH) || BTA_HOST_INTERLEAVE_SEARCH == FALSE) 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inqparms->mode &= ~BTM_BLE_INQUIRY_MASK; 9387f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 9397f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 9407f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) 9417f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie if(p_inq->next_state==BTM_NO_INTERLEAVING) 9427f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie { 9437f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->next_state=BTM_FINISH; 9447f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie } 9457f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie else 9467f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie { 9475344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API("BTM:Interleaving: started LE scan, Advancing to next state: %d", 9487f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->next_state+1); 9497f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->next_state+=1; 9507f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie } 9517f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie /* reset next_state if status <> BTM_Started */ 9527f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie if(status!=BTM_CMD_STARTED) 9537f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->next_state=BTM_BR_ONE; 9547f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 9557f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie /* if interleave scan..return here */ 9567f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie return status; 9577f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 9587f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9605344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG("BTM_StartInquiry: mode = %02x", p_inqparms->mode); 9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* end of BLE_INCLUDED */ 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 964ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* we're done with this routine if BR/EDR inquiry is not desired. */ 965ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_inqparms->mode & BTM_BR_INQUIRY_MASK) == BTM_INQUIRY_NONE) 966ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return status; 967ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 9687f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie /* BR/EDR inquiry portion */ 9697f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) 9707f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie if((p_inq->next_state==BTM_BR_ONE || p_inq->next_state==BTM_BR_TWO || 9717f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->next_state==BTM_NO_INTERLEAVING )) 9727f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie { 9737f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->inq_active = (p_inqparms->mode & BTM_BR_INQUIRY_MASK); 9747f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If a filter is specified, then save it for later and clear the current filter. 9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project The setting of the filter is done upon completion of clearing of the previous 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filter. 9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_inqparms->filter_cond_type) 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_CLR_INQUIRY_FILTER: 9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->state = BTM_INQ_SET_FILT_STATE; 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_FILTER_COND_DEVICE_CLASS: 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_FILTER_COND_BD_ADDR: 9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* The filter is not being used so simply clear it; 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project the inquiry can start after this operation */ 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->state = BTM_INQ_CLR_FILT_STATE; 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inqparms->filter_cond_type = BTM_CLR_INQUIRY_FILTER; 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* =============>>>> adding LE filtering here ????? */ 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_ILLEGAL_VALUE); 9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Before beginning the inquiry the current filter must be cleared, so initiate the command */ 9997f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie if ((status = btm_set_inq_event_filter (p_inqparms->filter_cond_type, 10007f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie &p_inqparms->filter_cond)) != BTM_CMD_STARTED) 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->state = BTM_INQ_INACTIVE_STATE; 10027f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 10037f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) 10047f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie if (p_inq->next_state==BTM_NO_INTERLEAVING) 10057f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->next_state=BTM_FINISH; 10067f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie else 10077f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie { 10085344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API("BTM:Interleaving: Started BTM inq, Advancing to next state: %d", 10097f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->next_state+1); 10107f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->next_state+=1; 10117f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie } 10127f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie } 10137f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie if (status!=BTM_CMD_STARTED) 10147f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie { 10157f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie /* Some error beginning the scan process. 10167f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie Reset the next_state parameter.. Do we need to reset the inq_active also? 10177f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie */ 10185344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API("BTM:Interleaving: Error in Starting inquiry, status: 0x%02x", status); 10197f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->next_state=BTM_BR_ONE; 10207f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie } 10217f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 10227f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 10237f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (status); 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_ReadRemoteDeviceName 10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function initiates a remote device HCI command to the 10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** controller and calls the callback when the process has completed. 10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Input Params: remote_bda - device address of name to retrieve 10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_cb - callback function called when BTM_CMD_STARTED 10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** is returned. 10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** A pointer to tBTM_REMOTE_DEV_NAME is passed to the 10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** callback. 10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_CMD_STARTED is returned if the request was successfully sent 10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** to HCI. 10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_BUSY if already in progress 10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_UNKNOWN_ADDR if device address is bad 10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_NO_RESOURCES if could not allocate resources to start the command 10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_WRONG_MODE if the device is not up. 10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10507fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi BattatBTM_STATUS BTM_ReadRemoteDeviceName (BD_ADDR remote_bda, tBTM_CMPL_CB *p_cb 10517fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta ,tBT_TRANSPORT transport) 10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQ_INFO *p_cur = NULL; 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tINQ_DB_ENT *p_i; 10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10565344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_ReadRemoteDeviceName: bd addr [%02x%02x%02x%02x%02x%02x]", 10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project remote_bda[0], remote_bda[1], remote_bda[2], 10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project remote_bda[3], remote_bda[4], remote_bda[5]); 10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Use the remote device's clock offset if it is in the local inquiry database */ 10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_i = btm_inq_db_find (remote_bda)) != NULL) 10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur = &p_i->inq_info; 10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10655344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("no device found in inquiry db"); 10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE) 10687fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta if (transport == BT_TRANSPORT_LE) 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btm_ble_read_remote_name(remote_bda, p_cur, p_cb); 10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (btm_initiate_rem_name (remote_bda, p_cur, BTM_RMT_NAME_EXT, 107678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov BTM_EXT_RMT_NAME_TIMEOUT_MS, p_cb)); 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_CancelRemoteDeviceName 10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function initiates the cancel request for the specified 10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** remote device. 10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Input Params: None 10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_CMD_STARTED is returned if the request was successfully sent 10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** to HCI. 10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_NO_RESOURCES if could not allocate resources to start the command 10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_WRONG_MODE if there is not an active remote name request. 10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_CancelRemoteDeviceName (void) 10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10995344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_CancelRemoteDeviceName()"); 11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Make sure there is not already one in progress */ 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->remname_active) 11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 11056975b4d711142b885af479721cada448952c6b41Andre Eisenbach if (BTM_UseLeLink(p_inq->remname_bda)) 11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_ble_cancel_remote_name(p_inq->remname_bda)) 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_CMD_STARTED); 11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_UNKNOWN_ADDR); 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btsnd_hcic_rmt_name_req_cancel (p_inq->remname_bda)) 11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_CMD_STARTED); 11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_NO_RESOURCES); 11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_WRONG_MODE); 11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_InqDbRead 11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function looks through the inquiry database for a match 11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** based on Bluetooth Device Address. This is the application's 11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** interface to get the inquiry details of a specific BD address. 11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns pointer to entry, or NULL if not found 11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_INQ_INFO *BTM_InqDbRead (BD_ADDR p_bda) 11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11365344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API ("BTM_InqDbRead: bd addr [%02x%02x%02x%02x%02x%02x]", 11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_bda[0], p_bda[1], p_bda[2], p_bda[3], p_bda[4], p_bda[5]); 11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11398d10e49089edbfebfc1e72227a59626440983a83Zach Johnson tINQ_DB_ENT *p_ent = btm_inq_db_find(p_bda); 11408d10e49089edbfebfc1e72227a59626440983a83Zach Johnson if (!p_ent) 11418d10e49089edbfebfc1e72227a59626440983a83Zach Johnson return NULL; 11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11438d10e49089edbfebfc1e72227a59626440983a83Zach Johnson return &p_ent->inq_info; 11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_InqDbFirst 11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function looks through the inquiry database for the first 11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** used entry, and returns that. This is used in conjunction with 11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_InqDbNext by applications as a way to walk through the 11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** inquiry database. 11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns pointer to first in-use entry, or NULL if DB is empty 11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_INQ_INFO *BTM_InqDbFirst (void) 11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 xx; 11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tINQ_DB_ENT *p_ent = btm_cb.btm_inq_vars.inq_db; 11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (xx = 0; xx < BTM_INQ_DB_SIZE; xx++, p_ent++) 11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_ent->in_use) 11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (&p_ent->inq_info); 11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If here, no used entry found */ 11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ((tBTM_INQ_INFO *)NULL); 11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_InqDbNext 11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function looks through the inquiry database for the next 11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** used entry, and returns that. If the input parameter is NULL, 11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** the first entry is returned. 11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns pointer to next in-use entry, or NULL if no more found. 11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_INQ_INFO *BTM_InqDbNext (tBTM_INQ_INFO *p_cur) 11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tINQ_DB_ENT *p_ent; 11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 inx; 11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cur) 11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ent = (tINQ_DB_ENT *) ((UINT8 *)p_cur - offsetof (tINQ_DB_ENT, inq_info)); 11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project inx = (UINT16)((p_ent - btm_cb.btm_inq_vars.inq_db) + 1); 11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (p_ent = &btm_cb.btm_inq_vars.inq_db[inx]; inx < BTM_INQ_DB_SIZE; inx++, p_ent++) 11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_ent->in_use) 11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (&p_ent->inq_info); 12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If here, more entries found */ 12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ((tBTM_INQ_INFO *)NULL); 12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_InqDbFirst()); 12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_ClearInqDb 12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to clear out a device or all devices 12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the inquiry database. 12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameter p_bda - (input) BD_ADDR -> Address of device to clear 12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** (NULL clears all entries) 12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_BUSY if an inquiry, get remote name, or event filter 12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** is active, otherwise BTM_SUCCESS 12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_ClearInqDb (BD_ADDR p_bda) 12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If an inquiry or remote name is in progress return busy */ 12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->inq_active != BTM_INQUIRY_INACTIVE || 12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inqfilt_active) 12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_BUSY); 12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_clr_inq_db(p_bda); 12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_SUCCESS); 12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_ReadInquiryRspTxPower 12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This command will read the inquiry Transmit Power level used 12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** to transmit the FHS and EIR data packets. 12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** This can be used directly in the Tx Power Level EIR data type. 12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_SUCCESS if successful 12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_ReadInquiryRspTxPower (tBTM_CMPL_CB *p_cb) 12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 125178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov if (btm_cb.devcb.p_inq_tx_power_cmpl_cb) 12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_BUSY); 12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 125478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_cb.devcb.p_inq_tx_power_cmpl_cb = p_cb; 125578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_set_on_queue(btm_cb.devcb.read_inq_tx_power_timer, 125678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov BTM_INQ_REPLY_TIMEOUT_MS, 125778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_read_inq_tx_power_timeout, NULL, 125878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btu_general_alarm_queue); 12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_read_inq_tx_power ()) 12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 126278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_cb.devcb.p_inq_tx_power_cmpl_cb = NULL; 126378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_cancel(btm_cb.devcb.read_inq_tx_power_timer); 12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_NO_RESOURCES); 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_CMD_STARTED); 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************************************************* 12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project********************************************************************************** 12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** ** 12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM Internal Inquiry Functions ** 12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** ** 12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project********************************************************************************** 12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*********************************************************************************/ 12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_inq_db_reset 12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called at at reset to clear the inquiry 12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** database & pending callback. 12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_inq_db_reset (void) 12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_REMOTE_DEV_NAME rem_name; 12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 num_responses; 12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 temp_inq_active; 12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status; 12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If an inquiry or periodic inquiry is active, reset the mode to inactive */ 12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->inq_active != BTM_INQUIRY_INACTIVE) 12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project temp_inq_active = p_inq->inq_active; /* Save so state can change BEFORE 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project callback is called */ 13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_active = BTM_INQUIRY_INACTIVE; 13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If not a periodic inquiry, the complete callback must be called to notify caller */ 13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (temp_inq_active == BTM_LIMITED_INQUIRY_ACTIVE || 13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project temp_inq_active == BTM_GENERAL_INQUIRY_ACTIVE) 13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->p_inq_cmpl_cb) 13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_responses = 0; 13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_inq->p_inq_cmpl_cb)(&num_responses); 13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Cancel a remote name request if active, and notify the caller (if waiting) */ 13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->remname_active ) 13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 131778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_cancel(p_inq->remote_name_timer); 13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->remname_active = FALSE; 13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p_inq->remname_bda, 0, BD_ADDR_LEN); 13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->p_remname_cmpl_cb) 13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rem_name.status = BTM_DEV_RESET; 13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_inq->p_remname_cmpl_cb)(&rem_name); 13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->p_remname_cmpl_cb = NULL; 13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Cancel an inquiry filter request if active, and notify the caller (if waiting) */ 13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->inqfilt_active) 13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inqfilt_active = FALSE; 13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->p_inqfilter_cmpl_cb) 13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_DEV_RESET; 13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_inq->p_inqfilter_cmpl_cb)(&status); 13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->state = BTM_INQ_INACTIVE_STATE; 13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->pending_filt_complete_event = 0; 13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->p_inq_results_cb = NULL; 13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_clr_inq_db(NULL); /* Clear out all the entries in the database */ 13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_clr_inq_result_flt(); 13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->discoverable_mode = BTM_NON_DISCOVERABLE; 13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->connectable_mode = BTM_NON_CONNECTABLE; 13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->page_scan_type = BTM_SCAN_TYPE_STANDARD; 13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_scan_type = BTM_SCAN_TYPE_STANDARD; 13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->discoverable_mode |= BTM_BLE_NON_DISCOVERABLE; 13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->connectable_mode |= BTM_BLE_NON_CONNECTABLE; 13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************************************************* 13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_inq_db_init 13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called at startup to initialize the inquiry 13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** database. 13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_inq_db_init (void) 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 /* cleared in btm_init; put back in if called from anywhere else! */ 13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset (&btm_cb.btm_inq_vars, 0, sizeof (tBTM_INQUIRY_VAR_ST)); 13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 137678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_free(btm_cb.btm_inq_vars.remote_name_timer); 137778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_cb.btm_inq_vars.remote_name_timer = 137878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_new("btm_inq.remote_name_timer"); 13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.no_inc_ssp = BTM_NO_SSP_ON_INQUIRY; 13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************************************************* 13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_inq_stop_on_ssp 13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called on incoming SSP 13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_inq_stop_on_ssp(void) 13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 normal_active = (BTM_GENERAL_INQUIRY_ACTIVE|BTM_LIMITED_INQUIRY_ACTIVE); 13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_INQ_DEBUG == TRUE) 13965344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG ("btm_inq_stop_on_ssp: no_inc_ssp=%d inq_active:0x%x state:%d inqfilt_active:%d", 13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.no_inc_ssp, btm_cb.btm_inq_vars.inq_active, btm_cb.btm_inq_vars.state, btm_cb.btm_inq_vars.inqfilt_active); 13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.btm_inq_vars.no_inc_ssp) 14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.btm_inq_vars.state == BTM_INQ_ACTIVE_STATE) 14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.btm_inq_vars.inq_active & BTM_PERIODIC_INQUIRY_ACTIVE) 14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_CancelPeriodicInquiry(); 14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (btm_cb.btm_inq_vars.inq_active & normal_active) 14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* can not call BTM_CancelInquiry() here. We need to report inquiry complete evt */ 14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btsnd_hcic_inq_cancel(); 14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* do not allow inquiry to start */ 14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_active |= BTM_SSP_INQUIRY_ACTIVE; 14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************************************************* 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_inq_clear_ssp 14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when pairing_state becomes idle 14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_inq_clear_ssp(void) 14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_active &= ~BTM_SSP_INQUIRY_ACTIVE; 14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************************************************* 14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_clr_inq_db 14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to clear out a device or all devices 14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the inquiry database. 14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameter p_bda - (input) BD_ADDR -> Address of device to clear 14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** (NULL clears all entries) 14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_clr_inq_db (BD_ADDR p_bda) 14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tINQ_DB_ENT *p_ent = p_inq->inq_db; 14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 xx; 14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_INQ_DEBUG == TRUE) 14525344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG ("btm_clr_inq_db: inq_active:0x%x state:%d", 14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_active, btm_cb.btm_inq_vars.state); 14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (xx = 0; xx < BTM_INQ_DB_SIZE; xx++, p_ent++) 14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_ent->in_use) 14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If this is the specified BD_ADDR or clearing all devices */ 14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_bda == NULL || 14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (!memcmp (p_ent->inq_info.results.remote_bd_addr, p_bda, BD_ADDR_LEN))) 14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ent->in_use = FALSE; 14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_INQ_DEBUG == TRUE) 14685344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG ("inq_active:0x%x state:%d", 14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_active, btm_cb.btm_inq_vars.state); 14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_clr_inq_result_flt 14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function looks through the bdaddr database for a match 14795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** based on Bluetooth Device Address 14805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns TRUE if found, else FALSE (new entry) 14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_clr_inq_result_flt (void) 14855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 14875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1488abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov osi_free_and_reset((void **)&p_inq->p_bd_db); 14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->num_bd_entries = 0; 14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->max_bd_entries = 0; 14915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_inq_find_bdaddr 14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function looks through the bdaddr database for a match 14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** based on Bluetooth Device Address 14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns TRUE if found, else FALSE (new entry) 15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btm_inq_find_bdaddr (BD_ADDR p_bda) 15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tINQ_BDADDR *p_db = &p_inq->p_bd_db[0]; 15075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 xx; 15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Don't bother searching, database doesn't exist or periodic mode */ 15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_inq->inq_active & BTM_PERIODIC_INQUIRY_ACTIVE) || !p_db) 15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (xx = 0; xx < p_inq->num_bd_entries; xx++, p_db++) 15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!memcmp(p_db->bd_addr, p_bda, BD_ADDR_LEN) 15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project && p_db->inq_count == p_inq->inq_counter) 15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (xx < p_inq->max_bd_entries) 15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_db->inq_count = p_inq->inq_counter; 15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_db->bd_addr, p_bda, BD_ADDR_LEN); 15245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->num_bd_entries++; 15255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If here, New Entry */ 15285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 15295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_inq_db_find 15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function looks through the inquiry database for a match 15365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** based on Bluetooth Device Address 15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns pointer to entry, or NULL if not found 15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttINQ_DB_ENT *btm_inq_db_find (BD_ADDR p_bda) 15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 xx; 15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tINQ_DB_ENT *p_ent = btm_cb.btm_inq_vars.inq_db; 15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (xx = 0; xx < BTM_INQ_DB_SIZE; xx++, p_ent++) 15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_ent->in_use) && (!memcmp (p_ent->inq_info.results.remote_bd_addr, p_bda, BD_ADDR_LEN))) 15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (p_ent); 15505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If here, not found */ 15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (NULL); 15545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_inq_db_new 15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function looks through the inquiry database for an unused 15625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** entry. If no entry is free, it allocates the oldest entry. 15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns pointer to entry 15655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttINQ_DB_ENT *btm_inq_db_new (BD_ADDR p_bda) 15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 xx; 15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tINQ_DB_ENT *p_ent = btm_cb.btm_inq_vars.inq_db; 15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tINQ_DB_ENT *p_old = btm_cb.btm_inq_vars.inq_db; 15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 ot = 0xFFFFFFFF; 15735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (xx = 0; xx < BTM_INQ_DB_SIZE; xx++, p_ent++) 15755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_ent->in_use) 15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset (p_ent, 0, sizeof (tINQ_DB_ENT)); 15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy (p_ent->inq_info.results.remote_bd_addr, p_bda, BD_ADDR_LEN); 15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_ent->in_use = TRUE; 15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (p_ent); 15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_ent->time_of_resp < ot) 15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_old = p_ent; 15885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ot = p_ent->time_of_resp; 15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If here, no free entry found. Return the oldest. */ 15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset (p_old, 0, sizeof (tINQ_DB_ENT)); 15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy (p_old->inq_info.results.remote_bd_addr, p_bda, BD_ADDR_LEN); 15965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_old->in_use = TRUE; 15975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (p_old); 15995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 16035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_set_inq_event_filter 16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to set the inquiry event filter. 16075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** It is called by either internally, or by the external API function 16085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** (BTM_SetInqEventFilter). It is used internally as part of the 16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** inquiry processing. 16105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Input Params: 16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** filter_cond_type - this is the type of inquiry filter to apply: 16135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_FILTER_COND_DEVICE_CLASS, 16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_FILTER_COND_BD_ADDR, or 16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_CLR_INQUIRY_FILTER 16165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_filt_cond - this is either a BD_ADDR or DEV_CLASS depending on the 16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** filter_cond_type (See section 4.7.3 of Core Spec 1.0b). 16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_CMD_STARTED if successfully initiated 16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_NO_RESOURCES if couldn't get a memory pool buffer 16225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_ILLEGAL_VALUE if a bad parameter was detected 16235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic tBTM_STATUS btm_set_inq_event_filter (UINT8 filter_cond_type, 16265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQ_FILT_COND *p_filt_cond) 16275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 condition_length = DEV_CLASS_LEN * 2; 16295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 condition_buf[DEV_CLASS_LEN * 2]; 16305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_cond = condition_buf; /* points to the condition to pass to HCI */ 16315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_INQ_DEBUG == TRUE) 16335344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG ("btm_set_inq_event_filter: filter type %d [Clear-0, COD-1, BDADDR-2]", 16345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filter_cond_type); 16355344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG (" condition [%02x%02x%02x %02x%02x%02x]", 16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_filt_cond->bdaddr_cond[0], p_filt_cond->bdaddr_cond[1], p_filt_cond->bdaddr_cond[2], 16375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_filt_cond->bdaddr_cond[3], p_filt_cond->bdaddr_cond[4], p_filt_cond->bdaddr_cond[5]); 16385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 16395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Load the correct filter condition to pass to the lower layer */ 16415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (filter_cond_type) 16425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_FILTER_COND_DEVICE_CLASS: 16445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* copy the device class and device class fields into contiguous memory to send to HCI */ 16455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy (condition_buf, p_filt_cond->cod_cond.dev_class, DEV_CLASS_LEN); 16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy (&condition_buf[DEV_CLASS_LEN], 16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_filt_cond->cod_cond.dev_class_mask, DEV_CLASS_LEN); 16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* condition length should already be set as the default */ 16505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 16515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_FILTER_COND_BD_ADDR: 16535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cond = p_filt_cond->bdaddr_cond; 16545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* condition length should already be set as the default */ 16565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 16575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_CLR_INQUIRY_FILTER: 16595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project condition_length = 0; 16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 16615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_ILLEGAL_VALUE); /* Bad parameter was passed in */ 16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inqfilt_active = TRUE; 16675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Filter the inquiry results for the specified condition type and value */ 16695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btsnd_hcic_set_event_filter(HCI_FILTER_INQUIRY_RESULT, filter_cond_type, 16705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cond, condition_length)) 16715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_CMD_STARTED); 16735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_NO_RESOURCES); 16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 16795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_event_filter_complete 16815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when a set event filter has completed. 16835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Note: This routine currently only handles inquiry filters. 16845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Connection filters are ignored for now. 16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_event_filter_complete (UINT8 *p) 16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 hci_status; 16925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status; 16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_CMPL_CB *p_cb = p_inq->p_inqfilter_cmpl_cb; 16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_INQ_DEBUG == TRUE) 16975344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG ("btm_event_filter_complete: inq_active:0x%x state:%d inqfilt_active:%d", 16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_active, btm_cb.btm_inq_vars.state, btm_cb.btm_inq_vars.inqfilt_active); 16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 17005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the filter complete event is from an old or cancelled request, ignore it */ 17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_inq->pending_filt_complete_event) 17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->pending_filt_complete_event--; 17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Only process the inquiry filter; Ignore the connection filter until it 17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project is used by the upper layers */ 17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->inqfilt_active == TRUE ) 17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Extract the returned status from the buffer */ 17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (hci_status, p); 17135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (hci_status != HCI_SUCCESS) 17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If standalone operation, return the error status; if embedded in the inquiry, continue the inquiry */ 17165344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_WARNING ("BTM Warning: Set Event Filter Failed (HCI returned 0x%x)", hci_status); 17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_ERR_PROCESSING; 17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 17205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_SUCCESS; 17215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the set filter was initiated externally (via BTM_SetInqEventFilter), call the 17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project callback function to notify the initiator that it has completed */ 17245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->state == BTM_INQ_INACTIVE_STATE) 17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inqfilt_active = FALSE; 17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb) 17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_cb) (&status); 17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* An inquiry is active (the set filter command was internally generated), 17315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project process the next state of the process (Set a new filter or start the inquiry). */ 17325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(status != BTM_SUCCESS) 17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Process the inquiry complete (Error Status) */ 17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_process_inq_complete (BTM_ERR_PROCESSING, (UINT8)(p_inq->inqparms.mode & BTM_BR_INQUIRY_MASK)); 17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* btm_process_inq_complete() does not restore the following settings on periodic inquiry */ 17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inqfilt_active = FALSE; 17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_active = BTM_INQUIRY_INACTIVE; 17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->state = BTM_INQ_INACTIVE_STATE; 17425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check to see if a new filter needs to be set up */ 17475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->state == BTM_INQ_CLR_FILT_STATE) 17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((status = btm_set_inq_event_filter (p_inq->inqparms.filter_cond_type, &p_inq->inqparms.filter_cond)) == BTM_CMD_STARTED) 17505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->state = BTM_INQ_SET_FILT_STATE; 17525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* Error setting the filter: Call the initiator's callback function to indicate a failure */ 17545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inqfilt_active = FALSE; 17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Process the inquiry complete (Error Status) */ 17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_process_inq_complete (BTM_ERR_PROCESSING, (UINT8)(p_inq->inqparms.mode & BTM_BR_INQUIRY_MASK)); 17595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* Initiate the Inquiry or Periodic Inquiry */ 17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->state = BTM_INQ_ACTIVE_STATE; 17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inqfilt_active = FALSE; 17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_initiate_inquiry (p_inq); 17665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 17735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_initiate_inquiry 17755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to start an inquiry or periodic inquiry 17775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** upon completion of the setting and/or clearing of the inquiry filter. 17785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Inputs: p_inq (btm_cb.btm_inq_vars) - pointer to saved inquiry information 17805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** mode - GENERAL or LIMITED inquiry 17815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** duration - length in 1.28 sec intervals (If '0', the inquiry is CANCELLED) 17825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** max_resps - maximum amount of devices to search for before ending the inquiry 17835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** filter_cond_type - BTM_CLR_INQUIRY_FILTER, BTM_FILTER_COND_DEVICE_CLASS, or 17845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_FILTER_COND_BD_ADDR 17855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** filter_cond - value for the filter (based on filter_cond_type) 17865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns If an error occurs the initiator's callback is called with the error status. 17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 17905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_initiate_inquiry (tBTM_INQUIRY_VAR_ST *p_inq) 17915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const LAP *lap; 17935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQ_PARMS *p_inqparms = &p_inq->inqparms; 17945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_INQ_DEBUG == TRUE) 17965344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG ("btm_initiate_inquiry: inq_active:0x%x state:%d inqfilt_active:%d", 17975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_active, btm_cb.btm_inq_vars.state, btm_cb.btm_inq_vars.inqfilt_active); 17985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 17995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_update_busy_level (BTM_BLI_INQ_EVT); 18005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->inq_active & BTM_SSP_INQUIRY_ACTIVE) 18025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_process_inq_complete (BTM_NO_RESOURCES, (UINT8)(p_inqparms->mode & BTM_BR_INQUIRY_MASK)); 18045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 18055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Make sure the number of responses doesn't overflow the database configuration */ 18085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inqparms->max_resps = (UINT8)((p_inqparms->max_resps <= BTM_INQ_DB_SIZE) ? p_inqparms->max_resps : BTM_INQ_DB_SIZE); 18095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project lap = (p_inq->inq_active & BTM_LIMITED_INQUIRY_ACTIVE) ? &limited_inq_lap : &general_inq_lap; 18115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->inq_active & BTM_PERIODIC_INQUIRY_ACTIVE) 18135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_per_inq_mode (p_inq->per_max_delay, 18155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->per_min_delay, 18165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *lap, p_inqparms->duration, 18175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inqparms->max_resps)) 18185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_process_inq_complete (BTM_NO_RESOURCES, (UINT8)(p_inqparms->mode & BTM_BR_INQUIRY_MASK)); 18195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 18215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_clr_inq_result_flt(); 18235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Allocate memory to hold bd_addrs responding */ 18255fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov p_inq->p_bd_db = (tINQ_BDADDR *)osi_calloc(BT_DEFAULT_BUFFER_SIZE); 18265fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov p_inq->max_bd_entries = (UINT16)(BT_DEFAULT_BUFFER_SIZE / sizeof(tINQ_BDADDR)); 18275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btsnd_hcic_inquiry(*lap, p_inqparms->duration, 0)) 18295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_process_inq_complete (BTM_NO_RESOURCES, (UINT8)(p_inqparms->mode & BTM_BR_INQUIRY_MASK)); 18305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 18345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_process_inq_results 18365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when inquiry results are received from 18385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** the device. It updates the inquiry database. If the inquiry 18395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** database is full, the oldest entry is discarded. 18405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters inq_res_mode - BTM_INQ_RESULT_STANDARD 18425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_INQ_RESULT_WITH_RSSI 18435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_INQ_RESULT_EXTENDED 18445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 18465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 18485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_process_inq_results (UINT8 *p, UINT8 inq_res_mode) 18495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 18505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 num_resp, xx; 18515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_ADDR bda; 18525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tINQ_DB_ENT *p_i; 1853ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_INQ_RESULTS *p_cur=NULL; 18545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN is_new = TRUE; 18555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN update = FALSE; 18565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT8 i_rssi; 18575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 18585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQ_RESULTS_CB *p_inq_results_cb = p_inq->p_inq_results_cb; 18595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 page_scan_rep_mode = 0; 18605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 page_scan_per_mode = 0; 18615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 page_scan_mode = 0; 18625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 rssi = 0; 18635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project DEV_CLASS dc; 18645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 clock_offset; 18655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_eir_data = NULL; 18665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_INQ_DEBUG == TRUE) 18685344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG ("btm_process_inq_results inq_active:0x%x state:%d inqfilt_active:%d", 18695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_active, btm_cb.btm_inq_vars.state, btm_cb.btm_inq_vars.inqfilt_active); 18705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1871ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Only process the results if the BR inquiry is still active */ 1872ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!(p_inq->inq_active & BTM_BR_INQ_ACTIVE_MASK)) 18735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 18745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (num_resp, p); 18765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18779eb4ddab2e1a8069dd9a10b6a17021ed7676ccbcMyles Watson if (inq_res_mode == BTM_INQ_RESULT_EXTENDED && (num_resp > 1)) { 18789eb4ddab2e1a8069dd9a10b6a17021ed7676ccbcMyles Watson BTM_TRACE_ERROR ("btm_process_inq_results() extended results (%d) > 1", 18799eb4ddab2e1a8069dd9a10b6a17021ed7676ccbcMyles Watson num_resp); 18809eb4ddab2e1a8069dd9a10b6a17021ed7676ccbcMyles Watson return; 18819eb4ddab2e1a8069dd9a10b6a17021ed7676ccbcMyles Watson } 18829eb4ddab2e1a8069dd9a10b6a17021ed7676ccbcMyles Watson 18835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (xx = 0; xx < num_resp; xx++) 18845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project update = FALSE; 18865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Extract inquiry results */ 18875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_BDADDR (bda, p); 18885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (page_scan_rep_mode, p); 18895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (page_scan_per_mode, p); 18905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (inq_res_mode == BTM_INQ_RESULT_STANDARD) 18925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8(page_scan_mode, p); 18945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_DEVCLASS (dc, p); 18975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT16 (clock_offset, p); 18985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (inq_res_mode != BTM_INQ_RESULT_STANDARD) 18995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8(rssi, p); 19015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_i = btm_inq_db_find (bda); 19045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Only process the num_resp is smaller than max_resps. 19065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project If results are queued to BTU task while canceling inquiry, 19075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project or when more than one result is in this response, > max_resp 19085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project responses could be processed which can confuse some apps 19095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 19105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->inqparms.max_resps && 19115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_cmpl_info.num_resp >= p_inq->inqparms.max_resps 19125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 19135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* new device response */ 19145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project && ( p_i == NULL || 19155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* exisiting device with BR/EDR info */ 19165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_i && (p_i->inq_info.results.device_type & BT_DEVICE_TYPE_BREDR) != 0) 19175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ) 19185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 19195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ) 19215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19225344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati/* BTM_TRACE_WARNING("INQ RES: Extra Response Received...ignoring"); */ 19235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 19245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check if this address has already been processed for this inquiry */ 19275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_inq_find_bdaddr(bda)) 19285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19295344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati/* BTM_TRACE_DEBUG("BDA seen before [%02x%02x %02x%02x %02x%02x]", 19305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]);*/ 19315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* By default suppose no update needed */ 19325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project i_rssi = (INT8)rssi; 19335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If this new RSSI is higher than the last one */ 19355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_inq->inqparms.report_dup && (rssi != 0) && 19365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_i && (i_rssi > p_i->inq_info.results.rssi || p_i->inq_info.results.rssi == 0 19375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 19385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BR/EDR inquiry information update */ 19395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project || (p_i->inq_info.results.device_type & BT_DEVICE_TYPE_BREDR) != 0 19405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 19415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project )) 19425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur = &p_i->inq_info.results; 19445344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG("update RSSI new:%d, old:%d", i_rssi, p_cur->rssi); 19455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->rssi = i_rssi; 19465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project update = TRUE; 19475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If we received a second Extended Inq Event for an already */ 19495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* discovered device, this is because for the first one EIR was not received */ 19505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((inq_res_mode == BTM_INQ_RESULT_EXTENDED) && (p_i)) 19515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur = &p_i->inq_info.results; 19535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project update = TRUE; 19545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If no update needed continue with next response (if any) */ 19565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 19575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project continue; 19585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If existing entry, use that, else get a new one (possibly reusing the oldest) */ 19615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_i == NULL) 19625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_i = btm_inq_db_new (bda); 19645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project is_new = TRUE; 19655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If an entry for the device already exists, overwrite it ONLY if it is from 19685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project a previous inquiry. (Ignore it if it is a duplicate response from the same 19695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project inquiry. 19705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 19715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (p_i->inq_count == p_inq->inq_counter 19725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE ) 1973cdfb11a323a75ff3458309e76239753b7aae8391Nitin Arora && (p_i->inq_info.results.device_type == BT_DEVICE_TYPE_BREDR) 19745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 19755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ) 19765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project is_new = FALSE; 19775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* keep updating RSSI to have latest value */ 19795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( inq_res_mode != BTM_INQ_RESULT_STANDARD ) 19805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_i->inq_info.results.rssi = (INT8)rssi; 19815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 19825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_i->inq_info.results.rssi = BTM_INQ_RES_IGNORE_RSSI; 19835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (is_new == TRUE) 19855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Save the info */ 19875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur = &p_i->inq_info.results; 19885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->page_scan_rep_mode = page_scan_rep_mode; 19895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->page_scan_per_mode = page_scan_per_mode; 19905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->page_scan_mode = page_scan_mode; 19915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->dev_class[0] = dc[0]; 19925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->dev_class[1] = dc[1]; 19935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->dev_class[2] = dc[2]; 19945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->clock_offset = clock_offset | BTM_CLOCK_OFFSET_VALID; 19955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1996c196f214c5ae349ec2022f8d3cbaf56910b3b9f8Pavlin Radoslavov p_i->time_of_resp = time_get_os_boottime_ms(); 19975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_i->inq_count != p_inq->inq_counter) 19995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_cmpl_info.num_resp++; /* A new response was found */ 20005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined BLE_INCLUDED && BLE_INCLUDED == TRUE) 20025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->inq_result_type = BTM_INQ_RESULT_BR; 20035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_i->inq_count != p_inq->inq_counter) 20045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 20055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->device_type = BT_DEVICE_TYPE_BREDR; 20065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_i->scan_rsp = FALSE; 20075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 20095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->device_type |= BT_DEVICE_TYPE_BREDR; 20105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 20115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_i->inq_count = p_inq->inq_counter; /* Mark entry for current inquiry */ 20125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the number of responses found and not unlimited, issue a cancel inquiry */ 20145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!(p_inq->inq_active & BTM_PERIODIC_INQUIRY_ACTIVE) && 20155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inqparms.max_resps && 20165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_cmpl_info.num_resp == p_inq->inqparms.max_resps 20175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 20185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BLE scanning is active and received adv */ 20195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project && ((((p_inq->inqparms.mode & BTM_BLE_INQUIRY_MASK) != 0) && 20205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->device_type == BT_DEVICE_TYPE_DUMO && p_i->scan_rsp) || 20215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_inq->inqparms.mode & BTM_BLE_INQUIRY_MASK) == 0) 20225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 20235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ) 20245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 20255344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati/* BTM_TRACE_DEBUG("BTMINQ: Found devices, cancelling inquiry..."); */ 20265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btsnd_hcic_inq_cancel(); 20275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 20295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_inq->inqparms.mode & BTM_BLE_INQUIRY_MASK) != 0) 20307fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta btm_ble_stop_inquiry(); 20315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 20325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_update_busy_level (BTM_BLI_INQ_DONE_EVT); 20335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initialize flag to FALSE. This flag is set/used by application */ 20355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_i->inq_info.appl_knows_rem_name = FALSE; 20365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (is_new || update) 20395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 20405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( inq_res_mode == BTM_INQ_RESULT_EXTENDED ) 20415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 20425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset( p_cur->eir_uuid, 0, 20435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_EIR_SERVICE_ARRAY_SIZE * (BTM_EIR_ARRAY_BITS/8)); 20445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set bit map of UUID list from received EIR */ 20455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_set_eir_uuid( p, p_cur ); 20465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_eir_data = p; 20475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 20495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_eir_data = NULL; 20505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If a callback is registered, call it with the results */ 20525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq_results_cb) 20535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_inq_results_cb)((tBTM_INQ_RESULTS *) p_cur, p_eir_data); 20545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 20575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 20595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_sort_inq_result 20615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when inquiry complete is received 20635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the device to sort inquiry results based on rssi. 20645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 20665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 20685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_sort_inq_result(void) 20695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 20705fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov UINT8 xx, yy, num_resp; 20715fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov tINQ_DB_ENT *p_ent = btm_cb.btm_inq_vars.inq_db; 20725fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov tINQ_DB_ENT *p_next = btm_cb.btm_inq_vars.inq_db+1; 20735fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov int size; 20745fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov tINQ_DB_ENT *p_tmp = (tINQ_DB_ENT *)osi_malloc(sizeof(tINQ_DB_ENT)); 20755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_resp = (btm_cb.btm_inq_vars.inq_cmpl_info.num_resp<BTM_INQ_DB_SIZE)? 20775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_cmpl_info.num_resp: BTM_INQ_DB_SIZE; 20785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20795fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov size = sizeof(tINQ_DB_ENT); 20805fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov for (xx = 0; xx < num_resp-1; xx++, p_ent++) { 20815fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov for (yy = xx+1, p_next = p_ent+1; yy < num_resp; yy++, p_next++) { 20825fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov if (p_ent->inq_info.results.rssi < p_next->inq_info.results.rssi) { 20835fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov memcpy(p_tmp, p_next, size); 20845fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov memcpy(p_next, p_ent, size); 20855fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov memcpy(p_ent, p_tmp, size); 20865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20895fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov 20905fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov osi_free(p_tmp); 20915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 20925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 20945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_process_inq_complete 20965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when inquiry complete is received 20985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the device. Call the callback if not in periodic inquiry 20995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** mode AND it is not NULL (The caller wants the event). 21005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** The callback pass back the status and the number of responses 21025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 21045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 21065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_process_inq_complete (UINT8 status, UINT8 mode) 21075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 21085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_CMPL_CB *p_inq_cb = btm_cb.btm_inq_vars.p_inq_cmpl_cb; 21095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 21105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21117f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) 21127f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie /* inquiry inactive case happens when inquiry is cancelled. 21137f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie Make mode 0 for no further inquiries from the current inquiry process 21147f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie */ 21157f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie if(status!=HCI_SUCCESS || p_inq->next_state==BTM_FINISH || !p_inq->inq_active) 21167f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie { 21177f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie /* re-initialize for next inquiry request */ 21187f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->next_state=BTM_BR_ONE; 21197f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie /* make the mode 0 here */ 21207f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie p_inq->inqparms.mode &= ~(p_inq->inqparms.mode); 21217f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 21227f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie } 21237f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 21245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21257f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (!defined(BTA_HOST_INTERLEAVE_SEARCH) || BTA_HOST_INTERLEAVE_SEARCH == FALSE) 21265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inqparms.mode &= ~(mode); 21277f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 21287f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 21290830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora if(p_inq->scan_type == INQ_LE_OBSERVE && !p_inq->inq_active) 21300830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora { 21310830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora /*end of LE observe*/ 21320830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora p_inq->p_inq_ble_results_cb = (tBTM_INQ_RESULTS_CB *) NULL; 21330830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora p_inq->p_inq_ble_cmpl_cb = (tBTM_CMPL_CB *) NULL; 21340830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora p_inq->scan_type=INQ_NONE; 21350830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora } 21367f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie 21375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_INQ_DEBUG == TRUE) 21395344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG ("btm_process_inq_complete inq_active:0x%x state:%d inqfilt_active:%d", 21405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_active, btm_cb.btm_inq_vars.state, btm_cb.btm_inq_vars.inqfilt_active); 21415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 21425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_update_busy_level (BTM_BLI_INQ_DONE_EVT); 21435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Ignore any stray or late complete messages if the inquiry is not active */ 21445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->inq_active) 21455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_cmpl_info.status = (tBTM_STATUS)((status == HCI_SUCCESS) ? BTM_SUCCESS : BTM_ERR_PROCESSING); 21475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Notify caller that the inquiry has completed; (periodic inquiries do not send completion events */ 21495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!(p_inq->inq_active & BTM_PERIODIC_INQUIRY_ACTIVE) && p_inq->inqparms.mode == 0) 21505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2151444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji#if BLE_INCLUDED == TRUE 2152444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji btm_clear_all_pending_le_entry(); 2153444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji#endif 21545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->state = BTM_INQ_INACTIVE_STATE; 21555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Increment so the start of a next inquiry has a new count */ 21575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_counter++; 21585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_clr_inq_result_flt(); 21605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21613aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach if((p_inq->inq_cmpl_info.status == BTM_SUCCESS) && 216230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson controller_get_interface()->supports_rssi_with_inquiry_results()) 21635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_sort_inq_result(); 21655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 21665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Clear the results callback if set */ 21685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->p_inq_results_cb = (tBTM_INQ_RESULTS_CB *) NULL; 21695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_active = BTM_INQUIRY_INACTIVE; 21705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->p_inq_cmpl_cb = (tBTM_CMPL_CB *) NULL; 21715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If we have a callback registered for inquiry complete, call it */ 21735344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG ("BTM Inq Compl Callback: status 0x%02x, num results %d", 21745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->inq_cmpl_info.status, p_inq->inq_cmpl_info.num_resp); 21755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq_cb) 21775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_inq_cb)((tBTM_INQUIRY_CMPL *) &p_inq->inq_cmpl_info); 21785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 21797f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) 21807fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta if(p_inq->inqparms.mode != 0 && !(p_inq->inq_active & BTM_PERIODIC_INQUIRY_ACTIVE)) 21817fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta { 21827fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta /* make inquiry inactive for next iteration */ 21837fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta p_inq->inq_active = BTM_INQUIRY_INACTIVE; 21847fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta /* call the inquiry again */ 21857fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta BTM_StartInquiry(&p_inq->inqparms,p_inq->p_inq_results_cb,p_inq->p_inq_cmpl_cb); 21867fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta } 21877f3e42943b834ff0f556cd5c063a896f54d53167Matthew Xie#endif 21885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 21890830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora if(p_inq->inqparms.mode == 0 && p_inq->scan_type == INQ_GENERAL)//this inquiry is complete 21900830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora { 21910830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora p_inq->scan_type = INQ_NONE; 21920830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora#if (defined BLE_INCLUDED && BLE_INCLUDED == TRUE) 21930830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora /* check if the LE observe is pending */ 21940830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora if(p_inq->p_inq_ble_results_cb != NULL) 21950830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora { 21965344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG("BTM Inq Compl: resuming a pending LE scan"); 21970830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora BTM_BleObserve(1,0, p_inq->p_inq_ble_results_cb, p_inq->p_inq_ble_cmpl_cb); 21980830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora } 21990830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora#endif 22000830ad47f790fea658ddc6fa857fb36880e0c552Nitin Arora } 22015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_INQ_DEBUG == TRUE) 22025344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG ("inq_active:0x%x state:%d inqfilt_active:%d", 22035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_inq_vars.inq_active, btm_cb.btm_inq_vars.state, btm_cb.btm_inq_vars.inqfilt_active); 22045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 22055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 22065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 22085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_process_cancel_complete 22105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when inquiry cancel complete is received 22125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from the device.This function will also call the btm_process_inq_complete 22135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** This function is needed to differentiate a cancel_cmpl_evt from the 22145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** inq_cmpl_evt 22155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 22175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 22195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_process_cancel_complete(UINT8 status, UINT8 mode) 22205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 22215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_update_busy_level (BTM_BLI_INQ_CANCEL_EVT); 22225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_process_inq_complete(status, mode); 22235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 22245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 22255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_initiate_rem_name 22275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function looks initiates a remote name request. It is called 22295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** either by GAP or by the API call BTM_ReadRemoteDeviceName. 22305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Input Params: p_cur - pointer to an inquiry result structure (NULL if nonexistent) 22325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_cb - callback function called when BTM_CMD_STARTED 22335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** is returned. 22345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** A pointer to tBTM_REMOTE_DEV_NAME is passed to the 22355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** callback. 22365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 22385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_CMD_STARTED is returned if the request was sent to HCI. 22395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_BUSY if already in progress 22405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_NO_RESOURCES if could not allocate resources to start the command 22415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_WRONG_MODE if the device is not up. 22425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 22435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 22445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS btm_initiate_rem_name (BD_ADDR remote_bda, tBTM_INQ_INFO *p_cur, 224578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov UINT8 origin, period_ms_t timeout_ms, 224678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov tBTM_CMPL_CB *p_cb) 22475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 22485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 22495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN cmd_ok; 22505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*** Make sure the device is ready ***/ 22535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!BTM_IsDeviceUp()) 22545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_WRONG_MODE); 22555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (origin == BTM_RMT_NAME_SEC) 22585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cmd_ok = btsnd_hcic_rmt_name_req (remote_bda, HCI_PAGE_SCAN_REP_MODE_R1, 22605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HCI_MANDATARY_PAGE_SCAN_MODE, 0); 22615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (cmd_ok) 22625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_CMD_STARTED; 22635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 22645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_NO_RESOURCES; 22655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Make sure there are no two remote name requests from external API in progress */ 22675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (origin == BTM_RMT_NAME_EXT) 22685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_inq->remname_active) 22705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_BUSY); 22725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 22745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If there is no remote name request running,call the callback function and start timer */ 22765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->p_remname_cmpl_cb = p_cb; 22775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_inq->remname_bda, remote_bda, BD_ADDR_LEN); 227878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov 227978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_set_on_queue(p_inq->remote_name_timer, timeout_ms, 228078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_inq_remote_name_timer_timeout, NULL, 228178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btu_general_alarm_queue); 22825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the database entry exists for the device, use its clock offset */ 22845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cur) 22855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cmd_ok = btsnd_hcic_rmt_name_req (remote_bda, 22875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->results.page_scan_rep_mode, 22885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cur->results.page_scan_mode, 22895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16)(p_cur->results.clock_offset | 22905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_CLOCK_OFFSET_VALID)); 22915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* Otherwise use defaults and mark the clock offset as invalid */ 22935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cmd_ok = btsnd_hcic_rmt_name_req (remote_bda, HCI_PAGE_SCAN_REP_MODE_R1, 22955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HCI_MANDATARY_PAGE_SCAN_MODE, 0); 22965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (cmd_ok) 22985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->remname_active = TRUE; 23005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_CMD_STARTED; 23015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 23035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_NO_RESOURCES; 23045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 23075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_ILLEGAL_VALUE; 23095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 23115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 23135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_process_remote_name 23155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called when a remote name is received from 23175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** the device. If remote names are cached, it updates the inquiry 23185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** database. 23195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 23215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 23235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_process_remote_name (BD_ADDR bda, BD_NAME bdn, UINT16 evt_len, UINT8 hci_status) 23245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2325ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_REMOTE_DEV_NAME rem_name; 23265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; 23275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_CMPL_CB *p_cb = p_inq->p_remname_cmpl_cb; 23285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_n1; 23295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 temp_evt_len; 23315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bda != NULL) 23335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23345344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_EVENT("BDA %02x:%02x:%02x:%02x:%02x:%02x",bda[0], bda[1], 23355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bda[2], bda[3], 23365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bda[4], bda[5]); 23375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 233953c5eb27d0f933ddc3c23d89a0b7fcf14c906f64Zach Johnson BTM_TRACE_EVENT("Inquire BDA %02x:%02x:%02x:%02x:%02x:%02x",p_inq->remname_bda[0], p_inq->remname_bda[1], 23405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->remname_bda[2], p_inq->remname_bda[3], 23415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->remname_bda[4], p_inq->remname_bda[5]); 23425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the inquire BDA and remote DBA are the same, then stop the timer and set the active to false */ 23465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_inq->remname_active ==TRUE)&& 23475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (((bda != NULL) && 23485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (memcmp(bda, p_inq->remname_bda,BD_ADDR_LEN)==0)) || bda == NULL)) 23495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 235053c5eb27d0f933ddc3c23d89a0b7fcf14c906f64Zach Johnson { 23515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 23526975b4d711142b885af479721cada448952c6b41Andre Eisenbach if (BTM_UseLeLink(p_inq->remname_bda)) 23535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (hci_status == HCI_ERR_UNSPECIFIED) 23555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_ble_cancel_remote_name(p_inq->remname_bda); 23565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 235878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_cancel(p_inq->remote_name_timer); 23595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->remname_active = FALSE; 23605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Clean up and return the status if the command was not successful */ 23615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Note: If part of the inquiry, the name is not stored, and the */ 23625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* inquiry complete callback is called. */ 23635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2364104e3f238f500cacdb8afaccdc672dfc34eae7eeBernhard Rosenkränzer if (hci_status == HCI_SUCCESS) 23655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Copy the name from the data stream into the return structure */ 23675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Note that even if it is not being returned, it is used as a */ 23685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* temporary buffer. */ 23695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_n1 = (UINT8 *)rem_name.remote_bd_name; 23705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rem_name.length = (evt_len < BD_NAME_LEN) ? evt_len : BD_NAME_LEN; 2371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta rem_name.remote_bd_name[rem_name.length] = 0; 23725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rem_name.status = BTM_SUCCESS; 23735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project temp_evt_len = rem_name.length; 23745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (temp_evt_len > 0) 23765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_n1++ = *bdn++; 23785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project temp_evt_len--; 23795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2380ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta rem_name.remote_bd_name[rem_name.length] = 0; 23815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If processing a stand alone remote name then report the error in the callback */ 23855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 23865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rem_name.status = BTM_BAD_VALUE_RET; 23885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rem_name.length = 0; 23895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rem_name.remote_bd_name[0] = 0; 23905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Reset the remote BAD to zero and call callback if possible */ 23925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p_inq->remname_bda, 0, BD_ADDR_LEN); 23935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq->p_remname_cmpl_cb = NULL; 23955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb) 23965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_cb)((tBTM_REMOTE_DEV_NAME *)&rem_name); 23975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 23995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 240078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovvoid btm_inq_remote_name_timer_timeout(UNUSED_ATTR void *data) 240178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov{ 240278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_inq_rmt_name_failed(); 240378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov} 240478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov 24055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 24065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_inq_rmt_name_failed 24085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is if timeout expires while getting remote 24105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** name. This is done for devices that incorrectly do not 24115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** report operation failure 24125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 24145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 24165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_inq_rmt_name_failed (void) 24175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 24185344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_ERROR ("btm_inq_rmt_name_failed() remname_active=%d", btm_cb.btm_inq_vars.remname_active); 24195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.btm_inq_vars.remname_active) 24215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_process_remote_name (btm_cb.btm_inq_vars.remname_bda, NULL, 0, HCI_ERR_UNSPECIFIED); 24225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 24235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_process_remote_name (NULL, NULL, 0, HCI_ERR_UNSPECIFIED); 24245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_sec_rmt_name_request_complete (NULL, NULL, HCI_ERR_UNSPECIFIED); 24265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 242778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov 242878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov/******************************************************************************* 242978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov** 243078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov** Function btm_read_inq_tx_power_timeout 243178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov** 243278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov** Description Callback when reading the inquiry tx power times out. 243378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov** 243478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov** Returns void 243578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov** 243678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov*******************************************************************************/ 243778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovvoid btm_read_inq_tx_power_timeout(UNUSED_ATTR void *data) 243878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov{ 243978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov tBTM_CMPL_CB *p_cb = btm_cb.devcb.p_inq_tx_power_cmpl_cb; 244078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_cb.devcb.p_inq_tx_power_cmpl_cb = NULL; 244178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov if (p_cb) 244278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov (*p_cb)((void *) NULL); 244378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov} 244478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov 24455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 24465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 244778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov** Function btm_read_inq_tx_power_complete 24485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description read inquiry tx power level complete callback function. 24505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 24525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 245478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovvoid btm_read_inq_tx_power_complete(UINT8 *p) 24555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 245678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov tBTM_CMPL_CB *p_cb = btm_cb.devcb.p_inq_tx_power_cmpl_cb; 24575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQ_TXPWR_RESULTS results; 24585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 245978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov BTM_TRACE_DEBUG("%s", __func__); 246078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_cancel(btm_cb.devcb.read_inq_tx_power_timer); 246178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_cb.devcb.p_inq_tx_power_cmpl_cb = NULL; 24625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 246378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov /* If there was a registered callback, call it */ 24645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb) 24655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 24665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (results.hci_status, p); 24675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (results.hci_status == HCI_SUCCESS) 24695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 24705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project results.status = BTM_SUCCESS; 24715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (results.tx_power, p); 24735344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_EVENT ("BTM INQ TX POWER Complete: tx_power %d, hci status 0x%02x", 24745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project results.tx_power, results.hci_status); 24755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 24765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 24775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project results.status = BTM_ERR_PROCESSING; 24785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_cb)(&results); 24805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 24815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 24835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 24845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_WriteEIR 24865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to write EIR data to controller. 24885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters p_buff - allocated HCI command buffer including extended 24905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** inquriry response 24915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_SUCCESS - if successful 24935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_MODE_UNSUPPORTED - if local device cannot support it 24945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 24965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_WriteEIR( BT_HDR *p_buff ) 24975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 249830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (controller_get_interface()->supports_extended_inquiry_response()) 24995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 25005344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API("Write Extended Inquiry Response to controller"); 25015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btsnd_hcic_write_ext_inquiry_response (p_buff, BTM_EIR_DEFAULT_FEC_REQUIRED); 25025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_SUCCESS; 25035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 25045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 25055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2506abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov osi_free(p_buff); 25075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_MODE_UNSUPPORTED; 25085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 25095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 25105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 25125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_CheckEirData 25145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to get EIR data from significant part. 25165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters p_eir - pointer of EIR significant part 25185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** type - finding EIR data type 25195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_length - return the length of EIR data not including type 25205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns pointer of EIR data 25225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 25245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 *BTM_CheckEirData( UINT8 *p_eir, UINT8 type, UINT8 *p_length ) 25255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 25265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p = p_eir; 25275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 length; 25285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 eir_type; 25295344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API("BTM_CheckEirData type=0x%02X", type); 25305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8(length, p); 25325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while( length && (p - p_eir <= HCI_EXT_INQ_RESPONSE_LEN)) 25335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 25345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8(eir_type, p); 25355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( eir_type == type ) 25365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 25375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* length doesn't include itself */ 25385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_length = length - 1; /* minus the length of type */ 25395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p; 25405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 25415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p += length - 1; /* skip the length of data */ 25425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8(length, p); 25435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 25445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_length = 0; 25465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return NULL; 25475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 25485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 25505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_convert_uuid_to_eir_service 25525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to get the bit position of UUID. 25545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters uuid16 - UUID 16-bit 25565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM EIR service ID if found 25585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_EIR_MAX_SERVICES - if not found 25595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 25615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 btm_convert_uuid_to_eir_service( UINT16 uuid16 ) 25625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 25635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 xx; 25645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for( xx = 0; xx < BTM_EIR_MAX_SERVICES; xx++ ) 25665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 25675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( uuid16 == BTM_EIR_UUID_LKUP_TBL[xx]) 25685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 25695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return xx; 25705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 25715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 25725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_EIR_MAX_SERVICES; 25735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 25745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 25765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_HasEirService 25785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to know if UUID in bit map of UUID. 25805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters p_eir_uuid - bit map of UUID list 25825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** uuid16 - UUID 16-bit 25835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns TRUE - if found 25855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** FALSE - if not found 25865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 25885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN BTM_HasEirService( UINT32 *p_eir_uuid, UINT16 uuid16 ) 25895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 25905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 service_id; 25915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project service_id = btm_convert_uuid_to_eir_service(uuid16); 25935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( service_id < BTM_EIR_MAX_SERVICES ) 25945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return( BTM_EIR_HAS_SERVICE( p_eir_uuid, service_id )); 25955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 25965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return( FALSE ); 25975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 25985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 26005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_HasInquiryEirService 26025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to know if UUID in bit map of UUID list. 26045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters p_results - inquiry results 26065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** uuid16 - UUID 16-bit 26075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_EIR_FOUND - if found 26095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_EIR_NOT_FOUND - if not found and it is complete list 26105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_EIR_UNKNOWN - if not found and it is not complete list 26115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 26135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_EIR_SEARCH_RESULT BTM_HasInquiryEirService( tBTM_INQ_RESULTS *p_results, UINT16 uuid16 ) 26145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 26155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( BTM_HasEirService( p_results->eir_uuid, uuid16 )) 26165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 26175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_EIR_FOUND; 26185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 26195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if( p_results->eir_complete_list ) 26205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 26215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_EIR_NOT_FOUND; 26225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 26235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 26245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_EIR_UNKNOWN; 26255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 26265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 26285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_AddEirService 26305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to add a service in bit map of UUID list. 26325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters p_eir_uuid - bit mask of UUID list for EIR 26345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** uuid16 - UUID 16-bit 26355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 26375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 26395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTM_AddEirService( UINT32 *p_eir_uuid, UINT16 uuid16 ) 26405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 26415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 service_id; 26425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project service_id = btm_convert_uuid_to_eir_service(uuid16); 26445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( service_id < BTM_EIR_MAX_SERVICES ) 26455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_EIR_SET_SERVICE( p_eir_uuid, service_id ); 26465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 26475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 26495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_RemoveEirService 26515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to remove a service in bit map of UUID list. 26535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters p_eir_uuid - bit mask of UUID list for EIR 26555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** uuid16 - UUID 16-bit 26565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 26585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 26605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTM_RemoveEirService( UINT32 *p_eir_uuid, UINT16 uuid16 ) 26615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 26625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 service_id; 26635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project service_id = btm_convert_uuid_to_eir_service(uuid16); 26655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( service_id < BTM_EIR_MAX_SERVICES ) 26665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_EIR_CLR_SERVICE( p_eir_uuid, service_id ); 26675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 26685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 26705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_GetEirSupportedServices 26725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to get UUID list from bit map of UUID list. 26745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters p_eir_uuid - bit mask of UUID list for EIR 26765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p - reference of current pointer of EIR 26775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** max_num_uuid16 - max number of UUID can be written in EIR 26785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** num_uuid16 - number of UUID have been written in EIR 26795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BTM_EIR_MORE_16BITS_UUID_TYPE, if it has more than max 26815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_EIR_COMPLETE_16BITS_UUID_TYPE, otherwise 26825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 26845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 BTM_GetEirSupportedServices( UINT32 *p_eir_uuid, UINT8 **p, 26855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 max_num_uuid16, UINT8 *p_num_uuid16) 26865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 26875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 service_index; 26885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_num_uuid16 = 0; 26905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(service_index = 0; service_index < BTM_EIR_MAX_SERVICES; service_index++) 26925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 26935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( BTM_EIR_HAS_SERVICE( p_eir_uuid, service_index )) 26945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 26955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( *p_num_uuid16 < max_num_uuid16 ) 26965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 26975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM(*p, BTM_EIR_UUID_LKUP_TBL[service_index]); 26985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_num_uuid16)++; 26995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if max number of UUIDs are stored and found one more */ 27015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 27025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_EIR_MORE_16BITS_UUID_TYPE; 27045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_EIR_COMPLETE_16BITS_UUID_TYPE; 27085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 27095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 27115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 27125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function BTM_GetEirUuidList 27135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 27145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function parses EIR and returns UUID list. 27155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 27165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters p_eir - EIR 27175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** uuid_size - LEN_UUID_16, LEN_UUID_32, LEN_UUID_128 27185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_num_uuid - return number of UUID in found list 27195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_uuid_list - return UUID list 27205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** max_num_uuid - maximum number of UUID to be returned 27215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 27225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 0 - if not found 27235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_EIR_COMPLETE_16BITS_UUID_TYPE 27245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_EIR_MORE_16BITS_UUID_TYPE 27255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_EIR_COMPLETE_32BITS_UUID_TYPE 27265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_EIR_MORE_32BITS_UUID_TYPE 27275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_EIR_COMPLETE_128BITS_UUID_TYPE 27285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTM_EIR_MORE_128BITS_UUID_TYPE 27295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 27305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 27315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 BTM_GetEirUuidList( UINT8 *p_eir, UINT8 uuid_size, UINT8 *p_num_uuid, 27325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_uuid_list, UINT8 max_num_uuid) 27335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 27345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_uuid_data; 27355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 type; 27365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 yy, xx; 27375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 *p_uuid16 = (UINT16 *)p_uuid_list; 27385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 *p_uuid32 = (UINT32 *)p_uuid_list; 27395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char buff[LEN_UUID_128 * 2 + 1]; 27405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid_data = btm_eir_get_uuid_list( p_eir, uuid_size, p_num_uuid, &type ); 27425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( p_uuid_data == NULL ) 27435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return 0x00; 27455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( *p_num_uuid > max_num_uuid ) 27485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27495344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_WARNING("BTM_GetEirUuidList number of uuid in EIR = %d, size of uuid list = %d", 27505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_num_uuid, max_num_uuid ); 27515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_num_uuid = max_num_uuid; 27525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27545344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG("BTM_GetEirUuidList type = %02X, number of uuid = %d", type, *p_num_uuid ); 27555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( uuid_size == LEN_UUID_16 ) 27575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for( yy = 0; yy < *p_num_uuid; yy++ ) 27595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT16(*(p_uuid16 + yy), p_uuid_data); 27615344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG(" 0x%04X", *(p_uuid16 + yy)); 27625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if( uuid_size == LEN_UUID_32 ) 27655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for( yy = 0; yy < *p_num_uuid; yy++ ) 27675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT32(*(p_uuid32 + yy), p_uuid_data); 27695344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG(" 0x%08X", *(p_uuid32 + yy)); 27705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if( uuid_size == LEN_UUID_128 ) 27735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for( yy = 0; yy < *p_num_uuid; yy++ ) 27755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_ARRAY16(p_uuid_list + yy * LEN_UUID_128, p_uuid_data); 27775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for( xx = 0; xx < LEN_UUID_128; xx++ ) 27785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sprintf(buff + xx*2, "%02X", *(p_uuid_list + yy * LEN_UUID_128 + xx)); 27795344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG(" 0x%s", buff); 27805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return type; 27845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 27855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 27885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 27895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_eir_get_uuid_list 27905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 27915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function searches UUID list in EIR. 27925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 27935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters p_eir - address of EIR 27945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** uuid_size - size of UUID to find 27955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_num_uuid - number of UUIDs found 27965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_uuid_list_type - EIR data type 27975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 27985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns NULL - if UUID list with uuid_size is not found 27995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** beginning of UUID list in EIR - otherwise 28005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 28025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 *btm_eir_get_uuid_list( UINT8 *p_eir, UINT8 uuid_size, 28035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_num_uuid, UINT8 *p_uuid_list_type ) 28045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 28055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_uuid_data; 28065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 complete_type, more_type; 28075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 uuid_len; 28085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch( uuid_size ) 28105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 28115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case LEN_UUID_16: 28125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project complete_type = BTM_EIR_COMPLETE_16BITS_UUID_TYPE; 28135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project more_type = BTM_EIR_MORE_16BITS_UUID_TYPE; 28145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 28155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case LEN_UUID_32: 28165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project complete_type = BTM_EIR_COMPLETE_32BITS_UUID_TYPE; 28175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project more_type = BTM_EIR_MORE_32BITS_UUID_TYPE; 28185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 28195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case LEN_UUID_128: 28205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project complete_type = BTM_EIR_COMPLETE_128BITS_UUID_TYPE; 28215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project more_type = BTM_EIR_MORE_128BITS_UUID_TYPE; 28225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 28235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 28245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_num_uuid = 0; 28255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return NULL; 28265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 28275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 28285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid_data = BTM_CheckEirData( p_eir, complete_type, &uuid_len ); 28305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_uuid_data == NULL) 28315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 28325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid_data = BTM_CheckEirData( p_eir, more_type, &uuid_len ); 28335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_uuid_list_type = more_type; 28345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 28355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 28365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 28375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_uuid_list_type = complete_type; 28385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 28395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_num_uuid = uuid_len / uuid_size; 28415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p_uuid_data; 28425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 28435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 28455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_convert_uuid_to_uuid16 28475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function converts UUID to UUID 16-bit. 28495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters p_uuid - address of UUID 28515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** uuid_size - size of UUID 28525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 0 - if UUID cannot be converted to UUID 16-bit 28545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** UUID 16-bit - otherwise 28555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 28575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT16 btm_convert_uuid_to_uuid16( UINT8 *p_uuid, UINT8 uuid_size ) 28585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 28595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project static const UINT8 base_uuid[LEN_UUID_128] = {0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, 28605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 28615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 uuid16 = 0; 28625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 uuid32; 28635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN is_base_uuid; 28645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 xx; 28655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (uuid_size) 28675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 28685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case LEN_UUID_16: 28695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT16 (uuid16, p_uuid); 28705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 28715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case LEN_UUID_32: 28725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT32 (uuid32, p_uuid); 28735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (uuid32 < 0x10000) 28745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uuid16 = (UINT16) uuid32; 28755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 28765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case LEN_UUID_128: 28775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* See if we can compress his UUID down to 16 or 32bit UUIDs */ 28785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project is_base_uuid = TRUE; 28795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (xx = 0; xx < LEN_UUID_128 - 4; xx++) 28805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 28815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_uuid[xx] != base_uuid[xx]) 28825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 28835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project is_base_uuid = FALSE; 28845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 28855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 28865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 28875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (is_base_uuid) 28885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 28895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_uuid[LEN_UUID_128 - 1] == 0) && (p_uuid[LEN_UUID_128 - 2] == 0)) 28905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 28915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid += (LEN_UUID_128 - 4); 28925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT16(uuid16, p_uuid); 28935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 28945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 28955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 28965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 28975344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_WARNING("btm_convert_uuid_to_uuid16 invalid uuid size"); 28985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 28995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 29005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return( uuid16); 29025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 29035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 29055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 29065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_set_eir_uuid 29075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 29085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function is called to store received UUID into inquiry result. 29095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 29105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters p_eir - pointer of EIR significant part 29115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_results - pointer of inquiry result 29125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 29135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 29145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 29155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 29165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_set_eir_uuid( UINT8 *p_eir, tBTM_INQ_RESULTS *p_results ) 29175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 29185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_uuid_data; 29195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 num_uuid; 29205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 uuid16; 29215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 yy; 29225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 type = BTM_EIR_MORE_16BITS_UUID_TYPE; 29235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid_data = btm_eir_get_uuid_list( p_eir, LEN_UUID_16, &num_uuid, &type ); 29255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(type == BTM_EIR_COMPLETE_16BITS_UUID_TYPE) 29275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 29285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_results->eir_complete_list = TRUE; 29295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 29305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 29315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 29325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_results->eir_complete_list = FALSE; 29335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 29345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29355344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_API("btm_set_eir_uuid eir_complete_list=0x%02X", p_results->eir_complete_list); 29365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( p_uuid_data ) 29385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 29395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for( yy = 0; yy < num_uuid; yy++ ) 29405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 29415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT16(uuid16, p_uuid_data); 29425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_AddEirService( p_results->eir_uuid, uuid16 ); 29435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 29445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 29455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid_data = btm_eir_get_uuid_list( p_eir, LEN_UUID_32, &num_uuid, &type ); 29475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( p_uuid_data ) 29485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 29495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for( yy = 0; yy < num_uuid; yy++ ) 29505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 29515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uuid16 = btm_convert_uuid_to_uuid16( p_uuid_data, LEN_UUID_32 ); 29525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid_data += LEN_UUID_32; 29535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( uuid16 ) 29545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_AddEirService( p_results->eir_uuid, uuid16 ); 29555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 29565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 29575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid_data = btm_eir_get_uuid_list( p_eir, LEN_UUID_128, &num_uuid, &type ); 29595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( p_uuid_data ) 29605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 29615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for( yy = 0; yy < num_uuid; yy++ ) 29625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 29635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uuid16 = btm_convert_uuid_to_uuid16( p_uuid_data, LEN_UUID_128 ); 29645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid_data += LEN_UUID_128; 29655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( uuid16 ) 29665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_AddEirService( p_results->eir_uuid, uuid16 ); 29675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 29685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 29695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2970