IDisplayEventConnection.cpp revision 478ae5eb5a0047e1b2988c896cff6363b455ee50
1d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian/* 2d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * Copyright (C) 2011 The Android Open Source Project 3d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * 4d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * you may not use this file except in compliance with the License. 6d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * You may obtain a copy of the License at 7d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * 8d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * 10d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * Unless required by applicable law or agreed to in writing, software 11d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * See the License for the specific language governing permissions and 14d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * limitations under the License. 15d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian */ 16d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 17d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian#include <stdint.h> 18d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian#include <sys/types.h> 19d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 20d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian#include <utils/Errors.h> 21d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian#include <utils/RefBase.h> 22d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian#include <utils/Timers.h> 23d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 24d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian#include <binder/Parcel.h> 25d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian#include <binder/IInterface.h> 26d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 27d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian#include <gui/IDisplayEventConnection.h> 28d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian#include <gui/BitTube.h> 29d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 30d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopiannamespace android { 31d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian// ---------------------------------------------------------------------------- 32d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 33d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianenum { 34d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian GET_DATA_CHANNEL = IBinder::FIRST_CALL_TRANSACTION, 35478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian SET_VSYNC_RATE, 36478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian REQUEST_NEXT_VSYNC 37d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian}; 38d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 39d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianclass BpDisplayEventConnection : public BpInterface<IDisplayEventConnection> 40d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian{ 41d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianpublic: 42d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian BpDisplayEventConnection(const sp<IBinder>& impl) 43d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian : BpInterface<IDisplayEventConnection>(impl) 44d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian { 45d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } 46d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 47d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian virtual sp<BitTube> getDataChannel() const 48d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian { 49d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian Parcel data, reply; 50d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian data.writeInterfaceToken(IDisplayEventConnection::getInterfaceDescriptor()); 51d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian remote()->transact(GET_DATA_CHANNEL, data, &reply); 52d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian return new BitTube(reply); 53d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } 54478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian 55478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian virtual void setVsyncRate(uint32_t count) { 56478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian Parcel data, reply; 57478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian data.writeInterfaceToken(IDisplayEventConnection::getInterfaceDescriptor()); 58478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian data.writeInt32(count); 59478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian remote()->transact(SET_VSYNC_RATE, data, &reply); 60478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian } 61478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian 62478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian virtual void requestNextVsync() { 63478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian Parcel data, reply; 64478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian data.writeInterfaceToken(IDisplayEventConnection::getInterfaceDescriptor()); 65478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian remote()->transact(REQUEST_NEXT_VSYNC, data, &reply, IBinder::FLAG_ONEWAY); 66478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian } 67d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian}; 68d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 69d0566bc26fcf6ca396118701fa11900b627f2c09Mathias AgopianIMPLEMENT_META_INTERFACE(DisplayEventConnection, "android.gui.DisplayEventConnection"); 70d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 71d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian// ---------------------------------------------------------------------------- 72d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 73d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianstatus_t BnDisplayEventConnection::onTransact( 74d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 75d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian{ 76d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian switch(code) { 77d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian case GET_DATA_CHANNEL: { 78d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian CHECK_INTERFACE(IDisplayEventConnection, data, reply); 79d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian sp<BitTube> channel(getDataChannel()); 80d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian channel->writeToParcel(reply); 81d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian return NO_ERROR; 82d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } break; 83478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian case SET_VSYNC_RATE: { 84478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian CHECK_INTERFACE(IDisplayEventConnection, data, reply); 85478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian setVsyncRate(data.readInt32()); 86478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian return NO_ERROR; 87478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian } break; 88478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian case REQUEST_NEXT_VSYNC: { 89478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian CHECK_INTERFACE(IDisplayEventConnection, data, reply); 90478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian requestNextVsync(); 91478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian return NO_ERROR; 92478ae5eb5a0047e1b2988c896cff6363b455ee50Mathias Agopian } break; 93d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } 94d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian return BBinder::onTransact(code, data, reply, flags); 95d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian} 96d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 97d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian// ---------------------------------------------------------------------------- 98d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian}; // namespace android 99