diff --git a/src/core/smartattribute.cpp b/src/core/smartattribute.cpp index 50593d1..6e29056 100644 --- a/src/core/smartattribute.cpp +++ b/src/core/smartattribute.cpp @@ -27,7 +27,7 @@ static QString getAttrName(qint32 id); static QString getAttrDescription(qint32 id); -static QString getPrettyValue(quint64 value, qint64 unit); +static QString getPrettyValue(quint64 value, SmartAttributeUnit unit); static SmartAttribute::Assessment getAssessment(const SmartAttributeParsedData& a); static QString getRaw(quint64 raw); @@ -68,28 +68,28 @@ QString SmartAttribute::assessmentToString(Assessment a) } } -static QString getPrettyValue(quint64 value, qint64 unit) +static QString getPrettyValue(quint64 value, SmartAttributeUnit unit) { QString rval; switch (unit) { - case SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MSECONDS: + case SmartAttributeUnit::Miliseconds: rval = KFormat().formatDuration(value); break; - case SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_SECTORS: + case SmartAttributeUnit::Sectors: rval = xi18ncp("@item:intable", "%1 sector", "%1 sectors", value); break; - case SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MKELVIN: + case SmartAttributeUnit::Milikelvin: rval = SmartStatus::tempToString(value); break; - case SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE: + case SmartAttributeUnit::None: rval = QLocale().toString(value); break; - case SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN: + case SmartAttributeUnit::Unknown: default: rval = xi18nc("@item:intable not applicable", "N/A"); break; diff --git a/src/core/smartattributeparseddata.cpp b/src/core/smartattributeparseddata.cpp index b14e520..b310a7b 100644 --- a/src/core/smartattributeparseddata.cpp +++ b/src/core/smartattributeparseddata.cpp @@ -31,8 +31,8 @@ #define MSECOND_VALID_SHORT_MAX (60ULL * 60ULL * 1000ULL) #define MSECOND_VALID_LONG_MAX (30ULL * 365ULL * 24ULL * 60ULL * 60ULL * 1000ULL) -static const QMap tableUnit(); -static SmartAttributeParsedData::SmartQuirk getQuirk(QString model, QString firmware); +static QMap tableUnit(); +static SmartQuirk getQuirk(QString model, QString firmware); /** Creates a new SmartAttributeParsedData object. @param disk the reference to the disk that this attribute is allocated to @@ -56,9 +56,9 @@ SmartAttributeParsedData::SmartAttributeParsedData(SmartDiskInformation *disk, m_GoodInThePast(true), m_GoodInThePastValid(false), m_Warn(false), - m_PrettyUnit(SMART_ATTRIBUTE_UNIT_UNKNOWN), + m_PrettyUnit(SmartAttributeUnit::Unknown), m_Disk(disk), - m_Quirk((SmartAttributeParsedData::SmartQuirk) 0) + m_Quirk(SmartQuirk::None) { if (disk) m_Quirk = getQuirk(disk->model(), disk->firmware()); @@ -88,7 +88,7 @@ SmartAttributeParsedData::SmartAttributeParsedData(SmartDiskInformation *disk, m_Online = flagsObj[online].toBool(); if (!updateUnit()) - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_UNKNOWN; + m_PrettyUnit = SmartAttributeUnit::Unknown; makePretty(); @@ -148,7 +148,7 @@ void SmartAttributeParsedData::validateValues() /** Make a pretty value from raw based on attribute's id */ void SmartAttributeParsedData::makePretty() { - if (m_PrettyUnit == SMART_ATTRIBUTE_UNIT_UNKNOWN) + if (m_PrettyUnit == SmartAttributeUnit::Unknown) return; switch (id()) { @@ -230,41 +230,41 @@ void SmartAttributeParsedData::verifyAttribute() void SmartAttributeParsedData::verifyTemperature() { - if (prettyUnit() != SMART_ATTRIBUTE_UNIT_MKELVIN) + if (prettyUnit() != SmartAttributeUnit::Milikelvin) return; if (prettyValue() < MKELVIN_VALID_MIN || prettyValue() > MKELVIN_VALID_MAX) - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_UNKNOWN; + m_PrettyUnit = SmartAttributeUnit::Unknown; } void SmartAttributeParsedData::verifyShortTime() { - if (prettyUnit() != SMART_ATTRIBUTE_UNIT_MSECONDS) + if (prettyUnit() != SmartAttributeUnit::Miliseconds) return; if (prettyValue() < MSECOND_VALID_MIN || prettyValue() > MSECOND_VALID_SHORT_MAX) - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_UNKNOWN; + m_PrettyUnit = SmartAttributeUnit::Unknown; } void SmartAttributeParsedData::verifyLongTime() { - if (prettyUnit() != SMART_ATTRIBUTE_UNIT_MSECONDS) + if (prettyUnit() != SmartAttributeUnit::Miliseconds) return; if (prettyValue() < MSECOND_VALID_MIN || prettyValue() > MSECOND_VALID_LONG_MAX) - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_UNKNOWN; + m_PrettyUnit = SmartAttributeUnit::Unknown; } void SmartAttributeParsedData::verifySectors() { - if (prettyUnit() != SMART_ATTRIBUTE_UNIT_SECTORS) + if (prettyUnit() != SmartAttributeUnit::Sectors) return; quint64 maxSectors = disk()->size() / 512ULL; if (prettyValue() == 0xFFFFFFFFULL || prettyValue() == 0xFFFFFFFFFFFFULL || (maxSectors > 0 && prettyValue() > maxSectors)) - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_UNKNOWN; + m_PrettyUnit = SmartAttributeUnit::Unknown; else if ((id() == 5 || id() == 197) && prettyValue() > 0) m_Warn = true; } @@ -274,120 +274,120 @@ bool SmartAttributeParsedData::updateUnit() if (m_Quirk) { switch (id()) { case 3: - if (m_Quirk & SMART_QUIRK_3_UNUSED) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_UNKNOWN; + if (m_Quirk & SmartQuirk::SMART_QUIRK_3_UNUSED) { + m_PrettyUnit = SmartAttributeUnit::Unknown; return true; } break; case 4: - if (m_Quirk & SMART_QUIRK_4_UNUSED) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_UNKNOWN; + if (m_Quirk & SmartQuirk::SMART_QUIRK_4_UNUSED) { + m_PrettyUnit = SmartAttributeUnit::Unknown; return true; } break; case 5: - if (m_Quirk & SMART_QUIRK_5_UNKNOWN) + if (m_Quirk & SmartQuirk::SMART_QUIRK_5_UNKNOWN) return false; break; case 9: - if (m_Quirk & SMART_QUIRK_9_POWERONMINUTES) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_MSECONDS; + if (m_Quirk & SmartQuirk::SMART_QUIRK_9_POWERONMINUTES) { + m_PrettyUnit = SmartAttributeUnit::Miliseconds; return true; - } else if (m_Quirk & SMART_QUIRK_9_POWERONSECONDS) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_MSECONDS; + } else if (m_Quirk & SmartQuirk::SMART_QUIRK_9_POWERONSECONDS) { + m_PrettyUnit = SmartAttributeUnit::Miliseconds; return true; - } else if (m_Quirk & SMART_QUIRK_9_POWERONHALFMINUTES) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_MSECONDS; + } else if (m_Quirk & SmartQuirk::SMART_QUIRK_9_POWERONHALFMINUTES) { + m_PrettyUnit = SmartAttributeUnit::Miliseconds; return true; - } else if (m_Quirk & SMART_QUIRK_9_UNKNOWN) + } else if (m_Quirk & SmartQuirk::SMART_QUIRK_9_UNKNOWN) return false; break; case 190: - if (m_Quirk & SMART_QUIRK_190_UNKNOWN) + if (m_Quirk & SmartQuirk::SMART_QUIRK_190_UNKNOWN) return false; break; case 192: - if (m_Quirk & SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_NONE; + if (m_Quirk & SmartQuirk::SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT) { + m_PrettyUnit = SmartAttributeUnit::None; return true; } break; case 194: - if (m_Quirk & SMART_QUIRK_194_10XCELSIUS) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_MKELVIN; + if (m_Quirk & SmartQuirk::SMART_QUIRK_194_10XCELSIUS) { + m_PrettyUnit = SmartAttributeUnit::Milikelvin; return true; - } else if (m_Quirk & SMART_QUIRK_194_UNKNOWN) + } else if (m_Quirk & SmartQuirk::SMART_QUIRK_194_UNKNOWN) return false; break; case 197: - if (m_Quirk & SMART_QUIRK_197_UNKNOWN) + if (m_Quirk & SmartQuirk::SMART_QUIRK_197_UNKNOWN) return false; break; case 198: - if (m_Quirk & SMART_QUIRK_198_UNKNOWN) + if (m_Quirk & SmartQuirk::SMART_QUIRK_198_UNKNOWN) return false; break; case 200: - if (m_Quirk & SMART_QUIRK_200_WRITEERRORCOUNT) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_NONE; + if (m_Quirk & SmartQuirk::SMART_QUIRK_200_WRITEERRORCOUNT) { + m_PrettyUnit = SmartAttributeUnit::None; return true; } break; case 201: - if (m_Quirk & SMART_QUIRK_201_DETECTEDTACOUNT) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_NONE; + if (m_Quirk & SmartQuirk::SMART_QUIRK_201_DETECTEDTACOUNT) { + m_PrettyUnit = SmartAttributeUnit::None; return true; } break; case 225: - if (m_Quirk & SMART_QUIRK_225_TOTALLBASWRITTEN) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_MB; + if (m_Quirk & SmartQuirk::SMART_QUIRK_225_TOTALLBASWRITTEN) { + m_PrettyUnit = SmartAttributeUnit::MB; return true; } break; case 226: - if (m_Quirk & SMART_QUIRK_226_TIMEWORKLOADMEDIAWEAR) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_SMALL_PERCENT; + if (m_Quirk & SmartQuirk::SMART_QUIRK_226_TIMEWORKLOADMEDIAWEAR) { + m_PrettyUnit = SmartAttributeUnit::SmallPercent; return true; } break; case 227: - if (m_Quirk & SMART_QUIRK_227_TIMEWORKLOADHOSTREADS) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_SMALL_PERCENT; + if (m_Quirk & SmartQuirk::SMART_QUIRK_227_TIMEWORKLOADHOSTREADS) { + m_PrettyUnit = SmartAttributeUnit::SmallPercent; return true; } break; case 228: - if (m_Quirk & SMART_QUIRK_228_WORKLOADTIMER) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_MSECONDS; + if (m_Quirk & SmartQuirk::SMART_QUIRK_228_WORKLOADTIMER) { + m_PrettyUnit = SmartAttributeUnit::Miliseconds; return true; } break; case 232: - if (m_Quirk & SMART_QUIRK_232_AVAILABLERESERVEDSPACE) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_PERCENT; + if (m_Quirk & SmartQuirk::SMART_QUIRK_232_AVAILABLERESERVEDSPACE) { + m_PrettyUnit = SmartAttributeUnit::Percent; return true; } break; case 233: - if (m_Quirk & SMART_QUIRK_233_MEDIAWEAROUTINDICATOR) { - m_PrettyUnit = SMART_ATTRIBUTE_UNIT_PERCENT; + if (m_Quirk & SmartQuirk::SMART_QUIRK_233_MEDIAWEAROUTINDICATOR) { + m_PrettyUnit = SmartAttributeUnit::Percent; return true; } break; @@ -403,77 +403,77 @@ bool SmartAttributeParsedData::updateUnit() return false; } -static const QMap tableUnit() +static QMap tableUnit() { - QMap table; - table.insert(1, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(2, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN); - table.insert(3, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MSECONDS); - table.insert(4, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(5, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_SECTORS); - table.insert(6, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN); - table.insert(7, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(8, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN); - table.insert(9, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MSECONDS); - table.insert(10, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(11, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(12, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(13, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(170, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_PERCENT); - table.insert(171, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(172, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(175, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(176, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(177, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(178, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(179, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(180, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(181, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(182, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(183, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(184, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(187, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_SECTORS); - table.insert(188, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(189, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(190, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MKELVIN); - table.insert(191, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(192, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(193, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(194, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MKELVIN); - table.insert(195, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(196, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(197, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_SECTORS); - table.insert(198, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_SECTORS); - table.insert(199, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(200, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(201, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(202, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(203, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN); - table.insert(204, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(205, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(206, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN); - table.insert(207, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN); - table.insert(208, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN); - table.insert(209, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN); - table.insert(220, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN); - table.insert(221, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(222, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MSECONDS); - table.insert(223, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(224, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN); - table.insert(225, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(226, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MSECONDS); - table.insert(227, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(228, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); - table.insert(230, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN); - table.insert(231, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MKELVIN); - table.insert(232, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_PERCENT); - table.insert(233, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN); - table.insert(234, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_SECTORS); - table.insert(235, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_UNKNOWN); - table.insert(240, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MSECONDS); - table.insert(241, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MB); - table.insert(242, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MB); - table.insert(250, SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE); + QMap table; + table.insert(1, SmartAttributeUnit::None); + table.insert(2, SmartAttributeUnit::Unknown); + table.insert(3, SmartAttributeUnit::Miliseconds); + table.insert(4, SmartAttributeUnit::None); + table.insert(5, SmartAttributeUnit::Sectors); + table.insert(6, SmartAttributeUnit::Unknown); + table.insert(7, SmartAttributeUnit::None); + table.insert(8, SmartAttributeUnit::Unknown); + table.insert(9, SmartAttributeUnit::Miliseconds); + table.insert(10, SmartAttributeUnit::None); + table.insert(11, SmartAttributeUnit::None); + table.insert(12, SmartAttributeUnit::None); + table.insert(13, SmartAttributeUnit::None); + table.insert(170, SmartAttributeUnit::Percent); + table.insert(171, SmartAttributeUnit::None); + table.insert(172, SmartAttributeUnit::None); + table.insert(175, SmartAttributeUnit::None); + table.insert(176, SmartAttributeUnit::None); + table.insert(177, SmartAttributeUnit::None); + table.insert(178, SmartAttributeUnit::None); + table.insert(179, SmartAttributeUnit::None); + table.insert(180, SmartAttributeUnit::None); + table.insert(181, SmartAttributeUnit::None); + table.insert(182, SmartAttributeUnit::None); + table.insert(183, SmartAttributeUnit::None); + table.insert(184, SmartAttributeUnit::None); + table.insert(187, SmartAttributeUnit::Sectors); + table.insert(188, SmartAttributeUnit::None); + table.insert(189, SmartAttributeUnit::None); + table.insert(190, SmartAttributeUnit::Milikelvin); + table.insert(191, SmartAttributeUnit::None); + table.insert(192, SmartAttributeUnit::None); + table.insert(193, SmartAttributeUnit::None); + table.insert(194, SmartAttributeUnit::Milikelvin); + table.insert(195, SmartAttributeUnit::None); + table.insert(196, SmartAttributeUnit::None); + table.insert(197, SmartAttributeUnit::Sectors); + table.insert(198, SmartAttributeUnit::Sectors); + table.insert(199, SmartAttributeUnit::None); + table.insert(200, SmartAttributeUnit::None); + table.insert(201, SmartAttributeUnit::None); + table.insert(202, SmartAttributeUnit::None); + table.insert(203, SmartAttributeUnit::Unknown); + table.insert(204, SmartAttributeUnit::None); + table.insert(205, SmartAttributeUnit::None); + table.insert(206, SmartAttributeUnit::Unknown); + table.insert(207, SmartAttributeUnit::Unknown); + table.insert(208, SmartAttributeUnit::Unknown); + table.insert(209, SmartAttributeUnit::Unknown); + table.insert(220, SmartAttributeUnit::Unknown); + table.insert(221, SmartAttributeUnit::None); + table.insert(222, SmartAttributeUnit::Miliseconds); + table.insert(223, SmartAttributeUnit::None); + table.insert(224, SmartAttributeUnit::Unknown); + table.insert(225, SmartAttributeUnit::None); + table.insert(226, SmartAttributeUnit::Miliseconds); + table.insert(227, SmartAttributeUnit::None); + table.insert(228, SmartAttributeUnit::None); + table.insert(230, SmartAttributeUnit::Unknown); + table.insert(231, SmartAttributeUnit::Milikelvin); + table.insert(232, SmartAttributeUnit::Percent); + table.insert(233, SmartAttributeUnit::Unknown); + table.insert(234, SmartAttributeUnit::Sectors); + table.insert(235, SmartAttributeUnit::Unknown); + table.insert(240, SmartAttributeUnit::Miliseconds); + table.insert(241, SmartAttributeUnit::MB); + table.insert(242, SmartAttributeUnit::MB); + table.insert(250, SmartAttributeUnit::None); return table; } @@ -485,20 +485,20 @@ static const QVector quirkDatabase QVector quirkDb; quirkDb << QuirkDatabase(QStringLiteral("^(FUJITSU MHY2120BH|FUJITSU MHY2250BH)$"), QStringLiteral("^0085000B$"), - (SmartAttributeParsedData::SmartQuirk) (SmartAttributeParsedData::SMART_QUIRK_9_POWERONMINUTES | - SmartAttributeParsedData::SMART_QUIRK_197_UNKNOWN | - SmartAttributeParsedData::SMART_QUIRK_198_UNKNOWN)); + static_cast(SmartQuirk::SMART_QUIRK_9_POWERONMINUTES | + SmartQuirk::SMART_QUIRK_197_UNKNOWN | + SmartQuirk::SMART_QUIRK_198_UNKNOWN)); quirkDb << QuirkDatabase(QStringLiteral("^FUJITSU MHR2040AT$"), QStringLiteral(), - (SmartAttributeParsedData::SmartQuirk) (SmartAttributeParsedData::SMART_QUIRK_9_POWERONSECONDS | - SmartAttributeParsedData::SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT | - SmartAttributeParsedData::SMART_QUIRK_200_WRITEERRORCOUNT)); + static_cast(SmartQuirk::SMART_QUIRK_9_POWERONSECONDS | + SmartQuirk::SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT | + SmartQuirk::SMART_QUIRK_200_WRITEERRORCOUNT)); quirkDb << QuirkDatabase(QStringLiteral("^FUJITSU MHS20[6432]0AT( .)?$"), QStringLiteral(), - (SmartAttributeParsedData::SmartQuirk) (SmartAttributeParsedData::SMART_QUIRK_9_POWERONSECONDS | - SmartAttributeParsedData::SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT | - SmartAttributeParsedData::SMART_QUIRK_200_WRITEERRORCOUNT | - SmartAttributeParsedData::SMART_QUIRK_201_DETECTEDTACOUNT)); + static_cast(SmartQuirk::SMART_QUIRK_9_POWERONSECONDS | + SmartQuirk::SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT | + SmartQuirk::SMART_QUIRK_200_WRITEERRORCOUNT | + SmartQuirk::SMART_QUIRK_201_DETECTEDTACOUNT)); quirkDb << QuirkDatabase(QStringLiteral("^(" "FUJITSU M1623TAU|" @@ -516,34 +516,33 @@ static const QVector quirkDatabase "FUJITSU MP[A-G]3...A[HTEV]U?.*" ")$"), QStringLiteral(), - SmartAttributeParsedData::SMART_QUIRK_9_POWERONSECONDS); + SmartQuirk::SMART_QUIRK_9_POWERONSECONDS); quirkDb << QuirkDatabase(QStringLiteral("^(" "SAMSUNG SV4012H|" "SAMSUNG SP(0451|08[0124]2|12[0145]3|16[0145]4)[CN]" ")$"), QStringLiteral(), - SmartAttributeParsedData::SMART_QUIRK_9_POWERONHALFMINUTES); + SmartQuirk::SMART_QUIRK_9_POWERONHALFMINUTES); quirkDb << QuirkDatabase(QStringLiteral("^(" "SAMSUNG SV0412H|" "SAMSUNG SV1204H" ")$"), QStringLiteral(), - (SmartAttributeParsedData::SmartQuirk) (SmartAttributeParsedData::SMART_QUIRK_9_POWERONHALFMINUTES | - SmartAttributeParsedData::SMART_QUIRK_194_10XCELSIUS)); + static_cast(SmartQuirk::SMART_QUIRK_9_POWERONHALFMINUTES | SmartQuirk::SMART_QUIRK_194_10XCELSIUS)); quirkDb << QuirkDatabase(QStringLiteral("^SAMSUNG SP40A2H$"), QStringLiteral("^RR100-07$"), - SmartAttributeParsedData::SMART_QUIRK_9_POWERONHALFMINUTES); + SmartQuirk::SMART_QUIRK_9_POWERONHALFMINUTES); quirkDb << QuirkDatabase(QStringLiteral("^SAMSUNG SP80A4H$"), QStringLiteral("^RT100-06$"), - SmartAttributeParsedData::SMART_QUIRK_9_POWERONHALFMINUTES); + SmartQuirk::SMART_QUIRK_9_POWERONHALFMINUTES); quirkDb << QuirkDatabase(QStringLiteral("^SAMSUNG SP8004H$"), QStringLiteral("^QW100-61$"), - SmartAttributeParsedData::SMART_QUIRK_9_POWERONHALFMINUTES); + SmartQuirk::SMART_QUIRK_9_POWERONHALFMINUTES); quirkDb << QuirkDatabase(QStringLiteral("^(" "Maxtor 2B0(0[468]|1[05]|20)H1|" @@ -551,8 +550,7 @@ static const QVector quirkDatabase "Maxtor 4D0(20H1|40H2|60H3|80H4)" ")$"), QStringLiteral(), - (SmartAttributeParsedData::SmartQuirk) (SmartAttributeParsedData::SMART_QUIRK_9_POWERONMINUTES | - SmartAttributeParsedData::SMART_QUIRK_194_UNKNOWN)); + static_cast(SmartQuirk::SMART_QUIRK_9_POWERONMINUTES | SmartQuirk::SMART_QUIRK_194_UNKNOWN)); quirkDb << QuirkDatabase(QStringLiteral("^(" "Maxtor 2F0[234]0[JL]0|" @@ -585,7 +583,7 @@ static const QVector quirkDatabase "Maxtor 7L(25|30)0[SR]0" ")$"), QStringLiteral(), - SmartAttributeParsedData::SMART_QUIRK_9_POWERONMINUTES); + SmartQuirk::SMART_QUIRK_9_POWERONMINUTES); quirkDb << QuirkDatabase(QStringLiteral("^(" "HITACHI_DK14FA-20B|" @@ -595,34 +593,31 @@ static const QVector quirkDatabase "HTC4260[23]0G5CE00|HTC4260[56]0G8CE00" ")$"), QStringLiteral(), - (SmartAttributeParsedData::SmartQuirk) (SmartAttributeParsedData::SMART_QUIRK_9_POWERONMINUTES | - SmartAttributeParsedData::SMART_QUIRK_193_LOADUNLOAD)); + static_cast(SmartQuirk::SMART_QUIRK_9_POWERONMINUTES | SmartQuirk::SMART_QUIRK_193_LOADUNLOAD)); quirkDb << QuirkDatabase(QStringLiteral("^HTS541010G9SA00$"), QStringLiteral("^MBZOC60P$"), - SmartAttributeParsedData::SMART_QUIRK_5_UNKNOWN); + SmartQuirk::SMART_QUIRK_5_UNKNOWN); quirkDb << QuirkDatabase(QStringLiteral("^MCCOE64GEMPP$"), QStringLiteral("^2.9.0[3-9]$"), - (SmartAttributeParsedData::SmartQuirk) (SmartAttributeParsedData::SMART_QUIRK_5_UNKNOWN | - SmartAttributeParsedData::SMART_QUIRK_190_UNKNOWN)); + static_cast(SmartQuirk::SMART_QUIRK_5_UNKNOWN | SmartQuirk::SMART_QUIRK_190_UNKNOWN)); quirkDb << QuirkDatabase(QStringLiteral("^INTEL SSDSA2(CT|BT|CW|BW)[0-9]{3}G3.*$"), QStringLiteral(), - (SmartAttributeParsedData::SmartQuirk) - (SmartAttributeParsedData::SMART_QUIRK_3_UNUSED | - SmartAttributeParsedData::SMART_QUIRK_4_UNUSED | - SmartAttributeParsedData::SMART_QUIRK_225_TOTALLBASWRITTEN | - SmartAttributeParsedData::SMART_QUIRK_226_TIMEWORKLOADMEDIAWEAR | - SmartAttributeParsedData::SMART_QUIRK_227_TIMEWORKLOADHOSTREADS | - SmartAttributeParsedData::SMART_QUIRK_228_WORKLOADTIMER | - SmartAttributeParsedData::SMART_QUIRK_232_AVAILABLERESERVEDSPACE | - SmartAttributeParsedData::SMART_QUIRK_233_MEDIAWEAROUTINDICATOR)); + static_cast(SmartQuirk::SMART_QUIRK_3_UNUSED | + SmartQuirk::SMART_QUIRK_4_UNUSED | + SmartQuirk::SMART_QUIRK_225_TOTALLBASWRITTEN | + SmartQuirk::SMART_QUIRK_226_TIMEWORKLOADMEDIAWEAR | + SmartQuirk::SMART_QUIRK_227_TIMEWORKLOADHOSTREADS | + SmartQuirk::SMART_QUIRK_228_WORKLOADTIMER | + SmartQuirk::SMART_QUIRK_232_AVAILABLERESERVEDSPACE | + SmartQuirk::SMART_QUIRK_233_MEDIAWEAROUTINDICATOR)); return quirkDb; } -static SmartAttributeParsedData::SmartQuirk getQuirk(QString model, QString firmware) +static SmartQuirk getQuirk(QString model, QString firmware) { const QVector db = quirkDatabase(); @@ -645,5 +640,5 @@ static SmartAttributeParsedData::SmartQuirk getQuirk(QString model, QString firm return item.quirk; } - return (SmartAttributeParsedData::SmartQuirk) 0; + return SmartQuirk::None; } diff --git a/src/core/smartattributeparseddata.h b/src/core/smartattributeparseddata.h index 3f1a7fc..014c277 100644 --- a/src/core/smartattributeparseddata.h +++ b/src/core/smartattributeparseddata.h @@ -23,6 +23,45 @@ class SmartDiskInformation; +/** SMART Quirk */ +enum SmartQuirk { + None = 0x000000, + SMART_QUIRK_9_POWERONMINUTES = 0x000001, + SMART_QUIRK_9_POWERONSECONDS = 0x000002, + SMART_QUIRK_9_POWERONHALFMINUTES = 0x000004, + SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT = 0x000008, + SMART_QUIRK_193_LOADUNLOAD = 0x000010, + SMART_QUIRK_194_10XCELSIUS = 0x000020, + SMART_QUIRK_194_UNKNOWN = 0x000040, + SMART_QUIRK_200_WRITEERRORCOUNT = 0x000080, + SMART_QUIRK_201_DETECTEDTACOUNT = 0x000100, + SMART_QUIRK_5_UNKNOWN = 0x000200, + SMART_QUIRK_9_UNKNOWN = 0x000400, + SMART_QUIRK_197_UNKNOWN = 0x000800, + SMART_QUIRK_198_UNKNOWN = 0x001000, + SMART_QUIRK_190_UNKNOWN = 0x002000, + SMART_QUIRK_232_AVAILABLERESERVEDSPACE = 0x004000, + SMART_QUIRK_233_MEDIAWEAROUTINDICATOR = 0x008000, + SMART_QUIRK_225_TOTALLBASWRITTEN = 0x010000, + SMART_QUIRK_4_UNUSED = 0x020000, + SMART_QUIRK_226_TIMEWORKLOADMEDIAWEAR = 0x040000, + SMART_QUIRK_227_TIMEWORKLOADHOSTREADS = 0x080000, + SMART_QUIRK_228_WORKLOADTIMER = 0x100000, + SMART_QUIRK_3_UNUSED = 0x200000, +}; + +/** A unit for SMART attributes */ +enum class SmartAttributeUnit { + Unknown, + None, + Miliseconds, + Sectors, + Milikelvin, + SmallPercent, /* percentage with 3 decimal points */ + Percent, + MB, +}; + /** A SMART parsed attribute. It receives the attribute data from JSON, retrieve its data and validates its values. @@ -32,55 +71,15 @@ class SmartDiskInformation; class SmartAttributeParsedData { public: - - /** A unit for SMART attributes */ - enum SmartAttributeUnit { - SMART_ATTRIBUTE_UNIT_UNKNOWN, - SMART_ATTRIBUTE_UNIT_NONE, - SMART_ATTRIBUTE_UNIT_MSECONDS, - SMART_ATTRIBUTE_UNIT_SECTORS, - SMART_ATTRIBUTE_UNIT_MKELVIN, - SMART_ATTRIBUTE_UNIT_SMALL_PERCENT, - SMART_ATTRIBUTE_UNIT_PERCENT, - SMART_ATTRIBUTE_UNIT_MB, - _SMART_ATTRIBUTE_UNIT_MAX - }; - - /** SMART Quirk */ - enum SmartQuirk { - SMART_QUIRK_9_POWERONMINUTES = 0x000001, - SMART_QUIRK_9_POWERONSECONDS = 0x000002, - SMART_QUIRK_9_POWERONHALFMINUTES = 0x000004, - SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT = 0x000008, - SMART_QUIRK_193_LOADUNLOAD = 0x000010, - SMART_QUIRK_194_10XCELSIUS = 0x000020, - SMART_QUIRK_194_UNKNOWN = 0x000040, - SMART_QUIRK_200_WRITEERRORCOUNT = 0x000080, - SMART_QUIRK_201_DETECTEDTACOUNT = 0x000100, - SMART_QUIRK_5_UNKNOWN = 0x000200, - SMART_QUIRK_9_UNKNOWN = 0x000400, - SMART_QUIRK_197_UNKNOWN = 0x000800, - SMART_QUIRK_198_UNKNOWN = 0x001000, - SMART_QUIRK_190_UNKNOWN = 0x002000, - SMART_QUIRK_232_AVAILABLERESERVEDSPACE = 0x004000, - SMART_QUIRK_233_MEDIAWEAROUTINDICATOR = 0x008000, - SMART_QUIRK_225_TOTALLBASWRITTEN = 0x010000, - SMART_QUIRK_4_UNUSED = 0x020000, - SMART_QUIRK_226_TIMEWORKLOADMEDIAWEAR = 0x040000, - SMART_QUIRK_227_TIMEWORKLOADHOSTREADS = 0x080000, - SMART_QUIRK_228_WORKLOADTIMER = 0x100000, - SMART_QUIRK_3_UNUSED = 0x200000 - }; - /** SMART Quirk to some particular model and firmware */ struct SmartQuirkDataBase { QString model; QString firmware; - SmartAttributeParsedData::SmartQuirk quirk; + SmartQuirk quirk; SmartQuirkDataBase(const QString &m = QString(), const QString &f = QString(), - SmartAttributeParsedData::SmartQuirk q = (SmartAttributeParsedData::SmartQuirk) 0) : + SmartQuirk q = SmartQuirk::None) : model(m), firmware(f), quirk(q) diff --git a/src/core/smartdiskinformation.cpp b/src/core/smartdiskinformation.cpp index f227692..fc46d21 100644 --- a/src/core/smartdiskinformation.cpp +++ b/src/core/smartdiskinformation.cpp @@ -108,16 +108,16 @@ bool SmartDiskInformation::updateTemperature() airflowTemperatureCelsius = findAttribute(190); if (temperatureCelsius != nullptr - && temperatureCelsius->prettyUnit() == SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MKELVIN) { + && temperatureCelsius->prettyUnit() == SmartAttributeUnit::Milikelvin) { m_Temperature = temperatureCelsius->prettyValue(); return true; } else if (temperatureCelsius2 != nullptr - && temperatureCelsius2->prettyUnit() == SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MKELVIN) { + && temperatureCelsius2->prettyUnit() == SmartAttributeUnit::Milikelvin) { m_Temperature = temperatureCelsius2->prettyValue(); return true; } else if (airflowTemperatureCelsius != nullptr && airflowTemperatureCelsius->prettyUnit() == - SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MKELVIN) { + SmartAttributeUnit::Milikelvin) { m_Temperature = airflowTemperatureCelsius->prettyValue(); return true; } @@ -136,11 +136,11 @@ bool SmartDiskInformation::updatePowerOn() powerOnSeconds = findAttribute(233); if (powerOnHours != nullptr - && powerOnHours->prettyUnit() == SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MSECONDS) { + && powerOnHours->prettyUnit() == SmartAttributeUnit::Miliseconds) { m_PoweredOn = powerOnHours->prettyValue(); return true; } else if (powerOnSeconds != nullptr - && powerOnSeconds->prettyUnit() == SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_MSECONDS) { + && powerOnSeconds->prettyUnit() == SmartAttributeUnit::Miliseconds) { m_PoweredOn = powerOnSeconds->prettyValue(); return true; } @@ -157,7 +157,7 @@ bool SmartDiskInformation::updatePowerCycle() powerCycleCount = findAttribute(12); if (powerCycleCount != nullptr - && powerCycleCount->prettyUnit() == SmartAttributeParsedData::SMART_ATTRIBUTE_UNIT_NONE) { + && powerCycleCount->prettyUnit() == SmartAttributeUnit::None) { m_PowerCycles = powerCycleCount->prettyValue(); return true; }