Merge "audio: Add offload reconfiguration event to IBluetoothLe" am: b708d292d3 am: 104c4286f5

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2480536

Change-Id: I53c8b3477c99e1f549c69e594afddb7c303c8544
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Mikhail Naganov
2023-03-10 22:16:43 +00:00
committed by Automerger Merge Worker
6 changed files with 70 additions and 3 deletions

View File

@@ -36,4 +36,6 @@ package android.hardware.audio.core;
interface IBluetoothLe {
boolean isEnabled();
void setEnabled(boolean enabled);
boolean supportsOffloadReconfiguration();
void reconfigureOffload(in android.hardware.audio.core.VendorParameter[] parameters);
}

View File

@@ -55,7 +55,7 @@ interface IBluetoothA2dp {
/**
* Indicates whether the module supports reconfiguration of offloaded codecs.
*
* Offloaded coded implementations may need to be reconfigured when the
* Offloaded codec implementations may need to be reconfigured when the
* active A2DP device changes. This method indicates whether the HAL module
* supports the reconfiguration event. The result returned from this method
* must not change over time.
@@ -67,11 +67,11 @@ interface IBluetoothA2dp {
/**
* Instructs the HAL module to reconfigure offloaded codec.
*
* Offloaded coded implementations may need to be reconfigured when the
* Offloaded codec implementations may need to be reconfigured when the
* active A2DP device changes. This method is a notification for the HAL
* module to commence reconfiguration.
*
* Note that 'EX_UNSUPPORTED_OPERATION' may only be thrown when
* Note that 'EX_UNSUPPORTED_OPERATION' must be thrown if and only if
* 'supportsOffloadReconfiguration' returns 'false'.
*
* @param parameter Optional vendor-specific parameters, can be left empty.

View File

@@ -16,6 +16,8 @@
package android.hardware.audio.core;
import android.hardware.audio.core.VendorParameter;
/**
* An instance of IBluetoothLe manages settings for the LE (Low Energy)
* profiles. This interface is optional to implement by the vendor. It needs to
@@ -48,4 +50,33 @@ interface IBluetoothLe {
* @throws EX_ILLEGAL_STATE If there was an error performing the operation.
*/
void setEnabled(boolean enabled);
/**
* Indicates whether the module supports reconfiguration of offloaded codecs.
*
* Offloaded codec implementations may need to be reconfigured when the
* active LE device changes. This method indicates whether the HAL module
* supports the reconfiguration event. The result returned from this method
* must not change over time.
*
* @return Whether reconfiguration offload of offloaded codecs is supported.
*/
boolean supportsOffloadReconfiguration();
/**
* Instructs the HAL module to reconfigure offloaded codec.
*
* Offloaded codec implementations may need to be reconfigured when the
* active LE device changes. This method is a notification for the HAL
* module to commence reconfiguration.
*
* Note that 'EX_UNSUPPORTED_OPERATION' must be thrown if and only if
* 'supportsOffloadReconfiguration' returns 'false'.
*
* @param parameter Optional vendor-specific parameters, can be left empty.
* @throws EX_ILLEGAL_STATE If there was an error performing the operation,
* or the operation can not be commenced in the current state.
* @throws EX_UNSUPPORTED_OPERATION If the module does not support codec reconfiguration.
*/
void reconfigureOffload(in VendorParameter[] parameters);
}

View File

@@ -117,4 +117,17 @@ ndk::ScopedAStatus BluetoothLe::setEnabled(bool in_enabled) {
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus BluetoothLe::supportsOffloadReconfiguration(bool* _aidl_return) {
*_aidl_return = true;
LOG(DEBUG) << __func__ << ": returning " << *_aidl_return;
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus BluetoothLe::reconfigureOffload(
const std::vector<::aidl::android::hardware::audio::core::VendorParameter>& in_parameters
__unused) {
LOG(DEBUG) << __func__ << ": " << ::android::internal::ToString(in_parameters);
return ndk::ScopedAStatus::ok();
}
} // namespace aidl::android::hardware::audio::core

View File

@@ -56,6 +56,10 @@ class BluetoothLe : public BnBluetoothLe {
private:
ndk::ScopedAStatus isEnabled(bool* _aidl_return) override;
ndk::ScopedAStatus setEnabled(bool in_enabled) override;
ndk::ScopedAStatus supportsOffloadReconfiguration(bool* _aidl_return) override;
ndk::ScopedAStatus reconfigureOffload(
const std::vector<::aidl::android::hardware::audio::core::VendorParameter>&
in_parameters) override;
bool mEnabled = false;
};

View File

@@ -2148,6 +2148,23 @@ TEST_P(AudioCoreBluetoothLe, Enabled) {
<< "setEnabled without actual state change must not fail";
}
TEST_P(AudioCoreBluetoothLe, OffloadReconfiguration) {
if (bluetooth == nullptr) {
GTEST_SKIP() << "BluetoothLe is not supported";
}
bool isSupported;
ASSERT_IS_OK(bluetooth->supportsOffloadReconfiguration(&isSupported));
bool isSupported2;
ASSERT_IS_OK(bluetooth->supportsOffloadReconfiguration(&isSupported2));
EXPECT_EQ(isSupported, isSupported2);
if (isSupported) {
static const auto kStatuses = {EX_NONE, EX_ILLEGAL_STATE};
EXPECT_STATUS(kStatuses, bluetooth->reconfigureOffload({}));
} else {
EXPECT_STATUS(EX_UNSUPPORTED_OPERATION, bluetooth->reconfigureOffload({}));
}
}
class AudioCoreTelephony : public AudioCoreModuleBase, public testing::TestWithParam<std::string> {
public:
void SetUp() override {