1 /*
2     SPDX-FileCopyrightText: 2010 Volker Lanz <vl@fidra.de>
3     SPDX-FileCopyrightText: 2015 Chris Campbell <c.j.campbell@ed.ac.uk>
4     SPDX-FileCopyrightText: 2016-2018 Andrius Štikonas <andrius@stikonas.eu>
5     SPDX-FileCopyrightText: 2016 Teo Mrnjavac <teo@kde.org>
6     SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho <caiojcarvalho@gmail.com>
7     SPDX-FileCopyrightText: 2019 Yuri Chornoivan <yurchor@ukr.net>
8 
9     SPDX-License-Identifier: GPL-3.0-or-later
10 */
11 
12 #ifndef KPMCORE_SMARTSTATUS_H
13 #define KPMCORE_SMARTSTATUS_H
14 
15 #include "util/libpartitionmanagerexport.h"
16 #include "core/smartattribute.h"
17 
18 #include <QtGlobal>
19 #include <QString>
20 #include <QList>
21 
22 struct SkSmartAttributeParsedData;
23 struct SkDisk;
24 
25 class LIBKPMCORE_EXPORT SmartStatus
26 {
27 public:
28     enum class Overall {
29         Good,
30         BadPast,
31         BadSectors,
32         BadNow,
33         BadSectorsMany,
34         Bad
35     };
36 
37     enum class SelfTestStatus {
38         Success,
39         Aborted,
40         Interrupted,
41         Fatal,
42         ErrorUnknown,
43         ErrorEletrical,
44         ErrorServo,
45         ErrorRead,
46         ErrorHandling,
47         InProgress = 15,
48     };
49 
50 public:
51     typedef QList<SmartAttribute> Attributes;
52 
53 public:
54     explicit SmartStatus(const QString &device_path);
55 
56 public:
57     void update();
58 
devicePath()59     const QString &devicePath() const
60     {
61         return m_DevicePath;
62     }
isValid()63     bool isValid() const
64     {
65         return m_InitSuccess;
66     }
status()67     bool status() const
68     {
69         return m_Status;
70     }
modelName()71     const QString &modelName() const
72     {
73         return m_ModelName;
74     }
serial()75     const QString &serial() const
76     {
77         return m_Serial;
78     }
firmware()79     const QString &firmware() const
80     {
81         return m_Firmware;
82     }
temp()83     quint64 temp() const
84     {
85         return m_Temp;
86     }
badSectors()87     quint64 badSectors() const
88     {
89         return m_BadSectors;
90     }
powerCycles()91     quint64 powerCycles() const
92     {
93         return m_PowerCycles;
94     }
poweredOn()95     quint64 poweredOn() const
96     {
97         return m_PoweredOn;
98     }
attributes()99     const Attributes &attributes() const
100     {
101         return m_Attributes;
102     }
overall()103     Overall overall() const
104     {
105         return m_Overall;
106     }
selfTestStatus()107     SelfTestStatus selfTestStatus() const
108     {
109         return m_SelfTestStatus;
110     }
111 
112     void addAttributes(QList<SmartAttributeParsedData> attr);
113 
114     static QString tempToString(quint64 mkelvin);
115     static QString overallAssessmentToString(Overall o);
116     static QString selfTestStatusToString(SmartStatus::SelfTestStatus s);
117 
118 private:
setStatus(bool s)119     void setStatus(bool s)
120     {
121         m_Status = s;
122     }
setModelName(const QString & name)123     void setModelName(const QString &name)
124     {
125         m_ModelName = name;
126     }
setSerial(const QString & s)127     void setSerial(const QString &s)
128     {
129         m_Serial = s;
130     }
setFirmware(const QString & f)131     void setFirmware(const QString &f)
132     {
133         m_Firmware = f;
134     }
setTemp(quint64 t)135     void setTemp(quint64 t)
136     {
137         m_Temp = t;
138     }
setInitSuccess(bool b)139     void setInitSuccess(bool b)
140     {
141         m_InitSuccess = b;
142     }
setBadSectors(quint64 s)143     void setBadSectors(quint64 s)
144     {
145         m_BadSectors = s;
146     }
setPowerCycles(quint64 p)147     void setPowerCycles(quint64 p)
148     {
149         m_PowerCycles = p;
150     }
setPoweredOn(quint64 t)151     void setPoweredOn(quint64 t)
152     {
153         m_PoweredOn = t;
154     }
setOverall(Overall o)155     void setOverall(Overall o)
156     {
157         m_Overall = o;
158     }
setSelfTestStatus(SelfTestStatus s)159     void setSelfTestStatus(SelfTestStatus s)
160     {
161         m_SelfTestStatus = s;
162     }
163 
164 private:
165     const QString m_DevicePath;
166     bool m_InitSuccess;
167     bool m_Status;
168     QString m_ModelName;
169     QString m_Serial;
170     QString m_Firmware;
171     Overall m_Overall;
172     SelfTestStatus m_SelfTestStatus;
173     quint64 m_Temp;
174     quint64 m_BadSectors;
175     quint64 m_PowerCycles;
176     quint64 m_PoweredOn;
177     Attributes m_Attributes;
178 };
179 
180 #endif
181