1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 * Copyright (C) 2012-2014, The Linux Foundation. All rights reserved.
4 *
5 * Not a Contribution, Apache license notifications and license are
6 * retained for attribution purposes only.
7
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 *      http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 */
20
21#ifndef ANDROID_IQSERVICE_H
22#define ANDROID_IQSERVICE_H
23
24#include <stdint.h>
25#include <sys/types.h>
26#include <utils/Errors.h>
27#include <utils/RefBase.h>
28#include <binder/IInterface.h>
29#include <binder/IBinder.h>
30#include <IQClient.h>
31
32
33namespace qService {
34// ----------------------------------------------------------------------------
35
36class IQService : public android::IInterface
37{
38public:
39    DECLARE_META_INTERFACE(QService);
40    enum {
41        COMMAND_LIST_START = android::IBinder::FIRST_CALL_TRANSACTION,
42        SECURING = 2,           // Hardware securing start/end notification
43        UNSECURING = 3,         // Hardware unsecuring start/end notification
44        CONNECT = 4,            // Connect to qservice
45        SCREEN_REFRESH = 5,     // Refresh screen through SF invalidate
46        EXTERNAL_ORIENTATION = 6,// Set external orientation
47        BUFFER_MIRRORMODE = 7,  // Buffer mirrormode
48        CHECK_EXTERNAL_STATUS = 8,// Check status of external display
49        GET_DISPLAY_ATTRIBUTES = 9,// Get display attributes
50        SET_HSIC_DATA = 10,     // Set HSIC on dspp
51        GET_DISPLAY_VISIBLE_REGION = 11,// Get the visibleRegion for dpy
52        SET_SECONDARY_DISPLAY_STATUS = 12,// Sets secondary display status
53        SET_MAX_PIPES_PER_MIXER = 13,// Set max pipes per mixer for MDPComp
54        SET_VIEW_FRAME = 14,    // Set view frame of display
55        DYNAMIC_DEBUG = 15,     // Enable more logging on the fly
56        SET_IDLE_TIMEOUT = 16,  // Set idle timeout for GPU fallback
57        TOGGLE_BWC = 17,           // Toggle BWC On/Off on targets that support
58        /* Enable/Disable/Set refresh rate dynamically */
59        CONFIGURE_DYN_REFRESH_RATE = 18,
60        SET_PARTIAL_UPDATE = 19,   // Preference on partial update feature
61        TOGGLE_SCREEN_UPDATE = 20, // Provides ability to disable screen updates
62        APPLY_MODE_BY_ID = 40, //Apply display mode by ID
63        COMMAND_LIST_END = 400,
64    };
65
66    enum {
67        END = 0,
68        START,
69    };
70
71    enum {
72        DEBUG_ALL,
73        DEBUG_MDPCOMP,
74        DEBUG_VSYNC,
75        DEBUG_VD,
76        DEBUG_PIPE_LIFECYCLE,
77    };
78
79    // Register a client that can be notified
80    virtual void connect(const android::sp<qClient::IQClient>& client) = 0;
81    // Generic function to dispatch binder commands
82    // The type of command decides how the data is parceled
83    virtual android::status_t dispatch(uint32_t command,
84            const android::Parcel* inParcel,
85            android::Parcel* outParcel) = 0;
86};
87
88// ----------------------------------------------------------------------------
89
90class BnQService : public android::BnInterface<IQService>
91{
92public:
93    virtual android::status_t onTransact( uint32_t code,
94                                          const android::Parcel& data,
95                                          android::Parcel* reply,
96                                          uint32_t flags = 0);
97};
98
99// ----------------------------------------------------------------------------
100}; // namespace qService
101
102#endif // ANDROID_IQSERVICE_H
103