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 Crossclass BpPowerManager : public BpInterface<IPowerManager> 31b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross{ 32b731ae01b15682a3326dc4145f614f919b2789b5Colin Crosspublic: 33b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross BpPowerManager(const sp<IBinder>& impl) 34b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross : BpInterface<IPowerManager>(impl) 35b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross { 36b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross } 37b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 3880d7fd86e05e6f14dffc9f0c9bf176a7c8680f8cDianne Hackborn virtual status_t acquireWakeLock(int flags, const sp<IBinder>& lock, const String16& tag, 39a602086872ad725d257b3be659a774f032f06d71Glenn Kasten const String16& packageName, bool isOneWay) 40b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross { 41b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross Parcel data, reply; 42b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 43b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 44b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross data.writeStrongBinder(lock); 45ac1f70bb7135cd5fe73d6fbf121a62c779679c5aJeff Brown data.writeInt32(flags); 46b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross data.writeString16(tag); 4780d7fd86e05e6f14dffc9f0c9bf176a7c8680f8cDianne Hackborn data.writeString16(packageName); 48ac1f70bb7135cd5fe73d6fbf121a62c779679c5aJeff Brown data.writeInt32(0); // no WorkSource 49f74865eb525b34af7983777a522a5bfc496fc1c5Dianne Hackborn data.writeString16(NULL, 0); // no history tag 50a602086872ad725d257b3be659a774f032f06d71Glenn Kasten return remote()->transact(ACQUIRE_WAKE_LOCK, data, &reply, 51a602086872ad725d257b3be659a774f032f06d71Glenn Kasten isOneWay ? IBinder::FLAG_ONEWAY : 0); 52b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross } 53b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 549a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen virtual status_t acquireWakeLockWithUid(int flags, const sp<IBinder>& lock, const String16& tag, 55a602086872ad725d257b3be659a774f032f06d71Glenn Kasten const String16& packageName, int uid, bool isOneWay) 569a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen { 579a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen Parcel data, reply; 589a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 599a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen 609a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen data.writeStrongBinder(lock); 619a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen data.writeInt32(flags); 629a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen data.writeString16(tag); 639a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen data.writeString16(packageName); 649a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen data.writeInt32(uid); // uid to blame for the work 65a602086872ad725d257b3be659a774f032f06d71Glenn Kasten return remote()->transact(ACQUIRE_WAKE_LOCK_UID, data, &reply, 66a602086872ad725d257b3be659a774f032f06d71Glenn Kasten isOneWay ? IBinder::FLAG_ONEWAY : 0); 679a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen } 689a7706bb174cdac279908f705191803dc5bfa0abMarco Nelissen 69a602086872ad725d257b3be659a774f032f06d71Glenn Kasten virtual status_t releaseWakeLock(const sp<IBinder>& lock, int flags, bool isOneWay) 70b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross { 71b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross Parcel data, reply; 72b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 73b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross data.writeStrongBinder(lock); 74b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross data.writeInt32(flags); 75a602086872ad725d257b3be659a774f032f06d71Glenn Kasten return remote()->transact(RELEASE_WAKE_LOCK, data, &reply, 76a602086872ad725d257b3be659a774f032f06d71Glenn Kasten isOneWay ? IBinder::FLAG_ONEWAY : 0); 77b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross } 785c0106e134366312206702f1b072347e20c90374Marco Nelissen 79a602086872ad725d257b3be659a774f032f06d71Glenn Kasten virtual status_t updateWakeLockUids(const sp<IBinder>& lock, int len, const int *uids, 80a602086872ad725d257b3be659a774f032f06d71Glenn Kasten bool isOneWay) { 815c0106e134366312206702f1b072347e20c90374Marco Nelissen Parcel data, reply; 825c0106e134366312206702f1b072347e20c90374Marco Nelissen data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 835c0106e134366312206702f1b072347e20c90374Marco Nelissen data.writeStrongBinder(lock); 845c0106e134366312206702f1b072347e20c90374Marco Nelissen data.writeInt32Array(len, uids); 85a602086872ad725d257b3be659a774f032f06d71Glenn Kasten return remote()->transact(UPDATE_WAKE_LOCK_UIDS, data, &reply, 86a602086872ad725d257b3be659a774f032f06d71Glenn Kasten isOneWay ? IBinder::FLAG_ONEWAY : 0); 875c0106e134366312206702f1b072347e20c90374Marco Nelissen } 88ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi 89ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi virtual status_t powerHint(int hintId, int param) 90ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi { 91ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi Parcel data, reply; 92ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 93ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi data.writeInt32(hintId); 94ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi data.writeInt32(param); 95a602086872ad725d257b3be659a774f032f06d71Glenn Kasten // This FLAG_ONEWAY is in the .aidl, so there is no way to disable it 96ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi return remote()->transact(POWER_HINT, data, &reply, IBinder::FLAG_ONEWAY); 97ca13fa7dd4662921bc399e021e2ad92ddf5f5366Ruchi Kandoi } 983f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat 993f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat virtual status_t goToSleep(int64_t event_time_ms, int reason, int flags) 1003f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat { 1013f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat Parcel data, reply; 1023f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 1033f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeInt64(event_time_ms); 1043f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeInt32(reason); 1053f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeInt32(flags); 1063f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat return remote()->transact(GO_TO_SLEEP, data, &reply, 0); 1073f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat } 1083f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat 1093f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat virtual status_t reboot(bool confirm, const String16& reason, bool wait) 1103f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat { 1113f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat Parcel data, reply; 1123f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 1133f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeInt32(confirm); 1143f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeString16(reason); 1153f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeInt32(wait); 1163f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat return remote()->transact(REBOOT, data, &reply, 0); 1173f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat } 1183f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat 1193f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat virtual status_t shutdown(bool confirm, const String16& reason, bool wait) 1203f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat { 1213f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat Parcel data, reply; 1223f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 1233f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeInt32(confirm); 1243f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeString16(reason); 1253f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeInt32(wait); 1263f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat return remote()->transact(SHUTDOWN, data, &reply, 0); 1273f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat } 1283f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat 1293f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat virtual status_t crash(const String16& message) 1303f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat { 1313f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat Parcel data, reply; 1323f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); 1333f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat data.writeString16(message); 1343f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat return remote()->transact(CRASH, data, &reply, 0); 1353f50a39b1ede67eb5846f38a486780efd35ebc30Daniel Erat } 136b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross}; 137b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 138b731ae01b15682a3326dc4145f614f919b2789b5Colin CrossIMPLEMENT_META_INTERFACE(PowerManager, "android.os.IPowerManager"); 139b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 140b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross// ---------------------------------------------------------------------------- 141b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross 142b731ae01b15682a3326dc4145f614f919b2789b5Colin Cross}; // namespace android 143