Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 170949de authored by Myles Watson's avatar Myles Watson
Browse files

HCI: Add Disconnect Registration

ISO and SCO interfaces should register for disconnects, not use ACL.

Remove HACK_SetNonAclDisc

Bug: 301661850
Test: mma -j32
Flag: EXEMPT, no logical change
Change-Id: Ic767e28d122aea0c1d7c25e93fb2e708339f7ac1
parent 84ed56d3
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -410,10 +410,6 @@ uint16_t AclManager::HACK_GetLeHandle(Address address) {
  return pimpl_->le_impl_->HACK_get_handle(address);
}

void AclManager::HACK_SetNonAclDisconnectCallback(std::function<void(uint16_t, uint8_t)> callback) {
  pimpl_->classic_impl_->HACK_SetNonAclDisconnectCallback(callback);
}

void AclManager::HACK_SetAclTxPriority(uint8_t handle, bool high_priority) {
  CallOn(pimpl_->round_robin_scheduler_, &RoundRobinScheduler::SetLinkPriority, handle, high_priority);
}
+0 −5
Original line number Diff line number Diff line
@@ -172,11 +172,6 @@ class AclManager : public Module {
  virtual uint16_t HACK_GetHandle(const Address address);
  virtual uint16_t HACK_GetLeHandle(const Address address);

  // Hack for the shim to get non-acl disconnect callback. Shim needs to post to
  // their handler!
  virtual void HACK_SetNonAclDisconnectCallback(
      std::function<void(uint16_t /* handle */, uint8_t /* reason */)>);

  virtual void HACK_SetAclTxPriority(uint8_t handle, bool high_priority);

  struct impl;
+0 −10
Original line number Diff line number Diff line
@@ -488,10 +488,6 @@ struct classic_impl : public security::ISecurityManagerListener {
          callbacks->OnDisconnection(reason);
        },
        kRemoveConnectionAfterwards);
    // This handle is probably for SCO, so we use the callback workaround.
    if (non_acl_disconnect_callback_ != nullptr) {
      non_acl_disconnect_callback_(handle, static_cast<uint8_t>(reason));
    }
    connections.crash_on_unknown_handle_ = event_also_routes_to_other_receivers;
  }

@@ -800,10 +796,6 @@ struct classic_impl : public security::ISecurityManagerListener {
    return connections.HACK_get_handle(address);
  }

  void HACK_SetNonAclDisconnectCallback(std::function<void(uint16_t, uint8_t)> callback) {
    non_acl_disconnect_callback_ = callback;
  }

  void handle_register_callbacks(ConnectionCallbacks* callbacks, os::Handler* handler) {
    ASSERT(client_callbacks_ == nullptr);
    ASSERT(client_handler_ == nullptr);
@@ -832,8 +824,6 @@ struct classic_impl : public security::ISecurityManagerListener {
  std::unique_ptr<RoleChangeView> delayed_role_change_ = nullptr;

  std::unique_ptr<security::SecurityManager> security_manager_;

  std::function<void(uint16_t, uint8_t)> non_acl_disconnect_callback_;
};

}  // namespace acl_manager
+0 −4
Original line number Diff line number Diff line
@@ -82,10 +82,6 @@ class MockAclManager : public AclManager {
       std::chrono::milliseconds minimum_rotation_time,
       std::chrono::milliseconds maximum_rotation_time),
      (override));

  // PRIVATE TO SHIM
  MOCK_METHOD(
      void, HACK_SetNonAclDisconnectCallback, (std::function<void(uint16_t /* handle */, uint8_t /* reason */)>));
};

}  // namespace testing
+5 −0
Original line number Diff line number Diff line
@@ -550,6 +550,11 @@ void HciLayer::Disconnect(uint16_t handle, ErrorCode reason) {
  }
}

void HciLayer::RegisterForDisconnects(ContextualCallback<void(uint16_t, ErrorCode)> on_disconnect) {
  std::unique_lock<std::mutex> lock(callback_handlers_guard_);
  disconnect_handlers_.push_back(on_disconnect);
}

void HciLayer::on_read_remote_version_complete(EventView event_view) {
  auto view = ReadRemoteVersionInformationCompleteView::Create(event_view);
  ASSERT_LOG(view.IsValid(), "Read remote version information packet invalid");
Loading