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" 27a11035b5ecbc6cbd9da5bd707683504c47e2744ePavlin Radoslavov#include "bt_common.h" 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcidefs.h" 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcimsgs.h" 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcidefs.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stddef.h> 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h" /* Included for UIPC_* macro definitions */ 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_inquiry(const LAP inq_lap, UINT8 duration, UINT8 response_cnt) 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 40c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 41c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_INQUIRY; 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_INQUIRY); 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_INQUIRY); 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project LAP_TO_STREAM (pp, inq_lap); 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, duration); 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, response_cnt); 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_inq_cancel(void) 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 59c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 60c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_INQ_CANCEL; 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_INQUIRY_CANCEL); 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_INQ_CANCEL); 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_per_inq_mode (UINT16 max_period, UINT16 min_period, 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const LAP inq_lap, UINT8 duration, UINT8 response_cnt) 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 74c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 75c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PER_INQ_MODE; 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PERIODIC_INQUIRY_MODE); 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PER_INQ_MODE); 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_period); 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, min_period); 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project LAP_TO_STREAM (pp, inq_lap); 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, duration); 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, response_cnt); 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_per_inq (void) 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 95c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 96c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_EXIT_PER_INQ; 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_EXIT_PERIODIC_INQUIRY_MODE); 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_EXIT_PER_INQ); 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_create_conn(BD_ADDR dest, UINT16 packet_types, 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 page_scan_rep_mode, UINT8 page_scan_mode, 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 clock_offset, UINT8 allow_switch) 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 112c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 113c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BT_10A 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN; 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN - 1; 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CREATE_CONNECTION); 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BT_10A 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CREATE_CONN); 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, (HCIC_PARAM_SIZE_CREATE_CONN - 1)); 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_rep_mode); 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_mode); 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, clock_offset); 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if !defined (BT_10A) 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, allow_switch); 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_paging (p, dest); 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_disconnect (UINT16 handle, UINT8 reason) 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 142c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 143c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_DISCONNECT; 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_DISCONNECT); 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_DISCONNECT); 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, reason); 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_SCO_INCLUDED == TRUE 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_add_SCO_conn (UINT16 handle, UINT16 packet_types) 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 160c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 161c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ADD_SCO_CONN; 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_ADD_SCO_CONNECTION); 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ADD_SCO_CONN); 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_SCO_INCLUDED */ 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_create_conn_cancel(BD_ADDR dest) 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 179c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 180c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN_CANCEL; 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CREATE_CONNECTION_CANCEL); 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CREATE_CONN_CANCEL); 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_accept_conn (BD_ADDR dest, UINT8 role) 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 196c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 197c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ACCEPT_CONN; 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_ACCEPT_CONNECTION_REQUEST); 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ACCEPT_CONN); 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, role); 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 207cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reject_conn (BD_ADDR dest, UINT8 reason) 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 214c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 215c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REJECT_CONN; 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_REJECT_CONNECTION_REQUEST); 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REJECT_CONN); 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, reason); 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 226cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_link_key_req_reply (BD_ADDR bd_addr, LINK_KEY link_key) 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 233c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 234c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY; 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_LINK_KEY_REQUEST_REPLY); 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY); 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY16_TO_STREAM (pp, link_key); 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_link_key_neg_reply (BD_ADDR bd_addr) 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 251c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 252c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY; 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_LINK_KEY_REQUEST_NEG_REPLY); 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY); 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_pin_code_req_reply (BD_ADDR bd_addr, UINT8 pin_code_len, 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PIN_CODE pin_code) 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 269c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 270c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 271c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov int i; 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY; 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PIN_CODE_REQUEST_REPLY); 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY); 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, pin_code_len); 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < pin_code_len; i++) 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *pp++ = *pin_code++; 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; i < PIN_CODE_LEN; i++) 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *pp++ = 0; 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_pin_code_neg_reply (BD_ADDR bd_addr) 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 295c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 296c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY; 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PIN_CODE_REQUEST_NEG_REPLY); 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY); 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_change_conn_type (UINT16 handle, UINT16 packet_types) 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 312c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 313c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_CONN_TYPE; 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CHANGE_CONN_PACKET_TYPE); 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CHANGE_CONN_TYPE); 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_auth_request (UINT16 handle) 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 330c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 331c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_AUTHENTICATION_REQUESTED); 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_conn_encrypt (UINT16 handle, BOOLEAN enable) 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 347c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 348c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_CONN_ENCRYPT; 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SET_CONN_ENCRYPTION); 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SET_CONN_ENCRYPT); 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, enable); 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_name_req (BD_ADDR bd_addr, UINT8 page_scan_rep_mode, 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 page_scan_mode, UINT16 clock_offset) 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 366c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 367c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_NAME_REQ; 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_RMT_NAME_REQUEST); 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RMT_NAME_REQ); 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_rep_mode); 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_mode); 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, clock_offset); 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_paging (p, bd_addr); 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_name_req_cancel (BD_ADDR bd_addr) 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 386c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 387c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL; 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_RMT_NAME_REQUEST_CANCEL); 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL); 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_features_req (UINT16 handle) 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 403c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 404c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_FEATURES); 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_ext_features (UINT16 handle, UINT8 page_num) 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 420c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 421c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_EXT_FEATURES; 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_EXT_FEATURES); 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RMT_EXT_FEATURES); 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_num); 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_ver_req (UINT16 handle) 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 438c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 439c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_VERSION_INFO); 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_rmt_clk_offset (UINT16 handle) 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 455c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 456c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_CLOCK_OFFSET); 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_lmp_handle (UINT16 handle) 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 472c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 473c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_LMP_HANDLE); 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_setup_esco_conn (UINT16 handle, UINT32 tx_bw, 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 rx_bw, UINT16 max_latency, UINT16 voice, 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 retrans_effort, UINT16 packet_types) 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 491c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 492c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SETUP_ESCO; 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SETUP_ESCO_CONNECTION); 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SETUP_ESCO); 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, tx_bw); 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, rx_bw); 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_latency); 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, voice); 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, retrans_effort); 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_accept_esco_conn (BD_ADDR bd_addr, UINT32 tx_bw, 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 rx_bw, UINT16 max_latency, 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 content_fmt, UINT8 retrans_effort, 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 packet_types) 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 517c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 518c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ACCEPT_ESCO; 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_ACCEPT_ESCO_CONNECTION); 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ACCEPT_ESCO); 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, tx_bw); 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, rx_bw); 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_latency); 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, content_fmt); 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, retrans_effort); 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reject_esco_conn (BD_ADDR bd_addr, UINT8 reason) 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 540c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 541c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REJECT_ESCO; 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_REJECT_ESCO_CONNECTION); 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REJECT_ESCO); 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, reason); 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_hold_mode (UINT16 handle, UINT16 max_hold_period, 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 min_hold_period) 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 559c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 560c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_HOLD_MODE; 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_HOLD_MODE); 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_HOLD_MODE); 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_hold_period); 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, min_hold_period); 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_sniff_mode (UINT16 handle, UINT16 max_sniff_period, 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 min_sniff_period, UINT16 sniff_attempt, 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 sniff_timeout) 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 580c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 581c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SNIFF_MODE; 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SNIFF_MODE); 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SNIFF_MODE); 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_sniff_period); 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, min_sniff_period); 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, sniff_attempt); 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, sniff_timeout); 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_sniff_mode (UINT16 handle) 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 601c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 602c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_EXIT_SNIFF_MODE); 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_park_mode (UINT16 handle, UINT16 beacon_max_interval, 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 beacon_min_interval) 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 619c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 620c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PARK_MODE; 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PARK_MODE); 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PARK_MODE); 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, beacon_max_interval); 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, beacon_min_interval); 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_park_mode (UINT16 handle) 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 638c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 639c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_EXIT_PARK_MODE); 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_qos_setup (UINT16 handle, UINT8 flags, UINT8 service_type, 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 token_rate, UINT32 peak, UINT32 latency, 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 delay_var) 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 657c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 658c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_QOS_SETUP; 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_QOS_SETUP); 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_QOS_SETUP); 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, flags); 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, service_type); 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, token_rate); 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, peak); 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, latency); 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, delay_var); 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_switch_role (BD_ADDR bd_addr, UINT8 role) 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 680c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 681c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SWITCH_ROLE; 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SWITCH_ROLE); 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SWITCH_ROLE); 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, role); 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_policy_set (UINT16 handle, UINT16 settings) 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 698c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 699c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_POLICY_SET; 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_POLICY_SETTINGS); 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_POLICY_SET); 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, settings); 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_def_policy_set (UINT16 settings) 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 715c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 716c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET; 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_DEF_POLICY_SETTINGS); 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET); 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, settings); 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_event_filter (UINT8 filt_type, UINT8 filt_cond_type, 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *filt_cond, UINT8 filt_cond_len) 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 732c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 733c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SET_EVENT_FILTER); 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (filt_type) 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = (UINT16)(HCIC_PREAMBLE_SIZE + 2 + filt_cond_len); 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, (UINT8)(2 + filt_cond_len)); 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, filt_type); 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, filt_cond_type); 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (filt_cond_type == HCI_FILTER_COND_DEVICE_CLASS) 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project DEVCLASS_TO_STREAM (pp, filt_cond); 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond += DEV_CLASS_LEN; 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project DEVCLASS_TO_STREAM (pp, filt_cond); 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond += DEV_CLASS_LEN; 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond_len -= (2 * DEV_CLASS_LEN); 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (filt_cond_type == HCI_FILTER_COND_BD_ADDR) 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, filt_cond); 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond += BD_ADDR_LEN; 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond_len -= BD_ADDR_LEN; 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (filt_cond_len) 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM (pp, filt_cond, filt_cond_len); 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = (UINT16)(HCIC_PREAMBLE_SIZE + 1); 7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, 1); 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, filt_type); 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_pin_type (UINT8 type) 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 781c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 782c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_PIN_TYPE); 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, type); 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_delete_stored_key (BD_ADDR bd_addr, BOOLEAN delete_all_flag) 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 798c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 799c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_DELETE_STORED_KEY; 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_DELETE_STORED_LINK_KEY); 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_DELETE_STORED_KEY); 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, delete_all_flag); 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_change_name (BD_NAME name) 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 816c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 817c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 818c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT16 len = strlen((char *)name) + 1; 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 820e14a66a5fd4f05817dc7716ca9087678dd220edaSharvil Nanavati memset(pp, 0, HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_NAME); 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_NAME; 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CHANGE_LOCAL_NAME); 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CHANGE_NAME); 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 828ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (len > HCIC_PARAM_SIZE_CHANGE_NAME) 829ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta len = HCIC_PARAM_SIZE_CHANGE_NAME; 830ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM (pp, name, len); 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_name (void) 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 839c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 840c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD; 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_LOCAL_NAME); 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_READ_CMD); 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 852a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_page_tout (UINT16 timeout) 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 854c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 855c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM2; 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 860a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_PAGE_TOUT); 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM2); 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 863a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, timeout); 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 865a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 869a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_scan_enable (UINT8 flag) 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 871c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 872c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 874a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 877a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_SCAN_ENABLE); 878a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 879a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 880a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, flag); 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 886a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_pagescan_cfg(UINT16 interval, UINT16 window) 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 888c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 889c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 891a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG; 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 894a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_CFG); 895a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG); 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 897a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, interval); 898a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, window); 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 904a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inqscan_cfg(UINT16 interval, UINT16 window) 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 906c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 907c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 909a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG; 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 912a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_INQUIRYSCAN_CFG); 913a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG); 914a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 915a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, interval); 916a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, window); 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 922a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_auth_enable (UINT8 flag) 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 924c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 925c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 930a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_AUTHENTICATION_ENABLE); 9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 933a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, flag); 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 939a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_dev_class(DEV_CLASS dev_class) 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 941c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 942c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 944a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM3; 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 947a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_CLASS_OF_DEVICE); 948a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM3); 949a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 950a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson DEVCLASS_TO_STREAM (pp, dev_class); 9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 956a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_voice_settings(UINT16 flags) 9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 958c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 959c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 961a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM2; 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 964a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_VOICE_SETTINGS); 965a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM2); 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 967a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, flags); 9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 973a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_auto_flush_tout (UINT16 handle, UINT16 tout) 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 975c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 976c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 978a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT; 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 981a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_AUTO_FLUSH_TOUT); 982a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT); 983a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 984a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 985a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, tout); 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 991a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_tx_power (UINT16 handle, UINT8 type) 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 993c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 994c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 996a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_TX_POWER; 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 999a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_TRANSMIT_POWER_LEVEL); 1000a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_READ_TX_POWER); 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1002a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1003a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, type); 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1009a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_host_num_xmitted_pkts (UINT8 num_handles, UINT16 *handle, 1010a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16 *num_pkts) 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1012c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1013c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1015a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + 1 + (num_handles * 4); 10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1018a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_HOST_NUM_PACKETS_DONE); 1019a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, p->len - HCIC_PREAMBLE_SIZE); 1020a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1021a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, num_handles); 1022a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1023c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov for (int i = 0; i < num_handles; i++) { 1024c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT16_TO_STREAM(pp, handle[i]); 1025c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT16_TO_STREAM(pp, num_pkts[i]); 1026a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1032a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_link_super_tout (UINT8 local_controller_id, UINT16 handle, UINT16 timeout) 10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1034c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1035c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1037a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT; 10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1040a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_LINK_SUPER_TOUT); 1041a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT); 10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1043a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1044a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, timeout); 10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1046a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (local_controller_id, p); 10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1050a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_cur_iac_lap (UINT8 num_cur_iac, LAP * const iac_lap) 10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1052c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1053c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1055a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + 1 + (LAP_LEN * num_cur_iac); 10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1058a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_CURRENT_IAC_LAP); 1059a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, p->len - HCIC_PREAMBLE_SIZE); 10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1061a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, num_cur_iac); 10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1063c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov for (int i = 0; i < num_cur_iac; i++) 1064a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson LAP_TO_STREAM (pp, iac_lap[i]); 10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1070a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/****************************************** 1071a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson** Lisbon Features 1072a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson*******************************************/ 1073a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#if BTM_SSR_INCLUDED == TRUE 10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1075a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_sniff_sub_rate(UINT16 handle, UINT16 max_lat, 1076a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16 min_remote_lat, UINT16 min_local_lat) 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1078c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1079c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1081a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SNIFF_SUB_RATE; 10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1084a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_SNIFF_SUB_RATE); 1085a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SNIFF_SUB_RATE); 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1087a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1088a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, max_lat); 1089a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, min_remote_lat); 1090a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, min_local_lat); 10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1095a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#endif /* BTM_SSR_INCLUDED */ 10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1097a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/**** Extended Inquiry Response Commands ****/ 1098a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnsonvoid btsnd_hcic_write_ext_inquiry_response (void *buffer, UINT8 fec_req) 10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1100a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BT_HDR *p = (BT_HDR *)buffer; 1101a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8 *pp = (UINT8 *)(p + 1); 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1103a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_EXT_INQ_RESP; 11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1106a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_EXT_INQ_RESPONSE); 1107a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_EXT_INQ_RESP); 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1109a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, fec_req); 11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1114a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_io_cap_req_reply (BD_ADDR bd_addr, UINT8 capability, 1115a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8 oob_present, UINT8 auth_req) 11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1117c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1118c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1120a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_IO_CAP_RESP; 11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1123899b77140675a157dba034e98527ab546bc9ac35Mudumba Ananth UINT16_TO_STREAM (pp, HCI_IO_CAPABILITY_REQUEST_REPLY); 1124a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_IO_CAP_RESP); 1125a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1126a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1127a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, capability); 1128a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, oob_present); 1129a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, auth_req); 11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1135a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_io_cap_req_neg_reply (BD_ADDR bd_addr, UINT8 err_code) 11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1137c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1138c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1140a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY; 11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1143a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_IO_CAP_REQ_NEG_REPLY); 1144a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY); 11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1146a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1147a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, err_code); 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1149a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1153a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_local_oob_data (void) 11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1155c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1156c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1158a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_LOCAL_OOB; 11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1161a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_LOCAL_OOB_DATA); 1162a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_R_LOCAL_OOB); 11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1164a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1168a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_conf_reply (BD_ADDR bd_addr, BOOLEAN is_yes) 11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1170c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1171c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1173a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_UCONF_REPLY; 11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1176a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if (!is_yes) 1177a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson { 1178a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson /* Negative reply */ 1179a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_CONF_VALUE_NEG_REPLY); 1180a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 1181a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson else 1182a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson { 1183a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson /* Confirmation */ 1184a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_CONF_REQUEST_REPLY); 1185a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1187a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_UCONF_REPLY); 1188a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1189a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1195a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_passkey_reply (BD_ADDR bd_addr, UINT32 value) 11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1197c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1198c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1200a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_U_PKEY_REPLY; 12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1203a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_PASSKEY_REQ_REPLY); 1204a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_U_PKEY_REPLY); 12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1206a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1207a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT32_TO_STREAM (pp, value); 12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1213a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_passkey_neg_reply (BD_ADDR bd_addr) 12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1215c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1216c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1218a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY; 12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1221a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_PASSKEY_REQ_NEG_REPLY); 1222a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY); 1223a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1224a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1230a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_rem_oob_reply (BD_ADDR bd_addr, UINT8 *p_c, UINT8 *p_r) 12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1232c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1233c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1235a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REM_OOB_REPLY; 12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1238a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_REM_OOB_DATA_REQ_REPLY); 1239a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REM_OOB_REPLY); 12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1241a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1242a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson ARRAY16_TO_STREAM (pp, p_c); 1243a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson ARRAY16_TO_STREAM (pp, p_r); 12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1249a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_rem_oob_neg_reply (BD_ADDR bd_addr) 12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1251c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1252c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1254a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY; 12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1257a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_REM_OOB_DATA_REQ_NEG_REPLY); 1258a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY); 1259a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1260a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1266a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1267a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_inq_tx_power (void) 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1269c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1270c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1272a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_TX_POWER; 12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1275a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_INQ_TX_POWER_LEVEL); 1276a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_R_TX_POWER); 12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1282a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_send_keypress_notif (BD_ADDR bd_addr, UINT8 notif) 12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1284c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1285c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1287a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF; 12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1290a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_SEND_KEYPRESS_NOTIF); 1291a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF); 12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1293a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1294a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, notif); 12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1300a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/**** end of Simple Pairing Commands ****/ 1301a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1302a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#if L2CAP_NON_FLUSHABLE_PB_INCLUDED == TRUE 1303a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_enhanced_flush (UINT16 handle, UINT8 packet_type) 13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1305c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1306c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1308a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ENHANCED_FLUSH; 13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1310a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_ENHANCED_FLUSH); 1311a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ENHANCED_FLUSH); 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1313a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1314a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, packet_type); 13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1319a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#endif 1320a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1321a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/************************* 1322a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson** End of Lisbon Commands 1323a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson**************************/ 13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1325a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_get_link_quality (UINT16 handle) 13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1327c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1328c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1333a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_GET_LINK_QUALITY); 13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1342a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_rssi (UINT16 handle) 13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1344c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1345c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1347a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1350a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_RSSI); 1351a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1359a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_enable_test_mode (void) 13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1361c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1362c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD; 13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1367a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_ENABLE_DEV_UNDER_TEST_MODE); 13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_READ_CMD); 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1374a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inqscan_type (UINT8 type) 13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1376c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1377c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1382a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_INQSCAN_TYPE); 13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1385a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, type); 13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1391a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inquiry_mode (UINT8 mode) 13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1393c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1394c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1396a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1399a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_INQUIRY_MODE); 1400a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 1401a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1402a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, mode); 14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_pagescan_type (UINT8 type) 14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1410c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE); 1411c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov UINT8 *pp = (UINT8 *)(p + 1); 14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_TYPE); 14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, type); 14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Must have room to store BT_HDR + max VSC length + callback pointer */ 142603566c28a5b0d9be32cc3ad0faab1032f1fe1c26Pavlin Radoslavov#if (HCI_CMD_BUF_SIZE < 268) 142703566c28a5b0d9be32cc3ad0faab1032f1fe1c26Pavlin Radoslavov#error "HCI_CMD_BUF_SIZE must be larger than 268" 14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btsnd_hcic_vendor_spec_cmd (void *buffer, UINT16 opcode, UINT8 len, 14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_data, void *p_cmd_cplt_cback) 14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p = (BT_HDR *)buffer; 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp = (UINT8 *)(p + 1); 14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + len; 14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = sizeof(void *); 14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *((void **)pp) = p_cmd_cplt_cback; /* Store command complete callback in buffer */ 14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp += sizeof(void *); /* Skip over callback pointer */ 14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_GRP_VENDOR_SPECIFIC | opcode); 14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, len); 14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM (pp, p_data, len); 14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1448