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

Commit c5f55c61 authored by Hansong Zhang's avatar Hansong Zhang
Browse files

L2cap dynamic channel and service

Add internal implementation for ClassicDynamicChannel
Signalling packets will be handled in next commit

Test: cert/run_cert.sh and bluetooth_test_gd
Bug: 138260719
Change-Id: I3b0fee9837034988e6490372ffbfd5ece90250f7
parent 00f4f41d
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -11,8 +11,10 @@ filegroup {
        "classic_fixed_channel_service.cc",
        "internal/classic_dynamic_channel_allocator.cc",
        "internal/classic_dynamic_channel_impl.cc",
        "internal/classic_dynamic_channel_service_manager_impl.cc",
        "internal/classic_fixed_channel_impl.cc",
        "internal/classic_fixed_channel_service_manager_impl.cc",
        "internal/classic_link.cc",
        "internal/classic_link_manager.cc",
        "internal/le_fixed_channel_impl.cc",
        "internal/le_fixed_channel_service_manager_impl.cc",
@@ -30,6 +32,7 @@ filegroup {
        "l2cap_packet_test.cc",
        "internal/classic_dynamic_channel_allocator_test.cc",
        "internal/classic_dynamic_channel_impl_test.cc",
        "internal/classic_dynamic_channel_service_manager_test.cc",
        "internal/classic_fixed_channel_impl_test.cc",
        "internal/classic_fixed_channel_service_manager_test.cc",
        "internal/classic_link_manager_test.cc",
+12 −0
Original line number Diff line number Diff line
@@ -9,6 +9,8 @@ service L2capModuleCert {
  rpc SendL2capPacket(L2capPacket) returns (google.protobuf.Empty) {}
  rpc FetchL2capData(facade.EventStreamRequest) returns (stream L2capPacket) {}
  rpc FetchConnectionComplete(facade.EventStreamRequest) returns (stream ConnectionCompleteEvent) {}
  rpc DisconnectLink(DisconnectLinkRequest) returns (google.protobuf.Empty) {}
  rpc SendConnectionRequest(ConnectionRequest) returns (google.protobuf.Empty) {}
}

message L2capPacket {
@@ -20,3 +22,13 @@ message L2capPacket {
message ConnectionCompleteEvent {
  facade.BluetoothAddress remote = 1;
}

message DisconnectLinkRequest {
  facade.BluetoothAddress remote = 1;
}

message ConnectionRequest {
  facade.BluetoothAddress remote = 1;
  uint32 dcid = 2;
  uint32 scid = 3;
}
+10 −4
Original line number Diff line number Diff line
@@ -16,22 +16,28 @@

#include "l2cap/classic_dynamic_channel.h"
#include "common/bind.h"
#include "l2cap/internal/classic_dynamic_channel_impl.h"

namespace bluetooth {
namespace l2cap {

hci::Address ClassicDynamicChannel::GetDevice() const {
  return {};
  return impl_->GetDevice();
}

void ClassicDynamicChannel::RegisterOnCloseCallback(os::Handler* user_handler,
                                                    ClassicDynamicChannel::OnCloseCallback on_close_callback) {}
                                                    ClassicDynamicChannel::OnCloseCallback on_close_callback) {
  l2cap_handler_->Post(common::BindOnce(&internal::ClassicDynamicChannelImpl::RegisterOnCloseCallback, impl_,
                                        user_handler, std::move(on_close_callback)));
}

void ClassicDynamicChannel::Close() {}
void ClassicDynamicChannel::Close() {
  l2cap_handler_->Post(common::BindOnce(&internal::ClassicDynamicChannelImpl::Close, impl_));
}

common::BidiQueueEnd<packet::BasePacketBuilder, packet::PacketView<packet::kLittleEndian>>*
ClassicDynamicChannel::GetQueueUpEnd() const {
  return nullptr;
  return impl_->GetQueueUpEnd();
}
}  // namespace l2cap
}  // namespace bluetooth
 No newline at end of file
+11 −1
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
 */

#include "l2cap/classic_dynamic_channel_manager.h"
#include "l2cap/internal/classic_dynamic_channel_service_impl.h"
#include "l2cap/internal/classic_dynamic_channel_service_manager_impl.h"
#include "l2cap/internal/classic_link_manager.h"

namespace bluetooth {
@@ -30,7 +32,15 @@ bool ClassicDynamicChannelManager::ConnectChannel(hci::Address device, Psm psm,
bool ClassicDynamicChannelManager::RegisterService(Psm psm, const SecurityPolicy& security_policy,
                                                   OnRegistrationCompleteCallback on_registration_complete,
                                                   OnConnectionOpenCallback on_connection_open, os::Handler* handler) {
  return false;
  internal::ClassicDynamicChannelServiceImpl::PendingRegistration pending_registration{
      .user_handler_ = handler,
      .on_registration_complete_callback_ = std::move(on_registration_complete),
      .on_connection_open_callback_ = std::move(on_connection_open)};
  l2cap_layer_handler_->Post(common::BindOnce(&internal::ClassicDynamicChannelServiceManagerImpl::Register,
                                              common::Unretained(service_manager_), psm,
                                              std::move(pending_registration)));

  return true;
}

}  // namespace l2cap
+7 −1
Original line number Diff line number Diff line
@@ -16,12 +16,18 @@

#include "l2cap/classic_dynamic_channel_service.h"
#include "common/bind.h"
#include "l2cap/internal/classic_dynamic_channel_service_manager_impl.h"

namespace bluetooth {
namespace l2cap {

void ClassicDynamicChannelService::Unregister(OnUnregisteredCallback on_unregistered,
                                              os::Handler* on_unregistered_handler) {}
                                              os::Handler* on_unregistered_handler) {
  ASSERT_LOG(manager_ != nullptr, "this service is invalid");
  l2cap_layer_handler_->Post(common::BindOnce(&internal::ClassicDynamicChannelServiceManagerImpl::Unregister,
                                              common::Unretained(manager_), psm_, std::move(on_unregistered),
                                              on_unregistered_handler));
}

}  // namespace l2cap
}  // namespace bluetooth
Loading