1b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross/* 2b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross * Copyright (C) 2011 The Android Open Source Project 3b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross * 4b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross * Licensed under the Apache License, Version 2.0 (the "License"); 5b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross * you may not use this file except in compliance with the License. 6b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross * You may obtain a copy of the License at 7b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross * 8b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross * http://www.apache.org/licenses/LICENSE-2.0 9b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross * 10b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross * Unless required by applicable law or agreed to in writing, software 11b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross * distributed under the License is distributed on an "AS IS" BASIS, 12b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross * See the License for the specific language governing permissions and 14b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross * limitations under the License. 15b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross */ 16b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 17b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross#define LOG_TAG "IPowerManager" 18b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross//#define LOG_NDEBUG 0 19b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross#include <utils/Log.h> 20b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 21b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross#include <stdint.h> 22b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross#include <sys/types.h> 23b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 24b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross#include <binder/Parcel.h> 25b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 26b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross#include <powermanager/IPowerManager.h> 27b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 28b731ae01b15682a3326dc4145f614f919b2789b5Colin Crossnamespace android { 29b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 30b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross// must be kept in sync with IPowerManager.aidl 31b731ae01b15682a3326dc4145f614f919b2789b5Colin Crossenum { 32b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross ACQUIRE_WAKE_LOCK = IBinder::FIRST_CALL_TRANSACTION, 339a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen ACQUIRE_WAKE_LOCK_UID = IBinder::FIRST_CALL_TRANSACTION + 1, 349a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen RELEASE_WAKE_LOCK = IBinder::FIRST_CALL_TRANSACTION + 2, 355c0106e134366312206702f1b072347e20c90374Marco Nelissen UPDATE_WAKE_LOCK_UIDS = IBinder::FIRST_CALL_TRANSACTION + 3, 36ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi POWER_HINT = IBinder::FIRST_CALL_TRANSACTION + 4, 37b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross}; 38b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 39b731ae01b15682a3326dc4145f614f919b2789b5Colin Crossclass BpPowerManager : public BpInterface<IPowerManager> 40b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross{ 41b731ae01b15682a3326dc4145f614f919b2789b5Colin Crosspublic: 42b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross BpPowerManager(const sp<IBinder>& impl) 43b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross : BpInterface<IPowerManager>(impl) 44b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross { 45b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross } 46b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 4780d7fd86e05e6f14dffc9f0c9bf176a7c8680f8cDianne Hackborn virtual status_t acquireWakeLock(int flags, const sp<IBinder>& lock, const String16& tag, 48a602086872ad725d257b3be659a774f032f06d71Glenn Kasten const String16& packageName, bool isOneWay) 49b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross { 50b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross Parcel data, reply; 51b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 52b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 53b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross data.writeStrongBinder(lock); 54ac1f70bb7135cd5fe73d6fbf121a62c779679c5aJeff Brown data.writeInt32(flags); 55b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross data.writeString16(tag); 5680d7fd86e05e6f14dffc9f0c9bf176a7c8680f8cDianne Hackborn data.writeString16(packageName); 57ac1f70bb7135cd5fe73d6fbf121a62c779679c5aJeff Brown data.writeInt32(0); // no WorkSource 58f74865eb525b34af7983777a522a5bfc496fc1c5Dianne Hackborn data.writeString16(NULL, 0); // no history tag 59a602086872ad725d257b3be659a774f032f06d71Glenn Kasten return remote()->transact(ACQUIRE_WAKE_LOCK, data, &reply, 60a602086872ad725d257b3be659a774f032f06d71Glenn Kasten isOneWay ? IBinder::FLAG_ONEWAY : 0); 61b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross } 62b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 639a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen virtual status_t acquireWakeLockWithUid(int flags, const sp<IBinder>& lock, const String16& tag, 64a602086872ad725d257b3be659a774f032f06d71Glenn Kasten const String16& packageName, int uid, bool isOneWay) 659a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen { 669a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen Parcel data, reply; 679a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 689a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen 699a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen data.writeStrongBinder(lock); 709a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen data.writeInt32(flags); 719a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen data.writeString16(tag); 729a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen data.writeString16(packageName); 739a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen data.writeInt32(uid); // uid to blame for the work 74a602086872ad725d257b3be659a774f032f06d71Glenn Kasten return remote()->transact(ACQUIRE_WAKE_LOCK_UID, data, &reply, 75a602086872ad725d257b3be659a774f032f06d71Glenn Kasten isOneWay ? IBinder::FLAG_ONEWAY : 0); 769a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen } 779a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen 78a602086872ad725d257b3be659a774f032f06d71Glenn Kasten virtual status_t releaseWakeLock(const sp<IBinder>& lock, int flags, bool isOneWay) 79b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross { 80b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross Parcel data, reply; 81b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 82b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross data.writeStrongBinder(lock); 83b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross data.writeInt32(flags); 84a602086872ad725d257b3be659a774f032f06d71Glenn Kasten return remote()->transact(RELEASE_WAKE_LOCK, data, &reply, 85a602086872ad725d257b3be659a774f032f06d71Glenn Kasten isOneWay ? IBinder::FLAG_ONEWAY : 0); 86b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross } 875c0106e134366312206702f1b072347e20c90374Marco Nelissen 88a602086872ad725d257b3be659a774f032f06d71Glenn Kasten virtual status_t updateWakeLockUids(const sp<IBinder>& lock, int len, const int *uids, 89a602086872ad725d257b3be659a774f032f06d71Glenn Kasten bool isOneWay) { 905c0106e134366312206702f1b072347e20c90374Marco Nelissen Parcel data, reply; 915c0106e134366312206702f1b072347e20c90374Marco Nelissen data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 925c0106e134366312206702f1b072347e20c90374Marco Nelissen data.writeStrongBinder(lock); 935c0106e134366312206702f1b072347e20c90374Marco Nelissen data.writeInt32Array(len, uids); 94a602086872ad725d257b3be659a774f032f06d71Glenn Kasten return remote()->transact(UPDATE_WAKE_LOCK_UIDS, data, &reply, 95a602086872ad725d257b3be659a774f032f06d71Glenn Kasten isOneWay ? IBinder::FLAG_ONEWAY : 0); 965c0106e134366312206702f1b072347e20c90374Marco Nelissen } 97ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi 98ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi virtual status_t powerHint(int hintId, int param) 99ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi { 100ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi Parcel data, reply; 101ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 102ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi data.writeInt32(hintId); 103ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi data.writeInt32(param); 104a602086872ad725d257b3be659a774f032f06d71Glenn Kasten // This FLAG_ONEWAY is in the .aidl, so there is no way to disable it 105ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi return remote()->transact(POWER_HINT, data, &reply, IBinder::FLAG_ONEWAY); 106ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi } 107b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross}; 108b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 109b731ae01b15682a3326dc4145f614f919b2789b5Colin CrossIMPLEMENT_META_INTERFACE(PowerManager, "android.os.IPowerManager"); 110b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 111b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross// ---------------------------------------------------------------------------- 112b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 113b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross}; // namespace android 114