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