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