1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License.
5e0dac50fSopenharmony_ci * You may obtain a copy of the License at
6e0dac50fSopenharmony_ci *
7e0dac50fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e0dac50fSopenharmony_ci *
9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and
13e0dac50fSopenharmony_ci * limitations under the License.
14e0dac50fSopenharmony_ci */
15e0dac50fSopenharmony_ci
16e0dac50fSopenharmony_ci#include "display_manager_proxy.h"
17e0dac50fSopenharmony_ci
18e0dac50fSopenharmony_ci#include <cinttypes>
19e0dac50fSopenharmony_ci#include <ipc_types.h>
20e0dac50fSopenharmony_ci#include <parcel.h>
21e0dac50fSopenharmony_ci#include <ui/rs_surface_node.h>
22e0dac50fSopenharmony_ci#include "marshalling_helper.h"
23e0dac50fSopenharmony_ci#include "window_manager_hilog.h"
24e0dac50fSopenharmony_ci
25e0dac50fSopenharmony_cinamespace OHOS::Rosen {
26e0dac50fSopenharmony_cinamespace {
27e0dac50fSopenharmony_ciconstexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_DISPLAY, "DisplayManagerProxy"};
28e0dac50fSopenharmony_ci}
29e0dac50fSopenharmony_ci
30e0dac50fSopenharmony_cisptr<DisplayInfo> DisplayManagerProxy::GetDefaultDisplayInfo()
31e0dac50fSopenharmony_ci{
32e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
33e0dac50fSopenharmony_ci    if (remote == nullptr) {
34e0dac50fSopenharmony_ci        WLOGFW("GetDefaultDisplayInfo: remote is nullptr");
35e0dac50fSopenharmony_ci        return nullptr;
36e0dac50fSopenharmony_ci    }
37e0dac50fSopenharmony_ci
38e0dac50fSopenharmony_ci    MessageParcel data;
39e0dac50fSopenharmony_ci    MessageParcel reply;
40e0dac50fSopenharmony_ci    MessageOption option;
41e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
42e0dac50fSopenharmony_ci        WLOGFE("GetDefaultDisplayInfo: WriteInterfaceToken failed");
43e0dac50fSopenharmony_ci        return nullptr;
44e0dac50fSopenharmony_ci    }
45e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_GET_DEFAULT_DISPLAY_INFO),
46e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
47e0dac50fSopenharmony_ci        WLOGFW("GetDefaultDisplayInfo: SendRequest failed");
48e0dac50fSopenharmony_ci        return nullptr;
49e0dac50fSopenharmony_ci    }
50e0dac50fSopenharmony_ci    sptr<DisplayInfo> info = reply.ReadParcelable<DisplayInfo>();
51e0dac50fSopenharmony_ci    if (info == nullptr) {
52e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetDefaultDisplayInfo SendRequest nullptr.");
53e0dac50fSopenharmony_ci    }
54e0dac50fSopenharmony_ci    return info;
55e0dac50fSopenharmony_ci}
56e0dac50fSopenharmony_ci
57e0dac50fSopenharmony_cisptr<DisplayInfo> DisplayManagerProxy::GetDisplayInfoById(DisplayId displayId)
58e0dac50fSopenharmony_ci{
59e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
60e0dac50fSopenharmony_ci    if (remote == nullptr) {
61e0dac50fSopenharmony_ci        WLOGFW("GetDisplayInfoById: remote is nullptr");
62e0dac50fSopenharmony_ci        return nullptr;
63e0dac50fSopenharmony_ci    }
64e0dac50fSopenharmony_ci
65e0dac50fSopenharmony_ci    MessageParcel data;
66e0dac50fSopenharmony_ci    MessageParcel reply;
67e0dac50fSopenharmony_ci    MessageOption option;
68e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
69e0dac50fSopenharmony_ci        WLOGFE("GetDisplayInfoById: WriteInterfaceToken failed");
70e0dac50fSopenharmony_ci        return nullptr;
71e0dac50fSopenharmony_ci    }
72e0dac50fSopenharmony_ci    if (!data.WriteUint64(displayId)) {
73e0dac50fSopenharmony_ci        WLOGFW("GetDisplayInfoById: WriteUint64 displayId failed");
74e0dac50fSopenharmony_ci        return nullptr;
75e0dac50fSopenharmony_ci    }
76e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_GET_DISPLAY_BY_ID),
77e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
78e0dac50fSopenharmony_ci        WLOGFW("GetDisplayInfoById: SendRequest failed");
79e0dac50fSopenharmony_ci        return nullptr;
80e0dac50fSopenharmony_ci    }
81e0dac50fSopenharmony_ci
82e0dac50fSopenharmony_ci    sptr<DisplayInfo> info = reply.ReadParcelable<DisplayInfo>();
83e0dac50fSopenharmony_ci    if (info == nullptr) {
84e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetDisplayInfoById SendRequest nullptr.");
85e0dac50fSopenharmony_ci        return nullptr;
86e0dac50fSopenharmony_ci    }
87e0dac50fSopenharmony_ci    return info;
88e0dac50fSopenharmony_ci}
89e0dac50fSopenharmony_ci
90e0dac50fSopenharmony_cisptr<DisplayInfo> DisplayManagerProxy::GetDisplayInfoByScreen(ScreenId screenId)
91e0dac50fSopenharmony_ci{
92e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
93e0dac50fSopenharmony_ci    if (remote == nullptr) {
94e0dac50fSopenharmony_ci        WLOGFE("fail to get displayInfo by screenId: remote is null");
95e0dac50fSopenharmony_ci        return nullptr;
96e0dac50fSopenharmony_ci    }
97e0dac50fSopenharmony_ci
98e0dac50fSopenharmony_ci    MessageParcel data;
99e0dac50fSopenharmony_ci    MessageParcel reply;
100e0dac50fSopenharmony_ci    MessageOption option;
101e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
102e0dac50fSopenharmony_ci        WLOGFE("fail to get displayInfo by screenId: WriteInterfaceToken failed");
103e0dac50fSopenharmony_ci        return nullptr;
104e0dac50fSopenharmony_ci    }
105e0dac50fSopenharmony_ci    if (!data.WriteUint64(screenId)) {
106e0dac50fSopenharmony_ci        WLOGFW("fail to get displayInfo by screenId: WriteUint64 displayId failed");
107e0dac50fSopenharmony_ci        return nullptr;
108e0dac50fSopenharmony_ci    }
109e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_GET_DISPLAY_BY_SCREEN),
110e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
111e0dac50fSopenharmony_ci        WLOGFW("fail to get displayInfo by screenId: SendRequest failed");
112e0dac50fSopenharmony_ci        return nullptr;
113e0dac50fSopenharmony_ci    }
114e0dac50fSopenharmony_ci
115e0dac50fSopenharmony_ci    sptr<DisplayInfo> info = reply.ReadParcelable<DisplayInfo>();
116e0dac50fSopenharmony_ci    if (info == nullptr) {
117e0dac50fSopenharmony_ci        WLOGFW("fail to get displayInfo by screenId: SendRequest null");
118e0dac50fSopenharmony_ci        return nullptr;
119e0dac50fSopenharmony_ci    }
120e0dac50fSopenharmony_ci    return info;
121e0dac50fSopenharmony_ci}
122e0dac50fSopenharmony_ci
123e0dac50fSopenharmony_ciScreenId DisplayManagerProxy::CreateVirtualScreen(VirtualScreenOption virtualOption,
124e0dac50fSopenharmony_ci    const sptr<IRemoteObject>& displayManagerAgent)
125e0dac50fSopenharmony_ci{
126e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
127e0dac50fSopenharmony_ci    if (remote == nullptr) {
128e0dac50fSopenharmony_ci        WLOGFW("CreateVirtualScreen: remote is nullptr");
129e0dac50fSopenharmony_ci        return SCREEN_ID_INVALID;
130e0dac50fSopenharmony_ci    }
131e0dac50fSopenharmony_ci
132e0dac50fSopenharmony_ci    MessageParcel data;
133e0dac50fSopenharmony_ci    MessageParcel reply;
134e0dac50fSopenharmony_ci    MessageOption option;
135e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
136e0dac50fSopenharmony_ci        WLOGFE("CreateVirtualScreen: WriteInterfaceToken failed");
137e0dac50fSopenharmony_ci        return SCREEN_ID_INVALID;
138e0dac50fSopenharmony_ci    }
139e0dac50fSopenharmony_ci    bool res = data.WriteString(virtualOption.name_) && data.WriteUint32(virtualOption.width_) &&
140e0dac50fSopenharmony_ci        data.WriteUint32(virtualOption.height_) && data.WriteFloat(virtualOption.density_) &&
141e0dac50fSopenharmony_ci        data.WriteInt32(virtualOption.flags_) && data.WriteBool(virtualOption.isForShot_) &&
142e0dac50fSopenharmony_ci        data.WriteUInt64Vector(virtualOption.missionIds_);
143e0dac50fSopenharmony_ci    if (virtualOption.surface_ != nullptr && virtualOption.surface_->GetProducer() != nullptr) {
144e0dac50fSopenharmony_ci        res = res &&
145e0dac50fSopenharmony_ci            data.WriteBool(true) &&
146e0dac50fSopenharmony_ci            data.WriteRemoteObject(virtualOption.surface_->GetProducer()->AsObject());
147e0dac50fSopenharmony_ci    } else {
148e0dac50fSopenharmony_ci        WLOGFW("CreateVirtualScreen: surface is nullptr");
149e0dac50fSopenharmony_ci        res = res && data.WriteBool(false);
150e0dac50fSopenharmony_ci    }
151e0dac50fSopenharmony_ci    if (displayManagerAgent != nullptr) {
152e0dac50fSopenharmony_ci        res = res &&
153e0dac50fSopenharmony_ci            data.WriteRemoteObject(displayManagerAgent);
154e0dac50fSopenharmony_ci    }
155e0dac50fSopenharmony_ci    if (!res) {
156e0dac50fSopenharmony_ci        WLOGFE("Write data failed");
157e0dac50fSopenharmony_ci        return SCREEN_ID_INVALID;
158e0dac50fSopenharmony_ci    }
159e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_CREATE_VIRTUAL_SCREEN),
160e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
161e0dac50fSopenharmony_ci        WLOGFW("CreateVirtualScreen: SendRequest failed");
162e0dac50fSopenharmony_ci        return SCREEN_ID_INVALID;
163e0dac50fSopenharmony_ci    }
164e0dac50fSopenharmony_ci
165e0dac50fSopenharmony_ci    ScreenId screenId = static_cast<ScreenId>(reply.ReadUint64());
166e0dac50fSopenharmony_ci    WLOGFI("CreateVirtualScreen %" PRIu64"", screenId);
167e0dac50fSopenharmony_ci    return screenId;
168e0dac50fSopenharmony_ci}
169e0dac50fSopenharmony_ci
170e0dac50fSopenharmony_ciDMError DisplayManagerProxy::DestroyVirtualScreen(ScreenId screenId)
171e0dac50fSopenharmony_ci{
172e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
173e0dac50fSopenharmony_ci    if (remote == nullptr) {
174e0dac50fSopenharmony_ci        WLOGFW("DestroyVirtualScreen: remote is nullptr");
175e0dac50fSopenharmony_ci        return DMError::DM_ERROR_REMOTE_CREATE_FAILED;
176e0dac50fSopenharmony_ci    }
177e0dac50fSopenharmony_ci
178e0dac50fSopenharmony_ci    MessageParcel data;
179e0dac50fSopenharmony_ci    MessageParcel reply;
180e0dac50fSopenharmony_ci    MessageOption option;
181e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
182e0dac50fSopenharmony_ci        WLOGFE("DestroyVirtualScreen: WriteInterfaceToken failed");
183e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
184e0dac50fSopenharmony_ci    }
185e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId))) {
186e0dac50fSopenharmony_ci        WLOGFW("DestroyVirtualScreen: WriteUint64 screenId failed");
187e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
188e0dac50fSopenharmony_ci    }
189e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_DESTROY_VIRTUAL_SCREEN),
190e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
191e0dac50fSopenharmony_ci        WLOGFW("DestroyVirtualScreen: SendRequest failed");
192e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
193e0dac50fSopenharmony_ci    }
194e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
195e0dac50fSopenharmony_ci}
196e0dac50fSopenharmony_ci
197e0dac50fSopenharmony_ciDMError DisplayManagerProxy::SetVirtualScreenSurface(ScreenId screenId, sptr<IBufferProducer> surface)
198e0dac50fSopenharmony_ci{
199e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
200e0dac50fSopenharmony_ci    if (remote == nullptr) {
201e0dac50fSopenharmony_ci        WLOGFW("SetVirtualScreenSurface: remote is nullptr");
202e0dac50fSopenharmony_ci        return DMError::DM_ERROR_REMOTE_CREATE_FAILED;
203e0dac50fSopenharmony_ci    }
204e0dac50fSopenharmony_ci
205e0dac50fSopenharmony_ci    MessageParcel data;
206e0dac50fSopenharmony_ci    MessageParcel reply;
207e0dac50fSopenharmony_ci    MessageOption option;
208e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
209e0dac50fSopenharmony_ci        WLOGFE("SetVirtualScreenSurface: WriteInterfaceToken failed");
210e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
211e0dac50fSopenharmony_ci    }
212e0dac50fSopenharmony_ci    bool res = data.WriteUint64(static_cast<uint64_t>(screenId));
213e0dac50fSopenharmony_ci    if (surface != nullptr) {
214e0dac50fSopenharmony_ci        res = res &&
215e0dac50fSopenharmony_ci            data.WriteBool(true) &&
216e0dac50fSopenharmony_ci            data.WriteRemoteObject(surface->AsObject());
217e0dac50fSopenharmony_ci    } else {
218e0dac50fSopenharmony_ci        WLOGFW("SetVirtualScreenSurface: surface is nullptr");
219e0dac50fSopenharmony_ci        res = res && data.WriteBool(false);
220e0dac50fSopenharmony_ci    }
221e0dac50fSopenharmony_ci    if (!res) {
222e0dac50fSopenharmony_ci        WLOGFW("SetVirtualScreenSurface: Write screenId/surface failed");
223e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
224e0dac50fSopenharmony_ci    }
225e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_VIRTUAL_SCREEN_SURFACE),
226e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
227e0dac50fSopenharmony_ci        WLOGFW("SetVirtualScreenSurface: SendRequest failed");
228e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
229e0dac50fSopenharmony_ci    }
230e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
231e0dac50fSopenharmony_ci}
232e0dac50fSopenharmony_ci
233e0dac50fSopenharmony_ciDMError DisplayManagerProxy::SetOrientation(ScreenId screenId, Orientation orientation)
234e0dac50fSopenharmony_ci{
235e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
236e0dac50fSopenharmony_ci    if (remote == nullptr) {
237e0dac50fSopenharmony_ci        WLOGFW("fail to set orientation: remote is null");
238e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
239e0dac50fSopenharmony_ci    }
240e0dac50fSopenharmony_ci
241e0dac50fSopenharmony_ci    MessageParcel data;
242e0dac50fSopenharmony_ci    MessageParcel reply;
243e0dac50fSopenharmony_ci    MessageOption option;
244e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
245e0dac50fSopenharmony_ci        WLOGFE("fail to set orientation: WriteInterfaceToken failed");
246e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
247e0dac50fSopenharmony_ci    }
248e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId))) {
249e0dac50fSopenharmony_ci        WLOGFW("fail to set orientation: Write screenId failed");
250e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
251e0dac50fSopenharmony_ci    }
252e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(orientation))) {
253e0dac50fSopenharmony_ci        WLOGFW("fail to set orientation: Write orientation failed");
254e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
255e0dac50fSopenharmony_ci    }
256e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_ORIENTATION),
257e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
258e0dac50fSopenharmony_ci        WLOGFW("fail to set orientation: SendRequest failed");
259e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
260e0dac50fSopenharmony_ci    }
261e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
262e0dac50fSopenharmony_ci}
263e0dac50fSopenharmony_ci
264e0dac50fSopenharmony_cistd::shared_ptr<Media::PixelMap> DisplayManagerProxy::GetDisplaySnapshot(DisplayId displayId, DmErrorCode* errorCode)
265e0dac50fSopenharmony_ci{
266e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
267e0dac50fSopenharmony_ci    if (remote == nullptr) {
268e0dac50fSopenharmony_ci        WLOGFW("GetDisplaySnapshot: remote is nullptr");
269e0dac50fSopenharmony_ci        return nullptr;
270e0dac50fSopenharmony_ci    }
271e0dac50fSopenharmony_ci
272e0dac50fSopenharmony_ci    MessageParcel data;
273e0dac50fSopenharmony_ci    MessageParcel reply;
274e0dac50fSopenharmony_ci    MessageOption option;
275e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
276e0dac50fSopenharmony_ci        WLOGFE("GetDisplaySnapshot: WriteInterfaceToken failed");
277e0dac50fSopenharmony_ci        return nullptr;
278e0dac50fSopenharmony_ci    }
279e0dac50fSopenharmony_ci
280e0dac50fSopenharmony_ci    if (!data.WriteUint64(displayId)) {
281e0dac50fSopenharmony_ci        WLOGFE("Write displayId failed");
282e0dac50fSopenharmony_ci        return nullptr;
283e0dac50fSopenharmony_ci    }
284e0dac50fSopenharmony_ci
285e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_GET_DISPLAY_SNAPSHOT),
286e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
287e0dac50fSopenharmony_ci        WLOGFW("GetDisplaySnapshot: SendRequest failed");
288e0dac50fSopenharmony_ci        return nullptr;
289e0dac50fSopenharmony_ci    }
290e0dac50fSopenharmony_ci
291e0dac50fSopenharmony_ci    std::shared_ptr<Media::PixelMap> pixelMap(reply.ReadParcelable<Media::PixelMap>());
292e0dac50fSopenharmony_ci    DmErrorCode replyErrorCode = static_cast<DmErrorCode>(reply.ReadInt32());
293e0dac50fSopenharmony_ci    if (errorCode) {
294e0dac50fSopenharmony_ci        *errorCode = replyErrorCode;
295e0dac50fSopenharmony_ci    }
296e0dac50fSopenharmony_ci    if (pixelMap == nullptr) {
297e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetDisplaySnapshot SendRequest nullptr.");
298e0dac50fSopenharmony_ci        return nullptr;
299e0dac50fSopenharmony_ci    }
300e0dac50fSopenharmony_ci    return pixelMap;
301e0dac50fSopenharmony_ci}
302e0dac50fSopenharmony_ci
303e0dac50fSopenharmony_ciDMError DisplayManagerProxy::GetScreenSupportedColorGamuts(ScreenId screenId,
304e0dac50fSopenharmony_ci    std::vector<ScreenColorGamut>& colorGamuts)
305e0dac50fSopenharmony_ci{
306e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
307e0dac50fSopenharmony_ci    if (remote == nullptr) {
308e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetScreenSupportedColorGamuts: remote is nullptr");
309e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
310e0dac50fSopenharmony_ci    }
311e0dac50fSopenharmony_ci
312e0dac50fSopenharmony_ci    MessageParcel data;
313e0dac50fSopenharmony_ci    MessageParcel reply;
314e0dac50fSopenharmony_ci    MessageOption option;
315e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
316e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetScreenSupportedColorGamuts: WriteInterfaceToken failed");
317e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
318e0dac50fSopenharmony_ci    }
319e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId))) {
320e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetScreenSupportedColorGamuts: WriteUint64 screenId failed");
321e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
322e0dac50fSopenharmony_ci    }
323e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_GET_SUPPORTED_COLOR_GAMUTS),
324e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
325e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetScreenSupportedColorGamuts: SendRequest failed");
326e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
327e0dac50fSopenharmony_ci    }
328e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadInt32());
329e0dac50fSopenharmony_ci    if (ret != DMError::DM_OK) {
330e0dac50fSopenharmony_ci        return ret;
331e0dac50fSopenharmony_ci    }
332e0dac50fSopenharmony_ci    MarshallingHelper::UnmarshallingVectorObj<ScreenColorGamut>(reply, colorGamuts,
333e0dac50fSopenharmony_ci        [](Parcel& parcel, ScreenColorGamut& color) {
334e0dac50fSopenharmony_ci            uint32_t value;
335e0dac50fSopenharmony_ci            bool res = parcel.ReadUint32(value);
336e0dac50fSopenharmony_ci            color = static_cast<ScreenColorGamut>(value);
337e0dac50fSopenharmony_ci            return res;
338e0dac50fSopenharmony_ci        }
339e0dac50fSopenharmony_ci    );
340e0dac50fSopenharmony_ci    return ret;
341e0dac50fSopenharmony_ci}
342e0dac50fSopenharmony_ci
343e0dac50fSopenharmony_ciDMError DisplayManagerProxy::GetScreenColorGamut(ScreenId screenId, ScreenColorGamut& colorGamut)
344e0dac50fSopenharmony_ci{
345e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
346e0dac50fSopenharmony_ci    if (remote == nullptr) {
347e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetScreenColorGamut: remote is nullptr");
348e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
349e0dac50fSopenharmony_ci    }
350e0dac50fSopenharmony_ci
351e0dac50fSopenharmony_ci    MessageParcel data;
352e0dac50fSopenharmony_ci    MessageParcel reply;
353e0dac50fSopenharmony_ci    MessageOption option;
354e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
355e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetScreenColorGamut: WriteInterfaceToken failed");
356e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
357e0dac50fSopenharmony_ci    }
358e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId))) {
359e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetScreenColorGamut: WriteUint64 uint64_t failed");
360e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
361e0dac50fSopenharmony_ci    }
362e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_GET_COLOR_GAMUT),
363e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
364e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetScreenColorGamut: SendRequest failed");
365e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
366e0dac50fSopenharmony_ci    }
367e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadInt32());
368e0dac50fSopenharmony_ci    if (ret != DMError::DM_OK) {
369e0dac50fSopenharmony_ci        return ret;
370e0dac50fSopenharmony_ci    }
371e0dac50fSopenharmony_ci    colorGamut = static_cast<ScreenColorGamut>(reply.ReadUint32());
372e0dac50fSopenharmony_ci    return ret;
373e0dac50fSopenharmony_ci}
374e0dac50fSopenharmony_ci
375e0dac50fSopenharmony_ciDMError DisplayManagerProxy::SetScreenColorGamut(ScreenId screenId, int32_t colorGamutIdx)
376e0dac50fSopenharmony_ci{
377e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
378e0dac50fSopenharmony_ci    if (remote == nullptr) {
379e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::SetScreenColorGamut: remote is nullptr");
380e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
381e0dac50fSopenharmony_ci    }
382e0dac50fSopenharmony_ci
383e0dac50fSopenharmony_ci    MessageParcel data;
384e0dac50fSopenharmony_ci    MessageParcel reply;
385e0dac50fSopenharmony_ci    MessageOption option;
386e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
387e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::SetScreenColorGamut: WriteInterfaceToken failed");
388e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
389e0dac50fSopenharmony_ci    }
390e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId)) || !data.WriteInt32(colorGamutIdx)) {
391e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::SetScreenColorGamut: Write failed");
392e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
393e0dac50fSopenharmony_ci    }
394e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_SET_COLOR_GAMUT),
395e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
396e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::SetScreenColorGamut: SendRequest failed");
397e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
398e0dac50fSopenharmony_ci    }
399e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
400e0dac50fSopenharmony_ci}
401e0dac50fSopenharmony_ci
402e0dac50fSopenharmony_ciDMError DisplayManagerProxy::GetScreenGamutMap(ScreenId screenId, ScreenGamutMap& gamutMap)
403e0dac50fSopenharmony_ci{
404e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
405e0dac50fSopenharmony_ci    if (remote == nullptr) {
406e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetScreenGamutMap: remote is nullptr");
407e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
408e0dac50fSopenharmony_ci    }
409e0dac50fSopenharmony_ci
410e0dac50fSopenharmony_ci    MessageParcel data;
411e0dac50fSopenharmony_ci    MessageParcel reply;
412e0dac50fSopenharmony_ci    MessageOption option;
413e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
414e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetScreenGamutMap: WriteInterfaceToken failed");
415e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
416e0dac50fSopenharmony_ci    }
417e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId))) {
418e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetScreenGamutMap: WriteUint64 screenId failed");
419e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
420e0dac50fSopenharmony_ci    }
421e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_GET_GAMUT_MAP),
422e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
423e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::GetScreenGamutMap: SendRequest failed");
424e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
425e0dac50fSopenharmony_ci    }
426e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadInt32());
427e0dac50fSopenharmony_ci    if (ret != DMError::DM_OK) {
428e0dac50fSopenharmony_ci        return ret;
429e0dac50fSopenharmony_ci    }
430e0dac50fSopenharmony_ci    gamutMap = static_cast<ScreenGamutMap>(reply.ReadUint32());
431e0dac50fSopenharmony_ci    return ret;
432e0dac50fSopenharmony_ci}
433e0dac50fSopenharmony_ci
434e0dac50fSopenharmony_ciDMError DisplayManagerProxy::SetScreenGamutMap(ScreenId screenId, ScreenGamutMap gamutMap)
435e0dac50fSopenharmony_ci{
436e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
437e0dac50fSopenharmony_ci    if (remote == nullptr) {
438e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::SetScreenGamutMap: remote is nullptr");
439e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
440e0dac50fSopenharmony_ci    }
441e0dac50fSopenharmony_ci
442e0dac50fSopenharmony_ci    MessageParcel data;
443e0dac50fSopenharmony_ci    MessageParcel reply;
444e0dac50fSopenharmony_ci    MessageOption option;
445e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
446e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::SetScreenGamutMap: WriteInterfaceToken failed");
447e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
448e0dac50fSopenharmony_ci    }
449e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId)) || !data.WriteUint32(static_cast<uint32_t>(gamutMap))) {
450e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::SetScreenGamutMap: Writ failed");
451e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
452e0dac50fSopenharmony_ci    }
453e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_SET_GAMUT_MAP),
454e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
455e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::SetScreenGamutMap: SendRequest failed");
456e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
457e0dac50fSopenharmony_ci    }
458e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
459e0dac50fSopenharmony_ci}
460e0dac50fSopenharmony_ci
461e0dac50fSopenharmony_ciDMError DisplayManagerProxy::SetScreenColorTransform(ScreenId screenId)
462e0dac50fSopenharmony_ci{
463e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
464e0dac50fSopenharmony_ci    if (remote == nullptr) {
465e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::SetScreenColorTransform: remote is nullptr");
466e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
467e0dac50fSopenharmony_ci    }
468e0dac50fSopenharmony_ci
469e0dac50fSopenharmony_ci    MessageParcel data;
470e0dac50fSopenharmony_ci    MessageParcel reply;
471e0dac50fSopenharmony_ci    MessageOption option;
472e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
473e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::SetScreenColorTransform: WriteInterfaceToken failed");
474e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
475e0dac50fSopenharmony_ci    }
476e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId))) {
477e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::SetScreenColorTransform: WriteUint64 screenId failed");
478e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
479e0dac50fSopenharmony_ci    }
480e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_SET_COLOR_TRANSFORM),
481e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
482e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::SetScreenColorTransform: SendRequest failed");
483e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
484e0dac50fSopenharmony_ci    }
485e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
486e0dac50fSopenharmony_ci}
487e0dac50fSopenharmony_ci
488e0dac50fSopenharmony_ciDMError DisplayManagerProxy::GetPixelFormat(ScreenId screenId, GraphicPixelFormat& pixelFormat)
489e0dac50fSopenharmony_ci{
490e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
491e0dac50fSopenharmony_ci    if (remote == nullptr) {
492e0dac50fSopenharmony_ci        WLOGFW("GetPixelFormat: remote is nullptr");
493e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
494e0dac50fSopenharmony_ci    }
495e0dac50fSopenharmony_ci
496e0dac50fSopenharmony_ci    MessageParcel data;
497e0dac50fSopenharmony_ci    MessageParcel reply;
498e0dac50fSopenharmony_ci    MessageOption option;
499e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
500e0dac50fSopenharmony_ci        WLOGFW("GetPixelFormat: WriteInterfaceToken failed");
501e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
502e0dac50fSopenharmony_ci    }
503e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId))) {
504e0dac50fSopenharmony_ci        WLOGFW("GetPixelFormat: WriteUint64 uint64_t failed");
505e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
506e0dac50fSopenharmony_ci    }
507e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_GET_PIXEL_FORMAT),
508e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
509e0dac50fSopenharmony_ci        WLOGFW("GetPixelFormat: SendRequest failed");
510e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
511e0dac50fSopenharmony_ci    }
512e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadInt32());
513e0dac50fSopenharmony_ci    if (ret != DMError::DM_OK) {
514e0dac50fSopenharmony_ci        return ret;
515e0dac50fSopenharmony_ci    }
516e0dac50fSopenharmony_ci    pixelFormat = static_cast<GraphicPixelFormat>(reply.ReadUint32());
517e0dac50fSopenharmony_ci    return ret;
518e0dac50fSopenharmony_ci}
519e0dac50fSopenharmony_ci
520e0dac50fSopenharmony_ciDMError DisplayManagerProxy::SetPixelFormat(ScreenId screenId, GraphicPixelFormat pixelFormat)
521e0dac50fSopenharmony_ci{
522e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
523e0dac50fSopenharmony_ci    if (remote == nullptr) {
524e0dac50fSopenharmony_ci        WLOGFW("SetPixelFormat: remote is nullptr");
525e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
526e0dac50fSopenharmony_ci    }
527e0dac50fSopenharmony_ci
528e0dac50fSopenharmony_ci    MessageParcel data;
529e0dac50fSopenharmony_ci    MessageParcel reply;
530e0dac50fSopenharmony_ci    MessageOption option;
531e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
532e0dac50fSopenharmony_ci        WLOGFW("SetPixelFormat: WriteInterfaceToken failed");
533e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
534e0dac50fSopenharmony_ci    }
535e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId)) || !data.WriteInt32(pixelFormat)) {
536e0dac50fSopenharmony_ci        WLOGFW("SetPixelFormat: WriteUint64 screenId failed");
537e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
538e0dac50fSopenharmony_ci    }
539e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_SET_PIXEL_FORMAT),
540e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
541e0dac50fSopenharmony_ci        WLOGFW("SetPixelFormat: SendRequest failed");
542e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
543e0dac50fSopenharmony_ci    }
544e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
545e0dac50fSopenharmony_ci}
546e0dac50fSopenharmony_ci
547e0dac50fSopenharmony_ciDMError DisplayManagerProxy::GetSupportedHDRFormats(ScreenId screenId, std::vector<ScreenHDRFormat>& hdrFormats)
548e0dac50fSopenharmony_ci{
549e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
550e0dac50fSopenharmony_ci    if (remote == nullptr) {
551e0dac50fSopenharmony_ci        WLOGFW("GetSupportedHDRFormats: remote is nullptr");
552e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
553e0dac50fSopenharmony_ci    }
554e0dac50fSopenharmony_ci
555e0dac50fSopenharmony_ci    MessageParcel data;
556e0dac50fSopenharmony_ci    MessageParcel reply;
557e0dac50fSopenharmony_ci    MessageOption option;
558e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
559e0dac50fSopenharmony_ci        WLOGFW("GetSupportedHDRFormats: WriteInterfaceToken failed");
560e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
561e0dac50fSopenharmony_ci    }
562e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId))) {
563e0dac50fSopenharmony_ci        WLOGFW("GetSupportedHDRFormats: WriteUint64 screenId failed");
564e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
565e0dac50fSopenharmony_ci    }
566e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_GET_SUPPORTED_HDR_FORMAT),
567e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
568e0dac50fSopenharmony_ci        WLOGFW("GetSupportedHDRFormats: SendRequest failed");
569e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
570e0dac50fSopenharmony_ci    }
571e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadInt32());
572e0dac50fSopenharmony_ci    if (ret != DMError::DM_OK) {
573e0dac50fSopenharmony_ci        return ret;
574e0dac50fSopenharmony_ci    }
575e0dac50fSopenharmony_ci    MarshallingHelper::UnmarshallingVectorObj<ScreenHDRFormat>(reply, hdrFormats,
576e0dac50fSopenharmony_ci        [](Parcel& parcel, ScreenHDRFormat& hdrFormat) {
577e0dac50fSopenharmony_ci            uint32_t value;
578e0dac50fSopenharmony_ci            bool res = parcel.ReadUint32(value);
579e0dac50fSopenharmony_ci            hdrFormat = static_cast<ScreenHDRFormat>(value);
580e0dac50fSopenharmony_ci            return res;
581e0dac50fSopenharmony_ci        }
582e0dac50fSopenharmony_ci    );
583e0dac50fSopenharmony_ci    return ret;
584e0dac50fSopenharmony_ci}
585e0dac50fSopenharmony_ci
586e0dac50fSopenharmony_ciDMError DisplayManagerProxy::GetScreenHDRFormat(ScreenId screenId, ScreenHDRFormat& hdrFormat)
587e0dac50fSopenharmony_ci{
588e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
589e0dac50fSopenharmony_ci    if (remote == nullptr) {
590e0dac50fSopenharmony_ci        WLOGFW("GetScreenHDRFormat: remote is nullptr");
591e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
592e0dac50fSopenharmony_ci    }
593e0dac50fSopenharmony_ci
594e0dac50fSopenharmony_ci    MessageParcel data;
595e0dac50fSopenharmony_ci    MessageParcel reply;
596e0dac50fSopenharmony_ci    MessageOption option;
597e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
598e0dac50fSopenharmony_ci        WLOGFW("GetScreenHDRFormat: WriteInterfaceToken failed");
599e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
600e0dac50fSopenharmony_ci    }
601e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId))) {
602e0dac50fSopenharmony_ci        WLOGFW("GetScreenHDRFormat: WriteUint64 uint64_t failed");
603e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
604e0dac50fSopenharmony_ci    }
605e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_GET_HDR_FORMAT),
606e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
607e0dac50fSopenharmony_ci        WLOGFW("GetScreenHDRFormat: SendRequest failed");
608e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
609e0dac50fSopenharmony_ci    }
610e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadInt32());
611e0dac50fSopenharmony_ci    if (ret != DMError::DM_OK) {
612e0dac50fSopenharmony_ci        return ret;
613e0dac50fSopenharmony_ci    }
614e0dac50fSopenharmony_ci    hdrFormat = static_cast<ScreenHDRFormat>(reply.ReadUint32());
615e0dac50fSopenharmony_ci    return ret;
616e0dac50fSopenharmony_ci}
617e0dac50fSopenharmony_ci
618e0dac50fSopenharmony_ciDMError DisplayManagerProxy::SetScreenHDRFormat(ScreenId screenId, int32_t modeIdx)
619e0dac50fSopenharmony_ci{
620e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
621e0dac50fSopenharmony_ci    if (remote == nullptr) {
622e0dac50fSopenharmony_ci        WLOGFW("SetScreenHDRFormat: remote is nullptr");
623e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
624e0dac50fSopenharmony_ci    }
625e0dac50fSopenharmony_ci
626e0dac50fSopenharmony_ci    MessageParcel data;
627e0dac50fSopenharmony_ci    MessageParcel reply;
628e0dac50fSopenharmony_ci    MessageOption option;
629e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
630e0dac50fSopenharmony_ci        WLOGFW("SetScreenHDRFormat: WriteInterfaceToken failed");
631e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
632e0dac50fSopenharmony_ci    }
633e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId)) || !data.WriteInt32(modeIdx)) {
634e0dac50fSopenharmony_ci        WLOGFW("SetScreenHDRFormat: WriteUint64 screenId failed");
635e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
636e0dac50fSopenharmony_ci    }
637e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_SET_HDR_FORMAT),
638e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
639e0dac50fSopenharmony_ci        WLOGFW("SetScreenHDRFormat: SendRequest failed");
640e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
641e0dac50fSopenharmony_ci    }
642e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
643e0dac50fSopenharmony_ci}
644e0dac50fSopenharmony_ci
645e0dac50fSopenharmony_ciDMError DisplayManagerProxy::GetSupportedColorSpaces(ScreenId screenId,
646e0dac50fSopenharmony_ci    std::vector<GraphicCM_ColorSpaceType>& colorSpaces)
647e0dac50fSopenharmony_ci{
648e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
649e0dac50fSopenharmony_ci    if (remote == nullptr) {
650e0dac50fSopenharmony_ci        WLOGFW("GetSupportedColorSpaces: remote is nullptr");
651e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
652e0dac50fSopenharmony_ci    }
653e0dac50fSopenharmony_ci
654e0dac50fSopenharmony_ci    MessageParcel data;
655e0dac50fSopenharmony_ci    MessageParcel reply;
656e0dac50fSopenharmony_ci    MessageOption option;
657e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
658e0dac50fSopenharmony_ci        WLOGFW("GetSupportedColorSpaces: WriteInterfaceToken failed");
659e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
660e0dac50fSopenharmony_ci    }
661e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId))) {
662e0dac50fSopenharmony_ci        WLOGFW("GetSupportedColorSpaces: WriteUint64 screenId failed");
663e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
664e0dac50fSopenharmony_ci    }
665e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_GET_SUPPORTED_COLOR_SPACE),
666e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
667e0dac50fSopenharmony_ci        WLOGFW("GetSupportedColorSpaces: SendRequest failed");
668e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
669e0dac50fSopenharmony_ci    }
670e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadInt32());
671e0dac50fSopenharmony_ci    if (ret != DMError::DM_OK) {
672e0dac50fSopenharmony_ci        return ret;
673e0dac50fSopenharmony_ci    }
674e0dac50fSopenharmony_ci    MarshallingHelper::UnmarshallingVectorObj<GraphicCM_ColorSpaceType>(reply, colorSpaces,
675e0dac50fSopenharmony_ci        [](Parcel& parcel, GraphicCM_ColorSpaceType& color) {
676e0dac50fSopenharmony_ci            uint32_t value;
677e0dac50fSopenharmony_ci            bool res = parcel.ReadUint32(value);
678e0dac50fSopenharmony_ci            color = static_cast<GraphicCM_ColorSpaceType>(value);
679e0dac50fSopenharmony_ci            return res;
680e0dac50fSopenharmony_ci        }
681e0dac50fSopenharmony_ci    );
682e0dac50fSopenharmony_ci    return ret;
683e0dac50fSopenharmony_ci}
684e0dac50fSopenharmony_ci
685e0dac50fSopenharmony_ciDMError DisplayManagerProxy::GetScreenColorSpace(ScreenId screenId, GraphicCM_ColorSpaceType& colorSpace)
686e0dac50fSopenharmony_ci{
687e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
688e0dac50fSopenharmony_ci    if (remote == nullptr) {
689e0dac50fSopenharmony_ci        WLOGFW("GetScreenColorSpace: remote is nullptr");
690e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
691e0dac50fSopenharmony_ci    }
692e0dac50fSopenharmony_ci
693e0dac50fSopenharmony_ci    MessageParcel data;
694e0dac50fSopenharmony_ci    MessageParcel reply;
695e0dac50fSopenharmony_ci    MessageOption option;
696e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
697e0dac50fSopenharmony_ci        WLOGFW("GetScreenColorSpace: WriteInterfaceToken failed");
698e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
699e0dac50fSopenharmony_ci    }
700e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId))) {
701e0dac50fSopenharmony_ci        WLOGFW("GetScreenColorSpace: WriteUint64 screenId failed");
702e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
703e0dac50fSopenharmony_ci    }
704e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_GET_COLOR_SPACE),
705e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
706e0dac50fSopenharmony_ci        WLOGFW("GetScreenColorSpace: SendRequest failed");
707e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
708e0dac50fSopenharmony_ci    }
709e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadInt32());
710e0dac50fSopenharmony_ci    if (ret != DMError::DM_OK) {
711e0dac50fSopenharmony_ci        return ret;
712e0dac50fSopenharmony_ci    }
713e0dac50fSopenharmony_ci    colorSpace = static_cast<GraphicCM_ColorSpaceType>(reply.ReadUint32());
714e0dac50fSopenharmony_ci    return ret;
715e0dac50fSopenharmony_ci}
716e0dac50fSopenharmony_ci
717e0dac50fSopenharmony_ciDMError DisplayManagerProxy::SetScreenColorSpace(ScreenId screenId, GraphicCM_ColorSpaceType colorSpace)
718e0dac50fSopenharmony_ci{
719e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
720e0dac50fSopenharmony_ci    if (remote == nullptr) {
721e0dac50fSopenharmony_ci        WLOGFW("SetScreenColorSpace: remote is nullptr");
722e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
723e0dac50fSopenharmony_ci    }
724e0dac50fSopenharmony_ci
725e0dac50fSopenharmony_ci    MessageParcel data;
726e0dac50fSopenharmony_ci    MessageParcel reply;
727e0dac50fSopenharmony_ci    MessageOption option;
728e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
729e0dac50fSopenharmony_ci        WLOGFW("SetScreenColorSpace: WriteInterfaceToken failed");
730e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
731e0dac50fSopenharmony_ci    }
732e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId)) || !data.WriteInt32(colorSpace)) {
733e0dac50fSopenharmony_ci        WLOGFW("SetScreenColorSpace: Write failed");
734e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
735e0dac50fSopenharmony_ci    }
736e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_SET_COLOR_SPACE),
737e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
738e0dac50fSopenharmony_ci        WLOGFW("SetScreenColorSpace: SendRequest failed");
739e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
740e0dac50fSopenharmony_ci    }
741e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
742e0dac50fSopenharmony_ci}
743e0dac50fSopenharmony_ci
744e0dac50fSopenharmony_ciDMError DisplayManagerProxy::RegisterDisplayManagerAgent(const sptr<IDisplayManagerAgent>& displayManagerAgent,
745e0dac50fSopenharmony_ci    DisplayManagerAgentType type)
746e0dac50fSopenharmony_ci{
747e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
748e0dac50fSopenharmony_ci    if (remote == nullptr) {
749e0dac50fSopenharmony_ci        WLOGFW("RegisterDisplayManagerAgent: remote is nullptr");
750e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
751e0dac50fSopenharmony_ci    }
752e0dac50fSopenharmony_ci
753e0dac50fSopenharmony_ci    MessageParcel data;
754e0dac50fSopenharmony_ci    MessageParcel reply;
755e0dac50fSopenharmony_ci    MessageOption option;
756e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
757e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
758e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
759e0dac50fSopenharmony_ci    }
760e0dac50fSopenharmony_ci
761e0dac50fSopenharmony_ci    if (!data.WriteRemoteObject(displayManagerAgent->AsObject())) {
762e0dac50fSopenharmony_ci        WLOGFE("Write IDisplayManagerAgent failed");
763e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
764e0dac50fSopenharmony_ci    }
765e0dac50fSopenharmony_ci
766e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(type))) {
767e0dac50fSopenharmony_ci        WLOGFE("Write DisplayManagerAgent type failed");
768e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
769e0dac50fSopenharmony_ci    }
770e0dac50fSopenharmony_ci
771e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_REGISTER_DISPLAY_MANAGER_AGENT),
772e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
773e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
774e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
775e0dac50fSopenharmony_ci    }
776e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
777e0dac50fSopenharmony_ci}
778e0dac50fSopenharmony_ci
779e0dac50fSopenharmony_ciDMError DisplayManagerProxy::UnregisterDisplayManagerAgent(const sptr<IDisplayManagerAgent>& displayManagerAgent,
780e0dac50fSopenharmony_ci    DisplayManagerAgentType type)
781e0dac50fSopenharmony_ci{
782e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
783e0dac50fSopenharmony_ci    if (remote == nullptr) {
784e0dac50fSopenharmony_ci        WLOGFW("UnregisterDisplayManagerAgent: remote is nullptr");
785e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
786e0dac50fSopenharmony_ci    }
787e0dac50fSopenharmony_ci
788e0dac50fSopenharmony_ci    MessageParcel data;
789e0dac50fSopenharmony_ci    MessageParcel reply;
790e0dac50fSopenharmony_ci    MessageOption option;
791e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
792e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
793e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
794e0dac50fSopenharmony_ci    }
795e0dac50fSopenharmony_ci
796e0dac50fSopenharmony_ci    if (!data.WriteRemoteObject(displayManagerAgent->AsObject())) {
797e0dac50fSopenharmony_ci        WLOGFE("Write IWindowManagerAgent failed");
798e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
799e0dac50fSopenharmony_ci    }
800e0dac50fSopenharmony_ci
801e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(type))) {
802e0dac50fSopenharmony_ci        WLOGFE("Write DisplayManagerAgent type failed");
803e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
804e0dac50fSopenharmony_ci    }
805e0dac50fSopenharmony_ci
806e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_UNREGISTER_DISPLAY_MANAGER_AGENT),
807e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
808e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
809e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
810e0dac50fSopenharmony_ci    }
811e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
812e0dac50fSopenharmony_ci}
813e0dac50fSopenharmony_ci
814e0dac50fSopenharmony_cibool DisplayManagerProxy::WakeUpBegin(PowerStateChangeReason reason)
815e0dac50fSopenharmony_ci{
816e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
817e0dac50fSopenharmony_ci    if (remote == nullptr) {
818e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]WakeUpBegin: remote is nullptr");
819e0dac50fSopenharmony_ci        return false;
820e0dac50fSopenharmony_ci    }
821e0dac50fSopenharmony_ci
822e0dac50fSopenharmony_ci    MessageParcel data;
823e0dac50fSopenharmony_ci    MessageParcel reply;
824e0dac50fSopenharmony_ci    MessageOption option;
825e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
826e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]WriteInterfaceToken failed");
827e0dac50fSopenharmony_ci        return false;
828e0dac50fSopenharmony_ci    }
829e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(reason))) {
830e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]Write PowerStateChangeReason failed");
831e0dac50fSopenharmony_ci        return false;
832e0dac50fSopenharmony_ci    }
833e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_WAKE_UP_BEGIN),
834e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
835e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SendRequest failed");
836e0dac50fSopenharmony_ci        return false;
837e0dac50fSopenharmony_ci    }
838e0dac50fSopenharmony_ci    return reply.ReadBool();
839e0dac50fSopenharmony_ci}
840e0dac50fSopenharmony_ci
841e0dac50fSopenharmony_cibool DisplayManagerProxy::WakeUpEnd()
842e0dac50fSopenharmony_ci{
843e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
844e0dac50fSopenharmony_ci    if (remote == nullptr) {
845e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]WakeUpEnd: remote is nullptr");
846e0dac50fSopenharmony_ci        return false;
847e0dac50fSopenharmony_ci    }
848e0dac50fSopenharmony_ci
849e0dac50fSopenharmony_ci    MessageParcel data;
850e0dac50fSopenharmony_ci    MessageParcel reply;
851e0dac50fSopenharmony_ci    MessageOption option;
852e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
853e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]WriteInterfaceToken failed");
854e0dac50fSopenharmony_ci        return false;
855e0dac50fSopenharmony_ci    }
856e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_WAKE_UP_END),
857e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
858e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SendRequest failed");
859e0dac50fSopenharmony_ci        return false;
860e0dac50fSopenharmony_ci    }
861e0dac50fSopenharmony_ci    return reply.ReadBool();
862e0dac50fSopenharmony_ci}
863e0dac50fSopenharmony_ci
864e0dac50fSopenharmony_cibool DisplayManagerProxy::SuspendBegin(PowerStateChangeReason reason)
865e0dac50fSopenharmony_ci{
866e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
867e0dac50fSopenharmony_ci    if (remote == nullptr) {
868e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SuspendBegin: remote is nullptr");
869e0dac50fSopenharmony_ci        return false;
870e0dac50fSopenharmony_ci    }
871e0dac50fSopenharmony_ci
872e0dac50fSopenharmony_ci    MessageParcel data;
873e0dac50fSopenharmony_ci    MessageParcel reply;
874e0dac50fSopenharmony_ci    MessageOption option;
875e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
876e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]WriteInterfaceToken failed");
877e0dac50fSopenharmony_ci        return false;
878e0dac50fSopenharmony_ci    }
879e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(reason))) {
880e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]Write PowerStateChangeReason failed");
881e0dac50fSopenharmony_ci        return false;
882e0dac50fSopenharmony_ci    }
883e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SUSPEND_BEGIN),
884e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
885e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SendRequest failed");
886e0dac50fSopenharmony_ci        return false;
887e0dac50fSopenharmony_ci    }
888e0dac50fSopenharmony_ci    return reply.ReadBool();
889e0dac50fSopenharmony_ci}
890e0dac50fSopenharmony_ci
891e0dac50fSopenharmony_cibool DisplayManagerProxy::SuspendEnd()
892e0dac50fSopenharmony_ci{
893e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
894e0dac50fSopenharmony_ci    if (remote == nullptr) {
895e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SuspendEnd: remote is nullptr");
896e0dac50fSopenharmony_ci        return false;
897e0dac50fSopenharmony_ci    }
898e0dac50fSopenharmony_ci
899e0dac50fSopenharmony_ci    MessageParcel data;
900e0dac50fSopenharmony_ci    MessageParcel reply;
901e0dac50fSopenharmony_ci    MessageOption option;
902e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
903e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]WriteInterfaceToken failed");
904e0dac50fSopenharmony_ci        return false;
905e0dac50fSopenharmony_ci    }
906e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SUSPEND_END),
907e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
908e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SendRequest failed");
909e0dac50fSopenharmony_ci        return false;
910e0dac50fSopenharmony_ci    }
911e0dac50fSopenharmony_ci    return reply.ReadBool();
912e0dac50fSopenharmony_ci}
913e0dac50fSopenharmony_ci
914e0dac50fSopenharmony_cibool DisplayManagerProxy::SetScreenPowerForAll(ScreenPowerState state, PowerStateChangeReason reason)
915e0dac50fSopenharmony_ci{
916e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
917e0dac50fSopenharmony_ci    if (remote == nullptr) {
918e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SetScreenPowerForAll: remote is nullptr");
919e0dac50fSopenharmony_ci        return false;
920e0dac50fSopenharmony_ci    }
921e0dac50fSopenharmony_ci
922e0dac50fSopenharmony_ci    MessageParcel data;
923e0dac50fSopenharmony_ci    MessageParcel reply;
924e0dac50fSopenharmony_ci    MessageOption option;
925e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
926e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]WriteInterfaceToken failed");
927e0dac50fSopenharmony_ci        return false;
928e0dac50fSopenharmony_ci    }
929e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(state))) {
930e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]Write ScreenPowerState failed");
931e0dac50fSopenharmony_ci        return false;
932e0dac50fSopenharmony_ci    }
933e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(reason))) {
934e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]Write PowerStateChangeReason failed");
935e0dac50fSopenharmony_ci        return false;
936e0dac50fSopenharmony_ci    }
937e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_SCREEN_POWER_FOR_ALL),
938e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
939e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SendRequest failed");
940e0dac50fSopenharmony_ci        return false;
941e0dac50fSopenharmony_ci    }
942e0dac50fSopenharmony_ci    return reply.ReadBool();
943e0dac50fSopenharmony_ci}
944e0dac50fSopenharmony_ci
945e0dac50fSopenharmony_cibool DisplayManagerProxy::SetSpecifiedScreenPower(ScreenId screenId, ScreenPowerState state, PowerStateChangeReason reason)
946e0dac50fSopenharmony_ci{
947e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
948e0dac50fSopenharmony_ci    if (remote == nullptr) {
949e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SetSpecifiedScreenPower: remote is nullptr");
950e0dac50fSopenharmony_ci        return false;
951e0dac50fSopenharmony_ci    }
952e0dac50fSopenharmony_ci
953e0dac50fSopenharmony_ci    MessageParcel data;
954e0dac50fSopenharmony_ci    MessageParcel reply;
955e0dac50fSopenharmony_ci    MessageOption option;
956e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
957e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]WriteInterfaceToken failed");
958e0dac50fSopenharmony_ci        return false;
959e0dac50fSopenharmony_ci    }
960e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(screenId))) {
961e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]Write ScreenId failed");
962e0dac50fSopenharmony_ci        return false;
963e0dac50fSopenharmony_ci    }
964e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(state))) {
965e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]Write ScreenPowerState failed");
966e0dac50fSopenharmony_ci        return false;
967e0dac50fSopenharmony_ci    }
968e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(reason))) {
969e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]Write PowerStateChangeReason failed");
970e0dac50fSopenharmony_ci        return false;
971e0dac50fSopenharmony_ci    }
972e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_SPECIFIED_SCREEN_POWER),
973e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
974e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SendRequest failed");
975e0dac50fSopenharmony_ci        return false;
976e0dac50fSopenharmony_ci    }
977e0dac50fSopenharmony_ci    return reply.ReadBool();
978e0dac50fSopenharmony_ci}
979e0dac50fSopenharmony_ci
980e0dac50fSopenharmony_ciScreenPowerState DisplayManagerProxy::GetScreenPower(ScreenId dmsScreenId)
981e0dac50fSopenharmony_ci{
982e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
983e0dac50fSopenharmony_ci    if (remote == nullptr) {
984e0dac50fSopenharmony_ci        WLOGFW("GetScreenPower: remote is nullptr");
985e0dac50fSopenharmony_ci        return ScreenPowerState::INVALID_STATE;
986e0dac50fSopenharmony_ci    }
987e0dac50fSopenharmony_ci
988e0dac50fSopenharmony_ci    MessageParcel data;
989e0dac50fSopenharmony_ci    MessageParcel reply;
990e0dac50fSopenharmony_ci    MessageOption option;
991e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
992e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
993e0dac50fSopenharmony_ci        return ScreenPowerState::INVALID_STATE;
994e0dac50fSopenharmony_ci    }
995e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(dmsScreenId))) {
996e0dac50fSopenharmony_ci        WLOGFE("Write dmsScreenId failed");
997e0dac50fSopenharmony_ci        return ScreenPowerState::INVALID_STATE;
998e0dac50fSopenharmony_ci    }
999e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_GET_SCREEN_POWER),
1000e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1001e0dac50fSopenharmony_ci        WLOGFW("SendRequest failed");
1002e0dac50fSopenharmony_ci        return ScreenPowerState::INVALID_STATE;
1003e0dac50fSopenharmony_ci    }
1004e0dac50fSopenharmony_ci    return static_cast<ScreenPowerState>(reply.ReadUint32());
1005e0dac50fSopenharmony_ci}
1006e0dac50fSopenharmony_ci
1007e0dac50fSopenharmony_cibool DisplayManagerProxy::SetDisplayState(DisplayState state)
1008e0dac50fSopenharmony_ci{
1009e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1010e0dac50fSopenharmony_ci    if (remote == nullptr) {
1011e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SetDisplayState: remote is nullptr");
1012e0dac50fSopenharmony_ci        return false;
1013e0dac50fSopenharmony_ci    }
1014e0dac50fSopenharmony_ci
1015e0dac50fSopenharmony_ci    MessageParcel data;
1016e0dac50fSopenharmony_ci    MessageParcel reply;
1017e0dac50fSopenharmony_ci    MessageOption option;
1018e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1019e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]WriteInterfaceToken failed");
1020e0dac50fSopenharmony_ci        return false;
1021e0dac50fSopenharmony_ci    }
1022e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(state))) {
1023e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]Write DisplayState failed");
1024e0dac50fSopenharmony_ci        return false;
1025e0dac50fSopenharmony_ci    }
1026e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_DISPLAY_STATE),
1027e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1028e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SendRequest failed");
1029e0dac50fSopenharmony_ci        return false;
1030e0dac50fSopenharmony_ci    }
1031e0dac50fSopenharmony_ci    return reply.ReadBool();
1032e0dac50fSopenharmony_ci}
1033e0dac50fSopenharmony_ci
1034e0dac50fSopenharmony_ciDisplayState DisplayManagerProxy::GetDisplayState(DisplayId displayId)
1035e0dac50fSopenharmony_ci{
1036e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1037e0dac50fSopenharmony_ci    if (remote == nullptr) {
1038e0dac50fSopenharmony_ci        WLOGFW("GetDisplayState: remote is nullptr");
1039e0dac50fSopenharmony_ci        return DisplayState::UNKNOWN;
1040e0dac50fSopenharmony_ci    }
1041e0dac50fSopenharmony_ci
1042e0dac50fSopenharmony_ci    MessageParcel data;
1043e0dac50fSopenharmony_ci    MessageParcel reply;
1044e0dac50fSopenharmony_ci    MessageOption option;
1045e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1046e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1047e0dac50fSopenharmony_ci        return DisplayState::UNKNOWN;
1048e0dac50fSopenharmony_ci    }
1049e0dac50fSopenharmony_ci    if (!data.WriteUint64(displayId)) {
1050e0dac50fSopenharmony_ci        WLOGFE("Write displayId failed");
1051e0dac50fSopenharmony_ci        return DisplayState::UNKNOWN;
1052e0dac50fSopenharmony_ci    }
1053e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_GET_DISPLAY_STATE),
1054e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1055e0dac50fSopenharmony_ci        WLOGFW("SendRequest failed");
1056e0dac50fSopenharmony_ci        return DisplayState::UNKNOWN;
1057e0dac50fSopenharmony_ci    }
1058e0dac50fSopenharmony_ci    return static_cast<DisplayState>(reply.ReadUint32());
1059e0dac50fSopenharmony_ci}
1060e0dac50fSopenharmony_ci
1061e0dac50fSopenharmony_cibool DisplayManagerProxy::TryToCancelScreenOff()
1062e0dac50fSopenharmony_ci{
1063e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1064e0dac50fSopenharmony_ci    if (remote == nullptr) {
1065e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]TryToCancelScreenOff: remote is nullptr");
1066e0dac50fSopenharmony_ci        return false;
1067e0dac50fSopenharmony_ci    }
1068e0dac50fSopenharmony_ci
1069e0dac50fSopenharmony_ci    MessageParcel data;
1070e0dac50fSopenharmony_ci    MessageParcel reply;
1071e0dac50fSopenharmony_ci    MessageOption option;
1072e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1073e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]WriteInterfaceToken failed");
1074e0dac50fSopenharmony_ci        return false;
1075e0dac50fSopenharmony_ci    }
1076e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_TRY_TO_CANCEL_SCREEN_OFF),
1077e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1078e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SendRequest failed");
1079e0dac50fSopenharmony_ci        return false;
1080e0dac50fSopenharmony_ci    }
1081e0dac50fSopenharmony_ci    return reply.ReadBool();
1082e0dac50fSopenharmony_ci}
1083e0dac50fSopenharmony_ci
1084e0dac50fSopenharmony_cistd::vector<DisplayId> DisplayManagerProxy::GetAllDisplayIds()
1085e0dac50fSopenharmony_ci{
1086e0dac50fSopenharmony_ci    std::vector<DisplayId> allDisplayIds;
1087e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1088e0dac50fSopenharmony_ci    if (remote == nullptr) {
1089e0dac50fSopenharmony_ci        WLOGFW("GetAllDisplayIds: remote is nullptr");
1090e0dac50fSopenharmony_ci        return allDisplayIds;
1091e0dac50fSopenharmony_ci    }
1092e0dac50fSopenharmony_ci
1093e0dac50fSopenharmony_ci    MessageParcel data;
1094e0dac50fSopenharmony_ci    MessageParcel reply;
1095e0dac50fSopenharmony_ci    MessageOption option;
1096e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1097e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1098e0dac50fSopenharmony_ci        return allDisplayIds;
1099e0dac50fSopenharmony_ci    }
1100e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_GET_ALL_DISPLAYIDS),
1101e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1102e0dac50fSopenharmony_ci        WLOGFW("SendRequest failed");
1103e0dac50fSopenharmony_ci        return allDisplayIds;
1104e0dac50fSopenharmony_ci    }
1105e0dac50fSopenharmony_ci    reply.ReadUInt64Vector(&allDisplayIds);
1106e0dac50fSopenharmony_ci    return allDisplayIds;
1107e0dac50fSopenharmony_ci}
1108e0dac50fSopenharmony_ci
1109e0dac50fSopenharmony_cisptr<CutoutInfo> DisplayManagerProxy::GetCutoutInfo(DisplayId displayId)
1110e0dac50fSopenharmony_ci{
1111e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1112e0dac50fSopenharmony_ci    if (remote == nullptr) {
1113e0dac50fSopenharmony_ci        WLOGFW("GetCutoutInfo: remote is null");
1114e0dac50fSopenharmony_ci        return nullptr;
1115e0dac50fSopenharmony_ci    }
1116e0dac50fSopenharmony_ci    MessageParcel data;
1117e0dac50fSopenharmony_ci    MessageParcel reply;
1118e0dac50fSopenharmony_ci    MessageOption option;
1119e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1120e0dac50fSopenharmony_ci        WLOGFE("GetCutoutInfo: GetCutoutInfo failed");
1121e0dac50fSopenharmony_ci        return nullptr;
1122e0dac50fSopenharmony_ci    }
1123e0dac50fSopenharmony_ci    if (!data.WriteUint64(displayId)) {
1124e0dac50fSopenharmony_ci        WLOGFE("GetCutoutInfo: write displayId failed");
1125e0dac50fSopenharmony_ci        return nullptr;
1126e0dac50fSopenharmony_ci    }
1127e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_GET_CUTOUT_INFO),
1128e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1129e0dac50fSopenharmony_ci        WLOGFW("GetCutoutInfo: GetCutoutInfo failed");
1130e0dac50fSopenharmony_ci        return nullptr;
1131e0dac50fSopenharmony_ci    }
1132e0dac50fSopenharmony_ci    sptr<CutoutInfo> info = reply.ReadParcelable<CutoutInfo>();
1133e0dac50fSopenharmony_ci    return info;
1134e0dac50fSopenharmony_ci}
1135e0dac50fSopenharmony_ci
1136e0dac50fSopenharmony_ciDMError DisplayManagerProxy::AddSurfaceNodeToDisplay(DisplayId displayId,
1137e0dac50fSopenharmony_ci    std::shared_ptr<class RSSurfaceNode>& surfaceNode, bool onTop)
1138e0dac50fSopenharmony_ci{
1139e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1140e0dac50fSopenharmony_ci    if (remote == nullptr) {
1141e0dac50fSopenharmony_ci        WLOGFW("AddSurfaceNodeToDisplay: remote is nullptr");
1142e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1143e0dac50fSopenharmony_ci    }
1144e0dac50fSopenharmony_ci
1145e0dac50fSopenharmony_ci    MessageParcel data;
1146e0dac50fSopenharmony_ci    MessageParcel reply;
1147e0dac50fSopenharmony_ci    MessageOption option;
1148e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1149e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1150e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1151e0dac50fSopenharmony_ci    }
1152e0dac50fSopenharmony_ci    if (!data.WriteUint64(displayId)) {
1153e0dac50fSopenharmony_ci        WLOGFE("write displayId failed");
1154e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1155e0dac50fSopenharmony_ci    }
1156e0dac50fSopenharmony_ci    if (surfaceNode == nullptr || !surfaceNode->Marshalling(data)) {
1157e0dac50fSopenharmony_ci        WLOGFE("Write windowProperty failed");
1158e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1159e0dac50fSopenharmony_ci    }
1160e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_ADD_SURFACE_NODE),
1161e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1162e0dac50fSopenharmony_ci        WLOGFW("Send request failed");
1163e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1164e0dac50fSopenharmony_ci    }
1165e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadUint32());
1166e0dac50fSopenharmony_ci    return ret;
1167e0dac50fSopenharmony_ci}
1168e0dac50fSopenharmony_ci
1169e0dac50fSopenharmony_ciDMError DisplayManagerProxy::RemoveSurfaceNodeFromDisplay(DisplayId displayId,
1170e0dac50fSopenharmony_ci    std::shared_ptr<class RSSurfaceNode>& surfaceNode)
1171e0dac50fSopenharmony_ci{
1172e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1173e0dac50fSopenharmony_ci    if (remote == nullptr) {
1174e0dac50fSopenharmony_ci        WLOGFW("RemoveSurfaceNodeFromDisplay: remote is nullptr");
1175e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1176e0dac50fSopenharmony_ci    }
1177e0dac50fSopenharmony_ci
1178e0dac50fSopenharmony_ci    MessageParcel data;
1179e0dac50fSopenharmony_ci    MessageParcel reply;
1180e0dac50fSopenharmony_ci    MessageOption option;
1181e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1182e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1183e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1184e0dac50fSopenharmony_ci    }
1185e0dac50fSopenharmony_ci    if (!data.WriteUint64(displayId)) {
1186e0dac50fSopenharmony_ci        WLOGFE("write displayId failed");
1187e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1188e0dac50fSopenharmony_ci    }
1189e0dac50fSopenharmony_ci    if (surfaceNode == nullptr || !surfaceNode->Marshalling(data)) {
1190e0dac50fSopenharmony_ci        WLOGFE("Write windowProperty failed");
1191e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1192e0dac50fSopenharmony_ci    }
1193e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_REMOVE_SURFACE_NODE),
1194e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1195e0dac50fSopenharmony_ci        WLOGFW("Send request failed");
1196e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1197e0dac50fSopenharmony_ci    }
1198e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadUint32());
1199e0dac50fSopenharmony_ci    return ret;
1200e0dac50fSopenharmony_ci}
1201e0dac50fSopenharmony_ci
1202e0dac50fSopenharmony_ciDMError DisplayManagerProxy::HasPrivateWindow(DisplayId displayId, bool& hasPrivateWindow)
1203e0dac50fSopenharmony_ci{
1204e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1205e0dac50fSopenharmony_ci    if (remote == nullptr) {
1206e0dac50fSopenharmony_ci        WLOGFW("HasPrivateWindow: remote is nullptr");
1207e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1208e0dac50fSopenharmony_ci    }
1209e0dac50fSopenharmony_ci
1210e0dac50fSopenharmony_ci    MessageParcel data;
1211e0dac50fSopenharmony_ci    MessageParcel reply;
1212e0dac50fSopenharmony_ci    MessageOption option;
1213e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1214e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1215e0dac50fSopenharmony_ci    }
1216e0dac50fSopenharmony_ci
1217e0dac50fSopenharmony_ci    if (!data.WriteUint64(displayId)) {
1218e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1219e0dac50fSopenharmony_ci    }
1220e0dac50fSopenharmony_ci
1221e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_HAS_PRIVATE_WINDOW),
1222e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1223e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1224e0dac50fSopenharmony_ci    }
1225e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadInt32());
1226e0dac50fSopenharmony_ci    hasPrivateWindow = reply.ReadBool();
1227e0dac50fSopenharmony_ci    return ret;
1228e0dac50fSopenharmony_ci}
1229e0dac50fSopenharmony_ci
1230e0dac50fSopenharmony_civoid DisplayManagerProxy::NotifyDisplayEvent(DisplayEvent event)
1231e0dac50fSopenharmony_ci{
1232e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1233e0dac50fSopenharmony_ci    if (remote == nullptr) {
1234e0dac50fSopenharmony_ci        WLOGFW("NotifyDisplayEvent: remote is nullptr");
1235e0dac50fSopenharmony_ci        return;
1236e0dac50fSopenharmony_ci    }
1237e0dac50fSopenharmony_ci
1238e0dac50fSopenharmony_ci    MessageParcel data;
1239e0dac50fSopenharmony_ci    MessageParcel reply;
1240e0dac50fSopenharmony_ci    MessageOption option;
1241e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1242e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]WriteInterfaceToken failed");
1243e0dac50fSopenharmony_ci        return;
1244e0dac50fSopenharmony_ci    }
1245e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(event))) {
1246e0dac50fSopenharmony_ci        WLOGFE("[UL_POWER]Write DisplayEvent failed");
1247e0dac50fSopenharmony_ci        return;
1248e0dac50fSopenharmony_ci    }
1249e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_NOTIFY_DISPLAY_EVENT),
1250e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1251e0dac50fSopenharmony_ci        WLOGFW("[UL_POWER]SendRequest failed");
1252e0dac50fSopenharmony_ci        return;
1253e0dac50fSopenharmony_ci    }
1254e0dac50fSopenharmony_ci}
1255e0dac50fSopenharmony_ci
1256e0dac50fSopenharmony_cibool DisplayManagerProxy::SetFreeze(std::vector<DisplayId> displayIds, bool isFreeze)
1257e0dac50fSopenharmony_ci{
1258e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1259e0dac50fSopenharmony_ci    if (remote == nullptr) {
1260e0dac50fSopenharmony_ci        WLOGFW("SetFreeze: remote is nullptr");
1261e0dac50fSopenharmony_ci        return false;
1262e0dac50fSopenharmony_ci    }
1263e0dac50fSopenharmony_ci
1264e0dac50fSopenharmony_ci    MessageParcel data;
1265e0dac50fSopenharmony_ci    MessageParcel reply;
1266e0dac50fSopenharmony_ci    MessageOption option;
1267e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1268e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1269e0dac50fSopenharmony_ci        return false;
1270e0dac50fSopenharmony_ci    }
1271e0dac50fSopenharmony_ci    if (!data.WriteUInt64Vector(displayIds)) {
1272e0dac50fSopenharmony_ci        WLOGFE("set freeze fail: write displayId failed.");
1273e0dac50fSopenharmony_ci        return false;
1274e0dac50fSopenharmony_ci    }
1275e0dac50fSopenharmony_ci    if (!data.WriteBool(isFreeze)) {
1276e0dac50fSopenharmony_ci        WLOGFE("set freeze fail: write freeze flag failed.");
1277e0dac50fSopenharmony_ci        return false;
1278e0dac50fSopenharmony_ci    }
1279e0dac50fSopenharmony_ci
1280e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_FREEZE_EVENT),
1281e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1282e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1283e0dac50fSopenharmony_ci        return false;
1284e0dac50fSopenharmony_ci    }
1285e0dac50fSopenharmony_ci    return true;
1286e0dac50fSopenharmony_ci}
1287e0dac50fSopenharmony_ci
1288e0dac50fSopenharmony_ciDMError DisplayManagerProxy::MakeMirror(ScreenId mainScreenId, std::vector<ScreenId> mirrorScreenId,
1289e0dac50fSopenharmony_ci                                        ScreenId& screenGroupId)
1290e0dac50fSopenharmony_ci{
1291e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1292e0dac50fSopenharmony_ci    if (remote == nullptr) {
1293e0dac50fSopenharmony_ci        WLOGFW("create mirror fail: remote is null");
1294e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1295e0dac50fSopenharmony_ci    }
1296e0dac50fSopenharmony_ci
1297e0dac50fSopenharmony_ci    MessageParcel data;
1298e0dac50fSopenharmony_ci    MessageParcel reply;
1299e0dac50fSopenharmony_ci    MessageOption option;
1300e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1301e0dac50fSopenharmony_ci        WLOGFE("create mirror fail: WriteInterfaceToken failed");
1302e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
1303e0dac50fSopenharmony_ci    }
1304e0dac50fSopenharmony_ci    bool res = data.WriteUint64(static_cast<uint64_t>(mainScreenId)) &&
1305e0dac50fSopenharmony_ci        data.WriteUInt64Vector(mirrorScreenId);
1306e0dac50fSopenharmony_ci    if (!res) {
1307e0dac50fSopenharmony_ci        WLOGFE("create mirror fail: data write failed");
1308e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1309e0dac50fSopenharmony_ci    }
1310e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_MAKE_MIRROR),
1311e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1312e0dac50fSopenharmony_ci        WLOGFW("create mirror fail: SendRequest failed");
1313e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1314e0dac50fSopenharmony_ci    }
1315e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadInt32());
1316e0dac50fSopenharmony_ci    screenGroupId = static_cast<ScreenId>(reply.ReadUint64());
1317e0dac50fSopenharmony_ci    return ret;
1318e0dac50fSopenharmony_ci}
1319e0dac50fSopenharmony_ci
1320e0dac50fSopenharmony_ciDMError DisplayManagerProxy::StopMirror(const std::vector<ScreenId>& mirrorScreenIds)
1321e0dac50fSopenharmony_ci{
1322e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1323e0dac50fSopenharmony_ci    if (remote == nullptr) {
1324e0dac50fSopenharmony_ci        WLOGFW("StopMirror fail: remote is null");
1325e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1326e0dac50fSopenharmony_ci    }
1327e0dac50fSopenharmony_ci
1328e0dac50fSopenharmony_ci    MessageParcel data;
1329e0dac50fSopenharmony_ci    MessageParcel reply;
1330e0dac50fSopenharmony_ci    MessageOption option;
1331e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1332e0dac50fSopenharmony_ci        WLOGFE("StopMirror fail: WriteInterfaceToken failed");
1333e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
1334e0dac50fSopenharmony_ci    }
1335e0dac50fSopenharmony_ci    bool res = data.WriteUInt64Vector(mirrorScreenIds);
1336e0dac50fSopenharmony_ci    if (!res) {
1337e0dac50fSopenharmony_ci        WLOGFE("StopMirror fail: data write failed");
1338e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1339e0dac50fSopenharmony_ci    }
1340e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_STOP_MIRROR),
1341e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1342e0dac50fSopenharmony_ci        WLOGFW("StopMirror fail: SendRequest failed");
1343e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1344e0dac50fSopenharmony_ci    }
1345e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
1346e0dac50fSopenharmony_ci}
1347e0dac50fSopenharmony_ci
1348e0dac50fSopenharmony_cisptr<ScreenInfo> DisplayManagerProxy::GetScreenInfoById(ScreenId screenId)
1349e0dac50fSopenharmony_ci{
1350e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1351e0dac50fSopenharmony_ci    if (remote == nullptr) {
1352e0dac50fSopenharmony_ci        WLOGFW("GetScreenInfoById: remote is nullptr");
1353e0dac50fSopenharmony_ci        return nullptr;
1354e0dac50fSopenharmony_ci    }
1355e0dac50fSopenharmony_ci
1356e0dac50fSopenharmony_ci    MessageParcel data;
1357e0dac50fSopenharmony_ci    MessageParcel reply;
1358e0dac50fSopenharmony_ci    MessageOption option;
1359e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1360e0dac50fSopenharmony_ci        WLOGFE("GetScreenInfoById: WriteInterfaceToken failed");
1361e0dac50fSopenharmony_ci        return nullptr;
1362e0dac50fSopenharmony_ci    }
1363e0dac50fSopenharmony_ci    if (!data.WriteUint64(screenId)) {
1364e0dac50fSopenharmony_ci        WLOGFE("GetScreenInfoById: Write screenId failed");
1365e0dac50fSopenharmony_ci        return nullptr;
1366e0dac50fSopenharmony_ci    }
1367e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_GET_SCREEN_INFO_BY_ID),
1368e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1369e0dac50fSopenharmony_ci        WLOGFW("GetScreenInfoById: SendRequest failed");
1370e0dac50fSopenharmony_ci        return nullptr;
1371e0dac50fSopenharmony_ci    }
1372e0dac50fSopenharmony_ci
1373e0dac50fSopenharmony_ci    sptr<ScreenInfo> info = reply.ReadStrongParcelable<ScreenInfo>();
1374e0dac50fSopenharmony_ci    if (info == nullptr) {
1375e0dac50fSopenharmony_ci        WLOGFW("GetScreenInfoById SendRequest nullptr.");
1376e0dac50fSopenharmony_ci        return nullptr;
1377e0dac50fSopenharmony_ci    }
1378e0dac50fSopenharmony_ci    for (auto& mode : info->GetModes()) {
1379e0dac50fSopenharmony_ci        WLOGFI("info modes is id: %{public}u, width: %{public}u, height: %{public}u, refreshRate: %{public}u",
1380e0dac50fSopenharmony_ci            mode->id_, mode->width_, mode->height_, mode->refreshRate_);
1381e0dac50fSopenharmony_ci    }
1382e0dac50fSopenharmony_ci    return info;
1383e0dac50fSopenharmony_ci}
1384e0dac50fSopenharmony_ci
1385e0dac50fSopenharmony_cisptr<ScreenGroupInfo> DisplayManagerProxy::GetScreenGroupInfoById(ScreenId screenId)
1386e0dac50fSopenharmony_ci{
1387e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1388e0dac50fSopenharmony_ci    if (remote == nullptr) {
1389e0dac50fSopenharmony_ci        WLOGFW("GetScreenGroupInfoById: remote is nullptr");
1390e0dac50fSopenharmony_ci        return nullptr;
1391e0dac50fSopenharmony_ci    }
1392e0dac50fSopenharmony_ci
1393e0dac50fSopenharmony_ci    MessageParcel data;
1394e0dac50fSopenharmony_ci    MessageParcel reply;
1395e0dac50fSopenharmony_ci    MessageOption option;
1396e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1397e0dac50fSopenharmony_ci        WLOGFE("GetScreenGroupInfoById: WriteInterfaceToken failed");
1398e0dac50fSopenharmony_ci        return nullptr;
1399e0dac50fSopenharmony_ci    }
1400e0dac50fSopenharmony_ci    if (!data.WriteUint64(screenId)) {
1401e0dac50fSopenharmony_ci        WLOGFE("GetScreenGroupInfoById: Write screenId failed");
1402e0dac50fSopenharmony_ci        return nullptr;
1403e0dac50fSopenharmony_ci    }
1404e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_GET_SCREEN_GROUP_INFO_BY_ID),
1405e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1406e0dac50fSopenharmony_ci        WLOGFW("GetScreenGroupInfoById: SendRequest failed");
1407e0dac50fSopenharmony_ci        return nullptr;
1408e0dac50fSopenharmony_ci    }
1409e0dac50fSopenharmony_ci
1410e0dac50fSopenharmony_ci    sptr<ScreenGroupInfo> info = reply.ReadStrongParcelable<ScreenGroupInfo>();
1411e0dac50fSopenharmony_ci    if (info == nullptr) {
1412e0dac50fSopenharmony_ci        WLOGFW("GetScreenGroupInfoById SendRequest nullptr.");
1413e0dac50fSopenharmony_ci        return nullptr;
1414e0dac50fSopenharmony_ci    }
1415e0dac50fSopenharmony_ci    return info;
1416e0dac50fSopenharmony_ci}
1417e0dac50fSopenharmony_ci
1418e0dac50fSopenharmony_ciDMError DisplayManagerProxy::GetAllScreenInfos(std::vector<sptr<ScreenInfo>>& screenInfos)
1419e0dac50fSopenharmony_ci{
1420e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1421e0dac50fSopenharmony_ci    if (remote == nullptr) {
1422e0dac50fSopenharmony_ci        WLOGFW("GetAllScreenInfos: remote is nullptr");
1423e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1424e0dac50fSopenharmony_ci    }
1425e0dac50fSopenharmony_ci
1426e0dac50fSopenharmony_ci    MessageParcel data;
1427e0dac50fSopenharmony_ci    MessageParcel reply;
1428e0dac50fSopenharmony_ci    MessageOption option;
1429e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1430e0dac50fSopenharmony_ci        WLOGFE("GetAllScreenInfos: WriteInterfaceToken failed");
1431e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
1432e0dac50fSopenharmony_ci    }
1433e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_GET_ALL_SCREEN_INFOS),
1434e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1435e0dac50fSopenharmony_ci        WLOGFW("GetAllScreenInfos: SendRequest failed");
1436e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1437e0dac50fSopenharmony_ci    }
1438e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadInt32());
1439e0dac50fSopenharmony_ci    static_cast<void>(MarshallingHelper::UnmarshallingVectorParcelableObj<ScreenInfo>(reply, screenInfos));
1440e0dac50fSopenharmony_ci    return ret;
1441e0dac50fSopenharmony_ci}
1442e0dac50fSopenharmony_ci
1443e0dac50fSopenharmony_ciDMError DisplayManagerProxy::MakeExpand(std::vector<ScreenId> screenId, std::vector<Point> startPoint,
1444e0dac50fSopenharmony_ci                                        ScreenId& screenGroupId)
1445e0dac50fSopenharmony_ci{
1446e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1447e0dac50fSopenharmony_ci    if (remote == nullptr) {
1448e0dac50fSopenharmony_ci        WLOGFW("MakeExpand: remote is null");
1449e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1450e0dac50fSopenharmony_ci    }
1451e0dac50fSopenharmony_ci
1452e0dac50fSopenharmony_ci    MessageParcel data;
1453e0dac50fSopenharmony_ci    MessageParcel reply;
1454e0dac50fSopenharmony_ci    MessageOption option;
1455e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1456e0dac50fSopenharmony_ci        WLOGFE("MakeExpand: WriteInterfaceToken failed");
1457e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
1458e0dac50fSopenharmony_ci    }
1459e0dac50fSopenharmony_ci    if (!data.WriteUInt64Vector(screenId)) {
1460e0dac50fSopenharmony_ci        WLOGFE("MakeExpand: write screenId failed");
1461e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1462e0dac50fSopenharmony_ci    }
1463e0dac50fSopenharmony_ci    if (!MarshallingHelper::MarshallingVectorObj<Point>(data, startPoint, [](Parcel& parcel, const Point& point) {
1464e0dac50fSopenharmony_ci            return parcel.WriteInt32(point.posX_) && parcel.WriteInt32(point.posY_);
1465e0dac50fSopenharmony_ci        })) {
1466e0dac50fSopenharmony_ci        WLOGFE("MakeExpand: write startPoint failed");
1467e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1468e0dac50fSopenharmony_ci    }
1469e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_MAKE_EXPAND),
1470e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1471e0dac50fSopenharmony_ci        WLOGFE("MakeExpand: SendRequest failed");
1472e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1473e0dac50fSopenharmony_ci    }
1474e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadInt32());
1475e0dac50fSopenharmony_ci    screenGroupId = static_cast<ScreenId>(reply.ReadUint64());
1476e0dac50fSopenharmony_ci    return ret;
1477e0dac50fSopenharmony_ci}
1478e0dac50fSopenharmony_ci
1479e0dac50fSopenharmony_ciDMError DisplayManagerProxy::StopExpand(const std::vector<ScreenId>& expandScreenIds)
1480e0dac50fSopenharmony_ci{
1481e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1482e0dac50fSopenharmony_ci    if (remote == nullptr) {
1483e0dac50fSopenharmony_ci        WLOGFW("StopExpand fail: remote is null");
1484e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1485e0dac50fSopenharmony_ci    }
1486e0dac50fSopenharmony_ci
1487e0dac50fSopenharmony_ci    MessageParcel data;
1488e0dac50fSopenharmony_ci    MessageParcel reply;
1489e0dac50fSopenharmony_ci    MessageOption option;
1490e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1491e0dac50fSopenharmony_ci        WLOGFE("StopExpand fail: WriteInterfaceToken failed");
1492e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
1493e0dac50fSopenharmony_ci    }
1494e0dac50fSopenharmony_ci    bool res = data.WriteUInt64Vector(expandScreenIds);
1495e0dac50fSopenharmony_ci    if (!res) {
1496e0dac50fSopenharmony_ci        WLOGFE("StopExpand fail: data write failed");
1497e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1498e0dac50fSopenharmony_ci    }
1499e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCREEN_STOP_EXPAND),
1500e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1501e0dac50fSopenharmony_ci        WLOGFW("StopExpand fail: SendRequest failed");
1502e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1503e0dac50fSopenharmony_ci    }
1504e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
1505e0dac50fSopenharmony_ci}
1506e0dac50fSopenharmony_ci
1507e0dac50fSopenharmony_civoid DisplayManagerProxy::RemoveVirtualScreenFromGroup(std::vector<ScreenId> screens)
1508e0dac50fSopenharmony_ci{
1509e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1510e0dac50fSopenharmony_ci    if (remote == nullptr) {
1511e0dac50fSopenharmony_ci        WLOGFW("cancel make mirror or expand fail: remote is null");
1512e0dac50fSopenharmony_ci        return;
1513e0dac50fSopenharmony_ci    }
1514e0dac50fSopenharmony_ci
1515e0dac50fSopenharmony_ci    MessageParcel data;
1516e0dac50fSopenharmony_ci    MessageParcel reply;
1517e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
1518e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1519e0dac50fSopenharmony_ci        WLOGFE("cancel make mirror or expand fail: WriteInterfaceToken failed");
1520e0dac50fSopenharmony_ci        return;
1521e0dac50fSopenharmony_ci    }
1522e0dac50fSopenharmony_ci    bool res = data.WriteUInt64Vector(screens);
1523e0dac50fSopenharmony_ci    if (!res) {
1524e0dac50fSopenharmony_ci        WLOGFE("cancel make mirror or expand fail: write screens failed.");
1525e0dac50fSopenharmony_ci        return;
1526e0dac50fSopenharmony_ci    }
1527e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(
1528e0dac50fSopenharmony_ci        DisplayManagerMessage::TRANS_ID_REMOVE_VIRTUAL_SCREEN_FROM_SCREEN_GROUP),
1529e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1530e0dac50fSopenharmony_ci        WLOGFW("cancel make mirror or expand fail: SendRequest failed");
1531e0dac50fSopenharmony_ci    }
1532e0dac50fSopenharmony_ci}
1533e0dac50fSopenharmony_ci
1534e0dac50fSopenharmony_ciDMError DisplayManagerProxy::SetScreenActiveMode(ScreenId screenId, uint32_t modeId)
1535e0dac50fSopenharmony_ci{
1536e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1537e0dac50fSopenharmony_ci    if (remote == nullptr) {
1538e0dac50fSopenharmony_ci        WLOGFW("SetScreenActiveMode: remote is null");
1539e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1540e0dac50fSopenharmony_ci    }
1541e0dac50fSopenharmony_ci
1542e0dac50fSopenharmony_ci    MessageParcel data;
1543e0dac50fSopenharmony_ci    MessageParcel reply;
1544e0dac50fSopenharmony_ci    MessageOption option;
1545e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1546e0dac50fSopenharmony_ci        WLOGFE("SetScreenActiveMode: WriteInterfaceToken failed");
1547e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
1548e0dac50fSopenharmony_ci    }
1549e0dac50fSopenharmony_ci    if (!data.WriteUint64(screenId) || !data.WriteUint32(modeId)) {
1550e0dac50fSopenharmony_ci        WLOGFE("SetScreenActiveMode: write screenId/modeId failed");
1551e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1552e0dac50fSopenharmony_ci    }
1553e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_SCREEN_ACTIVE_MODE),
1554e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1555e0dac50fSopenharmony_ci        WLOGFE("SetScreenActiveMode: SendRequest failed");
1556e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1557e0dac50fSopenharmony_ci    }
1558e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
1559e0dac50fSopenharmony_ci}
1560e0dac50fSopenharmony_ci
1561e0dac50fSopenharmony_ciDMError DisplayManagerProxy::SetVirtualPixelRatio(ScreenId screenId, float virtualPixelRatio)
1562e0dac50fSopenharmony_ci{
1563e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1564e0dac50fSopenharmony_ci    if (remote == nullptr) {
1565e0dac50fSopenharmony_ci        WLOGFW("SetVirtualPixelRatio: remote is null");
1566e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1567e0dac50fSopenharmony_ci    }
1568e0dac50fSopenharmony_ci
1569e0dac50fSopenharmony_ci    MessageParcel data;
1570e0dac50fSopenharmony_ci    MessageParcel reply;
1571e0dac50fSopenharmony_ci    MessageOption option;
1572e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1573e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1574e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
1575e0dac50fSopenharmony_ci    }
1576e0dac50fSopenharmony_ci    if (!data.WriteUint64(screenId) || !data.WriteFloat(virtualPixelRatio)) {
1577e0dac50fSopenharmony_ci        WLOGFE("write screenId/modeId failed");
1578e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1579e0dac50fSopenharmony_ci    }
1580e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_VIRTUAL_PIXEL_RATIO),
1581e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1582e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1583e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1584e0dac50fSopenharmony_ci    }
1585e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
1586e0dac50fSopenharmony_ci}
1587e0dac50fSopenharmony_ci
1588e0dac50fSopenharmony_ciDMError DisplayManagerProxy::SetResolution(ScreenId screenId, uint32_t width, uint32_t height, float virtualPixelRatio)
1589e0dac50fSopenharmony_ci{
1590e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1591e0dac50fSopenharmony_ci    if (remote == nullptr) {
1592e0dac50fSopenharmony_ci        WLOGFW("SetResolution: remote is null");
1593e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1594e0dac50fSopenharmony_ci    }
1595e0dac50fSopenharmony_ci
1596e0dac50fSopenharmony_ci    MessageParcel data;
1597e0dac50fSopenharmony_ci    MessageParcel reply;
1598e0dac50fSopenharmony_ci    MessageOption option;
1599e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1600e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1601e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
1602e0dac50fSopenharmony_ci    }
1603e0dac50fSopenharmony_ci    if (!data.WriteUint64(screenId) || !data.WriteUint32(width) ||
1604e0dac50fSopenharmony_ci        !data.WriteUint32(height) || !data.WriteFloat(virtualPixelRatio)) {
1605e0dac50fSopenharmony_ci        WLOGFE("write screenId/width/height/virtualPixelRatio failed");
1606e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1607e0dac50fSopenharmony_ci    }
1608e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_RESOLUTION),
1609e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1610e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1611e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1612e0dac50fSopenharmony_ci    }
1613e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
1614e0dac50fSopenharmony_ci}
1615e0dac50fSopenharmony_ci
1616e0dac50fSopenharmony_ciDMError DisplayManagerProxy::GetDensityInCurResolution(ScreenId screenId, float& virtualPixelRatio)
1617e0dac50fSopenharmony_ci{
1618e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1619e0dac50fSopenharmony_ci    if (remote == nullptr) {
1620e0dac50fSopenharmony_ci        WLOGFW("GetDensityInCurResolution: remote is null");
1621e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1622e0dac50fSopenharmony_ci    }
1623e0dac50fSopenharmony_ci
1624e0dac50fSopenharmony_ci    MessageParcel data;
1625e0dac50fSopenharmony_ci    MessageParcel reply;
1626e0dac50fSopenharmony_ci    MessageOption option;
1627e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1628e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1629e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
1630e0dac50fSopenharmony_ci    }
1631e0dac50fSopenharmony_ci    if (!data.WriteUint64(screenId)) {
1632e0dac50fSopenharmony_ci        WLOGFE("write screenId failed");
1633e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1634e0dac50fSopenharmony_ci    }
1635e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_GET_DENSITY_IN_CURRENT_RESOLUTION),
1636e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1637e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1638e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1639e0dac50fSopenharmony_ci    }
1640e0dac50fSopenharmony_ci    virtualPixelRatio = reply.ReadFloat();
1641e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
1642e0dac50fSopenharmony_ci}
1643e0dac50fSopenharmony_ci
1644e0dac50fSopenharmony_ciDMError DisplayManagerProxy::IsScreenRotationLocked(bool& isLocked)
1645e0dac50fSopenharmony_ci{
1646e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1647e0dac50fSopenharmony_ci    if (remote == nullptr) {
1648e0dac50fSopenharmony_ci        WLOGFW("remote is nullptr");
1649e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1650e0dac50fSopenharmony_ci    }
1651e0dac50fSopenharmony_ci    MessageParcel data;
1652e0dac50fSopenharmony_ci    MessageParcel reply;
1653e0dac50fSopenharmony_ci    MessageOption option;
1654e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1655e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1656e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
1657e0dac50fSopenharmony_ci    }
1658e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_IS_SCREEN_ROTATION_LOCKED),
1659e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1660e0dac50fSopenharmony_ci        WLOGFW("SendRequest failed");
1661e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1662e0dac50fSopenharmony_ci    }
1663e0dac50fSopenharmony_ci    DMError ret = static_cast<DMError>(reply.ReadInt32());
1664e0dac50fSopenharmony_ci    isLocked = reply.ReadBool();
1665e0dac50fSopenharmony_ci    return ret;
1666e0dac50fSopenharmony_ci}
1667e0dac50fSopenharmony_ci
1668e0dac50fSopenharmony_ciDMError DisplayManagerProxy::SetScreenRotationLocked(bool isLocked)
1669e0dac50fSopenharmony_ci{
1670e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1671e0dac50fSopenharmony_ci    if (remote == nullptr) {
1672e0dac50fSopenharmony_ci        WLOGFW("remote is null");
1673e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1674e0dac50fSopenharmony_ci    }
1675e0dac50fSopenharmony_ci
1676e0dac50fSopenharmony_ci    MessageParcel data;
1677e0dac50fSopenharmony_ci    MessageParcel reply;
1678e0dac50fSopenharmony_ci    MessageOption option;
1679e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1680e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1681e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
1682e0dac50fSopenharmony_ci    }
1683e0dac50fSopenharmony_ci    if (!data.WriteBool(isLocked)) {
1684e0dac50fSopenharmony_ci        WLOGFE("write isLocked failed");
1685e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1686e0dac50fSopenharmony_ci    }
1687e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_SCREEN_ROTATION_LOCKED),
1688e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1689e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1690e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1691e0dac50fSopenharmony_ci    }
1692e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
1693e0dac50fSopenharmony_ci}
1694e0dac50fSopenharmony_ci
1695e0dac50fSopenharmony_ciDMError DisplayManagerProxy::SetScreenRotationLockedFromJs(bool isLocked)
1696e0dac50fSopenharmony_ci{
1697e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1698e0dac50fSopenharmony_ci    if (remote == nullptr) {
1699e0dac50fSopenharmony_ci        WLOGFW("remote is null");
1700e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1701e0dac50fSopenharmony_ci    }
1702e0dac50fSopenharmony_ci
1703e0dac50fSopenharmony_ci    MessageParcel data;
1704e0dac50fSopenharmony_ci    MessageParcel reply;
1705e0dac50fSopenharmony_ci    MessageOption option;
1706e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1707e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1708e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
1709e0dac50fSopenharmony_ci    }
1710e0dac50fSopenharmony_ci    if (!data.WriteBool(isLocked)) {
1711e0dac50fSopenharmony_ci        WLOGFE("write isLocked failed");
1712e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1713e0dac50fSopenharmony_ci    }
1714e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SET_SCREEN_ROTATION_LOCKED_FROM_JS),
1715e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1716e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1717e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1718e0dac50fSopenharmony_ci    }
1719e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
1720e0dac50fSopenharmony_ci}
1721e0dac50fSopenharmony_ci
1722e0dac50fSopenharmony_ciDMError DisplayManagerProxy::ResizeVirtualScreen(ScreenId screenId, uint32_t width, uint32_t height)
1723e0dac50fSopenharmony_ci{
1724e0dac50fSopenharmony_ci    WLOGFI("DisplayManagerProxy::ResizeVirtualScreen: ENTER");
1725e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1726e0dac50fSopenharmony_ci    if (remote == nullptr) {
1727e0dac50fSopenharmony_ci        WLOGFW("DisplayManagerProxy::ResizeVirtualScreen: remote is nullptr");
1728e0dac50fSopenharmony_ci        return DMError::DM_ERROR_REMOTE_CREATE_FAILED;
1729e0dac50fSopenharmony_ci    }
1730e0dac50fSopenharmony_ci
1731e0dac50fSopenharmony_ci    MessageParcel data;
1732e0dac50fSopenharmony_ci    MessageParcel reply;
1733e0dac50fSopenharmony_ci    MessageOption option;
1734e0dac50fSopenharmony_ci
1735e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1736e0dac50fSopenharmony_ci        WLOGFE("DisplayManagerProxy::ResizeVirtualScreen: WriteInterfaceToken failed");
1737e0dac50fSopenharmony_ci        return DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED;
1738e0dac50fSopenharmony_ci    }
1739e0dac50fSopenharmony_ci    if (!data.WriteUint64(static_cast<uint64_t>(screenId))) {
1740e0dac50fSopenharmony_ci        WLOGFE("DisplayManagerProxy::ResizeVirtualScreen: WriteUnit64 screenId failed");
1741e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1742e0dac50fSopenharmony_ci    }
1743e0dac50fSopenharmony_ci    if (!data.WriteUint32(width)) {
1744e0dac50fSopenharmony_ci        WLOGFE("DisplayManagerProxy::ResizeVirtualScreen: WriteUnit32 width failed");
1745e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1746e0dac50fSopenharmony_ci    }
1747e0dac50fSopenharmony_ci    if (!data.WriteUint32(height)) {
1748e0dac50fSopenharmony_ci        WLOGFE("DisplayManagerProxy::ResizeVirtualScreen: WriteUnit32 height failed");
1749e0dac50fSopenharmony_ci        return DMError::DM_ERROR_IPC_FAILED;
1750e0dac50fSopenharmony_ci    }
1751e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_RESIZE_VIRTUAL_SCREEN),
1752e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1753e0dac50fSopenharmony_ci        WLOGFE("DisplayManagerProxy::ResizeVirtualScreen fail: SendRequest failed");
1754e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1755e0dac50fSopenharmony_ci    }
1756e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
1757e0dac50fSopenharmony_ci}
1758e0dac50fSopenharmony_ci
1759e0dac50fSopenharmony_ciDMError DisplayManagerProxy::MakeUniqueScreen(const std::vector<ScreenId>& screenIds)
1760e0dac50fSopenharmony_ci{
1761e0dac50fSopenharmony_ci    WLOGFI("DisplayManagerProxy::MakeUniqueScreen");
1762e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1763e0dac50fSopenharmony_ci    if (remote == nullptr) {
1764e0dac50fSopenharmony_ci        WLOGFW("make unique screen failed: remote is null");
1765e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1766e0dac50fSopenharmony_ci    }
1767e0dac50fSopenharmony_ci
1768e0dac50fSopenharmony_ci    MessageParcel data;
1769e0dac50fSopenharmony_ci    MessageParcel reply;
1770e0dac50fSopenharmony_ci    MessageOption option;
1771e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1772e0dac50fSopenharmony_ci        WLOGFE("MakeUniqueScreen writeInterfaceToken failed");
1773e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1774e0dac50fSopenharmony_ci    }
1775e0dac50fSopenharmony_ci    if (!data.WriteUint32(screenIds.size())) {
1776e0dac50fSopenharmony_ci        WLOGFE("MakeUniqueScreen write screenIds size failed");
1777e0dac50fSopenharmony_ci        return DMError::DM_ERROR_INVALID_PARAM;
1778e0dac50fSopenharmony_ci    }
1779e0dac50fSopenharmony_ci    bool res = data.WriteUInt64Vector(screenIds);
1780e0dac50fSopenharmony_ci    if (!res) {
1781e0dac50fSopenharmony_ci        WLOGFE("MakeUniqueScreen fail: write screens failed");
1782e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1783e0dac50fSopenharmony_ci    }
1784e0dac50fSopenharmony_ci    if (remote->SendRequest(
1785e0dac50fSopenharmony_ci        static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_SCENE_BOARD_MAKE_UNIQUE_SCREEN),
1786e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1787e0dac50fSopenharmony_ci        WLOGFE("MakeUniqueScreen fail: SendRequest failed");
1788e0dac50fSopenharmony_ci        return DMError::DM_ERROR_NULLPTR;
1789e0dac50fSopenharmony_ci    }
1790e0dac50fSopenharmony_ci    return static_cast<DMError>(reply.ReadInt32());
1791e0dac50fSopenharmony_ci}
1792e0dac50fSopenharmony_ci
1793e0dac50fSopenharmony_cistd::vector<DisplayPhysicalResolution> DisplayManagerProxy::GetAllDisplayPhysicalResolution()
1794e0dac50fSopenharmony_ci{
1795e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1796e0dac50fSopenharmony_ci    if (remote == nullptr) {
1797e0dac50fSopenharmony_ci        TLOGE(WmsLogTag::DMS, "remote is nullptr");
1798e0dac50fSopenharmony_ci        return std::vector<DisplayPhysicalResolution> {};
1799e0dac50fSopenharmony_ci    }
1800e0dac50fSopenharmony_ci    MessageOption option;
1801e0dac50fSopenharmony_ci    MessageParcel reply;
1802e0dac50fSopenharmony_ci    MessageParcel data;
1803e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1804e0dac50fSopenharmony_ci        TLOGE(WmsLogTag::DMS, "WriteInterfaceToken failed");
1805e0dac50fSopenharmony_ci        return std::vector<DisplayPhysicalResolution> {};
1806e0dac50fSopenharmony_ci    }
1807e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(DisplayManagerMessage::TRANS_ID_GET_ALL_PHYSICAL_DISPLAY_RESOLUTION),
1808e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1809e0dac50fSopenharmony_ci        TLOGE(WmsLogTag::DMS, "SendRequest failed");
1810e0dac50fSopenharmony_ci        return std::vector<DisplayPhysicalResolution> {};
1811e0dac50fSopenharmony_ci    }
1812e0dac50fSopenharmony_ci    std::vector<DisplayPhysicalResolution> allPhysicalSize;
1813e0dac50fSopenharmony_ci    int32_t displayInfoSize = 0;
1814e0dac50fSopenharmony_ci    bool readRet = reply.ReadInt32(displayInfoSize);
1815e0dac50fSopenharmony_ci    if (!readRet || displayInfoSize <= 0) {
1816e0dac50fSopenharmony_ci        TLOGE(WmsLogTag::DMS, "read failed");
1817e0dac50fSopenharmony_ci        return std::vector<DisplayPhysicalResolution> {};
1818e0dac50fSopenharmony_ci    }
1819e0dac50fSopenharmony_ci    for (int32_t i = 0; i < displayInfoSize; i++) {
1820e0dac50fSopenharmony_ci        DisplayPhysicalResolution physicalItem;
1821e0dac50fSopenharmony_ci        physicalItem.foldDisplayMode_ = static_cast<FoldDisplayMode>(reply.ReadUint32());
1822e0dac50fSopenharmony_ci        physicalItem.physicalWidth_ = reply.ReadUint32();
1823e0dac50fSopenharmony_ci        physicalItem.physicalHeight_ = reply.ReadUint32();
1824e0dac50fSopenharmony_ci        allPhysicalSize.emplace_back(physicalItem);
1825e0dac50fSopenharmony_ci    }
1826e0dac50fSopenharmony_ci    return allPhysicalSize;
1827e0dac50fSopenharmony_ci}
1828e0dac50fSopenharmony_ci} // namespace OHOS::Rosen