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

Commit a84a75e4 authored by Grzegorz Kolodziejczyk (xWF)'s avatar Grzegorz Kolodziejczyk (xWF) Committed by Automerger Merge Worker
Browse files

Merge changes I3283145b,Id8b4fbc6 into main am: 1199a457

parents c8b98559 1199a457
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -117,8 +117,10 @@ public class BassClientService extends ProfileService {
    private static final int BROADCAST_STATE_STOPPED = 0;
    private static final int BROADCAST_STATE_CONFIGURING = 1;
    private static final int BROADCAST_STATE_PAUSED = 2;
    private static final int BROADCAST_STATE_STOPPING = 3;
    private static final int BROADCAST_STATE_STREAMING = 4;
    private static final int BROADCAST_STATE_ENABLING = 3;
    private static final int BROADCAST_STATE_DISABLING = 4;
    private static final int BROADCAST_STATE_STOPPING = 5;
    private static final int BROADCAST_STATE_STREAMING = 6;

    @VisibleForTesting static final int MESSAGE_SYNC_TIMEOUT = 1;
    @VisibleForTesting static final int MESSAGE_BIG_CHECK_START = 2;
@@ -3774,6 +3776,8 @@ public class BassClientService extends ProfileService {
                break;
            case BROADCAST_STATE_CONFIGURING:
            case BROADCAST_STATE_PAUSED:
            case BROADCAST_STATE_ENABLING:
            case BROADCAST_STATE_DISABLING:
            case BROADCAST_STATE_STOPPING:
            case BROADCAST_STATE_STREAMING:
            default:
+8 −2
Original line number Diff line number Diff line
@@ -77,8 +77,10 @@ public class LeAudioStackEvent {
    static final int BROADCAST_STATE_STOPPED = 0;
    static final int BROADCAST_STATE_CONFIGURING = 1;
    static final int BROADCAST_STATE_PAUSED = 2;
    static final int BROADCAST_STATE_STOPPING = 3;
    static final int BROADCAST_STATE_STREAMING = 4;
    static final int BROADCAST_STATE_ENABLING = 3;
    static final int BROADCAST_STATE_DISABLING = 4;
    static final int BROADCAST_STATE_STOPPING = 5;
    static final int BROADCAST_STATE_STREAMING = 6;

    // Do not modify without updating the HAL bt_le_audio.h files.
    // Match up with UnicastMonitorModeStatus enum of bt_le_audio.h
@@ -435,6 +437,10 @@ public class LeAudioStackEvent {
                return "BROADCAST_STATE_CONFIGURING";
            case BROADCAST_STATE_PAUSED:
                return "BROADCAST_STATE_PAUSED";
            case BROADCAST_STATE_ENABLING:
                return "BROADCAST_STATE_ENABLING";
            case BROADCAST_STATE_DISABLING:
                return "BROADCAST_STATE_DISABLING";
            case BROADCAST_STATE_STOPPING:
                return "BROADCAST_STATE_STOPPING";
            case BROADCAST_STATE_STREAMING:
+4 −7
Original line number Diff line number Diff line
@@ -1037,6 +1037,10 @@ private:
            instance->UpdateAudioActiveStateInPublicAnnouncement();
          }
          break;
        case BroadcastStateMachine::State::ENABLING:
          break;
        case BroadcastStateMachine::State::DISABLING:
          break;
        case BroadcastStateMachine::State::STOPPING:
          break;
        case BroadcastStateMachine::State::STREAMING:
@@ -1307,13 +1311,6 @@ private:
      if (com::android::bluetooth::flags::leaudio_big_depends_on_audio_state()) {
        instance->UpdateAudioActiveStateInPublicAnnouncement();
        instance->setBroadcastTimers();

        for (auto& broadcast_pair : instance->broadcasts_) {
          auto& broadcast = broadcast_pair.second;
          if (broadcast->GetState() == BroadcastStateMachine::State::CONFIGURED) {
            broadcast->ProcessMessage(BroadcastStateMachine::Message::SUSPEND, nullptr);
          }
        }
      }
    }

+0 −71
Original line number Diff line number Diff line
@@ -1424,77 +1424,6 @@ TEST_F(BroadcasterTest, BigCreationTerminationDependsOnAudioResumeSuspend) {
  ASSERT_TRUE(broadcast_stop_timer_->cb == nullptr);
}

TEST_F(BroadcasterTest, AudioSuspendBeforeBigCreateCallback) {
  com::android::bluetooth::flags::provider_->leaudio_big_depends_on_audio_state(true);

  // Timers created
  ASSERT_TRUE(big_terminate_timer_ != nullptr);
  ASSERT_TRUE(broadcast_stop_timer_ != nullptr);

  auto broadcast_id = InstantiateBroadcast();
  LeAudioSourceAudioHalClient::Callbacks* audio_receiver;
  EXPECT_CALL(*mock_audio_source_, Start)
          .WillOnce(DoAll(SaveArg<1>(&audio_receiver), Return(true)))
          .WillRepeatedly(Return(false));
  EXPECT_CALL(mock_broadcaster_callbacks_,
              OnBroadcastStateChanged(broadcast_id, BroadcastState::STREAMING))
          .Times(1);
  // Timers not started
  ASSERT_TRUE(big_terminate_timer_->cb == nullptr);
  ASSERT_TRUE(broadcast_stop_timer_->cb == nullptr);

  // Start Broadcast
  LeAudioBroadcaster::Get()->StartAudioBroadcast(broadcast_id);
  // Timers started
  ASSERT_EQ(2, get_func_call_count("alarm_set_on_mloop"));
  ASSERT_TRUE(big_terminate_timer_->cb != nullptr);
  ASSERT_TRUE(broadcast_stop_timer_->cb != nullptr);
  ASSERT_NE(audio_receiver, nullptr);

  // First onAudioResume when BIG already created, not cause any state change
  EXPECT_CALL(mock_broadcaster_callbacks_, OnBroadcastStateChanged(broadcast_id, _)).Times(0);
  audio_receiver->OnAudioResume();
  // Timers cancelled
  ASSERT_EQ(2, get_func_call_count("alarm_cancel"));
  ASSERT_TRUE(big_terminate_timer_->cb == nullptr);
  ASSERT_TRUE(broadcast_stop_timer_->cb == nullptr);

  audio_receiver->OnAudioSuspend();
  ASSERT_EQ(4, get_func_call_count("alarm_set_on_mloop"));
  ASSERT_TRUE(big_terminate_timer_->cb != nullptr);
  ASSERT_TRUE(broadcast_stop_timer_->cb != nullptr);

  // BIG termination timer execution, state machine go to CONFIGURED state so BIG terminated
  EXPECT_CALL(mock_broadcaster_callbacks_,
              OnBroadcastStateChanged(broadcast_id, BroadcastState::CONFIGURED))
          .Times(1);
  // Imitate execution of BIG termination timer
  big_terminate_timer_->cb(big_terminate_timer_->data);

  auto mock_state_machine = MockBroadcastStateMachine::GetLastInstance();
  /* Prepare method that would not proceed BIG created event */
  EXPECT_CALL(*mock_state_machine, ProcessMessage(BroadcastStateMachine::Message::START, _))
          .WillOnce(Return());

  // onAudioResume cause state machine go to STREAMING state so BIG creation
  EXPECT_CALL(mock_broadcaster_callbacks_,
              OnBroadcastStateChanged(broadcast_id, BroadcastState::STREAMING))
          .Times(0);
  audio_receiver->OnAudioResume();
  // Timers Cancelled
  ASSERT_EQ(4, get_func_call_count("alarm_cancel"));
  ASSERT_TRUE(big_terminate_timer_->cb == nullptr);
  ASSERT_TRUE(broadcast_stop_timer_->cb == nullptr);

  // OnAudioSuspend cause starting the BIG termination timer
  EXPECT_CALL(*mock_state_machine, ProcessMessage(BroadcastStateMachine::Message::SUSPEND, _))
          .WillOnce(Return());
  audio_receiver->OnAudioSuspend();
  ASSERT_EQ(6, get_func_call_count("alarm_set_on_mloop"));
  ASSERT_TRUE(big_terminate_timer_->cb != nullptr);
  ASSERT_TRUE(broadcast_stop_timer_->cb != nullptr);
}

// TODO: Add tests for:
// ToRawPacket(BasicAudioAnnouncementData const& in, std::vector<uint8_t>& data)

+1 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ std::ostream& operator<<(std::ostream& os, const BroadcastStateMachine::Message&

std::ostream& operator<<(std::ostream& os, const BroadcastStateMachine::State& state) {
  static const char* char_value_[BroadcastStateMachine::STATE_COUNT] = {
          "STOPPED", "CONFIGURING", "CONFIGURED", "STOPPING", "STREAMING"};
          "STOPPED", "CONFIGURING", "CONFIGURED", "ENABLING", "DISABLING", "STOPPING", "STREAMING"};
  os << char_value_[static_cast<uint8_t>(state)];
  return os;
}
Loading