135d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang/* 235d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang * Copyright (C) 2015 The Android Open Source Project 335d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang * 435d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang * Licensed under the Apache License, Version 2.0 (the "License"); 535d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang * you may not use this file except in compliance with the License. 635d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang * You may obtain a copy of the License at 735d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang * 835d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang * http://www.apache.org/licenses/LICENSE-2.0 935d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang * 1035d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang * Unless required by applicable law or agreed to in writing, software 1135d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang * distributed under the License is distributed on an "AS IS" BASIS, 1235d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1335d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang * See the License for the specific language governing permissions and 1435d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang * limitations under the License. 1535d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang */ 1635d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 1735d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang#ifndef A_WAKELOCK_H_ 1835d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang#define A_WAKELOCK_H_ 1935d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 2035d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang#include <media/stagefright/foundation/ABase.h> 2135d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang#include <powermanager/IPowerManager.h> 2235d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang#include <utils/RefBase.h> 2335d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 2435d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiangnamespace android { 2535d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 2635d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiangclass AWakeLock : public RefBase { 2735d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 2835d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiangpublic: 2935d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang AWakeLock(); 3035d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 3135d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang // NOTE: acquire and release are not thread safe 3235d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 3335d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang // returns true if wakelock was acquired 3435d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang bool acquire(); 3535d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang void release(bool force = false); 3635d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 3735d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang virtual ~AWakeLock(); 3835d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 3935d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiangprivate: 4035d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang sp<IPowerManager> mPowerManager; 4135d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang sp<IBinder> mWakeLockToken; 4235d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang uint32_t mWakeLockCount; 4335d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 4435d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang class PMDeathRecipient : public IBinder::DeathRecipient { 4535d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang public: 4640d8899f60c5212af9d727ba0ffaaecf676ebd1dChih-Hung Hsieh explicit PMDeathRecipient(AWakeLock *wakeLock) : mWakeLock(wakeLock) {} 4735d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang virtual ~PMDeathRecipient() {} 4835d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 4935d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang // IBinder::DeathRecipient 5035d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang virtual void binderDied(const wp<IBinder> &who); 5135d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 5235d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang private: 5335d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang PMDeathRecipient(const PMDeathRecipient&); 5435d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang PMDeathRecipient& operator= (const PMDeathRecipient&); 5535d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 5635d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang AWakeLock *mWakeLock; 5735d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang }; 5835d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 5935d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang const sp<PMDeathRecipient> mDeathRecipient; 6035d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 6135d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang void clearPowerManager(); 6235d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 6335d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang DISALLOW_EVIL_CONSTRUCTORS(AWakeLock); 6435d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang}; 6535d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 6635d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang} // namespace android 6735d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang 6835d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang#endif // A_WAKELOCK_H_ 69