OSDN Git Service

Rootcanal: fix ISO packet routing
authorJakub Pawlowski <jpawlowski@google.com>
Fri, 19 Feb 2021 18:52:51 +0000 (19:52 +0100)
committerJakub Pawlowski <jpawlowski@google.com>
Fri, 19 Feb 2021 18:54:22 +0000 (19:54 +0100)
Bug: 177907117
Test: NotImlementedYet
Change-Id: Ic75f6a11b5494fd351a307647337817d2bbb13ea

vendor_libs/test_vendor_lib/model/controller/dual_mode_controller.cc
vendor_libs/test_vendor_lib/model/devices/h4_packetizer.cc
vendor_libs/test_vendor_lib/model/devices/h4_packetizer.h
vendor_libs/test_vendor_lib/model/devices/hci_socket_device.cc
vendor_libs/test_vendor_lib/model/devices/hci_socket_device.h

index b056bf9..6ff1af1 100644 (file)
@@ -353,6 +353,7 @@ void DualModeController::HandleIso(
     std::shared_ptr<std::vector<uint8_t>> packet) {
   bluetooth::hci::PacketView<bluetooth::hci::kLittleEndian> raw_packet(packet);
   auto iso = bluetooth::hci::IsoView::Create(raw_packet);
+  ASSERT(iso.IsValid());
   link_layer_controller_.HandleIso(iso);
 }
 
index 924ea25..721a1f9 100644 (file)
@@ -52,12 +52,14 @@ size_t H4Packetizer::HciGetPacketLengthForType(PacketType type,
 H4Packetizer::H4Packetizer(int fd, PacketReadCallback command_cb,
                            PacketReadCallback event_cb,
                            PacketReadCallback acl_cb, PacketReadCallback sco_cb,
+                           PacketReadCallback iso_cb,
                            ClientDisconnectCallback disconnect_cb)
     : uart_fd_(fd),
       command_cb_(std::move(command_cb)),
       event_cb_(std::move(event_cb)),
       acl_cb_(std::move(acl_cb)),
       sco_cb_(std::move(sco_cb)),
+      iso_cb_(std::move(iso_cb)),
       disconnect_cb_(std::move(disconnect_cb)) {}
 
 size_t H4Packetizer::Send(uint8_t type, const uint8_t* data, size_t length) {
@@ -90,6 +92,9 @@ void H4Packetizer::OnPacketReady() {
     case PacketType::EVENT:
       event_cb_(packet_);
       break;
+    case PacketType::ISO:
+      iso_cb_(packet_);
+      break;
     default:
       LOG_ALWAYS_FATAL("Unimplemented packet type %d",
                        static_cast<int>(hci_packet_type_));
index c6a59a0..2f73007 100644 (file)
@@ -37,8 +37,10 @@ enum class PacketType : uint8_t {
 
 class H4Packetizer : public HciProtocol {
  public:
-  H4Packetizer(int fd, PacketReadCallback command_cb, PacketReadCallback event_cb, PacketReadCallback acl_cb,
-               PacketReadCallback sco_cb, ClientDisconnectCallback disconnect_cb);
+  H4Packetizer(int fd, PacketReadCallback command_cb,
+               PacketReadCallback event_cb, PacketReadCallback acl_cb,
+               PacketReadCallback sco_cb, PacketReadCallback iso_cb,
+               ClientDisconnectCallback disconnect_cb);
 
   size_t Send(uint8_t type, const uint8_t* data, size_t length) override;
 
@@ -74,6 +76,7 @@ class H4Packetizer : public HciProtocol {
   PacketReadCallback event_cb_;
   PacketReadCallback acl_cb_;
   PacketReadCallback sco_cb_;
+  PacketReadCallback iso_cb_;
 
   ClientDisconnectCallback disconnect_cb_;
   bool disconnected_{false};
index 3f17fc8..e5213d0 100644 (file)
@@ -88,6 +88,11 @@ HciSocketDevice::HciSocketDevice(int file_descriptor) : socket_file_descriptor_(
         std::shared_ptr<std::vector<uint8_t>> packet_copy = std::make_shared<std::vector<uint8_t>>(raw_sco);
         HandleSco(packet_copy);
       },
+      [this](const std::vector<uint8_t>& raw_iso) {
+        std::shared_ptr<std::vector<uint8_t>> packet_copy =
+            std::make_shared<std::vector<uint8_t>>(raw_iso);
+        HandleIso(packet_copy);
+      },
       [this]() {
         LOG_INFO("HCI socket device disconnected");
         socket_file_descriptor_ = -1;
index 36730a1..9a1860f 100644 (file)
@@ -55,6 +55,7 @@ class HciSocketDevice : public DualModeController {
                    [](const std::vector<uint8_t>&) {},
                    [](const std::vector<uint8_t>&) {},
                    [](const std::vector<uint8_t>&) {},
+                   [](const std::vector<uint8_t>&) {},
                    [] {}};
 
   std::function<void()> close_callback_;