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