1 /*
2  * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef I_AUDIO_POLICY_BASE_H
17 #define I_AUDIO_POLICY_BASE_H
18 
19 #include "audio_interrupt_callback.h"
20 #include "audio_policy_ipc_interface_code.h"
21 #include "ipc_types.h"
22 #include "iremote_broker.h"
23 #include "iremote_proxy.h"
24 #include "iremote_stub.h"
25 #include "audio_system_manager.h"
26 #include "audio_effect.h"
27 #include "microphone_descriptor.h"
28 
29 namespace OHOS {
30 namespace AudioStandard {
31 using InternalDeviceType = DeviceType;
32 using InternalAudioCapturerOptions = AudioCapturerOptions;
33 
34 class IAudioPolicy : public IRemoteBroker {
35 public:
36 
37     virtual int32_t GetMaxVolumeLevel(AudioVolumeType volumeType) = 0;
38 
39     virtual int32_t GetMinVolumeLevel(AudioVolumeType volumeType) = 0;
40 
41     virtual int32_t SetSystemVolumeLevelLegacy(AudioVolumeType volumeType, int32_t volumeLevel) = 0;
42 
43     virtual int32_t SetSystemVolumeLevel(AudioVolumeType volumeType, int32_t volumeLevel, int32_t volumeFlag = 0) = 0;
44 
45     virtual AudioStreamType GetSystemActiveVolumeType(const int32_t clientUid) = 0;
46 
47     virtual int32_t GetSystemVolumeLevel(AudioVolumeType volumeType) = 0;
48 
49     virtual int32_t SetLowPowerVolume(int32_t streamId, float volume) = 0;
50 
51     virtual float GetLowPowerVolume(int32_t streamId) = 0;
52 
53     virtual float GetSingleStreamVolume(int32_t streamId) = 0;
54 
55     virtual int32_t SetStreamMuteLegacy(AudioVolumeType volumeType, bool mute) = 0;
56 
57     virtual int32_t SetStreamMute(AudioVolumeType volumeType, bool mute) = 0;
58 
59     virtual bool GetStreamMute(AudioVolumeType volumeType) = 0;
60 
61     virtual bool IsStreamActive(AudioVolumeType volumeType) = 0;
62 
63     virtual std::vector<sptr<AudioDeviceDescriptor>> GetDevices(DeviceFlag deviceFlag) = 0;
64 
65     virtual std::vector<sptr<AudioDeviceDescriptor>> GetDevicesInner(DeviceFlag deviceFlag) = 0;
66 
67     virtual int32_t SetDeviceActive(InternalDeviceType deviceType, bool active) = 0;
68 
69     virtual int32_t NotifyCapturerAdded(AudioCapturerInfo capturerInfo, AudioStreamInfo streamInfo,
70         uint32_t sessionId) = 0;
71 
72     virtual bool IsDeviceActive(InternalDeviceType deviceType) = 0;
73 
74     virtual DeviceType GetActiveOutputDevice() = 0;
75 
76     virtual DeviceType GetActiveInputDevice() = 0;
77 
78 #ifdef FEATURE_DTMF_TONE
79     virtual std::shared_ptr<ToneInfo> GetToneConfig(int32_t ltonetype) = 0;
80 
81     virtual std::vector<int32_t> GetSupportedTones() = 0;
82 #endif
83 
84     virtual int32_t SetRingerModeLegacy(AudioRingerMode ringMode) = 0;
85 
86     virtual int32_t SetRingerMode(AudioRingerMode ringMode) = 0;
87 
88     virtual AudioRingerMode GetRingerMode() = 0;
89 
90     virtual int32_t SetAudioScene(AudioScene scene) = 0;
91 
92     virtual int32_t SetMicrophoneMute(bool isMute) = 0;
93 
94     virtual int32_t SetMicrophoneMuteAudioConfig(bool isMute) = 0;
95 
96     virtual int32_t SetMicrophoneMutePersistent(const bool isMute, const PolicyType type) = 0;
97 
98     virtual bool GetPersistentMicMuteState() = 0;
99 
100     virtual bool IsMicrophoneMuteLegacy() = 0;
101 
102     virtual bool IsMicrophoneMute() = 0;
103 
104     virtual AudioScene GetAudioScene() = 0;
105 
106     virtual int32_t ActivateAudioSession(const AudioSessionStrategy &strategy) = 0;
107 
108     virtual int32_t DeactivateAudioSession() = 0;
109 
110     virtual bool IsAudioSessionActivated() = 0;
111 
112     virtual int32_t SetAudioInterruptCallback(const uint32_t sessionID, const sptr<IRemoteObject> &object,
113         uint32_t clientUid, const int32_t zoneID = 0 /* default value: 0 -- local device */) = 0;
114 
115     virtual int32_t UnsetAudioInterruptCallback(const uint32_t sessionID,
116         const int32_t zoneID = 0 /* default value: 0 -- local device */) = 0;
117 
118     virtual int32_t ActivateAudioInterrupt(const AudioInterrupt &audioInterrupt,
119         const int32_t zoneID = 0 /* default value: 0 -- local device */,
120         const bool isUpdatedAudioStrategy = false /* default value: false -- is update audio strategy */) = 0;
121 
122     virtual int32_t DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt,
123         const int32_t zoneID = 0 /* default value: 0 -- local device */) = 0;
124 
125     virtual int32_t SetAudioManagerInterruptCallback(const int32_t clientId, const sptr<IRemoteObject> &object) = 0;
126 
127     virtual int32_t UnsetAudioManagerInterruptCallback(const int32_t clientId) = 0;
128 
129     virtual int32_t SetQueryClientTypeCallback(const sptr<IRemoteObject> &object) = 0;
130 
131     virtual int32_t RequestAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt) = 0;
132 
133     virtual int32_t AbandonAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt) = 0;
134 
135     virtual AudioStreamType GetStreamInFocus(const int32_t zoneID = 0 /* default value: 0 -- local device */) = 0;
136 
137     virtual int32_t GetSessionInfoInFocus(AudioInterrupt &audioInterrupt,
138         const int32_t zoneID = 0 /* default value: 0 -- local device */) = 0;
139 
140     virtual bool CheckRecordingCreate(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
141         SourceType sourceType = SOURCE_TYPE_MIC) = 0;
142 
143     virtual bool CheckRecordingStateChange(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
144         AudioPermissionState state) = 0;
145 
146     virtual int32_t ReconfigureAudioChannel(const uint32_t &count, DeviceType deviceType) = 0;
147 
148     virtual int32_t GetAudioLatencyFromXml() = 0;
149 
150     virtual uint32_t GetSinkLatencyFromXml() = 0;
151 
152     virtual int32_t GetPreferredOutputStreamType(AudioRendererInfo &rendererInfo) = 0;
153 
154     virtual int32_t GetPreferredInputStreamType(AudioCapturerInfo &capturerInfo) = 0;
155 
156     virtual int32_t RegisterTracker(AudioMode &mode,
157         AudioStreamChangeInfo &streamChangeInfo, const sptr<IRemoteObject> &object) = 0;
158 
159     virtual int32_t UpdateTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo) = 0;
160 
161     virtual int32_t GetCurrentRendererChangeInfos(
162         std::vector<std::unique_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos) = 0;
163 
164     virtual int32_t GetCurrentCapturerChangeInfos(
165         std::vector<std::unique_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos) = 0;
166 
167     virtual int32_t UpdateStreamState(const int32_t clientUid, StreamSetState streamSetState,
168                                             StreamUsage streamUsage) = 0;
169 
170     virtual int32_t SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,
171         std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors) = 0;
172 
173     virtual std::string GetSelectedDeviceInfo(int32_t uid, int32_t pid, AudioStreamType streamType) = 0;
174 
175     virtual int32_t SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,
176         std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors) = 0;
177 
178     virtual int32_t GetVolumeGroupInfos(std::string networkId, std::vector<sptr<VolumeGroupInfo>> &infos) = 0;
179 
180     virtual int32_t GetNetworkIdByGroupId(int32_t groupId, std::string &networkId) = 0;
181 
182     virtual bool IsAudioRendererLowLatencySupported(const AudioStreamInfo &audioStreamInfo) = 0;
183 
184     virtual std::vector<sptr<AudioDeviceDescriptor>> GetPreferredOutputDeviceDescriptors(
185         AudioRendererInfo &rendererInfo) = 0;
186 
187     virtual std::vector<sptr<AudioDeviceDescriptor>> GetPreferredInputDeviceDescriptors(
188         AudioCapturerInfo &captureInfo) = 0;
189 
190     virtual int32_t SetClientCallbacksEnable(const CallbackChange &callbackchange, const bool &enable) = 0;
191 
192     virtual int32_t GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt, AudioFocuState>> &focusInfoList,
193         const int32_t zoneID = 0 /* default value: 0 -- local device */) = 0;
194 
195     virtual int32_t SetSystemSoundUri(const std::string &key, const std::string &uri) = 0;
196 
197     virtual std::string GetSystemSoundUri(const std::string &key) = 0;
198 
199     virtual float GetMinStreamVolume(void) = 0;
200 
201     virtual float GetMaxStreamVolume(void) = 0;
202 
203     virtual int32_t CheckMaxRendererInstances() = 0;
204 
205     virtual bool IsVolumeUnadjustable(void) = 0;
206 
207     virtual int32_t AdjustVolumeByStep(VolumeAdjustType adjustType) = 0;
208 
209     virtual int32_t AdjustSystemVolumeByStep(AudioVolumeType volumeType, VolumeAdjustType adjustType) = 0;
210 
211     virtual float GetSystemVolumeInDb(AudioVolumeType volumeType, int32_t volumeLevel, DeviceType deviceType) = 0;
212 
213     virtual int32_t QueryEffectSceneMode(SupportedEffectConfig &supportedEffectConfig) = 0;
214 
215     virtual int32_t SetPlaybackCapturerFilterInfos(const AudioPlaybackCaptureConfig &config, uint32_t appTokenId) = 0;
216 
217     virtual int32_t SetCaptureSilentState(bool state) = 0;
218 
219     virtual int32_t GetHardwareOutputSamplingRate(const sptr<AudioDeviceDescriptor> &desc) = 0;
220 
221     virtual std::vector<sptr<MicrophoneDescriptor>> GetAudioCapturerMicrophoneDescriptors(int32_t sessionId) = 0;
222 
223     virtual std::vector<sptr<MicrophoneDescriptor>> GetAvailableMicrophones() = 0;
224 
225     virtual int32_t SetDeviceAbsVolumeSupported(const std::string &macAddress, const bool support) = 0;
226 
227     virtual bool IsAbsVolumeScene() = 0;
228 
229     virtual bool IsVgsVolumeSupported() = 0;
230 
231     virtual int32_t SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume, bool updateUi) = 0;
232 
233     virtual std::vector<std::unique_ptr<AudioDeviceDescriptor>> GetAvailableDevices(AudioDeviceUsage usage) = 0;
234 
235     virtual int32_t SetAvailableDeviceChangeCallback(const int32_t clientId, const AudioDeviceUsage usage,
236         const sptr<IRemoteObject> &object) = 0;
237 
238     virtual int32_t UnsetAvailableDeviceChangeCallback(const int32_t clientId, AudioDeviceUsage usage) = 0;
239 
240     virtual int32_t ConfigDistributedRoutingRole(const sptr<AudioDeviceDescriptor> descriptor, CastType type) = 0;
241 
242     virtual int32_t SetDistributedRoutingRoleCallback(const sptr<IRemoteObject> &object) = 0;
243 
244     virtual int32_t UnsetDistributedRoutingRoleCallback() = 0;
245 
246     virtual bool IsSpatializationEnabled() = 0;
247 
248     virtual bool IsSpatializationEnabled(const std::string address) = 0;
249 
250     virtual int32_t SetSpatializationEnabled(const bool enable) = 0;
251 
252     virtual int32_t SetSpatializationEnabled(const sptr<AudioDeviceDescriptor> &selectedAudioDevice,
253         const bool enable) = 0;
254 
255     virtual bool IsHeadTrackingEnabled() = 0;
256 
257     virtual bool IsHeadTrackingEnabled(const std::string address) = 0;
258 
259     virtual int32_t SetHeadTrackingEnabled(const bool enable) = 0;
260 
261     virtual int32_t SetHeadTrackingEnabled(const sptr<AudioDeviceDescriptor> &selectedAudioDevice,
262         const bool enable) = 0;
263 
264     virtual AudioSpatializationState GetSpatializationState(const StreamUsage streamUsage) = 0;
265 
266     virtual bool IsSpatializationSupported() = 0;
267 
268     virtual bool IsSpatializationSupportedForDevice(const std::string address) = 0;
269 
270     virtual bool IsHeadTrackingSupported() = 0;
271 
272     virtual bool IsHeadTrackingSupportedForDevice(const std::string address) = 0;
273 
274     virtual int32_t UpdateSpatialDeviceState(const AudioSpatialDeviceState audioSpatialDeviceState) = 0;
275 
276     virtual int32_t RegisterSpatializationStateEventListener(const uint32_t sessionID, const StreamUsage streamUsage,
277         const sptr<IRemoteObject> &object) = 0;
278 
279     virtual int32_t UnregisterSpatializationStateEventListener(const uint32_t sessionID) = 0;
280 
281     virtual int32_t RegisterPolicyCallbackClient(const sptr<IRemoteObject> &object,
282         const int32_t zoneID = 0 /* default value: 0 -- local device */) = 0;
283 
284     virtual int32_t CreateAudioInterruptZone(const std::set<int32_t> &pids,
285         const int32_t zoneID = 0 /* default value: 0 -- local device */) = 0;
286 
287     virtual int32_t AddAudioInterruptZonePids(const std::set<int32_t> &pids,
288         const int32_t zoneID = 0 /* default value: 0 -- local device */) = 0;
289 
290     virtual int32_t RemoveAudioInterruptZonePids(const std::set<int32_t> &pids,
291         const int32_t zoneID = 0 /* default value: 0 -- local device */) = 0;
292 
293     virtual int32_t ReleaseAudioInterruptZone(const int32_t zoneID = 0 /* default value: 0 -- local device */) = 0;
294 
295     virtual int32_t SetCallDeviceActive(InternalDeviceType deviceType, bool active, std::string address) = 0;
296 
297     virtual std::unique_ptr<AudioDeviceDescriptor> GetActiveBluetoothDevice() = 0;
298 
299     virtual ConverterConfig GetConverterConfig() = 0;
300 
301     virtual void FetchOutputDeviceForTrack(AudioStreamChangeInfo &streamChangeInfo,
302         const AudioStreamDeviceChangeReasonExt reason) = 0;
303 
304     virtual void FetchInputDeviceForTrack(AudioStreamChangeInfo &streamChangeInfo) = 0;
305 
306     virtual bool IsHighResolutionExist(void) = 0;
307 
308     virtual int32_t SetHighResolutionExist(bool highResExist) = 0;
309 
310     virtual AudioSpatializationSceneType GetSpatializationSceneType() = 0;
311 
312     virtual int32_t SetSpatializationSceneType(const AudioSpatializationSceneType spatializationSceneType) = 0;
313 
314     virtual float GetMaxAmplitude(const int32_t deviceId) = 0;
315 
316     virtual int32_t DisableSafeMediaVolume() = 0;
317 
318     virtual bool IsHeadTrackingDataRequested(const std::string &macAddress) = 0;
319 
320     virtual int32_t SetAudioDeviceRefinerCallback(const sptr<IRemoteObject> &object) = 0;
321 
322     virtual int32_t UnsetAudioDeviceRefinerCallback() = 0;
323 
324     virtual int32_t TriggerFetchDevice(AudioStreamDeviceChangeReasonExt reason) = 0;
325 
326     virtual int32_t SetPreferredDevice(const PreferredType preferredType,
327         const sptr<AudioDeviceDescriptor> &desc) = 0;
328 
329     virtual int32_t SetAudioConcurrencyCallback(const uint32_t sessionID, const sptr<IRemoteObject> &object) = 0;
330 
331     virtual int32_t UnsetAudioConcurrencyCallback(const uint32_t sessionID) = 0;
332 
333     virtual int32_t ActivateAudioConcurrency(const AudioPipeType &pipeType) = 0;
334 
335     virtual int32_t MoveToNewPipe(const uint32_t sessionId, const AudioPipeType pipeType) = 0;
336 
337     virtual int32_t InjectInterruption(const std::string networkId, InterruptEvent &event) = 0;
338 
339     virtual void SaveRemoteInfo(const std::string &networkId, DeviceType deviceType) = 0;
340 
341     virtual int32_t SetDefaultOutputDevice(const DeviceType deviceType, const uint32_t sessionID,
342         const StreamUsage streamUsage, bool isRunning) = 0;
343 
344     virtual int32_t LoadSplitModule(const std::string &splitArgs, const std::string &networkId) = 0;
345 
346     virtual int32_t SetVoiceRingtoneMute(bool isMute) = 0;
347 
348 public:
349     DECLARE_INTERFACE_DESCRIPTOR(u"IAudioPolicy");
350 };
351 } // namespace AudioStandard
352 } // namespace OHOS
353 #endif // I_AUDIO_POLICY_BASE_H
354