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