15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 1999-2012 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 interface with the HCI transport. On 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * the receive side, it routes events to the appropriate handler, e.g. 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * L2CAP, ScoMgr. On the transmit side, it manages the command 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * transmission. 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28f8027005333c88a2f097cfd70d15c3d54c7764aeChris Manton#define LOG_TAG "bt_btu_hcif" 2944802768c447ab480d4227b3a852a97d923b816dSharvil Nanavati 302b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker#include <base/bind.h> 31dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski#include <base/callback.h> 32dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski#include <base/location.h> 33f2af1c42ccb2f642b241c2261b42d0be61d45438Jack He#include <base/logging.h> 342b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker#include <base/threading/thread.h> 3549a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#include <stdio.h> 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdlib.h> 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 39911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#include "bt_common.h" 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_types.h" 4149a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#include "bt_utils.h" 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_api.h" 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h" 4449a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#include "btu.h" 45911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#include "device/include/controller.h" 4649a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#include "hci_layer.h" 4749a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#include "hcimsgs.h" 4849a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#include "l2c_int.h" 49911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#include "osi/include/log.h" 50911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#include "osi/include/osi.h" 51218f375e989a6189cd9a3227656be17bf614485bZach Johnson 52dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowskiusing tracked_objects::Location; 53dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski 54d19e0785e662e640191a075eda07acce61c2aedaMarie Janssenextern void btm_process_cancel_complete(uint8_t status, uint8_t mode); 55911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonextern void btm_ble_test_command_complete(uint8_t* p); 5622c6e505dc65ab3d624e4ccd7c48c95fe2128703Kévin PETIT 57ee96a3c60fca590d38025925c072d264e06493c4Myles Watson/******************************************************************************/ 589ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* L O C A L F U N C T I O N P R O T O T Y P E S */ 59ee96a3c60fca590d38025925c072d264e06493c4Myles Watson/******************************************************************************/ 60911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_inquiry_comp_evt(uint8_t* p); 61911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_inquiry_result_evt(uint8_t* p); 62911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_inquiry_rssi_result_evt(uint8_t* p); 63911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_extended_inquiry_result_evt(uint8_t* p); 64911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 65911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_connection_comp_evt(uint8_t* p); 66911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_connection_request_evt(uint8_t* p); 67911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_disconnection_comp_evt(uint8_t* p); 68911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_authentication_comp_evt(uint8_t* p); 69911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_rmt_name_request_comp_evt(uint8_t* p, uint16_t evt_len); 70911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_encryption_change_evt(uint8_t* p); 71911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_read_rmt_features_comp_evt(uint8_t* p); 72911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_read_rmt_ext_features_comp_evt(uint8_t* p); 73911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_read_rmt_version_comp_evt(uint8_t* p); 74911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_qos_setup_comp_evt(uint8_t* p); 75911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_command_complete_evt(BT_HDR* response, void* context); 76911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_command_status_evt(uint8_t status, BT_HDR* command, 77911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson void* context); 78911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_hardware_error_evt(uint8_t* p); 79911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_flush_occured_evt(void); 80911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_role_change_evt(uint8_t* p); 81911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_num_compl_data_pkts_evt(uint8_t* p); 82911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_mode_change_evt(uint8_t* p); 83911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_pin_code_request_evt(uint8_t* p); 84911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_link_key_request_evt(uint8_t* p); 85911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_link_key_notification_evt(uint8_t* p); 86911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_loopback_command_evt(void); 87911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_data_buf_overflow_evt(void); 88911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_max_slots_changed_evt(void); 89911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_read_clock_off_comp_evt(uint8_t* p); 90911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_conn_pkt_type_change_evt(void); 91911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_qos_violation_evt(uint8_t* p); 92911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_page_scan_mode_change_evt(void); 93911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_page_scan_rep_mode_chng_evt(void); 94911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_esco_connection_comp_evt(uint8_t* p); 95911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_esco_connection_chg_evt(uint8_t* p); 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Simple Pairing Events */ 98911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_host_support_evt(uint8_t* p); 99911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_io_cap_request_evt(uint8_t* p); 100911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_io_cap_response_evt(uint8_t* p); 101911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_user_conf_request_evt(uint8_t* p); 102911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_user_passkey_request_evt(uint8_t* p); 103911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_user_passkey_notif_evt(uint8_t* p); 104911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_keypress_notif_evt(uint8_t* p); 105911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_rem_oob_request_evt(uint8_t* p); 106911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 107911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_simple_pair_complete_evt(uint8_t* p); 108bdd2f5001ffc7c53f0e38c2a98e393b1855f9ce6Myles Watson#if L2CAP_NON_FLUSHABLE_PB_INCLUDED == TRUE 109911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_enhanced_flush_complete_evt(void); 110911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#endif 111911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 112bdd2f5001ffc7c53f0e38c2a98e393b1855f9ce6Myles Watson#if (BTM_SSR_INCLUDED == TRUE) 113911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_ssr_evt(uint8_t* p, uint16_t evt_len); 114911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#endif /* BTM_SSR_INCLUDED == TRUE */ 115911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 116911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_ll_conn_complete_evt(uint8_t* p, uint16_t evt_len); 117911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_read_remote_feat_evt(uint8_t* p); 118911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_ll_conn_param_upd_evt(uint8_t* p, uint16_t evt_len); 119911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_proc_ltk_req(uint8_t* p); 120911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_encryption_key_refresh_cmpl_evt(uint8_t* p); 121911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_data_length_change_evt(uint8_t* p, uint16_t evt_len); 1227fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if (BLE_LLT_INCLUDED == TRUE) 123911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_rc_param_req_evt(uint8_t* p); 1247fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif 125d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BLE_PRIVACY_SPT == TRUE) 126911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_proc_enhanced_conn_cmpl(uint8_t* p, uint16_t evt_len); 127444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji#endif 128444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji 1292b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panickerstatic void do_in_hci_thread(const tracked_objects::Location& from_here, 1302b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker const base::Closure& task) { 1312b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker base::MessageLoop* hci_message_loop = get_message_loop(); 1322b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker if (!hci_message_loop || !hci_message_loop->task_runner().get()) { 1332b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker LOG_ERROR(LOG_TAG, "%s: HCI message loop not running, accessed from %s", 1342b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker __func__, from_here.ToString().c_str()); 1352b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker return; 1362b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker } 1372b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker 1382b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker hci_message_loop->task_runner()->PostTask(from_here, task); 1392b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker} 1402b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 142ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 143ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_process_event 144ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 145ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called when an event is received from 146ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * the Host Controller. 147ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 148ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 149ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 150ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 151911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonvoid btu_hcif_process_event(UNUSED_ATTR uint8_t controller_id, BT_HDR* p_msg) { 152911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p = (uint8_t*)(p_msg + 1) + p_msg->offset; 153911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t hci_evt_code, hci_evt_len; 154911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t ble_sub_code; 155911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(hci_evt_code, p); 156911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(hci_evt_len, p); 157911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 158911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson switch (hci_evt_code) { 159911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_INQUIRY_COMP_EVT: 160911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_inquiry_comp_evt(p); 161911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 162911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_INQUIRY_RESULT_EVT: 163911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_inquiry_result_evt(p); 164911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 165911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_INQUIRY_RSSI_RESULT_EVT: 166911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_inquiry_rssi_result_evt(p); 167911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 168911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_EXTENDED_INQUIRY_RESULT_EVT: 169911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_extended_inquiry_result_evt(p); 170911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 171911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_CONNECTION_COMP_EVT: 172911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_connection_comp_evt(p); 173911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 174911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_CONNECTION_REQUEST_EVT: 175911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_connection_request_evt(p); 176911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 177911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_DISCONNECTION_COMP_EVT: 178911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_disconnection_comp_evt(p); 179911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 180911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_AUTHENTICATION_COMP_EVT: 181911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_authentication_comp_evt(p); 182911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 183911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_RMT_NAME_REQUEST_COMP_EVT: 184911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_rmt_name_request_comp_evt(p, hci_evt_len); 185911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 186911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_ENCRYPTION_CHANGE_EVT: 187911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_encryption_change_evt(p); 188911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 189911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_ENCRYPTION_KEY_REFRESH_COMP_EVT: 190911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_encryption_key_refresh_cmpl_evt(p); 191911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 192911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_READ_RMT_FEATURES_COMP_EVT: 193911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_read_rmt_features_comp_evt(p); 194911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 195911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_READ_RMT_EXT_FEATURES_COMP_EVT: 196911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_read_rmt_ext_features_comp_evt(p); 197911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 198911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_READ_RMT_VERSION_COMP_EVT: 199911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_read_rmt_version_comp_evt(p); 200911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 201911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_QOS_SETUP_COMP_EVT: 202911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_qos_setup_comp_evt(p); 203911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 204911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_COMMAND_COMPLETE_EVT: 205911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson LOG_ERROR(LOG_TAG, 206911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson "%s should not have received a command complete event. " 207911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson "Someone didn't go through the hci transmit_command function.", 208911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson __func__); 209911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 210911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_COMMAND_STATUS_EVT: 211911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson LOG_ERROR(LOG_TAG, 212911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson "%s should not have received a command status event. " 213911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson "Someone didn't go through the hci transmit_command function.", 214911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson __func__); 215911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 216911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_HARDWARE_ERROR_EVT: 217911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_hardware_error_evt(p); 218911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 219911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_FLUSH_OCCURED_EVT: 220911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_flush_occured_evt(); 221911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 222911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_ROLE_CHANGE_EVT: 223911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_role_change_evt(p); 224911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 225911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_NUM_COMPL_DATA_PKTS_EVT: 226911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_num_compl_data_pkts_evt(p); 227911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 228911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_MODE_CHANGE_EVT: 229911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_mode_change_evt(p); 230911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 231911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_PIN_CODE_REQUEST_EVT: 232911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_pin_code_request_evt(p); 233911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 234911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_LINK_KEY_REQUEST_EVT: 235911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_link_key_request_evt(p); 236911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 237911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_LINK_KEY_NOTIFICATION_EVT: 238911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_link_key_notification_evt(p); 239911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 240911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_LOOPBACK_COMMAND_EVT: 241911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_loopback_command_evt(); 242911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 243911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_DATA_BUF_OVERFLOW_EVT: 244911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_data_buf_overflow_evt(); 245911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 246911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_MAX_SLOTS_CHANGED_EVT: 247911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_max_slots_changed_evt(); 248911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 249911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_READ_CLOCK_OFF_COMP_EVT: 250911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_read_clock_off_comp_evt(p); 251911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 252911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_CONN_PKT_TYPE_CHANGE_EVT: 253911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_conn_pkt_type_change_evt(); 254911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 255911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_QOS_VIOLATION_EVT: 256911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_qos_violation_evt(p); 257911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 258911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_PAGE_SCAN_MODE_CHANGE_EVT: 259911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_page_scan_mode_change_evt(); 260911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 261911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_PAGE_SCAN_REP_MODE_CHNG_EVT: 262911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_page_scan_rep_mode_chng_evt(); 263911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 264911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_ESCO_CONNECTION_COMP_EVT: 265911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_esco_connection_comp_evt(p); 266911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 267911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_ESCO_CONNECTION_CHANGED_EVT: 268911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_esco_connection_chg_evt(p); 269911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_SSR_INCLUDED == TRUE) 271911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_SNIFF_SUB_RATE_EVT: 272911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_ssr_evt(p, hci_evt_len); 273911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 274911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#endif /* BTM_SSR_INCLUDED == TRUE */ 275911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_RMT_HOST_SUP_FEAT_NOTIFY_EVT: 276911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_host_support_evt(p); 277911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 278911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_IO_CAPABILITY_REQUEST_EVT: 279911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_io_cap_request_evt(p); 280911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 281911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_IO_CAPABILITY_RESPONSE_EVT: 282911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_io_cap_response_evt(p); 283911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 284911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_USER_CONFIRMATION_REQUEST_EVT: 285911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_user_conf_request_evt(p); 286911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 287911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_USER_PASSKEY_REQUEST_EVT: 288911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_user_passkey_request_evt(p); 289911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 290911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_REMOTE_OOB_DATA_REQUEST_EVT: 291911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_rem_oob_request_evt(p); 292911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 293911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_SIMPLE_PAIRING_COMPLETE_EVT: 294911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_simple_pair_complete_evt(p); 295911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 296911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_USER_PASSKEY_NOTIFY_EVT: 297911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_user_passkey_notif_evt(p); 298911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 299911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_KEYPRESS_NOTIFY_EVT: 300911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_keypress_notif_evt(p); 301911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 302d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (L2CAP_NON_FLUSHABLE_PB_INCLUDED == TRUE) 303911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_ENHANCED_FLUSH_COMPLETE_EVT: 304911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_enhanced_flush_complete_evt(); 305911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 308eafd45d08653bb1621c82a2f3cf922a43a0b1bc5Jakub Pawlowski case HCI_BLE_EVENT: { 309911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(ble_sub_code, p); 310911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 311911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson HCI_TRACE_EVENT("BLE HCI(id=%d) event = 0x%02x)", hci_evt_code, 312911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson ble_sub_code); 313911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 314eafd45d08653bb1621c82a2f3cf922a43a0b1bc5Jakub Pawlowski uint8_t ble_evt_len = hci_evt_len - 1; 315911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson switch (ble_sub_code) { 316911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_ADV_PKT_RPT_EVT: /* result of inquiry */ 3179e3005684fe9fa592630d685e9cceb71cd27dfe7Jakub Pawlowski HCI_TRACE_EVENT("HCI_BLE_ADV_PKT_RPT_EVT"); 318eafd45d08653bb1621c82a2f3cf922a43a0b1bc5Jakub Pawlowski btm_ble_process_adv_pkt(ble_evt_len, p); 319911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 320911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_CONN_COMPLETE_EVT: 321911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_ble_ll_conn_complete_evt(p, hci_evt_len); 322911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 323911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_LL_CONN_PARAM_UPD_EVT: 324911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_ble_ll_conn_param_upd_evt(p, hci_evt_len); 325911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 326911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_READ_REMOTE_FEAT_CMPL_EVT: 327911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_ble_read_remote_feat_evt(p); 328911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 329911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_LTK_REQ_EVT: /* received only at slave device */ 330911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_ble_proc_ltk_req(p); 331911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 332d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BLE_PRIVACY_SPT == TRUE) 333911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_ENHANCED_CONN_COMPLETE_EVT: 334911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_ble_proc_enhanced_conn_cmpl(p, hci_evt_len); 335911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 336444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji#endif 3377fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if (BLE_LLT_INCLUDED == TRUE) 338911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_RC_PARAM_REQ_EVT: 339911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_ble_rc_param_req_evt(p); 340911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 3417fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif 342911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_DATA_LENGTH_CHANGE_EVT: 343911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_ble_data_length_change_evt(p, hci_evt_len); 344911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 345751381c64fee63590f0888c8eac5c8a474f1e25bJakub Pawlowski 3465a475e71a01322367a2ba591aecd62781902cfc2Avish Shah case HCI_BLE_PHY_UPDATE_COMPLETE_EVT: 347eafd45d08653bb1621c82a2f3cf922a43a0b1bc5Jakub Pawlowski btm_ble_process_phy_update_pkt(ble_evt_len, p); 348eafd45d08653bb1621c82a2f3cf922a43a0b1bc5Jakub Pawlowski break; 349eafd45d08653bb1621c82a2f3cf922a43a0b1bc5Jakub Pawlowski 350801db30048049a63869587af4b89a6e5a4dabb9bJakub Pawlowski case HCI_LE_EXTENDED_ADVERTISING_REPORT_EVT: 351801db30048049a63869587af4b89a6e5a4dabb9bJakub Pawlowski btm_ble_process_ext_adv_pkt(hci_evt_len, p); 352801db30048049a63869587af4b89a6e5a4dabb9bJakub Pawlowski break; 353801db30048049a63869587af4b89a6e5a4dabb9bJakub Pawlowski 354751381c64fee63590f0888c8eac5c8a474f1e25bJakub Pawlowski case HCI_LE_ADVERTISING_SET_TERMINATED_EVT: 355751381c64fee63590f0888c8eac5c8a474f1e25bJakub Pawlowski btm_le_on_advertising_set_terminated(p, hci_evt_len); 356751381c64fee63590f0888c8eac5c8a474f1e25bJakub Pawlowski break; 357911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 358911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 359eafd45d08653bb1621c82a2f3cf922a43a0b1bc5Jakub Pawlowski } 360eafd45d08653bb1621c82a2f3cf922a43a0b1bc5Jakub Pawlowski 361911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_VENDOR_SPECIFIC_EVT: 362911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_vendor_specific_evt(p, hci_evt_len); 363911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 364911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 368ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 369ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_send_cmd 370ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 3719ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Description This function is called to send commands to the Host 3729ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Controller. 373ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 374ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 375ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 376ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 377911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonvoid btu_hcif_send_cmd(UNUSED_ATTR uint8_t controller_id, BT_HDR* p_buf) { 378911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (!p_buf) return; 379911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 380911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t opcode; 381911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* stream = p_buf->data + p_buf->offset; 382911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson void* vsc_callback = NULL; 383911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 384911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(opcode, stream); 385911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 386911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson // Eww...horrible hackery here 387911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* If command was a VSC, then extract command_complete callback */ 388911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if ((opcode & HCI_GRP_VENDOR_SPECIFIC) == HCI_GRP_VENDOR_SPECIFIC || 389911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson (opcode == HCI_BLE_RAND) || (opcode == HCI_BLE_ENCRYPT)) { 390911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson vsc_callback = *((void**)(p_buf + 1)); 391911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 392911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 393911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson hci_layer_get_interface()->transmit_command( 394911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_buf, btu_hcif_command_complete_evt, btu_hcif_command_status_evt, 395218f375e989a6189cd9a3227656be17bf614485bZach Johnson vsc_callback); 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 398dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowskiusing hci_cmd_cb = base::Callback<void(uint8_t* /* return_parameters */, 399dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski uint16_t /* return_parameters_length*/)>; 400dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski 401dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowskistruct cmd_with_cb_data { 402dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski hci_cmd_cb cb; 403dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski Location posted_from; 404dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski}; 405dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski 406dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowskivoid cmd_with_cb_data_init(cmd_with_cb_data* cb_wrapper) { 407dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski new (&cb_wrapper->cb) hci_cmd_cb; 408dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski new (&cb_wrapper->posted_from) Location; 409dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski} 410dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski 411dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowskivoid cmd_with_cb_data_cleanup(cmd_with_cb_data* cb_wrapper) { 412dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski cb_wrapper->cb.~hci_cmd_cb(); 413dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski cb_wrapper->posted_from.~Location(); 414dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski} 415d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 4162b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panickerstatic void btu_hcif_command_complete_evt_with_cb_on_task(BT_HDR* event, 4172b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker void* context) { 418911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson command_opcode_t opcode; 419911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* stream = 4202b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker event->data + event->offset + 421911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 3; // 2 to skip the event headers, 1 to skip the command credits 422911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(opcode, stream); 423d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 4242b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker cmd_with_cb_data* cb_wrapper = (cmd_with_cb_data*)context; 425dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski HCI_TRACE_DEBUG("command complete for: %s", 426dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski cb_wrapper->posted_from.ToString().c_str()); 4272b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker cb_wrapper->cb.Run(stream, event->len - 5); 428dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski cmd_with_cb_data_cleanup(cb_wrapper); 429dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski osi_free(cb_wrapper); 430d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 431911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson osi_free(event); 432d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski} 433d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 434911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_command_complete_evt_with_cb(BT_HDR* response, 435911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson void* context) { 4362b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker do_in_hci_thread(FROM_HERE, 4372b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker base::Bind(btu_hcif_command_complete_evt_with_cb_on_task, 4382b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker response, context)); 439d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski} 440d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 4412b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panickerstatic void btu_hcif_command_status_evt_with_cb_on_task(uint8_t status, 4422b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker BT_HDR* event, 4432b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker void* context) { 444911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson command_opcode_t opcode; 4452b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker uint8_t* stream = event->data + event->offset; 446911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(opcode, stream); 447d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 4482b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker CHECK(status != 0); 449dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski 450911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson // report command status error 4512b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker cmd_with_cb_data* cb_wrapper = (cmd_with_cb_data*)context; 452dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski HCI_TRACE_DEBUG("command status for: %s", 453dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski cb_wrapper->posted_from.ToString().c_str()); 4542b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker cb_wrapper->cb.Run(&status, sizeof(uint16_t)); 455dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski cmd_with_cb_data_cleanup(cb_wrapper); 456dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski osi_free(cb_wrapper); 457d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 458911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson osi_free(event); 459d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski} 460d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 461911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_command_status_evt_with_cb(uint8_t status, BT_HDR* command, 462911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson void* context) { 463911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson // Command is pending, we report only error. 464911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (!status) { 465911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson osi_free(command); 466911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return; 467911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 468d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 4692b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker do_in_hci_thread( 4702b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker FROM_HERE, base::Bind(btu_hcif_command_status_evt_with_cb_on_task, status, 4712b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker command, context)); 472d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski} 473d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 474d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski/* This function is called to send commands to the Host Controller. |cb| is 475d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski * called when command status event is called with error code, or when the 476d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski * command complete event is received. */ 477dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowskivoid btu_hcif_send_cmd_with_cb(const tracked_objects::Location& posted_from, 478dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski uint16_t opcode, uint8_t* params, 479dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski uint8_t params_len, hci_cmd_cb cb) { 480911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson BT_HDR* p = (BT_HDR*)osi_malloc(HCI_CMD_BUF_SIZE); 481911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* pp = (uint8_t*)(p + 1); 482d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 483d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski p->len = HCIC_PREAMBLE_SIZE + params_len; 484d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski p->offset = 0; 485d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 4860c683232e28ea616844bfa03d876a08df217ba13Jakub Pawlowski UINT16_TO_STREAM(pp, opcode); 4870c683232e28ea616844bfa03d876a08df217ba13Jakub Pawlowski UINT8_TO_STREAM(pp, params_len); 488d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski if (params) { 489d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski memcpy(pp, params, params_len); 490d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski } 491d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 492dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski cmd_with_cb_data* cb_wrapper = 493dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski (cmd_with_cb_data*)osi_malloc(sizeof(cmd_with_cb_data)); 494dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski 495dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski cmd_with_cb_data_init(cb_wrapper); 496dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski cb_wrapper->cb = cb; 497dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski cb_wrapper->posted_from = posted_from; 498dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski 499d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski hci_layer_get_interface()->transmit_command( 500d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski p, btu_hcif_command_complete_evt_with_cb, 501dabf8d36c6a6896953fff4a12365716d438f173aJakub Pawlowski btu_hcif_command_status_evt_with_cb, (void*)cb_wrapper); 502d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski} 503d964cf944e23470d696177fb2ddf8df3684290b8Jakub Pawlowski 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 505ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 506ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_inquiry_comp_evt 507ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 508ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_INQUIRY_COMP_EVT 509ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 510ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 511ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 512ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 513911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_inquiry_comp_evt(uint8_t* p) { 514911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 516911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p); 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 518911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Tell inquiry processing that we are done */ 519911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_process_inq_complete(status, BTM_BR_INQUIRY_MASK); 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 523ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 524ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_inquiry_result_evt 525ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 526ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_INQUIRY_RESULT_EVT 527ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 528ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 529ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 530ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 531911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_inquiry_result_evt(uint8_t* p) { 532911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Store results in the cache */ 533911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_process_inq_results(p, BTM_INQ_RESULT_STANDARD); 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 537ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 538ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_inquiry_rssi_result_evt 539ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 540ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_INQUIRY_RSSI_RESULT_EVT 541ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 542ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 543ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 544ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 545911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_inquiry_rssi_result_evt(uint8_t* p) { 546911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Store results in the cache */ 547911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_process_inq_results(p, BTM_INQ_RESULT_WITH_RSSI); 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 551ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 552ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_extended_inquiry_result_evt 553ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 554ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_EXTENDED_INQUIRY_RESULT_EVT 555ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 556ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 557ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 558ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 559911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_extended_inquiry_result_evt(uint8_t* p) { 560911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Store results in the cache */ 561911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_process_inq_results(p, BTM_INQ_RESULT_EXTENDED); 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 565ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 566ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_connection_comp_evt 567ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 568ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_CONNECTION_COMP_EVT 569ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 570ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 571ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 572ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 573911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_connection_comp_evt(uint8_t* p) { 574911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 575911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 576a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress bda; 577911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t link_type; 578911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t enc_mode; 579d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BTM_SCO_INCLUDED == TRUE) 580911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson tBTM_ESCO_DATA esco_data; 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 583911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p); 584911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 585b8a477e9ac51898b05cb328eda897d95f1ef3d02Jakub Pawlowski STREAM_TO_BDADDR(bda, p); 586911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(link_type, p); 587911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(enc_mode, p); 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 589911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson handle = HCID_GET_HANDLE(handle); 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 591911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (link_type == HCI_LINK_TYPE_ACL) { 592911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_connected(bda, handle, status, enc_mode); 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 594911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson l2c_link_hci_conn_comp(status, handle, bda); 595911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 596d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BTM_SCO_INCLUDED == TRUE) 597911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson else { 598911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson memset(&esco_data, 0, sizeof(tBTM_ESCO_DATA)); 599911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* esco_data.link_type = HCI_LINK_TYPE_SCO; already zero */ 600c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski esco_data.bd_addr = bda; 601c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski btm_sco_connected(status, &bda, handle, &esco_data); 602911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_SCO_INCLUDED */ 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 607ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 608ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_connection_request_evt 609ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 610ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_CONNECTION_REQUEST_EVT 611ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 612ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 613ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 614ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 615911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_connection_request_evt(uint8_t* p) { 616a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress bda; 617911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson DEV_CLASS dc; 618911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t link_type; 619911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 620b8a477e9ac51898b05cb328eda897d95f1ef3d02Jakub Pawlowski STREAM_TO_BDADDR(bda, p); 621911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_DEVCLASS(dc, p); 622911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(link_type, p); 623911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 624911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Pass request to security manager to check connect filters before */ 625911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* passing request to l2cap */ 626911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (link_type == HCI_LINK_TYPE_ACL) { 627911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_conn_req(bda, dc); 628911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 629d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BTM_SCO_INCLUDED == TRUE) 630911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson else { 631911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sco_conn_req(bda, dc, link_type); 632911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_SCO_INCLUDED */ 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 637ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 638ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_disconnection_comp_evt 639ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 640ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_DISCONNECTION_COMP_EVT 641ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 642ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 643ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 644ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 645911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_disconnection_comp_evt(uint8_t* p) { 646911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 647911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t reason; 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 649911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson ++p; 650911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 651911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(reason, p); 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 653911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson handle = HCID_GET_HANDLE(handle); 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 655d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BTM_SCO_INCLUDED == TRUE) 656911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* If L2CAP doesn't know about it, send it to SCO */ 657911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (!l2c_link_hci_disc_comp(handle, reason)) btm_sco_removed(handle, reason); 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 659911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson l2c_link_hci_disc_comp(handle, reason); 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_SCO_INCLUDED */ 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 662911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Notify security manager */ 663911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_disconnected(handle, reason); 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 667ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 668ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_authentication_comp_evt 669ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 670ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_AUTHENTICATION_COMP_EVT 671ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 672ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 673ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 674ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 675911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_authentication_comp_evt(uint8_t* p) { 676911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 677911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 679911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p); 680911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 682911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_auth_complete(handle, status); 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 686ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 687ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_rmt_name_request_comp_evt 688ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 689ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_RMT_NAME_REQUEST_COMP_EVT 690ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 691ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 692ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 693ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 694911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_rmt_name_request_comp_evt(uint8_t* p, uint16_t evt_len) { 695911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 696a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress bd_addr; 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 698911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p); 699b8a477e9ac51898b05cb328eda897d95f1ef3d02Jakub Pawlowski STREAM_TO_BDADDR(bd_addr, p); 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 701911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson evt_len -= (1 + BD_ADDR_LEN); 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 703c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski btm_process_remote_name(&bd_addr, p, evt_len, status); 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 705c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski btm_sec_rmt_name_request_complete(&bd_addr, p, status); 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 709ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 710ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_encryption_change_evt 711ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 712ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_ENCRYPTION_CHANGE_EVT 713ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 714ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 715ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 716ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 717911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_encryption_change_evt(uint8_t* p) { 718911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 719911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 720911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t encr_enable; 721911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 722911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p); 723911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 724911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(encr_enable, p); 725911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 726911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_acl_encrypt_change(handle, status, encr_enable); 727911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_encrypt_change(handle, status, encr_enable); 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 731ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 732ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_read_rmt_features_comp_evt 733ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 734ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_READ_RMT_FEATURES_COMP_EVT 735ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 736ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 737ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 738ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 739911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_read_rmt_features_comp_evt(uint8_t* p) { 740911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_read_remote_features_complete(p); 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 744ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 745ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_read_rmt_ext_features_comp_evt 746ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 747ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_READ_RMT_EXT_FEATURES_COMP_EVT 748ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 749ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 750ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 751ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 752911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_read_rmt_ext_features_comp_evt(uint8_t* p) { 753911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_cur = p; 754911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 755911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 756911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 757911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p_cur); 758911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 759911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (status == HCI_SUCCESS) 760911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_read_remote_ext_features_complete(p); 761911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson else { 762911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p_cur); 763911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_read_remote_ext_features_failed(status, handle); 764911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 768ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 769ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_read_rmt_version_comp_evt 770ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 771ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_READ_RMT_VERSION_COMP_EVT 772ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 773ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 774ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 775ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 776911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_read_rmt_version_comp_evt(uint8_t* p) { 777911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_read_remote_version_complete(p); 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 781ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 782ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_qos_setup_comp_evt 783ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 784ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_QOS_SETUP_COMP_EVT 785ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 786ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 787ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 788ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 789911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_qos_setup_comp_evt(uint8_t* p) { 790911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 791911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 792911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson FLOW_SPEC flow; 793911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 794911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p); 795911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 796911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(flow.qos_flags, p); 797911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(flow.service_type, p); 798911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT32(flow.token_rate, p); 799911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT32(flow.peak_bandwidth, p); 800911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT32(flow.latency, p); 801911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT32(flow.delay_variation, p); 802911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 803911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_qos_setup_complete(status, handle, &flow); 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 807ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 808ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_esco_connection_comp_evt 809ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 810ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_ESCO_CONNECTION_COMP_EVT 811ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 812ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 813ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 814ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 815911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_esco_connection_comp_evt(uint8_t* p) { 816d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BTM_SCO_INCLUDED == TRUE) 817911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson tBTM_ESCO_DATA data; 818911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 819a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress bda; 820911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 821911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 822911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p); 823911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 824b8a477e9ac51898b05cb328eda897d95f1ef3d02Jakub Pawlowski STREAM_TO_BDADDR(bda, p); 825911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 826911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(data.link_type, p); 827911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(data.tx_interval, p); 828911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(data.retrans_window, p); 829911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(data.rx_pkt_len, p); 830911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(data.tx_pkt_len, p); 831911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(data.air_mode, p); 832911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 833c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski data.bd_addr = bda; 834c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski btm_sco_connected(status, &bda, handle, &data); 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 839ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 840ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_esco_connection_chg_evt 841ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 842ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_ESCO_CONNECTION_CHANGED_EVT 843ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 844ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 845ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 846ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 847911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_esco_connection_chg_evt(uint8_t* p) { 848d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BTM_SCO_INCLUDED == TRUE) 849911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 850911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t tx_pkt_len; 851911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t rx_pkt_len; 852911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 853911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t tx_interval; 854911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t retrans_window; 855911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 856911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p); 857911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 858911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 859911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(tx_interval, p); 860911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(retrans_window, p); 861911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(rx_pkt_len, p); 862911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(tx_pkt_len, p); 863911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 864911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_esco_proc_conn_chg(status, handle, tx_interval, retrans_window, 865911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson rx_pkt_len, tx_pkt_len); 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 870ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 871ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_hdl_command_complete 872ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 873ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Handle command complete event 874ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 875ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 876ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 877ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 878911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_hdl_command_complete(uint16_t opcode, uint8_t* p, 879911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t evt_len, 880911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson void* p_cplt_cback) { 881911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson switch (opcode) { 882911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_INQUIRY_CANCEL: 883911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Tell inquiry processing that we are done */ 884911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_process_cancel_complete(HCI_SUCCESS, BTM_BR_INQUIRY_MASK); 885911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 886911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_SET_EVENT_FILTER: 887911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_event_filter_complete(p); 888911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 889911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 890911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_DELETE_STORED_LINK_KEY: 891911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_delete_stored_link_key_complete(p); 892911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 893911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 894911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_READ_LOCAL_NAME: 895911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_read_local_name_complete(p, evt_len); 896911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 897911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 898911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_GET_LINK_QUALITY: 899911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_read_link_quality_complete(p); 900911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 901911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 902911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_READ_RSSI: 903911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_read_rssi_complete(p); 904911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 905911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 9064820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov case HCI_READ_FAILED_CONTACT_COUNTER: 9074820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov btm_read_failed_contact_counter_complete(p); 9084820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov break; 9094820b2a6e69a8c13a2d57c8b7d41ba3b6d6471d2Pavlin Radoslavov 910ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov case HCI_READ_AUTOMATIC_FLUSH_TIMEOUT: 911ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov btm_read_automatic_flush_timeout_complete(p); 912ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov break; 913ecb6c72a1d06dbcbd0e5c07628b572c5f22a5f1dPavlin Radoslavov 914911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_READ_TRANSMIT_POWER_LEVEL: 915911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_read_tx_power_complete(p, false); 916911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 917911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 918911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_CREATE_CONNECTION_CANCEL: 919911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_create_conn_cancel_complete(p); 920911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 921911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 922911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_READ_LOCAL_OOB_DATA: 923911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_read_local_oob_complete(p); 924911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 925911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 926911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_READ_INQ_TX_POWER_LEVEL: 927911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_read_inq_tx_power_complete(p); 928911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 929911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 930911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* BLE Commands sComplete*/ 931911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_ADD_WHITE_LIST: 932911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_add_2_white_list_complete(*p); 933911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 934911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 935911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_CLEAR_WHITE_LIST: 936911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_clear_white_list_complete(p, evt_len); 937911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 938911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 939911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_REMOVE_WHITE_LIST: 940911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_remove_from_white_list_complete(p, evt_len); 941911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 942911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 943911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_RAND: 944911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_ENCRYPT: 945911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_rand_enc_complete(p, opcode, (tBTM_RAND_ENC_CB*)p_cplt_cback); 946911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 947911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 948911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_READ_ADV_CHNL_TX_POWER: 949911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_read_tx_power_complete(p, true); 950911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 951911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 952911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_WRITE_ADV_ENABLE: 953911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_write_adv_enable_complete(p); 954911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 955911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 956911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_CREATE_LL_CONN: 957911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_create_ll_conn_complete(*p); 958911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 959911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 960911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_TRANSMITTER_TEST: 961911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_RECEIVER_TEST: 962911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_TEST_END: 963911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_test_command_complete(p); 964911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 965444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji 966d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BLE_PRIVACY_SPT == TRUE) 967911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_ADD_DEV_RESOLVING_LIST: 968911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_add_resolving_list_entry_complete(p, evt_len); 969911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 970911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 971911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_RM_DEV_RESOLVING_LIST: 972911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_remove_resolving_list_entry_complete(p, evt_len); 973911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 974911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 975911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_CLEAR_RESOLVING_LIST: 976911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_clear_resolving_list_complete(p, evt_len); 977911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 978911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 979911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_READ_RESOLVABLE_ADDR_PEER: 980911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_read_resolving_list_entry_complete(p, evt_len); 981911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 982911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 983911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_READ_RESOLVABLE_ADDR_LOCAL: 984911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_SET_ADDR_RESOLUTION_ENABLE: 985911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_SET_RAND_PRIV_ADDR_TIMOUT: 986911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 987444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji#endif 988911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson default: 989911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if ((opcode & HCI_GRP_VENDOR_SPECIFIC) == HCI_GRP_VENDOR_SPECIFIC) 990911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_vsc_complete(p, opcode, evt_len, (tBTM_CMPL_CB*)p_cplt_cback); 991911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 992911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 996ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 997ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_command_complete_evt 998ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 999ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_COMMAND_COMPLETE_EVT 1000ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1001ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1002ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1003ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 10042b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panickerstatic void btu_hcif_command_complete_evt_on_task(BT_HDR* event, 10052b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker void* context) { 1006911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson command_opcode_t opcode; 1007911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* stream = 10082b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker event->data + event->offset + 1009911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 3; // 2 to skip the event headers, 1 to skip the command credits 1010911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(opcode, stream); 1011911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1012911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btu_hcif_hdl_command_complete( 1013911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson opcode, stream, 10142b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker event->len - 1015911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 5, // 3 for the command complete headers, 2 for the event headers 10162b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker context); 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1018911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson osi_free(event); 1019218f375e989a6189cd9a3227656be17bf614485bZach Johnson} 10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1021911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_command_complete_evt(BT_HDR* response, void* context) { 10222b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker do_in_hci_thread(FROM_HERE, base::Bind(btu_hcif_command_complete_evt_on_task, 10232b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker response, context)); 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1027ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1028ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_hdl_command_status 1029ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1030ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Handle a command status event 1031ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1032ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1033ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1034ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1035911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_hdl_command_status(uint16_t opcode, uint8_t status, 1036911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_cmd, 1037911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson void* p_vsc_status_cback) { 1038a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress bd_addr; 1039911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 1040d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BTM_SCO_INCLUDED == TRUE) 1041911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson tBTM_ESCO_DATA esco_data; 10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1044911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson switch (opcode) { 1045911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_EXIT_SNIFF_MODE: 1046911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_EXIT_PARK_MODE: 1047d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BTM_SCO_WAKE_PARKED_LINK == TRUE) 1048911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (status != HCI_SUCCESS) { 1049911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Allow SCO initiation to continue if waiting for change mode event */ 1050911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (p_cmd != NULL) { 1051911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_cmd++; /* bypass length field */ 1052911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p_cmd); 1053911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sco_chk_pend_unpark(status, handle); 1054911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 1055911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1057911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Case Falls Through */ 1058911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1059911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_HOLD_MODE: 1060911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_SNIFF_MODE: 1061911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_PARK_MODE: 1062911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_pm_proc_cmd_status(status); 1063911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 1064911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1065911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson default: 1066911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* If command failed to start, we may need to tell BTM */ 1067911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (status != HCI_SUCCESS) { 1068911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson switch (opcode) { 1069911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_INQUIRY: 1070911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Tell inquiry processing that we are done */ 1071911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_process_inq_complete(status, BTM_BR_INQUIRY_MASK); 1072911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1074911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_RMT_NAME_REQUEST: 1075911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Tell inquiry processing that we are done */ 1076911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_process_remote_name(NULL, NULL, 0, status); 1077911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1078911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_rmt_name_request_complete(NULL, NULL, status); 10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1081911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_QOS_SETUP_COMP_EVT: 1082911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Tell qos setup that we are done */ 1083911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_qos_setup_complete(status, 0, NULL); 1084911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 1085911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1086911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_SWITCH_ROLE: 1087911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Tell BTM that the command failed */ 1088911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* read bd addr out of stored command */ 1089911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (p_cmd != NULL) { 1090911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_cmd++; 1091b8a477e9ac51898b05cb328eda897d95f1ef3d02Jakub Pawlowski STREAM_TO_BDADDR(bd_addr, p_cmd); 1092c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski btm_acl_role_changed(status, &bd_addr, BTM_ROLE_UNDEFINED); 1093911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } else 1094911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_acl_role_changed(status, NULL, BTM_ROLE_UNDEFINED); 1095c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski l2c_link_role_changed(nullptr, BTM_ROLE_UNDEFINED, 1096911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson HCI_ERR_COMMAND_DISALLOWED); 1097911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 1098911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1099911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_CREATE_CONNECTION: 1100911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* read bd addr out of stored command */ 1101911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (p_cmd != NULL) { 1102911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_cmd++; 1103b8a477e9ac51898b05cb328eda897d95f1ef3d02Jakub Pawlowski STREAM_TO_BDADDR(bd_addr, p_cmd); 1104911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_connected(bd_addr, HCI_INVALID_HANDLE, status, 0); 1105911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson l2c_link_hci_conn_comp(status, HCI_INVALID_HANDLE, bd_addr); 1106911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 1107911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 1108911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1109911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_READ_RMT_EXT_FEATURES: 1110911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (p_cmd != NULL) { 1111911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_cmd++; /* skip command length */ 1112911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p_cmd); 1113911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } else 1114911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson handle = HCI_INVALID_HANDLE; 1115911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1116911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_read_remote_ext_features_failed(status, handle); 1117911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 1118911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1119911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_AUTHENTICATION_REQUESTED: 1120911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Device refused to start authentication. That should be treated 1121911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson * as authentication failure. */ 1122911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_auth_complete(BTM_INVALID_HCI_HANDLE, status); 1123911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 1124911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1125911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_SET_CONN_ENCRYPTION: 1126911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Device refused to start encryption. That should be treated as 1127911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson * encryption failure. */ 1128911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_encrypt_change(BTM_INVALID_HCI_HANDLE, status, false); 1129911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 1130911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1131911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_BLE_CREATE_LL_CONN: 1132911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_create_ll_conn_complete(status); 1133911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 113424adb37e4106bf8544c7729d34451fdf2777c4dcPriti Aghera 1135d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BTM_SCO_INCLUDED == TRUE) 1136911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_SETUP_ESCO_CONNECTION: 113757f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth case HCI_ENH_SETUP_ESCO_CONNECTION: 1138911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* read handle out of stored command */ 1139911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (p_cmd != NULL) { 1140911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_cmd++; 1141911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p_cmd); 1142911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 114357f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth /* Determine if initial connection failed or is a change 114457f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth * of setup */ 1145911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (btm_is_sco_active(handle)) 1146911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_esco_proc_conn_chg(status, handle, 0, 0, 0, 0); 1147911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson else 1148911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sco_connected(status, NULL, handle, &esco_data); 1149911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 1150911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1153911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* This is commented out until an upper layer cares about returning 1154911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson event 1155911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson #if (L2CAP_NON_FLUSHABLE_PB_INCLUDED == TRUE) 1156911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case HCI_ENHANCED_FLUSH: 1157911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 1158911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson #endif 1159911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson */ 1160911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson default: 1161911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if ((opcode & HCI_GRP_VENDOR_SPECIFIC) == HCI_GRP_VENDOR_SPECIFIC) 1162911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_vsc_complete(&status, opcode, 1, 1163911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson (tBTM_CMPL_CB*)p_vsc_status_cback); 1164911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 1165911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1167911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } else { 1168911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if ((opcode & HCI_GRP_VENDOR_SPECIFIC) == HCI_GRP_VENDOR_SPECIFIC) 1169911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_vsc_complete(&status, opcode, 1, 1170911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson (tBTM_CMPL_CB*)p_vsc_status_cback); 1171911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 1172911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1176ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1177ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_command_status_evt 1178ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1179ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_COMMAND_STATUS_EVT 1180ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1181ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1182ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1183ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 11842b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panickerstatic void btu_hcif_command_status_evt_on_task(uint8_t status, BT_HDR* event, 11852b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker void* context) { 1186911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson command_opcode_t opcode; 11872b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker uint8_t* stream = event->data + event->offset; 1188911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(opcode, stream); 1189911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 11902b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker btu_hcif_hdl_command_status(opcode, status, stream, context); 1191911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson osi_free(event); 11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1194911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_command_status_evt(uint8_t status, BT_HDR* command, 1195911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson void* context) { 11962b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker do_in_hci_thread(FROM_HERE, base::Bind(btu_hcif_command_status_evt_on_task, 11972b7e9058076f1b6afde219b4d7a36368ca97d7fcAjay Panicker status, command, context)); 11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1201ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1202ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_hardware_error_evt 1203ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1204ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_HARDWARE_ERROR_EVT 1205ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1206ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1207ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1208ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1209911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_hardware_error_evt(uint8_t* p) { 1210911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson HCI_TRACE_ERROR("Ctlr H/w error event - code:0x%x", *p); 12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1212911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* If anyone wants device status notifications, give him one. */ 1213911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_report_device_status(BTM_DEV_STATUS_DOWN); 12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1215911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Reset the controller */ 1216911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (BTM_IsDeviceUp()) BTM_DeviceReset(NULL); 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1220ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1221ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_flush_occured_evt 1222ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1223ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_FLUSH_OCCURED_EVT 1224ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1225ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1226ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1227ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1228911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_flush_occured_evt(void) {} 12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1231ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1232ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_role_change_evt 1233ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1234ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_ROLE_CHANGE_EVT 1235ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1236ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1237ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1238ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1239911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_role_change_evt(uint8_t* p) { 1240911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 1241a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress bda; 1242911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t role; 1243911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1244911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p); 1245b8a477e9ac51898b05cb328eda897d95f1ef3d02Jakub Pawlowski STREAM_TO_BDADDR(bda, p); 1246911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(role, p); 1247911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1248942648ef5a4b25508cc9ffe7073ddab5e04a9ab4Srinu Jella btm_blacklist_role_change_device(bda, status); 1249c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski l2c_link_role_changed(&bda, role, status); 1250c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski btm_acl_role_changed(status, &bda, role); 12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1254ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1255ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_num_compl_data_pkts_evt 1256ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1257ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_NUM_COMPL_DATA_PKTS_EVT 1258ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1259ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1260ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1261ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1262911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_num_compl_data_pkts_evt(uint8_t* p) { 1263911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Process for L2CAP and SCO */ 1264911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson l2c_link_process_num_completed_pkts(p); 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1266911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Send on to SCO */ 1267911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /*?? No SCO for now */ 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1271ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1272ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_mode_change_evt 1273ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1274ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_MODE_CHANGE_EVT 1275ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1276ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1277ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1278ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1279911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_mode_change_evt(uint8_t* p) { 1280911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 1281911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 1282911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t current_mode; 1283911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t interval; 1284911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1285911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p); 1286911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1287911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 1288911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(current_mode, p); 1289911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(interval, p); 1290d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BTM_SCO_WAKE_PARKED_LINK == TRUE) 1291911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sco_chk_pend_unpark(status, handle); 12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1293911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_pm_proc_mode_change(status, handle, current_mode, interval); 12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1295d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (HID_DEV_INCLUDED == TRUE && HID_DEV_PM_INCLUDED == TRUE) 1296911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson hidd_pm_proc_mode_change(status, current_mode, interval); 12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1301ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1302ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_ssr_evt 1303ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1304ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_SNIFF_SUB_RATE_EVT 1305ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1306ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1307ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1308ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1309bdd2f5001ffc7c53f0e38c2a98e393b1855f9ce6Myles Watson#if (BTM_SSR_INCLUDED == TRUE) 1310911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_ssr_evt(uint8_t* p, uint16_t evt_len) { 1311911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_pm_proc_ssr_evt(p, evt_len); 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1313911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#endif 13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1316ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1317ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_pin_code_request_evt 1318ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1319ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_PIN_CODE_REQUEST_EVT 1320ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1321ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1322ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1323ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1324911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_pin_code_request_evt(uint8_t* p) { 1325a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress bda; 13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1327b8a477e9ac51898b05cb328eda897d95f1ef3d02Jakub Pawlowski STREAM_TO_BDADDR(bda, p); 13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1329911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Tell L2CAP that there was a PIN code request, */ 1330911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* it may need to stretch timeouts */ 1331911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson l2c_pin_code_request(bda); 13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1333911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_pin_code_request(bda); 13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1337ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1338ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_link_key_request_evt 1339ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1340ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_LINK_KEY_REQUEST_EVT 1341ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1342ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1343ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1344ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1345911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_link_key_request_evt(uint8_t* p) { 1346a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress bda; 13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1348b8a477e9ac51898b05cb328eda897d95f1ef3d02Jakub Pawlowski STREAM_TO_BDADDR(bda, p); 1349911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_link_key_request(bda); 13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1353ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1354ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_link_key_notification_evt 1355ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1356ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_LINK_KEY_NOTIFICATION_EVT 1357ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1358ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1359ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1360ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1361911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_link_key_notification_evt(uint8_t* p) { 1362a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress bda; 1363911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson LINK_KEY key; 1364911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t key_type; 13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1366b8a477e9ac51898b05cb328eda897d95f1ef3d02Jakub Pawlowski STREAM_TO_BDADDR(bda, p); 1367911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_ARRAY16(key, p); 1368911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(key_type, p); 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1370911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_link_key_notification(bda, key, key_type); 13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1374ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1375ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_loopback_command_evt 1376ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1377ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_LOOPBACK_COMMAND_EVT 1378ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1379ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1380ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1381ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1382911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_loopback_command_evt(void) {} 13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1385ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1386ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_data_buf_overflow_evt 1387ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1388ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_DATA_BUF_OVERFLOW_EVT 1389ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1390ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1391ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1392ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1393911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_data_buf_overflow_evt(void) {} 13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1396ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1397ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_max_slots_changed_evt 1398ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1399ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_MAX_SLOTS_CHANGED_EVT 1400ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1401ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1402ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1403ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1404911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_max_slots_changed_evt(void) {} 14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1407ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1408ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_read_clock_off_comp_evt 1409ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1410ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_READ_CLOCK_OFF_COMP_EVT 1411ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1412ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1413ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1414ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1415911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_read_clock_off_comp_evt(uint8_t* p) { 1416911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 1417911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 1418911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t clock_offset; 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1420911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p); 14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1422911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* If failed to get clock offset just drop the result */ 1423911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (status != HCI_SUCCESS) return; 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1425911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 1426911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(clock_offset, p); 14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1428911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson handle = HCID_GET_HANDLE(handle); 14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1430911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_process_clk_off_comp_evt(handle, clock_offset); 1431911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_update_clock_offset(handle, clock_offset); 14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1435ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1436ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_conn_pkt_type_change_evt 1437ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1438ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_CONN_PKT_TYPE_CHANGE_EVT 1439ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1440ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1441ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1442ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1443911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_conn_pkt_type_change_evt(void) {} 14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1446ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1447ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_qos_violation_evt 1448ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1449ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_QOS_VIOLATION_EVT 1450ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1451ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1452ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1453ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1454911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_qos_violation_evt(uint8_t* p) { 1455911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1457911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1459911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson handle = HCID_GET_HANDLE(handle); 14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1461911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson l2c_link_hci_qos_violation(handle); 14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1465ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1466ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_page_scan_mode_change_evt 1467ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1468ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_PAGE_SCAN_MODE_CHANGE_EVT 1469ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1470ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1471ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1472ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1473911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_page_scan_mode_change_evt(void) {} 14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1476ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1477ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_page_scan_rep_mode_chng_evt 1478ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1479ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_PAGE_SCAN_REP_MODE_CHNG_EVT 1480ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1481ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1482ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1483ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1484911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_page_scan_rep_mode_chng_evt(void) {} 14855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************** 1487ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Simple Pairing Events 1488ee96a3c60fca590d38025925c072d264e06493c4Myles Watson **********************************************/ 14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1491ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1492ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_host_support_evt 1493ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1494ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_RMT_HOST_SUP_FEAT_NOTIFY_EVT 1495ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1496ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1497ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1498ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1499911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_host_support_evt(uint8_t* p) { 1500911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_rmt_host_support_feat_evt(p); 15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1504ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1505ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_io_cap_request_evt 1506ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1507ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_IO_CAPABILITY_REQUEST_EVT 1508ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1509ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1510ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1511ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1512911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_io_cap_request_evt(uint8_t* p) { 1513a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress bda; 1514b8a477e9ac51898b05cb328eda897d95f1ef3d02Jakub Pawlowski STREAM_TO_BDADDR(bda, p); 1515c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski btm_io_capabilities_req(bda); 15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1519ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1520ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_io_cap_response_evt 1521ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1522ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_IO_CAPABILITY_RESPONSE_EVT 1523ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1524ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1525ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1526ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1527911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_io_cap_response_evt(uint8_t* p) { 1528911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_io_capabilities_rsp(p); 15295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1532ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1533ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_user_conf_request_evt 1534ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1535ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_USER_CONFIRMATION_REQUEST_EVT 1536ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1537ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1538ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1539ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1540911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_user_conf_request_evt(uint8_t* p) { 1541911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_proc_sp_req_evt(BTM_SP_CFM_REQ_EVT, p); 15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1545ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1546ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_user_passkey_request_evt 1547ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1548ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_USER_PASSKEY_REQUEST_EVT 1549ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1550ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1551ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1552ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1553911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_user_passkey_request_evt(uint8_t* p) { 1554911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_proc_sp_req_evt(BTM_SP_KEY_REQ_EVT, p); 15555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1558ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1559ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_user_passkey_notif_evt 1560ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1561ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_USER_PASSKEY_NOTIFY_EVT 1562ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1563ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1564ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1565ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1566911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_user_passkey_notif_evt(uint8_t* p) { 1567911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_proc_sp_req_evt(BTM_SP_KEY_NOTIF_EVT, p); 15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1571ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1572ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_keypress_notif_evt 1573ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1574ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_KEYPRESS_NOTIFY_EVT 1575ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1576ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1577ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1578ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1579911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_keypress_notif_evt(uint8_t* p) { 1580911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_keypress_notif_evt(p); 15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1584ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1585ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_rem_oob_request_evt 1586ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1587ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_REMOTE_OOB_DATA_REQUEST_EVT 1588ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1589ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1590ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1591ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1592911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_rem_oob_request_evt(uint8_t* p) { btm_rem_oob_req(p); } 15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1595ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1596ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_simple_pair_complete_evt 1597ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1598ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_SIMPLE_PAIRING_COMPLETE_EVT 1599ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1600ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1601ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1602ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1603911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_simple_pair_complete_evt(uint8_t* p) { 1604911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_simple_pair_complete(p); 16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1608ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1609ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btu_hcif_enhanced_flush_complete_evt 1610ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1611ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_ENHANCED_FLUSH_COMPLETE_EVT 1612ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1613ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 1614ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1615ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1616d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (L2CAP_NON_FLUSHABLE_PB_INCLUDED == TRUE) 1617911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_enhanced_flush_complete_evt(void) { 1618911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* This is empty until an upper layer cares about returning event */ 16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************** 1622ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * End of Simple Pairing Events 1623ee96a3c60fca590d38025925c072d264e06493c4Myles Watson **********************************************/ 16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************** 1626ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * BLE Events 1627ee96a3c60fca590d38025925c072d264e06493c4Myles Watson **********************************************/ 1628911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_hcif_encryption_key_refresh_cmpl_evt(uint8_t* p) { 1629911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 1630911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t enc_enable = 0; 1631911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1633911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p); 1634911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1636911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (status == HCI_SUCCESS) enc_enable = 1; 1637ad839868b5aed781ba54af620e439e5c96ee019aAndre Eisenbach 1638911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_sec_encrypt_change(handle, status, enc_enable); 16395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1641911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_ll_conn_complete_evt(uint8_t* p, uint16_t evt_len) { 1642911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_conn_complete(p, evt_len, false); 16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1644d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BLE_PRIVACY_SPT == TRUE) 1645911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_proc_enhanced_conn_cmpl(uint8_t* p, uint16_t evt_len) { 1646911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_conn_complete(p, evt_len, true); 1647444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji} 1648444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji#endif 1649b5ba4fdbc433544de3806f8e82976898e444b491Jakub Pawlowski 1650b5ba4fdbc433544de3806f8e82976898e444b491Jakub Pawlowskiextern void gatt_notify_conn_update(uint16_t handle, uint16_t interval, 1651b5ba4fdbc433544de3806f8e82976898e444b491Jakub Pawlowski uint16_t latency, uint16_t timeout, 1652b5ba4fdbc433544de3806f8e82976898e444b491Jakub Pawlowski uint8_t status); 1653b5ba4fdbc433544de3806f8e82976898e444b491Jakub Pawlowski 1654911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_ll_conn_param_upd_evt(uint8_t* p, uint16_t evt_len) { 1655911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* LE connection update has completed successfully as a master. */ 1656911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* We can enable the update request if the result is a success. */ 1657911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* extract the HCI handle first */ 1658911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t status; 1659911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 1660911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t interval; 1661911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t latency; 1662911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t timeout; 1663911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1664911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT8(status, p); 1665911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 1666911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(interval, p); 1667911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(latency, p); 1668911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(timeout, p); 1669911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1670911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson l2cble_process_conn_update_evt(handle, status, interval, latency, timeout); 1671b5ba4fdbc433544de3806f8e82976898e444b491Jakub Pawlowski 1672b5ba4fdbc433544de3806f8e82976898e444b491Jakub Pawlowski gatt_notify_conn_update(handle & 0x0FFF, interval, latency, timeout, status); 16735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1675911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_read_remote_feat_evt(uint8_t* p) { 1676911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_read_remote_features_complete(p); 16775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1679911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_proc_ltk_req(uint8_t* p) { 1680911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t ediv, handle; 1681911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* pp; 16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1683911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 1684911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson pp = p + 8; 1685911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(ediv, pp); 1686911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson btm_ble_ltk_request(handle, p, ediv); 1687911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* This is empty until an upper layer cares about returning event */ 16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1689636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera 1690911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_data_length_change_evt(uint8_t* p, uint16_t evt_len) { 1691911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 1692911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t tx_data_len; 1693911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t rx_data_len; 1694636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera 1695911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (!controller_get_interface()->supports_ble_packet_extension()) { 1696911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson HCI_TRACE_WARNING("%s, request not supported", __func__); 1697911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return; 1698911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 1699636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera 1700911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 1701911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(tx_data_len, p); 1702911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p += 2; /* Skip the TxTimer */ 1703911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(rx_data_len, p); 1704636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera 1705911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson l2cble_process_data_length_change_event(handle, tx_data_len, rx_data_len); 1706636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera} 1707636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera 17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************** 1709ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * End of BLE Events Handler 1710ee96a3c60fca590d38025925c072d264e06493c4Myles Watson **********************************************/ 1711d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BLE_LLT_INCLUDED == TRUE) 1712911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void btu_ble_rc_param_req_evt(uint8_t* p) { 1713911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t handle; 1714911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t int_min, int_max, latency, timeout; 1715911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1716911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(handle, p); 1717911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(int_min, p); 1718911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(int_max, p); 1719911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(latency, p); 1720911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson STREAM_TO_UINT16(timeout, p); 1721911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 1722911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson l2cble_process_rc_param_request_evt(handle, int_min, int_max, latency, 1723911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson timeout); 17247fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta} 17257fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif /* BLE_LLT_INCLUDED */ 1726