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:
336ca70efdaef8c07e91692101c7a3ae35dc1e0cbbChih-Hung Hsieh    explicit 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