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