| /****************************************************************************** |
| * |
| * Copyright 1999-2012 Broadcom Corporation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at: |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| ******************************************************************************/ |
| |
| #ifndef HCIMSGS_H |
| #define HCIMSGS_H |
| |
| #include "bt_target.h" |
| #include "bt_types.h" |
| #include "device/include/esco_parameters.h" |
| #include "hcidefs.h" |
| #include "types/ble_address_with_type.h" |
| |
| #include <base/callback_forward.h> |
| |
| void bte_main_hci_send(BT_HDR* p_msg, uint16_t event); |
| |
| /* Message by message.... */ |
| |
| /* Inquiry */ |
| /* Inquiry Cancel */ |
| |
| /* Periodic Inquiry Mode */ |
| extern void btsnd_hcic_per_inq_mode(uint16_t max_period, uint16_t min_period, |
| const LAP inq_lap, uint8_t duration, |
| uint8_t response_cnt); |
| |
| /* Periodic Inquiry Mode */ |
| |
| /* Exit Periodic Inquiry Mode */ |
| extern void btsnd_hcic_exit_per_inq(void); |
| |
| /* Create Connection */ |
| extern void btsnd_hcic_create_conn(const RawAddress& dest, |
| uint16_t packet_types, |
| uint8_t page_scan_rep_mode, |
| uint8_t page_scan_mode, |
| uint16_t clock_offset, uint8_t allow_switch); |
| |
| /* Create Connection */ |
| |
| /* Disconnect */ |
| namespace bluetooth { |
| namespace legacy { |
| namespace hci { |
| struct Interface { |
| // LINK_CONTROL 0x04xx |
| void (*StartInquiry)(const LAP inq_lap, uint8_t duration, |
| uint8_t response_cnt); |
| void (*InquiryCancel)(); |
| void (*StartPeriodicInquiryMode)(uint16_t max_period, uint16_t min_period, |
| const LAP inq_lap, uint8_t duration, |
| uint8_t response_cnt); |
| void (*ExitPeriodicInquiryMode)(); |
| void (*CreateConnection)(const RawAddress& dest, uint16_t packet_types, |
| uint8_t page_scan_rep_mode, uint8_t page_scan_mode, |
| uint16_t clock_offset, uint8_t allow_switch); |
| void (*Disconnect)(uint16_t handle, uint8_t reason); |
| // UNUSED 0x0407 btsnd_hcic_add_SCO_conn |
| void (*CreateConnectionCancel)(const RawAddress& dest); |
| void (*AcceptConnectionRequest)(const RawAddress& dest, uint8_t role); |
| void (*RejectConnectionRequest)(const RawAddress& dest, uint8_t reason); |
| void (*LinkKeyRequestReply)(const RawAddress& bd_addr, |
| const LinkKey& link_key); |
| void (*LinkKeyRequestNegativeReply)(const RawAddress& bd_addr); |
| void (*PinCodeRequestReply)(const RawAddress& bd_addr, uint8_t pin_code_len, |
| PIN_CODE pin_code); |
| void (*PinCodeRequestNegativeReply)(const RawAddress& bd_addr); |
| void (*ChangeConnectionPacketType)(uint16_t handle, uint16_t packet_types); |
| void (*AuthenticationRequested)(uint16_t handle); |
| void (*SetConnectionEncryption)(uint16_t handle, bool enable); |
| void (*ChangeConnectionLinkKey)(); // 0x0415, |
| // UNUSED 0x0416 |
| void (*CentralLinkKey)(); // 0x0417, |
| void (*RemoteNameRequest)(const RawAddress& bd_addr, |
| uint8_t page_scan_rep_mode, uint8_t page_scan_mode, |
| uint16_t clock_offset); |
| void (*RemoteNameRequestCancel)(const RawAddress& bd_addr); |
| void (*ReadRemoteSupportedFeatures)(uint16_t handle); |
| void (*ReadRemoteExtendedFeatures)(uint16_t handle, uint8_t page_num); |
| void (*ReadRemoteVersionInformation)(uint16_t handle); |
| void (*ReadClockOffset)(uint16_t handle); |
| void (*ReadLmpHandle)(uint16_t handle); |
| void (*SetupSynchronousConnection)(uint16_t handle, |
| uint32_t transmit_bandwidth, |
| uint32_t receive_bandwidth, |
| uint16_t max_latency, uint16_t voice, |
| uint8_t retrans_effort, |
| uint16_t packet_types); |
| void (*AcceptSynchronousConnection)( |
| const RawAddress& bd_addr, uint32_t transmit_bandwidth, |
| uint32_t receive_bandwidth, uint16_t max_latency, uint16_t content_fmt, |
| uint8_t retrans_effort, uint16_t packet_types); |
| void (*RejectSynchronousConnection)(const RawAddress& bd_addr, |
| uint8_t reason); |
| void (*IoCapabilityRequestReply)(const RawAddress& bd_addr, |
| uint8_t capability, uint8_t oob_present, |
| uint8_t auth_req); |
| void (*UserConfirmationRequestReply)(const RawAddress& bd_addr, bool is_yes); |
| void (*UserConfirmationRequestNegativeReply)(const RawAddress& bd_addr, |
| bool is_yes); |
| void (*UserPasskeyRequestReply)(const RawAddress& bd_addr, uint32_t value); |
| void (*UserPasskeyRequestNegativeReply)(const RawAddress& bd_addr); |
| void (*RemoteOobDataRequestReply)(const RawAddress& bd_addr, const Octet16& c, |
| const Octet16& r); |
| void (*RemoteOobDataRequestNegativeReply)(const RawAddress& bd_addr); |
| void (*IoCapabilityRequestNegativeReply)(const RawAddress& bd_addr, |
| uint8_t err_code); |
| void (*EnhancedSetupSynchronousConnection)(uint16_t conn_handle, |
| enh_esco_params_t* p_params); |
| void (*EnhancedAcceptSynchronousConnection)(const RawAddress& bd_addr, |
| enh_esco_params_t* p_params); |
| void (*RemoteOobExtendedDataRequestReply)(); |
| |
| // LINK_POLICY 0x08xx |
| void (*HoldMode)(uint16_t handle, uint16_t max_hold_period, |
| uint16_t min_hold_period); |
| void (*SniffMode)(uint16_t handle, uint16_t max_sniff_period, |
| uint16_t min_sniff_period, uint16_t sniff_attempt, |
| uint16_t sniff_timeout); |
| void (*ExitSniffMode)(uint16_t handle); |
| void (*QosSetup)(uint16_t handle, uint8_t flags, uint8_t service_type, |
| uint32_t token_rate, uint32_t peak, uint32_t latency, |
| uint32_t delay_var); |
| // UNUSED 0x0808 |
| void (*RoleDiscovery)(); |
| void (*StartRoleSwitch)(const RawAddress& bd_addr, uint8_t role); |
| void (*ReadLinkPolicySettings)(); |
| void (*WriteLinkPolicySettings)(uint16_t handle, uint16_t settings); |
| void (*ReadDefaultLinkPolicySettings)(); |
| void (*WriteDefaultLinkPolicySettings)(uint16_t settings); |
| void (*FlowSpecification)(); |
| void (*SniffSubrating)(uint16_t handle, uint16_t max_lat, |
| uint16_t min_remote_lat, uint16_t min_local_lat); |
| |
| // CONTROLLER_AND_BASEBAND 0x0Cxx |
| void (*SetEventMask)(); |
| void (*Reset)(); |
| void (*SetEventFilter)(uint8_t filt_type, uint8_t filt_cond_type, |
| uint8_t* filt_cond, uint8_t filt_cond_len); |
| void (*Flush)(); |
| void (*ReadPinType)(); |
| void (*WritePinType)(uint8_t type); |
| void (*CreateNewUnitKey)(); |
| void (*ReadStoredLinkKey)(); |
| void (*WriteStoredLinkKey)(); |
| void (*DeleteStoredLinkKey)(const RawAddress& bd_addr, bool delete_all_flag); |
| void (*WriteLocalName)(BD_NAME name); |
| void (*ReadLocalName)(); |
| void (*ReadConnectionAcceptTimeout)(); |
| void (*WriteConnectionAcceptTimeout)(uint16_t timeout); |
| void (*ReadPageTimeout)(); |
| void (*WritePageTimeout)(); |
| void (*ReadScanEnable)(); |
| void (*WriteScanEnable)(uint8_t flag); |
| void (*ReadPageScanActivity)(); |
| void (*WritePageScanActivity)(uint16_t interval, uint16_t window); |
| void (*ReadInquiryScanActivity)(); |
| void (*WriteInquiryScanActivity)(uint16_t interval, uint16_t window); |
| void (*ReadAuthenticationEnable)(); |
| void (*WriteAuthenticationEnable)(uint8_t flag); |
| void (*ReadClassOfDevice)(); |
| void (*WriteClassOfDevice)(DEV_CLASS dev_class); |
| void (*ReadVoiceSetting)(); |
| void (*WriteVoiceSetting)(uint16_t flags); |
| void (*ReadAutomaticFlushTimeout)(uint16_t handle); |
| void (*WriteAutomaticFlushTimeout)(uint16_t handle, uint16_t tout); |
| void (*ReadNumBroadcastRetransmits)(); |
| void (*WriteNumBroadcastRetransmits)(); |
| void (*ReadHoldModeActivity)(); |
| void (*WriteHoldModeActivity)(); |
| void (*ReadTransmitPowerLevel)(uint16_t handle, uint8_t type); |
| void (*ReadSynchronousFlowControlEnable)(); |
| void (*WriteSynchronousFlowControlEnable)(); |
| void (*SetControllerToHostFlowControl)(); |
| void (*HostBufferSize)(); |
| void (*HostNumCompletedPackets)(); |
| void (*ReadLinkSupervisionTimeout)(uint8_t local_controller_id, |
| uint16_t handle, uint16_t timeout); |
| void (*WriteLinkSupervisionTimeout)(); |
| void (*ReadNumberOfSupportedIac)(); |
| void (*ReadCurrentIacLap)(); |
| void (*WriteCurrentIacLap)(uint8_t num_cur_iac, LAP* const iac_lap); |
| void (*SetAfhHostChannelClassification)(); |
| void (*ReadInquiryScanType)(); |
| void (*WriteInquiryScanType)(uint8_t type); |
| void (*ReadInquiryMode)(); // 0x0C44, |
| void (*WriteInquiryMode)(uint8_t mode); |
| void (*ReadPageScanType)(); // 0x0C46, |
| void (*WritePageScanType)(uint8_t type); |
| void (*ReadAfhChannelAssessmentMode)(); |
| void (*WriteAfhChannelAssessmentMode)(); |
| void (*ReadExtendedInquiryResponse)(); |
| void (*WriteExtendedInquiryResponse)(void* buffer, uint8_t fec_req); |
| void (*RefreshEncryptionKey)(); |
| void (*ReadSimplePairingMode)(); |
| void (*WriteSimplePairingMode)(); |
| void (*ReadLocalOobData)(); |
| void (*ReadInquiryResponseTransmitPowerLevel)(); |
| void (*WriteInquiryTransmitPowerLevel)(); |
| void (*EnhancedFlush)(uint16_t handle, uint8_t packet_type); |
| void (*SendKeypressNotification)(const RawAddress& bd_addr, uint8_t notif); |
| |
| // STATUS_PARAMETER 0x14xxS |
| void (*ReadFailedContactCounter)(uint16_t handle); |
| void (*ResetFailedContactCounter)(); |
| void (*ReadLinkQuality)(uint16_t handle); |
| // UNUSED 0x1404 |
| void (*ReadRssi)(uint16_t handle); |
| void (*ReadAfhChannelMap)(); |
| void (*ReadClock)(); |
| void (*ReadEncryptionKeySize)(); |
| }; |
| |
| const Interface& GetInterface(); |
| } // namespace hci |
| } // namespace legacy |
| } // namespace bluetooth |
| |
| /* Disconnect */ |
| |
| /* Add SCO Connection */ |
| extern void btsnd_hcic_add_SCO_conn(uint16_t handle, uint16_t packet_types); |
| |
| /* Add SCO Connection */ |
| |
| /* Create Connection Cancel */ |
| extern void btsnd_hcic_create_conn_cancel(const RawAddress& dest); |
| |
| /* Create Connection Cancel */ |
| |
| /* Accept Connection Request */ |
| extern void btsnd_hcic_accept_conn(const RawAddress& bd_addr, uint8_t role); |
| |
| /* Accept Connection Request */ |
| |
| /* Reject Connection Request */ |
| extern void btsnd_hcic_reject_conn(const RawAddress& bd_addr, uint8_t reason); |
| |
| /* Reject Connection Request */ |
| |
| /* Link Key Request Reply */ |
| extern void btsnd_hcic_link_key_req_reply(const RawAddress& bd_addr, |
| const LinkKey& link_key); |
| |
| /* Link Key Request Reply */ |
| |
| /* Link Key Request Neg Reply */ |
| extern void btsnd_hcic_link_key_neg_reply(const RawAddress& bd_addr); |
| |
| /* Link Key Request Neg Reply */ |
| |
| /* PIN Code Request Reply */ |
| extern void btsnd_hcic_pin_code_req_reply(const RawAddress& bd_addr, |
| uint8_t pin_code_len, |
| PIN_CODE pin_code); |
| |
| /* PIN Code Request Reply */ |
| |
| /* Link Key Request Neg Reply */ |
| extern void btsnd_hcic_pin_code_neg_reply(const RawAddress& bd_addr); |
| |
| /* Link Key Request Neg Reply */ |
| |
| /* Change Connection Type */ |
| extern void btsnd_hcic_change_conn_type(uint16_t handle, uint16_t packet_types); |
| |
| /* Change Connection Type */ |
| |
| extern void btsnd_hcic_auth_request( |
| uint16_t handle); /* Authentication Request */ |
| |
| /* Set Connection Encryption */ |
| extern void btsnd_hcic_set_conn_encrypt(uint16_t handle, bool enable); |
| /* Set Connection Encryption */ |
| |
| /* Remote Name Request */ |
| extern void btsnd_hcic_rmt_name_req(const RawAddress& bd_addr, |
| uint8_t page_scan_rep_mode, |
| uint8_t page_scan_mode, |
| uint16_t clock_offset); |
| /* Remote Name Request */ |
| |
| /* Remote Name Request Cancel */ |
| extern void btsnd_hcic_rmt_name_req_cancel(const RawAddress& bd_addr); |
| /* Remote Name Request Cancel */ |
| |
| extern void btsnd_hcic_rmt_features_req( |
| uint16_t handle); /* Remote Features Request */ |
| |
| /* Remote Extended Features */ |
| extern void btsnd_hcic_rmt_ext_features(uint16_t handle, uint8_t page_num); |
| /* Remote Extended Features */ |
| |
| extern void btsnd_hcic_rmt_ver_req( |
| uint16_t handle); /* Remote Version Info Request */ |
| extern void btsnd_hcic_read_rmt_clk_offset( |
| uint16_t handle); /* Remote Clock Offset */ |
| extern void btsnd_hcic_read_lmp_handle(uint16_t handle); /* Remote LMP Handle */ |
| extern void btsnd_hcic_setup_esco_conn(uint16_t handle, |
| uint32_t transmit_bandwidth, |
| uint32_t receive_bandwidth, |
| uint16_t max_latency, uint16_t voice, |
| uint8_t retrans_effort, |
| uint16_t packet_types); |
| extern void btsnd_hcic_accept_esco_conn( |
| const RawAddress& bd_addr, uint32_t transmit_bandwidth, |
| uint32_t receive_bandwidth, uint16_t max_latency, uint16_t content_fmt, |
| uint8_t retrans_effort, uint16_t packet_types); |
| |
| extern void btsnd_hcic_reject_esco_conn(const RawAddress& bd_addr, |
| uint8_t reason); |
| /* Hold Mode */ |
| extern void btsnd_hcic_hold_mode(uint16_t handle, uint16_t max_hold_period, |
| uint16_t min_hold_period); |
| |
| /* Hold Mode */ |
| |
| /* Sniff Mode */ |
| extern void btsnd_hcic_sniff_mode(uint16_t handle, uint16_t max_sniff_period, |
| uint16_t min_sniff_period, |
| uint16_t sniff_attempt, |
| uint16_t sniff_timeout); |
| /* Sniff Mode */ |
| |
| extern void btsnd_hcic_exit_sniff_mode(uint16_t handle); /* Exit Sniff Mode */ |
| |
| /* Park Mode */ |
| extern void btsnd_hcic_park_mode(uint16_t handle, uint16_t beacon_max_interval, |
| uint16_t beacon_min_interval); |
| /* Park Mode */ |
| |
| extern void btsnd_hcic_exit_park_mode(uint16_t handle); /* Exit Park Mode */ |
| |
| /* QoS Setup */ |
| extern void btsnd_hcic_qos_setup(uint16_t handle, uint8_t flags, |
| uint8_t service_type, uint32_t token_rate, |
| uint32_t peak, uint32_t latency, |
| uint32_t delay_var); |
| /* QoS Setup */ |
| |
| /* Switch Role Request */ |
| |
| /* Write Policy Settings */ |
| extern void btsnd_hcic_write_policy_set(uint16_t handle, uint16_t settings); |
| /* Write Policy Settings */ |
| |
| /* Write Default Policy Settings */ |
| extern void btsnd_hcic_write_def_policy_set(uint16_t settings); |
| /* Write Default Policy Settings */ |
| |
| /****************************************** |
| * Lisbon Features |
| ******************************************/ |
| /* Sniff Subrating */ |
| extern void btsnd_hcic_sniff_sub_rate(uint16_t handle, uint16_t max_lat, |
| uint16_t min_remote_lat, |
| uint16_t min_local_lat); |
| /* Sniff Subrating */ |
| |
| /* Extended Inquiry Response */ |
| extern void btsnd_hcic_write_ext_inquiry_response(void* buffer, |
| uint8_t fec_req); |
| /* IO Capabilities Response */ |
| extern void btsnd_hcic_io_cap_req_reply(const RawAddress& bd_addr, |
| uint8_t capability, uint8_t oob_present, |
| uint8_t auth_req); |
| /* IO Capabilities Req Neg Reply */ |
| extern void btsnd_hcic_io_cap_req_neg_reply(const RawAddress& bd_addr, |
| uint8_t err_code); |
| /* Read Local OOB Data */ |
| extern void btsnd_hcic_read_local_oob_data(void); |
| |
| extern void btsnd_hcic_user_conf_reply(const RawAddress& bd_addr, bool is_yes); |
| |
| extern void btsnd_hcic_user_passkey_reply(const RawAddress& bd_addr, |
| uint32_t value); |
| |
| extern void btsnd_hcic_user_passkey_neg_reply(const RawAddress& bd_addr); |
| |
| /* Remote OOB Data Request Reply */ |
| extern void btsnd_hcic_rem_oob_reply(const RawAddress& bd_addr, |
| const Octet16& c, const Octet16& r); |
| |
| /* Remote OOB Data Request Negative Reply */ |
| extern void btsnd_hcic_rem_oob_neg_reply(const RawAddress& bd_addr); |
| |
| /* Read Tx Power Level */ |
| extern void btsnd_hcic_read_inq_tx_power(void); |
| |
| /* Read Default Erroneous Data Reporting */ |
| extern void btsnd_hcic_read_default_erroneous_data_rpt(void); |
| |
| extern void btsnd_hcic_enhanced_flush(uint16_t handle, uint8_t packet_type); |
| |
| extern void btsnd_hcic_send_keypress_notif(const RawAddress& bd_addr, |
| uint8_t notif); |
| /**** end of Simple Pairing Commands ****/ |
| |
| extern void btsnd_hcic_set_event_filter(uint8_t filt_type, |
| uint8_t filt_cond_type, |
| uint8_t* filt_cond, |
| uint8_t filt_cond_len); |
| /* Set Event Filter */ |
| |
| /* Delete Stored Key */ |
| extern void btsnd_hcic_delete_stored_key(const RawAddress& bd_addr, |
| bool delete_all_flag); |
| /* Delete Stored Key */ |
| |
| /* Change Local Name */ |
| extern void btsnd_hcic_change_name(BD_NAME name); |
| |
| #define HCIC_PARAM_SIZE_READ_CMD 0 |
| |
| #define HCIC_PARAM_SIZE_WRITE_PARAM1 1 |
| |
| #define HCIC_PARAM_SIZE_WRITE_PARAM3 3 |
| |
| extern void btsnd_hcic_write_pin_type(uint8_t type); /* Write PIN Type */ |
| extern void btsnd_hcic_write_auto_accept(uint8_t flag); /* Write Auto Accept */ |
| extern void btsnd_hcic_read_name(void); /* Read Local Name */ |
| extern void btsnd_hcic_write_page_tout( |
| uint16_t timeout); /* Write Page Timout */ |
| extern void btsnd_hcic_write_scan_enable(uint8_t flag); /* Write Scan Enable */ |
| extern void btsnd_hcic_write_pagescan_cfg( |
| uint16_t interval, uint16_t window); /* Write Page Scan Activity */ |
| /* Write Page Scan Activity */ |
| |
| /* Write Inquiry Scan Activity */ |
| extern void btsnd_hcic_write_inqscan_cfg(uint16_t interval, uint16_t window); |
| /* Write Inquiry Scan Activity */ |
| |
| extern void btsnd_hcic_write_auth_enable( |
| uint8_t flag); /* Write Authentication Enable */ |
| extern void btsnd_hcic_write_dev_class( |
| DEV_CLASS dev); /* Write Class of Device */ |
| extern void btsnd_hcic_write_voice_settings( |
| uint16_t flags); /* Write Voice Settings */ |
| |
| extern void btsnd_hcic_write_auto_flush_tout( |
| uint16_t handle, uint16_t timeout); /* Write Retransmit Timout */ |
| |
| extern void btsnd_hcic_read_tx_power(uint16_t handle, |
| uint8_t type); /* Read Tx Power */ |
| |
| /* Read transmit power level parameter */ |
| extern void btsnd_hcic_host_num_xmitted_pkts( |
| uint8_t num_handles, uint16_t* handle, |
| uint16_t* num_pkts); /* Set Host Buffer Size */ |
| |
| /* Write Link Supervision Timeout */ |
| extern void btsnd_hcic_write_link_super_tout(uint8_t local_controller_id, |
| uint16_t handle, uint16_t timeout); |
| /* Write Link Supervision Timeout */ |
| |
| extern void btsnd_hcic_write_cur_iac_lap( |
| uint8_t num_cur_iac, LAP* const iac_lap); /* Write Current IAC LAP */ |
| /* Write Current IAC LAP */ |
| |
| extern void btsnd_hcic_get_link_quality(uint16_t handle); /* Get Link Quality */ |
| extern void btsnd_hcic_read_rssi(uint16_t handle); /* Read RSSI */ |
| using ReadEncKeySizeCb = base::OnceCallback<void(uint8_t, uint16_t, uint8_t)>; |
| extern void btsnd_hcic_read_encryption_key_size(uint16_t handle, ReadEncKeySizeCb cb); |
| extern void btsnd_hcic_read_failed_contact_counter(uint16_t handle); |
| extern void btsnd_hcic_read_automatic_flush_timeout(uint16_t handle); |
| extern void btsnd_hcic_enable_test_mode( |
| void); /* Enable Device Under Test Mode */ |
| extern void btsnd_hcic_write_pagescan_type( |
| uint8_t type); /* Write Page Scan Type */ |
| extern void btsnd_hcic_write_inqscan_type( |
| uint8_t type); /* Write Inquiry Scan Type */ |
| extern void btsnd_hcic_write_inquiry_mode( |
| uint8_t type); /* Write Inquiry Mode */ |
| |
| /* Enhanced setup SCO connection (CSA2) */ |
| extern void btsnd_hcic_enhanced_set_up_synchronous_connection( |
| uint16_t conn_handle, enh_esco_params_t* p_parms); |
| |
| /* Enhanced accept SCO connection request (CSA2) */ |
| extern void btsnd_hcic_enhanced_accept_synchronous_connection( |
| const RawAddress& bd_addr, enh_esco_params_t* p_parms); |
| |
| #define HCI_DATA_HANDLE_MASK 0x0FFF |
| |
| #define HCID_GET_HANDLE_EVENT(p) \ |
| (uint16_t)((*((uint8_t*)((p) + 1) + (p)->offset) + \ |
| (*((uint8_t*)((p) + 1) + (p)->offset + 1) << 8))) |
| |
| #define HCID_GET_HANDLE(u16) (uint16_t)((u16)&HCI_DATA_HANDLE_MASK) |
| |
| #define HCI_DATA_EVENT_MASK 3 |
| #define HCI_DATA_EVENT_OFFSET 12 |
| #define HCID_GET_EVENT(u16) \ |
| (uint8_t)(((u16) >> HCI_DATA_EVENT_OFFSET) & HCI_DATA_EVENT_MASK) |
| |
| extern void btsnd_hcic_vendor_spec_cmd(void* buffer, uint16_t opcode, |
| uint8_t len, uint8_t* p_data, |
| void* p_cmd_cplt_cback); |
| |
| /******************************************************************************* |
| * BLE Commands |
| * Note: "local_controller_id" is for transport, not counted in HCI |
| * message size |
| ******************************************************************************/ |
| #define HCIC_BLE_RAND_DI_SIZE 8 |
| |
| #define HCIC_BLE_CHNL_MAP_SIZE 5 |
| #define HCIC_PARAM_SIZE_BLE_READ_PHY 2 |
| #define HCIC_PARAM_SIZE_BLE_SET_PHY 7 |
| |
| /* ULP HCI command */ |
| extern void btsnd_hcic_ble_set_evt_mask(BT_EVENT_MASK event_mask); |
| |
| extern void btsnd_hcic_ble_read_buffer_size(void); |
| |
| extern void btsnd_hcic_ble_read_local_spt_feat(void); |
| |
| extern void btsnd_hcic_ble_set_local_used_feat(uint8_t feat_set[8]); |
| |
| extern void btsnd_hcic_ble_set_random_addr(const RawAddress& random_addr); |
| |
| extern void btsnd_hcic_ble_write_adv_params( |
| uint16_t adv_int_min, uint16_t adv_int_max, uint8_t adv_type, |
| tBLE_ADDR_TYPE addr_type_own, tBLE_ADDR_TYPE addr_type_dir, |
| const RawAddress& direct_bda, uint8_t channel_map, |
| uint8_t adv_filter_policy); |
| |
| extern void btsnd_hcic_ble_read_adv_chnl_tx_power(void); |
| |
| extern void btsnd_hcic_ble_set_adv_data(uint8_t data_len, uint8_t* p_data); |
| |
| extern void btsnd_hcic_ble_set_scan_rsp_data(uint8_t data_len, |
| uint8_t* p_scan_rsp); |
| |
| extern void btsnd_hcic_ble_set_adv_enable(uint8_t adv_enable); |
| |
| extern void btsnd_hcic_ble_set_scan_params(uint8_t scan_type, uint16_t scan_int, |
| uint16_t scan_win, uint8_t addr_type, |
| uint8_t scan_filter_policy); |
| |
| extern void btsnd_hcic_ble_set_scan_enable(uint8_t scan_enable, |
| uint8_t duplicate); |
| |
| extern void btsnd_hcic_ble_create_ll_conn( |
| uint16_t scan_int, uint16_t scan_win, uint8_t init_filter_policy, |
| tBLE_ADDR_TYPE addr_type_peer, const RawAddress& bda_peer, |
| tBLE_ADDR_TYPE addr_type_own, uint16_t conn_int_min, uint16_t conn_int_max, |
| uint16_t conn_latency, uint16_t conn_timeout, uint16_t min_ce_len, |
| uint16_t max_ce_len); |
| |
| extern void btsnd_hcic_ble_create_conn_cancel(void); |
| |
| extern void btsnd_hcic_ble_read_acceptlist_size(void); |
| |
| extern void btsnd_hcic_ble_clear_acceptlist( |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_ble_add_acceptlist( |
| tBLE_ADDR_TYPE addr_type, const RawAddress& bda, |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_ble_remove_from_acceptlist( |
| tBLE_ADDR_TYPE addr_type, const RawAddress& bda, |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_ble_upd_ll_conn_params( |
| uint16_t handle, uint16_t conn_int_min, uint16_t conn_int_max, |
| uint16_t conn_latency, uint16_t conn_timeout, uint16_t min_len, |
| uint16_t max_len); |
| |
| extern void btsnd_hcic_ble_set_host_chnl_class( |
| uint8_t chnl_map[HCIC_BLE_CHNL_MAP_SIZE]); |
| |
| extern void btsnd_hcic_ble_read_chnl_map(uint16_t handle); |
| |
| extern void btsnd_hcic_ble_read_remote_feat(uint16_t handle); |
| |
| extern void btsnd_hcic_ble_encrypt(uint8_t* key, uint8_t key_len, |
| uint8_t* plain_text, uint8_t pt_len, |
| void* p_cmd_cplt_cback); |
| |
| extern void btsnd_hcic_ble_rand(base::Callback<void(BT_OCTET8)> cb); |
| |
| extern void btsnd_hcic_ble_start_enc(uint16_t handle, |
| uint8_t rand[HCIC_BLE_RAND_DI_SIZE], |
| uint16_t ediv, const Octet16& ltk); |
| |
| extern void btsnd_hcic_ble_ltk_req_reply(uint16_t handle, const Octet16& ltk); |
| |
| extern void btsnd_hcic_ble_ltk_req_neg_reply(uint16_t handle); |
| |
| extern void btsnd_hcic_ble_read_supported_states(void); |
| |
| extern void btsnd_hcic_ble_write_host_supported(uint8_t le_host_spt, |
| uint8_t simul_le_host_spt); |
| |
| extern void btsnd_hcic_ble_read_host_supported(void); |
| |
| extern void btsnd_hcic_ble_receiver_test(uint8_t rx_freq); |
| |
| extern void btsnd_hcic_ble_transmitter_test(uint8_t tx_freq, |
| uint8_t test_data_len, |
| uint8_t payload); |
| extern void btsnd_hcic_ble_test_end(void); |
| |
| extern void btsnd_hcic_ble_rc_param_req_reply( |
| uint16_t handle, uint16_t conn_int_min, uint16_t conn_int_max, |
| uint16_t conn_latency, uint16_t conn_timeout, uint16_t min_ce_len, |
| uint16_t max_ce_len); |
| |
| extern void btsnd_hcic_ble_rc_param_req_neg_reply(uint16_t handle, |
| uint8_t reason); |
| |
| extern void btsnd_hcic_ble_set_data_length(uint16_t conn_handle, |
| uint16_t tx_octets, |
| uint16_t tx_time); |
| |
| extern void btsnd_hcic_ble_add_device_resolving_list(uint8_t addr_type_peer, |
| const RawAddress& bda_peer, |
| const Octet16& irk_peer, |
| const Octet16& irk_local); |
| |
| struct scanning_phy_cfg { |
| uint8_t scan_type; |
| uint16_t scan_int; |
| uint16_t scan_win; |
| }; |
| |
| extern void btsnd_hcic_ble_set_extended_scan_params( |
| uint8_t own_address_type, uint8_t scanning_filter_policy, |
| uint8_t scanning_phys, scanning_phy_cfg* phy_cfg); |
| |
| extern void btsnd_hcic_ble_set_extended_scan_enable(uint8_t enable, |
| uint8_t filter_duplicates, |
| uint16_t duration, |
| uint16_t period); |
| |
| struct EXT_CONN_PHY_CFG { |
| uint16_t scan_int; |
| uint16_t scan_win; |
| uint16_t conn_int_min; |
| uint16_t conn_int_max; |
| uint16_t conn_latency; |
| uint16_t sup_timeout; |
| uint16_t min_ce_len; |
| uint16_t max_ce_len; |
| }; |
| |
| extern void btsnd_hcic_ble_ext_create_conn(uint8_t init_filter_policy, |
| uint8_t addr_type_own, |
| uint8_t addr_type_peer, |
| const RawAddress& bda_peer, |
| uint8_t initiating_phys, |
| EXT_CONN_PHY_CFG* phy_cfg); |
| |
| extern void btsnd_hcic_ble_rm_device_resolving_list( |
| tBLE_ADDR_TYPE addr_type_peer, const RawAddress& bda_peer); |
| |
| extern void btsnd_hcic_ble_set_privacy_mode(tBLE_ADDR_TYPE addr_type_peer, |
| const RawAddress& bda_peer, |
| uint8_t privacy_type); |
| |
| extern void btsnd_hcic_ble_clear_resolving_list(void); |
| |
| extern void btsnd_hcic_ble_read_resolvable_addr_peer( |
| uint8_t addr_type_peer, const RawAddress& bda_peer); |
| |
| extern void btsnd_hcic_ble_read_resolvable_addr_local( |
| uint8_t addr_type_peer, const RawAddress& bda_peer); |
| |
| extern void btsnd_hcic_ble_set_addr_resolution_enable( |
| uint8_t addr_resolution_enable); |
| |
| extern void btsnd_hcic_ble_set_rand_priv_addr_timeout(uint16_t rpa_timout); |
| |
| extern void btsnd_hcic_read_authenticated_payload_tout(uint16_t handle); |
| |
| extern void btsnd_hcic_write_authenticated_payload_tout(uint16_t handle, |
| uint16_t timeout); |
| |
| extern void btsnd_hcic_read_iso_tx_sync( |
| uint16_t iso_handle, base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| struct EXT_CIS_CFG { |
| uint8_t cis_id; |
| uint16_t max_sdu_size_mtos; |
| uint16_t max_sdu_size_stom; |
| uint8_t phy_mtos; |
| uint8_t phy_stom; |
| uint8_t rtn_mtos; |
| uint8_t rtn_stom; |
| }; |
| |
| extern void btsnd_hcic_set_cig_params( |
| uint8_t cig_id, uint32_t sdu_itv_mtos, uint32_t sdu_itv_stom, uint8_t sca, |
| uint8_t packing, uint8_t framing, uint16_t max_trans_lat_stom, |
| uint16_t max_trans_lat_mtos, uint8_t cis_cnt, const EXT_CIS_CFG* cis_cfg, |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| struct EXT_CIS_TEST_CFG { |
| uint8_t cis_id; |
| uint8_t nse; |
| uint16_t max_sdu_size_mtos; |
| uint16_t max_sdu_size_stom; |
| uint8_t max_pdu_mtos; |
| uint8_t max_pdu_stom; |
| uint8_t phy_mtos; |
| uint8_t phy_stom; |
| uint8_t bn_mtos; |
| uint8_t bn_stom; |
| }; |
| |
| struct EXT_CIS_CREATE_CFG { |
| uint16_t cis_conn_handle; |
| uint16_t acl_conn_handle; |
| }; |
| |
| extern void btsnd_hcic_create_cis( |
| uint8_t num_cis, const EXT_CIS_CREATE_CFG* cis_create_cfg, |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_remove_cig( |
| uint8_t cig_id, base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_accept_cis_req(uint16_t conn_handle); |
| |
| extern void btsnd_hcic_rej_cis_req( |
| uint16_t conn_handle, uint8_t reason, |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_req_peer_sca(uint16_t conn_handle); |
| |
| extern void btsnd_hcic_create_big(uint8_t big_handle, uint8_t adv_handle, |
| uint8_t num_bis, uint32_t sdu_itv, |
| uint16_t max_sdu_size, uint16_t max_trans_lat, |
| uint8_t rtn, uint8_t phy, uint8_t packing, |
| uint8_t framing, uint8_t enc, |
| std::array<uint8_t, 16> bcst_code); |
| |
| extern void btsnd_hcic_term_big(uint8_t big_handle, uint8_t reason); |
| |
| extern void btsnd_hcic_big_create_sync(uint8_t big_handle, uint16_t sync_handle, |
| uint8_t enc, |
| std::array<uint8_t, 16> bcst_code, |
| uint8_t mse, uint16_t big_sync_timeout, |
| std::vector<uint8_t> bis); |
| |
| extern void btsnd_hcic_big_term_sync( |
| uint8_t big_handle, base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_setup_iso_data_path( |
| uint16_t iso_handle, uint8_t data_path_dir, uint8_t data_path_id, |
| uint8_t codec_id_format, uint16_t codec_id_company, |
| uint16_t codec_id_vendor, uint32_t controller_delay, |
| std::vector<uint8_t> codec_conf, |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_remove_iso_data_path( |
| uint16_t iso_handle, uint8_t data_path_dir, |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_read_iso_link_quality( |
| uint16_t iso_handle, base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_ble_periodic_advertising_create_sync( |
| uint8_t options, uint8_t adv_sid, uint8_t adv_addr_type, |
| const RawAddress& adv_addr, uint16_t skip_num, uint16_t sync_timeout, |
| uint8_t sync_cte_type); |
| |
| extern void btsnd_hcic_ble_periodic_advertising_create_sync_cancel( |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_ble_periodic_advertising_terminate_sync( |
| uint16_t sync_handle, base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hci_ble_add_device_to_periodic_advertiser_list( |
| uint8_t adv_addr_type, const RawAddress& adv_addr, uint8_t adv_sid, |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hci_ble_remove_device_from_periodic_advertiser_list( |
| uint8_t adv_addr_type, const RawAddress& adv_addr, uint8_t adv_sid, |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hci_ble_clear_periodic_advertiser_list( |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hci_ble_read_periodic_advertiser_list_size( |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_ble_set_periodic_advertising_receive_enable( |
| uint16_t sync_handle, bool enable, |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_ble_periodic_advertising_sync_transfer( |
| uint16_t conn_handle, uint16_t service_data, uint16_t sync_handle, |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_ble_periodic_advertising_set_info_transfer( |
| uint16_t conn_handle, uint16_t service_data, uint8_t adv_handle, |
| base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void btsnd_hcic_ble_set_periodic_advertising_sync_transfer_params( |
| uint16_t conn_handle, uint8_t mode, uint16_t skip, uint16_t sync_timeout, |
| uint8_t cte_type, base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| extern void |
| btsnd_hcic_ble_set_default_periodic_advertising_sync_transfer_params( |
| uint16_t conn_handle, uint8_t mode, uint16_t skip, uint16_t sync_timeout, |
| uint8_t cte_type, base::OnceCallback<void(uint8_t*, uint16_t)> cb); |
| |
| #define HCIC_PARAM_SIZE_WRITE_AUTHENT_PAYLOAD_TOUT 4 |
| |
| #define HCI__WRITE_AUTHENT_PAYLOAD_TOUT_HANDLE_OFF 0 |
| #define HCI__WRITE_AUTHENT_PAYLOAD_TOUT_TOUT_OFF 2 |
| |
| #endif |