Merge "CSD: Load the ISoundDoseFactory dynamically" into udc-dev

This commit is contained in:
Vlad Popa
2023-04-27 19:01:49 +00:00
committed by Android (Google) Code Review
6 changed files with 4 additions and 157 deletions

View File

@@ -1,46 +0,0 @@
package {
// See: http://go/android-license-faq
// A large-scale-change added 'default_applicable_licenses' to import
// all of the 'license_kinds' from "hardware_interfaces_license"
// to get the below license kinds:
// SPDX-license-identifier-Apache-2.0
default_applicable_licenses: ["hardware_interfaces_license"],
}
cc_defaults {
name: "aidlsounddoseservice_defaults",
vendor: true,
header_libs: [
"libsounddoseaidl_headers",
],
}
cc_library {
name: "libsounddoseserviceexampleimpl",
defaults: [
"aidlsounddoseservice_defaults",
"latest_android_media_audio_common_types_ndk_shared",
"latest_android_hardware_audio_core_sounddose_ndk_shared",
"latest_android_hardware_audio_sounddose_ndk_shared",
],
export_include_dirs: ["include"],
srcs: [
"SoundDoseFactory.cpp",
],
shared_libs: [
"libaudioservicesounddoseimpl",
"libbase",
"libbinder_ndk",
],
visibility: [
"//hardware/interfaces/audio/common/all-versions/default/service",
],
}
cc_library_headers {
name: "libsounddoseaidl_headers",
export_include_dirs: ["include"],
vendor_available: true,
host_supported: true,
}

View File

@@ -1,49 +0,0 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define LOG_TAG "AHAL_SoundDoseFactory"
#include "SoundDoseFactory.h"
#include <android-base/logging.h>
#include <core-impl/SoundDose.h>
namespace aidl::android::hardware::audio::sounddose {
using ::aidl::android::hardware::audio::core::sounddose::SoundDose;
ndk::ScopedAStatus SoundDoseFactory::getSoundDose(const std::string& in_module,
std::shared_ptr<ISoundDose>* _aidl_return) {
auto soundDoseIt = mSoundDoseBinderMap.find(in_module);
if (soundDoseIt != mSoundDoseBinderMap.end()) {
*_aidl_return = ISoundDose::fromBinder(soundDoseIt->second);
LOG(DEBUG) << __func__
<< ": returning cached instance of ISoundDose: " << _aidl_return->get()
<< " for module " << in_module;
return ndk::ScopedAStatus::ok();
}
auto soundDose = ndk::SharedRefBase::make<SoundDose>();
mSoundDoseBinderMap[in_module] = soundDose->asBinder();
*_aidl_return = soundDose;
LOG(DEBUG) << __func__ << ": returning new instance of ISoundDose: " << _aidl_return->get()
<< " for module " << in_module;
return ndk::ScopedAStatus::ok();
}
} // namespace aidl::android::hardware::audio::sounddose

View File

@@ -1,38 +0,0 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include <aidl/android/hardware/audio/core/sounddose/ISoundDose.h>
#include <aidl/android/hardware/audio/sounddose/BnSoundDoseFactory.h>
#include <android/binder_interface_utils.h>
#include <unordered_map>
namespace aidl::android::hardware::audio::sounddose {
using ::aidl::android::hardware::audio::core::sounddose::ISoundDose;
class SoundDoseFactory : public BnSoundDoseFactory {
public:
ndk::ScopedAStatus getSoundDose(const std::string& module,
std::shared_ptr<ISoundDose>* _aidl_return) override;
private:
std::unordered_map<std::string, ndk::SpAIBinder> mSoundDoseBinderMap;
};
} // namespace aidl::android::hardware::audio::sounddose

View File

@@ -38,13 +38,11 @@ cc_binary {
name: "android.hardware.audio.service",
init_rc: ["android.hardware.audio.service.rc"],
vintf_fragments: ["android.hardware.audio.sounddose-aidl.xml"],
relative_install_path: "hw",
vendor: true,
defaults: [
"android_hardware_audio_config_defaults",
"latest_android_hardware_audio_sounddose_ndk_shared",
],
srcs: ["service.cpp"],
@@ -56,7 +54,6 @@ cc_binary {
],
shared_libs: [
"//hardware/interfaces/audio/aidl/sounddose/default:libsounddoseserviceexampleimpl",
"libcutils",
"libbinder",
"libbinder_ndk",

View File

@@ -1,7 +0,0 @@
<manifest version="1.0" type="device">
<hal format="aidl">
<name>android.hardware.audio.sounddose</name>
<version>1</version>
<fqname>ISoundDoseFactory/default</fqname>
</hal>
</manifest>

View File

@@ -20,10 +20,6 @@
#include <string>
#include <vector>
#include <SoundDoseFactory.h>
#include <android-base/logging.h>
#include <android/binder_ibinder_platform.h>
#include <android/binder_manager.h>
#include <android/binder_process.h>
#include <binder/ProcessState.h>
#include <cutils/properties.h>
@@ -37,8 +33,6 @@ using android::OK;
using InterfacesList = std::vector<std::string>;
using aidl::android::hardware::audio::sounddose::SoundDoseFactory;
/** Try to register the provided factories in the provided order.
* If any registers successfully, do not register any other and return true.
* If all fail, return false.
@@ -144,6 +138,10 @@ int main(int /* argc */, char* /* argv */ []) {
"android.hardware.bluetooth.audio-impl",
"createIBluetoothAudioProviderFactory",
},
{
"android.hardware.audio.sounddose-vendor-impl",
"createISoundDoseFactory",
},
};
// clang-format on
@@ -171,13 +169,5 @@ int main(int /* argc */, char* /* argv */ []) {
}
}
// Register ISoundDoseFactory interface as a workaround for using the audio AIDL HAL
auto soundDoseDefault = ndk::SharedRefBase::make<SoundDoseFactory>();
const std::string soundDoseDefaultName =
std::string() + SoundDoseFactory::descriptor + "/default";
binder_status_t status = AServiceManager_addService(soundDoseDefault->asBinder().get(),
soundDoseDefaultName.c_str());
CHECK_EQ(STATUS_OK, status);
joinRpcThreadpool();
}