1 /*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #ifndef LOG_TAG
16 #define LOG_TAG "PolicyProviderProxy"
17 #endif
18
19 #include "policy_provider_proxy.h"
20 #include "audio_service_log.h"
21 #include "audio_errors.h"
22
23 namespace OHOS {
24 namespace AudioStandard {
PolicyProviderProxy(const sptr<IRemoteObject> & impl)25 PolicyProviderProxy::PolicyProviderProxy(const sptr<IRemoteObject> &impl) : IRemoteProxy<IPolicyProviderIpc>(impl)
26 {
27 }
28
~PolicyProviderProxy()29 PolicyProviderProxy::~PolicyProviderProxy()
30 {
31 }
32
GetProcessDeviceInfo(const AudioProcessConfig & config,bool lockFlag,DeviceInfo & deviceInfo)33 int32_t PolicyProviderProxy::GetProcessDeviceInfo(const AudioProcessConfig &config, bool lockFlag,
34 DeviceInfo &deviceInfo)
35 {
36 MessageParcel data;
37 MessageParcel reply;
38 MessageOption option;
39
40 CHECK_AND_RETURN_RET_LOG(data.WriteInterfaceToken(GetDescriptor()), ERROR, "Write descriptor failed!");
41
42 ProcessConfig::WriteConfigToParcel(config, data);
43 data.WriteBool(lockFlag);
44 int ret = Remote()->SendRequest(IPolicyProviderMsg::GET_DEVICE_INFO, data, reply, option);
45 CHECK_AND_RETURN_RET_LOG(ret == AUDIO_OK, ERR_OPERATION_FAILED, "GetProcessDeviceInfo failed, error: %{public}d",
46 ret);
47 deviceInfo.Unmarshalling(reply);
48 return SUCCESS;
49 }
50
InitSharedVolume(std::shared_ptr<AudioSharedMemory> & buffer)51 int32_t PolicyProviderProxy::InitSharedVolume(std::shared_ptr<AudioSharedMemory> &buffer)
52 {
53 MessageParcel data;
54 MessageParcel reply;
55 MessageOption option;
56
57 CHECK_AND_RETURN_RET_LOG(data.WriteInterfaceToken(GetDescriptor()), ERROR, "Write descriptor failed!");
58
59 int ret = Remote()->SendRequest(IPolicyProviderMsg::INIT_VOLUME_MAP, data, reply, option);
60 CHECK_AND_RETURN_RET_LOG(ret == AUDIO_OK, ERR_OPERATION_FAILED, "InitSharedVolume failed, error: %{public}d", ret);
61 buffer = AudioSharedMemory::ReadFromParcel(reply);
62 CHECK_AND_RETURN_RET_LOG(buffer != nullptr, ERR_OPERATION_FAILED, "ReadFromParcel failed");
63 return SUCCESS;
64 }
65
SetWakeUpAudioCapturerFromAudioServer(const AudioProcessConfig & config)66 int32_t PolicyProviderProxy::SetWakeUpAudioCapturerFromAudioServer(const AudioProcessConfig &config)
67 {
68 MessageParcel data;
69 MessageParcel reply;
70 MessageOption option;
71
72 CHECK_AND_RETURN_RET_LOG(data.WriteInterfaceToken(GetDescriptor()), ERROR, "Write descriptor failed!");
73
74 ProcessConfig::WriteConfigToParcel(config, data);
75 int ret = Remote()->SendRequest(IPolicyProviderMsg::SET_WAKEUP_ADUIO_CAPTURER, data, reply, option);
76 CHECK_AND_RETURN_RET_LOG(ret == AUDIO_OK, ERR_OPERATION_FAILED, "failed, error: %{public}d", ret);
77
78 return reply.ReadInt32();
79 }
80
NotifyCapturerAdded(AudioCapturerInfo capturerInfo,AudioStreamInfo streamInfo,uint32_t sessionId)81 int32_t PolicyProviderProxy::NotifyCapturerAdded(AudioCapturerInfo capturerInfo, AudioStreamInfo streamInfo,
82 uint32_t sessionId)
83 {
84 MessageParcel data;
85 MessageParcel reply;
86 MessageOption option;
87
88 CHECK_AND_RETURN_RET_LOG(data.WriteInterfaceToken(GetDescriptor()), ERROR, "Write descriptor failed!");
89 capturerInfo.Marshalling(data);
90 streamInfo.Marshalling(data);
91 data.WriteUint32(sessionId);
92
93 int ret = Remote()->SendRequest(IPolicyProviderMsg::SET_AUDIO_CAPTURER, data, reply, option);
94 CHECK_AND_RETURN_RET_LOG(ret == AUDIO_OK, ERR_OPERATION_FAILED, "failed, error: %{public}d", ret);
95
96 return reply.ReadInt32();
97 }
98
NotifyWakeUpCapturerRemoved()99 int32_t PolicyProviderProxy::NotifyWakeUpCapturerRemoved()
100 {
101 MessageParcel data;
102 MessageParcel reply;
103 MessageOption option;
104
105 CHECK_AND_RETURN_RET_LOG(data.WriteInterfaceToken(GetDescriptor()), ERROR, "Write descriptor failed!");
106
107 int ret = Remote()->SendRequest(IPolicyProviderMsg::REMOVE_WAKEUP_CAPUTER, data, reply, option);
108 CHECK_AND_RETURN_RET_LOG(ret == AUDIO_OK, ERR_OPERATION_FAILED, "failed, error: %{public}d", ret);
109
110 return reply.ReadInt32();
111 }
112
IsAbsVolumeSupported()113 bool PolicyProviderProxy::IsAbsVolumeSupported()
114 {
115 MessageParcel data;
116 MessageParcel reply;
117 MessageOption option;
118
119 CHECK_AND_RETURN_RET_LOG(data.WriteInterfaceToken(GetDescriptor()), ERROR, "Write descriptor failed!");
120
121 int ret = Remote()->SendRequest(IPolicyProviderMsg::IS_ABS_VOLUME_SUPPORTED, data, reply, option);
122 CHECK_AND_RETURN_RET_LOG(ret == AUDIO_OK, ERR_OPERATION_FAILED, "failed, error: %{public}d", ret);
123
124 return reply.ReadBool();
125 }
126
OffloadGetRenderPosition(uint32_t & delayValue,uint64_t & sendDataSize,uint32_t & timeStamp)127 int32_t PolicyProviderProxy::OffloadGetRenderPosition(uint32_t &delayValue, uint64_t &sendDataSize, uint32_t &timeStamp)
128 {
129 MessageParcel data;
130 MessageParcel reply;
131 MessageOption option;
132
133 CHECK_AND_RETURN_RET_LOG(data.WriteInterfaceToken(GetDescriptor()), ERROR, "Write descriptor failed!");
134
135 int ret = Remote()->SendRequest(IPolicyProviderMsg::OFFLOAD_GET_RENDER_POSITION, data, reply, option);
136 CHECK_AND_RETURN_RET_LOG(ret == AUDIO_OK, ERR_OPERATION_FAILED, "failed, error: %{public}d", ret);
137 ret = reply.ReadInt32();
138 delayValue = reply.ReadUint32();
139 sendDataSize = reply.ReadUint64();
140 timeStamp = reply.ReadUint32();
141 return ret;
142 }
143
GetAndSaveClientType(uint32_t uid,const std::string & bundleName)144 int32_t PolicyProviderProxy::GetAndSaveClientType(uint32_t uid, const std::string &bundleName)
145 {
146 MessageParcel data;
147 MessageParcel reply;
148 MessageOption option;
149
150 CHECK_AND_RETURN_RET_LOG(data.WriteInterfaceToken(GetDescriptor()), ERROR, "Write descriptor failed!");
151
152 data.WriteUint32(uid);
153 data.WriteString(bundleName);
154 int ret = Remote()->SendRequest(IPolicyProviderMsg::GET_AND_SAVE_CLIENT_TYPE, data, reply, option);
155 CHECK_AND_RETURN_RET_LOG(ret == AUDIO_OK, ERR_OPERATION_FAILED, "failed, error: %{public}d", ret);
156 ret = reply.ReadInt32();
157 return ret;
158 }
159
GetMaxRendererInstances()160 int32_t PolicyProviderProxy::GetMaxRendererInstances()
161 {
162 MessageParcel data;
163 MessageParcel reply;
164 MessageOption option;
165
166 CHECK_AND_RETURN_RET_LOG(data.WriteInterfaceToken(GetDescriptor()), ERROR, "Write descriptor failed!");
167
168 int ret = Remote()->SendRequest(IPolicyProviderMsg::GET_MAX_RENDERER_INSTANCES, data, reply, option);
169 CHECK_AND_RETURN_RET_LOG(ret == AUDIO_OK, ERR_OPERATION_FAILED, "failed, error: %{public}d", ret);
170
171 return reply.ReadInt32();
172 }
173
ActivateConcurrencyFromServer(AudioPipeType incomingPipe)174 int32_t PolicyProviderProxy::ActivateConcurrencyFromServer(AudioPipeType incomingPipe)
175 {
176 MessageParcel data;
177 MessageParcel reply;
178 MessageOption option;
179
180 CHECK_AND_RETURN_RET_LOG(data.WriteInterfaceToken(GetDescriptor()), ERROR, "Write descriptor failed!");
181
182 data.WriteInt32(incomingPipe);
183 int ret = Remote()->SendRequest(IPolicyProviderMsg::ACTIVATE_CONCURRENCY_FROM_SERVER, data, reply, option);
184 CHECK_AND_RETURN_RET_LOG(ret == AUDIO_OK, ERR_OPERATION_FAILED,
185 "failed, error: %{public}d", ret);
186 return reply.ReadInt32();
187 }
188 } // namespace AudioStandard
189 } // namespace OHOS
190