hcicmds.c revision 5738f83aeb59361a0a2eda2460113f6dc919427
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"
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h"
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcidefs.h"
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcimsgs.h"
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcidefs.h"
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h"
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stddef.h>
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h>
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if defined (LMP_TEST)
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <script.h>
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define btu_hcif_send_cmd(p1, p2) HCI_CMD_TO_LOWER((p2))
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h"    /* Included for UIPC_* macro definitions */
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_inquiry(const LAP inq_lap, UINT8 duration, UINT8 response_cnt)
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_INQUIRY)) == NULL)
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_INQUIRY;
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_INQUIRY);
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_INQUIRY);
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    LAP_TO_STREAM   (pp, inq_lap);
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, duration);
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, response_cnt);
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_inq_cancel(void)
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_INQ_CANCEL)) == NULL)
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_INQ_CANCEL;
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_INQUIRY_CANCEL);
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_INQ_CANCEL);
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_per_inq_mode (UINT16 max_period, UINT16 min_period,
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 const LAP inq_lap, UINT8 duration, UINT8 response_cnt)
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_PER_INQ_MODE)) == NULL)
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PER_INQ_MODE;
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_PERIODIC_INQUIRY_MODE);
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_PER_INQ_MODE);
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, max_period);
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, min_period);
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    LAP_TO_STREAM    (pp, inq_lap);
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, duration);
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, response_cnt);
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_per_inq (void)
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_EXIT_PER_INQ)) == NULL)
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_EXIT_PER_INQ;
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_EXIT_PERIODIC_INQUIRY_MODE);
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_EXIT_PER_INQ);
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_create_conn(BD_ADDR dest, UINT16 packet_types,
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               UINT8 page_scan_rep_mode, UINT8 page_scan_mode,
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               UINT16 clock_offset, UINT8 allow_switch)
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CREATE_CONN)) == NULL)
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BT_10A
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN;
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN - 1;
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_CREATE_CONNECTION);
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BT_10A
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CREATE_CONN);
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, (HCIC_PARAM_SIZE_CREATE_CONN - 1));
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, dest);
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, packet_types);
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, page_scan_rep_mode);
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, page_scan_mode);
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, clock_offset);
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if !defined (BT_10A)
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, allow_switch);
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* If calling from LMP_TEST or ScriptEngine, then send HCI command immediately */
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (!defined (LMP_TEST) && !defined(BTISE))
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btm_acl_paging (p, dest);
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_disconnect (UINT16 handle, UINT8 reason)
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_DISCONNECT)) == NULL)
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_DISCONNECT;
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_DISCONNECT);
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_DISCONNECT);
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, reason);
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* If calling from LMP_TEST or ScriptEngine, then send HCI command immediately */
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (!defined (LMP_TEST) && !defined(BTISE))
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// btla-specific ++
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    // btm_acl_set_discing(TRUE);
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// btla-specific --
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_SCO_INCLUDED == TRUE
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_add_SCO_conn (UINT16 handle, UINT16 packet_types)
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_ADD_SCO_CONN)) == NULL)
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ADD_SCO_CONN;
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_ADD_SCO_CONNECTION);
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_ADD_SCO_CONN);
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, packet_types);
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_SCO_INCLUDED */
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_create_conn_cancel(BD_ADDR dest)
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CREATE_CONN_CANCEL)) == NULL)
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN_CANCEL;
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_CREATE_CONNECTION_CANCEL);
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CREATE_CONN_CANCEL);
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, dest);
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_accept_conn (BD_ADDR dest, UINT8 role)
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_ACCEPT_CONN)) == NULL)
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ACCEPT_CONN;
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_ACCEPT_CONNECTION_REQUEST);
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_ACCEPT_CONN);
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, dest);
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, role);
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reject_conn (BD_ADDR dest, UINT8 reason)
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_REJECT_CONN)) == NULL)
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REJECT_CONN;
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_REJECT_CONNECTION_REQUEST);
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_REJECT_CONN);
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, dest);
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, reason);
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_link_key_req_reply (BD_ADDR bd_addr, LINK_KEY link_key)
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY)) == NULL)
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY;
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM  (pp, HCI_LINK_KEY_REQUEST_REPLY);
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM   (pp, HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY);
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM  (pp, bd_addr);
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY16_TO_STREAM (pp, link_key);
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_link_key_neg_reply (BD_ADDR bd_addr)
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY)) == NULL)
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY;
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_LINK_KEY_REQUEST_NEG_REPLY);
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY);
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_pin_code_req_reply (BD_ADDR bd_addr, UINT8 pin_code_len,
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    PIN_CODE pin_code)
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  *pp;
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int     i;
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY)) == NULL)
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY;
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM  (pp, HCI_PIN_CODE_REQUEST_REPLY);
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM   (pp, HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY);
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM  (pp, bd_addr);
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM   (pp, pin_code_len);
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < pin_code_len; i++)
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *pp++ = *pin_code++;
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (; i < PIN_CODE_LEN; i++)
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *pp++ = 0;
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_pin_code_neg_reply (BD_ADDR bd_addr)
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY)) == NULL)
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY;
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_PIN_CODE_REQUEST_NEG_REPLY);
3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY);
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_change_conn_type (UINT16 handle, UINT16 packet_types)
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CHANGE_CONN_TYPE)) == NULL)
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_CONN_TYPE;
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_CHANGE_CONN_PACKET_TYPE);
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CHANGE_CONN_TYPE);
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, packet_types);
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_auth_request (UINT16 handle)
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_AUTHENTICATION_REQUESTED);
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_conn_encrypt (UINT16 handle, BOOLEAN enable)
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SET_CONN_ENCRYPT)) == NULL)
4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_CONN_ENCRYPT;
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SET_CONN_ENCRYPTION);
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SET_CONN_ENCRYPT);
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, enable);
4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_change_link_key (UINT16 handle)
4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_CHANGE_CONN_LINK_KEY);
4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_master_link_key (BOOLEAN key_flag)
4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_MASTER_LINK_KEY)) == NULL)
4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_MASTER_LINK_KEY;
4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_MASTER_LINK_KEY);
4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_MASTER_LINK_KEY);
4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, key_flag);
5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_name_req (BD_ADDR bd_addr, UINT8 page_scan_rep_mode,
5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 UINT8 page_scan_mode, UINT16 clock_offset)
5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_RMT_NAME_REQ)) == NULL)
5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_NAME_REQ;
5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_RMT_NAME_REQUEST);
5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_RMT_NAME_REQ);
5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, page_scan_rep_mode);
5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, page_scan_mode);
5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, clock_offset);
5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* If calling from LMP_TEST or ScriptEngine, then send HCI command immediately */
5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (!defined (LMP_TEST) && !defined(BTISE))
5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btm_acl_paging (p, bd_addr);
5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_name_req_cancel (BD_ADDR bd_addr)
5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL)) == NULL)
5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL;
5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_RMT_NAME_REQUEST_CANCEL);
5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL);
5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_features_req (UINT16 handle)
5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_RMT_FEATURES);
5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_ext_features (UINT16 handle, UINT8 page_num)
5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_RMT_EXT_FEATURES)) == NULL)
5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_EXT_FEATURES;
5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_RMT_EXT_FEATURES);
5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_RMT_EXT_FEATURES);
5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, page_num);
5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_ver_req (UINT16 handle)
6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_RMT_VERSION_INFO);
6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_rmt_clk_offset (UINT16 handle)
6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_RMT_CLOCK_OFFSET);
6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_lmp_handle (UINT16 handle)
6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_LMP_HANDLE);
6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_setup_esco_conn (UINT16 handle, UINT32 tx_bw,
6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    UINT32 rx_bw, UINT16 max_latency, UINT16 voice,
6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    UINT8 retrans_effort, UINT16 packet_types)
6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SETUP_ESCO)) == NULL)
6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SETUP_ESCO;
6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SETUP_ESCO_CONNECTION);
6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SETUP_ESCO);
6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, tx_bw);
6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, rx_bw);
6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, max_latency);
6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, voice);
6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, retrans_effort);
6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, packet_types);
6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_accept_esco_conn (BD_ADDR bd_addr, UINT32 tx_bw,
7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT32 rx_bw, UINT16 max_latency,
7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT16 content_fmt, UINT8 retrans_effort,
7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT16 packet_types)
7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_ACCEPT_ESCO)) == NULL)
7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ACCEPT_ESCO;
7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_ACCEPT_ESCO_CONNECTION);
7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_ACCEPT_ESCO);
7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, tx_bw);
7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, rx_bw);
7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, max_latency);
7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, content_fmt);
7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, retrans_effort);
7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, packet_types);
7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reject_esco_conn (BD_ADDR bd_addr, UINT8 reason)
7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_REJECT_ESCO)) == NULL)
7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REJECT_ESCO;
7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_REJECT_ESCO_CONNECTION);
7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_REJECT_ESCO);
7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, reason);
7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_hold_mode (UINT16 handle, UINT16 max_hold_period,
7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              UINT16 min_hold_period)
7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_HOLD_MODE)) == NULL)
7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_HOLD_MODE;
7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_HOLD_MODE);
7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_HOLD_MODE);
7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, max_hold_period);
7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, min_hold_period);
7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_sniff_mode (UINT16 handle, UINT16 max_sniff_period,
7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               UINT16 min_sniff_period, UINT16 sniff_attempt,
7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               UINT16 sniff_timeout)
7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SNIFF_MODE)) == NULL)
7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SNIFF_MODE;
7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SNIFF_MODE);
7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SNIFF_MODE);
7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, max_sniff_period);
7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, min_sniff_period);
8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, sniff_attempt);
8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, sniff_timeout);
8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_sniff_mode (UINT16 handle)
8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_EXIT_SNIFF_MODE);
8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return TRUE;
8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_park_mode (UINT16 handle, UINT16 beacon_max_interval,
8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              UINT16 beacon_min_interval)
8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_PARK_MODE)) == NULL)
8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PARK_MODE;
8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_PARK_MODE);
8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_PARK_MODE);
8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, beacon_max_interval);
8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, beacon_min_interval);
8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_park_mode (UINT16 handle)
8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_EXIT_PARK_MODE);
8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return TRUE;
8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_qos_setup (UINT16 handle, UINT8 flags, UINT8 service_type,
8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              UINT32 token_rate, UINT32 peak, UINT32 latency,
8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              UINT32 delay_var)
8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_QOS_SETUP)) == NULL)
8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_QOS_SETUP;
8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_QOS_SETUP);
8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_QOS_SETUP);
8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, flags);
8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, service_type);
8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, token_rate);
8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, peak);
8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, latency);
9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, delay_var);
9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_role_discovery (UINT16 handle)
9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_ROLE_DISCOVERY);
9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_switch_role (BD_ADDR bd_addr, UINT8 role)
9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SWITCH_ROLE)) == NULL)
9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SWITCH_ROLE;
9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SWITCH_ROLE);
9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SWITCH_ROLE);
9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, role);
9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_policy_set (UINT16 handle)
9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_POLICY_SETTINGS);
9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_policy_set (UINT16 handle, UINT16 settings)
9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_POLICY_SET)) == NULL)
9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_POLICY_SET;
9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_POLICY_SETTINGS);
9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_POLICY_SET);
9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, settings);
9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_def_policy_set (void)
9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_DEF_POLICY_SET)) == NULL)
10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_DEF_POLICY_SET;
10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_DEF_POLICY_SETTINGS);
10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_READ_DEF_POLICY_SET);
10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_def_policy_set (UINT16 settings)
10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET)) == NULL)
10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET;
10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_DEF_POLICY_SETTINGS);
10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET);
10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, settings);
10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_flow_specification(UINT16 handle, UINT8 flags, UINT8 flow_direct,
10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      UINT8  service_type, UINT32 token_rate,
10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      UINT32 token_bucket_size, UINT32 peak,
10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      UINT32 latency)
10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_FLOW_SPEC)) == NULL)
10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_FLOW_SPEC;
10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_FLOW_SPECIFICATION);
10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_FLOW_SPEC);
10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, flags);
10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, flow_direct);
10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, service_type);
10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, token_rate);
10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, token_bucket_size);
10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, peak);
10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, latency);
10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_event_mask(UINT8 local_controller_id, BT_EVENT_MASK event_mask)
10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SET_EVENT_MASK)) == NULL)
10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_EVENT_MASK;
10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SET_EVENT_MASK);
10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SET_EVENT_MASK);
10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY8_TO_STREAM (pp, event_mask);
10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (local_controller_id,  p);
10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_event_mask_page_2 (UINT8 local_controller_id, BT_EVENT_MASK event_mask)
10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SET_EVENT_MASK_PAGE_2)) == NULL)
10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_EVENT_MASK_PAGE_2;
11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SET_EVENT_MASK_PAGE_2);
11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SET_EVENT_MASK_PAGE_2);
11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY8_TO_STREAM (pp, event_mask);
11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (local_controller_id,  p);
11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reset (UINT8 local_controller_id)
11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_RESET)) == NULL)
11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RESET;
11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_RESET);
11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RESET);
11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (local_controller_id,  p);
11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* If calling from LMP_TEST or ScriptEngine, then send HCI command immediately */
11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (!defined (LMP_TEST) && !defined(BTISE))
11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (local_controller_id == LOCAL_BR_EDR_CONTROLLER_ID)
11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btm_acl_reset_paging ();
11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btm_acl_set_discing (FALSE);
11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_event_filter (UINT8 filt_type, UINT8 filt_cond_type,
11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT8 *filt_cond, UINT8 filt_cond_len)
11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Use buffer large enough to hold all sizes in this command */
11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(2 + filt_cond_len)) == NULL)
11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SET_EVENT_FILTER);
11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (filt_type)
11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p->len = (UINT16)(HCIC_PREAMBLE_SIZE + 2 + filt_cond_len);
11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM (pp, (UINT8)(2 + filt_cond_len));
11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM (pp, filt_type);
11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM (pp, filt_cond_type);
11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (filt_cond_type == HCI_FILTER_COND_DEVICE_CLASS)
11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            DEVCLASS_TO_STREAM (pp, filt_cond);
11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            filt_cond += DEV_CLASS_LEN;
11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            DEVCLASS_TO_STREAM (pp, filt_cond);
11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            filt_cond += DEV_CLASS_LEN;
11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            filt_cond_len -= (2 * DEV_CLASS_LEN);
11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if (filt_cond_type == HCI_FILTER_COND_BD_ADDR)
11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BDADDR_TO_STREAM (pp, filt_cond);
11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            filt_cond += BD_ADDR_LEN;
11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            filt_cond_len -= BD_ADDR_LEN;
11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (filt_cond_len)
11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ARRAY_TO_STREAM (pp, filt_cond, filt_cond_len);
11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p->len = (UINT16)(HCIC_PREAMBLE_SIZE + 1);
11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM (pp, 1);
11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM (pp, filt_type);
11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
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
11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_flush (UINT8 local_controller_id, UINT16 handle)
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
11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == 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
12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_FLUSH);
12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (local_controller_id,  p);
12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_pin_type (void)
12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_PIN_TYPE);
12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
12335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_pin_type (UINT8 type)
12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_PIN_TYPE);
12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, type);
12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_new_unit_key (void)
12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_NEW_UNIT_KEY)) == NULL)
12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_NEW_UNIT_KEY;
12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_CREATE_NEW_UNIT_KEY);
12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_NEW_UNIT_KEY);
12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_stored_key (BD_ADDR bd_addr, BOOLEAN read_all_flag)
12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_STORED_KEY)) == NULL)
12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_STORED_KEY;
12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_STORED_LINK_KEY);
12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_READ_STORED_KEY);
12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, read_all_flag);
12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_stored_key (UINT8 num_keys, BD_ADDR *bd_addr,
13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     LINK_KEY *link_key)
13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int j;
13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(1 + (num_keys * (BD_ADDR_LEN + LINK_KEY_LEN)))) == NULL)
13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + 1 + (num_keys * (BD_ADDR_LEN + LINK_KEY_LEN));
13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_STORED_LINK_KEY);
13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, p->len - HCIC_PREAMBLE_SIZE);
13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(num_keys > HCI_MAX_NUM_OF_LINK_KEYS_PER_CMMD)
13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_keys = HCI_MAX_NUM_OF_LINK_KEYS_PER_CMMD;
13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, num_keys);
13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (j = 0; j < num_keys; j++)
13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BDADDR_TO_STREAM  (pp, bd_addr[j]);
13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ARRAY16_TO_STREAM (pp, link_key[j]);
13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_delete_stored_key (BD_ADDR bd_addr, BOOLEAN delete_all_flag)
13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_DELETE_STORED_KEY)) == NULL)
13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_DELETE_STORED_KEY;
13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_DELETE_STORED_LINK_KEY);
13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_DELETE_STORED_KEY);
13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, delete_all_flag);
13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_change_name (BD_NAME name)
13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 len = strlen ((char *)name) + 1;
13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CHANGE_NAME)) == NULL)
13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_NAME;
13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_CHANGE_LOCAL_NAME);
13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CHANGE_NAME);
13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY_TO_STREAM (pp, name, len);
13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_name (void)
13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_LOCAL_NAME);
13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_conn_acc_tout (UINT8 local_controller_id)
14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_CONN_ACCEPT_TOUT);
14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (local_controller_id,  p);
14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_conn_acc_tout (UINT8 local_controller_id, UINT16 timeout)
14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM2)) == NULL)
14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM2;
14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_CONN_ACCEPT_TOUT);
14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM2);
14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, timeout);
14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (local_controller_id,  p);
14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_page_tout (void)
14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_PAGE_TOUT);
14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_page_tout (UINT16 timeout)
14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM2)) == NULL)
14685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM2;
14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_PAGE_TOUT);
14765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM2);
14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM  (pp, timeout);
14795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
14815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_scan_enable (void)
14855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
14875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
14915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_SCAN_ENABLE);
14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_scan_enable (UINT8 flag)
15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
15075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
15135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_SCAN_ENABLE);
15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
15195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, flag);
15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
15245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_pagescan_cfg(void)
15275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
15285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
15295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
15305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
15325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
15335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_PAGESCAN_CFG);
15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
15415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_pagescan_cfg(UINT16 interval, UINT16 window)
15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
15505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG)) == NULL)
15525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
15555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG;
15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
15585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_CFG);
15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG);
15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, interval);
15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, window);
15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
15665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
15675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_inqscan_cfg(void)
15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
15735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
15755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
15765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_INQUIRYSCAN_CFG);
15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_inqscan_cfg(UINT16 interval, UINT16 window)
15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG)) == NULL)
15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
15965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
15985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG;
16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_INQUIRYSCAN_CFG);
16035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG);
16045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, interval);
16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, window);
16075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
16105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_auth_enable (void)
16135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
16165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
16235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_AUTHENTICATION_ENABLE);
16265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
16275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
16295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
16305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_auth_enable (UINT8 flag)
16335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
16345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
16385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
16395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
16415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
16445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_AUTHENTICATION_ENABLE);
16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, flag);
16495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
16515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
16525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_encr_mode (void)
16555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
16565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
16575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
16585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
16615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_ENCRYPTION_MODE);
16685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
16695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
16715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
16725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_encr_mode (UINT8 mode)
16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
16765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
16775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
16785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
16815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
16835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
16865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_ENCRYPTION_MODE);
16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, mode);
16915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_dev_class(void)
16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
17005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
17075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_CLASS_OF_DEVICE);
17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_READ_CMD);
17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
17135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_dev_class(DEV_CLASS dev_class)
17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
17205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM3)) == NULL)
17225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM3;
17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_CLASS_OF_DEVICE);
17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM3);
17315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    DEVCLASS_TO_STREAM (pp, dev_class);
17335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_voice_settings(void)
17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
17425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
17455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
17475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
17505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_VOICE_SETTINGS);
17525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
17535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
17555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
17575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_voice_settings(UINT16 flags)
17595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
17605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
17615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM2)) == NULL)
17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
17675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM2;
17695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
17705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_VOICE_SETTINGS);
17725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM2);
17735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, flags);
17755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
17775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
17785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
17795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_auto_flush_tout (UINT16 handle)
17815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
17825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
17835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
17845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
17865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
17875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
17895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
17915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
17925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_AUTO_FLUSH_TOUT);
17945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
17955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
17975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
17995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
18005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_auto_flush_tout (UINT16 handle, UINT16 tout)
18035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
18045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
18055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT)) == NULL)
18085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
18095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
18115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT;
18135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
18145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_AUTO_FLUSH_TOUT);
18165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT);
18175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
18195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, tout);
18205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
18225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
18235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_num_bcast_xmit (void)
18265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
18275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
18285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
18295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
18315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
18325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
18345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
18365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
18375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_NUM_BCAST_REXMITS);
18395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
18405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
18425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
18435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_num_bcast_xmit (UINT8 num)
18465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
18475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
18485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
18495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
18515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
18525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
18545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
18565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
18575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_NUM_BCAST_REXMITS);
18595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
18605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, num);
18625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
18645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
18655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_hold_mode_act (void)
18685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
18695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
18705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
18715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
18735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
18745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
18765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
18785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
18795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_HOLD_MODE_ACTIVITY);
18815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
18825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
18845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
18855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_hold_mode_act (UINT8 flags)
18885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
18895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
18905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
18915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
18935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
18945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
18965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
18985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
18995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_HOLD_MODE_ACTIVITY);
19015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
19025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, flags);
19045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
19065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
19075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_tx_power (UINT16 handle, UINT8 type)
19105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
19115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
19125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
19135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_TX_POWER)) == NULL)
19155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
19165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
19185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_TX_POWER;
19205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
19215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_TRANSMIT_POWER_LEVEL);
19235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_READ_TX_POWER);
19245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
19265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, type);
19275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
19295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
19305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_sco_flow_enable (void)
19335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
19345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
19355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
19365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
19385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
19395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
19415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
19435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
19445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_SCO_FLOW_CTRL_ENABLE);
19465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
19475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
19495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
19505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_sco_flow_enable (UINT8 flag)
19535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
19545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
19555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
19565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
19585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
19595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
19615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
19635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
19645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_SCO_FLOW_CTRL_ENABLE);
19665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
19675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, flag);
19695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
19715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
19725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_host_flow_ctrl (UINT8 value)
19755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
19765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
19775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
19785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
19805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
19815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
19835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
19855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
19865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SET_HC_TO_HOST_FLOW_CTRL);
19885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
19895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, value);
19915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
19935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
19945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_host_buf_size (UINT16 acl_len, UINT8 sco_len,
19975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      UINT16 acl_num, UINT16 sco_num)
19985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
19995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
20005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
20015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SET_HOST_BUF_SIZE)) == NULL)
20035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
20045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
20065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_HOST_BUF_SIZE;
20085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
20095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_HOST_BUFFER_SIZE);
20115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SET_HOST_BUF_SIZE);
20125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, acl_len);
20145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, sco_len);
20155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, acl_num);
20165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, sco_num);
20175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
20195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
20205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_host_num_xmitted_pkts (UINT8 num_handles, UINT16 *handle,
20235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT16 *num_pkts)
20245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
20255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
20265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
20275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int j;
20285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(1 + (num_handles * 4))) == NULL)
20305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
20315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
20335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + 1 + (num_handles * 4);
20355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
20365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_HOST_NUM_PACKETS_DONE);
20385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, p->len - HCIC_PREAMBLE_SIZE);
20395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, num_handles);
20415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (j = 0; j < num_handles; j++)
20435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
20445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT16_TO_STREAM (pp, handle[j]);
20455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT16_TO_STREAM (pp, num_pkts[j]);
20465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
20475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
20495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
20505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_link_super_tout (UINT8 local_controller_id, UINT16 handle)
20535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
20545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
20555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
20565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
20585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
20595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
20615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
20635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
20645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_LINK_SUPER_TOUT);
20665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
20675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
20695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (local_controller_id,  p);
20715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
20725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_link_super_tout (UINT8 local_controller_id, UINT16 handle, UINT16 timeout)
20755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
20765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
20775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
20785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT)) == NULL)
20805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
20815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
20835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT;
20855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
20865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_LINK_SUPER_TOUT);
20885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT);
20895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
20915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, timeout);
20925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (local_controller_id,  p);
20945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
20955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_max_iac (void)
20985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
20995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
21005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
21015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
21035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
21045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
21065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
21085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
21095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_NUM_SUPPORTED_IAC);
21115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
21125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
21145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
21155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_cur_iac_lap (void)
21185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
21195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
21205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
21215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
21235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
21245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
21265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
21285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
21295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_CURRENT_IAC_LAP);
21315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
21325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
21345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
21355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_cur_iac_lap (UINT8 num_cur_iac, LAP * const iac_lap)
21385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
21395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
21405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
21415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int i;
21425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(1 + (LAP_LEN * num_cur_iac))) == NULL)
21445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
21455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
21475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + 1 + (LAP_LEN * num_cur_iac);
21495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
21505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_CURRENT_IAC_LAP);
21525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, p->len - HCIC_PREAMBLE_SIZE);
21535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, num_cur_iac);
21555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < num_cur_iac; i++)
21575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        LAP_TO_STREAM (pp, iac_lap[i]);
21585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
21605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
21615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_page_scan_per (void)
21645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
21655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
21665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
21675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
21695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
21705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
21725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
21745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
21755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_PAGESCAN_PERIOD_MODE);
21775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
21785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
21805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
21815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_page_scan_per (UINT8 mode)
21845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
21855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
21865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
21875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
21895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
21905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
21925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
21945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
21955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_PERIOD_MODE);
21975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
21985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, mode);
22005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
22025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
22035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_page_scan_mode (void)
22065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
22075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
22085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
22095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
22115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
22125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
22145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
22165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
22175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_PAGESCAN_MODE);
22195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
22205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
22225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
22235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_page_scan_mode (UINT8 mode)
22265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
22275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
22285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
22295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
22315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
22325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
22345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
22365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
22375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_MODE);
22395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
22405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, mode);
22425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
22445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
22455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************
22485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**    Lisbon Features
22495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************/
22505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_SSR_INCLUDED == TRUE
22515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_sniff_sub_rate(UINT16 handle, UINT16 max_lat,
22535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  UINT16 min_remote_lat, UINT16 min_local_lat)
22545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
22555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
22565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
22575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SNIFF_SUB_RATE)) == NULL)
22595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
22605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
22625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SNIFF_SUB_RATE;
22645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
22655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SNIFF_SUB_RATE);
22675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SNIFF_SUB_RATE);
22685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM  (pp, handle);
22705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM  (pp, max_lat);
22715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM  (pp, min_remote_lat);
22725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM  (pp, min_local_lat);
22735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
22755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
22765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_SSR_INCLUDED */
22785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_EIR_SERVER_INCLUDED == TRUE)
22805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/**** Extended Inquiry Response Commands ****/
22815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_ext_inquiry_response (void)
22825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
22835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
22845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
22855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
22875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
22885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
22905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
22925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
22935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_EXT_INQ_RESPONSE);
22955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
22965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
22985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
22995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btsnd_hcic_write_ext_inquiry_response (void *buffer, UINT8 fec_req)
23025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
23035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p = (BT_HDR *)buffer;
23045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp = (UINT8 *)(p + 1);
23055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_EXT_INQ_RESP;
23075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
23085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_EXT_INQ_RESPONSE);
23105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_EXT_INQ_RESP);
23115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, fec_req);
23135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
23155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif  /* BTM_EIR_SERVER_INCLUDED == TRUE */
23175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/**** Simple Pairing Commands ****/
23195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_simple_pairing_mode (UINT8 mode)
23205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
23215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
23225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
23235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_W_SIMP_PAIR)) == NULL)
23255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
23265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
23285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_W_SIMP_PAIR;
23305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
23315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_SIMPLE_PAIRING_MODE);
23335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_W_SIMP_PAIR);
23345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, mode);
23365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
23385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
23395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_simple_pairing_mode (void)
23425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
23435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
23445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
23455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_R_SIMP_PAIR)) == NULL)
23475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
23485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
23505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_SIMP_PAIR;
23525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
23535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_SIMPLE_PAIRING_MODE);
23555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_R_SIMP_PAIR);
23565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
23585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
23595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_simp_pair_debug_mode(UINT8 debug_mode)
23625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
23635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
23645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
23655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SIMP_PAIR_DBUG)) == NULL)
23675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
23685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
23705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SIMP_PAIR_DBUG;
23725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
23735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_SIMP_PAIR_DEBUG_MODE);
23755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SIMP_PAIR_DBUG);
23765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, debug_mode);
23785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
23805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
23815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_io_cap_req_reply (BD_ADDR bd_addr, UINT8 capability,
23845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                UINT8 oob_present, UINT8 auth_req)
23855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
23865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
23875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
23885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_IO_CAP_RESP)) == NULL)
23905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
23915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
23935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_IO_CAP_RESP;
23955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
23965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_IO_CAPABILITY_RESPONSE);
23985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_IO_CAP_RESP);
23995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
24015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, capability);
24025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, oob_present);
24035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, auth_req);
24045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
24065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
24075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
24085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_io_cap_req_neg_reply (BD_ADDR bd_addr, UINT8 err_code)
24105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
24115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
24125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
24135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY)) == NULL)
24155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
24165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
24185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY;
24205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
24215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_IO_CAP_REQ_NEG_REPLY);
24235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY);
24245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
24265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, err_code);
24275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
24295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
24305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
24315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_local_oob_data (void)
24335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
24345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
24355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
24365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_R_LOCAL_OOB)) == NULL)
24385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
24395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
24415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_LOCAL_OOB;
24435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
24445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_LOCAL_OOB_DATA);
24465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_R_LOCAL_OOB);
24475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
24495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
24505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
24515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_user_conf_reply (BD_ADDR bd_addr, BOOLEAN is_yes)
24535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
24545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
24555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
24565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_UCONF_REPLY)) == NULL)
24585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
24595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
24615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_UCONF_REPLY;
24635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
24645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!is_yes)
24665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
24675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Negative reply */
24685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT16_TO_STREAM (pp, HCI_USER_CONF_VALUE_NEG_REPLY);
24695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
24705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
24715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
24725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Confirmation */
24735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT16_TO_STREAM (pp, HCI_USER_CONF_REQUEST_REPLY);
24745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
24755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_UCONF_REPLY);
24775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
24795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
24815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
24825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
24835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_user_passkey_reply (BD_ADDR bd_addr, UINT32 value)
24855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
24865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
24875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
24885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_U_PKEY_REPLY)) == NULL)
24905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
24915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
24935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_U_PKEY_REPLY;
24955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
24965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_USER_PASSKEY_REQ_REPLY);
24985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_U_PKEY_REPLY);
24995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
25015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, value);
25025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
25045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
25055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
25065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_user_passkey_neg_reply (BD_ADDR bd_addr)
25085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
25095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
25105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
25115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY)) == NULL)
25135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
25145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
25165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY;
25185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
25195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_USER_PASSKEY_REQ_NEG_REPLY);
25215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY);
25225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
25245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
25265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
25275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
25285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rem_oob_reply (BD_ADDR bd_addr, UINT8 *p_c, UINT8 *p_r)
25305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
25315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
25325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
25335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_REM_OOB_REPLY)) == NULL)
25355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
25365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
25385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REM_OOB_REPLY;
25405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
25415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_REM_OOB_DATA_REQ_REPLY);
25435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_REM_OOB_REPLY);
25445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
25465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY16_TO_STREAM (pp, p_c);
25475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY16_TO_STREAM (pp, p_r);
25485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
25505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
25515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
25525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rem_oob_neg_reply (BD_ADDR bd_addr)
25545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
25555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
25565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
25575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY)) == NULL)
25595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
25605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
25625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY;
25645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
25655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_REM_OOB_DATA_REQ_NEG_REPLY);
25675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY);
25685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
25705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
25725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
25735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
25745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_inq_tx_power (void)
25775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
25785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
25795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
25805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_R_TX_POWER)) == NULL)
25825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
25835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
25855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_TX_POWER;
25875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
25885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_INQ_TX_POWER_LEVEL);
25905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_R_TX_POWER);
25915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
25935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
25945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
25955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_inq_tx_power (INT8 level)
25975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
25985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
25995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
26005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_W_TX_POWER)) == NULL)
26025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
26035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
26055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_W_TX_POWER;
26075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
26085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_INQ_TX_POWER_LEVEL);
26105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_W_TX_POWER);
26115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    INT8_TO_STREAM (pp, level);
26135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
26155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
26165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 /* currently not been used */
26195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_default_erroneous_data_rpt (void)
26205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
26225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
26235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_R_ERR_DATA_RPT)) == NULL)
26255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
26265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
26285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_ERR_DATA_RPT;
26305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
26315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_ERRONEOUS_DATA_RPT);
26335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_R_ERR_DATA_RPT);
26345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
26365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
26375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
26395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_default_erroneous_data_rpt (UINT8 flag)
26415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
26435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
26445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_W_ERR_DATA_RPT)) == NULL)
26465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
26475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
26495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_W_ERR_DATA_RPT;
26515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
26525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_ERRONEOUS_DATA_RPT);
26545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_W_ERR_DATA_RPT);
26555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, flag);
26575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
26595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
26605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_send_keypress_notif (BD_ADDR bd_addr, UINT8 notif)
26635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
26655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
26665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF)) == NULL)
26685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
26695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
26715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF;
26735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
26745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SEND_KEYPRESS_NOTIF);
26765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF);
26775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
26795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, notif);
26805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
26825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
26835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/**** end of Simple Pairing Commands ****/
26865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if L2CAP_NON_FLUSHABLE_PB_INCLUDED == TRUE
26885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_enhanced_flush (UINT16 handle, UINT8 packet_type)
26895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
26915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
26925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_ENHANCED_FLUSH)) == NULL)
26945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
26955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
26975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ENHANCED_FLUSH;
26995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
27005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_ENHANCED_FLUSH);
27015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_ENHANCED_FLUSH);
27025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
27045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, packet_type);
27055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
27075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
27085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
27095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
27105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_refresh_encryption_key (UINT16 handle)
27135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
27145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
27155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
27165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
27185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
27195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
27215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
27235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
27245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_REFRESH_ENCRYPTION_KEY);
27255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
27265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
27285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
27305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
27315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
27325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*************************
27335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** End of Lisbon Commands
27345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**************************/
27355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_local_ver (UINT8 local_controller_id)
27375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
27385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
27395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
27405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
27425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
27435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
27455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
27475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
27485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_LOCAL_VERSION_INFO);
27505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
27515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (local_controller_id,  p);
27535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
27545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
27555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_local_supported_cmds (UINT8 local_controller_id)
27575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
27585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
27595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
27605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
27625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
27635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
27655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
27675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
27685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_LOCAL_SUPPORTED_CMDS);
27705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
27715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (local_controller_id,  p);
27735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
27745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
27755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_local_features (void)
27775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
27785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
27795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
27805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
27825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
27835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
27855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
27875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
27885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_LOCAL_FEATURES);
27905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
27915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
27935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
27945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
27955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_local_ext_features (UINT8 page_num)
27975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
27985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
27995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
28005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_LOCAL_EXT_FEATURES)) == NULL)
28025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
28035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
28055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LOCAL_EXT_FEATURES;
28075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
28085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_LOCAL_EXT_FEATURES);
28105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_LOCAL_EXT_FEATURES);
28115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, page_num);
28135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
28155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
28165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
28175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_buffer_size (void)
28195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
28205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
28215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
28225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
28245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
28255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
28275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
28295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
28305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_BUFFER_SIZE);
28325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
28335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
28355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
28365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
28375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_country_code (void)
28395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
28405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
28415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
28425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
28445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
28455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
28475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
28495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
28505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_COUNTRY_CODE);
28525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
28535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
28555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
28565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
28575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_bd_addr (void)
28595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
28605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
28615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
28625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
28645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
28655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
28675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
28695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
28705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_BD_ADDR);
28725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
28735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
28755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
28765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
28775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_fail_contact_count (UINT8 local_controller_id, UINT16 handle)
28795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
28805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
28815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
28825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
28845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
28855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
28875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
28895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
28905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_FAILED_CONTACT_COUNT);
28925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
28935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
28955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (local_controller_id,  p);
28975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
28985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
28995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reset_fail_contact_count (UINT8 local_controller_id, UINT16 handle)
29015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
29025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
29035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
29045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
29065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
29075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
29095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
29115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
29125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_RESET_FAILED_CONTACT_COUNT);
29145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
29155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
29175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (local_controller_id,  p);
29195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
29205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_get_link_quality (UINT16 handle)
29235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
29245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
29255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
29265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
29285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
29295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
29315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
29335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
29345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_GET_LINK_QUALITY);
29365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
29375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
29395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
29415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
29425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_rssi (UINT16 handle)
29455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
29465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
29475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
29485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
29505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
29515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
29535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
29555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
29565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_RSSI);
29585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
29595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
29615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
29635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
29645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_loopback_mode (void)
29675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
29685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
29695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
29705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
29725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
29735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
29755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
29775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
29785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_LOOPBACK_MODE);
29805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
29815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
29835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
29845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_loopback_mode (UINT8 mode)
29875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
29885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
29895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
29905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
29925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
29935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
29955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
29975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
29985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_LOOPBACK_MODE);
30005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
30015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, mode);
30035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
30055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
30065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
30075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_enable_test_mode (void)
30095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
30105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
30115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
30125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
30145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
30155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
30175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
30195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
30205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_ENABLE_DEV_UNDER_TEST_MODE);
30225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
30235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
30255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
30265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
30275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_afh_channel_assessment_mode (UINT8 mode)
30295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
30305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
30315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
30325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
30345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
30355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
30375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
30395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
30405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_AFH_ASSESSMENT_MODE);
30425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
30435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, mode);
30455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
30475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
30485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
30495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_afh_channel_assessment_mode(void)
30515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
30525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
30535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
30545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
30565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
30575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
30595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
30615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
30625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_AFH_ASSESSMENT_MODE);
30645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
30655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
30675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
30685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
30695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_afh_channels (UINT8 first, UINT8 last)
30715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
30725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
30735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  *pp;
30745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  channels[10] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F};
30755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int    i;
30765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SET_AFH_CHANNELS)) == NULL)
30785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
30795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
30815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_AFH_CHANNELS;
30835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
30845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SET_AFH_CHANNELS);
30865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SET_AFH_CHANNELS);
30875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Just make sure that caller did not exceed 79 Bluetooth channels */
30895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((first <= last) && (last <= 78))
30905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
30915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (i = first; i <= last; i++)
30925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
30935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            int byte_offset = i / 8;
30945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            int bit_offset  = i % 8;
30955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            channels[byte_offset] &= ~(1 << bit_offset);
30965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
30975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
30985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < 10; i++)
30995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *pp++ = channels[i];
31005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
31025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
31035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_afh_host_channel_class (UINT8 *p_afhchannelmap)
31065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
31075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
31085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
31095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int    i;
31105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_SET_AFH_CHANNELS)) == NULL)
31125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
31135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
31155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_AFH_CHANNELS;
31175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
31185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SET_AFH_CHANNELS);
31205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SET_AFH_CHANNELS);
31215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Copy and convert */
31235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < 10; i++)
31245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *pp++ = p_afhchannelmap[9-i];
31255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
31275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
31285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_afh_channel_map (UINT16 handle)
31315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
31325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
31335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
31345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_CMD_HANDLE)) == NULL)
31365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
31375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
31395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
31415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
31425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_AFH_CH_MAP);
31445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
31455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
31475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
31495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
31505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_clock (UINT16 handle, UINT8 which_clock)
31535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
31545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
31555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
31565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CLOCK)) == NULL)
31585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
31595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
31615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CLOCK;
31635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
31645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_CLOCK);
31665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_READ_CLOCK);
31675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
31695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, which_clock);
31705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
31725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
31735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_inqscan_type(void)
31765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
31775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
31785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
31795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
31815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
31825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
31845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
31865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
31875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_INQSCAN_TYPE);
31895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
31905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
31925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
31935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_inqscan_type (UINT8 type)
31965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
31975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
31985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
31995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
32015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
32025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
32045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
32065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
32075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_INQSCAN_TYPE);
32095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
32105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, type);
32125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
32145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
32155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
32165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_inquiry_mode (void)
32185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
32195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
32205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
32215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
32235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
32245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
32265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
32285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
32295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_INQUIRY_MODE);
32315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
32325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
32345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
32355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
32365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_inquiry_mode (UINT8 mode)
32385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
32395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
32405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
32415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
32435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
32445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
32465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
32485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
32495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_INQUIRY_MODE);
32515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
32525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, mode);
32545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
32565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
32575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
32585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_pagescan_type (void)
32605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
32615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
32625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
32635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
32655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
32665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
32685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
32705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
32715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_PAGESCAN_TYPE);
32735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
32745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
32765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
32775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
32785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_pagescan_type (UINT8 type)
32805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
32815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
32825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
32835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_WRITE_PARAM1)) == NULL)
32855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
32865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
32885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
32905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
32915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_TYPE);
32935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
32945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, type);
32965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
32985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
32995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
33005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Must have room to store BT_HDR + max VSC length + callback pointer */
33025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if !defined (LMP_TEST) && (HCI_CMD_POOL_BUF_SIZE < 268)
33035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#error "HCI_CMD_POOL_BUF_SIZE must be larger than 268"
33045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
33055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btsnd_hcic_vendor_spec_cmd (void *buffer, UINT16 opcode, UINT8 len,
33075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 UINT8 *p_data, void *p_cmd_cplt_cback)
33085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
33095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p = (BT_HDR *)buffer;
33105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp = (UINT8 *)(p + 1);
33115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + len;
33135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = sizeof(void *);
33145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    *((void **)pp) = p_cmd_cplt_cback;  /* Store command complete callback in buffer */
33165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp += sizeof(void *);               /* Skip over callback pointer */
33175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_GRP_VENDOR_SPECIFIC | opcode);
33195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, len);
33205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY_TO_STREAM  (pp, p_data, len);
33215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
33235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
33245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btsnd_hcic_data (BT_HDR *p_buf, UINT16 len, UINT16 handle, UINT8 boundary, UINT8 broadcast)
33265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
33275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   *p;
33285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Higher layer should have left 4 bytes for us to fill the header */
33305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->offset -= 4;
33315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->len    += 4;
33325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Find the pointer to the beginning of the data */
33345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p = (UINT8 *)(p_buf + 1) + p_buf->offset;
33355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (p, handle | ((boundary & 3) << 12) | ((broadcast & 3) << 14));
33375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (p, len);
33385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    HCI_ACL_DATA_TO_LOWER (p_buf);
33405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
33415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_nop (void)
33435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
33445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p;
33455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp;
33465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_READ_CMD)) == NULL)
33485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
33495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp = (UINT8 *)(p + 1);
33515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
33535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
33545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_COMMAND_NONE);
33565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
33575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
33595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
33605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
33615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3362