107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani/* 207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * Copyright (C) 2010 The Android Open Source Project 307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved. 407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * 507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * Not a Contribution, Apache license notifications and license are 607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * retained for attribution purposes only. 707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * Licensed under the Apache License, Version 2.0 (the "License"); 907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * you may not use this file except in compliance with the License. 1007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * You may obtain a copy of the License at 1107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * 1207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * http://www.apache.org/licenses/LICENSE-2.0 1307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * 1407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * Unless required by applicable law or agreed to in writing, software 1507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * distributed under the License is distributed on an "AS IS" BASIS, 1607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * See the License for the specific language governing permissions and 1807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * limitations under the License. 1907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani */ 2007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 2107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <sys/types.h> 2207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <binder/Parcel.h> 2307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <binder/IBinder.h> 2407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <binder/IInterface.h> 2507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <utils/Errors.h> 2607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <IQClient.h> 2707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 2807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malaniusing namespace android; 2907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 3007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani// --------------------------------------------------------------------------- 3107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani// XXX: Since qservice currently runs as part of hwc instead of a standalone 3207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani// process, the implementation below is overridden and the notifyCallback in 3307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani// hwc_qclient is directly called. 3407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 3507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malaninamespace qClient { 3607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 3707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanienum { 3807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani NOTIFY_CALLBACK = IBinder::FIRST_CALL_TRANSACTION, 3907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}; 4007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 4107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malaniclass BpQClient : public BpInterface<IQClient> 4207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{ 4307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanipublic: 4407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani BpQClient(const sp<IBinder>& impl) 4507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani : BpInterface<IQClient>(impl) {} 4607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 4707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani virtual status_t notifyCallback(uint32_t command, 4807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani const Parcel* inParcel, 4907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani Parcel* outParcel) { 5007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani Parcel data; 5107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani Parcel *reply = outParcel; 5207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani data.writeInterfaceToken(IQClient::getInterfaceDescriptor()); 5307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani data.writeInt32(command); 5407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (inParcel->dataAvail()) 5507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani data.appendFrom(inParcel, inParcel->dataPosition(), 5607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani inParcel->dataAvail()); 5707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani status_t result = remote()->transact(NOTIFY_CALLBACK, data, reply); 5807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani return result; 5907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 6007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}; 6107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 6207bbf1e89c031a5d41a7561433e832d396c311a5Prashant MalaniIMPLEMENT_META_INTERFACE(QClient, "android.display.IQClient"); 6307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 6407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani// ---------------------------------------------------------------------- 6507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani//Stub implementation - nothing needed here 6607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanistatus_t BnQClient::onTransact( 6707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 6807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{ 6907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani switch(code) { 7007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case NOTIFY_CALLBACK: { 7107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani CHECK_INTERFACE(IQClient, data, reply); 7207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani uint32_t command = data.readInt32(); 7307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani notifyCallback(command, &data, reply); 7407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani return NO_ERROR; 7507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } break; 7607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani default: 7707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani return BBinder::onTransact(code, data, reply, flags); 7807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 7907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 8007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani} 8107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 8207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}; // namespace qClient 83