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

Commit 38301895 authored by Myles Watson's avatar Myles Watson Committed by Gerrit Code Review
Browse files

Merge "[HCI HAL ANDROID] add callback mutex"

parents 44b7ec7a c268f8bd
Loading
Loading
Loading
Loading
+25 −8
Original line number Diff line number Diff line
@@ -73,11 +73,13 @@ class InternalHciCallbacks : public IBluetoothHciCallbacks {
  }

  void SetCallback(HciHalCallbacks* callback) {
    std::lock_guard<std::mutex> incoming_packet_callback_lock(incoming_packet_callback_mutex_);
    ASSERT(callback_ == nullptr && callback != nullptr);
    callback_ = callback;
  }

  void ResetCallback() {
    std::lock_guard<std::mutex> incoming_packet_callback_lock(incoming_packet_callback_mutex_);
    LOG_INFO("callbacks have been reset!");
    callback_ = nullptr;
  }
@@ -101,9 +103,12 @@ class InternalHciCallbacks : public IBluetoothHciCallbacks {
    if (common::init_flags::btaa_hci_is_enabled()) {
      btaa_logger_->Capture(received_hci_packet, SnoopLogger::PacketType::EVT);
    }
    {
      std::lock_guard<std::mutex> incoming_packet_callback_lock(incoming_packet_callback_mutex_);
      if (callback_ != nullptr) {
        callback_->hciEventReceived(std::move(received_hci_packet));
      }
    }
    return Void();
  }

@@ -114,9 +119,12 @@ class InternalHciCallbacks : public IBluetoothHciCallbacks {
    if (common::init_flags::btaa_hci_is_enabled()) {
      btaa_logger_->Capture(received_hci_packet, SnoopLogger::PacketType::ACL);
    }
    {
      std::lock_guard<std::mutex> incoming_packet_callback_lock(incoming_packet_callback_mutex_);
      if (callback_ != nullptr) {
        callback_->aclDataReceived(std::move(received_hci_packet));
      }
    }
    return Void();
  }

@@ -127,9 +135,13 @@ class InternalHciCallbacks : public IBluetoothHciCallbacks {
    if (common::init_flags::btaa_hci_is_enabled()) {
      btaa_logger_->Capture(received_hci_packet, SnoopLogger::PacketType::SCO);
    }

    {
      std::lock_guard<std::mutex> incoming_packet_callback_lock(incoming_packet_callback_mutex_);
      if (callback_ != nullptr) {
        callback_->scoDataReceived(std::move(received_hci_packet));
      }
    }
    return Void();
  }

@@ -137,13 +149,18 @@ class InternalHciCallbacks : public IBluetoothHciCallbacks {
    common::StopWatch stop_watch(GetTimerText(__func__, data));
    std::vector<uint8_t> received_hci_packet(data.begin(), data.end());
    btsnoop_logger_->Capture(received_hci_packet, SnoopLogger::Direction::INCOMING, SnoopLogger::PacketType::ISO);

    {
      std::lock_guard<std::mutex> incoming_packet_callback_lock(incoming_packet_callback_mutex_);
      if (callback_ != nullptr) {
        callback_->isoDataReceived(std::move(received_hci_packet));
      }
    }
    return Void();
  }

 private:
  std::mutex incoming_packet_callback_mutex_;
  std::promise<void>* init_promise_ = nullptr;
  HciHalCallbacks* callback_ = nullptr;
  activity_attribution::ActivityAttribution* btaa_logger_ = nullptr;