hcicmds.c revision c980130963c4528655c27b7caa2d030181020fc1
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" 28a11035b5ecbc6cbd9da5bd707683504c47e2744ePavlin Radoslavov#include "bt_common.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{ 41c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 42c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_INQUIRY; 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_INQUIRY); 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_INQUIRY); 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project LAP_TO_STREAM (pp, inq_lap); 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, duration); 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, response_cnt); 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_inq_cancel(void) 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 60c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 61c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_INQ_CANCEL; 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_INQUIRY_CANCEL); 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_INQ_CANCEL); 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_per_inq_mode (UINT16 max_period, UINT16 min_period, 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const LAP inq_lap, UINT8 duration, UINT8 response_cnt) 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 75c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 76c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PER_INQ_MODE; 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PERIODIC_INQUIRY_MODE); 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PER_INQ_MODE); 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_period); 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, min_period); 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project LAP_TO_STREAM (pp, inq_lap); 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, duration); 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, response_cnt); 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_per_inq (void) 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 96c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 97c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_EXIT_PER_INQ; 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_EXIT_PERIODIC_INQUIRY_MODE); 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_EXIT_PER_INQ); 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_create_conn(BD_ADDR dest, UINT16 packet_types, 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 page_scan_rep_mode, UINT8 page_scan_mode, 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 clock_offset, UINT8 allow_switch) 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 113c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 114c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BT_10A 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN; 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN - 1; 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CREATE_CONNECTION); 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BT_10A 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CREATE_CONN); 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, (HCIC_PARAM_SIZE_CREATE_CONN - 1)); 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_rep_mode); 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_mode); 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, clock_offset); 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if !defined (BT_10A) 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, allow_switch); 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_paging (p, dest); 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_disconnect (UINT16 handle, UINT8 reason) 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 143c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 144c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_DISCONNECT; 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_DISCONNECT); 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_DISCONNECT); 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, reason); 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_SCO_INCLUDED == TRUE 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_add_SCO_conn (UINT16 handle, UINT16 packet_types) 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 161c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 162c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ADD_SCO_CONN; 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_ADD_SCO_CONNECTION); 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ADD_SCO_CONN); 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_SCO_INCLUDED */ 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_create_conn_cancel(BD_ADDR dest) 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 180c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 181c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN_CANCEL; 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CREATE_CONNECTION_CANCEL); 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CREATE_CONN_CANCEL); 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_accept_conn (BD_ADDR dest, UINT8 role) 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 197c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 198c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ACCEPT_CONN; 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_ACCEPT_CONNECTION_REQUEST); 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ACCEPT_CONN); 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, role); 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 208cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton counter_add("hci.conn.accept", 1); 209cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reject_conn (BD_ADDR dest, UINT8 reason) 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 216c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 217c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REJECT_CONN; 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_REJECT_CONNECTION_REQUEST); 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REJECT_CONN); 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, reason); 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 228cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton counter_add("hci.conn.reject", 1); 229cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_link_key_req_reply (BD_ADDR bd_addr, LINK_KEY link_key) 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 236c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 237c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY; 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_LINK_KEY_REQUEST_REPLY); 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY); 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY16_TO_STREAM (pp, link_key); 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_link_key_neg_reply (BD_ADDR bd_addr) 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 254c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 255c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY; 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_LINK_KEY_REQUEST_NEG_REPLY); 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY); 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_pin_code_req_reply (BD_ADDR bd_addr, UINT8 pin_code_len, 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PIN_CODE pin_code) 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 272c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 273c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 274c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov int i; 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY; 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PIN_CODE_REQUEST_REPLY); 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY); 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, pin_code_len); 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < pin_code_len; i++) 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *pp++ = *pin_code++; 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; i < PIN_CODE_LEN; i++) 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *pp++ = 0; 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_pin_code_neg_reply (BD_ADDR bd_addr) 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 298c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 299c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY; 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PIN_CODE_REQUEST_NEG_REPLY); 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY); 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_change_conn_type (UINT16 handle, UINT16 packet_types) 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 315c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 316c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_CONN_TYPE; 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CHANGE_CONN_PACKET_TYPE); 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CHANGE_CONN_TYPE); 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_auth_request (UINT16 handle) 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 333c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 334c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_AUTHENTICATION_REQUESTED); 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_conn_encrypt (UINT16 handle, BOOLEAN enable) 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 350c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 351c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_CONN_ENCRYPT; 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SET_CONN_ENCRYPTION); 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SET_CONN_ENCRYPT); 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, enable); 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_name_req (BD_ADDR bd_addr, UINT8 page_scan_rep_mode, 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 page_scan_mode, UINT16 clock_offset) 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 369c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 370c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_NAME_REQ; 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_RMT_NAME_REQUEST); 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RMT_NAME_REQ); 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_rep_mode); 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_mode); 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, clock_offset); 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_paging (p, bd_addr); 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_name_req_cancel (BD_ADDR bd_addr) 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 389c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 390c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL; 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_RMT_NAME_REQUEST_CANCEL); 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL); 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_features_req (UINT16 handle) 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 406c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 407c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_FEATURES); 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_ext_features (UINT16 handle, UINT8 page_num) 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 423c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 424c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_EXT_FEATURES; 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_EXT_FEATURES); 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RMT_EXT_FEATURES); 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_num); 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_ver_req (UINT16 handle) 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 441c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 442c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_VERSION_INFO); 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_rmt_clk_offset (UINT16 handle) 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 458c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 459c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_CLOCK_OFFSET); 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_lmp_handle (UINT16 handle) 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 475c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 476c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_LMP_HANDLE); 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_setup_esco_conn (UINT16 handle, UINT32 tx_bw, 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 rx_bw, UINT16 max_latency, UINT16 voice, 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 retrans_effort, UINT16 packet_types) 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 494c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 495c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SETUP_ESCO; 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SETUP_ESCO_CONNECTION); 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SETUP_ESCO); 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, tx_bw); 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, rx_bw); 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_latency); 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, voice); 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, retrans_effort); 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_accept_esco_conn (BD_ADDR bd_addr, UINT32 tx_bw, 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 rx_bw, UINT16 max_latency, 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 content_fmt, UINT8 retrans_effort, 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 packet_types) 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 520c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 521c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ACCEPT_ESCO; 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_ACCEPT_ESCO_CONNECTION); 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ACCEPT_ESCO); 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, tx_bw); 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, rx_bw); 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_latency); 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, content_fmt); 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, retrans_effort); 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reject_esco_conn (BD_ADDR bd_addr, UINT8 reason) 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 543c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 544c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REJECT_ESCO; 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_REJECT_ESCO_CONNECTION); 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REJECT_ESCO); 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, reason); 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_hold_mode (UINT16 handle, UINT16 max_hold_period, 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 min_hold_period) 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 562c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 563c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_HOLD_MODE; 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_HOLD_MODE); 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_HOLD_MODE); 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_hold_period); 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, min_hold_period); 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_sniff_mode (UINT16 handle, UINT16 max_sniff_period, 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 min_sniff_period, UINT16 sniff_attempt, 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 sniff_timeout) 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 583c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 584c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SNIFF_MODE; 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SNIFF_MODE); 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SNIFF_MODE); 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_sniff_period); 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, min_sniff_period); 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, sniff_attempt); 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, sniff_timeout); 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_sniff_mode (UINT16 handle) 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 604c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 605c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_EXIT_SNIFF_MODE); 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_park_mode (UINT16 handle, UINT16 beacon_max_interval, 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 beacon_min_interval) 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 622c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 623c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PARK_MODE; 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PARK_MODE); 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PARK_MODE); 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, beacon_max_interval); 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, beacon_min_interval); 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_park_mode (UINT16 handle) 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 641c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 642c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_EXIT_PARK_MODE); 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_qos_setup (UINT16 handle, UINT8 flags, UINT8 service_type, 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 token_rate, UINT32 peak, UINT32 latency, 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 delay_var) 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 660c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 661c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_QOS_SETUP; 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_QOS_SETUP); 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_QOS_SETUP); 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, flags); 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, service_type); 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, token_rate); 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, peak); 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, latency); 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, delay_var); 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_switch_role (BD_ADDR bd_addr, UINT8 role) 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 683c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 684c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SWITCH_ROLE; 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SWITCH_ROLE); 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SWITCH_ROLE); 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, role); 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_policy_set (UINT16 handle, UINT16 settings) 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 701c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 702c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_POLICY_SET; 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_POLICY_SETTINGS); 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_POLICY_SET); 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, settings); 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_def_policy_set (UINT16 settings) 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 718c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 719c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET; 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_DEF_POLICY_SETTINGS); 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET); 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, settings); 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_event_filter (UINT8 filt_type, UINT8 filt_cond_type, 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *filt_cond, UINT8 filt_cond_len) 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 735c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 736c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SET_EVENT_FILTER); 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (filt_type) 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = (UINT16)(HCIC_PREAMBLE_SIZE + 2 + filt_cond_len); 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, (UINT8)(2 + filt_cond_len)); 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, filt_type); 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, filt_cond_type); 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (filt_cond_type == HCI_FILTER_COND_DEVICE_CLASS) 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project DEVCLASS_TO_STREAM (pp, filt_cond); 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond += DEV_CLASS_LEN; 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project DEVCLASS_TO_STREAM (pp, filt_cond); 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond += DEV_CLASS_LEN; 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond_len -= (2 * DEV_CLASS_LEN); 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (filt_cond_type == HCI_FILTER_COND_BD_ADDR) 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, filt_cond); 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond += BD_ADDR_LEN; 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond_len -= BD_ADDR_LEN; 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (filt_cond_len) 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM (pp, filt_cond, filt_cond_len); 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = (UINT16)(HCIC_PREAMBLE_SIZE + 1); 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, 1); 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, filt_type); 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_pin_type (UINT8 type) 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 784c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 785c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_PIN_TYPE); 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, type); 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_delete_stored_key (BD_ADDR bd_addr, BOOLEAN delete_all_flag) 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 801c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 802c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_DELETE_STORED_KEY; 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_DELETE_STORED_LINK_KEY); 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_DELETE_STORED_KEY); 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, delete_all_flag); 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_change_name (BD_NAME name) 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 819c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 820c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 821c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT16 len = strlen((char *)name) + 1; 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 823e14a66a5fd4f05817dc7716ca9087678dd220edaSharvil Nanavati memset(pp, 0, HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_NAME); 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_NAME; 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CHANGE_LOCAL_NAME); 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CHANGE_NAME); 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 831ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (len > HCIC_PARAM_SIZE_CHANGE_NAME) 832ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta len = HCIC_PARAM_SIZE_CHANGE_NAME; 833ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM (pp, name, len); 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_name (void) 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 842c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 843c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD; 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_LOCAL_NAME); 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_READ_CMD); 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 855a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_page_tout (UINT16 timeout) 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 857c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 858c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM2; 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 863a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_PAGE_TOUT); 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM2); 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 866a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, timeout); 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 868a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 872a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_scan_enable (UINT8 flag) 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 874c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 875c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 877a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 880a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_SCAN_ENABLE); 881a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 882a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 883a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, flag); 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 889a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_pagescan_cfg(UINT16 interval, UINT16 window) 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 891c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 892c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 894a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG; 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 897a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_CFG); 898a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG); 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 900a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, interval); 901a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, window); 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 907a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inqscan_cfg(UINT16 interval, UINT16 window) 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 909c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 910c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 912a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG; 9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 915a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_INQUIRYSCAN_CFG); 916a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG); 917a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 918a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, interval); 919a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, window); 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 925a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_auth_enable (UINT8 flag) 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 927c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 928c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 933a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_AUTHENTICATION_ENABLE); 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 936a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, flag); 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 942a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_dev_class(DEV_CLASS dev_class) 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 944c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 945c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 947a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM3; 9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 950a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_CLASS_OF_DEVICE); 951a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM3); 952a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 953a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson DEVCLASS_TO_STREAM (pp, dev_class); 9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 959a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_voice_settings(UINT16 flags) 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 961c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 962c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 964a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM2; 9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 967a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_VOICE_SETTINGS); 968a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM2); 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 970a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, flags); 9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 976a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_auto_flush_tout (UINT16 handle, UINT16 tout) 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 978c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 979c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 981a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT; 9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 984a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_AUTO_FLUSH_TOUT); 985a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT); 986a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 987a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 988a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, tout); 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 994a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_tx_power (UINT16 handle, UINT8 type) 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 996c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 997c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 999a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_TX_POWER; 10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1002a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_TRANSMIT_POWER_LEVEL); 1003a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_READ_TX_POWER); 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1005a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1006a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, type); 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1012a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_host_num_xmitted_pkts (UINT8 num_handles, UINT16 *handle, 1013a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16 *num_pkts) 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1015c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1016c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1018a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + 1 + (num_handles * 4); 10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1021a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_HOST_NUM_PACKETS_DONE); 1022a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, p->len - HCIC_PREAMBLE_SIZE); 1023a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1024a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, num_handles); 1025a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1026c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov for (int i = 0; i < num_handles; i++) { 1027c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT16_TO_STREAM(pp, handle[i]); 1028c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT16_TO_STREAM(pp, num_pkts[i]); 1029a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1035a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_link_super_tout (UINT8 local_controller_id, UINT16 handle, UINT16 timeout) 10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1037c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1038c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1040a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT; 10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1043a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_LINK_SUPER_TOUT); 1044a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT); 10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1046a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1047a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, timeout); 10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1049a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (local_controller_id, p); 10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1053a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_cur_iac_lap (UINT8 num_cur_iac, LAP * const iac_lap) 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1055c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1056c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1058a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + 1 + (LAP_LEN * num_cur_iac); 10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1061a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_CURRENT_IAC_LAP); 1062a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, p->len - HCIC_PREAMBLE_SIZE); 10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1064a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, num_cur_iac); 10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1066c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov for (int i = 0; i < num_cur_iac; i++) 1067a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson LAP_TO_STREAM (pp, iac_lap[i]); 10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1073a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/****************************************** 1074a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson** Lisbon Features 1075a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson*******************************************/ 1076a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#if BTM_SSR_INCLUDED == TRUE 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1078a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_sniff_sub_rate(UINT16 handle, UINT16 max_lat, 1079a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16 min_remote_lat, UINT16 min_local_lat) 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1081c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1082c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1084a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SNIFF_SUB_RATE; 10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1087a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_SNIFF_SUB_RATE); 1088a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SNIFF_SUB_RATE); 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1090a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1091a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, max_lat); 1092a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, min_remote_lat); 1093a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, min_local_lat); 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1098a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#endif /* BTM_SSR_INCLUDED */ 10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1100a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/**** Extended Inquiry Response Commands ****/ 1101a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnsonvoid btsnd_hcic_write_ext_inquiry_response (void *buffer, UINT8 fec_req) 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1103a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BT_HDR *p = (BT_HDR *)buffer; 1104a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8 *pp = (UINT8 *)(p + 1); 11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1106a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_EXT_INQ_RESP; 11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1109a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_EXT_INQ_RESPONSE); 1110a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_EXT_INQ_RESP); 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1112a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, fec_req); 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1117a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_io_cap_req_reply (BD_ADDR bd_addr, UINT8 capability, 1118a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8 oob_present, UINT8 auth_req) 11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1120c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1121c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1123a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_IO_CAP_RESP; 11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1126899b77140675a157dba034e98527ab546bc9ac35Mudumba Ananth UINT16_TO_STREAM (pp, HCI_IO_CAPABILITY_REQUEST_REPLY); 1127a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_IO_CAP_RESP); 1128a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1129a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1130a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, capability); 1131a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, oob_present); 1132a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, auth_req); 11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1138a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_io_cap_req_neg_reply (BD_ADDR bd_addr, UINT8 err_code) 11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1140c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1141c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1143a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY; 11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1146a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_IO_CAP_REQ_NEG_REPLY); 1147a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY); 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1149a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1150a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, err_code); 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1152a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1156a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_local_oob_data (void) 11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1158c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1159c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1161a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_LOCAL_OOB; 11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1164a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_LOCAL_OOB_DATA); 1165a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_R_LOCAL_OOB); 11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1167a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1171a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_conf_reply (BD_ADDR bd_addr, BOOLEAN is_yes) 11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1173c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1174c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1176a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_UCONF_REPLY; 11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1179a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if (!is_yes) 1180a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson { 1181a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson /* Negative reply */ 1182a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_CONF_VALUE_NEG_REPLY); 1183a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 1184a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson else 1185a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson { 1186a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson /* Confirmation */ 1187a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_CONF_REQUEST_REPLY); 1188a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1190a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_UCONF_REPLY); 1191a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1192a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1198a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_passkey_reply (BD_ADDR bd_addr, UINT32 value) 11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1200c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1201c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1203a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_U_PKEY_REPLY; 12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1206a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_PASSKEY_REQ_REPLY); 1207a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_U_PKEY_REPLY); 12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1209a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1210a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT32_TO_STREAM (pp, value); 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_user_passkey_neg_reply (BD_ADDR bd_addr) 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1218c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1219c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1221a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY; 12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1224a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_PASSKEY_REQ_NEG_REPLY); 1225a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY); 1226a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1227a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1233a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_rem_oob_reply (BD_ADDR bd_addr, UINT8 *p_c, UINT8 *p_r) 12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1235c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1236c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1238a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REM_OOB_REPLY; 12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1241a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_REM_OOB_DATA_REQ_REPLY); 1242a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REM_OOB_REPLY); 12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1244a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1245a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson ARRAY16_TO_STREAM (pp, p_c); 1246a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson ARRAY16_TO_STREAM (pp, p_r); 12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1252a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_rem_oob_neg_reply (BD_ADDR bd_addr) 12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1254c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1255c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1257a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY; 12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1260a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_REM_OOB_DATA_REQ_NEG_REPLY); 1261a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY); 1262a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1263a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1269a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1270a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_inq_tx_power (void) 12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1272c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1273c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1275a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_TX_POWER; 12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1278a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_INQ_TX_POWER_LEVEL); 1279a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_R_TX_POWER); 12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1285a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_send_keypress_notif (BD_ADDR bd_addr, UINT8 notif) 12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1287c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1288c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1290a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF; 12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1293a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_SEND_KEYPRESS_NOTIF); 1294a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF); 12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1296a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1297a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, notif); 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1303a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/**** end of Simple Pairing Commands ****/ 1304a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1305a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#if L2CAP_NON_FLUSHABLE_PB_INCLUDED == TRUE 1306a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_enhanced_flush (UINT16 handle, UINT8 packet_type) 13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1308c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1309c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1311a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ENHANCED_FLUSH; 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1313a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_ENHANCED_FLUSH); 1314a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ENHANCED_FLUSH); 13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1316a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1317a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, packet_type); 13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1322a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#endif 1323a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1324a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/************************* 1325a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson** End of Lisbon Commands 1326a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson**************************/ 13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1328a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_get_link_quality (UINT16 handle) 13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1330c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1331c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1336a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_GET_LINK_QUALITY); 13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1345a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_rssi (UINT16 handle) 13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1347c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1348c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1350a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1353a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_RSSI); 1354a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1362a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_enable_test_mode (void) 13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1364c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1365c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD; 13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1370a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_ENABLE_DEV_UNDER_TEST_MODE); 13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_READ_CMD); 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1377a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inqscan_type (UINT8 type) 13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1379c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1380c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1385a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_INQSCAN_TYPE); 13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1388a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, type); 13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1394a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inquiry_mode (UINT8 mode) 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1396c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1397c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1399a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1402a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_INQUIRY_MODE); 1403a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 1404a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1405a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, mode); 14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_pagescan_type (UINT8 type) 14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1413c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1414c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_TYPE); 14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, type); 14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Must have room to store BT_HDR + max VSC length + callback pointer */ 142903566c28a5b0d9be32cc3ad0faab1032f1fe1c26Pavlin Radoslavov#if (HCI_CMD_BUF_SIZE < 268) 143003566c28a5b0d9be32cc3ad0faab1032f1fe1c26Pavlin Radoslavov#error "HCI_CMD_BUF_SIZE must be larger than 268" 14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btsnd_hcic_vendor_spec_cmd (void *buffer, UINT16 opcode, UINT8 len, 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_data, void *p_cmd_cplt_cback) 14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p = (BT_HDR *)buffer; 14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp = (UINT8 *)(p + 1); 14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + len; 14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = sizeof(void *); 14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *((void **)pp) = p_cmd_cplt_cback; /* Store command complete callback in buffer */ 14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp += sizeof(void *); /* Skip over callback pointer */ 14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_GRP_VENDOR_SPECIFIC | opcode); 14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, len); 14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM (pp, p_data, len); 14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1451