hcicmds.c revision 899b77140675a157dba034e98527ab546bc9ac35
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 function of the HCIC unit to format and send HCI 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * commands. 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h" 2795b74f252f534ec757aab1fc08e086e02b2cfe8dSharvil Nanavati#include "btcore/include/counter.h" 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcidefs.h" 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcimsgs.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcidefs.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stddef.h> 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h" /* Included for UIPC_* macro definitions */ 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_inquiry(const LAP inq_lap, UINT8 duration, UINT8 response_cnt) 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_INQUIRY)) == NULL) 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_INQUIRY; 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_INQUIRY); 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_INQUIRY); 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project LAP_TO_STREAM (pp, inq_lap); 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, duration); 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, response_cnt); 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_inq_cancel(void) 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_INQ_CANCEL)) == NULL) 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_INQ_CANCEL; 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_INQUIRY_CANCEL); 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_INQ_CANCEL); 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_per_inq_mode (UINT16 max_period, UINT16 min_period, 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const LAP inq_lap, UINT8 duration, UINT8 response_cnt) 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_PER_INQ_MODE)) == NULL) 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PER_INQ_MODE; 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PERIODIC_INQUIRY_MODE); 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PER_INQ_MODE); 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_period); 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, min_period); 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project LAP_TO_STREAM (pp, inq_lap); 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, duration); 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, response_cnt); 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_per_inq (void) 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_EXIT_PER_INQ)) == NULL) 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_EXIT_PER_INQ; 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_EXIT_PERIODIC_INQUIRY_MODE); 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_EXIT_PER_INQ); 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_create_conn(BD_ADDR dest, UINT16 packet_types, 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 page_scan_rep_mode, UINT8 page_scan_mode, 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 clock_offset, UINT8 allow_switch) 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CREATE_CONN)) == NULL) 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BT_10A 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN; 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN - 1; 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CREATE_CONNECTION); 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BT_10A 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CREATE_CONN); 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, (HCIC_PARAM_SIZE_CREATE_CONN - 1)); 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_rep_mode); 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_mode); 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, clock_offset); 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if !defined (BT_10A) 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, allow_switch); 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_paging (p, dest); 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_disconnect (UINT16 handle, UINT8 reason) 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_DISCONNECT)) == NULL) 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_DISCONNECT; 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_DISCONNECT); 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_DISCONNECT); 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, reason); 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_SCO_INCLUDED == TRUE 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_add_SCO_conn (UINT16 handle, UINT16 packet_types) 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_ADD_SCO_CONN)) == NULL) 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ADD_SCO_CONN; 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_ADD_SCO_CONNECTION); 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ADD_SCO_CONN); 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_SCO_INCLUDED */ 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_create_conn_cancel(BD_ADDR dest) 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CREATE_CONN_CANCEL)) == NULL) 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN_CANCEL; 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CREATE_CONNECTION_CANCEL); 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CREATE_CONN_CANCEL); 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_accept_conn (BD_ADDR dest, UINT8 role) 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_ACCEPT_CONN)) == NULL) 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ACCEPT_CONN; 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_ACCEPT_CONNECTION_REQUEST); 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ACCEPT_CONN); 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, role); 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 253cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton counter_add("hci.conn.accept", 1); 254cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reject_conn (BD_ADDR dest, UINT8 reason) 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_REJECT_CONN)) == NULL) 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REJECT_CONN; 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_REJECT_CONNECTION_REQUEST); 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REJECT_CONN); 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, reason); 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 278cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton counter_add("hci.conn.reject", 1); 279cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_link_key_req_reply (BD_ADDR bd_addr, LINK_KEY link_key) 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY)) == NULL) 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY; 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_LINK_KEY_REQUEST_REPLY); 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY); 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY16_TO_STREAM (pp, link_key); 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_link_key_neg_reply (BD_ADDR bd_addr) 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY)) == NULL) 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY; 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_LINK_KEY_REQUEST_NEG_REPLY); 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY); 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_pin_code_req_reply (BD_ADDR bd_addr, UINT8 pin_code_len, 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PIN_CODE pin_code) 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY)) == NULL) 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY; 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PIN_CODE_REQUEST_REPLY); 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY); 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, pin_code_len); 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < pin_code_len; i++) 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *pp++ = *pin_code++; 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; i < PIN_CODE_LEN; i++) 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *pp++ = 0; 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_pin_code_neg_reply (BD_ADDR bd_addr) 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY)) == NULL) 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY; 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PIN_CODE_REQUEST_NEG_REPLY); 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY); 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_change_conn_type (UINT16 handle, UINT16 packet_types) 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CHANGE_CONN_TYPE)) == NULL) 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_CONN_TYPE; 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CHANGE_CONN_PACKET_TYPE); 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CHANGE_CONN_TYPE); 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_auth_request (UINT16 handle) 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_AUTHENTICATION_REQUESTED); 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_conn_encrypt (UINT16 handle, BOOLEAN enable) 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SET_CONN_ENCRYPT)) == NULL) 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_CONN_ENCRYPT; 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SET_CONN_ENCRYPTION); 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SET_CONN_ENCRYPT); 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, enable); 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_name_req (BD_ADDR bd_addr, UINT8 page_scan_rep_mode, 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 page_scan_mode, UINT16 clock_offset) 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_RMT_NAME_REQ)) == NULL) 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_NAME_REQ; 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_RMT_NAME_REQUEST); 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RMT_NAME_REQ); 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_rep_mode); 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_mode); 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, clock_offset); 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_paging (p, bd_addr); 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_name_req_cancel (BD_ADDR bd_addr) 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL)) == NULL) 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL; 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_RMT_NAME_REQUEST_CANCEL); 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL); 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_features_req (UINT16 handle) 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_FEATURES); 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_ext_features (UINT16 handle, UINT8 page_num) 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_RMT_EXT_FEATURES)) == NULL) 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_EXT_FEATURES; 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_EXT_FEATURES); 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RMT_EXT_FEATURES); 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_num); 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_ver_req (UINT16 handle) 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_VERSION_INFO); 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_rmt_clk_offset (UINT16 handle) 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_CLOCK_OFFSET); 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_lmp_handle (UINT16 handle) 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_LMP_HANDLE); 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_setup_esco_conn (UINT16 handle, UINT32 tx_bw, 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 rx_bw, UINT16 max_latency, UINT16 voice, 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 retrans_effort, UINT16 packet_types) 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SETUP_ESCO)) == NULL) 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SETUP_ESCO; 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SETUP_ESCO_CONNECTION); 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SETUP_ESCO); 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, tx_bw); 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, rx_bw); 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_latency); 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, voice); 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, retrans_effort); 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_accept_esco_conn (BD_ADDR bd_addr, UINT32 tx_bw, 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 rx_bw, UINT16 max_latency, 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 content_fmt, UINT8 retrans_effort, 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 packet_types) 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_ACCEPT_ESCO)) == NULL) 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ACCEPT_ESCO; 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_ACCEPT_ESCO_CONNECTION); 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ACCEPT_ESCO); 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, tx_bw); 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, rx_bw); 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_latency); 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, content_fmt); 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, retrans_effort); 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reject_esco_conn (BD_ADDR bd_addr, UINT8 reason) 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_REJECT_ESCO)) == NULL) 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REJECT_ESCO; 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_REJECT_ESCO_CONNECTION); 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REJECT_ESCO); 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, reason); 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_hold_mode (UINT16 handle, UINT16 max_hold_period, 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 min_hold_period) 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_HOLD_MODE)) == NULL) 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_HOLD_MODE; 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_HOLD_MODE); 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_HOLD_MODE); 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_hold_period); 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, min_hold_period); 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_sniff_mode (UINT16 handle, UINT16 max_sniff_period, 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 min_sniff_period, UINT16 sniff_attempt, 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 sniff_timeout) 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SNIFF_MODE)) == NULL) 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SNIFF_MODE; 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SNIFF_MODE); 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SNIFF_MODE); 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_sniff_period); 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, min_sniff_period); 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, sniff_attempt); 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, sniff_timeout); 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_sniff_mode (UINT16 handle) 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_EXIT_SNIFF_MODE); 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_park_mode (UINT16 handle, UINT16 beacon_max_interval, 7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 beacon_min_interval) 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_PARK_MODE)) == NULL) 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PARK_MODE; 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PARK_MODE); 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PARK_MODE); 7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, beacon_max_interval); 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, beacon_min_interval); 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_park_mode (UINT16 handle) 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_EXIT_PARK_MODE); 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_qos_setup (UINT16 handle, UINT8 flags, UINT8 service_type, 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 token_rate, UINT32 peak, UINT32 latency, 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 delay_var) 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_QOS_SETUP)) == NULL) 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_QOS_SETUP; 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_QOS_SETUP); 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_QOS_SETUP); 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, flags); 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, service_type); 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, token_rate); 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, peak); 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, latency); 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, delay_var); 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_switch_role (BD_ADDR bd_addr, UINT8 role) 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SWITCH_ROLE)) == NULL) 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SWITCH_ROLE; 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SWITCH_ROLE); 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SWITCH_ROLE); 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, role); 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_policy_set (UINT16 handle, UINT16 settings) 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_POLICY_SET)) == NULL) 8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_POLICY_SET; 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_POLICY_SETTINGS); 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_POLICY_SET); 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, settings); 8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_def_policy_set (UINT16 settings) 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET)) == NULL) 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET; 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_DEF_POLICY_SETTINGS); 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET); 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, settings); 9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_event_filter (UINT8 filt_type, UINT8 filt_cond_type, 9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *filt_cond, UINT8 filt_cond_len) 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Use buffer large enough to hold all sizes in this command */ 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(2 + filt_cond_len)) == NULL) 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SET_EVENT_FILTER); 9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (filt_type) 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = (UINT16)(HCIC_PREAMBLE_SIZE + 2 + filt_cond_len); 9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, (UINT8)(2 + filt_cond_len)); 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, filt_type); 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, filt_cond_type); 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (filt_cond_type == HCI_FILTER_COND_DEVICE_CLASS) 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project DEVCLASS_TO_STREAM (pp, filt_cond); 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond += DEV_CLASS_LEN; 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project DEVCLASS_TO_STREAM (pp, filt_cond); 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond += DEV_CLASS_LEN; 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond_len -= (2 * DEV_CLASS_LEN); 9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (filt_cond_type == HCI_FILTER_COND_BD_ADDR) 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, filt_cond); 9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond += BD_ADDR_LEN; 9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond_len -= BD_ADDR_LEN; 9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (filt_cond_len) 9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM (pp, filt_cond, filt_cond_len); 9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = (UINT16)(HCIC_PREAMBLE_SIZE + 1); 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, 1); 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, filt_type); 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_pin_type (UINT8 type) 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL) 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_PIN_TYPE); 9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, type); 9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_delete_stored_key (BD_ADDR bd_addr, BOOLEAN delete_all_flag) 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_DELETE_STORED_KEY)) == NULL) 9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_DELETE_STORED_KEY; 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_DELETE_STORED_LINK_KEY); 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_DELETE_STORED_KEY); 10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, delete_all_flag); 10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_change_name (BD_NAME name) 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 len = strlen ((char *)name) + 1; 10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CHANGE_NAME)) == NULL) 10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 1023e14a66a5fd4f05817dc7716ca9087678dd220edaSharvil Nanavati memset(pp, 0, HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_NAME); 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_NAME; 10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CHANGE_LOCAL_NAME); 10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CHANGE_NAME); 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1031ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (len > HCIC_PARAM_SIZE_CHANGE_NAME) 1032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta len = HCIC_PARAM_SIZE_CHANGE_NAME; 1033ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM (pp, name, len); 10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_name (void) 10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL) 10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD; 10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_LOCAL_NAME); 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_READ_CMD); 10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1060a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_page_tout (UINT16 timeout) 10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM2)) == NULL) 10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM2; 10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1073a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_PAGE_TOUT); 10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM2); 10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1076a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, timeout); 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1078a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1082a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_scan_enable (UINT8 flag) 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1087a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL) 10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1092a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1095a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_SCAN_ENABLE); 1096a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 1097a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1098a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, flag); 10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1104a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_pagescan_cfg(UINT16 interval, UINT16 window) 11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1109a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG)) == NULL) 11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1114a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG; 11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1117a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_CFG); 1118a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG); 11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1120a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, interval); 1121a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, window); 11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1127a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inqscan_cfg(UINT16 interval, UINT16 window) 11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1132a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG)) == NULL) 11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1137a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG; 11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1140a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_INQUIRYSCAN_CFG); 1141a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG); 1142a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1143a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, interval); 1144a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, window); 11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1150a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_auth_enable (UINT8 flag) 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL) 11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1163a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_AUTHENTICATION_ENABLE); 11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1166a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, flag); 11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1172a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_dev_class(DEV_CLASS dev_class) 11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1177a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM3)) == NULL) 11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1182a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM3; 11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1185a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_CLASS_OF_DEVICE); 1186a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM3); 1187a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1188a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson DEVCLASS_TO_STREAM (pp, dev_class); 11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1194a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_voice_settings(UINT16 flags) 11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1199a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM2)) == NULL) 12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1204a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM2; 12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1207a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_VOICE_SETTINGS); 1208a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM2); 12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1210a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, flags); 12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1216a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_auto_flush_tout (UINT16 handle, UINT16 tout) 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1221a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT)) == NULL) 12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1226a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT; 12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1229a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_AUTO_FLUSH_TOUT); 1230a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT); 1231a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1232a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1233a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, tout); 12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1239a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_tx_power (UINT16 handle, UINT8 type) 12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1244a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_TX_POWER)) == NULL) 12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1249a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_TX_POWER; 12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1252a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_TRANSMIT_POWER_LEVEL); 1253a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_READ_TX_POWER); 12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1255a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1256a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, type); 12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1262a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_host_num_xmitted_pkts (UINT8 num_handles, UINT16 *handle, 1263a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16 *num_pkts) 12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 1267a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson int j; 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1269a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(1 + (num_handles * 4))) == NULL) 12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1274a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + 1 + (num_handles * 4); 12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1277a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_HOST_NUM_PACKETS_DONE); 1278a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, p->len - HCIC_PREAMBLE_SIZE); 1279a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1280a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, num_handles); 1281a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1282a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson for (j = 0; j < num_handles; j++) 1283a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson { 1284a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle[j]); 1285a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, num_pkts[j]); 1286a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1292a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_link_super_tout (UINT8 local_controller_id, UINT16 handle, UINT16 timeout) 12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1297a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT)) == NULL) 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1302a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT; 13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1305a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_LINK_SUPER_TOUT); 1306a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT); 13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1308a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1309a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, timeout); 13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1311a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (local_controller_id, p); 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1315a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_cur_iac_lap (UINT8 num_cur_iac, LAP * const iac_lap) 13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 1319a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson int i; 13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1321a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(1 + (LAP_LEN * num_cur_iac))) == NULL) 13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1326a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + 1 + (LAP_LEN * num_cur_iac); 13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1329a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_CURRENT_IAC_LAP); 1330a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, p->len - HCIC_PREAMBLE_SIZE); 13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1332a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, num_cur_iac); 13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1334a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson for (i = 0; i < num_cur_iac; i++) 1335a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson LAP_TO_STREAM (pp, iac_lap[i]); 13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1341a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/****************************************** 1342a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson** Lisbon Features 1343a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson*******************************************/ 1344a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#if BTM_SSR_INCLUDED == TRUE 13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1346a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_sniff_sub_rate(UINT16 handle, UINT16 max_lat, 1347a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16 min_remote_lat, UINT16 min_local_lat) 13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1352a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SNIFF_SUB_RATE)) == NULL) 13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1357a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SNIFF_SUB_RATE; 13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1360a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_SNIFF_SUB_RATE); 1361a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SNIFF_SUB_RATE); 13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1363a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1364a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, max_lat); 1365a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, min_remote_lat); 1366a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, min_local_lat); 13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1371a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#endif /* BTM_SSR_INCLUDED */ 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1373a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/**** Extended Inquiry Response Commands ****/ 1374a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnsonvoid btsnd_hcic_write_ext_inquiry_response (void *buffer, UINT8 fec_req) 13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1376a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BT_HDR *p = (BT_HDR *)buffer; 1377a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8 *pp = (UINT8 *)(p + 1); 13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1379a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_EXT_INQ_RESP; 13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1382a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_EXT_INQ_RESPONSE); 1383a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_EXT_INQ_RESP); 13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1385a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, fec_req); 13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1390a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_io_cap_req_reply (BD_ADDR bd_addr, UINT8 capability, 1391a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8 oob_present, UINT8 auth_req) 13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1396a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_IO_CAP_RESP)) == NULL) 13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1401a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_IO_CAP_RESP; 14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1404899b77140675a157dba034e98527ab546bc9ac35Mudumba Ananth UINT16_TO_STREAM (pp, HCI_IO_CAPABILITY_REQUEST_REPLY); 1405a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_IO_CAP_RESP); 1406a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1407a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1408a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, capability); 1409a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, oob_present); 1410a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, auth_req); 14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1416a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_io_cap_req_neg_reply (BD_ADDR bd_addr, UINT8 err_code) 14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1421a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY)) == NULL) 14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1426a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY; 14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1429a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_IO_CAP_REQ_NEG_REPLY); 1430a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY); 14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1432a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1433a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, err_code); 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1435a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1439a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_local_oob_data (void) 14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1444a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_R_LOCAL_OOB)) == NULL) 14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1449a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_LOCAL_OOB; 14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1452a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_LOCAL_OOB_DATA); 1453a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_R_LOCAL_OOB); 14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1455a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1459a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_conf_reply (BD_ADDR bd_addr, BOOLEAN is_yes) 14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1464a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_UCONF_REPLY)) == NULL) 14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 14685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1469a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_UCONF_REPLY; 14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1472a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if (!is_yes) 1473a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson { 1474a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson /* Negative reply */ 1475a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_CONF_VALUE_NEG_REPLY); 1476a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 1477a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson else 1478a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson { 1479a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson /* Confirmation */ 1480a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_CONF_REQUEST_REPLY); 1481a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1483a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_UCONF_REPLY); 1484a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1485a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1491a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_passkey_reply (BD_ADDR bd_addr, UINT32 value) 14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1496a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_U_PKEY_REPLY)) == NULL) 14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1501a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_U_PKEY_REPLY; 15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1504a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_PASSKEY_REQ_REPLY); 1505a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_U_PKEY_REPLY); 15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1507a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1508a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT32_TO_STREAM (pp, value); 15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1514a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_passkey_neg_reply (BD_ADDR bd_addr) 15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1519a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY)) == NULL) 15205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1524a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY; 15255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1527a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_PASSKEY_REQ_NEG_REPLY); 1528a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY); 1529a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1530a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 15335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1536a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_rem_oob_reply (BD_ADDR bd_addr, UINT8 *p_c, UINT8 *p_r) 15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1541a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_REM_OOB_REPLY)) == NULL) 15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1546a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REM_OOB_REPLY; 15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1549a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_REM_OOB_DATA_REQ_REPLY); 1550a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REM_OOB_REPLY); 15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1552a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1553a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson ARRAY16_TO_STREAM (pp, p_c); 1554a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson ARRAY16_TO_STREAM (pp, p_r); 15555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 15585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1560a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_rem_oob_neg_reply (BD_ADDR bd_addr) 15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1565a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY)) == NULL) 15665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 15675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1570a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY; 15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1573a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_REM_OOB_DATA_REQ_NEG_REPLY); 1574a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY); 1575a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1576a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1582a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1583a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_inq_tx_power (void) 15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1588a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_R_TX_POWER)) == NULL) 15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1593a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_TX_POWER; 15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1596a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_INQ_TX_POWER_LEVEL); 1597a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_R_TX_POWER); 15985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1603a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_send_keypress_notif (BD_ADDR bd_addr, UINT8 notif) 16045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 1606a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8 *pp; 16075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1608a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF)) == NULL) 16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 16105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1613a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF; 16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1616a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_SEND_KEYPRESS_NOTIF); 1617a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF); 16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1619a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1620a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, notif); 16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 16235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1626a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/**** end of Simple Pairing Commands ****/ 1627a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1628a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#if L2CAP_NON_FLUSHABLE_PB_INCLUDED == TRUE 1629a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_enhanced_flush (UINT16 handle, UINT8 packet_type) 16305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 16335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1634a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_ENHANCED_FLUSH)) == NULL) 16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 16385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1639a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ENHANCED_FLUSH; 16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1641a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_ENHANCED_FLUSH); 1642a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ENHANCED_FLUSH); 16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1644a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1645a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, packet_type); 16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 16495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1650a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#endif 1651a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1652a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/************************* 1653a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson** End of Lisbon Commands 1654a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson**************************/ 16555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1656a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_get_link_quality (UINT16 handle) 16575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 16595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 16675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 16685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1669a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_GET_LINK_QUALITY); 16705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 16715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 16735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 16765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1678a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_rssi (UINT16 handle) 16795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 16815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1683a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 16845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1688a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1691a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_RSSI); 1692a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1700a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_enable_test_mode (void) 17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL) 17065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 17075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD; 17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1713a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_ENABLE_DEV_UNDER_TEST_MODE); 17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_READ_CMD); 17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1720a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inqscan_type (UINT8 type) 17215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 17245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL) 17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 17315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 17325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1733a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_INQSCAN_TYPE); 17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1736a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, type); 17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1742a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inquiry_mode (UINT8 mode) 17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 17455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1747a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL) 17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 17515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1752a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 17535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 17545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1755a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_INQUIRY_MODE); 1756a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 1757a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1758a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, mode); 17595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 17615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_pagescan_type (UINT8 type) 17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 17675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 17685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL) 17705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 17715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 17735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 17755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 17765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_TYPE); 17785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 17795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, type); 17815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 17835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 17845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Must have room to store BT_HDR + max VSC length + callback pointer */ 17878fc656cc6aef76574f55c334f0dd71d62b23e896Zach Johnson#if (HCI_CMD_POOL_BUF_SIZE < 268) 17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#error "HCI_CMD_POOL_BUF_SIZE must be larger than 268" 17895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 17905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btsnd_hcic_vendor_spec_cmd (void *buffer, UINT16 opcode, UINT8 len, 17925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_data, void *p_cmd_cplt_cback) 17935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p = (BT_HDR *)buffer; 17955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp = (UINT8 *)(p + 1); 17965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + len; 17985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = sizeof(void *); 17995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *((void **)pp) = p_cmd_cplt_cback; /* Store command complete callback in buffer */ 18015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp += sizeof(void *); /* Skip over callback pointer */ 18025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_GRP_VENDOR_SPECIFIC | opcode); 18045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, len); 18055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM (pp, p_data, len); 18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 18085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1809