1ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* 2a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson * Copyright (c) 2013-14, The Linux Foundation. All rights reserved. 3ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * 4ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * Redistribution and use in source and binary forms, with or without 5ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * modification, are permitted provided that the following conditions are 6ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * met: 7ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * * Redistributions of source code must retain the above copyright 8ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * notice, this list of conditions and the following disclaimer. 9ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * * Redistributions in binary form must reproduce the above 10ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * copyright notice, this list of conditions and the following 11ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * disclaimer in the documentation and/or other materials provided 12ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * with the distribution. 13ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * * Neither the name of The Linux Foundation nor the names of its 14ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * contributors may be used to endorse or promote products derived 15ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * from this software without specific prior written permission. 16ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * 17ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * SUBSTITUTE GOODS OR CLIENTS; LOSS OF USE, DATA, OR PROFITS; OR 24ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson */ 29ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 30ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <hwc_qclient.h> 31ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <IQService.h> 32ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <hwc_utils.h> 33a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson#include <mdp_version.h> 34000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed#include <hwc_mdpcomp.h> 35ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 36ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define QCLIENT_DEBUG 0 37ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 38ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonusing namespace android; 39ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonusing namespace qService; 40a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsonusing namespace qhwc; 41ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 42ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonnamespace qClient { 43ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 44ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson// ---------------------------------------------------------------------------- 45ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon WilsonQClient::QClient(hwc_context_t *ctx) : mHwcContext(ctx), 46ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mMPDeathNotifier(new MPDeathNotifier(ctx)) 47ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson{ 48ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGD_IF(QCLIENT_DEBUG, "QClient Constructor invoked"); 49ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 50ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 51ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon WilsonQClient::~QClient() 52ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson{ 53ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGD_IF(QCLIENT_DEBUG,"QClient Destructor invoked"); 54ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 55ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 56a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsonstatic void securing(hwc_context_t *ctx, uint32_t startEnd) { 57a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson Locker::Autolock _sl(ctx->mDrawLock); 58ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson //The only way to make this class in this process subscribe to media 59ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson //player's death. 60ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson IMediaDeathNotifier::getMediaPlayerService(); 61ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 62a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ctx->mSecuring = startEnd; 63ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson //We're done securing 64ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(startEnd == IQService::END) 65a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ctx->mSecureMode = true; 66a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson if(ctx->proc) 67a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ctx->proc->invalidate(ctx->proc); 68ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 69ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 70a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsonstatic void unsecuring(hwc_context_t *ctx, uint32_t startEnd) { 71a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson Locker::Autolock _sl(ctx->mDrawLock); 72a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ctx->mSecuring = startEnd; 73ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson //We're done unsecuring 74ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(startEnd == IQService::END) 75a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ctx->mSecureMode = false; 76a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson if(ctx->proc) 77a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ctx->proc->invalidate(ctx->proc); 78ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 79ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 80ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonvoid QClient::MPDeathNotifier::died() { 81ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson Locker::Autolock _sl(mHwcContext->mDrawLock); 82ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ALOGD_IF(QCLIENT_DEBUG, "Media Player died"); 83ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mHwcContext->mSecuring = false; 84ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mHwcContext->mSecureMode = false; 85ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson if(mHwcContext->proc) 86ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson mHwcContext->proc->invalidate(mHwcContext->proc); 87ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 88ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 89a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsonstatic android::status_t screenRefresh(hwc_context_t *ctx) { 90ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson status_t result = NO_INIT; 91a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson if(ctx->proc) { 92a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ctx->proc->invalidate(ctx->proc); 93ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson result = NO_ERROR; 94ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson } 95ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson return result; 96ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 97a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 98a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsonstatic void setExtOrientation(hwc_context_t *ctx, uint32_t orientation) { 99a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ctx->mExtOrientation = orientation; 100a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson} 101a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 102a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsonstatic void isExternalConnected(hwc_context_t* ctx, Parcel* outParcel) { 103a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson int connected; 104a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson connected = ctx->dpyAttr[HWC_DISPLAY_EXTERNAL].connected ? 1 : 0; 105a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel->writeInt32(connected); 106a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson} 107a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 108a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsonstatic void getDisplayAttributes(hwc_context_t* ctx, const Parcel* inParcel, 109a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson Parcel* outParcel) { 110a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson int dpy = inParcel->readInt32(); 111a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel->writeInt32(ctx->dpyAttr[dpy].vsync_period); 1122c4de320db5ba9e92cfaa5a7fd67487cec0f26dcDileep Kumar Reddi if (ctx->dpyAttr[dpy].customFBSize) { 1132c4de320db5ba9e92cfaa5a7fd67487cec0f26dcDileep Kumar Reddi outParcel->writeInt32(ctx->dpyAttr[dpy].xres_new); 1142c4de320db5ba9e92cfaa5a7fd67487cec0f26dcDileep Kumar Reddi outParcel->writeInt32(ctx->dpyAttr[dpy].yres_new); 1152c4de320db5ba9e92cfaa5a7fd67487cec0f26dcDileep Kumar Reddi } else { 1162c4de320db5ba9e92cfaa5a7fd67487cec0f26dcDileep Kumar Reddi outParcel->writeInt32(ctx->dpyAttr[dpy].xres); 1172c4de320db5ba9e92cfaa5a7fd67487cec0f26dcDileep Kumar Reddi outParcel->writeInt32(ctx->dpyAttr[dpy].yres); 1182c4de320db5ba9e92cfaa5a7fd67487cec0f26dcDileep Kumar Reddi } 119a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel->writeFloat(ctx->dpyAttr[dpy].xdpi); 120a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel->writeFloat(ctx->dpyAttr[dpy].ydpi); 121a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson //XXX: Need to check what to return for HDMI 122a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel->writeInt32(ctx->mMDP.panel); 123a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson} 124a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsonstatic void setHSIC(const Parcel* inParcel) { 125a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson int dpy = inParcel->readInt32(); 126a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ALOGD_IF(0, "In %s: dpy = %d", __FUNCTION__, dpy); 127a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson HSICData_t hsic_data; 128a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson hsic_data.hue = inParcel->readInt32(); 129a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson hsic_data.saturation = inParcel->readFloat(); 130a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson hsic_data.intensity = inParcel->readInt32(); 131a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson hsic_data.contrast = inParcel->readFloat(); 132a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson //XXX: Actually set the HSIC data through ABL lib 133a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson} 134a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 135a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 136a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsonstatic void setBufferMirrorMode(hwc_context_t *ctx, uint32_t enable) { 137a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ctx->mBufferMirrorMode = enable; 138a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson} 139a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 140a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsonstatic status_t getDisplayVisibleRegion(hwc_context_t* ctx, int dpy, 141a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson Parcel* outParcel) { 142a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson // Get the info only if the dpy is valid 143a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson if(dpy >= HWC_DISPLAY_PRIMARY && dpy <= HWC_DISPLAY_VIRTUAL) { 144a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson Locker::Autolock _sl(ctx->mDrawLock); 145a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson if(dpy && (ctx->mExtOrientation || ctx->mBufferMirrorMode)) { 146a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson // Return the destRect on external, if external orienation 147a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson // is enabled 148a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel->writeInt32(ctx->dpyAttr[dpy].mDstRect.left); 149a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel->writeInt32(ctx->dpyAttr[dpy].mDstRect.top); 150a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel->writeInt32(ctx->dpyAttr[dpy].mDstRect.right); 151a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel->writeInt32(ctx->dpyAttr[dpy].mDstRect.bottom); 152a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson } else { 153a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel->writeInt32(ctx->mViewFrame[dpy].left); 154a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel->writeInt32(ctx->mViewFrame[dpy].top); 155a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel->writeInt32(ctx->mViewFrame[dpy].right); 156a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel->writeInt32(ctx->mViewFrame[dpy].bottom); 157a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson } 158a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson return NO_ERROR; 159a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson } else { 160a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ALOGE("In %s: invalid dpy index %d", __FUNCTION__, dpy); 161a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson return BAD_VALUE; 162a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson } 163a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson} 164a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 165a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsonstatic void pauseWFD(hwc_context_t *ctx, uint32_t pause) { 166a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal /* TODO: Will remove pauseWFD once all the clients start using 167a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal * setWfdStatus to indicate the status of WFD display 168a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal */ 169a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson int dpy = HWC_DISPLAY_VIRTUAL; 170a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson if(pause) { 171a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson //WFD Pause 172a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson handle_pause(ctx, dpy); 173a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson } else { 174a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson //WFD Resume 175a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson handle_resume(ctx, dpy); 176a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson } 177a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson} 178a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 179a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamalstatic void setWfdStatus(hwc_context_t *ctx, uint32_t wfdStatus) { 180a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal 181a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal ALOGD_IF(HWC_WFDDISPSYNC_LOG, 182a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal "%s: Received a binder call that WFD state is %s", 183a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal __FUNCTION__,getExternalDisplayState(wfdStatus)); 184a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal int dpy = HWC_DISPLAY_VIRTUAL; 185a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal 186a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal if(wfdStatus == EXTERNAL_OFFLINE) { 187a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal ctx->mWfdSyncLock.lock(); 188a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal ctx->mWfdSyncLock.signal(); 189a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal ctx->mWfdSyncLock.unlock(); 190a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal } else if(wfdStatus == EXTERNAL_PAUSE) { 191a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal handle_pause(ctx, dpy); 192a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal } else if(wfdStatus == EXTERNAL_RESUME) { 193a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal handle_resume(ctx, dpy); 194a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal } 195a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal} 196a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal 19733f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan 19833f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnanstatic status_t setViewFrame(hwc_context_t* ctx, const Parcel* inParcel) { 19933f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan int dpy = inParcel->readInt32(); 20033f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan if(dpy >= HWC_DISPLAY_PRIMARY && dpy <= HWC_DISPLAY_VIRTUAL) { 20133f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan Locker::Autolock _sl(ctx->mDrawLock); 20233f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan ctx->mViewFrame[dpy].left = inParcel->readInt32(); 20333f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan ctx->mViewFrame[dpy].top = inParcel->readInt32(); 20433f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan ctx->mViewFrame[dpy].right = inParcel->readInt32(); 20533f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan ctx->mViewFrame[dpy].bottom = inParcel->readInt32(); 20633f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan ALOGD_IF(QCLIENT_DEBUG, "%s: mViewFrame[%d] = [%d %d %d %d]", 20733f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan __FUNCTION__, dpy, 20833f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan ctx->mViewFrame[dpy].left, ctx->mViewFrame[dpy].top, 20933f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan ctx->mViewFrame[dpy].right, ctx->mViewFrame[dpy].bottom); 21033f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan return NO_ERROR; 21133f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan } else { 21233f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan ALOGE("In %s: invalid dpy index %d", __FUNCTION__, dpy); 21333f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan return BAD_VALUE; 21433f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan } 21533f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan} 21633f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan 217000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmedstatic void toggleDynamicDebug(hwc_context_t* ctx, const Parcel* inParcel) { 218000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed int debug_type = inParcel->readInt32(); 219000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed bool enable = !!inParcel->readInt32(); 220000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed ALOGD("%s: debug_type: %d enable:%d", 221000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed __FUNCTION__, debug_type, enable); 222000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed Locker::Autolock _sl(ctx->mDrawLock); 223000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed switch (debug_type) { 224000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed //break is ignored for DEBUG_ALL to toggle all of them at once 225000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed case IQService::DEBUG_ALL: 226000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed case IQService::DEBUG_MDPCOMP: 227000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed qhwc::MDPComp::dynamicDebug(enable); 228000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed if (debug_type != IQService::DEBUG_ALL) 229000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed break; 230000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed case IQService::DEBUG_VSYNC: 231000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed ctx->vstate.debug = enable; 232000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed if (debug_type != IQService::DEBUG_ALL) 233000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed break; 234000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed } 235000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed} 236000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed 237a653efede03423aa840da24634f1ec6f20796f1eSimon Wilsonstatus_t QClient::notifyCallback(uint32_t command, const Parcel* inParcel, 238a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson Parcel* outParcel) { 239a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson status_t ret = NO_ERROR; 240a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 241a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson switch(command) { 242a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson case IQService::SECURING: 243a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson securing(mHwcContext, inParcel->readInt32()); 244a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson break; 245a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson case IQService::UNSECURING: 246a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson unsecuring(mHwcContext, inParcel->readInt32()); 247a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson break; 248a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson case IQService::SCREEN_REFRESH: 249a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson return screenRefresh(mHwcContext); 250a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson break; 251a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson case IQService::EXTERNAL_ORIENTATION: 252a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson setExtOrientation(mHwcContext, inParcel->readInt32()); 253a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson break; 254a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson case IQService::BUFFER_MIRRORMODE: 255a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson setBufferMirrorMode(mHwcContext, inParcel->readInt32()); 256a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson break; 257a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson case IQService::GET_DISPLAY_VISIBLE_REGION: 258a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ret = getDisplayVisibleRegion(mHwcContext, inParcel->readInt32(), 259a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson outParcel); 260a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson break; 261a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson case IQService::CHECK_EXTERNAL_STATUS: 262a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson isExternalConnected(mHwcContext, outParcel); 263a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson break; 264a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson case IQService::GET_DISPLAY_ATTRIBUTES: 265a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson getDisplayAttributes(mHwcContext, inParcel, outParcel); 266a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson break; 267a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson case IQService::SET_HSIC_DATA: 268a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson setHSIC(inParcel); 269a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal break; 270a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson case IQService::PAUSE_WFD: 271a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson pauseWFD(mHwcContext, inParcel->readInt32()); 272a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson break; 273a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal case IQService::SET_WFD_STATUS: 274a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal setWfdStatus(mHwcContext,inParcel->readInt32()); 275a2b25afe2813c793161cc9fad657d9638e88aec4Raj kamal break; 27633f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan case IQService::SET_VIEW_FRAME: 27733f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan setViewFrame(mHwcContext, inParcel); 27833f1ae81779c5b897987245cde0f498fd6192579Ramkumar Radhakrishnan break; 279000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed case IQService::DYNAMIC_DEBUG: 280000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed toggleDynamicDebug(mHwcContext, inParcel); 281000cb84f08ff7034094a16e9514a67c9bc470c0cNaseer Ahmed break; 282a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson default: 283a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson ret = NO_ERROR; 284a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson } 285a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson return ret; 286a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson} 287a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 288ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson} 289