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

Commit d34022ce authored by Chris Manton's avatar Chris Manton Committed by Automerger Merge Worker
Browse files

gd_acl: Add link policy mode methods am: 868793f7

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

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I43a25cb225fa72d2e16638d56a59bda2b00461cb
parents 47ca41a4 868793f7
Loading
Loading
Loading
Loading
+83 −1
Original line number Diff line number Diff line
@@ -356,6 +356,24 @@ class ClassicShimAclConnection
    connection_->Disconnect(reason);
  }

  void HoldMode(uint16_t max_interval, uint16_t min_interval) {
    ASSERT(connection_->HoldMode(max_interval, min_interval));
  }

  void SniffMode(uint16_t max_interval, uint16_t min_interval, uint16_t attempt,
                 uint16_t timeout) {
    ASSERT(
        connection_->SniffMode(max_interval, min_interval, attempt, timeout));
  }

  void ExitSniffMode() { ASSERT(connection_->ExitSniffMode()); }

  void SniffSubrating(uint16_t maximum_latency, uint16_t minimum_remote_timeout,
                      uint16_t minimum_local_timeout) {
    ASSERT(connection_->SniffSubrating(maximum_latency, minimum_remote_timeout,
                                       minimum_local_timeout));
  }

 private:
  OnDisconnect on_disconnect_;
  const shim::legacy::acl_classic_link_interface_t interface_;
@@ -447,10 +465,43 @@ struct bluetooth::shim::legacy::Acl::impl {
           handle_to_le_connection_map_.end();
  }

  bool ClassicConnectionExists(HciHandle handle) {
    return handle_to_classic_connection_map_.find(handle) !=
           handle_to_classic_connection_map_.end();
  }

  void EnqueueLePacket(HciHandle handle,
                       std::unique_ptr<bluetooth::packet::RawBuilder> packet) {
    if (ClassicConnectionExists(handle))
      handle_to_le_connection_map_[handle]->EnqueuePacket(std::move(packet));
  }

  void HoldMode(HciHandle handle, uint16_t max_interval,
                uint16_t min_interval) {
    if (ClassicConnectionExists(handle))
      handle_to_classic_connection_map_[handle]->HoldMode(max_interval,
                                                          min_interval);
  }

  void ExitSniffMode(HciHandle handle) {
    if (ClassicConnectionExists(handle))
      handle_to_classic_connection_map_[handle]->ExitSniffMode();
  }

  void SniffMode(HciHandle handle, uint16_t max_interval, uint16_t min_interval,
                 uint16_t attempt, uint16_t timeout) {
    if (ClassicConnectionExists(handle))
      handle_to_classic_connection_map_[handle]->SniffMode(
          max_interval, min_interval, attempt, timeout);
  }

  void SniffSubrating(HciHandle handle, uint16_t maximum_latency,
                      uint16_t minimum_remote_timeout,
                      uint16_t minimum_local_timeout) {
    if (ClassicConnectionExists(handle))
      handle_to_classic_connection_map_[handle]->SniffSubrating(
          maximum_latency, minimum_remote_timeout, minimum_local_timeout);
  }
};

#define DUMPSYS_TAG "shim::legacy::l2cap"
@@ -840,3 +891,34 @@ void bluetooth::shim::legacy::Acl::DisconnectLe(uint16_t handle,
             handle);
  }
}
bool bluetooth::shim::legacy::Acl::HoldMode(uint16_t hci_handle,
                                            uint16_t max_interval,
                                            uint16_t min_interval) {
  handler_->CallOn(pimpl_.get(), &Acl::impl::HoldMode, hci_handle, max_interval,
                   min_interval);
  return false;  // TODO void
}

bool bluetooth::shim::legacy::Acl::SniffMode(uint16_t hci_handle,
                                             uint16_t max_interval,
                                             uint16_t min_interval,
                                             uint16_t attempt,
                                             uint16_t timeout) {
  handler_->CallOn(pimpl_.get(), &Acl::impl::SniffMode, hci_handle,
                   max_interval, min_interval, attempt, timeout);
  return false;
}

bool bluetooth::shim::legacy::Acl::ExitSniffMode(uint16_t hci_handle) {
  handler_->CallOn(pimpl_.get(), &Acl::impl::ExitSniffMode, hci_handle);
  return false;
}

bool bluetooth::shim::legacy::Acl::SniffSubrating(
    uint16_t hci_handle, uint16_t maximum_latency,
    uint16_t minimum_remote_timeout, uint16_t minimum_local_timeout) {
  handler_->CallOn(pimpl_.get(), &Acl::impl::SniffSubrating, hci_handle,
                   maximum_latency, minimum_remote_timeout,
                   minimum_local_timeout);
  return false;
}
+14 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include "gd/os/handler.h"
#include "gd/packet/raw_builder.h"
#include "main/shim/acl_legacy_interface.h"
#include "main/shim/link_policy_interface.h"
#include "stack/include/bt_types.h"

namespace bluetooth {
@@ -32,7 +33,8 @@ namespace shim {
namespace legacy {

class Acl : public hci::acl_manager::ConnectionCallbacks,
            public hci::acl_manager::LeConnectionCallbacks {
            public hci::acl_manager::LeConnectionCallbacks,
            public LinkPolicyInterface {
 public:
  Acl(os::Handler* handler, const acl_interface_t& acl_interface);
  ~Acl();
@@ -58,6 +60,17 @@ class Acl : public hci::acl_manager::ConnectionCallbacks,
  void DisconnectClassic(uint16_t handle, tHCI_STATUS reason);
  void DisconnectLe(uint16_t handle, tHCI_STATUS reason);

  // LinkPolicyInterface
  bool HoldMode(uint16_t hci_handle, uint16_t max_interval,
                uint16_t min_interval) override;
  bool SniffMode(uint16_t hci_handle, uint16_t max_interval,
                 uint16_t min_interval, uint16_t attempt,
                 uint16_t timeout) override;
  bool ExitSniffMode(uint16_t hci_handle) override;
  bool SniffSubrating(uint16_t hci_handle, uint16_t maximum_latency,
                      uint16_t minimum_remote_timeout,
                      uint16_t minimum_local_timeout) override;

  void WriteData(uint16_t hci_handle,
                 std::unique_ptr<bluetooth::packet::RawBuilder> packet);

+39 −0
Original line number Diff line number Diff line
/*
 * Copyright 2020 The Android Open Source Project
 *
 * 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.
 */

#pragma once

#include <cstdint>

namespace bluetooth {
namespace shim {

class LinkPolicyInterface {
 public:
  virtual bool HoldMode(uint16_t handle, uint16_t max_interval,
                        uint16_t min_interval) = 0;
  virtual bool SniffMode(uint16_t handle, uint16_t max_interval,
                         uint16_t min_interval, uint16_t attempt,
                         uint16_t timeout) = 0;
  virtual bool ExitSniffMode(uint16_t handle) = 0;
  virtual bool SniffSubrating(uint16_t handle, uint16_t maximum_latency,
                              uint16_t minimum_remote_timeout,
                              uint16_t minimum_local_timeout) = 0;
  virtual ~LinkPolicyInterface() = default;
};

}  // namespace shim
}  // namespace bluetooth