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

Commit a56322c2 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "leaudio: Add functions for setting CIG parameters" into tm-qpr-dev

parents dd6bfd8b e707d899
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -447,6 +447,44 @@ void LeAudioDeviceGroup::SetTransportLatency(uint8_t direction,
  *transport_latency_us = new_transport_latency_us;
}

uint8_t LeAudioDeviceGroup::GetRtn(uint8_t direction, uint8_t cis_id) {
  LeAudioDevice* leAudioDevice = GetFirstActiveDevice();
  LOG_ASSERT(leAudioDevice)
      << __func__ << " Shouldn't be called without an active device.";

  do {
    auto ases_pair = leAudioDevice->GetAsesByCisId(cis_id);

    if (ases_pair.sink && direction == types::kLeAudioDirectionSink) {
      return ases_pair.sink->retrans_nb;
    } else if (ases_pair.source &&
               direction == types::kLeAudioDirectionSource) {
      return ases_pair.source->retrans_nb;
    }
  } while ((leAudioDevice = GetNextActiveDevice(leAudioDevice)));

  return 0;
}

uint16_t LeAudioDeviceGroup::GetMaxSduSize(uint8_t direction, uint8_t cis_id) {
  LeAudioDevice* leAudioDevice = GetFirstActiveDevice();
  LOG_ASSERT(leAudioDevice)
      << __func__ << " Shouldn't be called without an active device.";

  do {
    auto ases_pair = leAudioDevice->GetAsesByCisId(cis_id);

    if (ases_pair.sink && direction == types::kLeAudioDirectionSink) {
      return ases_pair.sink->max_sdu_size;
    } else if (ases_pair.source &&
               direction == types::kLeAudioDirectionSource) {
      return ases_pair.source->max_sdu_size;
    }
  } while ((leAudioDevice = GetNextActiveDevice(leAudioDevice)));

  return 0;
}

uint8_t LeAudioDeviceGroup::GetPhyBitmask(uint8_t direction) {
  LeAudioDevice* leAudioDevice = GetFirstActiveDevice();
  LOG_ASSERT(leAudioDevice)
+2 −0
Original line number Diff line number Diff line
@@ -243,6 +243,8 @@ class LeAudioDeviceGroup {
  uint16_t GetMaxTransportLatencyStom(void);
  uint16_t GetMaxTransportLatencyMtos(void);
  void SetTransportLatency(uint8_t direction, uint32_t transport_latency_us);
  uint8_t GetRtn(uint8_t direction, uint8_t cis_id);
  uint16_t GetMaxSduSize(uint8_t direction, uint8_t cis_id);
  uint8_t GetPhyBitmask(uint8_t direction);
  uint8_t GetTargetPhy(uint8_t direction);
  bool GetPresentationDelay(uint32_t* delay, uint8_t direction);
+8 −10
Original line number Diff line number Diff line
@@ -954,23 +954,21 @@ class LeAudioGroupStateMachineImpl : public LeAudioGroupStateMachine {
        /* CIS configuration already on list */
        if (iter != cis_cfgs.end()) continue;

        auto ases_pair = leAudioDevice->GetAsesByCisId(cis);
        EXT_CIS_CFG cis_cfg = {0, 0, 0, 0, 0, 0, 0};

        cis_cfg.cis_id = ase->cis_id;
        cis_cfg.max_sdu_size_mtos = group->GetMaxSduSize(
            le_audio::types::kLeAudioDirectionSink, ase->cis_id);
        cis_cfg.max_sdu_size_stom = group->GetMaxSduSize(
            le_audio::types::kLeAudioDirectionSource, ase->cis_id);
        cis_cfg.phy_mtos =
            group->GetPhyBitmask(le_audio::types::kLeAudioDirectionSink);
        cis_cfg.phy_stom =
            group->GetPhyBitmask(le_audio::types::kLeAudioDirectionSource);

        if (ases_pair.sink) {
          cis_cfg.max_sdu_size_mtos = ases_pair.sink->max_sdu_size;
          cis_cfg.rtn_mtos = ases_pair.sink->retrans_nb;
        }
        if (ases_pair.source) {
          cis_cfg.max_sdu_size_stom = ases_pair.source->max_sdu_size;
          cis_cfg.rtn_stom = ases_pair.source->retrans_nb;
        }
        cis_cfg.rtn_mtos =
            group->GetRtn(le_audio::types::kLeAudioDirectionSink, ase->cis_id);
        cis_cfg.rtn_stom = group->GetRtn(
            le_audio::types::kLeAudioDirectionSource, ase->cis_id);

        cis_cfgs.push_back(cis_cfg);
      } while ((ase = leAudioDevice->GetNextActiveAse(ase)));