hcicmds.c revision cccf02fadb2dd4dceb22f2d58ed5840b0ef1860e
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" 27cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton#include "counter.h" 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcidefs.h" 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcimsgs.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcidefs.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stddef.h> 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h" /* Included for UIPC_* macro definitions */ 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_inquiry(const LAP inq_lap, UINT8 duration, UINT8 response_cnt) 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_INQUIRY)) == NULL) 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_INQUIRY; 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_INQUIRY); 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_INQUIRY); 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project LAP_TO_STREAM (pp, inq_lap); 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, duration); 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, response_cnt); 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_inq_cancel(void) 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_INQ_CANCEL)) == NULL) 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_INQ_CANCEL; 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_INQUIRY_CANCEL); 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_INQ_CANCEL); 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_per_inq_mode (UINT16 max_period, UINT16 min_period, 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const LAP inq_lap, UINT8 duration, UINT8 response_cnt) 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_PER_INQ_MODE)) == NULL) 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PER_INQ_MODE; 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PERIODIC_INQUIRY_MODE); 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PER_INQ_MODE); 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_period); 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, min_period); 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project LAP_TO_STREAM (pp, inq_lap); 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, duration); 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, response_cnt); 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_per_inq (void) 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_EXIT_PER_INQ)) == NULL) 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_EXIT_PER_INQ; 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_EXIT_PERIODIC_INQUIRY_MODE); 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_EXIT_PER_INQ); 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_create_conn(BD_ADDR dest, UINT16 packet_types, 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 page_scan_rep_mode, UINT8 page_scan_mode, 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 clock_offset, UINT8 allow_switch) 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CREATE_CONN)) == NULL) 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BT_10A 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN; 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN - 1; 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CREATE_CONNECTION); 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BT_10A 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CREATE_CONN); 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, (HCIC_PARAM_SIZE_CREATE_CONN - 1)); 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_rep_mode); 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_mode); 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, clock_offset); 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if !defined (BT_10A) 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, allow_switch); 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_paging (p, dest); 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_disconnect (UINT16 handle, UINT8 reason) 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_DISCONNECT)) == NULL) 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_DISCONNECT; 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_DISCONNECT); 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_DISCONNECT); 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, reason); 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_SCO_INCLUDED == TRUE 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_add_SCO_conn (UINT16 handle, UINT16 packet_types) 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_ADD_SCO_CONN)) == NULL) 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ADD_SCO_CONN; 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_ADD_SCO_CONNECTION); 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ADD_SCO_CONN); 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_SCO_INCLUDED */ 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_create_conn_cancel(BD_ADDR dest) 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CREATE_CONN_CANCEL)) == NULL) 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN_CANCEL; 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CREATE_CONNECTION_CANCEL); 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CREATE_CONN_CANCEL); 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_accept_conn (BD_ADDR dest, UINT8 role) 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_ACCEPT_CONN)) == NULL) 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ACCEPT_CONN; 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_ACCEPT_CONNECTION_REQUEST); 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ACCEPT_CONN); 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, role); 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 253cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton counter_add("hci.conn.accept", 1); 254cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reject_conn (BD_ADDR dest, UINT8 reason) 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_REJECT_CONN)) == NULL) 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REJECT_CONN; 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_REJECT_CONNECTION_REQUEST); 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REJECT_CONN); 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, dest); 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, reason); 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 278cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton counter_add("hci.conn.reject", 1); 279cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_link_key_req_reply (BD_ADDR bd_addr, LINK_KEY link_key) 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY)) == NULL) 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY; 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_LINK_KEY_REQUEST_REPLY); 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY); 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY16_TO_STREAM (pp, link_key); 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_link_key_neg_reply (BD_ADDR bd_addr) 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY)) == NULL) 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY; 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_LINK_KEY_REQUEST_NEG_REPLY); 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY); 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_pin_code_req_reply (BD_ADDR bd_addr, UINT8 pin_code_len, 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project PIN_CODE pin_code) 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY)) == NULL) 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY; 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PIN_CODE_REQUEST_REPLY); 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY); 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, pin_code_len); 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < pin_code_len; i++) 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *pp++ = *pin_code++; 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (; i < PIN_CODE_LEN; i++) 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *pp++ = 0; 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_pin_code_neg_reply (BD_ADDR bd_addr) 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY)) == NULL) 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY; 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PIN_CODE_REQUEST_NEG_REPLY); 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY); 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_change_conn_type (UINT16 handle, UINT16 packet_types) 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CHANGE_CONN_TYPE)) == NULL) 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_CONN_TYPE; 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CHANGE_CONN_PACKET_TYPE); 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CHANGE_CONN_TYPE); 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_auth_request (UINT16 handle) 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_AUTHENTICATION_REQUESTED); 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_conn_encrypt (UINT16 handle, BOOLEAN enable) 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SET_CONN_ENCRYPT)) == NULL) 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_CONN_ENCRYPT; 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SET_CONN_ENCRYPTION); 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SET_CONN_ENCRYPT); 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, enable); 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_master_link_key (BOOLEAN key_flag) 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_MASTER_LINK_KEY)) == NULL) 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_MASTER_LINK_KEY; 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_MASTER_LINK_KEY); 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_MASTER_LINK_KEY); 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, key_flag); 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_name_req (BD_ADDR bd_addr, UINT8 page_scan_rep_mode, 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 page_scan_mode, UINT16 clock_offset) 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_RMT_NAME_REQ)) == NULL) 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_NAME_REQ; 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_RMT_NAME_REQUEST); 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RMT_NAME_REQ); 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_rep_mode); 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_scan_mode); 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, clock_offset); 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_acl_paging (p, bd_addr); 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_name_req_cancel (BD_ADDR bd_addr) 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL)) == NULL) 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL; 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_RMT_NAME_REQUEST_CANCEL); 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL); 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_features_req (UINT16 handle) 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_FEATURES); 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_ext_features (UINT16 handle, UINT8 page_num) 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_RMT_EXT_FEATURES)) == NULL) 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_EXT_FEATURES; 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_EXT_FEATURES); 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RMT_EXT_FEATURES); 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, page_num); 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_ver_req (UINT16 handle) 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_VERSION_INFO); 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_rmt_clk_offset (UINT16 handle) 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_RMT_CLOCK_OFFSET); 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_lmp_handle (UINT16 handle) 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_LMP_HANDLE); 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_setup_esco_conn (UINT16 handle, UINT32 tx_bw, 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 rx_bw, UINT16 max_latency, UINT16 voice, 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 retrans_effort, UINT16 packet_types) 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SETUP_ESCO)) == NULL) 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SETUP_ESCO; 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SETUP_ESCO_CONNECTION); 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SETUP_ESCO); 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, tx_bw); 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, rx_bw); 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_latency); 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, voice); 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, retrans_effort); 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_accept_esco_conn (BD_ADDR bd_addr, UINT32 tx_bw, 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 rx_bw, UINT16 max_latency, 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 content_fmt, UINT8 retrans_effort, 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 packet_types) 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_ACCEPT_ESCO)) == NULL) 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ACCEPT_ESCO; 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_ACCEPT_ESCO_CONNECTION); 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ACCEPT_ESCO); 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, tx_bw); 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, rx_bw); 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_latency); 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, content_fmt); 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, retrans_effort); 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, packet_types); 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reject_esco_conn (BD_ADDR bd_addr, UINT8 reason) 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_REJECT_ESCO)) == NULL) 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REJECT_ESCO; 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_REJECT_ESCO_CONNECTION); 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REJECT_ESCO); 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, reason); 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_hold_mode (UINT16 handle, UINT16 max_hold_period, 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 min_hold_period) 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_HOLD_MODE)) == NULL) 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_HOLD_MODE; 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_HOLD_MODE); 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_HOLD_MODE); 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_hold_period); 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, min_hold_period); 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_sniff_mode (UINT16 handle, UINT16 max_sniff_period, 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 min_sniff_period, UINT16 sniff_attempt, 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 sniff_timeout) 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SNIFF_MODE)) == NULL) 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SNIFF_MODE; 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SNIFF_MODE); 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SNIFF_MODE); 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, max_sniff_period); 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, min_sniff_period); 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, sniff_attempt); 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, sniff_timeout); 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_sniff_mode (UINT16 handle) 7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_EXIT_SNIFF_MODE); 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_park_mode (UINT16 handle, UINT16 beacon_max_interval, 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 beacon_min_interval) 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_PARK_MODE)) == NULL) 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PARK_MODE; 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_PARK_MODE); 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_PARK_MODE); 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, beacon_max_interval); 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, beacon_min_interval); 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_park_mode (UINT16 handle) 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_EXIT_PARK_MODE); 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_qos_setup (UINT16 handle, UINT8 flags, UINT8 service_type, 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 token_rate, UINT32 peak, UINT32 latency, 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 delay_var) 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_QOS_SETUP)) == NULL) 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_QOS_SETUP; 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_QOS_SETUP); 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_QOS_SETUP); 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, flags); 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, service_type); 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, token_rate); 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, peak); 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, latency); 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM (pp, delay_var); 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_switch_role (BD_ADDR bd_addr, UINT8 role) 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SWITCH_ROLE)) == NULL) 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SWITCH_ROLE; 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SWITCH_ROLE); 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SWITCH_ROLE); 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, role); 8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_policy_set (UINT16 handle) 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_POLICY_SETTINGS); 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_policy_set (UINT16 handle, UINT16 settings) 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_POLICY_SET)) == NULL) 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_POLICY_SET; 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_POLICY_SETTINGS); 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_POLICY_SET); 9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, settings); 9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_def_policy_set (UINT16 settings) 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET)) == NULL) 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET; 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_DEF_POLICY_SETTINGS); 9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET); 9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, settings); 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 9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_event_filter (UINT8 filt_type, UINT8 filt_cond_type, 9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *filt_cond, UINT8 filt_cond_len) 9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Use buffer large enough to hold all sizes in this command */ 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(2 + filt_cond_len)) == NULL) 9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_SET_EVENT_FILTER); 9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (filt_type) 9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = (UINT16)(HCIC_PREAMBLE_SIZE + 2 + filt_cond_len); 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, (UINT8)(2 + filt_cond_len)); 9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, filt_type); 9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, filt_cond_type); 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (filt_cond_type == HCI_FILTER_COND_DEVICE_CLASS) 9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project DEVCLASS_TO_STREAM (pp, filt_cond); 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond += DEV_CLASS_LEN; 9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project DEVCLASS_TO_STREAM (pp, filt_cond); 9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond += DEV_CLASS_LEN; 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond_len -= (2 * DEV_CLASS_LEN); 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (filt_cond_type == HCI_FILTER_COND_BD_ADDR) 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, filt_cond); 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond += BD_ADDR_LEN; 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project filt_cond_len -= BD_ADDR_LEN; 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (filt_cond_len) 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM (pp, filt_cond, filt_cond_len); 9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = (UINT16)(HCIC_PREAMBLE_SIZE + 1); 10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, 1); 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, filt_type); 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_pin_type (UINT8 type) 10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL) 10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_PIN_TYPE); 10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, type); 10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_stored_key (BD_ADDR bd_addr, BOOLEAN read_all_flag) 10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_STORED_KEY)) == NULL) 10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_STORED_KEY; 10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_STORED_LINK_KEY); 10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_READ_STORED_KEY); 10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, read_all_flag); 10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_stored_key (UINT8 num_keys, BD_ADDR *bd_addr, 10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project LINK_KEY *link_key) 10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int j; 10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(1 + (num_keys * (BD_ADDR_LEN + LINK_KEY_LEN)))) == NULL) 10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + 1 + (num_keys * (BD_ADDR_LEN + LINK_KEY_LEN)); 10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_STORED_LINK_KEY); 10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, p->len - HCIC_PREAMBLE_SIZE); 10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(num_keys > HCI_MAX_NUM_OF_LINK_KEYS_PER_CMMD) 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_keys = HCI_MAX_NUM_OF_LINK_KEYS_PER_CMMD; 10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, num_keys); 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (j = 0; j < num_keys; j++) 10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr[j]); 10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY16_TO_STREAM (pp, link_key[j]); 10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_delete_stored_key (BD_ADDR bd_addr, BOOLEAN delete_all_flag) 10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_DELETE_STORED_KEY)) == NULL) 10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_DELETE_STORED_KEY; 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_DELETE_STORED_LINK_KEY); 11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_DELETE_STORED_KEY); 11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BDADDR_TO_STREAM (pp, bd_addr); 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, delete_all_flag); 11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_change_name (BD_NAME name) 11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 len = strlen ((char *)name) + 1; 11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CHANGE_NAME)) == NULL) 11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 1124e14a66a5fd4f05817dc7716ca9087678dd220edaSharvil Nanavati memset(pp, 0, HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_NAME); 11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_NAME; 11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_CHANGE_LOCAL_NAME); 11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CHANGE_NAME); 11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1132ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (len > HCIC_PARAM_SIZE_CHANGE_NAME) 1133ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta len = HCIC_PARAM_SIZE_CHANGE_NAME; 1134ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM (pp, name, len); 11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_name (void) 11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL) 11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD; 11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_READ_LOCAL_NAME); 11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_READ_CMD); 11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1161a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_page_tout (UINT16 timeout) 11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM2)) == NULL) 11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM2; 11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1174a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_PAGE_TOUT); 11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM2); 11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1177a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, timeout); 11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1179a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1183a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_scan_enable (UINT8 flag) 11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1188a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL) 11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1193a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1196a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_SCAN_ENABLE); 1197a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 1198a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1199a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, flag); 12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1205a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_pagescan_cfg(UINT16 interval, UINT16 window) 12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1210a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG)) == NULL) 12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1215a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG; 12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1218a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_CFG); 1219a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG); 12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1221a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, interval); 1222a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, window); 12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1228a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inqscan_cfg(UINT16 interval, UINT16 window) 12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1233a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG)) == NULL) 12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1238a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG; 12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1241a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_INQUIRYSCAN_CFG); 1242a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG); 1243a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1244a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, interval); 1245a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, window); 12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1251a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_auth_enable (UINT8 flag) 12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL) 12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1264a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_AUTHENTICATION_ENABLE); 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1267a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, flag); 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1273a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_dev_class(DEV_CLASS dev_class) 12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1278a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM3)) == NULL) 12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1283a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM3; 12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1286a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_CLASS_OF_DEVICE); 1287a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM3); 1288a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1289a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson DEVCLASS_TO_STREAM (pp, dev_class); 12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1295a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_voice_settings(UINT16 flags) 12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1300a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM2)) == NULL) 13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1305a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM2; 13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1308a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_VOICE_SETTINGS); 1309a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM2); 13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1311a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, flags); 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1317a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_auto_flush_tout (UINT16 handle, UINT16 tout) 13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1322a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT)) == NULL) 13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1327a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT; 13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1330a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_AUTO_FLUSH_TOUT); 1331a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT); 1332a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1333a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1334a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, tout); 13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1340a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_tx_power (UINT16 handle, UINT8 type) 13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1345a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_TX_POWER)) == NULL) 13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1350a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_TX_POWER; 13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1353a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_TRANSMIT_POWER_LEVEL); 1354a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_READ_TX_POWER); 13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1356a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1357a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, type); 13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1363a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_host_num_xmitted_pkts (UINT8 num_handles, UINT16 *handle, 1364a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16 *num_pkts) 13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 1368a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson int j; 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1370a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(1 + (num_handles * 4))) == NULL) 13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1375a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + 1 + (num_handles * 4); 13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1378a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_HOST_NUM_PACKETS_DONE); 1379a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, p->len - HCIC_PREAMBLE_SIZE); 1380a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1381a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, num_handles); 1382a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1383a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson for (j = 0; j < num_handles; j++) 1384a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson { 1385a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle[j]); 1386a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, num_pkts[j]); 1387a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1393a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_link_super_tout (UINT8 local_controller_id, UINT16 handle, UINT16 timeout) 13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1398a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT)) == NULL) 13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1403a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT; 14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1406a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_LINK_SUPER_TOUT); 1407a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT); 14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1409a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1410a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, timeout); 14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1412a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (local_controller_id, p); 14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1416a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_cur_iac_lap (UINT8 num_cur_iac, LAP * const iac_lap) 14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 1420a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson int i; 14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1422a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(1 + (LAP_LEN * num_cur_iac))) == NULL) 14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1427a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + 1 + (LAP_LEN * num_cur_iac); 14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1430a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_CURRENT_IAC_LAP); 1431a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, p->len - HCIC_PREAMBLE_SIZE); 14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1433a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, num_cur_iac); 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1435a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson for (i = 0; i < num_cur_iac; i++) 1436a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson LAP_TO_STREAM (pp, iac_lap[i]); 14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1442a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/****************************************** 1443a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson** Lisbon Features 1444a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson*******************************************/ 1445a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#if BTM_SSR_INCLUDED == TRUE 14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1447a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_sniff_sub_rate(UINT16 handle, UINT16 max_lat, 1448a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16 min_remote_lat, UINT16 min_local_lat) 14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1453a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SNIFF_SUB_RATE)) == NULL) 14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1458a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SNIFF_SUB_RATE; 14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1461a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_SNIFF_SUB_RATE); 1462a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SNIFF_SUB_RATE); 14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1464a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1465a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, max_lat); 1466a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, min_remote_lat); 1467a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, min_local_lat); 14685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1472a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#endif /* BTM_SSR_INCLUDED */ 14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1474a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#if (BTM_EIR_SERVER_INCLUDED == TRUE) 1475a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/**** Extended Inquiry Response Commands ****/ 1476a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnsonvoid btsnd_hcic_write_ext_inquiry_response (void *buffer, UINT8 fec_req) 14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1478a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BT_HDR *p = (BT_HDR *)buffer; 1479a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8 *pp = (UINT8 *)(p + 1); 14805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1481a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_EXT_INQ_RESP; 14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 14835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1484a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_EXT_INQ_RESPONSE); 1485a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_EXT_INQ_RESP); 14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1487a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, fec_req); 14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1491a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#endif /* BTM_EIR_SERVER_INCLUDED == TRUE */ 14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1493a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_io_cap_req_reply (BD_ADDR bd_addr, UINT8 capability, 1494a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8 oob_present, UINT8 auth_req) 14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1499a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_IO_CAP_RESP)) == NULL) 15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1504a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_IO_CAP_RESP; 15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1507a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_IO_CAPABILITY_RESPONSE); 1508a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_IO_CAP_RESP); 1509a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1510a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1511a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, capability); 1512a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, oob_present); 1513a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, auth_req); 15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1519a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_io_cap_req_neg_reply (BD_ADDR bd_addr, UINT8 err_code) 15205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1524a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY)) == NULL) 15255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 15285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1529a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY; 15305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1532a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_IO_CAP_REQ_NEG_REPLY); 1533a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY); 15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1535a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1536a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, err_code); 15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1538a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1542a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_local_oob_data (void) 15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1547a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_R_LOCAL_OOB)) == NULL) 15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1552a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_LOCAL_OOB; 15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 15545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1555a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_LOCAL_OOB_DATA); 1556a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_R_LOCAL_OOB); 15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1558a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1562a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_conf_reply (BD_ADDR bd_addr, BOOLEAN is_yes) 15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 15655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 15665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1567a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_UCONF_REPLY)) == NULL) 15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1572a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_UCONF_REPLY; 15735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 15745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1575a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if (!is_yes) 1576a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson { 1577a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson /* Negative reply */ 1578a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_CONF_VALUE_NEG_REPLY); 1579a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 1580a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson else 1581a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson { 1582a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson /* Confirmation */ 1583a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_CONF_REQUEST_REPLY); 1584a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1586a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_UCONF_REPLY); 1587a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1588a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1594a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_passkey_reply (BD_ADDR bd_addr, UINT32 value) 15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 15975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 15985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1599a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_U_PKEY_REPLY)) == NULL) 16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 16035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1604a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_U_PKEY_REPLY; 16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1607a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_PASSKEY_REQ_REPLY); 1608a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_U_PKEY_REPLY); 16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1610a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1611a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT32_TO_STREAM (pp, value); 16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1617a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_passkey_neg_reply (BD_ADDR bd_addr) 16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1622a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY)) == NULL) 16235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 16265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1627a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY; 16285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 16295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1630a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_USER_PASSKEY_REQ_NEG_REPLY); 1631a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY); 1632a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1633a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 16345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 16375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1639a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_rem_oob_reply (BD_ADDR bd_addr, UINT8 *p_c, UINT8 *p_r) 16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 16425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1644a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_REM_OOB_REPLY)) == NULL) 16455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1649a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REM_OOB_REPLY; 16505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 16515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1652a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_REM_OOB_DATA_REQ_REPLY); 1653a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REM_OOB_REPLY); 16545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1655a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1656a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson ARRAY16_TO_STREAM (pp, p_c); 1657a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson ARRAY16_TO_STREAM (pp, p_r); 16585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 16615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1663a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_rem_oob_neg_reply (BD_ADDR bd_addr) 16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 16675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1668a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY)) == NULL) 16695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 16705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 16725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1673a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY; 16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1676a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_REM_OOB_DATA_REQ_NEG_REPLY); 1677a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY); 1678a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1679a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 16835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1685a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1686a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_inq_tx_power (void) 16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1691a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_R_TX_POWER)) == NULL) 16925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1696a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_TX_POWER; 16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1699a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_INQ_TX_POWER_LEVEL); 1700a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_R_TX_POWER); 17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1706a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inq_tx_power (INT8 level) 17075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1711a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_W_TX_POWER)) == NULL) 17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 17135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1716a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_W_TX_POWER; 17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1719a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_INQ_TX_POWER_LEVEL); 1720a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_W_TX_POWER); 1721a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1722a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson INT8_TO_STREAM (pp, level); 17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1728a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_send_keypress_notif (BD_ADDR bd_addr, UINT8 notif) 17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 1731a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8 *pp; 17325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1733a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF)) == NULL) 17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1738a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF; 17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1741a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_SEND_KEYPRESS_NOTIF); 1742a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF); 17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1744a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson BDADDR_TO_STREAM (pp, bd_addr); 1745a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, notif); 17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1751a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/**** end of Simple Pairing Commands ****/ 1752a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1753a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#if L2CAP_NON_FLUSHABLE_PB_INCLUDED == TRUE 1754a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_enhanced_flush (UINT16 handle, UINT8 packet_type) 17555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 17575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1759a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_ENHANCED_FLUSH)) == NULL) 17605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 17615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1764a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ENHANCED_FLUSH; 17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 1766a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_ENHANCED_FLUSH); 1767a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_ENHANCED_FLUSH); 17685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1769a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, handle); 1770a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, packet_type); 17715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 17735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 17745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1775a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#endif 1776a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1777a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/************************* 1778a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson** End of Lisbon Commands 1779a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson**************************/ 17805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1781a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_get_link_quality (UINT16 handle) 17825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 17845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 17855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 17875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 17905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 17925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 17935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1794a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_GET_LINK_QUALITY); 17955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 17965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 17985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 18005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 18015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1803a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_rssi (UINT16 handle) 18045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 18055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1808a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL) 18095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 18105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 18125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1813a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE; 18145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 18155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1816a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_READ_RSSI); 1817a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_CMD_HANDLE); 18185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, handle); 18205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 18225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 18235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1825a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_enable_test_mode (void) 18265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 18275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 18285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 18295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL) 18315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 18325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 18345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD; 18365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 18375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1838a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_ENABLE_DEV_UNDER_TEST_MODE); 18395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_READ_CMD); 18405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 18425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 18435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1845a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_afh_channel_assessment_mode (UINT8 mode) 18465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 18475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 18485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 18495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL) 18515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 18525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 18545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 18565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 18575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1858a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_AFH_ASSESSMENT_MODE); 18595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 18605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1861a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, mode); 18625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 18645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 18655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1867a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_set_afh_channels (UINT8 first, UINT8 last) 18685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 18695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 1870a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8 *pp; 1871a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8 channels[10] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F}; 1872a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson int i; 18735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1874a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SET_AFH_CHANNELS)) == NULL) 18755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 18765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 18785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1879a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_AFH_CHANNELS; 18805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 18815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1882a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_SET_AFH_CHANNELS); 1883a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_SET_AFH_CHANNELS); 1884a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1885a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson /* Just make sure that caller did not exceed 79 Bluetooth channels */ 1886a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((first <= last) && (last <= 78)) 1887a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson { 1888a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson for (i = first; i <= last; i++) 1889a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson { 1890a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson int byte_offset = i / 8; 1891a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson int bit_offset = i % 8; 1892a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson channels[byte_offset] &= ~(1 << bit_offset); 1893a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 1894a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson } 1895a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson for (i = 0; i < 10; i++) 1896a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson *pp++ = channels[i]; 18975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 18995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 19015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1902a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inqscan_type (UINT8 type) 19035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 19045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 19055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 19065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL) 19085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 19095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 19115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 19135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 19145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1915a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_INQSCAN_TYPE); 19165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 19175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1918a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, type); 19195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 19215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 19225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 19235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1924a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inquiry_mode (UINT8 mode) 19255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 19265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 19275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 19285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1929a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL) 19305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 19315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 19335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1934a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 19355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 19365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1937a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT16_TO_STREAM (pp, HCI_WRITE_INQUIRY_MODE); 1938a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 1939a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson 1940a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson UINT8_TO_STREAM (pp, mode); 19415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 19435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 19445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 19455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_pagescan_type (UINT8 type) 19475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 19485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p; 19495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp; 19505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL) 19525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 19535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp = (UINT8 *)(p + 1); 19555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1; 19575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = 0; 19585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_TYPE); 19605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM1); 19615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, type); 19635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 19655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 19665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 19675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Must have room to store BT_HDR + max VSC length + callback pointer */ 19698fc656cc6aef76574f55c334f0dd71d62b23e896Zach Johnson#if (HCI_CMD_POOL_BUF_SIZE < 268) 19705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#error "HCI_CMD_POOL_BUF_SIZE must be larger than 268" 19715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 19725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btsnd_hcic_vendor_spec_cmd (void *buffer, UINT16 opcode, UINT8 len, 19745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_data, void *p_cmd_cplt_cback) 19755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 19765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p = (BT_HDR *)buffer; 19775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *pp = (UINT8 *)(p + 1); 19785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->len = HCIC_PREAMBLE_SIZE + len; 19805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->offset = sizeof(void *); 19815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *((void **)pp) = p_cmd_cplt_cback; /* Store command complete callback in buffer */ 19835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pp += sizeof(void *); /* Skip over callback pointer */ 19845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM (pp, HCI_GRP_VENDOR_SPECIFIC | opcode); 19865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM (pp, len); 19875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY_TO_STREAM (pp, p_data, len); 19885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); 19905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1991