1bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah/* 20de84c911980050d32a6bb35836ce099acfc496dArun Kumar K.R * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. 3bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * 4bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * Redistribution and use in source and binary forms, with or without 5bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * modification, are permitted provided that the following conditions are 6bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * met: 7bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * * Redistributions of source code must retain the above copyright 8bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * notice, this list of conditions and the following disclaimer. 9bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * * Redistributions in binary form must reproduce the above 10bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * copyright notice, this list of conditions and the following 11bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * disclaimer in the documentation and/or other materials provided 12bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * with the distribution. 135070c694011ddc30673ec68a9d1d74dc713c49f2Duy Truong * * Neither the name of The Linux Foundation nor the names of its 14bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * contributors may be used to endorse or promote products derived 15bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * from this software without specific prior written permission. 16bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * 17bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah */ 29bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah 30bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah#include <QService.h> 31bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah 32bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah#define QSERVICE_DEBUG 0 33bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah 34bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shahusing namespace android; 35bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah 36bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shahnamespace qService { 37bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah 38bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh ShahQService* QService::sQService = NULL; 39bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah// ---------------------------------------------------------------------------- 40c59c27830019a78f668f6fb2e9518483587ce098Saurabh ShahQService::QService() 41bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah{ 42bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah ALOGD_IF(QSERVICE_DEBUG, "QService Constructor invoked"); 43bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah} 44bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah 45bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh ShahQService::~QService() 46bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah{ 47bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah ALOGD_IF(QSERVICE_DEBUG,"QService Destructor invoked"); 48bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah} 49bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah 50c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shahvoid QService::connect(const sp<qClient::IQClient>& client) { 515a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed ALOGD_IF(QSERVICE_DEBUG,"HWC client connected"); 52c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah mClient = client; 53bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah} 54bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah 555a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmedvoid QService::connect(const sp<qClient::IQHDMIClient>& client) { 565a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed ALOGD_IF(QSERVICE_DEBUG,"HWC client connected"); 575a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed mHDMIClient = client; 585a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed} 595a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed 602299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmedstatus_t QService::dispatch(uint32_t command, const Parcel* inParcel, 612299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed Parcel* outParcel) { 620de84c911980050d32a6bb35836ce099acfc496dArun Kumar K.R status_t err = (status_t) FAILED_TRANSACTION; 632299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed if (mClient.get()) { 642299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed ALOGD_IF(QSERVICE_DEBUG, "Dispatching command: %d", command); 652299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed err = mClient->notifyCallback(command, inParcel, outParcel); 66effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R } 672299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed return err; 68effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R} 69effbd25d502916fcdebadd1d2b83988559434e79Arun Kumar K.R 705a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmedvoid QService::onHdmiHotplug(int connected) { 715a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed if(mHDMIClient.get()) { 725a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed ALOGD_IF(QSERVICE_DEBUG, "%s: HDMI hotplug", __FUNCTION__); 735a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed mHDMIClient->onHdmiHotplug(connected); 745a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed } else { 755a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed ALOGE("%s: Failed to get a valid HDMI client", __FUNCTION__); 765a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed } 775a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed} 785a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed 795a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmedvoid QService::onCECMessageReceived(char *msg, ssize_t len) { 805a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed if(mHDMIClient.get()) { 815a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed ALOGD_IF(QSERVICE_DEBUG, "%s: CEC message received", __FUNCTION__); 825a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed mHDMIClient->onCECMessageRecieved(msg, len); 835a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed } else { 845a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed ALOGE("%s: Failed to get a valid HDMI client", __FUNCTION__); 855a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed } 865a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed} 875a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed 885a7d156b76908b60b72d1acc1d4b5959e7a9647cNaseer Ahmed 89c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shahvoid QService::init() 90bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah{ 91bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah if(!sQService) { 92c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah sQService = new QService(); 93bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah sp<IServiceManager> sm = defaultServiceManager(); 94bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah sm->addService(String16("display.qservice"), sQService); 95bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah if(sm->checkService(String16("display.qservice")) != NULL) 96bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah ALOGD_IF(QSERVICE_DEBUG, "adding display.qservice succeeded"); 97bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah else 98bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah ALOGD_IF(QSERVICE_DEBUG, "adding display.qservice failed"); 99bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah } 100bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah} 101bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah 102bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah} 103