1 /*
2 * Copyright (c) 2024 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 "display_ffi.h"
17
18 #include "cj_display_impl.h"
19 #include "cj_display_manager.h"
20 #include "ffi_remote_data.h"
21 #include "window_manager_hilog.h"
22
23 using namespace OHOS::FFI;
24
25 namespace OHOS {
26 namespace Rosen {
27 extern "C" {
28 const int32_t DM_ERROR_SYSTEM_INNORMAL = 1400003;
29
FfiOHOSGetDefaultDisplaySync()30 RetStruct FfiOHOSGetDefaultDisplaySync()
31 {
32 TLOGI(WmsLogTag::DMS, "FfiOHOSGetDefaultDisplaySync start");
33 return CJDisplayManager::GetDefaultDisplaySync();
34 }
35
FfiOHOSGetAllDisplays()36 RetStruct FfiOHOSGetAllDisplays()
37 {
38 TLOGI(WmsLogTag::DMS, "FfiOHOSGetAllDisplays start");
39 return CJDisplayManager::GetAllDisplays();
40 }
41
FfiOHOSHasPrivateWindow(uint32_t displayId)42 RetStruct FfiOHOSHasPrivateWindow(uint32_t displayId)
43 {
44 TLOGI(WmsLogTag::DMS, "FfiOHOSHasPrivateWindow start");
45 return CJDisplayManager::HasPrivateWindow(displayId);
46 }
47
FfiOHOSIsFoldable()48 bool FfiOHOSIsFoldable()
49 {
50 TLOGI(WmsLogTag::DMS, "FfiOHOSIsFoldable start");
51 return CJDisplayManager::IsFoldable();
52 }
53
FfiOHOSSetFoldDisplayMode(uint32_t mode)54 void FfiOHOSSetFoldDisplayMode(uint32_t mode)
55 {
56 TLOGI(WmsLogTag::DMS, "FfiOHOSSetFoldDisplayMode start");
57 CJDisplayManager::SetFoldDisplayMode(mode);
58 }
59
FfiOHOSGetFoldStatus()60 uint32_t FfiOHOSGetFoldStatus()
61 {
62 TLOGI(WmsLogTag::DMS, "FfiOHOSGetFoldStatus start");
63 return CJDisplayManager::GetFoldStatus();
64 }
65
FfiOHOSGetFoldDisplayMode()66 uint32_t FfiOHOSGetFoldDisplayMode()
67 {
68 TLOGI(WmsLogTag::DMS, "FfiOHOSGetFoldDisplayMode start");
69 return CJDisplayManager::GetFoldDisplayMode();
70 }
71
FfiOHOSGetCurrentFoldCreaseRegion()72 RetStruct FfiOHOSGetCurrentFoldCreaseRegion()
73 {
74 TLOGI(WmsLogTag::DMS, "FfiOHOSGetCurrentFoldCreaseRegion start");
75 return CJDisplayManager::GetCurrentFoldCreaseRegion();
76 }
77
FfiOHOSIsCaptured()78 bool FfiOHOSIsCaptured()
79 {
80 TLOGD(WmsLogTag::DMS, "FfiOHOSIsCaptured start");
81 return CJDisplayManager::IsCaptured();
82 }
83
FfiOHOSGetAllDisplayPhysicalResolution()84 RetStruct FfiOHOSGetAllDisplayPhysicalResolution()
85 {
86 TLOGD(WmsLogTag::DMS, "FfiOHOSGetAllDisplayPhysicalResolution start");
87 return CJDisplayManager::GetAllDisplayPhysicalResolution();
88 }
89
FfiOHOSUnRegisterAllDisplayManagerCallback(const char * type)90 int32_t FfiOHOSUnRegisterAllDisplayManagerCallback(const char* type)
91 {
92 TLOGD(WmsLogTag::DMS, "FfiOHOSUnRegisterAllDisplayManagerCallback start");
93 return CJDisplayManager::OnUnregisterAllDisplayListenerWithType(type);
94 }
95
FfiOHOSRegisterDisplayManagerCallback(const char * type,int64_t callbackId)96 int32_t FfiOHOSRegisterDisplayManagerCallback(const char* type, int64_t callbackId)
97 {
98 TLOGD(WmsLogTag::DMS, "FfiOHOSRegisterDisplayManagerCallback start");
99 return CJDisplayManager::OnRegisterDisplayListenerWithType(type, callbackId);
100 }
101
FfiOHOSUnRegisterDisplayManagerCallback(const char * type,int64_t callbackId)102 int32_t FfiOHOSUnRegisterDisplayManagerCallback(const char* type, int64_t callbackId)
103 {
104 TLOGD(WmsLogTag::DMS, "FFiOHOSUnRegisterDisplayManagerCallback start");
105 return CJDisplayManager::OnUnRegisterDisplayListenerWithType(type, callbackId);
106 }
107
FfiOHOSDisplayGetId(int64_t id)108 uint32_t FfiOHOSDisplayGetId(int64_t id)
109 {
110 TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetId start");
111 auto instance = FFIData::GetData<DisplayImpl>(id);
112 if (!instance) {
113 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
114 return 0;
115 }
116 auto ret = instance->GetInfoId();
117 return ret;
118 }
119
FfiOHOSGetDisplayName(int64_t id)120 char* FfiOHOSGetDisplayName(int64_t id)
121 {
122 TLOGI(WmsLogTag::DMS, "FfiOHOSGetDisplayName");
123 auto instance = FFIData::GetData<DisplayImpl>(id);
124 if (!instance) {
125 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
126 return nullptr;
127 }
128 auto ret = instance->GetName();
129 return ret;
130 }
131
FfiOHOSDisplayGetAlive(int64_t id)132 bool FfiOHOSDisplayGetAlive(int64_t id)
133 {
134 TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetAlive start");
135 auto instance = FFIData::GetData<DisplayImpl>(id);
136 if (!instance) {
137 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
138 return false;
139 }
140 auto ret = instance->GetAlive();
141 return ret;
142 }
143
FfiOHOSDisplayGetState(int64_t id)144 uint32_t FfiOHOSDisplayGetState(int64_t id)
145 {
146 TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetState start");
147 auto instance = FFIData::GetData<DisplayImpl>(id);
148 if (!instance) {
149 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
150 return 0;
151 }
152 auto ret = instance->GetState();
153 return ret;
154 }
155
FfiOHOSDisplayGetRefreshRate(int64_t id)156 uint32_t FfiOHOSDisplayGetRefreshRate(int64_t id)
157 {
158 TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetRefreshRate start");
159 auto instance = FFIData::GetData<DisplayImpl>(id);
160 if (!instance) {
161 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
162 return 0;
163 }
164 auto ret = instance->GetRefreshRate();
165 return ret;
166 }
167
FfiOHOSDisplayGetRotation(int64_t id)168 uint32_t FfiOHOSDisplayGetRotation(int64_t id)
169 {
170 TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetRotation start");
171 auto instance = FFIData::GetData<DisplayImpl>(id);
172 if (!instance) {
173 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
174 return 0;
175 }
176 auto ret = instance->GetRotation();
177 return ret;
178 }
179
FfiOHOSDisplayGetOrientation(int64_t id)180 uint32_t FfiOHOSDisplayGetOrientation(int64_t id)
181 {
182 TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetOrientation start");
183 auto instance = FFIData::GetData<DisplayImpl>(id);
184 if (!instance) {
185 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
186 return 0;
187 }
188 auto ret = instance->GetOrientation();
189 return ret;
190 }
191
FfiOHOSDisplayGetWidth(int64_t id)192 int32_t FfiOHOSDisplayGetWidth(int64_t id)
193 {
194 TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetWidth start");
195 auto instance = FFIData::GetData<DisplayImpl>(id);
196 if (!instance) {
197 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
198 return 0;
199 }
200 auto ret = instance->GetWidth();
201 return ret;
202 }
203
FfiOHOSDisplayGetHeight(int64_t id)204 int32_t FfiOHOSDisplayGetHeight(int64_t id)
205 {
206 TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetHeight start");
207 auto instance = FFIData::GetData<DisplayImpl>(id);
208 if (!instance) {
209 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
210 return 0;
211 }
212 auto ret = instance->GetHeight();
213 return ret;
214 }
215
FfiOHOSDisplayGetDensityDPI(int64_t id)216 float FfiOHOSDisplayGetDensityDPI(int64_t id)
217 {
218 TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetVirtualPixelRatio start");
219 auto instance = FFIData::GetData<DisplayImpl>(id);
220 if (!instance) {
221 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
222 return 0.0;
223 }
224 auto ret = instance->GetDensityDPI();
225 return ret;
226 }
227
FfiOHOSDisplayGetVirtualPixelRatio(int64_t id)228 float FfiOHOSDisplayGetVirtualPixelRatio(int64_t id)
229 {
230 TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetVirtualPixelRatio start");
231 auto instance = FFIData::GetData<DisplayImpl>(id);
232 if (!instance) {
233 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
234 return 0.0;
235 }
236 auto ret = instance->GetVirtualPixelRatio();
237 return ret;
238 }
239
FfiOHOSDisplayGetXDPI(int64_t id)240 float FfiOHOSDisplayGetXDPI(int64_t id)
241 {
242 TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetXDPI start");
243 auto instance = FFIData::GetData<DisplayImpl>(id);
244 if (!instance) {
245 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
246 return 0.0;
247 }
248 auto ret = instance->GetXDPI();
249 return ret;
250 }
251
FfiOHOSDisplayGetYDPI(int64_t id)252 float FfiOHOSDisplayGetYDPI(int64_t id)
253 {
254 TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetYDPI start");
255 auto instance = FFIData::GetData<DisplayImpl>(id);
256 if (!instance) {
257 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
258 return 0.0;
259 }
260 auto ret = instance->GetYDPI();
261 return ret;
262 }
263
FfiOHOSDisplayGetColorSpaces(int64_t id)264 RetStruct FfiOHOSDisplayGetColorSpaces(int64_t id)
265 {
266 TLOGD(WmsLogTag::DMS, "FfiOHOSDisplayGetColorSpaces start");
267 auto instance = FFIData::GetData<DisplayImpl>(id);
268 if (!instance) {
269 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
270 return { DM_ERROR_SYSTEM_INNORMAL, 0, nullptr };
271 }
272 auto ret = instance->GetColorSpaces();
273 return ret;
274 }
275
FfiOHOSDisplayGetHdrFormats(int64_t id)276 RetStruct FfiOHOSDisplayGetHdrFormats(int64_t id)
277 {
278 TLOGD(WmsLogTag::DMS, "FfiOHOSDisplayGetHdrFormats start");
279 auto instance = FFIData::GetData<DisplayImpl>(id);
280 if (!instance) {
281 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
282 return { DM_ERROR_SYSTEM_INNORMAL, 0, nullptr };
283 }
284 auto ret = instance->GetHdrFormats();
285 return ret;
286 }
287
FfiOHOSDisplayGetAvailableWidth(int64_t id)288 uint32_t FfiOHOSDisplayGetAvailableWidth(int64_t id)
289 {
290 TLOGD(WmsLogTag::DMS, "FfiOHOSDisplayGetAvailableWidth start");
291 auto instance = FFIData::GetData<DisplayImpl>(id);
292 if (!instance) {
293 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
294 return 0.0;
295 }
296 auto ret = instance->GetAvailableWidth();
297 return ret;
298 }
299
FfiOHOSDisplayGetAvailableHeight(int64_t id)300 uint32_t FfiOHOSDisplayGetAvailableHeight(int64_t id)
301 {
302 TLOGD(WmsLogTag::DMS, "FfiOHOSDisplayGetAvailableHeight start");
303 auto instance = FFIData::GetData<DisplayImpl>(id);
304 if (!instance) {
305 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
306 return 0.0;
307 }
308 auto ret = instance->GetAvailableHeight();
309 return ret;
310 }
311
FfiOHOSDisplayGetCutoutInfo(int64_t id)312 RetStruct FfiOHOSDisplayGetCutoutInfo(int64_t id)
313 {
314 TLOGD(WmsLogTag::DMS, "FfiOHOSDisplayGetCutoutInfo start");
315 auto instance = FFIData::GetData<DisplayImpl>(id);
316 if (!instance) {
317 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
318 return { DM_ERROR_SYSTEM_INNORMAL, 0, nullptr };
319 }
320 auto ret = instance->GetCutoutInfo();
321 return ret;
322 }
323
FfiOHOSDisplayGetAvailableArea(int64_t id)324 RetStruct FfiOHOSDisplayGetAvailableArea(int64_t id)
325 {
326 TLOGD(WmsLogTag::DMS, "FfiOHOSDisplayGetAvailableArea start");
327 auto instance = FFIData::GetData<DisplayImpl>(id);
328 if (!instance) {
329 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
330 return { DM_ERROR_SYSTEM_INNORMAL, 0, nullptr };
331 }
332 auto ret = instance->GetAvailableArea();
333 return ret;
334 }
335
FfiOHOSDisplayUnRegisterAllDisplayManagerCallback(const char * type,int64_t id)336 int32_t FfiOHOSDisplayUnRegisterAllDisplayManagerCallback(const char* type, int64_t id)
337 {
338 TLOGD(WmsLogTag::DMS, "FfiOHOSDisplayUnRegisterDisplayManagerCallbackWithType start");
339 auto instance = FFIData::GetData<DisplayImpl>(id);
340 if (!instance) {
341 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
342 return DM_ERROR_SYSTEM_INNORMAL;
343 }
344 auto ret = instance->OnUnRegisterAllDisplayManagerCallback(type);
345 return ret;
346 }
347
FfiOHOSDisplayRegisterDisplayManagerCallback(const char * type,int64_t id,int64_t callbackId)348 int32_t FfiOHOSDisplayRegisterDisplayManagerCallback(const char* type, int64_t id, int64_t callbackId)
349 {
350 TLOGD(WmsLogTag::DMS, "FfiOHOSDisplayRegisterDisplayManagerCallback start");
351 auto instance = FFIData::GetData<DisplayImpl>(id);
352 if (!instance) {
353 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
354 return DM_ERROR_SYSTEM_INNORMAL;
355 }
356 auto ret = instance->OnRegisterDisplayManagerCallback(type, callbackId);
357 return ret;
358 }
359
FfiOHOSDisplayUnRegisterDisplayManagerCallback(const char * type,int64_t id,int64_t callbackId)360 int32_t FfiOHOSDisplayUnRegisterDisplayManagerCallback(const char* type, int64_t id, int64_t callbackId)
361 {
362 TLOGD(WmsLogTag::DMS, "FfiOHOSDisplayUnRegisterDisplayManagerCallback start");
363 auto instance = FFIData::GetData<DisplayImpl>(id);
364 if (!instance) {
365 TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
366 return DM_ERROR_SYSTEM_INNORMAL;
367 }
368 auto ret = instance->OnUnRegisterDisplayManagerCallback(type, callbackId);
369 return ret;
370 }
371 }
372 } // namespace Rosen
373 } // namespace OHOS
374