From dfaee2efe731eaa931294b0e0746a7fd8669841e Mon Sep 17 00:00:00 2001 From: zhanghongyuan Date: Tue, 29 Apr 2025 10:09:49 +0800 Subject: [PATCH 1/5] fix: the audio device registe two pci device can't be disable the audio device registe two pci device can't be disable Log: fix the audio device registe two pci device can't be disable Bug: https://pms.uniontech.com/bug-view-314495.html Change-Id: I40efcebcf8e8e5942b768c7fc5d394ab100494be --- deepin-devicemanager/src/GenerateDevice/CmdTool.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp b/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp index c1af015c..c557f3f6 100644 --- a/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp +++ b/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp @@ -698,7 +698,18 @@ void CmdTool::getMulHwinfoInfo(const QString &info) if (mapInfo["Hardware Class"] == "sound" || mapInfo["Device"].contains("USB Audio")) { qCDebug(appLog) << "Found sound device."; // mapInfo["Device"].contains("USB Audio") 是为了处理未识别的USB声卡 Bug-118773 - addMapInfo("hwinfo_sound", mapInfo); + const QList> &lstMap = m_cmdInfo["hwinfo_sound"]; + QList >::const_iterator it = lstMap.begin(); + bool canAdd = true; + for (; it != lstMap.end(); ++it) { + auto item = *it; + if (item.value("Device") == mapInfo["Device"] && item.value("Hardware Class") != "sound") { + canAdd = false; + } + } + if (canAdd) { + addMapInfo("hwinfo_sound", mapInfo); + } } else if (mapInfo["Hardware Class"].contains("network")) { qCDebug(appLog) << "Found network device."; addMapInfo("hwinfo_network", mapInfo); From 1eedae181684106bb060b44e5283bf648589c5fd Mon Sep 17 00:00:00 2001 From: zhanghongyuan Date: Tue, 29 Apr 2025 19:11:31 +0800 Subject: [PATCH 2/5] fix: the audio device may cause crush fix the audio device may cause crush Log: fix the audio device may cause crush. Bug: https://pms.uniontech.com/bug-view-314495.html Change-Id: Ic86b50fca4e37ad5317a37334a13273a51fba772 --- deepin-devicemanager/src/GenerateDevice/CmdTool.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp b/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp index c557f3f6..bac19494 100644 --- a/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp +++ b/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp @@ -703,7 +703,7 @@ void CmdTool::getMulHwinfoInfo(const QString &info) bool canAdd = true; for (; it != lstMap.end(); ++it) { auto item = *it; - if (item.value("Device") == mapInfo["Device"] && item.value("Hardware Class") != "sound") { + if (item.value("Device") == mapInfo["Device"] && mapInfo.value("Hardware Class") != "sound") { canAdd = false; } } From c8ac36041e6acc5143180240868ea65de7144741 Mon Sep 17 00:00:00 2001 From: zhanghongyuan Date: Thu, 8 May 2025 14:16:04 +0800 Subject: [PATCH 3/5] fix: fit multiple audio device enable function fit multiple audio device enable function pick from: https://github.com/linuxdeepin/deepin-devicemanager/commit/8e794c9e0224e254330435f2005a2cebfb5bc00e Log: fit multiple audio device enable function Bug: https://pms.uniontech.com/bug-view-314495.html Change-Id: Ibbd0c06d0112b5964d2f0dd9854aa8f629f8ccd1 --- .../src/DeviceManager/DeviceAudio.cpp | 2 +- .../src/DeviceManager/DeviceInfo.cpp | 5 +++ .../src/DeviceManager/DeviceInfo.h | 1 + .../src/DeviceManager/DeviceManager.cpp | 33 +++++++++++-------- .../src/GenerateDevice/CmdTool.cpp | 13 +------- .../src/GenerateDevice/DeviceGenerator.cpp | 6 +++- 6 files changed, 33 insertions(+), 27 deletions(-) diff --git a/deepin-devicemanager/src/DeviceManager/DeviceAudio.cpp b/deepin-devicemanager/src/DeviceManager/DeviceAudio.cpp index d51455a5..b88cae03 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceAudio.cpp +++ b/deepin-devicemanager/src/DeviceManager/DeviceAudio.cpp @@ -314,7 +314,7 @@ const QString &DeviceAudio::driver() const const QString &DeviceAudio::uniqueID() const { qCDebug(appLog) << "DeviceAudio::uniqueID called."; - return m_SysPath; + return m_UniqueID; } EnableDeviceStatus DeviceAudio::setEnable(bool e) { diff --git a/deepin-devicemanager/src/DeviceManager/DeviceInfo.cpp b/deepin-devicemanager/src/DeviceManager/DeviceInfo.cpp index 67be41cb..0e8e08a4 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceInfo.cpp +++ b/deepin-devicemanager/src/DeviceManager/DeviceInfo.cpp @@ -1487,3 +1487,8 @@ void DeviceBaseInfo::generatorTranslate() << tr("Vendor") \ << tr("Processor"); } + +void DeviceBaseInfo::setUniqueID(const QString &UniqueID) +{ + m_UniqueID = UniqueID; +} diff --git a/deepin-devicemanager/src/DeviceManager/DeviceInfo.h b/deepin-devicemanager/src/DeviceManager/DeviceInfo.h index bd975caa..7aa802cf 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceInfo.h +++ b/deepin-devicemanager/src/DeviceManager/DeviceInfo.h @@ -394,6 +394,7 @@ class DeviceBaseInfo : public QObject */ TomlFixMethod setInfoFromTomlBase(const QMap &mapInfo); + void setUniqueID(const QString &UniqueID); protected: /** * @brief:初始化过滤信息 diff --git a/deepin-devicemanager/src/DeviceManager/DeviceManager.cpp b/deepin-devicemanager/src/DeviceManager/DeviceManager.cpp index adf8f25e..2053777e 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceManager.cpp +++ b/deepin-devicemanager/src/DeviceManager/DeviceManager.cpp @@ -9,6 +9,7 @@ // Qt库文件 #include #include +#include #include // 其它头文件 @@ -1233,21 +1234,27 @@ void DeviceManager::delAudioDevice(DeviceAudio *const device) void DeviceManager::deleteDisableDuplicate_AudioDevice(void) { qCDebug(appLog) << "Deleting disable duplicate audio device"; - if (m_ListDeviceAudio.size() > 0) { - for (QList::iterator it = m_ListDeviceAudio.begin(); it != m_ListDeviceAudio.end(); ++it) { - DeviceAudio *audio_1 = dynamic_cast(*it); - //QString tpath = audio_1->uniqueID(); - // 判断该设备是否已经存在, - if (!audio_1->enable()) { - for (QList::iterator it2 = m_ListDeviceAudio.begin(); it2 != m_ListDeviceAudio.end(); ++it2) { - DeviceAudio *audio_2 = dynamic_cast(*it2); - if (audio_2->name() == audio_1->name()) - if (audio_2->enable()) - m_ListDeviceAudio.removeOne(audio_2); - } + QHash enabledDevices; + for (auto it = m_ListDeviceAudio.begin(); it != m_ListDeviceAudio.end(); ++it) { + DeviceAudio* audio = dynamic_cast(*it); + if (!audio) { + continue; + } + if (audio->enable() || !enabledDevices.contains(audio->uniqueID())) { + QString usbDir = "/sys" + audio->sysPath(); + if (QFileInfo::exists(usbDir) || !audio->driver().contains("usb")) { + enabledDevices[audio->uniqueID()] = audio; + } + } else { + if (enabledDevices.contains(audio->uniqueID()) && enabledDevices[audio->uniqueID()]->enable()) { + delete enabledDevices[audio->uniqueID()]; + enabledDevices[audio->uniqueID()] = audio; } } - + } + m_ListDeviceAudio.clear(); + for(auto it : enabledDevices.values()){ + m_ListDeviceAudio.push_back(it); } } diff --git a/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp b/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp index bac19494..c1af015c 100644 --- a/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp +++ b/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp @@ -698,18 +698,7 @@ void CmdTool::getMulHwinfoInfo(const QString &info) if (mapInfo["Hardware Class"] == "sound" || mapInfo["Device"].contains("USB Audio")) { qCDebug(appLog) << "Found sound device."; // mapInfo["Device"].contains("USB Audio") 是为了处理未识别的USB声卡 Bug-118773 - const QList> &lstMap = m_cmdInfo["hwinfo_sound"]; - QList >::const_iterator it = lstMap.begin(); - bool canAdd = true; - for (; it != lstMap.end(); ++it) { - auto item = *it; - if (item.value("Device") == mapInfo["Device"] && mapInfo.value("Hardware Class") != "sound") { - canAdd = false; - } - } - if (canAdd) { - addMapInfo("hwinfo_sound", mapInfo); - } + addMapInfo("hwinfo_sound", mapInfo); } else if (mapInfo["Hardware Class"].contains("network")) { qCDebug(appLog) << "Found network device."; addMapInfo("hwinfo_network", mapInfo); diff --git a/deepin-devicemanager/src/GenerateDevice/DeviceGenerator.cpp b/deepin-devicemanager/src/GenerateDevice/DeviceGenerator.cpp index ae139560..e79fbafd 100644 --- a/deepin-devicemanager/src/GenerateDevice/DeviceGenerator.cpp +++ b/deepin-devicemanager/src/GenerateDevice/DeviceGenerator.cpp @@ -889,7 +889,7 @@ void DeviceGenerator::getAudioInfoFromHwinfo() QString path = pciPath(*it); DeviceAudio *device = dynamic_cast(DeviceManager::instance()->getAudioDevice(path)); - if (device) { + if (device && (*it).size() != 5) { // qCDebug(appLog) << "Found existing audio device, setting enable value to false."; device->setEnableValue(false); continue; @@ -897,6 +897,10 @@ void DeviceGenerator::getAudioInfoFromHwinfo() device = new DeviceAudio(); device->setInfoFromHwinfo(*it); + if ((*it).size() == 5 && (*it).find("unique_id") != (*it).end()) { + device->setEnableValue(false); + device->setUniqueID((*it)["unique_id"]); + } DeviceManager::instance()->addAudioDevice(device); addBusIDFromHwinfo((*it)["SysFS BusID"]); } From 3e3444459b6e6c90cfb2e7f5e808ff48876793a1 Mon Sep 17 00:00:00 2001 From: zhanghongyuan Date: Thu, 15 May 2025 10:52:22 +0800 Subject: [PATCH 4/5] fix: modify the mouse device name modify the mouse device name Log: modify the mouse device name Bug: https://pms.uniontech.com/task-view-376575.html Change-Id: I37339a5ec25d6fbe5b4cb4f209ba1f7fa7f87cec --- deepin-devicemanager/src/Page/PageListView.cpp | 2 +- deepin-devicemanager/translations/deepin-devicemanager.ts | 2 +- deepin-devicemanager/translations/deepin-devicemanager_zh_CN.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/deepin-devicemanager/src/Page/PageListView.cpp b/deepin-devicemanager/src/Page/PageListView.cpp index af298025..502fa7b4 100644 --- a/deepin-devicemanager/src/Page/PageListView.cpp +++ b/deepin-devicemanager/src/Page/PageListView.cpp @@ -33,7 +33,7 @@ PageListView::PageListView(DWidget *parent) hLayout->setContentsMargins(0, 0, 0, 0); setLayout(hLayout); - this->setFixedWidth(152); + this->setFixedWidth(172); // 初始化右键菜单 mp_ListView->setContextMenuPolicy(Qt::CustomContextMenu); connect(mp_ListView, SIGNAL(customContextMenuRequested(const QPoint &)), diff --git a/deepin-devicemanager/translations/deepin-devicemanager.ts b/deepin-devicemanager/translations/deepin-devicemanager.ts index 459c3516..9bae205a 100644 --- a/deepin-devicemanager/translations/deepin-devicemanager.ts +++ b/deepin-devicemanager/translations/deepin-devicemanager.ts @@ -848,7 +848,7 @@ Mouse - Mouse + Mouse and Pointer Devices diff --git a/deepin-devicemanager/translations/deepin-devicemanager_zh_CN.ts b/deepin-devicemanager/translations/deepin-devicemanager_zh_CN.ts index ca5a2da8..2f2c060c 100644 --- a/deepin-devicemanager/translations/deepin-devicemanager_zh_CN.ts +++ b/deepin-devicemanager/translations/deepin-devicemanager_zh_CN.ts @@ -1578,7 +1578,7 @@ Mouse - 鼠标 + 鼠标与指针设备 From 32f184135f65d00add0a782df77adcc263536a8f Mon Sep 17 00:00:00 2001 From: zhanghongyuan Date: Mon, 19 May 2025 11:01:55 +0800 Subject: [PATCH 5/5] fix: the USB audio device can't be disable fix the USB audio device can't be disable pick from: https://github.com/linuxdeepin/deepin-devicemanager/commit/480a9ef8e37a030b445af00a0e72a789e7d96d79 Log: fix the USB audio device can't be disable Bug: https://pms.uniontech.com/bug-view-316525.html Change-Id: I2e8d4f70d3b5c8d029c92386025ed974a1797bb5 --- .../src/controlinterface.cpp | 4 +- .../src/enablecontrol/enablesqlmanager.cpp | 19 ++++-- .../src/enablecontrol/enablesqlmanager.h | 4 +- .../src/DeviceManager/DeviceInfo.cpp | 5 ++ .../src/DeviceManager/DeviceInfo.h | 2 + .../src/DeviceManager/DeviceManager.cpp | 61 +++++++++++++++++-- .../src/DeviceManager/DeviceManager.h | 2 + .../src/GenerateDevice/CmdTool.cpp | 2 +- .../src/GenerateDevice/DeviceGenerator.cpp | 2 +- 9 files changed, 83 insertions(+), 18 deletions(-) diff --git a/deepin-devicemanager-server/deepin-devicecontrol/src/controlinterface.cpp b/deepin-devicemanager-server/deepin-devicecontrol/src/controlinterface.cpp index af4c0efb..4c4b7d34 100644 --- a/deepin-devicemanager-server/deepin-devicecontrol/src/controlinterface.cpp +++ b/deepin-devicemanager-server/deepin-devicecontrol/src/controlinterface.cpp @@ -155,9 +155,7 @@ bool ControlInterface::enable(const QString &hclass, const QString &name, const // 先从数据库中查找路径,防止设备更换usb接口 QString sPath = EnableSqlManager::getInstance()->authorizedPath(value); - if (sPath.isEmpty()) { - sPath = path; - } + sPath = path; // 判断是内置设备,还是外设,内置设备通过remove文件禁用,外设通过authorized文件禁用 bool res = false; diff --git a/deepin-devicemanager-server/deepin-devicecontrol/src/enablecontrol/enablesqlmanager.cpp b/deepin-devicemanager-server/deepin-devicecontrol/src/enablecontrol/enablesqlmanager.cpp index 194c0ea1..3bdcaca7 100644 --- a/deepin-devicemanager-server/deepin-devicecontrol/src/enablecontrol/enablesqlmanager.cpp +++ b/deepin-devicemanager-server/deepin-devicecontrol/src/enablecontrol/enablesqlmanager.cpp @@ -52,14 +52,17 @@ void EnableSqlManager::removeDateFromRemoveTable(const QString &path) void EnableSqlManager::insertDataToAuthorizedTable(const QString &hclass, const QString &name, const QString &path, const QString &unique_id, bool exist, const QString &strDriver) { // 数据库已经存在该设备记录 - if (uniqueIDExistedEX(unique_id)) { + if (uniqueIDExistedEX(unique_id, path)) { return; } // 数据库没有该设备记录,则直接插入 // QString sql = QString("INSERT INTO %1 (class, name, path, unique_id, exist, driver) VALUES (%2, %3, %4, %5, %6, %7);") // .arg(DB_TABLE_AUTHORIZED).arg(":hclass").arg(":name").arg(":path").arg(":unique_id").arg(":exist").arg(":strDriver"); - if(!m_sqlQuery.prepare("INSERT INTO authorized (class, name, path, unique_id, exist, driver) VALUES (:hclass, :name, :path, :unique_id, :exist, :strDriver);")) return; + if(!m_sqlQuery.prepare("INSERT INTO authorized (class, name, path, unique_id, exist, driver) VALUES (:hclass, :name, :path, :unique_id, :exist, :strDriver);")){ + qDebug() << "insert data to authorized table failed"; + return; + } m_sqlQuery.bindValue(":hclass", QVariant(hclass)); m_sqlQuery.bindValue(":name", QVariant(name)); m_sqlQuery.bindValue(":path", QVariant(path)); @@ -124,21 +127,27 @@ void EnableSqlManager::removeDataFromPrinterTable(const QString &name) } } -bool EnableSqlManager::uniqueIDExisted(const QString &key) +bool EnableSqlManager::uniqueIDExisted(const QString &key, const QString path) { qCDebug(appLog) << "Checking if unique ID exists:" << key; QString sql = QString("SELECT COUNT(*) FROM %1 WHERE unique_id=%2;").arg(DB_TABLE_AUTHORIZED).arg(":param"); + if (!path.isEmpty()){ + sql = QString("SELECT COUNT(*) FROM %1 WHERE unique_id=%2 and path=%3;").arg(DB_TABLE_AUTHORIZED).arg(":param").arg(":path"); + } if(!m_sqlQuery.prepare(sql)) return false; m_sqlQuery.bindValue(":param", QVariant(key)); + if (!path.isEmpty()){ + m_sqlQuery.bindValue(":path", QVariant(path)); + } if (m_sqlQuery.exec() && m_sqlQuery.next()) { return m_sqlQuery.value(0).toInt() > 0; } return false; } -bool EnableSqlManager::uniqueIDExistedEX(const QString &key) +bool EnableSqlManager::uniqueIDExistedEX(const QString &key, const QString path) { - return uniqueIDExisted(key); + return uniqueIDExisted(key, path); } bool EnableSqlManager::isUniqueIdEnabled(const QString &key) diff --git a/deepin-devicemanager-server/deepin-devicecontrol/src/enablecontrol/enablesqlmanager.h b/deepin-devicemanager-server/deepin-devicecontrol/src/enablecontrol/enablesqlmanager.h index 273fe932..6c8d7a87 100644 --- a/deepin-devicemanager-server/deepin-devicecontrol/src/enablecontrol/enablesqlmanager.h +++ b/deepin-devicemanager-server/deepin-devicecontrol/src/enablecontrol/enablesqlmanager.h @@ -90,14 +90,14 @@ class EnableSqlManager : public QObject * @param key * @return */ - bool uniqueIDExisted(const QString &key); + bool uniqueIDExisted(const QString &key, const QString path = ""); /** * @brief uniqueIDExistedForEnable * @param key * @return */ - bool uniqueIDExistedEX(const QString &key); + bool uniqueIDExistedEX(const QString &key, const QString path = ""); /** * @brief isUniqueIdEnabled 判断设备是否被禁用了 diff --git a/deepin-devicemanager/src/DeviceManager/DeviceInfo.cpp b/deepin-devicemanager/src/DeviceManager/DeviceInfo.cpp index 0e8e08a4..8261c45c 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceInfo.cpp +++ b/deepin-devicemanager/src/DeviceManager/DeviceInfo.cpp @@ -1488,6 +1488,11 @@ void DeviceBaseInfo::generatorTranslate() << tr("Processor"); } +void DeviceBaseInfo::setSysPath(const QString &newSysPath) +{ + m_SysPath = newSysPath; +} + void DeviceBaseInfo::setUniqueID(const QString &UniqueID) { m_UniqueID = UniqueID; diff --git a/deepin-devicemanager/src/DeviceManager/DeviceInfo.h b/deepin-devicemanager/src/DeviceManager/DeviceInfo.h index 7aa802cf..6be90b65 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceInfo.h +++ b/deepin-devicemanager/src/DeviceManager/DeviceInfo.h @@ -395,6 +395,8 @@ class DeviceBaseInfo : public QObject TomlFixMethod setInfoFromTomlBase(const QMap &mapInfo); void setUniqueID(const QString &UniqueID); + void setSysPath(const QString &newSysPath); + protected: /** * @brief:初始化过滤信息 diff --git a/deepin-devicemanager/src/DeviceManager/DeviceManager.cpp b/deepin-devicemanager/src/DeviceManager/DeviceManager.cpp index 2053777e..da62ec31 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceManager.cpp +++ b/deepin-devicemanager/src/DeviceManager/DeviceManager.cpp @@ -1235,27 +1235,76 @@ void DeviceManager::deleteDisableDuplicate_AudioDevice(void) { qCDebug(appLog) << "Deleting disable duplicate audio device"; QHash enabledDevices; + QHash enableDevicePriority; for (auto it = m_ListDeviceAudio.begin(); it != m_ListDeviceAudio.end(); ++it) { DeviceAudio* audio = dynamic_cast(*it); if (!audio) { continue; } - if (audio->enable() || !enabledDevices.contains(audio->uniqueID())) { - QString usbDir = "/sys" + audio->sysPath(); - if (QFileInfo::exists(usbDir) || !audio->driver().contains("usb")) { - enabledDevices[audio->uniqueID()] = audio; + if (audio->enable() || !enabledDevices.contains(audio->uniqueID())) { + enabledDevices[audio->uniqueID()] = audio; + if (!enableDevicePriority.contains(audio->uniqueID())) { + if (audio->enable() || ! audio->driver().contains("usb")) { + enableDevicePriority.insert(audio->uniqueID(), 2); + } else { + enableDevicePriority.insert(audio->uniqueID(), 1); + } + } else { + enableDevicePriority[audio->uniqueID()] = enableDevicePriority[audio->uniqueID()] + 1; } } else { if (enabledDevices.contains(audio->uniqueID()) && enabledDevices[audio->uniqueID()]->enable()) { + if (!enableDevicePriority.contains(audio->uniqueID())) { + if (audio->enable()) { + enableDevicePriority.insert(audio->uniqueID(), 2); + } else { + enableDevicePriority.insert(audio->uniqueID(), 1); + } + } else { + enableDevicePriority[audio->uniqueID()] = enableDevicePriority[audio->uniqueID()] + 1; + } + audio->setSysPath(enabledDevices[audio->uniqueID()]->sysPath()); delete enabledDevices[audio->uniqueID()]; enabledDevices[audio->uniqueID()] = audio; } } } + qWarning()<<"delete before: "<< m_ListDeviceAudio.size(); + qWarning() << enableDevicePriority; m_ListDeviceAudio.clear(); - for(auto it : enabledDevices.values()){ - m_ListDeviceAudio.push_back(it); + for(auto it : enabledDevices.keys()){ + if (enableDevicePriority.value(it) <= 1) { + continue; + } + m_ListDeviceAudio.push_back(enabledDevices.value(it)); + + setAudioDeviceEnable(enabledDevices.value(it), enabledDevices.value(it)->enable()); } + qWarning()<<"delete after: "<< m_ListDeviceAudio.size(); +} + +void DeviceManager::setAudioDeviceEnable(DeviceAudio * const devivce, bool enable) +{ + EnableDeviceStatus status ; + + int i = 0; + do{ + status = devivce->setEnable(enable); + if (status == EDS_Success) { + break; + } + qWarning() << "retry: " << ++i; + }while (i < 3); + + qWarning() << [](EnableDeviceStatus status) { + switch(status) { + case EDS_Cancle: return "Device enable operation was cancelled"; + case EDS_NoSerial: return "Device enable failed: No serial number available"; + case EDS_Faild: return "-----Device enable failed due to unknown error"; + case EDS_Success: return "Device enabled successfully"; + default: return "Unknown device enable status"; + } + }(status); } DeviceBaseInfo *DeviceManager::getAudioDevice(const QString &path) diff --git a/deepin-devicemanager/src/DeviceManager/DeviceManager.h b/deepin-devicemanager/src/DeviceManager/DeviceManager.h index ef464143..bb6a37e0 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceManager.h +++ b/deepin-devicemanager/src/DeviceManager/DeviceManager.h @@ -329,6 +329,8 @@ class DeviceManager : public QObject */ void deleteDisableDuplicate_AudioDevice(void); + void setAudioDeviceEnable(DeviceAudio *const devivce, bool enable); + /** * @brief getAudioDevice 获取音频设备 * @param path diff --git a/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp b/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp index c1af015c..80e175db 100644 --- a/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp +++ b/deepin-devicemanager/src/GenerateDevice/CmdTool.cpp @@ -695,7 +695,7 @@ void CmdTool::getMulHwinfoInfo(const QString &info) } QMap mapInfo; getMapInfoFromHwinfo(item, mapInfo); - if (mapInfo["Hardware Class"] == "sound" || mapInfo["Device"].contains("USB Audio")) { + if (mapInfo["Hardware Class"] == "sound" || (mapInfo["Device"].contains("USB Audio") && mapInfo["Device"].contains("snd-usb-audio"))) { qCDebug(appLog) << "Found sound device."; // mapInfo["Device"].contains("USB Audio") 是为了处理未识别的USB声卡 Bug-118773 addMapInfo("hwinfo_sound", mapInfo); diff --git a/deepin-devicemanager/src/GenerateDevice/DeviceGenerator.cpp b/deepin-devicemanager/src/GenerateDevice/DeviceGenerator.cpp index e79fbafd..6e2782bc 100644 --- a/deepin-devicemanager/src/GenerateDevice/DeviceGenerator.cpp +++ b/deepin-devicemanager/src/GenerateDevice/DeviceGenerator.cpp @@ -904,7 +904,7 @@ void DeviceGenerator::getAudioInfoFromHwinfo() DeviceManager::instance()->addAudioDevice(device); addBusIDFromHwinfo((*it)["SysFS BusID"]); } - DeviceManager::instance()->deleteDisableDuplicate_AudioDevice(); +// DeviceManager::instance()->deleteDisableDuplicate_AudioDevice(); qCDebug(appLog) << "DeviceGenerator::getAudioInfoFromHwinfo end"; }