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