• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 ST_AUDIO_DEVICE_MANAGER_H
16 #define ST_AUDIO_DEVICE_MANAGER_H
17 
18 #include <list>
19 #include <string>
20 #include <memory>
21 #include <unordered_map>
22 #include "audio_info.h"
23 #include "audio_device_info.h"
24 #include "audio_system_manager.h"
25 
26 namespace OHOS {
27 namespace AudioStandard {
28 using namespace std;
29 
30 constexpr int32_t NEED_TO_FETCH = 1;
31 
32 typedef function<bool(const std::unique_ptr<AudioDeviceDescriptor> &desc)> IsPresentFunc;
33 std::string GetEncryptAddr(const std::string &addr);
34 class AudioDeviceManager {
35 public:
GetAudioDeviceManager()36     static AudioDeviceManager& GetAudioDeviceManager()
37     {
38         static AudioDeviceManager audioDeviceManager;
39         return audioDeviceManager;
40     }
41 
42     void AddNewDevice(const sptr<AudioDeviceDescriptor> &devDesc);
43     void RemoveNewDevice(const sptr<AudioDeviceDescriptor> &devDesc);
44     void OnXmlParsingCompleted(const unordered_map<AudioDevicePrivacyType, list<DevicePrivacyInfo>> &xmlData);
45     int32_t GetDeviceUsageFromType(const DeviceType devType) const;
46     void ParseDeviceXml();
47     void UpdateDevicesListInfo(const sptr<AudioDeviceDescriptor> &deviceDescriptor,
48         const DeviceInfoUpdateCommand updateCommand);
49 
50     vector<unique_ptr<AudioDeviceDescriptor>> GetRemoteRenderDevices();
51     vector<unique_ptr<AudioDeviceDescriptor>> GetRemoteCaptureDevices();
52     vector<unique_ptr<AudioDeviceDescriptor>> GetCommRenderPrivacyDevices();
53     vector<unique_ptr<AudioDeviceDescriptor>> GetCommRenderPublicDevices();
54     vector<unique_ptr<AudioDeviceDescriptor>> GetCommRenderBTCarDevices();
55     vector<unique_ptr<AudioDeviceDescriptor>> GetCommCapturePrivacyDevices();
56     vector<unique_ptr<AudioDeviceDescriptor>> GetCommCapturePublicDevices();
57     vector<unique_ptr<AudioDeviceDescriptor>> GetMediaRenderPrivacyDevices();
58     vector<unique_ptr<AudioDeviceDescriptor>> GetMediaRenderPublicDevices();
59     vector<unique_ptr<AudioDeviceDescriptor>> GetMediaCapturePrivacyDevices();
60     vector<unique_ptr<AudioDeviceDescriptor>> GetMediaCapturePublicDevices();
61     vector<unique_ptr<AudioDeviceDescriptor>> GetCapturePrivacyDevices();
62     vector<unique_ptr<AudioDeviceDescriptor>> GetCapturePublicDevices();
63     vector<unique_ptr<AudioDeviceDescriptor>> GetRecongnitionCapturePrivacyDevices();
64     unique_ptr<AudioDeviceDescriptor> GetCommRenderDefaultDevice(StreamUsage streamUsage);
65     unique_ptr<AudioDeviceDescriptor> GetRenderDefaultDevice();
66     unique_ptr<AudioDeviceDescriptor> GetCaptureDefaultDevice();
67     unordered_map<AudioDevicePrivacyType, list<DevicePrivacyInfo>> GetDevicePrivacyMaps();
68     vector<unique_ptr<AudioDeviceDescriptor>> GetAvailableDevicesByUsage(AudioDeviceUsage usage);
69     void GetAvailableDevicesWithUsage(const AudioDeviceUsage usage,
70         const list<DevicePrivacyInfo> &deviceInfos, const sptr<AudioDeviceDescriptor> &dev,
71         std::vector<unique_ptr<AudioDeviceDescriptor>> &audioDeviceDescriptors);
72     vector<unique_ptr<AudioDeviceDescriptor>> GetAvailableBluetoothDevice(DeviceType devType,
73         const std::string &macAddress);
74     void UpdateScoState(const std::string &macAddress, bool isConnnected);
75     bool GetScoState();
76     vector<shared_ptr<AudioDeviceDescriptor>> GetDevicesByFilter(DeviceType devType, DeviceRole devRole,
77         const string &macAddress, const string &networkId, ConnectState connectState);
78     void UpdateEarpieceStatus(const bool hasEarPiece);
79     DeviceUsage GetDeviceUsage(const AudioDeviceDescriptor &desc);
80     std::string GetConnDevicesStr();
81     std::string GetConnDevicesStr(const vector<shared_ptr<AudioDeviceDescriptor>> &descs);
82     bool IsArmUsbDevice(const AudioDeviceDescriptor &desc);
83     void OnReceiveBluetoothEvent(const std::string macAddress, const std::string deviceName);
84     bool IsDeviceConnected(sptr<AudioDeviceDescriptor> &audioDeviceDescriptors);
85     bool IsVirtualConnectedDevice(const sptr<AudioDeviceDescriptor> &selectedDesc);
86     int32_t UpdateDeviceDescDeviceId(sptr<AudioDeviceDescriptor> &deviceDescriptor);
87     int32_t SetDefaultOutputDevice(const DeviceType deviceType, const uint32_t sessionID,
88         const StreamUsage streamUsage, bool isRunning);
89     int32_t UpdateDefaultOutputDeviceWhenStarting(const uint32_t sessionID);
90     int32_t UpdateDefaultOutputDeviceWhenStopping(const uint32_t sessionID);
91     int32_t RemoveSelectedDefaultOutputDevice(const uint32_t sessionID);
92     unique_ptr<AudioDeviceDescriptor> GetSelectedMediaRenderDevice();
93     unique_ptr<AudioDeviceDescriptor> GetSelectedCallRenderDevice();
94 
95 private:
96     AudioDeviceManager();
~AudioDeviceManager()97     ~AudioDeviceManager() {};
98     bool DeviceAttrMatch(const shared_ptr<AudioDeviceDescriptor> &devDesc, AudioDevicePrivacyType &privacyType,
99         DeviceRole &devRole, DeviceUsage &devUsage);
100 
101     void FillArrayWhenDeviceAttrMatch(const shared_ptr<AudioDeviceDescriptor> &devDesc,
102         AudioDevicePrivacyType privacyType, DeviceRole devRole, DeviceUsage devUsage, string logName,
103         vector<shared_ptr<AudioDeviceDescriptor>> &descArray);
104 
105     void RemoveMatchDeviceInArray(const AudioDeviceDescriptor &devDesc, string logName,
106         vector<shared_ptr<AudioDeviceDescriptor>> &descArray);
107 
108     void MakePairedDeviceDescriptor(const shared_ptr<AudioDeviceDescriptor> &devDesc);
109     void MakePairedDeviceDescriptor(const shared_ptr<AudioDeviceDescriptor> &devDesc, DeviceRole devRole);
110     void MakePairedDefaultDeviceDescriptor(const shared_ptr<AudioDeviceDescriptor> &devDesc, DeviceRole devRole);
111     void MakePairedDefaultDeviceImpl(const shared_ptr<AudioDeviceDescriptor> &devDesc,
112         const shared_ptr<AudioDeviceDescriptor> &connectedDesc);
113     void UpdateConnectedDevices(const shared_ptr<AudioDeviceDescriptor> &devDesc, bool isConnected);
114     void AddConnectedDevices(const shared_ptr<AudioDeviceDescriptor> &devDesc);
115     void RemoveConnectedDevices(const shared_ptr<AudioDeviceDescriptor> &devDesc);
116     void AddRemoteRenderDev(const shared_ptr<AudioDeviceDescriptor> &devDesc);
117     void AddRemoteCaptureDev(const shared_ptr<AudioDeviceDescriptor> &devDesc);
118     void AddDefaultDevices(const sptr<AudioDeviceDescriptor> &devDesc);
119 
120     void UpdateDeviceInfo(shared_ptr<AudioDeviceDescriptor> &deviceDesc);
121     void AddCommunicationDevices(const shared_ptr<AudioDeviceDescriptor> &devDesc);
122     void AddMediaDevices(const shared_ptr<AudioDeviceDescriptor> &devDesc);
123     void AddCaptureDevices(const shared_ptr<AudioDeviceDescriptor> &devDesc);
124     void HandleScoWithDefaultCategory(const shared_ptr<AudioDeviceDescriptor> &devDesc);
125     bool IsExistedDevice(const sptr<AudioDeviceDescriptor> &device,
126         const vector<unique_ptr<AudioDeviceDescriptor>> &audioDeviceDescriptors);
127     void AddAvailableDevicesByUsage(const AudioDeviceUsage usage,
128         const DevicePrivacyInfo &deviceInfo, const sptr<AudioDeviceDescriptor> &dev,
129         std::vector<unique_ptr<AudioDeviceDescriptor>> &audioDeviceDescriptors);
130     void GetDefaultAvailableDevicesByUsage(AudioDeviceUsage usage,
131         vector<unique_ptr<AudioDeviceDescriptor>> &audioDeviceDescriptors);
132     bool UpdateExistDeviceDescriptor(const sptr<AudioDeviceDescriptor> &deviceDescriptor);
133 
134     void AddBtToOtherList(const shared_ptr<AudioDeviceDescriptor> &devDesc);
135     void RemoveBtFromOtherList(const AudioDeviceDescriptor &devDesc);
136     void RemoveRemoteDevices(const AudioDeviceDescriptor &devDesc);
137     void RemoveCommunicationDevices(const AudioDeviceDescriptor &devDesc);
138     void RemoveMediaDevices(const AudioDeviceDescriptor &devDesc);
139     void RemoveCaptureDevices(const AudioDeviceDescriptor &devDesc);
140     bool UpdateConnectState(const shared_ptr<AudioDeviceDescriptor> &devDesc);
141     bool UpdateDeviceCategory(const sptr<AudioDeviceDescriptor> &deviceDescriptor);
142     bool UpdateEnableState(const shared_ptr<AudioDeviceDescriptor> &deviceDescriptor);
143     bool UpdateExceptionFlag(const shared_ptr<AudioDeviceDescriptor> &deviceDescriptor);
144 
145     void RemoveVirtualConnectedDevice(const shared_ptr<AudioDeviceDescriptor> &devDesc);
146 
147     list<DevicePrivacyInfo> privacyDeviceList_;
148     list<DevicePrivacyInfo> publicDeviceList_;
149 
150     vector<shared_ptr<AudioDeviceDescriptor>> remoteRenderDevices_;
151     vector<shared_ptr<AudioDeviceDescriptor>> remoteCaptureDevices_;
152     vector<shared_ptr<AudioDeviceDescriptor>> commRenderPrivacyDevices_;
153     vector<shared_ptr<AudioDeviceDescriptor>> commRenderPublicDevices_;
154     vector<shared_ptr<AudioDeviceDescriptor>> commCapturePrivacyDevices_;
155     vector<shared_ptr<AudioDeviceDescriptor>> commCapturePublicDevices_;
156     vector<shared_ptr<AudioDeviceDescriptor>> mediaRenderPrivacyDevices_;
157     vector<shared_ptr<AudioDeviceDescriptor>> mediaRenderPublicDevices_;
158     vector<shared_ptr<AudioDeviceDescriptor>> mediaCapturePrivacyDevices_;
159     vector<shared_ptr<AudioDeviceDescriptor>> mediaCapturePublicDevices_;
160     vector<shared_ptr<AudioDeviceDescriptor>> capturePrivacyDevices_;
161     vector<shared_ptr<AudioDeviceDescriptor>> capturePublicDevices_;
162     vector<shared_ptr<AudioDeviceDescriptor>> connectedDevices_;
163     vector<shared_ptr<AudioDeviceDescriptor>> reconCapturePrivacyDevices_;
164     unordered_map<AudioDevicePrivacyType, list<DevicePrivacyInfo>> devicePrivacyMaps_ = {};
165     sptr<AudioDeviceDescriptor> earpiece_ = nullptr;
166     sptr<AudioDeviceDescriptor> speaker_ = nullptr;
167     sptr<AudioDeviceDescriptor> defalutMic_ = nullptr;
168     bool hasEarpiece_ = false;
169     unordered_map<uint32_t, std::pair<DeviceType, StreamUsage>> selectedDefaultOutputDeviceInfo_;
170     vector<std::pair<uint32_t, DeviceType>> mediaDefaultOutputDevices_;
171     vector<std::pair<uint32_t, DeviceType>> callDefaultOutputDevices_;
172     DeviceType selectedMediaDefaultOutputDevice_ = DEVICE_TYPE_DEFAULT;
173     DeviceType selectedCallDefaultOutputDevice_ = DEVICE_TYPE_DEFAULT;
174     std::mutex selectDefaultOutputDeviceMutex_;
175     std::mutex currentActiveDevicesMutex_;
176 };
177 } // namespace AudioStandard
178 } // namespace OHOS
179 #endif //ST_AUDIO_DEVICE_MANAGER_H
180