1 /*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include <nativepower/BnPowerManager.h>
18
19 #include <binder/Parcel.h>
20
21 namespace android {
22
onTransact(uint32_t code,const Parcel & data,Parcel * reply,uint32_t flags)23 status_t BnPowerManager::onTransact(uint32_t code,
24 const Parcel& data,
25 Parcel* reply,
26 uint32_t flags) {
27 switch (code) {
28 case IPowerManager::ACQUIRE_WAKE_LOCK: {
29 // The parameter orders in IPowerManager.aidl and IPowerManager.h don't
30 // match. :-( (BpPowerManager in IPowerManager.cpp passes arguments in the
31 // order that the AIDL file describes and that we use here, though.)
32 CHECK_INTERFACE(IPowerManager, data, reply);
33 sp<IBinder> lock = data.readStrongBinder();
34 int32_t flags = data.readInt32();
35 String16 tag = data.readString16();
36 String16 package_name = data.readString16();
37 // Ignore work source and history.
38 return acquireWakeLock(flags, lock, tag, package_name);
39 }
40 case IPowerManager::ACQUIRE_WAKE_LOCK_UID: {
41 CHECK_INTERFACE(IPowerManager, data, reply);
42 sp<IBinder> lock = data.readStrongBinder();
43 int32_t flags = data.readInt32();
44 String16 tag = data.readString16();
45 String16 package_name = data.readString16();
46 int32_t uid = data.readInt32();
47 return acquireWakeLockWithUid(flags, lock, tag, package_name, uid);
48 }
49 case IPowerManager::RELEASE_WAKE_LOCK: {
50 CHECK_INTERFACE(IPowerManager, data, reply);
51 sp<IBinder> lock = data.readStrongBinder();
52 int32_t flags = data.readInt32();
53 return releaseWakeLock(lock, flags);
54 }
55 case IPowerManager::UPDATE_WAKE_LOCK_UIDS: {
56 CHECK_INTERFACE(IPowerManager, data, reply);
57 sp<IBinder> lock = data.readStrongBinder();
58 // TODO: There's no Parcel::readInt32Array(). Add one.
59 return updateWakeLockUids(lock, 0, nullptr);
60 }
61 case IPowerManager::POWER_HINT: {
62 CHECK_INTERFACE(IPowerManager, data, reply);
63 int32_t hint_id = data.readInt32();
64 int32_t params = data.readInt32();
65 return powerHint(hint_id, params);
66 }
67 case IPowerManager::GO_TO_SLEEP: {
68 CHECK_INTERFACE(IPowerManager, data, reply);
69 int64_t event_time_ms = data.readInt64();
70 int32_t reason = data.readInt32();
71 int32_t flags = data.readInt32();
72 return goToSleep(event_time_ms, reason, flags);
73 }
74 case IPowerManager::REBOOT: {
75 CHECK_INTERFACE(IPowerManager, data, reply);
76 bool confirm = data.readInt32();
77 String16 reason = data.readString16();
78 bool wait = data.readInt32();
79 return reboot(confirm, reason, wait);
80 }
81 case IPowerManager::SHUTDOWN: {
82 CHECK_INTERFACE(IPowerManager, data, reply);
83 bool confirm = data.readInt32();
84 String16 reason = data.readString16();
85 bool wait = data.readInt32();
86 return shutdown(confirm, reason, wait);
87 }
88 case IPowerManager::CRASH: {
89 CHECK_INTERFACE(IPowerManager, data, reply);
90 String16 message = data.readString16();
91 return crash(message);
92 }
93 default:
94 return BBinder::onTransact(code, data, reply, flags);
95 }
96 }
97
98 } // namespace android
99