1c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah/* 2f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.R * Copyright (c) 2013-14, The Linux Foundation. All rights reserved. 3c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * 4c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * Redistribution and use in source and binary forms, with or without 5c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * modification, are permitted provided that the following conditions are 6c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * met: 7c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * * Redistributions of source code must retain the above copyright 8c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * notice, this list of conditions and the following disclaimer. 9c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * * Redistributions in binary form must reproduce the above 10c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * copyright notice, this list of conditions and the following 11c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * disclaimer in the documentation and/or other materials provided 12c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * with the distribution. 13c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * * Neither the name of The Linux Foundation nor the names of its 14c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * contributors may be used to endorse or promote products derived 15c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * from this software without specific prior written permission. 16c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * 17c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * SUBSTITUTE GOODS OR CLIENTS; LOSS OF USE, DATA, OR PROFITS; OR 24c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah */ 29c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 30c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah#include <hwc_qclient.h> 31c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah#include <IQService.h> 32c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah#include <hwc_utils.h> 33b0f5e47fdc9c351d603ba7cc71b4fc61074d797aZohaib Alam#include <mdp_version.h> 34c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 35c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah#define QCLIENT_DEBUG 0 36c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 37c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shahusing namespace android; 38c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shahusing namespace qService; 39f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.Rusing namespace qhwc; 40c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 41c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shahnamespace qClient { 42c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 43c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah// ---------------------------------------------------------------------------- 444cd12b72780d32ebc7e3b8979598dc5c7df70f99Saurabh ShahQClient::QClient(hwc_context_t *ctx) : mHwcContext(ctx), 454cd12b72780d32ebc7e3b8979598dc5c7df70f99Saurabh Shah mMPDeathNotifier(new MPDeathNotifier(ctx)) 46c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah{ 47c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah ALOGD_IF(QCLIENT_DEBUG, "QClient Constructor invoked"); 48c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah} 49c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 50c59c27830019a78f668f6fb2e9518483587ce098Saurabh ShahQClient::~QClient() 51c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah{ 52c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah ALOGD_IF(QCLIENT_DEBUG,"QClient Destructor invoked"); 53c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah} 54c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 552299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmedstatic void securing(hwc_context_t *ctx, uint32_t startEnd) { 562299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed Locker::Autolock _sl(ctx->mDrawLock); 57147ef1b12e9539e66b09cb6c23ea20831a7b8a7bSaurabh Shah //The only way to make this class in this process subscribe to media 58147ef1b12e9539e66b09cb6c23ea20831a7b8a7bSaurabh Shah //player's death. 59147ef1b12e9539e66b09cb6c23ea20831a7b8a7bSaurabh Shah IMediaDeathNotifier::getMediaPlayerService(); 60147ef1b12e9539e66b09cb6c23ea20831a7b8a7bSaurabh Shah 612299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed ctx->mSecuring = startEnd; 62c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah //We're done securing 63c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah if(startEnd == IQService::END) 642299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed ctx->mSecureMode = true; 652299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed if(ctx->proc) 662299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed ctx->proc->invalidate(ctx->proc); 67c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah} 68c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 692299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmedstatic void unsecuring(hwc_context_t *ctx, uint32_t startEnd) { 702299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed Locker::Autolock _sl(ctx->mDrawLock); 712299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed ctx->mSecuring = startEnd; 72c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah //We're done unsecuring 73c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah if(startEnd == IQService::END) 742299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed ctx->mSecureMode = false; 752299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed if(ctx->proc) 762299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed ctx->proc->invalidate(ctx->proc); 77c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah} 78c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 794cd12b72780d32ebc7e3b8979598dc5c7df70f99Saurabh Shahvoid QClient::MPDeathNotifier::died() { 801a050829890735bc5a936ad65bf9cad80295306bSaurabh Shah Locker::Autolock _sl(mHwcContext->mDrawLock); 814cd12b72780d32ebc7e3b8979598dc5c7df70f99Saurabh Shah ALOGD_IF(QCLIENT_DEBUG, "Media Player died"); 824cd12b72780d32ebc7e3b8979598dc5c7df70f99Saurabh Shah mHwcContext->mSecuring = false; 834cd12b72780d32ebc7e3b8979598dc5c7df70f99Saurabh Shah mHwcContext->mSecureMode = false; 844cd12b72780d32ebc7e3b8979598dc5c7df70f99Saurabh Shah if(mHwcContext->proc) 854cd12b72780d32ebc7e3b8979598dc5c7df70f99Saurabh Shah mHwcContext->proc->invalidate(mHwcContext->proc); 864cd12b72780d32ebc7e3b8979598dc5c7df70f99Saurabh Shah} 874cd12b72780d32ebc7e3b8979598dc5c7df70f99Saurabh Shah 882299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmedstatic android::status_t screenRefresh(hwc_context_t *ctx) { 89966a6ae6cc5b8c8ee4dd2f299a230113fc4b2b26Jeykumar Sankaran status_t result = NO_INIT; 902299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed if(ctx->proc) { 912299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed ctx->proc->invalidate(ctx->proc); 92966a6ae6cc5b8c8ee4dd2f299a230113fc4b2b26Jeykumar Sankaran result = NO_ERROR; 93966a6ae6cc5b8c8ee4dd2f299a230113fc4b2b26Jeykumar Sankaran } 94966a6ae6cc5b8c8ee4dd2f299a230113fc4b2b26Jeykumar Sankaran return result; 95966a6ae6cc5b8c8ee4dd2f299a230113fc4b2b26Jeykumar Sankaran} 963b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R 972299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmedstatic void setExtOrientation(hwc_context_t *ctx, uint32_t orientation) { 982299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed ctx->mExtOrientation = orientation; 993b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R} 1003b9570a337a3115ad05dee3c1aa2ecc6f82f6ab1Arun Kumar K.R 1012e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmedstatic void isExternalConnected(hwc_context_t* ctx, Parcel* outParcel) { 1022e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed int connected; 1032e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed connected = ctx->dpyAttr[HWC_DISPLAY_EXTERNAL].connected ? 1 : 0; 1042e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed outParcel->writeInt32(connected); 1052e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed} 1062e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed 1072e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmedstatic void getDisplayAttributes(hwc_context_t* ctx, const Parcel* inParcel, 1082e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed Parcel* outParcel) { 1092e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed int dpy = inParcel->readInt32(); 1102e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed outParcel->writeInt32(ctx->dpyAttr[dpy].vsync_period); 1112e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed outParcel->writeInt32(ctx->dpyAttr[dpy].xres); 1122e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed outParcel->writeInt32(ctx->dpyAttr[dpy].yres); 1132e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed outParcel->writeFloat(ctx->dpyAttr[dpy].xdpi); 1142e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed outParcel->writeFloat(ctx->dpyAttr[dpy].ydpi); 1152e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed //XXX: Need to check what to return for HDMI 1162e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed outParcel->writeInt32(ctx->mMDP.panel); 1172e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed} 118404047f2c61687024048b04374ea736285ddded1Arun Kumar K.Rstatic void setHSIC(const Parcel* inParcel) { 1192e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed int dpy = inParcel->readInt32(); 120404047f2c61687024048b04374ea736285ddded1Arun Kumar K.R ALOGD_IF(0, "In %s: dpy = %d", __FUNCTION__, dpy); 1212e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed HSICData_t hsic_data; 1222e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed hsic_data.hue = inParcel->readInt32(); 1232e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed hsic_data.saturation = inParcel->readFloat(); 1242e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed hsic_data.intensity = inParcel->readInt32(); 1252e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed hsic_data.contrast = inParcel->readFloat(); 1262e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed //XXX: Actually set the HSIC data through ABL lib 1272e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed} 1282e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed 1292e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed 1302299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmedstatic void setBufferMirrorMode(hwc_context_t *ctx, uint32_t enable) { 1312299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed ctx->mBufferMirrorMode = enable; 132effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R} 133effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R 134ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.Rstatic status_t getDisplayVisibleRegion(hwc_context_t* ctx, int dpy, 135ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R Parcel* outParcel) { 136ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R // Get the info only if the dpy is valid 137ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R if(dpy >= HWC_DISPLAY_PRIMARY && dpy <= HWC_DISPLAY_VIRTUAL) { 138ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R Locker::Autolock _sl(ctx->mDrawLock); 139ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R if(dpy && (ctx->mExtOrientation || ctx->mBufferMirrorMode)) { 140ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R // Return the destRect on external, if external orienation 141ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R // is enabled 142ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R outParcel->writeInt32(ctx->dpyAttr[dpy].mDstRect.left); 143ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R outParcel->writeInt32(ctx->dpyAttr[dpy].mDstRect.top); 144ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R outParcel->writeInt32(ctx->dpyAttr[dpy].mDstRect.right); 145ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R outParcel->writeInt32(ctx->dpyAttr[dpy].mDstRect.bottom); 146ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R } else { 147ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R outParcel->writeInt32(ctx->mViewFrame[dpy].left); 148ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R outParcel->writeInt32(ctx->mViewFrame[dpy].top); 149ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R outParcel->writeInt32(ctx->mViewFrame[dpy].right); 150ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R outParcel->writeInt32(ctx->mViewFrame[dpy].bottom); 151ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R } 152ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R return NO_ERROR; 153ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R } else { 154ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R ALOGE("In %s: invalid dpy index %d", __FUNCTION__, dpy); 155ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R return BAD_VALUE; 156ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R } 157ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R} 158ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R 159f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.Rstatic void pauseWFD(hwc_context_t *ctx, uint32_t pause) { 160e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal /* TODO: Will remove pauseWFD once all the clients start using 161e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal * setWfdStatus to indicate the status of WFD display 162e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal */ 163f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.R int dpy = HWC_DISPLAY_VIRTUAL; 164f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.R if(pause) { 165f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.R //WFD Pause 166f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.R handle_pause(ctx, dpy); 167f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.R } else { 168f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.R //WFD Resume 169f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.R handle_resume(ctx, dpy); 170f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.R } 171f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.R} 172f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.R 173e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamalstatic void setWfdStatus(hwc_context_t *ctx, uint32_t wfdStatus) { 174e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal 175e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal ALOGD_IF(HWC_WFDDISPSYNC_LOG, 176e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal "%s: Received a binder call that WFD state is %s", 177e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal __FUNCTION__,getExternalDisplayState(wfdStatus)); 178e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal int dpy = HWC_DISPLAY_VIRTUAL; 179e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal 180e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal if(wfdStatus == EXTERNAL_OFFLINE) { 181e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal ctx->mWfdSyncLock.lock(); 182e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal ctx->mWfdSyncLock.signal(); 183e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal ctx->mWfdSyncLock.unlock(); 184e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal } else if(wfdStatus == EXTERNAL_PAUSE) { 185e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal handle_pause(ctx, dpy); 186e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal } else if(wfdStatus == EXTERNAL_RESUME) { 187e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal handle_resume(ctx, dpy); 188e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal } 189e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal} 190e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal 1912299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmedstatus_t QClient::notifyCallback(uint32_t command, const Parcel* inParcel, 1922299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed Parcel* outParcel) { 193ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R status_t ret = NO_ERROR; 1942299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed 1952299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed switch(command) { 1962299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed case IQService::SECURING: 1972299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed securing(mHwcContext, inParcel->readInt32()); 1982299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed break; 1992299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed case IQService::UNSECURING: 2002299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed unsecuring(mHwcContext, inParcel->readInt32()); 2012299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed break; 2022299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed case IQService::SCREEN_REFRESH: 2032299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed return screenRefresh(mHwcContext); 2042299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed break; 2052299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed case IQService::EXTERNAL_ORIENTATION: 2062299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed setExtOrientation(mHwcContext, inParcel->readInt32()); 2072299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed break; 2082299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed case IQService::BUFFER_MIRRORMODE: 2092299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed setBufferMirrorMode(mHwcContext, inParcel->readInt32()); 2102299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed break; 211ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R case IQService::GET_DISPLAY_VISIBLE_REGION: 212ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R ret = getDisplayVisibleRegion(mHwcContext, inParcel->readInt32(), 213ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R outParcel); 214ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R break; 2152e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed case IQService::CHECK_EXTERNAL_STATUS: 2162e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed isExternalConnected(mHwcContext, outParcel); 2172e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed break; 2182e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed case IQService::GET_DISPLAY_ATTRIBUTES: 2192e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed getDisplayAttributes(mHwcContext, inParcel, outParcel); 2202e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed break; 2212e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed case IQService::SET_HSIC_DATA: 222404047f2c61687024048b04374ea736285ddded1Arun Kumar K.R setHSIC(inParcel); 223e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal break; 224f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.R case IQService::PAUSE_WFD: 225f39af541bb947658b15cda3602beeb0df8cf5c56Arun Kumar K.R pauseWFD(mHwcContext, inParcel->readInt32()); 2262e11c4c4562da807b35fc0c127a7449edd8aac17Naseer Ahmed break; 227e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal case IQService::SET_WFD_STATUS: 228e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal setWfdStatus(mHwcContext,inParcel->readInt32()); 229e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal break; 2302299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed default: 231ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R ret = NO_ERROR; 2322299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed } 233ac5b9f4e6b7dc80e0f91c1581f0bcb4464a48ef4Arun Kumar K.R return ret; 2342299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed} 2352299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed 236c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah} 237