diff --git a/deepin-devicemanager/src/DeviceManager/DeviceBios.cpp b/deepin-devicemanager/src/DeviceManager/DeviceBios.cpp index 5db3ffa9..a1b99f13 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceBios.cpp +++ b/deepin-devicemanager/src/DeviceManager/DeviceBios.cpp @@ -235,9 +235,9 @@ void DeviceBios::initFilterKey() addFilterKey("Asset Tag"); addFilterKey("Features"); addFilterKey("Location In Chassis"); - addFilterKey("Chassis Handle"); +// addFilterKey("Chassis Handle"); addFilterKey("Type"); - addFilterKey("Contained Object Handles"); +// addFilterKey("Contained Object Handles"); addFilterKey("Product Name"); addFilterKey("Serial Number"); diff --git a/deepin-devicemanager/src/DeviceManager/DeviceCpu.cpp b/deepin-devicemanager/src/DeviceManager/DeviceCpu.cpp index 8446af27..a0d18914 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceCpu.cpp +++ b/deepin-devicemanager/src/DeviceManager/DeviceCpu.cpp @@ -79,14 +79,14 @@ void DeviceCpu::loadBaseDeviceInfo() // 添加基本信息 addBaseDeviceInfo("Name", m_Name); addBaseDeviceInfo("Vendor", m_Vendor); - addBaseDeviceInfo("CPU ID", m_PhysicalID); - addBaseDeviceInfo("Core ID", m_CoreID); + // addBaseDeviceInfo(("CPU ID"), m_PhysicalID); + // addBaseDeviceInfo(("Core ID"), m_CoreID); addBaseDeviceInfo("Threads", m_ThreadNum); if (!m_FrequencyIsCur) { qCDebug(appLog) << "Frequency is not current, adding Max Speed."; addBaseDeviceInfo("Max Speed", m_MaxFrequency); } - addBaseDeviceInfo("BogoMIPS", m_BogoMIPS); +// addBaseDeviceInfo(("BogoMIPS"), m_BogoMIPS); addBaseDeviceInfo("Architecture", m_Architecture); addBaseDeviceInfo("CPU Family", m_Familly); addBaseDeviceInfo("Model", m_Model); @@ -300,6 +300,12 @@ void DeviceCpu::setInfoFromDmidecode(const QMap &mapInfo) setAttribute(mapInfo, "product", m_Name); } + if (Common::specialComType > 0) { + if (mapInfo.contains("Version")) { + setAttribute(mapInfo, "Version", m_Name); + } + } + // 获取设备基本信息 setAttribute(mapInfo, "Manufacturer", m_Vendor); setAttribute(mapInfo, "Max Speed", m_Frequency, false); diff --git a/deepin-devicemanager/src/DeviceManager/DeviceCpu.h b/deepin-devicemanager/src/DeviceManager/DeviceCpu.h index 0670fb6b..ea132ba8 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceCpu.h +++ b/deepin-devicemanager/src/DeviceManager/DeviceCpu.h @@ -6,7 +6,7 @@ #ifndef DEVICECPU_H #define DEVICECPU_H #include "DeviceInfo.h" - +#include "commonfunction.h" /** * @brief The DeviceCpu class * 用来描述CPU的类 diff --git a/deepin-devicemanager/src/DeviceManager/DeviceManager.cpp b/deepin-devicemanager/src/DeviceManager/DeviceManager.cpp index 4df09176..2cc08177 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceManager.cpp +++ b/deepin-devicemanager/src/DeviceManager/DeviceManager.cpp @@ -1017,6 +1017,55 @@ void DeviceManager::checkDiskSize() } } +void DeviceManager::orderDiskByType() +{ + // 自定义排序 + auto compareDevices = [](DeviceBaseInfo* baseInfo1, DeviceBaseInfo* baseInfo2) { + DeviceStorage *storageA = dynamic_cast(baseInfo1); + DeviceStorage *storageB = dynamic_cast(baseInfo2); + + if (storageA == nullptr || storageB == nullptr) { + return false; + } + + // 判断是否为 USB 设备(包括 USB 接口的 SSD) + auto isUSBDevice = [](DeviceStorage *device) { + return device->interface().contains("USB") || + (device->interface().contains("USB") && device->mediaType().contains("SSD")); + }; + + // 1. 首先按照 UFS 优先 + if (storageA->interface().contains("UFS") && !storageB->interface().contains("UFS")) + return true; + if (!storageA->interface().contains("UFS") && storageB->interface().contains("UFS")) + return false; + + // 2. 然后按照 SSD、HDD 排序(排除 USB 接口的 SSD) + if (!isUSBDevice(storageA) && !isUSBDevice(storageB)) { + if (storageA->mediaType().contains("SSD") && !storageB->mediaType().contains("SSD")) + return true; + if (!storageA->mediaType().contains("SSD") && storageB->mediaType().contains("SSD")) + return false; + if (storageA->mediaType().contains("HDD") && !storageB->mediaType().contains("HDD")) + return true; + if (!storageA->mediaType().contains("HDD") && storageB->mediaType().contains("HDD")) + return false; + } + + // 3. 最后按照 USB 设备排序(包括 USB 接口的 SSD) + if (isUSBDevice(storageA) && !isUSBDevice(storageB)) + return false; // USB 设备排在后面 + if (!isUSBDevice(storageA) && isUSBDevice(storageB)) + return true; + + // 如果所有条件都相同,保持原有顺序 + return false; + }; + + // 使用自定义比较函数对列表进行排序 + std::sort(m_ListDeviceStorage.begin(), m_ListDeviceStorage.end(), compareDevices); +} + bool DeviceManager::setStorageDeviceMediaType(const QString &name, const QString &value) { qCDebug(appLog) << "Setting storage device media type"; diff --git a/deepin-devicemanager/src/DeviceManager/DeviceManager.h b/deepin-devicemanager/src/DeviceManager/DeviceManager.h index bb6a37e0..0d4ea7d8 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceManager.h +++ b/deepin-devicemanager/src/DeviceManager/DeviceManager.h @@ -211,6 +211,11 @@ class DeviceManager : public QObject */ virtual void checkDiskSize(); + /** + * @brief orderDiskByType:按照磁盘类型UFS、SSD、HDD、移动存储设备的顺序显示 + */ + virtual void orderDiskByType(); + // GPU设备相关 ************************************************************************************** /** * @brief addGpuDevice:添加显卡 diff --git a/deepin-devicemanager/src/DeviceManager/DeviceMemory.cpp b/deepin-devicemanager/src/DeviceManager/DeviceMemory.cpp index daae2bc6..6e0417b6 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceMemory.cpp +++ b/deepin-devicemanager/src/DeviceManager/DeviceMemory.cpp @@ -127,7 +127,7 @@ void DeviceMemory::initFilterKey() { qCDebug(appLog) << "Initializing filter keys for memory device"; // 初始化可显示属性 - addFilterKey("Array Handle"); // 数组程序-2 +// addFilterKey("Array Handle"); // 数组程序-2 addFilterKey("Error Information Handle"); //错误信息程序-2 addFilterKey("Form Factor"); // 尺寸型号-2 addFilterKey("Set"); // 设置-2 diff --git a/deepin-devicemanager/src/DeviceManager/DevicePower.cpp b/deepin-devicemanager/src/DeviceManager/DevicePower.cpp index c2c1e398..46c593c0 100644 --- a/deepin-devicemanager/src/DeviceManager/DevicePower.cpp +++ b/deepin-devicemanager/src/DeviceManager/DevicePower.cpp @@ -160,9 +160,9 @@ void DevicePower::initFilterKey() { qCDebug(appLog) << "DevicePower::initFilterKey"; // 初始化可显示属性 - addFilterKey("native-path"); +// addFilterKey("native-path"); addFilterKey("power supply"); - addFilterKey("updated"); +// addFilterKey("updated"); addFilterKey("has history"); addFilterKey("has statistics"); addFilterKey("rechargeable"); @@ -181,7 +181,7 @@ void DevicePower::initFilterKey() addFilterKey("percentage"); // addFilterKey("temperature")); // 温度已经常规显示-2 addFilterKey("technology"); - addFilterKey("icon-name"); +// addFilterKey("icon-name"); addFilterKey("online"); addFilterKey("daemon-version"); addFilterKey("on-battery"); diff --git a/deepin-devicemanager/src/DeviceManager/DeviceStorage.cpp b/deepin-devicemanager/src/DeviceManager/DeviceStorage.cpp index 2b3e3b4e..b8bdf1b5 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceStorage.cpp +++ b/deepin-devicemanager/src/DeviceManager/DeviceStorage.cpp @@ -329,6 +329,16 @@ QString DeviceStorage::getSerialID(QString &strDeviceLink) return strSerialNumber; } +const QString &DeviceStorage::mediaType() const +{ + return m_MediaType; +} + +const QString &DeviceStorage::interface() const +{ + return m_Interface; +} + bool DeviceStorage::addInfoFromlshw(const QMap &mapInfo) { qCDebug(appLog) << "Add lshw info for storage device"; @@ -621,16 +631,12 @@ const QString DeviceStorage::getOverviewInfo() // qCDebug(appLog) << "DeviceStorage::getOverviewInfo"; QString overViewInfo = QString("%1 (%2)").arg(m_Name).arg(m_Size); - // 见内网gerrit项目 os-config 中机型的 specialComType , 示例配置文件位置如下: - // os-config/hardware/机型/etc/dsg/configs/overrides/org.deepin.devicemanager/org.deepin.devicemanager/4000-org.deepin.devicemanager.override.json - if (Common::specialComType == 5){ - if (m_Interface.contains("UFS", Qt::CaseInsensitive)) { - overViewInfo = QString("%1 %2").arg(m_Size).arg("UFS"); - } else if (m_Interface.contains("USB", Qt::CaseInsensitive)) { - overViewInfo = QString("%1 %2").arg(m_Size).arg("USB"); - } else { - overViewInfo = QString("%1 %2").arg(m_Size).arg(m_MediaType); - } + if (m_Interface.contains("UFS", Qt::CaseInsensitive)) { + overViewInfo = QString("%1 %2").arg(m_Size).arg("UFS"); + } else if (m_Interface.contains("USB", Qt::CaseInsensitive)) { + overViewInfo = QString("%1 %2").arg(m_Size).arg("USB"); + } else { + overViewInfo = QString("%1 %2").arg(m_Size).arg(m_MediaType); } return overViewInfo; diff --git a/deepin-devicemanager/src/DeviceManager/DeviceStorage.h b/deepin-devicemanager/src/DeviceManager/DeviceStorage.h index 6a4af679..2d89749b 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceStorage.h +++ b/deepin-devicemanager/src/DeviceManager/DeviceStorage.h @@ -152,6 +152,10 @@ class DeviceStorage: public DeviceBaseInfo */ const QString getOverviewInfo() override; + const QString &interface() const; + + const QString &mediaType() const; + protected: /** diff --git a/deepin-devicemanager/src/GenerateDevice/DeviceGenerator.cpp b/deepin-devicemanager/src/GenerateDevice/DeviceGenerator.cpp index 6e2782bc..cf2640d4 100644 --- a/deepin-devicemanager/src/GenerateDevice/DeviceGenerator.cpp +++ b/deepin-devicemanager/src/GenerateDevice/DeviceGenerator.cpp @@ -273,6 +273,7 @@ void DeviceGenerator::generatorDiskDevice() getDiskInfoFromLsblk(); getDiskInfoFromSmartCtl(); DeviceManager::instance()->mergeDisk(); + DeviceManager::instance()->orderDiskByType(); qCDebug(appLog) << "DeviceGenerator::generatorDiskDevice end"; } diff --git a/deepin-devicemanager/src/GenerateDevice/HWGenerator.cpp b/deepin-devicemanager/src/GenerateDevice/HWGenerator.cpp index 101fdba0..dea5bbfe 100644 --- a/deepin-devicemanager/src/GenerateDevice/HWGenerator.cpp +++ b/deepin-devicemanager/src/GenerateDevice/HWGenerator.cpp @@ -308,8 +308,7 @@ void HWGenerator::generatorDiskDevice() tempMap["Vendor"] = "nouse"; if (name.contains("SDINFDO4-256G",Qt::CaseInsensitive)) tempMap["Name"] = "nouse"; - // 应HW的要求,将描述固定为 Universal Flash Storage - tempMap["Description"] = "Universal Flash Storage"; + if (Common::specialComType == 2) { tempMap["Interface"] = "UFS 3.1"; } diff --git a/deepin-devicemanager/src/Tool/EDIDParser.cpp b/deepin-devicemanager/src/Tool/EDIDParser.cpp index 27e80867..1a8b26c2 100644 --- a/deepin-devicemanager/src/Tool/EDIDParser.cpp +++ b/deepin-devicemanager/src/Tool/EDIDParser.cpp @@ -220,6 +220,20 @@ void EDIDParser::parseScreenSize() m_Height = height16; } + QString s66 = getBytes(4, m_LittleEndianMode ? 2 : 3), + s67 = getBytes(4, m_LittleEndianMode ? 3 : 2), + s68 = getBytes(4, m_LittleEndianMode ? 4 : 5); + + if (!s66.isEmpty() && !s67.isEmpty() && !s68.isEmpty()) { + int width_mm = hexToDec(s66).toInt() + ((hexToDec(s68).toInt() & 0xF0) << 4); + int height_mm = hexToDec(s67).toInt() + ((hexToDec(s68).toInt() & 0x0F) << 8); + + if (width_mm > 0 && height_mm > 0) { + m_Width = width_mm; + m_Height = height_mm; + } + } + double inch = sqrt((m_Width / 2.54) * (m_Width / 2.54) + (m_Height / 2.54) * (m_Height / 2.54))/10; m_ScreenSize = QString("%1 %2(%3mm×%4mm)").arg(QString::number(inch, '0', 1)).arg(QObject::tr("inch")).arg(m_Width).arg(m_Height); qCDebug(appLog) << "Screen size parsed:" << m_ScreenSize << "Width:" << m_Width << "Height:" << m_Height;