12013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown/*
22013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown * Copyright (C) 2012 The Android Open Source Project
32013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown *
42013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
52013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown * you may not use this file except in compliance with the License.
62013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown * You may obtain a copy of the License at
72013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown *
82013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
92013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown *
102013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown * Unless required by applicable law or agreed to in writing, software
112013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
122013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown * See the License for the specific language governing permissions and
142013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown * limitations under the License.
152013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown */
162013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
172013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#ifndef ANDROID_IREMOTEDISPLAYCLIENT_H
182013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#define ANDROID_IREMOTEDISPLAYCLIENT_H
192013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
202013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#include <stdint.h>
212013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#include <sys/types.h>
222013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
232013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#include <utils/RefBase.h>
242013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#include <binder/IInterface.h>
252013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#include <binder/Parcel.h>
262013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
272013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brownnamespace android {
282013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
29484566c410afdfbc4b6bc5aa1732aef37428a5b8Andy McFaddenclass IGraphicBufferProducer;
302013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
312013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brownclass IRemoteDisplayClient : public IInterface
322013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown{
332013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brownpublic:
342013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    DECLARE_META_INTERFACE(RemoteDisplayClient);
352013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
362013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    enum {
372013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown        // Flag: The remote display is using a secure transport protocol such as HDCP.
382013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown        kDisplayFlagSecure = 1 << 0,
392013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    };
402013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
412013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    enum {
422013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown        // Error: An unknown / generic error occurred.
43ced24b36bbeed1ddd086a9304a9639c04ffe0962Jeff Brown        kDisplayErrorUnknown = 1,
442013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown        // Error: The connection was dropped unexpectedly.
45ced24b36bbeed1ddd086a9304a9639c04ffe0962Jeff Brown        kDisplayErrorConnectionDropped = 2,
462013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    };
472013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
482013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    // Indicates that the remote display has been connected successfully.
492013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    // Provides a surface texture that the client should use to stream buffers to
502013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    // the remote display.
51484566c410afdfbc4b6bc5aa1732aef37428a5b8Andy McFadden    virtual void onDisplayConnected(const sp<IGraphicBufferProducer>& bufferProducer,
522013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown            uint32_t width, uint32_t height, uint32_t flags) = 0; // one-way
532013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
542013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    // Indicates that the remote display has been disconnected normally.
55ced24b36bbeed1ddd086a9304a9639c04ffe0962Jeff Brown    // This method should only be called once the client has called 'dispose()'
56ced24b36bbeed1ddd086a9304a9639c04ffe0962Jeff Brown    // on the IRemoteDisplay.
572013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    // It is currently an error for the display to disconnect for any other reason.
582013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    virtual void onDisplayDisconnected() = 0; // one-way
592013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
602013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    // Indicates that a connection could not be established to the remote display
612013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    // or an unrecoverable error occurred and the connection was severed.
622013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    virtual void onDisplayError(int32_t error) = 0; // one-way
632013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown};
642013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
652013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
662013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown// ----------------------------------------------------------------------------
672013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
682013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brownclass BnRemoteDisplayClient : public BnInterface<IRemoteDisplayClient>
692013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown{
702013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brownpublic:
712013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown    virtual status_t    onTransact( uint32_t code,
722013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown                                    const Parcel& data,
732013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown                                    Parcel* reply,
742013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown                                    uint32_t flags = 0);
752013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown};
762013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
772013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown}; // namespace android
782013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown
792013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#endif // ANDROID_IREMOTEDISPLAYCLIENT_H
80