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

Commit 3e3af8cb authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

Rootcanal: fix ISO packet routing

Bug: 177907117
Test: NotImlementedYet
Change-Id: Ic75f6a11b5494fd351a307647337817d2bbb13ea
parent 2b620b2c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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);
}

+5 −0
Original line number Diff line number Diff line
@@ -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_));
+5 −2
Original line number Diff line number Diff line
@@ -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};
+5 −0
Original line number Diff line number Diff line
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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_;