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

Commit d563197c authored by Łukasz Rymanowski's avatar Łukasz Rymanowski
Browse files

leaudio: Improve handling OnAudioSink/SourceResume

This patch improves handling resuming sink and source when the other one
is in IDLE state

Bug: 150670922
Test: atest --host  bluetooth_le_audio_client_test bluetooth_le_audio_test
Tag: #feature
sponsor: jpawlowski@
Change-Id: I2f0b88d44cdab9cde1744e72cdf3eb27975dbdb0
parent ca6a502c
Loading
Loading
Loading
Loading
+47 −28
Original line number Diff line number Diff line
@@ -2486,22 +2486,33 @@ class LeAudioClientImpl : public LeAudioClient {
        LeAudioClientAudioSource::ConfirmStreamingRequest();
        break;
      case AudioState::IDLE:
        if (audio_receiver_state_ == AudioState::IDLE) {
        switch (audio_receiver_state_) {
          case AudioState::IDLE:
            /* Stream is not started. Try to do it.*/
            if (OnAudioResume(group)) {
              audio_sender_state_ = AudioState::READY_TO_START;
            } else {
              LeAudioClientAudioSource::CancelStreamingRequest();
            }
        } else {
          /* Stream has been started by the Source. */
            break;
          case AudioState::READY_TO_START:
          case AudioState::STARTED:
            audio_sender_state_ = AudioState::READY_TO_START;
          if (group->GetState() == AseState::BTA_LE_AUDIO_ASE_STATE_STREAMING) {
            /* If signalling part is completed trigger start reveivin audio
             * here, otherwise it'll be called on group streaming state callback
             */
            if (group->GetState() ==
                AseState::BTA_LE_AUDIO_ASE_STATE_STREAMING) {
              StartSendingAudio(active_group_id_);
          } else {
            LeAudioClientAudioSource::CancelStreamingRequest();
            }
            break;
          case AudioState::RELEASING:
          case AudioState::READY_TO_RELEASE:
          default:
            LeAudioClientAudioSink::CancelStreamingRequest();
            break;
        }

        break;
      case AudioState::READY_TO_START:
        LOG(WARNING) << __func__
@@ -2604,22 +2615,30 @@ class LeAudioClientImpl : public LeAudioClient {
        LeAudioClientAudioSink::ConfirmStreamingRequest();
        break;
      case AudioState::IDLE:
        if (audio_sender_state_ == AudioState::IDLE) {
        switch (audio_sender_state_) {
          case AudioState::IDLE:
            if (OnAudioResume(group)) {
              audio_receiver_state_ = AudioState::READY_TO_START;
            } else {
              LeAudioClientAudioSink::CancelStreamingRequest();
            }
        } else {
            break;
          case AudioState::READY_TO_START:
          case AudioState::STARTED:
            audio_receiver_state_ = AudioState::READY_TO_START;
          /* If signalling part is completed trigger start reveivin audio here,
           * otherwise it'll be called on group streaming state callback
            /* If signalling part is completed trigger start reveivin audio
             * here, otherwise it'll be called on group streaming state callback
             */
          if (group->GetState() == AseState::BTA_LE_AUDIO_ASE_STATE_STREAMING) {
            if (group->GetState() ==
                AseState::BTA_LE_AUDIO_ASE_STATE_STREAMING) {
              StartReceivingAudio(active_group_id_);
          } else {
            LeAudioClientAudioSink::CancelStreamingRequest();
            }
            break;
          case AudioState::RELEASING:
          case AudioState::READY_TO_RELEASE:
          default:
            LeAudioClientAudioSink::CancelStreamingRequest();
            break;
        }
        break;
      case AudioState::READY_TO_START: