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

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

leaudio: Fix invalid direction issue

Fixed messed up direction when creating message to java.

Bug: 314094343
Test: mmm packages/modules/Bluetooth
Flag: Exempt, trivial fix
Change-Id: I20132d62d1438d9f2e8861fde4cdcb5c05ef5543
parent 8923190f
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -3213,9 +3213,9 @@ class LeAudioClientImpl : public LeAudioClient {
    callbacks_->OnAudioGroupSelectableCodecConf(
        group->group_id_,
        bluetooth::le_audio::utils::GetRemoteBtLeAudioCodecConfigFromPac(
            leAudioDevice->snk_pacs_),
            leAudioDevice->src_pacs_),
        bluetooth::le_audio::utils::GetRemoteBtLeAudioCodecConfigFromPac(
            leAudioDevice->src_pacs_));
            leAudioDevice->snk_pacs_));
  }

  void SendAudioGroupCurrentCodecConfigChanged(LeAudioDeviceGroup* group) {
+252 −112
Original line number Diff line number Diff line
@@ -1559,6 +1559,9 @@ class UnicastTestNoInit : public Test {
    supported_snk_context_types_ = 0xffff;
    supported_src_context_types_ = 0xffff;

    empty_source_pack_ = false;
    empty_sink_pack_ = false;

    bluetooth::le_audio::AudioSetConfigurationProvider::Initialize(
        codec_location);
    ASSERT_FALSE(LeAudioClient::IsLeAudioClientRunning());
@@ -2429,6 +2432,9 @@ class UnicastTestNoInit : public Test {
            std::vector<uint8_t> value;
            if (gatt_status == GATT_SUCCESS) {
              if (handle == pacs->sink_pac_char + 1) {
                if (empty_sink_pack_) {
                  value = {0x00};
                } else {
                  value = {
                      // Num records
                      0x02,
@@ -2485,6 +2491,7 @@ class UnicastTestNoInit : public Test {
                      // Metadata Length
                      0x00,
                  };
                }
              } else if (handle == pacs->sink_audio_loc_char + 1) {
                value = {
                    // Audio Locations
@@ -2494,6 +2501,9 @@ class UnicastTestNoInit : public Test {
                    snk_allocation[3],
                };
              } else if (handle == pacs->source_pac_char + 1) {
                if (empty_source_pack_) {
                  value = {0x00};
                } else {
                  value = {
                      // Num records
                      0x02,
@@ -2550,6 +2560,7 @@ class UnicastTestNoInit : public Test {
                      // Metadata Length
                      0x00,
                  };
                }
              } else if (handle == pacs->source_audio_loc_char + 1) {
                value = {
                    // Audio Locations
@@ -2790,6 +2801,9 @@ class UnicastTestNoInit : public Test {
  uint16_t supported_snk_context_types_ = 0xffff;
  uint16_t supported_src_context_types_ = 0xffff;

  bool empty_source_pack_;
  bool empty_sink_pack_;

  NiceMock<bluetooth::storage::MockBtifStorageInterface> mock_btif_storage_;

  std::map<uint16_t, std::unique_ptr<NiceMock<MockDeviceWrapper>>> peer_devices;
@@ -4655,6 +4669,132 @@ TEST_F(UnicastTest, HandleResumeWithoutMetadataUpdateOnLocalSink) {
  Mock::VerifyAndClearExpectations(&mock_state_machine_);
}

TEST_F(UnicastTest, GroupSetActive) {
  const RawAddress test_address0 = GetTestAddress(0);
  int group_id = bluetooth::groups::kGroupUnknown;

  /**
   * In this test we want to make sure that Available context change reach Java
   * when group is in Configured state
   */

  default_channel_cnt = 1;

  SetSampleDatabaseEarbudsValid(
      1, test_address0, codec_spec_conf::kLeAudioLocationStereo,
      codec_spec_conf::kLeAudioLocationStereo, default_channel_cnt,
      default_channel_cnt, 0x0004,
      /* source sample freq 16khz */ false /*add_csis*/, true /*add_cas*/,
      true /*add_pacs*/, default_ase_cnt /*add_ascs_cnt*/, 1 /*set_size*/,
      0 /*rank*/);
  EXPECT_CALL(mock_audio_hal_client_callbacks_,
              OnConnectionState(ConnectionState::CONNECTED, test_address0))
      .Times(1);
  EXPECT_CALL(mock_audio_hal_client_callbacks_,
              OnGroupNodeStatus(test_address0, _, GroupNodeStatus::ADDED))
      .WillOnce(DoAll(SaveArg<1>(&group_id)));

  ConnectLeAudio(test_address0);
  ASSERT_NE(group_id, bluetooth::groups::kGroupUnknown);

  // Audio sessions are started only when device gets active
  EXPECT_CALL(mock_audio_hal_client_callbacks_,
              OnAudioGroupSelectableCodecConf(group_id, _, _))
      .Times(1);
  EXPECT_CALL(*mock_le_audio_source_hal_client_, Start(_, _, _)).Times(1);
  EXPECT_CALL(*mock_le_audio_sink_hal_client_, Start(_, _, _)).Times(1);
  LeAudioClient::Get()->GroupSetActive(group_id);
  SyncOnMainLoop();
  Mock::VerifyAndClearExpectations(&mock_audio_hal_client_callbacks_);
  Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
}

TEST_F(UnicastTest, GroupSetActive_SinkPacksEmpty) {
  const RawAddress test_address0 = GetTestAddress(0);
  int group_id = bluetooth::groups::kGroupUnknown;
  empty_sink_pack_ = true;

  /**
   * In this test we want to make sure that Available context change reach Java
   * when group is in Configured state
   */

  default_channel_cnt = 1;

  SetSampleDatabaseEarbudsValid(
      1, test_address0, codec_spec_conf::kLeAudioLocationStereo,
      codec_spec_conf::kLeAudioLocationStereo, default_channel_cnt,
      default_channel_cnt, 0x0004,
      /* source sample freq 16khz */ false /*add_csis*/, true /*add_cas*/,
      true /*add_pacs*/, default_ase_cnt /*add_ascs_cnt*/, 1 /*set_size*/,
      0 /*rank*/);
  EXPECT_CALL(mock_audio_hal_client_callbacks_,
              OnConnectionState(ConnectionState::CONNECTED, test_address0))
      .Times(1);
  EXPECT_CALL(mock_audio_hal_client_callbacks_,
              OnGroupNodeStatus(test_address0, _, GroupNodeStatus::ADDED))
      .WillOnce(DoAll(SaveArg<1>(&group_id)));

  ConnectLeAudio(test_address0);
  ASSERT_NE(group_id, bluetooth::groups::kGroupUnknown);

  // Audio sessions are started only when device gets active
  std::vector<btle_audio_codec_config_t> empty_confs;

  EXPECT_CALL(mock_audio_hal_client_callbacks_,
              OnAudioGroupSelectableCodecConf(group_id, _, empty_confs))
      .Times(1);
  EXPECT_CALL(*mock_le_audio_source_hal_client_, Start(_, _, _)).Times(1);
  EXPECT_CALL(*mock_le_audio_sink_hal_client_, Start(_, _, _)).Times(1);
  LeAudioClient::Get()->GroupSetActive(group_id);
  SyncOnMainLoop();
  Mock::VerifyAndClearExpectations(&mock_audio_hal_client_callbacks_);
  Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
}

TEST_F(UnicastTest, GroupSetActive_SourcePacksEmpty) {
  const RawAddress test_address0 = GetTestAddress(0);
  int group_id = bluetooth::groups::kGroupUnknown;
  empty_source_pack_ = true;

  /**
   * In this test we want to make sure that Available context change reach Java
   * when group is in Configured state
   */

  default_channel_cnt = 1;

  SetSampleDatabaseEarbudsValid(
      1, test_address0, codec_spec_conf::kLeAudioLocationStereo,
      codec_spec_conf::kLeAudioLocationStereo, default_channel_cnt,
      default_channel_cnt, 0x0004,
      /* source sample freq 16khz */ false /*add_csis*/, true /*add_cas*/,
      true /*add_pacs*/, default_ase_cnt /*add_ascs_cnt*/, 1 /*set_size*/,
      0 /*rank*/);
  EXPECT_CALL(mock_audio_hal_client_callbacks_,
              OnConnectionState(ConnectionState::CONNECTED, test_address0))
      .Times(1);
  EXPECT_CALL(mock_audio_hal_client_callbacks_,
              OnGroupNodeStatus(test_address0, _, GroupNodeStatus::ADDED))
      .WillOnce(DoAll(SaveArg<1>(&group_id)));

  ConnectLeAudio(test_address0);
  ASSERT_NE(group_id, bluetooth::groups::kGroupUnknown);

  // Audio sessions are started only when device gets active
  std::vector<btle_audio_codec_config_t> empty_confs;

  EXPECT_CALL(mock_audio_hal_client_callbacks_,
              OnAudioGroupSelectableCodecConf(group_id, empty_confs, _))
      .Times(1);
  EXPECT_CALL(*mock_le_audio_source_hal_client_, Start(_, _, _)).Times(1);
  EXPECT_CALL(*mock_le_audio_sink_hal_client_, Start(_, _, _)).Times(1);
  LeAudioClient::Get()->GroupSetActive(group_id);
  SyncOnMainLoop();
  Mock::VerifyAndClearExpectations(&mock_audio_hal_client_callbacks_);
  Mock::VerifyAndClearExpectations(mock_le_audio_source_hal_client_);
}

TEST_F(UnicastTest, ChangeAvailableContextTypeWhenInCodecConfigured) {
  const RawAddress test_address0 = GetTestAddress(0);
  int group_id = bluetooth::groups::kGroupUnknown;