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