Loading system/gd/hci/acl_manager.cc +10 −0 Original line number Diff line number Diff line Loading @@ -243,6 +243,16 @@ void AclManager::UnregisterLeCallbacks(LeConnectionCallbacks* callbacks, std::pr CallOn(pimpl_->le_impl_, &le_impl::handle_unregister_le_callbacks, common::Unretained(callbacks), std::move(promise)); } void AclManager::UnregisterLeAcceptlistCallbacks( LeAcceptlistCallbacks* callbacks, std::promise<void> promise) { ASSERT(callbacks != nullptr); CallOn( pimpl_->le_impl_, &le_impl::handle_unregister_le_acceptlist_callbacks, common::Unretained(callbacks), std::move(promise)); } void AclManager::CreateConnection(Address address) { CallOn(pimpl_->classic_impl_, &classic_impl::create_connection, address); } Loading system/gd/hci/acl_manager.h +2 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,8 @@ public: virtual void RegisterLeCallbacks(acl_manager::LeConnectionCallbacks* callbacks, os::Handler* handler); virtual void UnregisterLeCallbacks(acl_manager::LeConnectionCallbacks* callbacks, std::promise<void> promise); void RegisterLeAcceptlistCallbacks(acl_manager::LeAcceptlistCallbacks* callbacks); void UnregisterLeAcceptlistCallbacks( acl_manager::LeAcceptlistCallbacks* callbacks, std::promise<void> promise); // Generates OnConnectSuccess if connected, or OnConnectFail otherwise virtual void CreateConnection(Address address); Loading system/gd/hci/acl_manager/le_impl.h +9 −0 Original line number Diff line number Diff line Loading @@ -1222,6 +1222,15 @@ struct le_impl : public bluetooth::hci::LeAddressManagerCallback { promise.set_value(); } void handle_unregister_le_acceptlist_callbacks( LeAcceptlistCallbacks* callbacks, std::promise<void> promise) { ASSERT_LOG( le_acceptlist_callbacks_ == callbacks, "Registered le callback entity is different then unregister request"); le_acceptlist_callbacks_ = nullptr; promise.set_value(); } bool check_connection_parameters( uint16_t conn_interval_min, uint16_t conn_interval_max, uint16_t conn_latency, uint16_t supervision_timeout) { if (conn_interval_min < 0x0006 || conn_interval_min > 0x0C80 || conn_interval_max < 0x0006 || Loading system/rust/src/connection/ffi.rs +5 −1 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ use std::{fmt::Debug, pin::Pin}; use bt_common::init_flags; use cxx::UniquePtr; pub use inner::*; use log::warn; Loading Loading @@ -140,7 +141,10 @@ impl InactiveLeAclManager for LeAclManagerImpl { ) -> Self::ActiveManager { let (tx, mut rx) = unbounded_channel(); // only register callbacks if the feature is enabled if init_flags::use_unified_connection_manager_is_enabled() { self.0.pin_mut().register_rust_callbacks(Box::new(LeAclManagerCallbackShim(tx))); } spawn_local(async move { while let Some(f) = rx.recv().await { Loading system/rust/src/connection/ffi/connection_shim.cc +10 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,16 @@ struct LeAclManagerShim::impl : hci::acl_manager::LeAcceptlistCallbacks { public: impl() { acl_manager_ = shim::GetAclManager(); } ~impl() { if (callbacks_.has_value()) { callbacks_.reset(); auto promise = std::promise<void>(); auto future = promise.get_future(); acl_manager_->UnregisterLeAcceptlistCallbacks(this, std::move(promise)); future.wait(); } } void CreateLeConnection(core::AddressWithType address, bool is_direct) { acl_manager_->CreateLeConnection(ToCppAddress(address), is_direct); } Loading Loading
system/gd/hci/acl_manager.cc +10 −0 Original line number Diff line number Diff line Loading @@ -243,6 +243,16 @@ void AclManager::UnregisterLeCallbacks(LeConnectionCallbacks* callbacks, std::pr CallOn(pimpl_->le_impl_, &le_impl::handle_unregister_le_callbacks, common::Unretained(callbacks), std::move(promise)); } void AclManager::UnregisterLeAcceptlistCallbacks( LeAcceptlistCallbacks* callbacks, std::promise<void> promise) { ASSERT(callbacks != nullptr); CallOn( pimpl_->le_impl_, &le_impl::handle_unregister_le_acceptlist_callbacks, common::Unretained(callbacks), std::move(promise)); } void AclManager::CreateConnection(Address address) { CallOn(pimpl_->classic_impl_, &classic_impl::create_connection, address); } Loading
system/gd/hci/acl_manager.h +2 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,8 @@ public: virtual void RegisterLeCallbacks(acl_manager::LeConnectionCallbacks* callbacks, os::Handler* handler); virtual void UnregisterLeCallbacks(acl_manager::LeConnectionCallbacks* callbacks, std::promise<void> promise); void RegisterLeAcceptlistCallbacks(acl_manager::LeAcceptlistCallbacks* callbacks); void UnregisterLeAcceptlistCallbacks( acl_manager::LeAcceptlistCallbacks* callbacks, std::promise<void> promise); // Generates OnConnectSuccess if connected, or OnConnectFail otherwise virtual void CreateConnection(Address address); Loading
system/gd/hci/acl_manager/le_impl.h +9 −0 Original line number Diff line number Diff line Loading @@ -1222,6 +1222,15 @@ struct le_impl : public bluetooth::hci::LeAddressManagerCallback { promise.set_value(); } void handle_unregister_le_acceptlist_callbacks( LeAcceptlistCallbacks* callbacks, std::promise<void> promise) { ASSERT_LOG( le_acceptlist_callbacks_ == callbacks, "Registered le callback entity is different then unregister request"); le_acceptlist_callbacks_ = nullptr; promise.set_value(); } bool check_connection_parameters( uint16_t conn_interval_min, uint16_t conn_interval_max, uint16_t conn_latency, uint16_t supervision_timeout) { if (conn_interval_min < 0x0006 || conn_interval_min > 0x0C80 || conn_interval_max < 0x0006 || Loading
system/rust/src/connection/ffi.rs +5 −1 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ use std::{fmt::Debug, pin::Pin}; use bt_common::init_flags; use cxx::UniquePtr; pub use inner::*; use log::warn; Loading Loading @@ -140,7 +141,10 @@ impl InactiveLeAclManager for LeAclManagerImpl { ) -> Self::ActiveManager { let (tx, mut rx) = unbounded_channel(); // only register callbacks if the feature is enabled if init_flags::use_unified_connection_manager_is_enabled() { self.0.pin_mut().register_rust_callbacks(Box::new(LeAclManagerCallbackShim(tx))); } spawn_local(async move { while let Some(f) = rx.recv().await { Loading
system/rust/src/connection/ffi/connection_shim.cc +10 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,16 @@ struct LeAclManagerShim::impl : hci::acl_manager::LeAcceptlistCallbacks { public: impl() { acl_manager_ = shim::GetAclManager(); } ~impl() { if (callbacks_.has_value()) { callbacks_.reset(); auto promise = std::promise<void>(); auto future = promise.get_future(); acl_manager_->UnregisterLeAcceptlistCallbacks(this, std::move(promise)); future.wait(); } } void CreateLeConnection(core::AddressWithType address, bool is_direct) { acl_manager_->CreateLeConnection(ToCppAddress(address), is_direct); } Loading