From b731ae01b15682a3326dc4145f614f919b2789b5 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 28 Mar 2012 13:55:43 -0700 Subject: [PATCH] Move services/powermanager from frameworks/base to frameworks/native Move services/powermanager into frameworks/native so audioflinger can use it. Note that this is not the same as a PowerManagerService, which is part of systemserver and handles turning the screen on and off, etc. This is just a binder interface to allow taking wakelocks. Change-Id: I6b6a8b41cdbad17e826fda45aab5f059f22fc64e --- include/powermanager/IPowerManager.h | 41 ++++++++++++++ include/powermanager/PowerManager.h | 29 ++++++++++ services/powermanager/Android.mk | 15 ++++++ services/powermanager/IPowerManager.cpp | 71 +++++++++++++++++++++++++ 4 files changed, 156 insertions(+) create mode 100644 include/powermanager/IPowerManager.h create mode 100644 include/powermanager/PowerManager.h create mode 100644 services/powermanager/Android.mk create mode 100644 services/powermanager/IPowerManager.cpp diff --git a/include/powermanager/IPowerManager.h b/include/powermanager/IPowerManager.h new file mode 100644 index 000000000..1723f0406 --- /dev/null +++ b/include/powermanager/IPowerManager.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2011 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 ANDROID_IPOWERMANAGER_H +#define ANDROID_IPOWERMANAGER_H + +#include +#include + +namespace android { + +// ---------------------------------------------------------------------------- + +// must be kept in sync with interface defined in IPowerManager.aidl +class IPowerManager : public IInterface +{ +public: + DECLARE_META_INTERFACE(PowerManager); + + virtual status_t acquireWakeLock(int flags, const sp& lock, const String16& tag) = 0; + virtual status_t releaseWakeLock(const sp& lock, int flags) = 0; +}; + +// ---------------------------------------------------------------------------- + +}; // namespace android + +#endif // ANDROID_IPOWERMANAGER_H diff --git a/include/powermanager/PowerManager.h b/include/powermanager/PowerManager.h new file mode 100644 index 000000000..45901747e --- /dev/null +++ b/include/powermanager/PowerManager.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2011 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 ANDROID_POWERMANAGER_H +#define ANDROID_POWERMANAGER_H + +namespace android { + +// must be kept in sync with definitions in PowerManager.java +enum { + POWERMANAGER_PARTIAL_WAKE_LOCK = 1, // equals PowerManager.PARTIAL_WAKE_LOCK constant +}; + +}; // namespace android + +#endif // ANDROID_POWERMANAGER_H diff --git a/services/powermanager/Android.mk b/services/powermanager/Android.mk new file mode 100644 index 000000000..d98b2dafd --- /dev/null +++ b/services/powermanager/Android.mk @@ -0,0 +1,15 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES:= \ + IPowerManager.cpp + +LOCAL_SHARED_LIBRARIES := \ + libutils \ + libbinder + +LOCAL_MODULE:= libpowermanager + +LOCAL_MODULE_TAGS := optional + +include $(BUILD_SHARED_LIBRARY) diff --git a/services/powermanager/IPowerManager.cpp b/services/powermanager/IPowerManager.cpp new file mode 100644 index 000000000..a0f19d4ac --- /dev/null +++ b/services/powermanager/IPowerManager.cpp @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2011 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 "IPowerManager" +//#define LOG_NDEBUG 0 +#include + +#include +#include + +#include + +#include + +namespace android { + +// must be kept in sync with IPowerManager.aidl +enum { + ACQUIRE_WAKE_LOCK = IBinder::FIRST_CALL_TRANSACTION, + RELEASE_WAKE_LOCK = IBinder::FIRST_CALL_TRANSACTION + 4, +}; + +class BpPowerManager : public BpInterface +{ +public: + BpPowerManager(const sp& impl) + : BpInterface(impl) + { + } + + virtual status_t acquireWakeLock(int flags, const sp& lock, const String16& tag) + { + Parcel data, reply; + data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); + + data.writeInt32(flags); + data.writeStrongBinder(lock); + data.writeString16(tag); + // no WorkSource passed + data.writeInt32(0); + return remote()->transact(ACQUIRE_WAKE_LOCK, data, &reply); + } + + virtual status_t releaseWakeLock(const sp& lock, int flags) + { + Parcel data, reply; + data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); + data.writeStrongBinder(lock); + data.writeInt32(flags); + return remote()->transact(RELEASE_WAKE_LOCK, data, &reply); + } +}; + +IMPLEMENT_META_INTERFACE(PowerManager, "android.os.IPowerManager"); + +// ---------------------------------------------------------------------------- + +}; // namespace android