15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 1999-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  This file contains function of the HCIC unit to format and send HCI
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  commands.
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h"
27a11035b5ecbc6cbd9da5bd707683504c47e2744ePavlin Radoslavov#include "bt_common.h"
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcidefs.h"
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcimsgs.h"
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "hcidefs.h"
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h"
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stddef.h>
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h>
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined BLE_INCLUDED) && (BLE_INCLUDED == TRUE)
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_set_local_used_feat (UINT8 feat_set[8])
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
40c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
41c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_USED_FEAT_CMD;
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_WRITE_LOCAL_SPT_FEAT);
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY_TO_STREAM (pp, feat_set, HCIC_PARAM_SIZE_SET_USED_FEAT_CMD);
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_set_random_addr (BD_ADDR random_bda)
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
55c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
56c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_RANDOM_ADDR_CMD;
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_WRITE_RANDOM_ADDR);
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp,  HCIC_PARAM_SIZE_WRITE_RANDOM_ADDR_CMD);
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, random_bda);
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_write_adv_params (UINT16 adv_int_min, UINT16 adv_int_max,
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       UINT8 adv_type, UINT8 addr_type_own,
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       UINT8 addr_type_dir, BD_ADDR direct_bda,
73444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji                                       UINT8 channel_map, UINT8 adv_filter_policy)
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_BLE_WRITE_ADV_PARAMS ;
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_WRITE_ADV_PARAMS);
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_WRITE_ADV_PARAMS );
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, adv_int_min);
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, adv_int_max);
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, adv_type);
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, addr_type_own);
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, addr_type_dir);
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, direct_bda);
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, channel_map);
91444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8_TO_STREAM (pp, adv_filter_policy);
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_read_adv_chnl_tx_power (void)
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
98c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
99c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_READ_ADV_CHNL_TX_POWER);
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_READ_CMD);
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_set_adv_data (UINT8 data_len, UINT8 *p_data)
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
114c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
115c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_WRITE_ADV_DATA + 1;
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_WRITE_ADV_DATA);
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_WRITE_ADV_DATA + 1);
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(pp, 0, HCIC_PARAM_SIZE_BLE_WRITE_ADV_DATA);
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data != NULL && data_len > 0)
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (data_len > HCIC_PARAM_SIZE_BLE_WRITE_ADV_DATA)
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            data_len = HCIC_PARAM_SIZE_BLE_WRITE_ADV_DATA;
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM (pp, data_len);
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ARRAY_TO_STREAM (pp, p_data, data_len);
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_set_scan_rsp_data (UINT8 data_len, UINT8 *p_scan_rsp)
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
140c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
141c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_WRITE_SCAN_RSP + 1;
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_WRITE_SCAN_RSP_DATA);
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_WRITE_SCAN_RSP + 1);
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(pp, 0, HCIC_PARAM_SIZE_BLE_WRITE_SCAN_RSP);
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_scan_rsp != NULL && data_len > 0)
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (data_len > HCIC_PARAM_SIZE_BLE_WRITE_SCAN_RSP )
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            data_len = HCIC_PARAM_SIZE_BLE_WRITE_SCAN_RSP;
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM (pp, data_len);
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ARRAY_TO_STREAM (pp, p_scan_rsp, data_len);
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_set_adv_enable (UINT8 adv_enable)
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
169c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
170c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_ADV_ENABLE;
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_WRITE_ADV_ENABLE);
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_ADV_ENABLE);
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, adv_enable);
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_set_scan_params (UINT8 scan_type,
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT16 scan_int, UINT16 scan_win,
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          UINT8 addr_type_own, UINT8 scan_filter_policy)
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
187c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
188c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_WRITE_SCAN_PARAM;
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_WRITE_SCAN_PARAMS);
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_WRITE_SCAN_PARAM);
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, scan_type);
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, scan_int);
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, scan_win);
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, addr_type_own);
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, scan_filter_policy);
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_set_scan_enable (UINT8 scan_enable, UINT8 duplicate)
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
208c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
209c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_WRITE_SCAN_ENABLE;
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_WRITE_SCAN_ENABLE);
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_WRITE_SCAN_ENABLE);
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, scan_enable);
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, duplicate);
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* link layer connection management commands */
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_create_ll_conn (UINT16 scan_int, UINT16 scan_win,
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       UINT8 init_filter_policy,
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       UINT8 addr_type_peer, BD_ADDR bda_peer,
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       UINT8 addr_type_own,
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       UINT16 conn_int_min, UINT16 conn_int_max,
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       UINT16 conn_latency, UINT16 conn_timeout,
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       UINT16 min_ce_len, UINT16 max_ce_len)
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
233c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
234c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_CREATE_LL_CONN;
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_CREATE_LL_CONN);
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_CREATE_LL_CONN);
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, scan_int);
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, scan_win);
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, init_filter_policy);
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, addr_type_peer);
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bda_peer);
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, addr_type_own);
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, conn_int_min);
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, conn_int_max);
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, conn_latency);
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, conn_timeout);
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, min_ce_len);
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, max_ce_len);
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_create_conn_cancel (void)
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
264c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
265c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_CREATE_CONN_CANCEL;
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_CREATE_CONN_CANCEL);
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_CREATE_CONN_CANCEL);
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_clear_white_list (void)
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
279c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
280c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_CLEAR_WHITE_LIST;
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_CLEAR_WHITE_LIST);
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_CLEAR_WHITE_LIST);
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_add_white_list (UINT8 addr_type, BD_ADDR bda)
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
294c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
295c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_ADD_WHITE_LIST;
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_ADD_WHITE_LIST);
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_ADD_WHITE_LIST);
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, addr_type);
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bda);
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_remove_from_white_list (UINT8 addr_type, BD_ADDR bda)
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
312c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
313c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REMOVE_WHITE_LIST;
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_REMOVE_WHITE_LIST);
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_REMOVE_WHITE_LIST);
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM (pp, addr_type);
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BDADDR_TO_STREAM (pp, bda);
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_upd_ll_conn_params (UINT16 handle,
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                           UINT16 conn_int_min, UINT16 conn_int_max,
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                           UINT16 conn_latency, UINT16 conn_timeout,
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                           UINT16 min_ce_len, UINT16 max_ce_len)
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_BLE_UPD_LL_CONN_PARAMS;
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_UPD_LL_CONN_PARAMS);
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_UPD_LL_CONN_PARAMS);
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    UINT16_TO_STREAM (pp, conn_int_min);
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, conn_int_max);
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, conn_latency);
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, conn_timeout);
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, min_ce_len);
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, max_ce_len);
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_set_host_chnl_class (UINT8  chnl_map[HCIC_BLE_CHNL_MAP_SIZE])
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
357c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
358c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_SET_HOST_CHNL_CLASS;
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_SET_HOST_CHNL_CLASS);
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_SET_HOST_CHNL_CLASS);
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY_TO_STREAM (pp, chnl_map, HCIC_BLE_CHNL_MAP_SIZE);
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_read_chnl_map (UINT16 handle)
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
374c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
375c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CHNL_MAP;
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_READ_CHNL_MAP);
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_READ_CHNL_MAP);
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_read_remote_feat (UINT16 handle)
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
391c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
392c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_READ_REMOTE_FEAT;
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_READ_REMOTE_FEAT);
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_READ_REMOTE_FEAT);
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* security management commands */
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_encrypt (UINT8 *key, UINT8 key_len,
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                UINT8 *plain_text, UINT8 pt_len,
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                void *p_cmd_cplt_cback)
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
411c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
412c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_ENCRYPT;
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = sizeof(void *);
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    *((void **)pp) = p_cmd_cplt_cback;  /* Store command complete callback in buffer */
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp += sizeof(void *);               /* Skip over callback pointer */
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_ENCRYPT);
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_ENCRYPT);
4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(pp, 0, HCIC_PARAM_SIZE_BLE_ENCRYPT);
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (key_len > HCIC_BLE_ENCRYT_KEY_SIZE) key_len = HCIC_BLE_ENCRYT_KEY_SIZE;
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (pt_len > HCIC_BLE_ENCRYT_KEY_SIZE) pt_len = HCIC_BLE_ENCRYT_KEY_SIZE;
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY_TO_STREAM (pp, key, key_len);
4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp += (HCIC_BLE_ENCRYT_KEY_SIZE - key_len);
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY_TO_STREAM (pp, plain_text, pt_len);
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_rand (void *p_cmd_cplt_cback)
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
439c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
440c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_RAND;
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = sizeof(void *);
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    *((void **)pp) = p_cmd_cplt_cback;  /* Store command complete callback in buffer */
4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    pp += sizeof(void *);               /* Skip over callback pointer */
4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_RAND);
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_RAND);
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_start_enc (UINT16 handle, UINT8 rand[HCIC_BLE_RAND_DI_SIZE],
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                UINT16 ediv, UINT8 ltk[HCIC_BLE_ENCRYT_KEY_SIZE])
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_BLE_START_ENC;
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_START_ENC);
4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_START_ENC);
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY_TO_STREAM (pp, rand, HCIC_BLE_RAND_DI_SIZE);
4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, ediv);
4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY_TO_STREAM (pp, ltk, HCIC_BLE_ENCRYT_KEY_SIZE);
4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_ltk_req_reply (UINT16 handle, UINT8 ltk[HCIC_BLE_ENCRYT_KEY_SIZE])
4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
478c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
479c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LTK_REQ_REPLY;
4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_LTK_REQ_REPLY);
4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_LTK_REQ_REPLY);
4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ARRAY_TO_STREAM (pp, ltk, HCIC_BLE_ENCRYT_KEY_SIZE);
4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN btsnd_hcic_ble_ltk_req_neg_reply (UINT16 handle)
4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
496c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
497c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LTK_REQ_NEG_REPLY;
5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p->offset = 0;
5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, HCI_BLE_LTK_REQ_NEG_REPLY);
5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_LTK_REQ_NEG_REPLY);
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_STREAM (pp, handle);
5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (TRUE);
5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
511ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN btsnd_hcic_ble_receiver_test(UINT8 rx_freq)
512ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
513c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
514c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
515ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
516ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM1;
517ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    p->offset = 0;
518ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
519ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16_TO_STREAM (pp, HCI_BLE_RECEIVER_TEST);
520ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM1);
521ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
522ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8_TO_STREAM (pp, rx_freq);
523ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
524ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
525ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (TRUE);
526ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
527ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
528ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN btsnd_hcic_ble_transmitter_test(UINT8 tx_freq, UINT8 test_data_len, UINT8 payload)
529ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
530c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
531c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
532ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
533ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_WRITE_PARAM3;
534ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    p->offset = 0;
535ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
536ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16_TO_STREAM (pp, HCI_BLE_TRANSMITTER_TEST);
537ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_WRITE_PARAM3);
538ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
539ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8_TO_STREAM (pp, tx_freq);
540ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8_TO_STREAM (pp, test_data_len);
541ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8_TO_STREAM (pp, payload);
542ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
543ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
544ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (TRUE);
545ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
546ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
547ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN btsnd_hcic_ble_test_end(void)
548ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
549c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
550c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
551ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
552ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
553ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    p->offset = 0;
554ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
555ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16_TO_STREAM (pp, HCI_BLE_TEST_END);
556ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_READ_CMD);
557ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
558ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
559ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (TRUE);
560ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
561ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
562ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN btsnd_hcic_ble_read_host_supported (void)
563ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
564c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
565c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
566ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
567ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_READ_CMD;
568ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    p->offset = 0;
569ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
57030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson    UINT16_TO_STREAM (pp, HCI_READ_LE_HOST_SUPPORT);
571ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_READ_CMD);
572ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
573ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
574ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return (TRUE);
575ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
576ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
5777fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if (defined BLE_LLT_INCLUDED) && (BLE_LLT_INCLUDED == TRUE)
5787fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
5797fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi BattaBOOLEAN btsnd_hcic_ble_rc_param_req_reply(  UINT16 handle,
5807fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                            UINT16 conn_int_min, UINT16 conn_int_max,
5817fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                            UINT16 conn_latency, UINT16 conn_timeout,
5827fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                            UINT16 min_ce_len, UINT16 max_ce_len  )
5837fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta{
584c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
585c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
5867fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
5877fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_RC_PARAM_REQ_REPLY;
5887fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    p->offset = 0;
5897fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
5907fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT16_TO_STREAM (pp, HCI_BLE_RC_PARAM_REQ_REPLY);
5917fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_RC_PARAM_REQ_REPLY);
5927fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
5937fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT16_TO_STREAM (pp, handle);
5947fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT16_TO_STREAM (pp, conn_int_min);
5957fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT16_TO_STREAM (pp, conn_int_max);
5967fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT16_TO_STREAM (pp, conn_latency);
5977fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT16_TO_STREAM (pp, conn_timeout);
5987fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT16_TO_STREAM (pp, min_ce_len);
5997fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT16_TO_STREAM (pp, max_ce_len);
6007fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
6017fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
6027fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    return (TRUE);
6037fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta}
6047fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
6057fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi BattaBOOLEAN btsnd_hcic_ble_rc_param_req_neg_reply(UINT16 handle, UINT8 reason)
6067fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta{
607c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
608c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
6097fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
6107fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    p->len    = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_RC_PARAM_REQ_NEG_REPLY;
6117fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    p->offset = 0;
6127fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
6137fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT16_TO_STREAM (pp, HCI_BLE_RC_PARAM_REQ_NEG_REPLY);
6147fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT8_TO_STREAM  (pp, HCIC_PARAM_SIZE_BLE_RC_PARAM_REQ_NEG_REPLY);
6157fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
6167fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT16_TO_STREAM (pp, handle);
6177fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT8_TO_STREAM (pp, reason);
6187fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
6197fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID,  p);
6207fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    return (TRUE);
6217fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta}
6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
6237fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
624444a8da807abaf5f9e813ce70c56a79160495fb3Satya CallojiBOOLEAN btsnd_hcic_ble_add_device_resolving_list (UINT8 addr_type_peer, BD_ADDR bda_peer,
625444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8 irk_peer[HCIC_BLE_IRK_SIZE],
626444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8 irk_local[HCIC_BLE_IRK_SIZE])
627444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji{
628c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
629c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
630444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
631444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_ADD_DEV_RESOLVING_LIST;
632444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->offset = 0;
633444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
634444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT16_TO_STREAM (pp, HCI_BLE_ADD_DEV_RESOLVING_LIST);
635444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_BLE_ADD_DEV_RESOLVING_LIST);
636444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8_TO_STREAM (pp, addr_type_peer);
637444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    BDADDR_TO_STREAM (pp, bda_peer);
638444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    ARRAY_TO_STREAM (pp, irk_peer, HCIC_BLE_ENCRYT_KEY_SIZE);
639444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    ARRAY_TO_STREAM (pp, irk_local, HCIC_BLE_ENCRYT_KEY_SIZE);
640444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
641444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
642444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
643444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    return (TRUE);
644444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji}
645444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
646444a8da807abaf5f9e813ce70c56a79160495fb3Satya CallojiBOOLEAN btsnd_hcic_ble_rm_device_resolving_list (UINT8 addr_type_peer, BD_ADDR bda_peer)
647444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji{
648c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
649c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
650444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
651444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_RM_DEV_RESOLVING_LIST;
652444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->offset = 0;
653444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
654444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT16_TO_STREAM (pp, HCI_BLE_RM_DEV_RESOLVING_LIST);
655444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_BLE_RM_DEV_RESOLVING_LIST);
656444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8_TO_STREAM (pp, addr_type_peer);
657444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    BDADDR_TO_STREAM (pp, bda_peer);
658444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
659444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
660444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
661444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    return (TRUE);
662444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji}
663444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
664444a8da807abaf5f9e813ce70c56a79160495fb3Satya CallojiBOOLEAN btsnd_hcic_ble_clear_resolving_list (void)
665444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji{
666c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
667c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
668444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
669444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_CLEAR_RESOLVING_LIST;
670444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->offset = 0;
671444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
672444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT16_TO_STREAM (pp, HCI_BLE_CLEAR_RESOLVING_LIST);
673444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_BLE_CLEAR_RESOLVING_LIST);
674444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
675444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
676444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
677444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    return (TRUE);
678444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji}
679444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
680444a8da807abaf5f9e813ce70c56a79160495fb3Satya CallojiBOOLEAN btsnd_hcic_ble_read_resolvable_addr_peer (UINT8 addr_type_peer, BD_ADDR bda_peer)
681444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji{
682c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
683c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
684444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
685444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_READ_RESOLVABLE_ADDR_PEER;
686444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->offset = 0;
687444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
688444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT16_TO_STREAM (pp, HCI_BLE_READ_RESOLVABLE_ADDR_PEER);
689444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_BLE_READ_RESOLVABLE_ADDR_PEER);
690444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8_TO_STREAM (pp, addr_type_peer);
691444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    BDADDR_TO_STREAM (pp, bda_peer);
692444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
693444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
694444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
695444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    return (TRUE);
696444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji}
697444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
698444a8da807abaf5f9e813ce70c56a79160495fb3Satya CallojiBOOLEAN btsnd_hcic_ble_read_resolvable_addr_local (UINT8 addr_type_peer, BD_ADDR bda_peer)
699444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji{
700c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
701c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
702444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
703444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_READ_RESOLVABLE_ADDR_LOCAL;
704444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->offset = 0;
705444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
706444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT16_TO_STREAM (pp, HCI_BLE_READ_RESOLVABLE_ADDR_LOCAL);
707444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_BLE_READ_RESOLVABLE_ADDR_LOCAL);
708444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8_TO_STREAM (pp, addr_type_peer);
709444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    BDADDR_TO_STREAM (pp, bda_peer);
710444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
711444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
712444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
713444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    return (TRUE);
714444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji}
715444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
716444a8da807abaf5f9e813ce70c56a79160495fb3Satya CallojiBOOLEAN btsnd_hcic_ble_set_addr_resolution_enable (UINT8 addr_resolution_enable)
717444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji{
718c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
719c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
720444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
721444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_SET_ADDR_RESOLUTION_ENABLE;
722444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->offset = 0;
723444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
724444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT16_TO_STREAM (pp, HCI_BLE_SET_ADDR_RESOLUTION_ENABLE);
725444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_BLE_SET_ADDR_RESOLUTION_ENABLE);
726444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8_TO_STREAM (pp, addr_resolution_enable);
727444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
728444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
729444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
730444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    return (TRUE);
731444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji}
732444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
733444a8da807abaf5f9e813ce70c56a79160495fb3Satya CallojiBOOLEAN btsnd_hcic_ble_set_rand_priv_addr_timeout (UINT16 rpa_timout)
734444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji{
735c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
736c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
737444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
738444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_SET_RAND_PRIV_ADDR_TIMOUT;
739444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    p->offset = 0;
740444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
741444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT16_TO_STREAM (pp, HCI_BLE_SET_RAND_PRIV_ADDR_TIMOUT);
742444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_BLE_SET_RAND_PRIV_ADDR_TIMOUT);
743444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    UINT16_TO_STREAM (pp, rpa_timout);
744444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
745444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
746444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
747444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    return (TRUE);
748444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji}
749444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
750636d6714a4c08dd99d2147dcce05dc3892e804b4Priti AgheraBOOLEAN btsnd_hcic_ble_set_data_length(UINT16 conn_handle, UINT16 tx_octets, UINT16 tx_time)
751636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera{
752c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
753c980130963c4528655c27b7caa2d030181020fc1Pavlin Radoslavov    UINT8 *pp = (UINT8 *)(p + 1);
754636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera
755636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera    p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_SET_DATA_LENGTH;
756636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera    p->offset = 0;
757636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera
758636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera    UINT16_TO_STREAM(pp, HCI_BLE_SET_DATA_LENGTH);
759636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera    UINT8_TO_STREAM(pp, HCIC_PARAM_SIZE_BLE_SET_DATA_LENGTH);
760636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera
761636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera    UINT16_TO_STREAM(pp, conn_handle);
762636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera    UINT16_TO_STREAM(pp, tx_octets);
763636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera    UINT16_TO_STREAM(pp, tx_time);
764636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera
765636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera    btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p);
766636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera    return TRUE;
767636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera}
768444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
7697fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
7707fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
771