blob: 9c1aa7cdf00f98df80ad80599de9cb40b5ef859e [file] [log] [blame]
use crate::btif::{
BtAclState, BtBondState, BtConnectionDirection, BtDeviceType, BtHciErrorCode, BtState,
BtStatus, BtTransport, RawAddress,
};
#[cxx::bridge(namespace = bluetooth::topshim::rust)]
mod ffi {
unsafe extern "C++" {
include!("gd/rust/topshim/common/type_alias.h");
type RawAddress = crate::btif::RawAddress;
}
unsafe extern "C++" {
include!("metrics/metrics_shim.h");
fn adapter_state_changed(state: u32);
fn bond_create_attempt(bt_addr: RawAddress, device_type: u32);
fn bond_state_changed(
bt_addr: RawAddress,
device_type: u32,
status: u32,
bond_state: u32,
fail_reason: i32,
);
fn device_info_report(
bt_addr: RawAddress,
device_type: u32,
class_of_device: u32,
appearance: u32,
vendor_id: u32,
vendor_id_src: u32,
product_id: u32,
version: u32,
);
fn profile_connection_state_changed(
bt_addr: RawAddress,
profile: u32,
status: u32,
state: u32,
);
fn acl_connect_attempt(addr: RawAddress, acl_state: u32);
fn acl_connection_state_changed(
bt_addr: RawAddress,
transport: u32,
status: u32,
acl_state: u32,
direction: u32,
hci_reason: u32,
);
fn suspend_complete_state(state: u32);
}
}
pub fn adapter_state_changed(state: BtState) {
ffi::adapter_state_changed(state as u32);
}
pub fn bond_create_attempt(addr: RawAddress, device_type: BtDeviceType) {
ffi::bond_create_attempt(addr, device_type as u32);
}
pub fn bond_state_changed(
addr: RawAddress,
device_type: BtDeviceType,
status: BtStatus,
bond_state: BtBondState,
fail_reason: i32,
) {
ffi::bond_state_changed(
addr,
device_type as u32,
status as u32,
bond_state as u32,
fail_reason as i32,
);
}
pub fn device_info_report(
addr: RawAddress,
device_type: BtDeviceType,
class_of_device: u32,
appearance: u16,
vendor_id: u16,
vendor_id_src: u8,
product_id: u16,
version: u16,
) {
ffi::device_info_report(
addr,
device_type as u32,
class_of_device as u32,
appearance as u32,
vendor_id as u32,
vendor_id_src as u32,
product_id as u32,
version as u32,
);
}
pub fn profile_connection_state_changed(
addr: RawAddress,
profile: u32,
status: BtStatus,
state: u32,
) {
ffi::profile_connection_state_changed(addr, profile, status as u32, state);
}
pub fn acl_connect_attempt(addr: RawAddress, acl_state: BtAclState) {
ffi::acl_connect_attempt(addr, acl_state as u32);
}
pub fn acl_connection_state_changed(
addr: RawAddress,
transport: BtTransport,
status: BtStatus,
acl_state: BtAclState,
direction: BtConnectionDirection,
hci_reason: BtHciErrorCode,
) {
ffi::acl_connection_state_changed(
addr,
transport as u32,
status as u32,
acl_state as u32,
direction as u32,
hci_reason as u32,
);
}
pub fn suspend_complete_state(state: u32) {
ffi::suspend_complete_state(state);
}