File indexing completed on 2024-05-05 05:48:42

0001 /*
0002     SPDX-FileCopyrightText: 2010 Volker Lanz <vl@fidra.de>
0003     SPDX-FileCopyrightText: 2015 Chris Campbell <c.j.campbell@ed.ac.uk>
0004     SPDX-FileCopyrightText: 2016-2018 Andrius Štikonas <andrius@stikonas.eu>
0005     SPDX-FileCopyrightText: 2016 Teo Mrnjavac <teo@kde.org>
0006     SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho <caiojcarvalho@gmail.com>
0007     SPDX-FileCopyrightText: 2019 Yuri Chornoivan <yurchor@ukr.net>
0008 
0009     SPDX-License-Identifier: GPL-3.0-or-later
0010 */
0011 
0012 #ifndef KPMCORE_SMARTSTATUS_H
0013 #define KPMCORE_SMARTSTATUS_H
0014 
0015 #include "util/libpartitionmanagerexport.h"
0016 #include "core/smartattribute.h"
0017 
0018 #include <QtGlobal>
0019 #include <QString>
0020 #include <QList>
0021 
0022 struct SkSmartAttributeParsedData;
0023 struct SkDisk;
0024 
0025 class LIBKPMCORE_EXPORT SmartStatus
0026 {
0027 public:
0028     enum class Overall {
0029         Good,
0030         BadPast,
0031         BadSectors,
0032         BadNow,
0033         BadSectorsMany,
0034         Bad
0035     };
0036 
0037     enum class SelfTestStatus {
0038         Success,
0039         Aborted,
0040         Interrupted,
0041         Fatal,
0042         ErrorUnknown,
0043         ErrorEletrical,
0044         ErrorServo,
0045         ErrorRead,
0046         ErrorHandling,
0047         InProgress = 15,
0048     };
0049 
0050 public:
0051     typedef QList<SmartAttribute> Attributes;
0052 
0053 public:
0054     explicit SmartStatus(const QString &device_path);
0055 
0056 public:
0057     void update();
0058 
0059     const QString &devicePath() const
0060     {
0061         return m_DevicePath;
0062     }
0063     bool isValid() const
0064     {
0065         return m_InitSuccess;
0066     }
0067     bool status() const
0068     {
0069         return m_Status;
0070     }
0071     const QString &modelName() const
0072     {
0073         return m_ModelName;
0074     }
0075     const QString &serial() const
0076     {
0077         return m_Serial;
0078     }
0079     const QString &firmware() const
0080     {
0081         return m_Firmware;
0082     }
0083     quint64 temp() const
0084     {
0085         return m_Temp;
0086     }
0087     quint64 badSectors() const
0088     {
0089         return m_BadSectors;
0090     }
0091     quint64 powerCycles() const
0092     {
0093         return m_PowerCycles;
0094     }
0095     quint64 poweredOn() const
0096     {
0097         return m_PoweredOn;
0098     }
0099     const Attributes &attributes() const
0100     {
0101         return m_Attributes;
0102     }
0103     Overall overall() const
0104     {
0105         return m_Overall;
0106     }
0107     SelfTestStatus selfTestStatus() const
0108     {
0109         return m_SelfTestStatus;
0110     }
0111 
0112     void addAttributes(QList<SmartAttributeParsedData> attr);
0113 
0114     static QString tempToString(quint64 mkelvin);
0115     static QString overallAssessmentToString(Overall o);
0116     static QString selfTestStatusToString(SmartStatus::SelfTestStatus s);
0117 
0118 private:
0119     void setStatus(bool s)
0120     {
0121         m_Status = s;
0122     }
0123     void setModelName(const QString &name)
0124     {
0125         m_ModelName = name;
0126     }
0127     void setSerial(const QString &s)
0128     {
0129         m_Serial = s;
0130     }
0131     void setFirmware(const QString &f)
0132     {
0133         m_Firmware = f;
0134     }
0135     void setTemp(quint64 t)
0136     {
0137         m_Temp = t;
0138     }
0139     void setInitSuccess(bool b)
0140     {
0141         m_InitSuccess = b;
0142     }
0143     void setBadSectors(quint64 s)
0144     {
0145         m_BadSectors = s;
0146     }
0147     void setPowerCycles(quint64 p)
0148     {
0149         m_PowerCycles = p;
0150     }
0151     void setPoweredOn(quint64 t)
0152     {
0153         m_PoweredOn = t;
0154     }
0155     void setOverall(Overall o)
0156     {
0157         m_Overall = o;
0158     }
0159     void setSelfTestStatus(SelfTestStatus s)
0160     {
0161         m_SelfTestStatus = s;
0162     }
0163 
0164 private:
0165     const QString m_DevicePath;
0166     bool m_InitSuccess;
0167     bool m_Status;
0168     QString m_ModelName;
0169     QString m_Serial;
0170     QString m_Firmware;
0171     Overall m_Overall;
0172     SelfTestStatus m_SelfTestStatus;
0173     quint64 m_Temp;
0174     quint64 m_BadSectors;
0175     quint64 m_PowerCycles;
0176     quint64 m_PoweredOn;
0177     Attributes m_Attributes;
0178 };
0179 
0180 #endif