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

Commit 2d56c026 authored by Jack He's avatar Jack He
Browse files

L2CAP: Rename classic facade and minor refactor

* Add classic annotation to L2CAP classic facades and cert classes so
  that we can make LE ones later
* Add ToString method to le::internal::Link and classic::internal::Link
* AclConnection should have a default address type of PUBLIC

Bug: 140938432
Test: make, cert test
Change-Id: I4d7bb31a82805e60af17fe25c99c0ef783c9bee3
parent 1de30943
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ class RootCertService : public ::bluetooth::cert::RootCert::Service {
        break;
      case BluetoothModule::L2CAP:
        modules.add<::bluetooth::cert::ReadOnlyPropertyServerModule>();
        modules.add<::bluetooth::l2cap::classic::cert::L2capModuleCertModule>();
        modules.add<::bluetooth::l2cap::classic::cert::L2capClassicModuleCertModule>();
        break;
      default:
        return ::grpc::Status(::grpc::StatusCode::INVALID_ARGUMENT, "invalid module under test");
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ class RootFacadeService : public ::bluetooth::facade::RootFacade::Service {
        break;
      case BluetoothModule::L2CAP:
        modules.add<::bluetooth::facade::ReadOnlyPropertyServerModule>();
        modules.add<::bluetooth::l2cap::classic::L2capModuleFacadeModule>();
        modules.add<::bluetooth::l2cap::classic::L2capClassicModuleFacadeModule>();
        break;
      default:
        return ::grpc::Status(::grpc::StatusCode::INVALID_ARGUMENT, "invalid module under test");
+1 −1
Original line number Diff line number Diff line
@@ -151,7 +151,7 @@ class AclConnection {
 private:
  friend AclManager;
  AclConnection(const AclManager* manager, uint16_t handle, Address address)
      : manager_(manager), handle_(handle), address_(address) {}
      : manager_(manager), handle_(handle), address_(address), address_type_(AddressType::PUBLIC_DEVICE_ADDRESS) {}
  AclConnection(const AclManager* manager, uint16_t handle, Address address, AddressType address_type, Role role)
      : manager_(manager), handle_(handle), address_(address), address_type_(address_type), role_(role) {}
  const AclManager* manager_;
+1 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ package bluetooth.l2cap.classic.cert;
import "google/protobuf/empty.proto";
import "facade/common.proto";

service L2capModuleCert {
service L2capClassicModuleCert {
  rpc SendL2capPacket(L2capPacket) returns (google.protobuf.Empty) {}

  rpc SetupLink(SetupLinkRequest) returns (SetupLinkResponse) {}
+15 −15
Original line number Diff line number Diff line
@@ -14,8 +14,6 @@
 * limitations under the License.
 */

#include "l2cap/classic/cert/cert.h"

#include <condition_variable>
#include <cstdint>
#include <memory>
@@ -29,6 +27,7 @@
#include "hci/cert/cert.h"
#include "hci/hci_packets.h"
#include "l2cap/classic/cert/api.grpc.pb.h"
#include "l2cap/classic/cert/cert.h"
#include "l2cap/classic/l2cap_classic_module.h"
#include "l2cap/l2cap_packets.h"
#include "os/log.h"
@@ -52,9 +51,9 @@ using namespace facade;

constexpr auto kEventTimeout = std::chrono::seconds(1);

class L2capModuleCertService : public L2capModuleCert::Service {
class L2capClassicModuleCertService : public L2capClassicModuleCert::Service {
 public:
  L2capModuleCertService(hci::AclManager* acl_manager, os::Handler* facade_handler)
  L2capClassicModuleCertService(hci::AclManager* acl_manager, os::Handler* facade_handler)
      : handler_(facade_handler), acl_manager_(acl_manager) {
    ASSERT(handler_ != nullptr);
    acl_manager_->RegisterCallbacks(&acl_callbacks, handler_);
@@ -323,7 +322,7 @@ class L2capModuleCertService : public L2capModuleCert::Service {
  void send_packet_from_queue() {
    if (outgoing_packet_queue_.size() == 1) {
      acl_connection_->GetAclQueueEnd()->RegisterEnqueue(
          handler_, common::Bind(&L2capModuleCertService::enqueue_packet_to_acl, common::Unretained(this)));
          handler_, common::Bind(&L2capClassicModuleCertService::enqueue_packet_to_acl, common::Unretained(this)));
    }
  }

@@ -473,12 +472,13 @@ class L2capModuleCertService : public L2capModuleCert::Service {

  class AclCallbacks : public hci::ConnectionCallbacks {
   public:
    AclCallbacks(L2capModuleCertService* module) : module_(module) {}
    AclCallbacks(L2capClassicModuleCertService* module) : module_(module) {}
    void OnConnectSuccess(std::unique_ptr<hci::AclConnection> connection) override {
      module_->acl_connection_ = std::move(connection);
      module_->acl_connection_->RegisterDisconnectCallback(common::BindOnce([](hci::ErrorCode) {}), module_->handler_);
      module_->acl_connection_->GetAclQueueEnd()->RegisterDequeue(
          module_->handler_, common::Bind(&L2capModuleCertService::on_incoming_packet, common::Unretained(module_)));
          module_->handler_,
          common::Bind(&L2capClassicModuleCertService::on_incoming_packet, common::Unretained(module_)));
      dequeue_registered_ = true;
      FetchL2capLogResponse response;
      response.mutable_link_up()->mutable_remote()->set_address(module_->acl_connection_->GetAddress().ToString());
@@ -494,36 +494,36 @@ class L2capModuleCertService : public L2capModuleCert::Service {

    bool dequeue_registered_ = false;

    L2capModuleCertService* module_;
    L2capClassicModuleCertService* module_;
  } acl_callbacks{this};

  std::mutex mutex_;
};

void L2capModuleCertModule::ListDependencies(ModuleList* list) {
void L2capClassicModuleCertModule::ListDependencies(ModuleList* list) {
  ::bluetooth::grpc::GrpcFacadeModule::ListDependencies(list);
  list->add<hci::AclManager>();
  list->add<hci::HciLayer>();
}

void L2capModuleCertModule::Start() {
void L2capClassicModuleCertModule::Start() {
  ::bluetooth::grpc::GrpcFacadeModule::Start();
  GetDependency<hci::HciLayer>()->EnqueueCommand(hci::WriteScanEnableBuilder::Create(hci::ScanEnable::PAGE_SCAN_ONLY),
                                                 common::BindOnce([](hci::CommandCompleteView) {}), GetHandler());
  service_ = new L2capModuleCertService(GetDependency<hci::AclManager>(), GetHandler());
  service_ = new L2capClassicModuleCertService(GetDependency<hci::AclManager>(), GetHandler());
}

void L2capModuleCertModule::Stop() {
void L2capClassicModuleCertModule::Stop() {
  delete service_;
  ::bluetooth::grpc::GrpcFacadeModule::Stop();
}

::grpc::Service* L2capModuleCertModule::GetService() const {
::grpc::Service* L2capClassicModuleCertModule::GetService() const {
  return service_;
}

const ModuleFactory L2capModuleCertModule::Factory =
    ::bluetooth::ModuleFactory([]() { return new L2capModuleCertModule(); });
const ModuleFactory L2capClassicModuleCertModule::Factory =
    ::bluetooth::ModuleFactory([]() { return new L2capClassicModuleCertModule(); });

}  // namespace cert
}  // namespace classic
Loading