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

Commit 1da3675e authored by Grzegorz Kolodziejczyk's avatar Grzegorz Kolodziejczyk Committed by Automerger Merge Worker
Browse files

Merge "le_audio: Introduce Source listening mode" into main am: 7ae5a1a3

parents 24f3b1d5 7ae5a1a3
Loading
Loading
Loading
Loading
+47 −0
Original line number Original line Diff line number Diff line
@@ -236,6 +236,7 @@ class LeAudioClientImpl : public LeAudioClient {
        in_voip_call_(false),
        in_voip_call_(false),
        sink_monitor_mode_(false),
        sink_monitor_mode_(false),
        sink_monitor_notified_status_(std::nullopt),
        sink_monitor_notified_status_(std::nullopt),
        source_monitor_mode_(false),
        current_source_codec_config({0, 0, 0, 0}),
        current_source_codec_config({0, 0, 0, 0}),
        current_sink_codec_config({0, 0, 0, 0}),
        current_sink_codec_config({0, 0, 0, 0}),
        le_audio_source_hal_client_(nullptr),
        le_audio_source_hal_client_(nullptr),
@@ -916,6 +917,16 @@ class LeAudioClientImpl : public LeAudioClient {
          bluetooth::common::time_get_os_boottime_us();
          bluetooth::common::time_get_os_boottime_us();
    }
    }


    /* If assistant have some connected delegators that needs to be informed
     * when there would be request to stream unicast.
     */
    if (IS_FLAG_ENABLED(leaudio_broadcast_audio_handover_policies) &&
        !sink_monitor_mode_ && source_monitor_mode_ && !group->IsStreaming()) {
      callbacks_->OnUnicastMonitorModeStatus(
          le_audio::types::kLeAudioDirectionSource,
          UnicastMonitorModeStatus::STREAMING_REQUESTED);
    }

    bool result = groupStateMachine_->StartStream(
    bool result = groupStateMachine_->StartStream(
        group, configuration_context_type, remote_contexts, ccids);
        group, configuration_context_type, remote_contexts, ccids);


@@ -1051,6 +1062,32 @@ class LeAudioClientImpl : public LeAudioClient {


      LOG_DEBUG("enable: %d", enable);
      LOG_DEBUG("enable: %d", enable);
      sink_monitor_mode_ = enable;
      sink_monitor_mode_ = enable;
    } else if (direction == le_audio::types::kLeAudioDirectionSource) {
      LOG_DEBUG("enable: %d", enable);
      source_monitor_mode_ = enable;

      if (!enable) {
        return;
      }

      LeAudioDeviceGroup* group = aseGroups_.FindById(active_group_id_);
      if (!group) {
        callbacks_->OnUnicastMonitorModeStatus(
            le_audio::types::kLeAudioDirectionSource,
            UnicastMonitorModeStatus::STREAMING_SUSPENDED);

        return;
      }

      if (group->IsStreaming()) {
        callbacks_->OnUnicastMonitorModeStatus(
            le_audio::types::kLeAudioDirectionSource,
            UnicastMonitorModeStatus::STREAMING);
      } else {
        callbacks_->OnUnicastMonitorModeStatus(
            le_audio::types::kLeAudioDirectionSource,
            UnicastMonitorModeStatus::STREAMING_SUSPENDED);
      }
    } else {
    } else {
      LOG_ERROR("invalid direction: 0x%02x monitor mode set", direction);
      LOG_ERROR("invalid direction: 0x%02x monitor mode set", direction);
    }
    }
@@ -3767,6 +3804,8 @@ class LeAudioClientImpl : public LeAudioClient {
      dprintf(fd, "  Local sink notified state: %d\n",
      dprintf(fd, "  Local sink notified state: %d\n",
              sink_monitor_notified_status_.value());
              sink_monitor_notified_status_.value());
    }
    }
    dprintf(fd, "  Source monitor mode: %s\n",
            source_monitor_mode_ ? "true" : "false");
    dprintf(fd, "  Start time: ");
    dprintf(fd, "  Start time: ");
    for (auto t : stream_start_history_queue_) {
    for (auto t : stream_start_history_queue_) {
      dprintf(fd, ", %d ms", static_cast<int>(t));
      dprintf(fd, ", %d ms", static_cast<int>(t));
@@ -5524,6 +5563,12 @@ class LeAudioClientImpl : public LeAudioClient {
              notifyAudioLocalSink(
              notifyAudioLocalSink(
                  UnicastMonitorModeStatus::STREAMING_SUSPENDED);
                  UnicastMonitorModeStatus::STREAMING_SUSPENDED);
            }
            }

            if (source_monitor_mode_) {
              callbacks_->OnUnicastMonitorModeStatus(
                  le_audio::types::kLeAudioDirectionSource,
                  UnicastMonitorModeStatus::STREAMING_SUSPENDED);
            }
          }
          }
        }
        }


@@ -5602,6 +5647,8 @@ class LeAudioClientImpl : public LeAudioClient {
  bool sink_monitor_mode_;
  bool sink_monitor_mode_;
  /* Status which has been notified to Service */
  /* Status which has been notified to Service */
  std::optional<UnicastMonitorModeStatus> sink_monitor_notified_status_;
  std::optional<UnicastMonitorModeStatus> sink_monitor_notified_status_;
  /* Listen for streaming status on Source stream */
  bool source_monitor_mode_;


  /* Reconnection mode */
  /* Reconnection mode */
  tBTM_BLE_CONN_TYPE reconnection_mode_;
  tBTM_BLE_CONN_TYPE reconnection_mode_;