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

Commit c127c9fd authored by Yuyang Huang's avatar Yuyang Huang
Browse files

Add OnIsoTrafficActiveCallbacks

Test: atest net_test_btm_iso
Bug: 249177377
Change-Id: I382ff5eab22947947d9378fe9d4575a2875a7e1c
parent a17741fe
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -46,6 +46,11 @@ void IsoManager::RegisterBigCallbacks(
  pimpl_->RegisterBigCallbacks(callbacks);
}

void IsoManager::RegisterOnIsoTrafficActiveCallback(void callback(bool)) const {
  if (!pimpl_) return;
  pimpl_->RegisterOnIsoTrafficActiveCallbacks(callback);
}

void IsoManager::CreateCig(uint8_t cig_id,
                           struct iso_manager::cig_create_params cig_params) {
  if (!pimpl_) return;
+2 −0
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ struct MockIsoManager {
              (bluetooth::hci::iso_manager::CigCallbacks * callbacks), (const));
  MOCK_METHOD((void), RegisterBigCallbacks,
              (bluetooth::hci::iso_manager::BigCallbacks * callbacks), (const));
  MOCK_METHOD((void), RegisterOnIsoTrafficActiveCallbacks,
              (void callbacks(bool)), (const));
  MOCK_METHOD(
      (void), CreateCig,
      (uint8_t cig_id,
+4 −0
Original line number Diff line number Diff line
@@ -61,6 +61,10 @@ void IsoManager::RegisterBigCallbacks(BigCallbacks* callbacks) const {
  pimpl_->iso_impl_->handle_register_big_callbacks(callbacks);
}

void IsoManager::RegisterOnIsoTrafficActiveCallback(void callback(bool)) const {
  pimpl_->iso_impl_->handle_register_on_iso_traffic_active_callback(callback);
}

void IsoManager::CreateCig(uint8_t cig_id,
                           struct iso_manager::cig_create_params cig_params) {
  pimpl_->iso_impl_->create_cig(cig_id, std::move(cig_params));
+46 −0
Original line number Diff line number Diff line
@@ -17,8 +17,10 @@

#pragma once

#include <list>
#include <map>
#include <memory>
#include <mutex>
#include <set>

#include "base/functional/bind.h"
@@ -106,6 +108,13 @@ struct iso_impl {
    big_callbacks_ = callbacks;
  }

  void handle_register_on_iso_traffic_active_callback(void callback(bool)) {
    LOG_ASSERT(callback != nullptr) << "Invalid OnIsoTrafficActive callback";
    const std::lock_guard<std::mutex> lock(
        on_iso_traffic_active_callbacks_list_mutex_);
    on_iso_traffic_active_callbacks_list_.push_back(callback);
  }

  void on_set_cig_params(uint8_t cig_id, uint32_t sdu_itv_mtos, uint8_t* stream,
                         uint16_t len) {
    uint8_t cis_cnt;
@@ -160,6 +169,14 @@ struct iso_impl {
    }

    cig_callbacks_->OnCigEvent(evt_code, &evt);

    if (evt_code == kIsoEventCigOnCreateCmpl) {
      const std::lock_guard<std::mutex> lock(
          on_iso_traffic_active_callbacks_list_mutex_);
      for (auto callback : on_iso_traffic_active_callbacks_list_) {
        callback(true);
      }
    }
  }

  void create_cig(uint8_t cig_id,
@@ -220,6 +237,14 @@ struct iso_impl {
    }

    cig_callbacks_->OnCigEvent(kIsoEventCigOnRemoveCmpl, &evt);

    {
      const std::lock_guard<std::mutex> lock(
          on_iso_traffic_active_callbacks_list_mutex_);
      for (auto callback : on_iso_traffic_active_callbacks_list_) {
        callback(false);
      }
    }
  }

  void remove_cig(uint8_t cig_id, bool force) {
@@ -713,6 +738,14 @@ struct iso_impl {
    }

    big_callbacks_->OnBigEvent(kIsoEventBigOnCreateCmpl, &evt);

    {
      const std::lock_guard<std::mutex> lock(
          on_iso_traffic_active_callbacks_list_mutex_);
      for (auto callbacks : on_iso_traffic_active_callbacks_list_) {
        callbacks(true);
      }
    }
  }

  void process_terminate_big_cmpl_pkt(uint8_t len, uint8_t* data) {
@@ -737,6 +770,14 @@ struct iso_impl {

    LOG_ASSERT(is_known_handle) << "No such big: " << +evt.big_id;
    big_callbacks_->OnBigEvent(kIsoEventBigOnTerminateCmpl, &evt);

    {
      const std::lock_guard<std::mutex> lock(
          on_iso_traffic_active_callbacks_list_mutex_);
      for (auto callbacks : on_iso_traffic_active_callbacks_list_) {
        callbacks(false);
      }
    }
  }

  void create_big(uint8_t big_id, struct big_create_params big_params) {
@@ -922,6 +963,9 @@ struct iso_impl {
    dprintf(fd, "  ISO Manager:\n");
    dprintf(fd, "    Available credits: %d\n", iso_credits_.load());
    dprintf(fd, "    Controller buffer size: %d\n", iso_buffer_size_);
    dprintf(fd, "    Num of ISO traffic callbacks: %lu\n",
            static_cast<unsigned long>(
                on_iso_traffic_active_callbacks_list_.size()));
    dprintf(fd, "    CISes:\n");
    for (auto const& cis_pair : conn_hdl_to_cis_map_) {
      dprintf(fd, "      CIS Connection handle: %d\n", cis_pair.first);
@@ -959,6 +1003,8 @@ struct iso_impl {

  CigCallbacks* cig_callbacks_ = nullptr;
  BigCallbacks* big_callbacks_ = nullptr;
  std::mutex on_iso_traffic_active_callbacks_list_mutex_;
  std::list<void (*)(bool)> on_iso_traffic_active_callbacks_list_;
};

}  // namespace iso_manager
+7 −0
Original line number Diff line number Diff line
@@ -85,6 +85,13 @@ class IsoManager {
   */
  virtual void RegisterBigCallbacks(iso_manager::BigCallbacks* callbacks) const;

  /**
   * Set true when CIG or BIG is active, false when CIG or BIG is closed
   *
   * @param callback function takes bool as parameter and return void
   */
  virtual void RegisterOnIsoTrafficActiveCallback(void callback(bool)) const;

  /**
   * Creates connected isochronous group (CIG) according to given params.
   *
Loading