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