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

Commit 0691194a authored by Hansong Zhang's avatar Hansong Zhang Committed by Automerger Merge Worker
Browse files

L2cap: Send link callbacks to listener am: 088a7faf

Original change: https://android-review.googlesource.com/c/platform/system/bt/+/1543603

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I98b34e4f4693ff01398394ac2dbc05f85697aa6e
parents 7624e951 088a7faf
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -333,11 +333,11 @@ void Link::OnChangeConnectionLinkKeyComplete() {
}

void Link::OnReadClockOffsetComplete(uint16_t clock_offset) {
  LOG_INFO("UNIMPLEMENTED %s clock_offset:%d", __func__, clock_offset);
  link_manager_->OnReadClockOffset(GetDevice().GetAddress(), clock_offset);
}

void Link::OnModeChange(hci::Mode current_mode, uint16_t interval) {
  LOG_INFO("UNIMPLEMENTED %s mode:%s interval:%d", __func__, hci::ModeText(current_mode).c_str(), interval);
  link_manager_->OnModeChange(GetDevice().GetAddress(), current_mode, interval);
}

void Link::OnSniffSubrating(
@@ -345,7 +345,12 @@ void Link::OnSniffSubrating(
    uint16_t maximum_receive_latency,
    uint16_t minimum_remote_timeout,
    uint16_t minimum_local_timeout) {
  LOG_INFO("UNIMPLEMENTED");
  link_manager_->OnSniffSubrating(
      GetDevice().GetAddress(),
      maximum_transmit_latency,
      maximum_receive_latency,
      minimum_remote_timeout,
      minimum_local_timeout);
}

void Link::OnQosSetupComplete(hci::ServiceType service_type, uint32_t token_rate, uint32_t peak_bandwidth,
@@ -411,6 +416,7 @@ void Link::OnCentralLinkKeyComplete(hci::KeyFlag key_flag) {
}
void Link::OnRoleChange(hci::Role new_role) {
  role_ = new_role;
  link_manager_->OnRoleChange(GetDevice().GetAddress(), new_role);
}
void Link::OnDisconnection(hci::ErrorCode reason) {
  OnAclDisconnected(reason);
+43 −0
Original line number Diff line number Diff line
@@ -118,6 +118,11 @@ LinkSecurityInterfaceListener* LinkManager::GetLinkSecurityInterfaceListener() {
  return link_security_interface_listener_;
}

void LinkManager::RegisterLinkPropertyListener(os::Handler* handler, LinkPropertyListener* listener) {
  link_property_callback_handler_ = handler;
  link_property_listener_ = listener;
}

Link* LinkManager::GetLink(const hci::Address device) {
  if (links_.find(device) == links_.end()) {
    return nullptr;
@@ -345,6 +350,44 @@ void LinkManager::OnReadRemoteExtendedFeatures(
  }
}

void LinkManager::OnRoleChange(hci::Address remote, hci::Role role) {
  if (link_property_callback_handler_ != nullptr) {
    link_property_callback_handler_->CallOn(link_property_listener_, &LinkPropertyListener::OnRoleChange, remote, role);
  }
}

void LinkManager::OnReadClockOffset(hci::Address remote, uint16_t clock_offset) {
  if (link_property_callback_handler_ != nullptr) {
    link_property_callback_handler_->CallOn(
        link_property_listener_, &LinkPropertyListener::OnReadClockOffset, remote, clock_offset);
  }
}

void LinkManager::OnModeChange(hci::Address remote, hci::Mode mode, uint16_t interval) {
  if (link_property_callback_handler_ != nullptr) {
    link_property_callback_handler_->CallOn(
        link_property_listener_, &LinkPropertyListener::OnModeChange, remote, mode, interval);
  }
}

void LinkManager::OnSniffSubrating(
    hci::Address remote,
    uint16_t max_tx_lat,
    uint16_t max_rx_lat,
    uint16_t min_remote_timeout,
    uint16_t min_local_timeout) {
  if (link_property_callback_handler_ != nullptr) {
    link_property_callback_handler_->CallOn(
        link_property_listener_,
        &LinkPropertyListener::OnSniffSubrating,
        remote,
        max_tx_lat,
        max_rx_lat,
        min_remote_timeout,
        min_local_timeout);
  }
}

}  // namespace internal
}  // namespace classic
}  // namespace l2cap
+16 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include "l2cap/classic/internal/dynamic_channel_service_manager_impl.h"
#include "l2cap/classic/internal/fixed_channel_service_manager_impl.h"
#include "l2cap/classic/internal/link.h"
#include "l2cap/classic/link_property_listener.h"
#include "l2cap/classic/link_security_interface.h"
#include "l2cap/internal/parameter_provider.h"
#include "l2cap/internal/scheduler.h"
@@ -71,6 +72,15 @@ class LinkManager : public hci::acl_manager::ConnectionCallbacks {
      hci::Address device, uint8_t lmp_version, uint16_t manufacturer_name, uint16_t sub_version);
  void OnReadRemoteExtendedFeatures(
      hci::Address device, uint8_t page_number, uint8_t max_page_number, uint64_t features);
  void OnRoleChange(hci::Address remote, hci::Role role);
  void OnReadClockOffset(hci::Address remote, uint16_t clock_offset);
  void OnModeChange(hci::Address remote, hci::Mode mode, uint16_t interval);
  void OnSniffSubrating(
      hci::Address remote,
      uint16_t max_tx_lat,
      uint16_t max_rx_lat,
      uint16_t min_remote_timeout,
      uint16_t min_local_timeout);

  // FixedChannelManager methods

@@ -90,6 +100,9 @@ class LinkManager : public hci::acl_manager::ConnectionCallbacks {
  // For the link to get LinkSecurityInterfaceListener
  LinkSecurityInterfaceListener* GetLinkSecurityInterfaceListener();

  // Registerlink callbacks
  void RegisterLinkPropertyListener(os::Handler* handler, LinkPropertyListener* listener);

 private:
  // Handles requests from LinkSecurityInterface
  friend class LinkSecurityInterfaceImpl;
@@ -115,6 +128,9 @@ class LinkManager : public hci::acl_manager::ConnectionCallbacks {
      pending_dynamic_channels_callbacks_;
  os::Handler* link_security_interface_listener_handler_ = nullptr;
  LinkSecurityInterfaceListener* link_security_interface_listener_ = nullptr;
  LinkPropertyListener* link_property_listener_ = nullptr;
  os::Handler* link_property_callback_handler_ = nullptr;

  DISALLOW_COPY_AND_ASSIGN(LinkManager);
};

+4 −0
Original line number Diff line number Diff line
@@ -130,6 +130,10 @@ SecurityInterface* L2capClassicModule::GetSecurityInterface(
  return &pimpl_->security_interface_impl_;
}

void L2capClassicModule::SetLinkPropertyListener(os::Handler* handler, LinkPropertyListener* listener) {
  pimpl_->link_manager_.RegisterLinkPropertyListener(handler, listener);
}

void L2capClassicModule::impl::Dump(
    std::promise<flatbuffers::Offset<L2capClassicModuleData>> promise,
    flatbuffers::FlatBufferBuilder* fb_builder) const {
+7 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@

#include "l2cap/classic/dynamic_channel_manager.h"
#include "l2cap/classic/fixed_channel_manager.h"
#include "l2cap/classic/link_property_listener.h"
#include "l2cap/classic/link_security_interface.h"
#include "l2cap/classic/security_enforcement_interface.h"
#include "module.h"
@@ -65,6 +66,12 @@ class L2capClassicModule : public bluetooth::Module {

  friend security::SecurityModule;

  /**
   * Set the link property listener.
   * This is not synchronized.
   */
  virtual void SetLinkPropertyListener(os::Handler* handler, LinkPropertyListener* listener);

 protected:
  void ListDependencies(ModuleList* list) override;