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