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