216 lines
5.5 KiB
C++
216 lines
5.5 KiB
C++
/*
|
|
SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho <caiojcarvalho@gmail.com>
|
|
SPDX-FileCopyrightText: 2018 Andrius Štikonas <andrius@stikonas.eu>
|
|
|
|
SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
|
|
#ifndef KPMCORE_SMARTATTRIBUTEPARSEDDATA_H
|
|
#define KPMCORE_SMARTATTRIBUTEPARSEDDATA_H
|
|
|
|
#include <QJsonObject>
|
|
#include <QString>
|
|
|
|
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.
|
|
|
|
@author Caio Jordão Carvalho <caiojcarvalho@gmail.com>
|
|
*/
|
|
class SmartAttributeParsedData
|
|
{
|
|
public:
|
|
/** SMART Quirk to some particular model and firmware */
|
|
struct SmartQuirkDataBase {
|
|
QString model;
|
|
QString firmware;
|
|
SmartQuirk quirk;
|
|
|
|
SmartQuirkDataBase(const QString &m = QString(),
|
|
const QString &f = QString(),
|
|
SmartQuirk q = SmartQuirk::None) :
|
|
model(m),
|
|
firmware(f),
|
|
quirk(q)
|
|
{
|
|
};
|
|
};
|
|
|
|
public:
|
|
SmartAttributeParsedData(SmartDiskInformation *disk, QJsonObject jsonAttribute);
|
|
|
|
SmartAttributeParsedData(const SmartAttributeParsedData &other);
|
|
|
|
public:
|
|
quint32 id() const
|
|
{
|
|
return m_Id; /**< @return attribute id */
|
|
}
|
|
|
|
qint32 currentValue() const
|
|
{
|
|
return m_CurrentValue; /**< @return attribute current value */
|
|
}
|
|
|
|
qint32 worstValue() const
|
|
{
|
|
return m_WorstValue; /**< @return attribute worst value */
|
|
}
|
|
|
|
qint32 threshold() const
|
|
{
|
|
return m_Threshold; /**< @return attribute threshold value */
|
|
}
|
|
|
|
bool prefailure() const
|
|
{
|
|
return m_Prefailure; /**< @return attribute prefailure status */
|
|
}
|
|
|
|
bool online() const
|
|
{
|
|
return m_Online; /**< @return attribute online status */
|
|
}
|
|
|
|
quint64 raw() const
|
|
{
|
|
return m_Raw; /**< @return attribute raw value */
|
|
}
|
|
|
|
quint64 prettyValue() const
|
|
{
|
|
return m_PrettyValue; /**< @return attribute pretty value */
|
|
}
|
|
|
|
SmartAttributeUnit prettyUnit() const
|
|
{
|
|
return m_PrettyUnit; /**< @return pretty unit value */
|
|
}
|
|
|
|
bool goodNowValid() const
|
|
{
|
|
return m_GoodNowValid; /**< @return good now attribute status validation */
|
|
}
|
|
|
|
bool goodNow() const
|
|
{
|
|
return m_GoodNow; /**< @return good now attribute status */
|
|
}
|
|
|
|
bool goodInThePastValid() const
|
|
{
|
|
return m_GoodInThePastValid; /**< @return good in the past attribute status validation */
|
|
}
|
|
|
|
bool goodInThePast() const
|
|
{
|
|
return m_GoodInThePast; /**< @return good in the past attribute status */
|
|
}
|
|
|
|
bool thresholdValid() const
|
|
{
|
|
return m_ThresholdValid; /**< @return threshold value validation */
|
|
}
|
|
|
|
bool currentValueValid() const
|
|
{
|
|
return m_CurrentValueValid; /**< @return current value validation */
|
|
}
|
|
|
|
bool worstValueValid() const
|
|
{
|
|
return m_WorstValueValid; /**< @return worst value validation */
|
|
}
|
|
|
|
bool warn() const
|
|
{
|
|
return m_Warn; /**< @return warn status */
|
|
}
|
|
|
|
SmartDiskInformation *disk() const
|
|
{
|
|
return m_Disk; /**< @return attribute's disk reference */
|
|
}
|
|
|
|
protected:
|
|
void validateValues();
|
|
|
|
bool updateUnit();
|
|
|
|
void makePretty();
|
|
|
|
void verifyAttribute();
|
|
|
|
void verifyTemperature();
|
|
|
|
void verifyShortTime();
|
|
|
|
void verifyLongTime();
|
|
|
|
void verifySectors();
|
|
|
|
private:
|
|
quint32 m_Id;
|
|
qint32 m_CurrentValue;
|
|
qint32 m_WorstValue;
|
|
qint32 m_Threshold;
|
|
quint64 m_Raw;
|
|
quint64 m_PrettyValue;
|
|
bool m_CurrentValueValid;
|
|
bool m_WorstValueValid;
|
|
bool m_ThresholdValid;
|
|
bool m_Prefailure;
|
|
bool m_Online;
|
|
bool m_GoodNow;
|
|
bool m_GoodNowValid;
|
|
bool m_GoodInThePast;
|
|
bool m_GoodInThePastValid;
|
|
bool m_Warn;
|
|
SmartAttributeUnit m_PrettyUnit;
|
|
SmartDiskInformation *m_Disk;
|
|
SmartQuirk m_Quirk;
|
|
};
|
|
|
|
#endif // SMARTATTRIBUTEPARSEDDATA_H
|