1 /*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <hdf_base.h>
17 #include "display_device_service.h"
18
19 namespace OHOS {
20 namespace Display {
21 namespace Device {
22 namespace Server {
DisplayDeviceService()23 DisplayDeviceService::DisplayDeviceService() : status_(0)
24 {
25 if (DeviceInitialize(&displayDevice_) != HDF_SUCCESS) {
26 status_ = HDF_FAILURE;
27 return;
28 }
29
30 status_ = LayerInitialize(&displayLayer_);
31 }
32
~DisplayDeviceService()33 DisplayDeviceService::~DisplayDeviceService()
34 {
35 if (displayDevice_ != nullptr) {
36 DeviceUninitialize(displayDevice_);
37 }
38 if (displayLayer_ != nullptr) {
39 LayerUninitialize(displayLayer_);
40 }
41 }
42
43 /* device proxy */
RegHotPlugCallback(HotPlugCallback callback,void * data)44 int32_t DisplayDeviceService::RegHotPlugCallback(HotPlugCallback callback, void *data)
45 {
46 return displayDevice_->RegHotPlugCallback(callback, data);
47 }
48
GetDisplayCapability(uint32_t devId,DisplayCapability & info)49 int32_t DisplayDeviceService::GetDisplayCapability(uint32_t devId, DisplayCapability &info)
50 {
51 return displayDevice_->GetDisplayCapability(devId, &info);
52 }
53
GetDisplaySupportedModes(uint32_t devId,uint32_t & num,DisplayModeInfo * modes)54 int32_t DisplayDeviceService::GetDisplaySupportedModes(uint32_t devId, uint32_t &num, DisplayModeInfo *modes)
55 {
56 return displayDevice_->GetDisplaySupportedModes(devId, &num, modes);
57 }
58
GetDisplayMode(uint32_t devId,uint32_t & modeId)59 int32_t DisplayDeviceService::GetDisplayMode(uint32_t devId, uint32_t &modeId)
60 {
61 return displayDevice_->GetDisplayMode(devId, &modeId);
62 }
63
SetDisplayMode(uint32_t devId,uint32_t modeId)64 int32_t DisplayDeviceService::SetDisplayMode(uint32_t devId, uint32_t modeId)
65 {
66 return displayDevice_->SetDisplayMode(devId, modeId);
67 }
68
GetDisplayPowerStatus(uint32_t devId,DispPowerStatus & status)69 int32_t DisplayDeviceService::GetDisplayPowerStatus(uint32_t devId, DispPowerStatus &status)
70 {
71 return displayDevice_->GetDisplayPowerStatus(devId, &status);
72 }
73
SetDisplayPowerStatus(uint32_t devId,DispPowerStatus status)74 int32_t DisplayDeviceService::SetDisplayPowerStatus(uint32_t devId, DispPowerStatus status)
75 {
76 return displayDevice_->SetDisplayPowerStatus(devId, status);
77 }
78
GetDisplayBacklight(uint32_t devId,uint32_t & level)79 int32_t DisplayDeviceService::GetDisplayBacklight(uint32_t devId, uint32_t &level)
80 {
81 return displayDevice_->GetDisplayBacklight(devId, &level);
82 }
83
SetDisplayBacklight(uint32_t devId,uint32_t level)84 int32_t DisplayDeviceService::SetDisplayBacklight(uint32_t devId, uint32_t level)
85 {
86 return displayDevice_->SetDisplayBacklight(devId, level);
87 }
88
GetDisplayProperty(uint32_t devId,uint32_t id,uint64_t & value)89 int32_t DisplayDeviceService::GetDisplayProperty(uint32_t devId, uint32_t id, uint64_t &value)
90 {
91 return displayDevice_->GetDisplayProperty(devId, id, &value);
92 }
93
SetDisplayProperty(uint32_t devId,uint32_t id,uint64_t value)94 int32_t DisplayDeviceService::SetDisplayProperty(uint32_t devId, uint32_t id, uint64_t value)
95 {
96 return displayDevice_->SetDisplayProperty(devId, id, value);
97 }
98
PrepareDisplayLayers(uint32_t devId,bool & needFlushFb)99 int32_t DisplayDeviceService::PrepareDisplayLayers(uint32_t devId, bool &needFlushFb)
100 {
101 return displayDevice_->PrepareDisplayLayers(devId, &needFlushFb);
102 }
103
GetDisplayCompChange(uint32_t devId,uint32_t & num,uint32_t * layers,int32_t * type)104 int32_t DisplayDeviceService::GetDisplayCompChange(uint32_t devId, uint32_t &num, uint32_t *layers, int32_t *type)
105 {
106 return displayDevice_->GetDisplayCompChange(devId, &num, layers, type);
107 }
108
SetDisplayClientCrop(uint32_t devId,const IRect * rect)109 int32_t DisplayDeviceService::SetDisplayClientCrop(uint32_t devId, const IRect *rect)
110 {
111 return displayDevice_->SetDisplayClientCrop(devId, const_cast<IRect *>(rect));
112 }
113
SetDisplayClientDestRect(uint32_t devId,const IRect & rect)114 int32_t DisplayDeviceService::SetDisplayClientDestRect(uint32_t devId, const IRect &rect)
115 {
116 return displayDevice_->SetDisplayClientDestRect(devId, const_cast<IRect *>(&rect));
117 }
118
SetDisplayClientBuffer(uint32_t devId,const BufferHandle & buffer,int32_t fence)119 int32_t DisplayDeviceService::SetDisplayClientBuffer(uint32_t devId, const BufferHandle &buffer, int32_t fence)
120 {
121 return displayDevice_->SetDisplayClientBuffer(devId, &buffer, fence);
122 }
123
SetDisplayClientDamage(uint32_t devId,uint32_t num,const IRect & rect)124 int32_t DisplayDeviceService::SetDisplayClientDamage(uint32_t devId, uint32_t num, const IRect &rect)
125 {
126 return displayDevice_->SetDisplayClientDamage(devId, num, const_cast<IRect *>(&rect));
127 }
128
SetDisplayVsyncEnabled(uint32_t devId,bool enabled)129 int32_t DisplayDeviceService::SetDisplayVsyncEnabled(uint32_t devId, bool enabled)
130 {
131 return displayDevice_->SetDisplayVsyncEnabled(devId, enabled);
132 }
133
RegDisplayVBlankCallback(uint32_t devId,VBlankCallback callback,void * data)134 int32_t DisplayDeviceService::RegDisplayVBlankCallback(uint32_t devId, VBlankCallback callback, void *data)
135 {
136 return displayDevice_->RegDisplayVBlankCallback(devId, callback, data);
137 }
138
GetDisplayReleaseFence(uint32_t devId,uint32_t * num,uint32_t * layers,int32_t * fences)139 int32_t DisplayDeviceService::GetDisplayReleaseFence(uint32_t devId, uint32_t *num, uint32_t *layers, int32_t *fences)
140 {
141 return displayDevice_->GetDisplayReleaseFence(devId, num, layers, fences);
142 }
143
Commit(uint32_t devId,int32_t & fence)144 int32_t DisplayDeviceService::Commit(uint32_t devId, int32_t &fence)
145 {
146 return displayDevice_->Commit(devId, &fence);
147 }
148
InvokeDisplayCmd(uint32_t devId,...)149 int32_t DisplayDeviceService::InvokeDisplayCmd(uint32_t devId, ...)
150 {
151 (void)devId;
152 return HDF_ERR_NOT_SUPPORT;
153 }
154
CreateVirtualDisplay(uint32_t width,uint32_t height,int32_t & format,uint32_t & devId)155 int32_t DisplayDeviceService::CreateVirtualDisplay(uint32_t width, uint32_t height, int32_t &format, uint32_t &devId)
156 {
157 return displayDevice_->CreateVirtualDisplay(width, height, &format, &devId);
158 }
159
DestroyVirtualDisplay(uint32_t devId)160 int32_t DisplayDeviceService::DestroyVirtualDisplay(uint32_t devId)
161 {
162 return displayDevice_->DestroyVirtualDisplay(devId);
163 }
164
SetVirtualDisplayBuffer(uint32_t devId,const BufferHandle * buffer,int32_t fence)165 int32_t DisplayDeviceService::SetVirtualDisplayBuffer(uint32_t devId, const BufferHandle *buffer, int32_t fence)
166 {
167 return displayDevice_->SetVirtualDisplayBuffer(devId, const_cast<BufferHandle *>(buffer), fence);
168 }
169
RegDisplayRefreshCallback(uint32_t devId,RefreshCallback callback,void * data)170 int32_t DisplayDeviceService::RegDisplayRefreshCallback(uint32_t devId, RefreshCallback callback, void *data)
171 {
172 if (displayDevice_->RegDisplayRefreshCallback == nullptr) {
173 return DISPLAY_NOT_SUPPORT;
174 }
175 return displayDevice_->RegDisplayRefreshCallback(devId, callback, data);
176 }
177
GetWriteBackFrame(uint32_t devId,BufferHandle & buffer,int32_t & fence)178 int32_t DisplayDeviceService::GetWriteBackFrame(uint32_t devId, BufferHandle &buffer, int32_t &fence)
179 {
180 (void)devId;
181 (void)buffer;
182 (void)fence;
183 return HDF_ERR_NOT_SUPPORT;
184 }
185
CreateWriteBack(uint32_t & devId,uint32_t width,uint32_t height,int32_t & format)186 int32_t DisplayDeviceService::CreateWriteBack(uint32_t &devId, uint32_t width, uint32_t height, int32_t &format)
187 {
188 (void)devId;
189 (void)width;
190 (void)height;
191 (void)format;
192 return HDF_ERR_NOT_SUPPORT;
193 }
194
DestroyWriteBack(uint32_t devId)195 int32_t DisplayDeviceService::DestroyWriteBack(uint32_t devId)
196 {
197 (void)devId;
198 return HDF_ERR_NOT_SUPPORT;
199 }
200
SetProxyRemoteCallback(const OHOS::sptr<DisplayRegisterCallbackBase> & callback)201 int32_t DisplayDeviceService::SetProxyRemoteCallback(const OHOS::sptr<DisplayRegisterCallbackBase> &callback)
202 {
203 (void)callback;
204 return HDF_ERR_NOT_SUPPORT;
205 }
206
207 /* layer proxy */
CreateLayer(uint32_t devId,const LayerInfo & layerInfo,uint32_t & layerId)208 int32_t DisplayDeviceService::CreateLayer(uint32_t devId, const LayerInfo &layerInfo, uint32_t &layerId)
209 {
210 return displayLayer_->CreateLayer(devId, &layerInfo, &layerId);
211 }
212
SetLayerVisible(uint32_t devId,uint32_t layerId,bool visible)213 int32_t DisplayDeviceService::SetLayerVisible(uint32_t devId, uint32_t layerId, bool visible)
214 {
215 return displayLayer_->SetLayerVisible(devId, layerId, visible);
216 }
217
GetLayerVisibleState(uint32_t devId,uint32_t layerId,bool & visible)218 int32_t DisplayDeviceService::GetLayerVisibleState(uint32_t devId, uint32_t layerId, bool &visible)
219 {
220 return displayLayer_->GetLayerVisibleState(devId, layerId, &visible);
221 }
222
SetLayerCrop(uint32_t devId,uint32_t layerId,const IRect * rect)223 int32_t DisplayDeviceService::SetLayerCrop(uint32_t devId, uint32_t layerId, const IRect *rect)
224 {
225 return displayLayer_->SetLayerCrop(devId, layerId, const_cast<IRect *>(rect));
226 }
227
SetLayerZorder(uint32_t devId,uint32_t layerId,uint32_t zorder)228 int32_t DisplayDeviceService::SetLayerZorder(uint32_t devId, uint32_t layerId, uint32_t zorder)
229 {
230 return displayLayer_->SetLayerZorder(devId, layerId, zorder);
231 }
232
GetLayerZorder(uint32_t devId,uint32_t layerId,uint32_t & zorder)233 int32_t DisplayDeviceService::GetLayerZorder(uint32_t devId, uint32_t layerId, uint32_t &zorder)
234 {
235 return displayLayer_->GetLayerZorder(devId, layerId, &zorder);
236 }
237
SetLayerPreMulti(uint32_t devId,uint32_t layerId,bool preMul)238 int32_t DisplayDeviceService::SetLayerPreMulti(uint32_t devId, uint32_t layerId, bool preMul)
239 {
240 return displayLayer_->SetLayerPreMulti(devId, layerId, preMul);
241 }
242
GetLayerPreMulti(uint32_t devId,uint32_t layerId,bool & preMul)243 int32_t DisplayDeviceService::GetLayerPreMulti(uint32_t devId, uint32_t layerId, bool &preMul)
244 {
245 return displayLayer_->GetLayerPreMulti(devId, layerId, &preMul);
246 }
247
SetLayerAlpha(uint32_t devId,uint32_t layerId,const LayerAlpha & alpha)248 int32_t DisplayDeviceService::SetLayerAlpha(uint32_t devId, uint32_t layerId, const LayerAlpha &alpha)
249 {
250 return displayLayer_->SetLayerAlpha(devId, layerId, const_cast<LayerAlpha *>(&alpha));
251 }
252
GetLayerAlpha(uint32_t devId,uint32_t layerId,LayerAlpha & alpha)253 int32_t DisplayDeviceService::GetLayerAlpha(uint32_t devId, uint32_t layerId, LayerAlpha &alpha)
254 {
255 return displayLayer_->GetLayerAlpha(devId, layerId, &alpha);
256 }
257
SetLayerColorKey(uint32_t devId,uint32_t layerId,bool enable,uint32_t key)258 int32_t DisplayDeviceService::SetLayerColorKey(uint32_t devId, uint32_t layerId, bool enable, uint32_t key)
259 {
260 return displayLayer_->SetLayerColorKey(devId, layerId, enable, key);
261 }
262
GetLayerColorKey(uint32_t devId,uint32_t layerId,bool * enable,uint32_t * key)263 int32_t DisplayDeviceService::GetLayerColorKey(uint32_t devId, uint32_t layerId, bool *enable, uint32_t *key)
264 {
265 return displayLayer_->GetLayerColorKey(devId, layerId, enable, key);
266 }
267
SetLayerPalette(uint32_t devId,uint32_t layerId,const uint32_t * palette,uint32_t len)268 int32_t DisplayDeviceService::SetLayerPalette(uint32_t devId, uint32_t layerId, const uint32_t *palette, uint32_t len)
269 {
270 return displayLayer_->SetLayerPalette(devId, layerId, const_cast<uint32_t *>(palette), len);
271 }
272
GetLayerPalette(uint32_t devId,uint32_t layerId,uint32_t & palette,uint32_t len)273 int32_t DisplayDeviceService::GetLayerPalette(uint32_t devId, uint32_t layerId, uint32_t &palette, uint32_t len)
274 {
275 return displayLayer_->GetLayerPalette(devId, layerId, &palette, len);
276 }
277
SetLayerCompression(uint32_t devId,uint32_t layerId,int32_t compType)278 int32_t DisplayDeviceService::SetLayerCompression(uint32_t devId, uint32_t layerId, int32_t compType)
279 {
280 return displayLayer_->SetLayerCompression(devId, layerId, compType);
281 }
282
GetLayerCompression(uint32_t devId,uint32_t layerId,int32_t & compType)283 int32_t DisplayDeviceService::GetLayerCompression(uint32_t devId, uint32_t layerId, int32_t &compType)
284 {
285 return displayLayer_->GetLayerCompression(devId, layerId, &compType);
286 }
287
Flush(uint32_t devId,uint32_t layerId,LayerBuffer & buffer)288 int32_t DisplayDeviceService::Flush(uint32_t devId, uint32_t layerId, LayerBuffer &buffer)
289 {
290 return displayLayer_->Flush(devId, layerId, &buffer);
291 }
292
SetLayerDirtyRegion(uint32_t devId,uint32_t layerId,uint32_t num,const IRect & region)293 int32_t DisplayDeviceService::SetLayerDirtyRegion(uint32_t devId, uint32_t layerId, uint32_t num, const IRect ®ion)
294 {
295 (void)layerId;
296 (void)num;
297 return displayLayer_->SetLayerDirtyRegion(devId, layerId, const_cast<IRect *>(®ion));
298 }
299
GetLayerBuffer(uint32_t devId,uint32_t layerId,LayerBuffer * buffer)300 int32_t DisplayDeviceService::GetLayerBuffer(uint32_t devId, uint32_t layerId, LayerBuffer *buffer)
301 {
302 return displayLayer_->GetLayerBuffer(devId, layerId, buffer);
303 }
304
SetTransformMode(uint32_t devId,uint32_t layerId,TransformType type)305 int32_t DisplayDeviceService::SetTransformMode(uint32_t devId, uint32_t layerId, TransformType type)
306 {
307 return displayLayer_->SetTransformMode(devId, layerId, type);
308 }
309
CloseLayer(uint32_t devId,uint32_t layerId)310 int32_t DisplayDeviceService::CloseLayer(uint32_t devId, uint32_t layerId)
311 {
312 return displayLayer_->CloseLayer(devId, layerId);
313 }
314
SetLayerSize(uint32_t devId,uint32_t layerId,const IRect * rect)315 int32_t DisplayDeviceService::SetLayerSize(uint32_t devId, uint32_t layerId, const IRect *rect)
316 {
317 return displayLayer_->SetLayerSize(devId, layerId, const_cast<IRect *>(rect));
318 }
319
GetLayerSize(uint32_t devId,uint32_t layerId,IRect & rect)320 int32_t DisplayDeviceService::GetLayerSize(uint32_t devId, uint32_t layerId, IRect &rect)
321 {
322 return displayLayer_->GetLayerSize(devId, layerId, &rect);
323 }
324
WaitForVBlank(uint32_t devId,uint32_t layerId,int32_t timeOut)325 int32_t DisplayDeviceService::WaitForVBlank(uint32_t devId, uint32_t layerId, int32_t timeOut)
326 {
327 return displayLayer_->WaitForVBlank(devId, layerId, timeOut);
328 }
329
InitDisplay(uint32_t devId)330 int32_t DisplayDeviceService::InitDisplay(uint32_t devId)
331 {
332 return displayLayer_->InitDisplay(devId);
333 }
334
DeinitDisplay(uint32_t devId)335 int32_t DisplayDeviceService::DeinitDisplay(uint32_t devId)
336 {
337 return displayLayer_->DeinitDisplay(devId);
338 }
339
GetDisplayInfo(uint32_t devId,DisplayInfo & dispInfo)340 int32_t DisplayDeviceService::GetDisplayInfo(uint32_t devId, DisplayInfo &dispInfo)
341 {
342 return displayLayer_->GetDisplayInfo(devId, &dispInfo);
343 }
344
SnapShot(uint32_t devId,LayerBuffer & buffer)345 int32_t DisplayDeviceService::SnapShot(uint32_t devId, LayerBuffer &buffer)
346 {
347 return displayLayer_->SnapShot(devId, &buffer);
348 }
349
SetLayerVisibleRegion(uint32_t devId,uint32_t layerId,uint32_t num,const IRect & rect)350 int32_t DisplayDeviceService::SetLayerVisibleRegion(uint32_t devId, uint32_t layerId, uint32_t num, const IRect &rect)
351 {
352 return displayLayer_->SetLayerVisibleRegion(devId, layerId, num, const_cast<IRect *>(&rect));
353 }
354
SetLayerBuffer(uint32_t devId,uint32_t layerId,const BufferHandle & buffer,int32_t fence)355 int32_t DisplayDeviceService::SetLayerBuffer(
356 uint32_t devId, uint32_t layerId, const BufferHandle &buffer, int32_t fence)
357 {
358 return displayLayer_->SetLayerBuffer(devId, layerId, &buffer, fence);
359 }
360
InvokeLayerCmd(uint32_t devId,uint32_t layerId,uint32_t cmd,...)361 int32_t DisplayDeviceService::InvokeLayerCmd(uint32_t devId, uint32_t layerId, uint32_t cmd, ...)
362 {
363 (void)devId;
364 (void)layerId;
365 (void)cmd;
366 return HDF_ERR_NOT_SUPPORT;
367 }
368
SetLayerCompositionType(uint32_t devId,uint32_t layerId,CompositionType type)369 int32_t DisplayDeviceService::SetLayerCompositionType(uint32_t devId, uint32_t layerId, CompositionType type)
370 {
371 return displayLayer_->SetLayerCompositionType(devId, layerId, type);
372 }
373
SetLayerBlendType(uint32_t devId,uint32_t layerId,BlendType type)374 int32_t DisplayDeviceService::SetLayerBlendType(uint32_t devId, uint32_t layerId, BlendType type)
375 {
376 return displayLayer_->SetLayerBlendType(devId, layerId, type);
377 }
378
IsValid()379 bool DisplayDeviceService::IsValid()
380 {
381 return status_ == HDF_SUCCESS;
382 }
383 } // namespace Server
384 } // namespace Device
385 } // namespace Display
386 } // namespace OHOS
387