1c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah/* 2c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * Copyright (C) 2010 The Android Open Source Project 3c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved. 4c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * 5c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * Not a Contribution, Apache license notifications and license are 6c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * retained for attribution purposes only. 7c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 8c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * Licensed under the Apache License, Version 2.0 (the "License"); 9c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * you may not use this file except in compliance with the License. 10c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * You may obtain a copy of the License at 11c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * 12c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * http://www.apache.org/licenses/LICENSE-2.0 13c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * 14c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * Unless required by applicable law or agreed to in writing, software 15c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * distributed under the License is distributed on an "AS IS" BASIS, 16c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * See the License for the specific language governing permissions and 18c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah * limitations under the License. 19c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah */ 20c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 21c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah#include <sys/types.h> 22c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah#include <binder/Parcel.h> 23c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah#include <binder/IBinder.h> 24c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah#include <binder/IInterface.h> 25c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah#include <utils/Errors.h> 26c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah#include <IQClient.h> 27c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 28c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shahusing namespace android; 29c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 30c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah// --------------------------------------------------------------------------- 312299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed// XXX: Since qservice currently runs as part of hwc instead of a standalone 322299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed// process, the implementation below is overridden and the notifyCallback in 332299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed// hwc_qclient is directly called. 34c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 35c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shahnamespace qClient { 36c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 37c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shahenum { 38c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah NOTIFY_CALLBACK = IBinder::FIRST_CALL_TRANSACTION, 39c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah}; 40c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 41c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shahclass BpQClient : public BpInterface<IQClient> 42c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah{ 43c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shahpublic: 44c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah BpQClient(const sp<IBinder>& impl) 45c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah : BpInterface<IQClient>(impl) {} 46c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 472299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed virtual status_t notifyCallback(uint32_t command, 482299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed const Parcel* inParcel, 492299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed Parcel* outParcel) { 502299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed Parcel data; 512299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed Parcel *reply = outParcel; 52c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah data.writeInterfaceToken(IQClient::getInterfaceDescriptor()); 532299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed data.writeInt32(command); 542299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed if (inParcel->dataAvail()) 552299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed data.appendFrom(inParcel, inParcel->dataPosition(), 562299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed inParcel->dataAvail()); 572299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed status_t result = remote()->transact(NOTIFY_CALLBACK, data, reply); 58966a6ae6cc5b8c8ee4dd2f299a230113fc4b2b26Jeykumar Sankaran return result; 59c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah } 60c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah}; 61c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 62c59c27830019a78f668f6fb2e9518483587ce098Saurabh ShahIMPLEMENT_META_INTERFACE(QClient, "android.display.IQClient"); 63c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 64c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah// ---------------------------------------------------------------------- 652299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed//Stub implementation - nothing needed here 66c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shahstatus_t BnQClient::onTransact( 67c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 68c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah{ 69c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah switch(code) { 70c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah case NOTIFY_CALLBACK: { 71c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah CHECK_INTERFACE(IQClient, data, reply); 722299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed uint32_t command = data.readInt32(); 732299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed notifyCallback(command, &data, reply); 74c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah return NO_ERROR; 75c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah } break; 76c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah default: 77c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah return BBinder::onTransact(code, data, reply, flags); 78c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah } 792299e93cfd2fbf8d0ea59e27e775e9baa27bf04aNaseer Ahmed 80c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah} 81c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah 82c59c27830019a78f668f6fb2e9518483587ce098Saurabh Shah}; // namespace qClient 83