hcicmds.c revision c980130963c4528655c27b7caa2d030181020fc1
15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 1999-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  This file contains function of the HCIC unit to format and send HCI
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  commands.
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h"
2795b74f252f534ec757aab1fc08e086e02b2cfe8dSharvil Nanavati#include "btcore/include/counter.h"
28a11035b5ecbc6cbd9da5bd707683504c47e2744ePavlin Radoslavov#include "bt_common.h"
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcidefs.h"
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcimsgs.h"
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcidefs.h"
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h"
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stddef.h>
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h>
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h"    /* Included for UIPC_* macro definitions */
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_inquiry(const LAP inq_lap, UINT8 duration, UINT8 response_cnt)
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
41c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
42c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_INQUIRY;
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_INQUIRY);
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_INQUIRY);
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    LAP_TO_STREAM   (pp, inq_lap);
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, duration);
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, response_cnt);
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_inq_cancel(void)
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
60c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
61c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_INQ_CANCEL;
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_INQUIRY_CANCEL);
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_INQ_CANCEL);
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_per_inq_mode (UINT16 max_period, UINT16 min_period,
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 const LAP inq_lap, UINT8 duration, UINT8 response_cnt)
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
75c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
76c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PER_INQ_MODE;
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_PERIODIC_INQUIRY_MODE);
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_PER_INQ_MODE);
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, max_period);
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, min_period);
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    LAP_TO_STREAM    (pp, inq_lap);
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, duration);
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, response_cnt);
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_per_inq (void)
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
96c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
97c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_EXIT_PER_INQ;
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_EXIT_PERIODIC_INQUIRY_MODE);
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_EXIT_PER_INQ);
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_create_conn(BD_ADDR dest, UINT16 packet_types,
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               UINT8 page_scan_rep_mode, UINT8 page_scan_mode,
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               UINT16 clock_offset, UINT8 allow_switch)
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
113c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
114c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BT_10A
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN;
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN - 1;
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_CREATE_CONNECTION);
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BT_10A
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CREATE_CONN);
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, (HCIC_PARAM_SIZE_CREATE_CONN - 1));
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, dest);
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, packet_types);
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, page_scan_rep_mode);
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, page_scan_mode);
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, clock_offset);
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if !defined (BT_10A)
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, allow_switch);
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btm_acl_paging (p, dest);
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_disconnect (UINT16 handle, UINT8 reason)
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
143c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
144c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_DISCONNECT;
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_DISCONNECT);
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_DISCONNECT);
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, reason);
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_SCO_INCLUDED == TRUE
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_add_SCO_conn (UINT16 handle, UINT16 packet_types)
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
161c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
162c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ADD_SCO_CONN;
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_ADD_SCO_CONNECTION);
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_ADD_SCO_CONN);
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, packet_types);
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_SCO_INCLUDED */
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_create_conn_cancel(BD_ADDR dest)
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
180c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
181c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CREATE_CONN_CANCEL;
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_CREATE_CONNECTION_CANCEL);
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CREATE_CONN_CANCEL);
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, dest);
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_accept_conn (BD_ADDR dest, UINT8 role)
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
197c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
198c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ACCEPT_CONN;
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_ACCEPT_CONNECTION_REQUEST);
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_ACCEPT_CONN);
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, dest);
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, role);
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
208cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton    counter_add("hci.conn.accept", 1);
209cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reject_conn (BD_ADDR dest, UINT8 reason)
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
216c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
217c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REJECT_CONN;
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_REJECT_CONNECTION_REQUEST);
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_REJECT_CONN);
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, dest);
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, reason);
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
228cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton    counter_add("hci.conn.reject", 1);
229cccf02fadb2dd4dceb22f2d58ed5840b0ef1860eChris Manton
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_link_key_req_reply (BD_ADDR bd_addr, LINK_KEY link_key)
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
236c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
237c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY;
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM  (pp, HCI_LINK_KEY_REQUEST_REPLY);
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM   (pp, HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY);
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM  (pp, bd_addr);
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY16_TO_STREAM (pp, link_key);
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_link_key_neg_reply (BD_ADDR bd_addr)
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
254c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
255c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY;
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_LINK_KEY_REQUEST_NEG_REPLY);
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_LINK_KEY_NEG_REPLY);
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_pin_code_req_reply (BD_ADDR bd_addr, UINT8 pin_code_len,
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    PIN_CODE pin_code)
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
272c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
273c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
274c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    int i;
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY;
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM  (pp, HCI_PIN_CODE_REQUEST_REPLY);
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM   (pp, HCIC_PARAM_SIZE_PIN_CODE_REQ_REPLY);
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM  (pp, bd_addr);
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM   (pp, pin_code_len);
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < pin_code_len; i++)
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *pp++ = *pin_code++;
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (; i < PIN_CODE_LEN; i++)
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *pp++ = 0;
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_pin_code_neg_reply (BD_ADDR bd_addr)
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
298c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
299c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY;
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_PIN_CODE_REQUEST_NEG_REPLY);
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_PIN_CODE_NEG_REPLY);
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_change_conn_type (UINT16 handle, UINT16 packet_types)
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
315c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
316c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_CONN_TYPE;
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_CHANGE_CONN_PACKET_TYPE);
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CHANGE_CONN_TYPE);
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, packet_types);
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_auth_request (UINT16 handle)
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
333c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
334c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_AUTHENTICATION_REQUESTED);
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_conn_encrypt (UINT16 handle, BOOLEAN enable)
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
350c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
351c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_CONN_ENCRYPT;
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SET_CONN_ENCRYPTION);
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SET_CONN_ENCRYPT);
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, enable);
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_name_req (BD_ADDR bd_addr, UINT8 page_scan_rep_mode,
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 UINT8 page_scan_mode, UINT16 clock_offset)
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
369c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
370c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_NAME_REQ;
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_RMT_NAME_REQUEST);
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_RMT_NAME_REQ);
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, page_scan_rep_mode);
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, page_scan_mode);
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, clock_offset);
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btm_acl_paging (p, bd_addr);
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_name_req_cancel (BD_ADDR bd_addr)
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
389c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
390c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL;
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_RMT_NAME_REQUEST_CANCEL);
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_RMT_NAME_REQ_CANCEL);
3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_features_req (UINT16 handle)
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
406c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
407c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_RMT_FEATURES);
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_ext_features (UINT16 handle, UINT8 page_num)
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
423c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
424c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RMT_EXT_FEATURES;
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_RMT_EXT_FEATURES);
4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_RMT_EXT_FEATURES);
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, page_num);
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_rmt_ver_req (UINT16 handle)
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
441c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
442c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_RMT_VERSION_INFO);
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_rmt_clk_offset (UINT16 handle)
4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
458c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
459c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_RMT_CLOCK_OFFSET);
4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_lmp_handle (UINT16 handle)
4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
475c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
476c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_LMP_HANDLE);
4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_setup_esco_conn (UINT16 handle, UINT32 tx_bw,
4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    UINT32 rx_bw, UINT16 max_latency, UINT16 voice,
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    UINT8 retrans_effort, UINT16 packet_types)
4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
494c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
495c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SETUP_ESCO;
4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SETUP_ESCO_CONNECTION);
5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SETUP_ESCO);
5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, tx_bw);
5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, rx_bw);
5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, max_latency);
5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, voice);
5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, retrans_effort);
5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, packet_types);
5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_accept_esco_conn (BD_ADDR bd_addr, UINT32 tx_bw,
5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT32 rx_bw, UINT16 max_latency,
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT16 content_fmt, UINT8 retrans_effort,
5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT16 packet_types)
5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
520c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
521c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ACCEPT_ESCO;
5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_ACCEPT_ESCO_CONNECTION);
5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_ACCEPT_ESCO);
5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, tx_bw);
5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, rx_bw);
5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, max_latency);
5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, content_fmt);
5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, retrans_effort);
5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, packet_types);
5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_reject_esco_conn (BD_ADDR bd_addr, UINT8 reason)
5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
543c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
544c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REJECT_ESCO;
5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_REJECT_ESCO_CONNECTION);
5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_REJECT_ESCO);
5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, reason);
5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_hold_mode (UINT16 handle, UINT16 max_hold_period,
5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              UINT16 min_hold_period)
5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
562c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
563c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_HOLD_MODE;
5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_HOLD_MODE);
5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_HOLD_MODE);
5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, max_hold_period);
5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, min_hold_period);
5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_sniff_mode (UINT16 handle, UINT16 max_sniff_period,
5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               UINT16 min_sniff_period, UINT16 sniff_attempt,
5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               UINT16 sniff_timeout)
5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
583c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
584c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SNIFF_MODE;
5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SNIFF_MODE);
5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SNIFF_MODE);
5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, max_sniff_period);
5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, min_sniff_period);
5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, sniff_attempt);
5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, sniff_timeout);
5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_sniff_mode (UINT16 handle)
6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
604c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
605c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_EXIT_SNIFF_MODE);
6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return TRUE;
6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_park_mode (UINT16 handle, UINT16 beacon_max_interval,
6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              UINT16 beacon_min_interval)
6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
622c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
623c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_PARK_MODE;
6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_PARK_MODE);
6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_PARK_MODE);
6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, beacon_max_interval);
6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, beacon_min_interval);
6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_exit_park_mode (UINT16 handle)
6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
641c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
642c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_EXIT_PARK_MODE);
6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return TRUE;
6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_qos_setup (UINT16 handle, UINT8 flags, UINT8 service_type,
6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              UINT32 token_rate, UINT32 peak, UINT32 latency,
6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              UINT32 delay_var)
6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
660c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
661c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_QOS_SETUP;
6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_QOS_SETUP);
6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_QOS_SETUP);
6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, flags);
6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, service_type);
6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, token_rate);
6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, peak);
6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, latency);
6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32_TO_STREAM (pp, delay_var);
6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_switch_role (BD_ADDR bd_addr, UINT8 role)
6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
683c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
684c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SWITCH_ROLE;
6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SWITCH_ROLE);
6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SWITCH_ROLE);
6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, role);
6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_policy_set (UINT16 handle, UINT16 settings)
7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
701c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
702c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_POLICY_SET;
7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_POLICY_SETTINGS);
7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_POLICY_SET);
7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, settings);
7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_def_policy_set (UINT16 settings)
7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
718c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
719c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET;
7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_DEF_POLICY_SETTINGS);
7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_DEF_POLICY_SET);
7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, settings);
7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_set_event_filter (UINT8 filt_type, UINT8 filt_cond_type,
7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT8 *filt_cond, UINT8 filt_cond_len)
7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
735c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
736c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_SET_EVENT_FILTER);
7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (filt_type)
7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p->len = (UINT16)(HCIC_PREAMBLE_SIZE + 2 + filt_cond_len);
7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM (pp, (UINT8)(2 + filt_cond_len));
7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM (pp, filt_type);
7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM (pp, filt_cond_type);
7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (filt_cond_type == HCI_FILTER_COND_DEVICE_CLASS)
7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            DEVCLASS_TO_STREAM (pp, filt_cond);
7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            filt_cond += DEV_CLASS_LEN;
7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            DEVCLASS_TO_STREAM (pp, filt_cond);
7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            filt_cond += DEV_CLASS_LEN;
7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            filt_cond_len -= (2 * DEV_CLASS_LEN);
7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if (filt_cond_type == HCI_FILTER_COND_BD_ADDR)
7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BDADDR_TO_STREAM (pp, filt_cond);
7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            filt_cond += BD_ADDR_LEN;
7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            filt_cond_len -= BD_ADDR_LEN;
7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (filt_cond_len)
7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ARRAY_TO_STREAM (pp, filt_cond, filt_cond_len);
7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p->len = (UINT16)(HCIC_PREAMBLE_SIZE + 1);
7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM (pp, 1);
7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM (pp, filt_type);
7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_pin_type (UINT8 type)
7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
784c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
785c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_PIN_TYPE);
7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, type);
7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_delete_stored_key (BD_ADDR bd_addr, BOOLEAN delete_all_flag)
8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
801c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
802c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_DELETE_STORED_KEY;
8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_DELETE_STORED_LINK_KEY);
8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_DELETE_STORED_KEY);
8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bd_addr);
8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, delete_all_flag);
8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_change_name (BD_NAME name)
8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
819c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
820c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
821c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT16 len = strlen((char *)name) + 1;
8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
823e14a66a5fd4f05817dc7716ca9087678dd220edaSharvil Nanavati    memset(pp, 0, HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_NAME);
8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CHANGE_NAME;
8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_CHANGE_LOCAL_NAME);
8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CHANGE_NAME);
8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
831ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (len > HCIC_PARAM_SIZE_CHANGE_NAME)
832ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        len = HCIC_PARAM_SIZE_CHANGE_NAME;
833ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY_TO_STREAM (pp, name, len);
8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_read_name (void)
8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
842c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
843c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_READ_LOCAL_NAME);
8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
855a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_page_tout (UINT16 timeout)
8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
857c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
858c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM2;
8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
863a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_WRITE_PAGE_TOUT);
8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM2);
8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
866a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM  (pp, timeout);
8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
868a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
872a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_scan_enable (UINT8 flag)
8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
874c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
875c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
877a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
880a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_WRITE_SCAN_ENABLE);
881a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
882a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
883a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, flag);
8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
889a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_pagescan_cfg(UINT16 interval, UINT16 window)
8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
891c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
892c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
894a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG;
8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
897a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_CFG);
898a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PAGESCAN_CFG);
8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
900a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, interval);
901a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, window);
9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
907a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inqscan_cfg(UINT16 interval, UINT16 window)
9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
909c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
910c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
912a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG;
9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
915a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_WRITE_INQUIRYSCAN_CFG);
916a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_INQSCAN_CFG);
917a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
918a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, interval);
919a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, window);
9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
925a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_auth_enable (UINT8 flag)
9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
927c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
928c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
933a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_WRITE_AUTHENTICATION_ENABLE);
9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
936a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM (pp, flag);
9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
942a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_dev_class(DEV_CLASS dev_class)
9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
944c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
945c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
947a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM3;
9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
950a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_WRITE_CLASS_OF_DEVICE);
951a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM3);
952a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
953a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    DEVCLASS_TO_STREAM (pp, dev_class);
9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
959a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_voice_settings(UINT16 flags)
9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
961c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
962c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
964a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM2;
9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
967a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_WRITE_VOICE_SETTINGS);
968a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_WRITE_PARAM2);
9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
970a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, flags);
9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
976a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_auto_flush_tout (UINT16 handle, UINT16 tout)
9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
978c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
979c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
981a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT;
9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
984a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_WRITE_AUTO_FLUSH_TOUT);
985a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_AUTO_FLUSH_TOUT);
986a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
987a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, handle);
988a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, tout);
9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
994a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_tx_power (UINT16 handle, UINT8 type)
9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
996c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
997c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
999a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_TX_POWER;
10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1002a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_READ_TRANSMIT_POWER_LEVEL);
1003a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_READ_TX_POWER);
10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1005a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, handle);
1006a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, type);
10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1012a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_host_num_xmitted_pkts (UINT8 num_handles, UINT16 *handle,
1013a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson                                          UINT16 *num_pkts)
10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1015c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1016c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1018a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + 1 + (num_handles * 4);
10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1021a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_HOST_NUM_PACKETS_DONE);
1022a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, p->len - HCIC_PREAMBLE_SIZE);
1023a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
1024a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM (pp, num_handles);
1025a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
1026c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    for (int i = 0; i < num_handles; i++) {
1027c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov        UINT16_TO_STREAM(pp, handle[i]);
1028c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov        UINT16_TO_STREAM(pp, num_pkts[i]);
1029a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    }
10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1035a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_link_super_tout (UINT8 local_controller_id, UINT16 handle, UINT16 timeout)
10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1037c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1038c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1040a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT;
10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1043a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_WRITE_LINK_SUPER_TOUT);
1044a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_LINK_SUPER_TOUT);
10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1046a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, handle);
1047a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, timeout);
10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1049a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    btu_hcif_send_cmd (local_controller_id,  p);
10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1053a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_cur_iac_lap (UINT8 num_cur_iac, LAP * const iac_lap)
10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1055c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1056c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1058a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + 1 + (LAP_LEN * num_cur_iac);
10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1061a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_WRITE_CURRENT_IAC_LAP);
1062a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, p->len - HCIC_PREAMBLE_SIZE);
10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1064a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM (pp, num_cur_iac);
10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1066c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    for (int i = 0; i < num_cur_iac; i++)
1067a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson        LAP_TO_STREAM (pp, iac_lap[i]);
10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1073a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/******************************************
1074a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson**    Lisbon Features
1075a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson*******************************************/
1076a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#if BTM_SSR_INCLUDED == TRUE
10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1078a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_sniff_sub_rate(UINT16 handle, UINT16 max_lat,
1079a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson                                  UINT16 min_remote_lat, UINT16 min_local_lat)
10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1081c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1082c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1084a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SNIFF_SUB_RATE;
10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1087a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_SNIFF_SUB_RATE);
1088a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SNIFF_SUB_RATE);
10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1090a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM  (pp, handle);
1091a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM  (pp, max_lat);
1092a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM  (pp, min_remote_lat);
1093a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM  (pp, min_local_lat);
10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1098a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#endif /* BTM_SSR_INCLUDED */
10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1100a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/**** Extended Inquiry Response Commands ****/
1101a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnsonvoid btsnd_hcic_write_ext_inquiry_response (void *buffer, UINT8 fec_req)
11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1103a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    BT_HDR *p = (BT_HDR *)buffer;
1104a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8 *pp = (UINT8 *)(p + 1);
11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1106a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_EXT_INQ_RESP;
11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1109a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_WRITE_EXT_INQ_RESPONSE);
1110a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_EXT_INQ_RESP);
11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1112a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM (pp, fec_req);
11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1117a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_io_cap_req_reply (BD_ADDR bd_addr, UINT8 capability,
1118a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson                                UINT8 oob_present, UINT8 auth_req)
11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1120c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1121c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1123a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_IO_CAP_RESP;
11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1126899b77140675a157dba034e98527ab546bc9ac35Mudumba Ananth    UINT16_TO_STREAM (pp, HCI_IO_CAPABILITY_REQUEST_REPLY);
1127a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_IO_CAP_RESP);
1128a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
1129a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    BDADDR_TO_STREAM (pp, bd_addr);
1130a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, capability);
1131a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, oob_present);
1132a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, auth_req);
11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1138a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_io_cap_req_neg_reply (BD_ADDR bd_addr, UINT8 err_code)
11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1140c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1141c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1143a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY;
11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1146a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_IO_CAP_REQ_NEG_REPLY);
1147a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_IO_CAP_NEG_REPLY);
11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1149a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    BDADDR_TO_STREAM (pp, bd_addr);
1150a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, err_code);
11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1152a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1156a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_local_oob_data (void)
11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1158c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1159c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1161a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_LOCAL_OOB;
11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1164a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_READ_LOCAL_OOB_DATA);
1165a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_R_LOCAL_OOB);
11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1167a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1171a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_conf_reply (BD_ADDR bd_addr, BOOLEAN is_yes)
11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1173c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1174c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1176a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_UCONF_REPLY;
11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1179a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    if (!is_yes)
1180a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    {
1181a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson        /* Negative reply */
1182a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson        UINT16_TO_STREAM (pp, HCI_USER_CONF_VALUE_NEG_REPLY);
1183a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    }
1184a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    else
1185a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    {
1186a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson        /* Confirmation */
1187a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson        UINT16_TO_STREAM (pp, HCI_USER_CONF_REQUEST_REPLY);
1188a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    }
11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1190a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_UCONF_REPLY);
1191a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
1192a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    BDADDR_TO_STREAM (pp, bd_addr);
11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1198a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_passkey_reply (BD_ADDR bd_addr, UINT32 value)
11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1200c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1201c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1203a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_U_PKEY_REPLY;
12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1206a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_USER_PASSKEY_REQ_REPLY);
1207a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_U_PKEY_REPLY);
12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1209a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    BDADDR_TO_STREAM (pp, bd_addr);
1210a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT32_TO_STREAM (pp, value);
12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1216a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_user_passkey_neg_reply (BD_ADDR bd_addr)
12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1218c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1219c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1221a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY;
12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1224a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_USER_PASSKEY_REQ_NEG_REPLY);
1225a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_U_PKEY_NEG_REPLY);
1226a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
1227a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    BDADDR_TO_STREAM (pp, bd_addr);
12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1233a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_rem_oob_reply (BD_ADDR bd_addr, UINT8 *p_c, UINT8 *p_r)
12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1235c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1236c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1238a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REM_OOB_REPLY;
12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1241a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_REM_OOB_DATA_REQ_REPLY);
1242a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_REM_OOB_REPLY);
12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1244a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    BDADDR_TO_STREAM (pp, bd_addr);
1245a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    ARRAY16_TO_STREAM (pp, p_c);
1246a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    ARRAY16_TO_STREAM (pp, p_r);
12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1252a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_rem_oob_neg_reply (BD_ADDR bd_addr)
12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1254c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1255c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1257a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY;
12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1260a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_REM_OOB_DATA_REQ_NEG_REPLY);
1261a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_REM_OOB_NEG_REPLY);
1262a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
1263a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    BDADDR_TO_STREAM (pp, bd_addr);
12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1269a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
1270a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_inq_tx_power (void)
12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1272c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1273c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1275a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_R_TX_POWER;
12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1278a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_READ_INQ_TX_POWER_LEVEL);
1279a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_R_TX_POWER);
12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1285a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_send_keypress_notif (BD_ADDR bd_addr, UINT8 notif)
12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1287c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1288c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1290a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF;
12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1293a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_SEND_KEYPRESS_NOTIF);
1294a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SEND_KEYPRESS_NOTIF);
12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1296a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    BDADDR_TO_STREAM (pp, bd_addr);
1297a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM (pp, notif);
12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1303a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/**** end of Simple Pairing Commands ****/
1304a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
1305a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#if L2CAP_NON_FLUSHABLE_PB_INCLUDED == TRUE
1306a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_enhanced_flush (UINT16 handle, UINT8 packet_type)
13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1308c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1309c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1311a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ENHANCED_FLUSH;
13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1313a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_ENHANCED_FLUSH);
1314a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_ENHANCED_FLUSH);
13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1316a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, handle);
1317a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, packet_type);
13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1322a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson#endif
1323a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
1324a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson/*************************
1325a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson** End of Lisbon Commands
1326a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson**************************/
13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1328a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_get_link_quality (UINT16 handle)
13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1330c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1331c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1336a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_GET_LINK_QUALITY);
13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1345a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_read_rssi (UINT16 handle)
13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1347c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1348c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1350a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CMD_HANDLE;
13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1353a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_READ_RSSI);
1354a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CMD_HANDLE);
13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1362a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_enable_test_mode (void)
13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1364c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1365c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1370a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_ENABLE_DEV_UNDER_TEST_MODE);
13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_READ_CMD);
13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1377a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inqscan_type (UINT8 type)
13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1379c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1380c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1385a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_WRITE_INQSCAN_TYPE);
13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1388a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, type);
13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1394a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach JohnsonBOOLEAN btsnd_hcic_write_inquiry_mode (UINT8 mode)
13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1396c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1397c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1399a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1402a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT16_TO_STREAM (pp, HCI_WRITE_INQUIRY_MODE);
1403a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
1404a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson
1405a952e80711c1d87c9e30a0e5c76a22b0aab7ed7fZach Johnson    UINT8_TO_STREAM  (pp, mode);
14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_write_pagescan_type (UINT8 type)
14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1413c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
1414c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_WRITE_PAGESCAN_TYPE);
14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, type);
14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Must have room to store BT_HDR + max VSC length + callback pointer */
142903566c28a5b0d9be32cc3ad0faab1032f1fe1c26Pavlin Radoslavov#if (HCI_CMD_BUF_SIZE < 268)
143003566c28a5b0d9be32cc3ad0faab1032f1fe1c26Pavlin Radoslavov#error "HCI_CMD_BUF_SIZE must be larger than 268"
14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btsnd_hcic_vendor_spec_cmd (void *buffer, UINT16 opcode, UINT8 len,
14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 UINT8 *p_data, void *p_cmd_cplt_cback)
14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p = (BT_HDR *)buffer;
14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *pp = (UINT8 *)(p + 1);
14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + len;
14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = sizeof(void *);
14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    *((void **)pp) = p_cmd_cplt_cback;  /* Store command complete callback in buffer */
14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp += sizeof(void *);               /* Skip over callback pointer */
14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_GRP_VENDOR_SPECIFIC | opcode);
14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, len);
14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY_TO_STREAM  (pp, p_data, len);
14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1451