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

Commit 5ad043ee authored by Jeremy Wu's avatar Jeremy Wu
Browse files

floss: encapsulate cancelled info to |stream_started|

In some cases, the start request can be cancelled. We encapsulate this
information for the DBus method |GetXStreamStarted| to retrieve.

Bug: 317682584
Test: m Bluetooth
Change-Id: Ie39cac261dc2a63214f2ff314b4779fa8f8f8e85
parent 1016644b
Loading
Loading
Loading
Loading
+18 −6
Original line number Diff line number Diff line
@@ -86,6 +86,8 @@ bool HostStartRequest() {
    return false;
  }

  host::le_audio::LeAudioSinkTransport::stream_started =
      btle_stream_started_status::IDLE;
  host::le_audio::LeAudioSinkTransport::instance->ResetPresentationPosition();
  return host::le_audio::LeAudioSinkTransport::instance->StartRequest();
}
@@ -125,6 +127,8 @@ bool PeerStartRequest() {
    return false;
  }

  host::le_audio::LeAudioSourceTransport::stream_started =
      btle_stream_started_status::IDLE;
  host::le_audio::LeAudioSourceTransport::instance->ResetPresentationPosition();
  return host::le_audio::LeAudioSourceTransport::instance->StartRequest();
}
@@ -157,11 +161,11 @@ btle_pcm_parameters GetPeerPcmConfig() {
  return pcm_config;
}

