diff --git a/automotive/audiocontrol/aidl/default/Android.bp b/automotive/audiocontrol/aidl/default/Android.bp index faf7ad2485..427709abb3 100644 --- a/automotive/audiocontrol/aidl/default/Android.bp +++ b/automotive/audiocontrol/aidl/default/Android.bp @@ -22,15 +22,18 @@ cc_binary { generated_sources: ["audio_policy_configuration_V7_0"], header_libs: ["libxsdc-utils"], shared_libs: [ + "android.frameworks.automotive.powerpolicy-ndk_platform", "android.hardware.automotive.audiocontrol-ndk_platform", "libbase", "libbinder_ndk", - "liblog", "libcutils", + "liblog", + "libpowerpolicyclient", "libxml2", ], srcs: [ "AudioControl.cpp", "main.cpp", + "PowerPolicyClient.cpp", ], } diff --git a/automotive/audiocontrol/aidl/default/PowerPolicyClient.cpp b/automotive/audiocontrol/aidl/default/PowerPolicyClient.cpp new file mode 100644 index 0000000000..765733716b --- /dev/null +++ b/automotive/audiocontrol/aidl/default/PowerPolicyClient.cpp @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2020 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. + */ + +#include "PowerPolicyClient.h" +#include "AudioControl.h" + +#include + +namespace aidl { +namespace android { +namespace hardware { +namespace automotive { +namespace audiocontrol { + +namespace aafap = aidl::android::frameworks::automotive::powerpolicy; + +using aafap::CarPowerPolicy; +using aafap::CarPowerPolicyFilter; +using aafap::PowerComponent; +using ::android::frameworks::automotive::powerpolicy::hasComponent; +using ::ndk::ScopedAStatus; + +namespace { + +constexpr PowerComponent kAudioComponent = PowerComponent::AUDIO; + +} // namespace + +PowerPolicyClient::PowerPolicyClient(std::shared_ptr audioControl) + : mAudioControl(audioControl) {} + +void PowerPolicyClient::onInitFailed() { + LOG(ERROR) << "Initializing power policy client failed"; +} + +std::vector PowerPolicyClient::getComponentsOfInterest() { + std::vector components{kAudioComponent}; + return components; +} + +ScopedAStatus PowerPolicyClient::onPolicyChanged(const CarPowerPolicy& powerPolicy) { + if (hasComponent(powerPolicy.enabledComponents, kAudioComponent)) { + LOG(DEBUG) << "Power policy: Audio component is enabled"; + // TODO(b/173719953): Do something when AUDIO is enabled. + } else if (hasComponent(powerPolicy.disabledComponents, kAudioComponent)) { + LOG(DEBUG) << "Power policy: Audio component is disabled"; + // TODO(b/173719953): Do something when AUDIO is disabled. + } + return ScopedAStatus::ok(); +} + +} // namespace audiocontrol +} // namespace automotive +} // namespace hardware +} // namespace android +} // namespace aidl diff --git a/automotive/audiocontrol/aidl/default/PowerPolicyClient.h b/automotive/audiocontrol/aidl/default/PowerPolicyClient.h new file mode 100644 index 0000000000..0b4d5b6c0a --- /dev/null +++ b/automotive/audiocontrol/aidl/default/PowerPolicyClient.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2020 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. + */ + +#ifndef AUTOMOTIVE_AUDIOCONTROL_AIDL_DEFAULT_POWERPOLICYCLIENT_H_ +#define AUTOMOTIVE_AUDIOCONTROL_AIDL_DEFAULT_POWERPOLICYCLIENT_H_ + +#include "PowerPolicyClientBase.h" + +#include + +namespace aidl::android::hardware::automotive::audiocontrol { + +class AudioControl; + +class PowerPolicyClient + : public ::android::frameworks::automotive::powerpolicy::PowerPolicyClientBase { + public: + explicit PowerPolicyClient(std::shared_ptr audioControl); + + void onInitFailed(); + std::vector<::aidl::android::frameworks::automotive::powerpolicy::PowerComponent> + getComponentsOfInterest() override; + ::ndk::ScopedAStatus onPolicyChanged( + const ::aidl::android::frameworks::automotive::powerpolicy::CarPowerPolicy&) override; + + private: + std::shared_ptr mAudioControl; +}; + +} // namespace aidl::android::hardware::automotive::audiocontrol + +#endif // AUTOMOTIVE_AUDIOCONTROL_AIDL_DEFAULT_POWERPOLICYCLIENT_H_ diff --git a/automotive/audiocontrol/aidl/default/main.cpp b/automotive/audiocontrol/aidl/default/main.cpp index 996665fe5c..9b259fca0a 100644 --- a/automotive/audiocontrol/aidl/default/main.cpp +++ b/automotive/audiocontrol/aidl/default/main.cpp @@ -15,22 +15,28 @@ */ #include "AudioControl.h" +#include "PowerPolicyClient.h" #include #include #include using aidl::android::hardware::automotive::audiocontrol::AudioControl; +using aidl::android::hardware::automotive::audiocontrol::PowerPolicyClient; int main() { ABinderProcess_setThreadPoolMaxThreadCount(0); - std::shared_ptr audioControl = ndk::SharedRefBase::make(); + std::shared_ptr audioControl = ::ndk::SharedRefBase::make(); const std::string instance = std::string() + AudioControl::descriptor + "/default"; binder_status_t status = AServiceManager_addService(audioControl->asBinder().get(), instance.c_str()); CHECK(status == STATUS_OK); + std::shared_ptr powerPolicyClient = + ::ndk::SharedRefBase::make(audioControl); + powerPolicyClient->init(); + ABinderProcess_joinThreadPool(); return EXIT_FAILURE; // should not reach }