Implement power policy change listener in AudioControl HAL
Bug: 173719953 Test: manual test Change-Id: Id773bd2bb1c8becc8f3e9e69e23ed8034dd36937
This commit is contained in:
parent
ab2321ed93
commit
8dae6e7b72
4 changed files with 125 additions and 2 deletions
|
@ -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",
|
||||
],
|
||||
}
|
||||
|
|
69
automotive/audiocontrol/aidl/default/PowerPolicyClient.cpp
Normal file
69
automotive/audiocontrol/aidl/default/PowerPolicyClient.cpp
Normal file
|
@ -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 <android-base/logging.h>
|
||||
|
||||
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> audioControl)
|
||||
: mAudioControl(audioControl) {}
|
||||
|
||||
void PowerPolicyClient::onInitFailed() {
|
||||
LOG(ERROR) << "Initializing power policy client failed";
|
||||
}
|
||||
|
||||
std::vector<PowerComponent> PowerPolicyClient::getComponentsOfInterest() {
|
||||
std::vector<PowerComponent> 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
|
45
automotive/audiocontrol/aidl/default/PowerPolicyClient.h
Normal file
45
automotive/audiocontrol/aidl/default/PowerPolicyClient.h
Normal file
|
@ -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 <memory>
|
||||
|
||||
namespace aidl::android::hardware::automotive::audiocontrol {
|
||||
|
||||
class AudioControl;
|
||||
|
||||
class PowerPolicyClient
|
||||
: public ::android::frameworks::automotive::powerpolicy::PowerPolicyClientBase {
|
||||
public:
|
||||
explicit PowerPolicyClient(std::shared_ptr<AudioControl> 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<AudioControl> mAudioControl;
|
||||
};
|
||||
|
||||
} // namespace aidl::android::hardware::automotive::audiocontrol
|
||||
|
||||
#endif // AUTOMOTIVE_AUDIOCONTROL_AIDL_DEFAULT_POWERPOLICYCLIENT_H_
|
|
@ -15,22 +15,28 @@
|
|||
*/
|
||||
|
||||
#include "AudioControl.h"
|
||||
#include "PowerPolicyClient.h"
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <android/binder_manager.h>
|
||||
#include <android/binder_process.h>
|
||||
|
||||
using aidl::android::hardware::automotive::audiocontrol::AudioControl;
|
||||
using aidl::android::hardware::automotive::audiocontrol::PowerPolicyClient;
|
||||
|
||||
int main() {
|
||||
ABinderProcess_setThreadPoolMaxThreadCount(0);
|
||||
std::shared_ptr<AudioControl> audioControl = ndk::SharedRefBase::make<AudioControl>();
|
||||
std::shared_ptr<AudioControl> audioControl = ::ndk::SharedRefBase::make<AudioControl>();
|
||||
|
||||
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> powerPolicyClient =
|
||||
::ndk::SharedRefBase::make<PowerPolicyClient>(audioControl);
|
||||
powerPolicyClient->init();
|
||||
|
||||
ABinderProcess_joinThreadPool();
|
||||
return EXIT_FAILURE; // should not reach
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue