2 // Copyright (c) 2017 Intel Corporation
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
17 #include "hwcserviceapi.h"
19 #include "icontrols.h"
22 #include <binder/IServiceManager.h>
23 #include <binder/ProcessState.h>
25 #include <utils/RefBase.h>
26 #include <utils/String8.h>
29 using namespace android;
31 using namespace hwcomposer;
35 sp<IService> mHwcService;
36 sp<IControls> mControls;
39 HWCSHANDLE HwcService_Connect() {
41 ->startThreadPool(); // Required for starting binder threads
44 context.mHwcService = interface_cast<IService>(
45 defaultServiceManager()->getService(String16(IA_HWC_SERVICE_NAME)));
46 if (context.mHwcService == NULL) {
50 context.mControls = context.mHwcService->GetControls();
51 if (context.mControls == NULL) {
55 return new HwcsContext(context);
58 void HwcService_Disconnect(HWCSHANDLE hwcs) {
60 delete static_cast<HwcsContext*>(hwcs);
64 const char* HwcService_GetHwcVersion(HWCSHANDLE hwcs) {
65 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
70 static String8 version = pContext->mHwcService->GetHwcVersion();
71 if (version.length() == 0) {
77 status_t HwcService_Display_SetOverscan(HWCSHANDLE hwcs, uint32_t display,
78 int32_t xoverscan, int32_t yoverscan) {
79 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
81 return android::BAD_VALUE;
83 return pContext->mControls->DisplaySetOverscan(display, xoverscan, yoverscan);
86 status_t HwcService_Display_GetOverscan(HWCSHANDLE hwcs, uint32_t display,
89 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
91 return android::BAD_VALUE;
93 return pContext->mControls->DisplayGetOverscan(display, xoverscan, yoverscan);
96 status_t HwcService_Display_SetScaling(HWCSHANDLE hwcs, uint32_t display,
97 EHwcsScalingMode eScalingMode) {
98 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
100 return android::BAD_VALUE;
102 return pContext->mControls->DisplaySetScaling(display, eScalingMode);
105 status_t HwcService_Display_GetScaling(HWCSHANDLE hwcs, uint32_t display,
106 EHwcsScalingMode* eScalingMode) {
107 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
109 return android::BAD_VALUE;
111 return pContext->mControls->DisplayGetScaling(display, eScalingMode);
114 status_t HwcService_Display_EnableBlank(HWCSHANDLE hwcs, uint32_t display,
116 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
118 return android::BAD_VALUE;
120 return pContext->mControls->DisplayEnableBlank(display, blank);
123 status_t HwcService_Display_RestoreDefaultColorParam(HWCSHANDLE hwcs,
125 EHwcsColorControl color) {
126 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
128 return android::BAD_VALUE;
130 return pContext->mControls->DisplayRestoreDefaultColorParam(display, color);
133 status_t HwcService_Display_RestoreDefaultDeinterlaceParam(HWCSHANDLE hwcs,
135 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
137 return android::BAD_VALUE;
139 return pContext->mControls->DisplayRestoreDefaultDeinterlaceParam(display);
142 status_t HwcService_Display_GetColorParam(HWCSHANDLE hwcs, uint32_t display,
143 EHwcsColorControl color, float* value,
144 float* startvalue, float* endvalue) {
145 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
147 return android::BAD_VALUE;
149 return pContext->mControls->DisplayGetColorParam(display, color, value,
150 startvalue, endvalue);
153 status_t HwcService_Display_SetColorParam(HWCSHANDLE hwcs, uint32_t display,
154 EHwcsColorControl color,
156 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
158 return android::BAD_VALUE;
160 return pContext->mControls->DisplaySetColorParam(display, color, value);
163 status_t HwcService_Display_SetDeinterlaceParam(HWCSHANDLE hwcs,
166 EHwcsDeinterlaceControl de_mode;
170 de_mode = HWCS_DEINTERLACE_NONE;
173 de_mode = HWCS_DEINTERLACE_BOB;
176 de_mode = HWCS_DEINTERLACE_WEAVE;
179 de_mode = HWCS_DEINTERLACE_MOTIONADAPTIVE;
182 de_mode = HWCS_DEINTERLACE_MOTIONCOMPENSATED;
185 de_mode = HWCS_DEINTERLACE_NONE;
188 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
190 return android::BAD_VALUE;
192 return pContext->mControls->DisplaySetDeinterlaceParam(display, de_mode);
195 status_t HwcService_DisplayMode_GetAvailableModes(
196 HWCSHANDLE hwcs, uint32_t display,
197 std::vector<HwcsDisplayModeInfo>& pModeList) {
198 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
200 return android::BAD_VALUE;
202 pModeList = pContext->mControls->DisplayModeGetAvailableModes(display);
206 status_t HwcService_DisplayMode_GetMode(HWCSHANDLE hwcs, uint32_t display,
207 HwcsDisplayModeInfo* pMode) {
208 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
210 return android::BAD_VALUE;
212 return pContext->mControls->DisplayModeGetMode(display, pMode);
215 status_t HwcService_DisplayMode_SetMode(HWCSHANDLE hwcs, uint32_t display,
216 const uint32_t config) {
217 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
219 return android::BAD_VALUE;
221 return pContext->mControls->DisplayModeSetMode(display, config);
224 status_t HwcService_Video_EnableHDCPSession_ForDisplay(
225 HWCSHANDLE hwcs, uint32_t connector, EHwcsContentType content_type) {
226 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
228 return android::BAD_VALUE;
231 return pContext->mControls->EnableHDCPSessionForDisplay(connector,
235 status_t HwcService_Video_EnableHDCPSession_AllDisplays(
236 HWCSHANDLE hwcs, EHwcsContentType content_type) {
237 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
239 return android::BAD_VALUE;
242 return pContext->mControls->EnableHDCPSessionForAllDisplays(content_type);
245 status_t HwcService_Video_SetHDCPSRM_AllDisplays(HWCSHANDLE hwcs,
247 uint32_t SRMLength) {
248 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
250 return android::BAD_VALUE;
253 return pContext->mControls->SetHDCPSRMForAllDisplays(SRM, SRMLength);
256 status_t HwcService_Video_SetHDCPSRM_ForDisplay(HWCSHANDLE hwcs,
259 uint32_t SRMLength) {
260 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
263 return android::BAD_VALUE;
265 return pContext->mControls->SetHDCPSRMForDisplay(connector, SRM, SRMLength);
268 status_t HwcService_Video_DisableHDCPSession_ForDisplay(HWCSHANDLE hwcs,
269 uint32_t connector) {
270 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
272 return android::BAD_VALUE;
275 return pContext->mControls->DisableHDCPSessionForDisplay(connector);
278 uint32_t HwcService_GetDisplayIDFromConnectorID(HWCSHANDLE hwcs,
279 uint32_t connector_id) {
280 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
282 return android::BAD_VALUE;
285 return pContext->mControls->GetDisplayIDFromConnectorID(connector_id);
288 status_t HwcService_EnableDRMCommit(HWCSHANDLE hwcs, uint32_t enable,
289 uint32_t display_id) {
290 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
292 return android::BAD_VALUE;
295 return pContext->mControls->EnableDRMCommit(enable, display_id);
298 status_t HwcService_Video_DisableHDCPSession_AllDisplays(HWCSHANDLE hwcs) {
299 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
301 return android::BAD_VALUE;
304 return pContext->mControls->DisableHDCPSessionForAllDisplays();
307 status_t HwcService_Video_EnableEncryptedSession(HWCSHANDLE hwcs,
309 uint32_t instanceID) {
310 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
312 return android::BAD_VALUE;
314 return pContext->mControls->VideoEnableEncryptedSession(sessionID,
318 status_t HwcService_Video_DisableEncryptedSession(HWCSHANDLE hwcs,
319 uint32_t sessionID) {
320 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
322 return android::BAD_VALUE;
324 return pContext->mControls->VideoDisableAllEncryptedSessions(sessionID);
327 status_t HwcService_Video_DisableAllEncryptedSessions(HWCSHANDLE hwcs) {
328 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
330 return android::BAD_VALUE;
332 return pContext->mControls->VideoDisableAllEncryptedSessions();
335 EHwcsBool HwcService_Video_IsEncryptedSessionEnabled(HWCSHANDLE hwcs,
337 uint32_t instanceID) {
338 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
342 return pContext->mControls->VideoIsEncryptedSessionEnabled(sessionID,
348 status_t HwcService_Video_SetOptimizationMode(HWCSHANDLE hwcs,
349 EHwcsOptimizationMode mode) {
350 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
352 return android::BAD_VALUE;
354 return pContext->mControls->VideoSetOptimizationMode(mode);
357 status_t HwcService_MDS_UpdateVideoState(HWCSHANDLE hwcs,
358 int64_t videoSessionID,
359 EHwcsBool isPrepared) {
360 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
362 return android::BAD_VALUE;
364 return pContext->mControls->MdsUpdateVideoState(videoSessionID, isPrepared);
367 status_t HwcService_MDS_UpdateVideoFPS(HWCSHANDLE hwcs, int64_t videoSessionID,
369 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
371 return android::BAD_VALUE;
373 return pContext->mControls->MdsUpdateVideoFPS(videoSessionID, fps);
376 status_t HwcService_MDS_UpdateInputState(HWCSHANDLE hwcs, EHwcsBool state) {
377 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
379 return android::BAD_VALUE;
381 return pContext->mControls->MdsUpdateInputState(state);
384 status_t HwcService_Widi_GetSingleDisplay(HWCSHANDLE hwcs, EHwcsBool* enable) {
385 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
387 return android::BAD_VALUE;
390 return android::BAD_VALUE;
392 bool bEnabled = false;
393 status_t ret = pContext->mControls->WidiGetSingleDisplay(&bEnabled);
394 *enable = bEnabled ? HWCS_TRUE : HWCS_FALSE;
398 status_t HwcService_Widi_SetSingleDisplay(HWCSHANDLE hwcs, EHwcsBool enable) {
399 HwcsContext* pContext = static_cast<HwcsContext*>(hwcs);
401 return android::BAD_VALUE;
403 return pContext->mControls->WidiSetSingleDisplay(enable);