hwc_qclient.cpp revision fbc8e31588543bc8ca8b38cce8182cf5bb20371c
1d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah/* 2d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * Copyright (c) 2013, The Linux Foundation. All rights reserved. 3d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * 4d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * Redistribution and use in source and binary forms, with or without 5d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * modification, are permitted provided that the following conditions are 6d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * met: 7d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * * Redistributions of source code must retain the above copyright 8d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * notice, this list of conditions and the following disclaimer. 9d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * * Redistributions in binary form must reproduce the above 10d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * copyright notice, this list of conditions and the following 11d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * disclaimer in the documentation and/or other materials provided 12d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * with the distribution. 13d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * * Neither the name of The Linux Foundation nor the names of its 14d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * contributors may be used to endorse or promote products derived 15d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * from this software without specific prior written permission. 16d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * 17d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * SUBSTITUTE GOODS OR CLIENTS; LOSS OF USE, DATA, OR PROFITS; OR 24d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah */ 29d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah 30d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah#include <hwc_qclient.h> 31d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah#include <IQService.h> 32d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah#include <hwc_utils.h> 33d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah 34d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah#define QCLIENT_DEBUG 0 35d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah 36d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shahusing namespace android; 37d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shahusing namespace qService; 38d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah 39d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shahnamespace qClient { 40d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah 41d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah// ---------------------------------------------------------------------------- 425a5dcc1df636a8c0d5be68a0b5d7e1108fdf19a8Saurabh ShahQClient::QClient(hwc_context_t *ctx) : mHwcContext(ctx), 435a5dcc1df636a8c0d5be68a0b5d7e1108fdf19a8Saurabh Shah mMPDeathNotifier(new MPDeathNotifier(ctx)) 44d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah{ 45d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah ALOGD_IF(QCLIENT_DEBUG, "QClient Constructor invoked"); 46d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah} 47d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah 48d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh ShahQClient::~QClient() 49d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah{ 50d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah ALOGD_IF(QCLIENT_DEBUG,"QClient Destructor invoked"); 51d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah} 52d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah 53e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaranstatus_t QClient::notifyCallback(uint32_t msg, uint32_t value) { 54d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah switch(msg) { 55d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah case IQService::SECURING: 56d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah securing(value); 57d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah break; 58d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah case IQService::UNSECURING: 59d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah unsecuring(value); 60d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah break; 61e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran case IQService::SCREEN_REFRESH: 62e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran return screenRefresh(); 63e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran break; 64d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah default: 65e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran return NO_ERROR; 66d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah } 67e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran return NO_ERROR; 68d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah} 69d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah 70d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shahvoid QClient::securing(uint32_t startEnd) { 71fbc8e31588543bc8ca8b38cce8182cf5bb20371cSaurabh Shah //The only way to make this class in this process subscribe to media 72fbc8e31588543bc8ca8b38cce8182cf5bb20371cSaurabh Shah //player's death. 73fbc8e31588543bc8ca8b38cce8182cf5bb20371cSaurabh Shah IMediaDeathNotifier::getMediaPlayerService(); 74fbc8e31588543bc8ca8b38cce8182cf5bb20371cSaurabh Shah 75d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah mHwcContext->mSecuring = startEnd; 76d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah //We're done securing 77d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah if(startEnd == IQService::END) 78d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah mHwcContext->mSecureMode = true; 79d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah if(mHwcContext->proc) 80d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah mHwcContext->proc->invalidate(mHwcContext->proc); 81d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah} 82d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah 83d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shahvoid QClient::unsecuring(uint32_t startEnd) { 84d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah mHwcContext->mSecuring = startEnd; 85d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah //We're done unsecuring 86d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah if(startEnd == IQService::END) 87d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah mHwcContext->mSecureMode = false; 88d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah if(mHwcContext->proc) 89d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah mHwcContext->proc->invalidate(mHwcContext->proc); 90d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah} 91d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah 925a5dcc1df636a8c0d5be68a0b5d7e1108fdf19a8Saurabh Shahvoid QClient::MPDeathNotifier::died() { 935a5dcc1df636a8c0d5be68a0b5d7e1108fdf19a8Saurabh Shah ALOGD_IF(QCLIENT_DEBUG, "Media Player died"); 945a5dcc1df636a8c0d5be68a0b5d7e1108fdf19a8Saurabh Shah mHwcContext->mSecuring = false; 955a5dcc1df636a8c0d5be68a0b5d7e1108fdf19a8Saurabh Shah mHwcContext->mSecureMode = false; 965a5dcc1df636a8c0d5be68a0b5d7e1108fdf19a8Saurabh Shah if(mHwcContext->proc) 975a5dcc1df636a8c0d5be68a0b5d7e1108fdf19a8Saurabh Shah mHwcContext->proc->invalidate(mHwcContext->proc); 985a5dcc1df636a8c0d5be68a0b5d7e1108fdf19a8Saurabh Shah} 995a5dcc1df636a8c0d5be68a0b5d7e1108fdf19a8Saurabh Shah 100e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaranandroid::status_t QClient::screenRefresh() { 101e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran status_t result = NO_INIT; 102e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran#ifdef QCOM_BSP 103e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran if(mHwcContext->proc) { 104e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran mHwcContext->proc->invalidate(mHwcContext->proc); 105e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran result = NO_ERROR; 106e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran } 107e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran#endif 108e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran return result; 109e1f47e78496b6b9382d8c71c959ae6365c7a05d2Jeykumar Sankaran} 110d5e3e404e1344eb2148c8df9f3e35d841ddd4285Saurabh Shah} 111