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