1bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson/****************************************************************************** 2bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * 35b790feeeb211c42bf78ca3ae9c26aa30e516765Jakub Pawlowski * Copyright 2014 Google, Inc. 4bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * 5bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * Licensed under the Apache License, Version 2.0 (the "License"); 6bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * you may not use this file except in compliance with the License. 7bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * You may obtain a copy of the License at: 8bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * 9bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * http://www.apache.org/licenses/LICENSE-2.0 10bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * 11bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * Unless required by applicable law or agreed to in writing, software 12bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * distributed under the License is distributed on an "AS IS" BASIS, 13bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * See the License for the specific language governing permissions and 15bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * limitations under the License. 16bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson * 17bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson ******************************************************************************/ 18bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 19f2af1c42ccb2f642b241c2261b42d0be61d45438Jack He#include <base/logging.h> 20bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 21bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson#include "bt_types.h" 22bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson#include "buffer_allocator.h" 23bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson#include "hci_internals.h" 24bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson#include "hci_layer.h" 25bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson#include "hci_packet_factory.h" 265ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson#include "hcidefs.h" 275ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson#include "hcimsgs.h" 285ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson#include "osi/include/allocator.h" 29bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 305ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic const allocator_t* buffer_allocator; 31bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 325ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_packet(size_t data_size); 335ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_command_no_params(uint16_t opcode); 345ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_command(uint16_t opcode, size_t parameter_size, 355ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson uint8_t** stream_out); 36bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 37bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson// Interface functions 38bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 395ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_reset(void) { return make_command_no_params(HCI_RESET); } 40bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 415ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_read_buffer_size(void) { 4230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return make_command_no_params(HCI_READ_BUFFER_SIZE); 4330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 44bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 455ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_host_buffer_size(uint16_t acl_size, uint8_t sco_size, 465ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson uint16_t acl_count, uint16_t sco_count) { 475ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson uint8_t* stream; 485ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson const uint8_t parameter_size = 2 + 1 + 2 + 2; // from each of the parameters 495ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson BT_HDR* packet = make_command(HCI_HOST_BUFFER_SIZE, parameter_size, &stream); 5030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 5130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson UINT16_TO_STREAM(stream, acl_size); 5230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson UINT8_TO_STREAM(stream, sco_size); 5330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson UINT16_TO_STREAM(stream, acl_count); 5430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson UINT16_TO_STREAM(stream, sco_count); 55bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson return packet; 56bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson} 57bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 585ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_read_local_version_info(void) { 5930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return make_command_no_params(HCI_READ_LOCAL_VERSION_INFO); 6030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 61bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 625ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_read_bd_addr(void) { 6330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return make_command_no_params(HCI_READ_BD_ADDR); 6430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 6530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 665ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_read_local_supported_commands(void) { 6730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return make_command_no_params(HCI_READ_LOCAL_SUPPORTED_CMDS); 6830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 6930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 705ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_read_local_extended_features(uint8_t page_number) { 715ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson uint8_t* stream; 7230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson const uint8_t parameter_size = 1; 735ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson BT_HDR* packet = 745ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_command(HCI_READ_LOCAL_EXT_FEATURES, parameter_size, &stream); 7530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 7630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson UINT8_TO_STREAM(stream, page_number); 7730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return packet; 7830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 7930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 805ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_write_simple_pairing_mode(uint8_t mode) { 815ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson uint8_t* stream; 8230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson const uint8_t parameter_size = 1; 835ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson BT_HDR* packet = 845ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_command(HCI_WRITE_SIMPLE_PAIRING_MODE, parameter_size, &stream); 8530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 8630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson UINT8_TO_STREAM(stream, mode); 8730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return packet; 8830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 8930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 905ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_write_secure_connections_host_support(uint8_t mode) { 915ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson uint8_t* stream; 92444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji const uint8_t parameter_size = 1; 935ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson BT_HDR* packet = 945ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_command(HCI_WRITE_SECURE_CONNS_SUPPORT, parameter_size, &stream); 95444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji 96444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji UINT8_TO_STREAM(stream, mode); 97444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji return packet; 98444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji} 99444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji 1005ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_set_event_mask(const bt_event_mask_t* event_mask) { 1015ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson uint8_t* stream; 10230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson uint8_t parameter_size = sizeof(bt_event_mask_t); 1035ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson BT_HDR* packet = make_command(HCI_SET_EVENT_MASK, parameter_size, &stream); 10430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 10530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson ARRAY8_TO_STREAM(stream, event_mask->as_array); 10630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return packet; 10730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 10830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 1095ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_ble_write_host_support(uint8_t supported_host, 1105ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson uint8_t simultaneous_host) { 1115ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson uint8_t* stream; 11230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson const uint8_t parameter_size = 1 + 1; 1135ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson BT_HDR* packet = 1145ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_command(HCI_WRITE_LE_HOST_SUPPORT, parameter_size, &stream); 115bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 11630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson UINT8_TO_STREAM(stream, supported_host); 11730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson UINT8_TO_STREAM(stream, simultaneous_host); 11830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return packet; 11930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 12030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 1215ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_ble_read_white_list_size(void) { 12230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return make_command_no_params(HCI_BLE_READ_WHITE_LIST_SIZE); 12330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 12430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 1255ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_ble_read_buffer_size(void) { 12630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return make_command_no_params(HCI_BLE_READ_BUFFER_SIZE); 12730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 12830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 1295ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_ble_read_supported_states(void) { 13030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return make_command_no_params(HCI_BLE_READ_SUPPORTED_STATES); 13130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 13230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 1335ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_ble_read_local_supported_features(void) { 13430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return make_command_no_params(HCI_BLE_READ_LOCAL_SPT_FEAT); 13530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 13630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 1375ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_ble_read_resolving_list_size(void) { 138444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji return make_command_no_params(HCI_BLE_READ_RESOLVING_LIST_SIZE); 139444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji} 140444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji 1415ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_ble_read_suggested_default_data_length(void) { 1425ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson return make_command_no_params(HCI_BLE_READ_DEFAULT_DATA_LENGTH); 143636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera} 144636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera 1454f0c5b5838bcb326bf8a2363311231d8b8a59218Jakub Pawlowskistatic BT_HDR* make_ble_read_maximum_data_length(void) { 1464f0c5b5838bcb326bf8a2363311231d8b8a59218Jakub Pawlowski return make_command_no_params(HCI_BLE_READ_MAXIMUM_DATA_LENGTH); 1474f0c5b5838bcb326bf8a2363311231d8b8a59218Jakub Pawlowski} 1484f0c5b5838bcb326bf8a2363311231d8b8a59218Jakub Pawlowski 1491f4cc6dc61ad5863c3fe31dafd364e064b1e64adJakub Pawlowskistatic BT_HDR* make_ble_read_maximum_advertising_data_length(void) { 1501f4cc6dc61ad5863c3fe31dafd364e064b1e64adJakub Pawlowski return make_command_no_params(HCI_LE_READ_MAXIMUM_ADVERTISING_DATA_LENGTH); 1511f4cc6dc61ad5863c3fe31dafd364e064b1e64adJakub Pawlowski} 1521f4cc6dc61ad5863c3fe31dafd364e064b1e64adJakub Pawlowski 1531f4cc6dc61ad5863c3fe31dafd364e064b1e64adJakub Pawlowskistatic BT_HDR* make_ble_read_number_of_supported_advertising_sets(void) { 1541f4cc6dc61ad5863c3fe31dafd364e064b1e64adJakub Pawlowski return make_command_no_params( 1551f4cc6dc61ad5863c3fe31dafd364e064b1e64adJakub Pawlowski HCI_LE_READ_NUMBER_OF_SUPPORTED_ADVERTISING_SETS); 1561f4cc6dc61ad5863c3fe31dafd364e064b1e64adJakub Pawlowski} 1571f4cc6dc61ad5863c3fe31dafd364e064b1e64adJakub Pawlowski 1585ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_read_local_supported_codecs(void) { 1595ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson return make_command_no_params(HCI_READ_LOCAL_SUPPORTED_CODECS); 160f6dcf79f62880e716e127b19c70ea328e07c6051Srinu Jella} 161f6dcf79f62880e716e127b19c70ea328e07c6051Srinu Jella 1625ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_ble_set_event_mask(const bt_event_mask_t* event_mask) { 1635ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson uint8_t* stream; 16430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson uint8_t parameter_size = sizeof(bt_event_mask_t); 1655ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson BT_HDR* packet = 1665ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_command(HCI_BLE_SET_EVENT_MASK, parameter_size, &stream); 16730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 16830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson ARRAY8_TO_STREAM(stream, event_mask->as_array); 169bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson return packet; 170bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson} 171bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 172bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson// Internal functions 173bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 1745ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_command_no_params(uint16_t opcode) { 17530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return make_command(opcode, 0, NULL); 17630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 17730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 1785ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_command(uint16_t opcode, size_t parameter_size, 1795ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson uint8_t** stream_out) { 1805ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson BT_HDR* packet = make_packet(HCI_COMMAND_PREAMBLE_SIZE + parameter_size); 18130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 1825ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson uint8_t* stream = packet->data; 18330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson UINT16_TO_STREAM(stream, opcode); 18430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson UINT8_TO_STREAM(stream, parameter_size); 18530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 1865ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson if (stream_out != NULL) *stream_out = stream; 18730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 18830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return packet; 18930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 19030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 1915ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonstatic BT_HDR* make_packet(size_t data_size) { 1925ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson BT_HDR* ret = (BT_HDR*)buffer_allocator->alloc(sizeof(BT_HDR) + data_size); 193f2af1c42ccb2f642b241c2261b42d0be61d45438Jack He CHECK(ret); 194bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson ret->event = 0; 195bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson ret->offset = 0; 196bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson ret->layer_specific = 0; 197bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson ret->len = data_size; 198bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson return ret; 199bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson} 200bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson 201bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnsonstatic const hci_packet_factory_t interface = { 2025ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_reset, 2035ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_read_buffer_size, 2045ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_host_buffer_size, 2055ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_read_local_version_info, 2065ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_read_bd_addr, 2075ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_read_local_supported_commands, 2085ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_read_local_extended_features, 2095ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_write_simple_pairing_mode, 2105ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_write_secure_connections_host_support, 2115ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_set_event_mask, 2125ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_ble_write_host_support, 2135ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_ble_read_white_list_size, 2145ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_ble_read_buffer_size, 2155ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_ble_read_supported_states, 2165ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_ble_read_local_supported_features, 2175ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_ble_read_resolving_list_size, 2185ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_ble_read_suggested_default_data_length, 2194f0c5b5838bcb326bf8a2363311231d8b8a59218Jakub Pawlowski make_ble_read_maximum_data_length, 2201f4cc6dc61ad5863c3fe31dafd364e064b1e64adJakub Pawlowski make_ble_read_maximum_advertising_data_length, 2211f4cc6dc61ad5863c3fe31dafd364e064b1e64adJakub Pawlowski make_ble_read_number_of_supported_advertising_sets, 2225ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_ble_set_event_mask, 2235ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson make_read_local_supported_codecs}; 2245ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watson 2255ff20a23661695abb1cff6d01d71a8cad4cc7890Myles Watsonconst hci_packet_factory_t* hci_packet_factory_get_interface() { 226bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson buffer_allocator = buffer_allocator_get_interface(); 227bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson return &interface; 228bf8193bc81cc077e3acd245cacbe8e3789c4b9ffZach Johnson} 229