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 &region)
294 {
295     (void)layerId;
296     (void)num;
297     return displayLayer_->SetLayerDirtyRegion(devId, layerId, const_cast<IRect *>(&region));
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