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 #include "cj_display_impl.h"
18 #include "cj_display_manager.h"
19 #include "ffi_remote_data.h"
20 #include "window_manager_hilog.h"
21 
22 using namespace OHOS::FFI;
23 
24 namespace OHOS {
25 namespace Rosen {
26 extern "C" {
27 const int32_t DM_ERROR_SYSTEM_INNORMAL = 1400003;
28 
FfiOHOSGetDefaultDisplaySync()29 RetStruct FfiOHOSGetDefaultDisplaySync()
30 {
31     TLOGI(WmsLogTag::DMS, "FfiOHOSGetDefaultDisplaySync start");
32     return CJDisplayManager::GetDefaultDisplaySync();
33 }
34 
FfiOHOSGetAllDisplays()35 RetStruct FfiOHOSGetAllDisplays()
36 {
37     TLOGI(WmsLogTag::DMS, "FfiOHOSGetAllDisplays start");
38     return CJDisplayManager::GetAllDisplays();
39 }
40 
FfiOHOSHasPrivateWindow(uint32_t displayId)41 RetStruct FfiOHOSHasPrivateWindow(uint32_t displayId)
42 {
43     TLOGI(WmsLogTag::DMS, "FfiOHOSHasPrivateWindow start");
44     return CJDisplayManager::HasPrivateWindow(displayId);
45 }
46 
FfiOHOSIsFoldable()47 bool FfiOHOSIsFoldable()
48 {
49     TLOGI(WmsLogTag::DMS, "FfiOHOSIsFoldable start");
50     return CJDisplayManager::IsFoldable();
51 }
52 
FfiOHOSSetFoldDisplayMode(uint32_t mode)53 void FfiOHOSSetFoldDisplayMode(uint32_t mode)
54 {
55     TLOGI(WmsLogTag::DMS, "FfiOHOSSetFoldDisplayMode start");
56     CJDisplayManager::SetFoldDisplayMode(mode);
57 }
58 
FfiOHOSGetFoldStatus()59 uint32_t FfiOHOSGetFoldStatus()
60 {
61     TLOGI(WmsLogTag::DMS, "FfiOHOSGetFoldStatus start");
62     return CJDisplayManager::GetFoldStatus();
63 }
64 
FfiOHOSGetFoldDisplayMode()65 uint32_t FfiOHOSGetFoldDisplayMode()
66 {
67     TLOGI(WmsLogTag::DMS, "FfiOHOSGetFoldDisplayMode start");
68     return CJDisplayManager::GetFoldDisplayMode();
69 }
70 
FfiOHOSGetCurrentFoldCreaseRegion()71 RetStruct FfiOHOSGetCurrentFoldCreaseRegion()
72 {
73     TLOGI(WmsLogTag::DMS, "FfiOHOSGetCurrentFoldCreaseRegion start");
74     return CJDisplayManager::GetCurrentFoldCreaseRegion();
75 }
76 
FfiOHOSDisplayGetId(int64_t id)77 uint32_t FfiOHOSDisplayGetId(int64_t id)
78 {
79     TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetId start");
80     auto instance = FFIData::GetData<DisplayImpl>(id);
81     if (!instance) {
82         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
83         return 0;
84     }
85     auto ret = instance->GetInfoId();
86     return ret;
87 }
88 
FfiOHOSGetDisplayName(int64_t id)89 char* FfiOHOSGetDisplayName(int64_t id)
90 {
91     TLOGI(WmsLogTag::DMS, "FfiOHOSGetDisplayName");
92     auto instance = FFIData::GetData<DisplayImpl>(id);
93     if (!instance) {
94         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
95         return nullptr;
96     }
97     auto ret = instance->GetName();
98     return ret;
99 }
100 
FfiOHOSDisplayGetAlive(int64_t id)101 bool FfiOHOSDisplayGetAlive(int64_t id)
102 {
103     TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetAlive start");
104     auto instance = FFIData::GetData<DisplayImpl>(id);
105     if (!instance) {
106         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
107         return false;
108     }
109     auto ret = instance->GetAlive();
110     return ret;
111 }
112 
FfiOHOSDisplayGetState(int64_t id)113 uint32_t FfiOHOSDisplayGetState(int64_t id)
114 {
115     TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetState start");
116     auto instance = FFIData::GetData<DisplayImpl>(id);
117     if (!instance) {
118         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
119         return 0;
120     }
121     auto ret = instance->GetState();
122     return ret;
123 }
124 
FfiOHOSDisplayGetRefreshRate(int64_t id)125 uint32_t FfiOHOSDisplayGetRefreshRate(int64_t id)
126 {
127     TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetRefreshRate start");
128     auto instance = FFIData::GetData<DisplayImpl>(id);
129     if (!instance) {
130         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
131         return 0;
132     }
133     auto ret = instance->GetRefreshRate();
134     return ret;
135 }
136 
FfiOHOSDisplayGetRotation(int64_t id)137 uint32_t FfiOHOSDisplayGetRotation(int64_t id)
138 {
139     TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetRotation start");
140     auto instance = FFIData::GetData<DisplayImpl>(id);
141     if (!instance) {
142         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
143         return 0;
144     }
145     auto ret = instance->GetRotation();
146     return ret;
147 }
148 
FfiOHOSDisplayGetOrientation(int64_t id)149 uint32_t FfiOHOSDisplayGetOrientation(int64_t id)
150 {
151     TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetOrientation start");
152     auto instance = FFIData::GetData<DisplayImpl>(id);
153     if (!instance) {
154         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
155         return 0;
156     }
157     auto ret = instance->GetOrientation();
158     return ret;
159 }
160 
FfiOHOSDisplayGetWidth(int64_t id)161 int32_t FfiOHOSDisplayGetWidth(int64_t id)
162 {
163     TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetWidth start");
164     auto instance = FFIData::GetData<DisplayImpl>(id);
165     if (!instance) {
166         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
167         return 0;
168     }
169     auto ret = instance->GetWidth();
170     return ret;
171 }
172 
FfiOHOSDisplayGetHeight(int64_t id)173 int32_t FfiOHOSDisplayGetHeight(int64_t id)
174 {
175     TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetHeight start");
176     auto instance = FFIData::GetData<DisplayImpl>(id);
177     if (!instance) {
178         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
179         return 0;
180     }
181     auto ret = instance->GetHeight();
182     return ret;
183 }
184 
FfiOHOSDisplayGetDensityDPI(int64_t id)185 float FfiOHOSDisplayGetDensityDPI(int64_t id)
186 {
187     TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetVirtualPixelRatio start");
188     auto instance = FFIData::GetData<DisplayImpl>(id);
189     if (!instance) {
190         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
191         return 0.0;
192     }
193     auto ret = instance->GetDensityDPI();
194     return ret;
195 }
196 
FfiOHOSDisplayGetVirtualPixelRatio(int64_t id)197 float FfiOHOSDisplayGetVirtualPixelRatio(int64_t id)
198 {
199     TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetVirtualPixelRatio start");
200     auto instance = FFIData::GetData<DisplayImpl>(id);
201     if (!instance) {
202         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
203         return 0.0;
204     }
205     auto ret = instance->GetVirtualPixelRatio();
206     return ret;
207 }
208 
FfiOHOSDisplayGetXDPI(int64_t id)209 float FfiOHOSDisplayGetXDPI(int64_t id)
210 {
211     TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetXDPI start");
212     auto instance = FFIData::GetData<DisplayImpl>(id);
213     if (!instance) {
214         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
215         return 0.0;
216     }
217     auto ret = instance->GetXDPI();
218     return ret;
219 }
220 
FfiOHOSDisplayGetYDPI(int64_t id)221 float FfiOHOSDisplayGetYDPI(int64_t id)
222 {
223     TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetYDPI start");
224     auto instance = FFIData::GetData<DisplayImpl>(id);
225     if (!instance) {
226         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
227         return 0.0;
228     }
229     auto ret = instance->GetYDPI();
230     return ret;
231 }
232 
FfiOHOSDisplayGetCutoutInfo(int64_t id)233 RetStruct FfiOHOSDisplayGetCutoutInfo(int64_t id)
234 {
235     TLOGI(WmsLogTag::DMS, "FfiOHOSDisplayGetCutoutInfo start");
236     auto instance = FFIData::GetData<DisplayImpl>(id);
237     if (!instance) {
238         TLOGE(WmsLogTag::DMS, "[Display] instance not exist %{public}" PRId64, id);
239         return {DM_ERROR_SYSTEM_INNORMAL, 0, nullptr};
240     }
241     auto ret = instance->GetCutoutInfo();
242     return ret;
243 }
244 }
245 }
246 }
247