bool GetHostStreamStarted() {
btle_stream_started_status GetHostStreamStarted() {
  return host::le_audio::LeAudioSinkTransport::stream_started;
}

bool GetPeerStreamStarted() {
btle_stream_started_status GetPeerStreamStarted() {
  return host::le_audio::LeAudioSourceTransport::stream_started;
}

@@ -248,7 +252,8 @@ void LeAudioClientInterface::Sink::StopSession() {
    host::le_audio::LeAudioSinkTransport::instance->ClearStartRequestState();
  }

  host::le_audio::LeAudioSinkTransport::stream_started = false;
  host::le_audio::LeAudioSinkTransport::stream_started =
      btle_stream_started_status::IDLE;
}

void LeAudioClientInterface::Sink::ConfirmStreamingRequest() {
@@ -275,7 +280,8 @@ void LeAudioClientInterface::Sink::ConfirmStreamingRequest() {
      log::info("Response after sending PENDING to audio HAL");
      instance->ClearStartRequestState();
      lea_data_path_open();
      host::le_audio::LeAudioSinkTransport::stream_started = true;
      host::le_audio::LeAudioSinkTransport::stream_started =
          btle_stream_started_status::STARTED;
      return;
    case StartRequestState::CONFIRMED:
    case StartRequestState::CANCELED:
@@ -310,6 +316,8 @@ void LeAudioClientInterface::Sink::CancelStreamingRequest() {
    case StartRequestState::PENDING_AFTER_RESUME:
      log::info("Response after sending PENDING to audio HAL");
      instance->ClearStartRequestState();
      host::le_audio::LeAudioSinkTransport::stream_started =
          btle_stream_started_status::CANCELED;
      return;
    case StartRequestState::CONFIRMED:
    case StartRequestState::CANCELED:
@@ -394,7 +402,8 @@ void LeAudioClientInterface::Source::StopSession() {
    host::le_audio::LeAudioSourceTransport::instance->ClearStartRequestState();
  }

  host::le_audio::LeAudioSourceTransport::stream_started = false;
  host::le_audio::LeAudioSourceTransport::stream_started =
      btle_stream_started_status::IDLE;
}

void LeAudioClientInterface::Source::ConfirmStreamingRequest() {
@@ -421,7 +430,8 @@ void LeAudioClientInterface::Source::ConfirmStreamingRequest() {
      log::info("Response after sending PENDING to audio HAL");
      instance->ClearStartRequestState();
      lea_data_path_open();
      host::le_audio::LeAudioSourceTransport::stream_started = true;
      host::le_audio::LeAudioSourceTransport::stream_started =
          btle_stream_started_status::STARTED;
      return;
    case StartRequestState::CONFIRMED:
    case StartRequestState::CANCELED:
@@ -456,6 +466,8 @@ void LeAudioClientInterface::Source::CancelStreamingRequest() {
    case StartRequestState::PENDING_AFTER_RESUME:
      log::info("Response after sending PENDING to audio HAL");
      instance->ClearStartRequestState();
      host::le_audio::LeAudioSourceTransport::stream_started =
          btle_stream_started_status::CANCELED;
      return;
    case StartRequestState::CANCELED:
    case StartRequestState::CONFIRMED:
+16 −4
Original line number Diff line number Diff line
@@ -38,6 +38,12 @@ struct btle_pcm_parameters {
  uint8_t channels_count;
};

enum class btle_stream_started_status : int32_t {
  CANCELED = -1,
  IDLE = 0,
  STARTED = 1,
};

// Invoked by audio server when it has audio data to stream.
// Returns whether the start request has been made successfully.
bool HostStartRequest();
@@ -45,8 +51,11 @@ bool HostStartRequest();
// Invoked by audio server when audio streaming is done.
void HostStopRequest();

// Returns whether the host stream has started.
bool GetHostStreamStarted();
// Whether the peer stream has started.
// Returns 1, when the stream has started,
//         -1, when the previous request has been cancelled,
//         0, otherwise.
btle_stream_started_status GetHostStreamStarted();

// Returns the current host audio config.
btle_pcm_parameters GetHostPcmConfig();
@@ -61,8 +70,11 @@ bool PeerStartRequest();
// Invoked by audio server when audio streaming is done.
void PeerStopRequest();

// Returns whether the peer stream has started.
bool GetPeerStreamStarted();
// Whether the peer stream has started.
// Returns 1, when the stream has started,
//         -1, when the previous request has been cancelled,
//         0, otherwise.
btle_stream_started_status GetPeerStreamStarted();

// Returns the current peer audio config.
btle_pcm_parameters GetPeerPcmConfig();
+9 −0
Original line number Diff line number Diff line
@@ -155,10 +155,13 @@ void LeAudioTransport::LeAudioSetSelectedHalPcmConfig(uint32_t sample_rate_hz,
StartRequestState LeAudioTransport::GetStartRequestState(void) {
  return start_request_state_;
}

void LeAudioTransport::ClearStartRequestState(void) {
  log::verbose("");
  start_request_state_ = StartRequestState::IDLE;
  remote_delay_report_ms_ = 0;
}

void LeAudioTransport::SetStartRequestState(StartRequestState state) {
  start_request_state_ = state;
}
@@ -243,9 +246,12 @@ void LeAudioSinkTransport::LeAudioSetSelectedHalPcmConfig(
StartRequestState LeAudioSinkTransport::GetStartRequestState(void) {
  return transport_->GetStartRequestState();
}

void LeAudioSinkTransport::ClearStartRequestState(void) {
  log::verbose("");
  transport_->ClearStartRequestState();
}

void LeAudioSinkTransport::SetStartRequestState(StartRequestState state) {
  transport_->SetStartRequestState(state);
}
@@ -312,9 +318,12 @@ void LeAudioSourceTransport::LeAudioSetSelectedHalPcmConfig(
StartRequestState LeAudioSourceTransport::GetStartRequestState(void) {
  return transport_->GetStartRequestState();
}

void LeAudioSourceTransport::ClearStartRequestState(void) {
  log::verbose("");
  transport_->ClearStartRequestState();
}

void LeAudioSourceTransport::SetStartRequestState(StartRequestState state) {
  transport_->SetStartRequestState(state);
}
+5 −2
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ namespace le_audio {
using ::bluetooth::le_audio::set_configurations::AudioSetConfiguration;
using ::bluetooth::le_audio::set_configurations::CodecConfigSetting;

using ::bluetooth::audio::le_audio::btle_stream_started_status;
using ::bluetooth::audio::le_audio::LeAudioClientInterface;
using ::bluetooth::audio::le_audio::StartRequestState;
using ::bluetooth::audio::le_audio::StreamCallbacks;
@@ -119,7 +120,8 @@ class LeAudioSinkTransport {
  void SetStartRequestState(StartRequestState state);

  static inline LeAudioSinkTransport* instance = nullptr;
  static inline bool stream_started = false;
  static inline btle_stream_started_status stream_started =
      btle_stream_started_status::IDLE;

 private:
  LeAudioTransport* transport_;
@@ -162,7 +164,8 @@ class LeAudioSourceTransport {
  void SetStartRequestState(StartRequestState state);

  static inline LeAudioSourceTransport* instance = nullptr;
  static inline bool stream_started = false;
  static inline btle_stream_started_status stream_started =
      btle_stream_started_status::IDLE;

 private:
  LeAudioTransport* transport_;
+4 −3
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ use bt_topshim::profiles::hid_host::BthhReportType;
use bt_topshim::profiles::le_audio::{
    BtLeAudioContentType, BtLeAudioDirection, BtLeAudioGroupNodeStatus, BtLeAudioGroupStatus,
    BtLeAudioGroupStreamStatus, BtLeAudioSource, BtLeAudioUnicastMonitorModeStatus, BtLeAudioUsage,
    BtLePcmConfig,
    BtLePcmConfig, BtLeStreamStartedStatus,
};
use bt_topshim::profiles::sdp::{
    BtSdpDipRecord, BtSdpHeaderOverlay, BtSdpMasRecord, BtSdpMnsRecord, BtSdpMpsRecord,
@@ -99,6 +99,7 @@ impl_dbus_arg_from_into!(BtLeAudioGroupNodeStatus, i32);
impl_dbus_arg_from_into!(BtLeAudioUnicastMonitorModeStatus, i32);
impl_dbus_arg_from_into!(BtLeAudioDirection, i32);
impl_dbus_arg_from_into!(BtLeAudioGroupStreamStatus, i32);
impl_dbus_arg_from_into!(BtLeStreamStartedStatus, i32);
impl_dbus_arg_enum!(GattStatus);
impl_dbus_arg_enum!(GattWriteRequestStatus);
impl_dbus_arg_enum!(GattWriteType);
@@ -2854,12 +2855,12 @@ impl IBluetoothMedia for BluetoothMediaDBus {
    }

    #[dbus_method("GetHostStreamStarted")]
    fn get_host_stream_started(&mut self) -> bool {
    fn get_host_stream_started(&mut self) -> BtLeStreamStartedStatus {
        dbus_generated!()
    }

    #[dbus_method("GetPeerStreamStarted")]
    fn get_peer_stream_started(&mut self) -> bool {
    fn get_peer_stream_started(&mut self) -> BtLeStreamStartedStatus {
        dbus_generated!()
    }

Loading