Added SMART support for Samsung SSDs.
1.1 --- a/Hardware/HDD/AbstractHarddrive.cs Sun Jan 01 17:12:34 2012 +0000
1.2 +++ b/Hardware/HDD/AbstractHarddrive.cs Mon Jan 02 18:44:19 2012 +0000
1.3 @@ -54,6 +54,7 @@
1.4 typeof(SSDIntel),
1.5 typeof(SSDSandforce),
1.6 typeof(SSDIndilinx),
1.7 + typeof(SSDSamsung),
1.8 typeof(GenericHarddisk)
1.9 };
1.10
1.11 @@ -233,7 +234,7 @@
1.12 r.AppendFormat(CultureInfo.InvariantCulture,
1.13 " {0}{1}{2}{3}{4}{5}{6}{7}",
1.14 ("ID").PadRight(3),
1.15 - ("Description").PadRight(32),
1.16 + ("Description").PadRight(35),
1.17 ("Raw Value").PadRight(13),
1.18 ("Worst").PadRight(6),
1.19 ("Value").PadRight(6),
1.20 @@ -268,7 +269,7 @@
1.21 r.AppendFormat(CultureInfo.InvariantCulture,
1.22 " {0}{1}{2}{3}{4}{5}{6}{7}",
1.23 value.Identifier.ToString("X2").PadRight(3),
1.24 - description.PadRight(32),
1.25 + description.PadRight(35),
1.26 raw.Replace("-", "").PadRight(13),
1.27 value.WorstValue.ToString(CultureInfo.InvariantCulture).PadRight(6),
1.28 value.AttrValue.ToString(CultureInfo.InvariantCulture).PadRight(6),
2.1 --- a/Hardware/HDD/DebugSmart.cs Sun Jan 01 17:12:34 2012 +0000
2.2 +++ b/Hardware/HDD/DebugSmart.cs Mon Jan 02 18:44:19 2012 +0000
2.3 @@ -46,7 +46,7 @@
2.4 internal class DebugSmart : ISmart {
2.5
2.6 private Drive[] drives = {
2.7 - new Drive("KINGSTON SNV425S264GB", 16,
2.8 + new Drive("KINGSTON SNV425S264GB", null, 16,
2.9 @" 01 000000000000 100 100
2.10 02 000000000000 100 100
2.11 03 000000000000 100 100
2.12 @@ -65,7 +65,7 @@
2.13 AA 07007B000000 100 100
2.14 AD 0E1E71304919 100 100"),
2.15
2.16 - new Drive("PLEXTOR PX-128M2S", 16,
2.17 + new Drive("PLEXTOR PX-128M2S", "1.03", 16,
2.18 @" 01 000000000000 100 100 0
2.19 03 000000000000 100 100 0
2.20 04 000000000000 100 100 0
2.21 @@ -84,7 +84,7 @@
2.22 C6 000000000000 100 100 0
2.23 C7 000000000000 100 100 0"),
2.24
2.25 - new Drive("OCZ-VERTEX2", 16,
2.26 + new Drive("OCZ-VERTEX2", "1.25", 16,
2.27 @" 01 DADAD5000000 100 106 50
2.28 05 000000000000 100 100 3
2.29 09 DF0900004A2F 100 100 0
2.30 @@ -105,7 +105,7 @@
2.31 F1 000600000000 0 0 0
2.32 F2 801200000000 0 0 0"),
2.33
2.34 - new Drive("WDC WD5000AADS-00S9B0", 10,
2.35 + new Drive("WDC WD5000AADS-00S9B0", null, 10,
2.36 @" 1 000000000000 200 200
2.37 3 820D00000000 149 150
2.38 4 610800000000 98 98
2.39 @@ -127,7 +127,7 @@
2.40 5 000000000000 0 0
2.41 1 000000000000 0 0"),
2.42
2.43 - new Drive("INTEL SSDSA2M080G2GC", 10,
2.44 + new Drive("INTEL SSDSA2M080G2GC", null, 10,
2.45 @" 3 000000000000 100 100
2.46 4 000000000000 100 100
2.47 5 010000000000 100 100
2.48 @@ -143,7 +143,7 @@
2.49 184 000000000000 100 100
2.50 1 000000000000 0 0"),
2.51
2.52 - new Drive("OCZ-VERTEX", 10,
2.53 + new Drive("OCZ-VERTEX", null, 10,
2.54 @" 1 000000000000 0 8
2.55 9 000000000000 30 99
2.56 12 000000000000 0 15
2.57 @@ -167,7 +167,7 @@
2.58 212 000000000000 0 0
2.59 213 000000000000 0 0"),
2.60
2.61 - new Drive("INTEL SSDSA2CW120G3", 16,
2.62 + new Drive("INTEL SSDSA2CW120G3", null, 16,
2.63 @"03 000000000000 100 100 0
2.64 04 000000000000 100 100 0
2.65 05 000000000000 100 100 0
2.66 @@ -186,7 +186,26 @@
2.67 E8 000000000000 100 100 0
2.68 E9 000000000000 100 100 0
2.69 F1 FF4300000000 100 100 0
2.70 - F2 264F00000000 100 100 0")
2.71 + F2 264F00000000 100 100 0"),
2.72 +
2.73 + new Drive("CORSAIR CMFSSD-128GBG2D", "VBM19C1Q", 16,
2.74 + @"09 100900000000 99 99 0
2.75 + 0C 560200000000 99 99 0
2.76 + AF 000000000000 100 100 10
2.77 + B0 000000000000 100 100 10
2.78 + B1 2A0000000000 99 99 17
2.79 + B2 180000000000 60 60 10
2.80 + B3 4B0000000000 98 98 10
2.81 + B4 B50E00000000 98 98 10
2.82 + B5 000000000000 100 100 10
2.83 + B6 000000000000 100 100 10
2.84 + B7 000000000000 100 100 10
2.85 + BB 000000000000 100 100 0
2.86 + C3 000000000000 200 200 0
2.87 + C6 000000000000 100 100 0
2.88 + C7 810100000000 253 253 0
2.89 + E8 240000000000 60 60 10
2.90 + E9 630594120000 92 92 0")
2.91 };
2.92
2.93 public IntPtr OpenDrive(int driveNumber) {
2.94 @@ -225,7 +244,7 @@
2.95 throw new ArgumentOutOfRangeException();
2.96
2.97 name = drives[driveNumber].Name;
2.98 - firmwareRevision = "";
2.99 + firmwareRevision = drives[driveNumber].FirmwareVersion;
2.100 return true;
2.101 }
2.102
2.103 @@ -234,8 +253,9 @@
2.104
2.105 private class Drive {
2.106
2.107 - public Drive(string name, int idBase, string value) {
2.108 + public Drive(string name, string firmware, int idBase, string value) {
2.109 this.Name = name;
2.110 + this.FirmwareVersion = firmware;
2.111
2.112 string[] lines = value.Split(new[] { '\r', '\n' },
2.113 StringSplitOptions.RemoveEmptyEntries);
2.114 @@ -280,6 +300,8 @@
2.115 public DriveThresholdValue[] DriveThresholdValues { get; private set; }
2.116
2.117 public string Name { get; private set; }
2.118 +
2.119 + public string FirmwareVersion { get; private set; }
2.120 }
2.121
2.122 public IntPtr InvalidHandle { get { return (IntPtr)(-1); } }
3.1 --- a/Hardware/HDD/HDDGeneric.cs Sun Jan 01 17:12:34 2012 +0000
3.2 +++ b/Hardware/HDD/HDDGeneric.cs Mon Jan 02 18:44:19 2012 +0000
3.3 @@ -48,71 +48,71 @@
3.4
3.5 private static readonly List<SmartAttribute> smartAttributes =
3.6 new List<SmartAttribute> {
3.7 - new SmartAttribute(0x01, SmartAttributeNames.ReadErrorRate),
3.8 - new SmartAttribute(0x02, SmartAttributeNames.ThroughputPerformance),
3.9 - new SmartAttribute(0x03, SmartAttributeNames.SpinUpTime),
3.10 - new SmartAttribute(0x04, SmartAttributeNames.StartStopCount, RawToInt),
3.11 - new SmartAttribute(0x05, SmartAttributeNames.ReallocatedSectorsCount),
3.12 - new SmartAttribute(0x06, SmartAttributeNames.ReadChannelMargin),
3.13 - new SmartAttribute(0x07, SmartAttributeNames.SeekErrorRate),
3.14 - new SmartAttribute(0x08, SmartAttributeNames.SeekTimePerformance),
3.15 - new SmartAttribute(0x09, SmartAttributeNames.PowerOnHours, RawToInt),
3.16 - new SmartAttribute(0x0A, SmartAttributeNames.SpinRetryCount),
3.17 - new SmartAttribute(0x0B, SmartAttributeNames.RecalibrationRetries),
3.18 - new SmartAttribute(0x0C, SmartAttributeNames.PowerCycleCount, RawToInt),
3.19 - new SmartAttribute(0x0D, SmartAttributeNames.SoftReadErrorRate),
3.20 - new SmartAttribute(0xAA, SmartAttributeNames.Unknown),
3.21 - new SmartAttribute(0xAB, SmartAttributeNames.Unknown),
3.22 - new SmartAttribute(0xAC, SmartAttributeNames.Unknown),
3.23 - new SmartAttribute(0xB7, SmartAttributeNames.SataDownshiftErrorCount),
3.24 - new SmartAttribute(0xB8, SmartAttributeNames.EndToEndError),
3.25 - new SmartAttribute(0xB9, SmartAttributeNames.HeadStability),
3.26 - new SmartAttribute(0xBA, SmartAttributeNames.InducedOpVibrationDetection),
3.27 - new SmartAttribute(0xBB, SmartAttributeNames.ReportedUncorrectableErrors),
3.28 - new SmartAttribute(0xBC, SmartAttributeNames.CommandTimeout),
3.29 - new SmartAttribute(0xBD, SmartAttributeNames.HighFlyWrites),
3.30 - new SmartAttribute(0xBF, SmartAttributeNames.GSenseErrorRate),
3.31 - new SmartAttribute(0xC0, SmartAttributeNames.EmergencyRetractCycleCount),
3.32 - new SmartAttribute(0xC1, SmartAttributeNames.LoadCycleCount),
3.33 - new SmartAttribute(0xC3, SmartAttributeNames.HardwareEccRecovered),
3.34 - new SmartAttribute(0xC4, SmartAttributeNames.ReallocationEventCount),
3.35 - new SmartAttribute(0xC5, SmartAttributeNames.CurrentPendingSectorCount),
3.36 - new SmartAttribute(0xC6, SmartAttributeNames.UncorrectableSectorCount),
3.37 - new SmartAttribute(0xC7, SmartAttributeNames.UltraDmaCrcErrorCount),
3.38 - new SmartAttribute(0xC8, SmartAttributeNames.WriteErrorRate),
3.39 - new SmartAttribute(0xCA, SmartAttributeNames.DataAddressMarkErrors),
3.40 - new SmartAttribute(0xCB, SmartAttributeNames.RunOutCancel),
3.41 - new SmartAttribute(0xCC, SmartAttributeNames.SoftEccCorrection),
3.42 - new SmartAttribute(0xCD, SmartAttributeNames.ThermalAsperityRate),
3.43 - new SmartAttribute(0xCE, SmartAttributeNames.FlyingHeight),
3.44 - new SmartAttribute(0xCF, SmartAttributeNames.SpinHighCurrent),
3.45 - new SmartAttribute(0xD0, SmartAttributeNames.SpinBuzz),
3.46 - new SmartAttribute(0xD1, SmartAttributeNames.OfflineSeekPerformance),
3.47 - new SmartAttribute(0xD3, SmartAttributeNames.VibrationDuringWrite),
3.48 - new SmartAttribute(0xD4, SmartAttributeNames.ShockDuringWrite),
3.49 - new SmartAttribute(0xDC, SmartAttributeNames.DiskShift),
3.50 - new SmartAttribute(0xDD, SmartAttributeNames.AlternativeGSenseErrorRate),
3.51 - new SmartAttribute(0xDE, SmartAttributeNames.LoadedHours),
3.52 - new SmartAttribute(0xDF, SmartAttributeNames.LoadUnloadRetryCount),
3.53 - new SmartAttribute(0xE0, SmartAttributeNames.LoadFriction),
3.54 - new SmartAttribute(0xE1, SmartAttributeNames.LoadUnloadCycleCount),
3.55 - new SmartAttribute(0xE2, SmartAttributeNames.LoadInTime),
3.56 - new SmartAttribute(0xE3, SmartAttributeNames.TorqueAmplificationCount),
3.57 - new SmartAttribute(0xE4, SmartAttributeNames.PowerOffRetractCycle),
3.58 - new SmartAttribute(0xE6, SmartAttributeNames.GmrHeadAmplitude),
3.59 - new SmartAttribute(0xE8, SmartAttributeNames.EnduranceRemaining),
3.60 - new SmartAttribute(0xE9, SmartAttributeNames.PowerOnHours),
3.61 - new SmartAttribute(0xF0, SmartAttributeNames.HeadFlyingHours),
3.62 - new SmartAttribute(0xF1, SmartAttributeNames.TotalLbasWritten),
3.63 - new SmartAttribute(0xF2, SmartAttributeNames.TotalLbasRead),
3.64 - new SmartAttribute(0xFA, SmartAttributeNames.ReadErrorRetryRate),
3.65 - new SmartAttribute(0xFE, SmartAttributeNames.FreeFallProtection),
3.66 + new SmartAttribute(0x01, SmartNames.ReadErrorRate),
3.67 + new SmartAttribute(0x02, SmartNames.ThroughputPerformance),
3.68 + new SmartAttribute(0x03, SmartNames.SpinUpTime),
3.69 + new SmartAttribute(0x04, SmartNames.StartStopCount, RawToInt),
3.70 + new SmartAttribute(0x05, SmartNames.ReallocatedSectorsCount),
3.71 + new SmartAttribute(0x06, SmartNames.ReadChannelMargin),
3.72 + new SmartAttribute(0x07, SmartNames.SeekErrorRate),
3.73 + new SmartAttribute(0x08, SmartNames.SeekTimePerformance),
3.74 + new SmartAttribute(0x09, SmartNames.PowerOnHours, RawToInt),
3.75 + new SmartAttribute(0x0A, SmartNames.SpinRetryCount),
3.76 + new SmartAttribute(0x0B, SmartNames.RecalibrationRetries),
3.77 + new SmartAttribute(0x0C, SmartNames.PowerCycleCount, RawToInt),
3.78 + new SmartAttribute(0x0D, SmartNames.SoftReadErrorRate),
3.79 + new SmartAttribute(0xAA, SmartNames.Unknown),
3.80 + new SmartAttribute(0xAB, SmartNames.Unknown),
3.81 + new SmartAttribute(0xAC, SmartNames.Unknown),
3.82 + new SmartAttribute(0xB7, SmartNames.SataDownshiftErrorCount),
3.83 + new SmartAttribute(0xB8, SmartNames.EndToEndError),
3.84 + new SmartAttribute(0xB9, SmartNames.HeadStability),
3.85 + new SmartAttribute(0xBA, SmartNames.InducedOpVibrationDetection),
3.86 + new SmartAttribute(0xBB, SmartNames.ReportedUncorrectableErrors),
3.87 + new SmartAttribute(0xBC, SmartNames.CommandTimeout),
3.88 + new SmartAttribute(0xBD, SmartNames.HighFlyWrites),
3.89 + new SmartAttribute(0xBF, SmartNames.GSenseErrorRate),
3.90 + new SmartAttribute(0xC0, SmartNames.EmergencyRetractCycleCount),
3.91 + new SmartAttribute(0xC1, SmartNames.LoadCycleCount),
3.92 + new SmartAttribute(0xC3, SmartNames.HardwareEccRecovered),
3.93 + new SmartAttribute(0xC4, SmartNames.ReallocationEventCount),
3.94 + new SmartAttribute(0xC5, SmartNames.CurrentPendingSectorCount),
3.95 + new SmartAttribute(0xC6, SmartNames.UncorrectableSectorCount),
3.96 + new SmartAttribute(0xC7, SmartNames.UltraDmaCrcErrorCount),
3.97 + new SmartAttribute(0xC8, SmartNames.WriteErrorRate),
3.98 + new SmartAttribute(0xCA, SmartNames.DataAddressMarkErrors),
3.99 + new SmartAttribute(0xCB, SmartNames.RunOutCancel),
3.100 + new SmartAttribute(0xCC, SmartNames.SoftEccCorrection),
3.101 + new SmartAttribute(0xCD, SmartNames.ThermalAsperityRate),
3.102 + new SmartAttribute(0xCE, SmartNames.FlyingHeight),
3.103 + new SmartAttribute(0xCF, SmartNames.SpinHighCurrent),
3.104 + new SmartAttribute(0xD0, SmartNames.SpinBuzz),
3.105 + new SmartAttribute(0xD1, SmartNames.OfflineSeekPerformance),
3.106 + new SmartAttribute(0xD3, SmartNames.VibrationDuringWrite),
3.107 + new SmartAttribute(0xD4, SmartNames.ShockDuringWrite),
3.108 + new SmartAttribute(0xDC, SmartNames.DiskShift),
3.109 + new SmartAttribute(0xDD, SmartNames.AlternativeGSenseErrorRate),
3.110 + new SmartAttribute(0xDE, SmartNames.LoadedHours),
3.111 + new SmartAttribute(0xDF, SmartNames.LoadUnloadRetryCount),
3.112 + new SmartAttribute(0xE0, SmartNames.LoadFriction),
3.113 + new SmartAttribute(0xE1, SmartNames.LoadUnloadCycleCount),
3.114 + new SmartAttribute(0xE2, SmartNames.LoadInTime),
3.115 + new SmartAttribute(0xE3, SmartNames.TorqueAmplificationCount),
3.116 + new SmartAttribute(0xE4, SmartNames.PowerOffRetractCycle),
3.117 + new SmartAttribute(0xE6, SmartNames.GmrHeadAmplitude),
3.118 + new SmartAttribute(0xE8, SmartNames.EnduranceRemaining),
3.119 + new SmartAttribute(0xE9, SmartNames.PowerOnHours),
3.120 + new SmartAttribute(0xF0, SmartNames.HeadFlyingHours),
3.121 + new SmartAttribute(0xF1, SmartNames.TotalLbasWritten),
3.122 + new SmartAttribute(0xF2, SmartNames.TotalLbasRead),
3.123 + new SmartAttribute(0xFA, SmartNames.ReadErrorRetryRate),
3.124 + new SmartAttribute(0xFE, SmartNames.FreeFallProtection),
3.125
3.126 - new SmartAttribute(0xC2, SmartAttributeNames.Temperature,
3.127 + new SmartAttribute(0xC2, SmartNames.Temperature,
3.128 (byte[] r, byte v) => { return r[0]; }, SensorType.Temperature, 0),
3.129 - new SmartAttribute(0xE7, SmartAttributeNames.Temperature,
3.130 + new SmartAttribute(0xE7, SmartNames.Temperature,
3.131 (byte[] r, byte v) => { return r[0]; }, SensorType.Temperature, 0),
3.132 - new SmartAttribute(0xBE, SmartAttributeNames.TemperatureDifferenceFrom100,
3.133 + new SmartAttribute(0xBE, SmartNames.TemperatureDifferenceFrom100,
3.134 null, SensorType.Temperature, 0)
3.135 };
3.136
4.1 --- a/Hardware/HDD/SSDIndilinx.cs Sun Jan 01 17:12:34 2012 +0000
4.2 +++ b/Hardware/HDD/SSDIndilinx.cs Mon Jan 02 18:44:19 2012 +0000
4.3 @@ -46,26 +46,26 @@
4.4 private static readonly IEnumerable<SmartAttribute> smartAttributes =
4.5 new List<SmartAttribute> {
4.6
4.7 - new SmartAttribute(0xB8, SmartAttributeNames.InitialBadBlockCount),
4.8 - new SmartAttribute(0xC3, SmartAttributeNames.ProgramFailure),
4.9 - new SmartAttribute(0xC4, SmartAttributeNames.EraseFailure),
4.10 - new SmartAttribute(0xC5, SmartAttributeNames.ReadFailure),
4.11 - new SmartAttribute(0xC6, SmartAttributeNames.SectorsRead),
4.12 - new SmartAttribute(0xC7, SmartAttributeNames.SectorsWritten),
4.13 - new SmartAttribute(0xC8, SmartAttributeNames.ReadCommands),
4.14 - new SmartAttribute(0xC9, SmartAttributeNames.WriteCommands),
4.15 - new SmartAttribute(0xCA, SmartAttributeNames.BitErrors),
4.16 - new SmartAttribute(0xCB, SmartAttributeNames.CorrectedErrors),
4.17 - new SmartAttribute(0xCC, SmartAttributeNames.BadBlockFullFlag),
4.18 - new SmartAttribute(0xCD, SmartAttributeNames.MaxCellCycles),
4.19 - new SmartAttribute(0xCE, SmartAttributeNames.MinErase),
4.20 - new SmartAttribute(0xCF, SmartAttributeNames.MaxErase),
4.21 - new SmartAttribute(0xD0, SmartAttributeNames.AverageEraseCount),
4.22 - new SmartAttribute(0xD1, SmartAttributeNames.RemainingLife,
4.23 + new SmartAttribute(0xB8, SmartNames.InitialBadBlockCount),
4.24 + new SmartAttribute(0xC3, SmartNames.ProgramFailure),
4.25 + new SmartAttribute(0xC4, SmartNames.EraseFailure),
4.26 + new SmartAttribute(0xC5, SmartNames.ReadFailure),
4.27 + new SmartAttribute(0xC6, SmartNames.SectorsRead),
4.28 + new SmartAttribute(0xC7, SmartNames.SectorsWritten),
4.29 + new SmartAttribute(0xC8, SmartNames.ReadCommands),
4.30 + new SmartAttribute(0xC9, SmartNames.WriteCommands),
4.31 + new SmartAttribute(0xCA, SmartNames.BitErrors),
4.32 + new SmartAttribute(0xCB, SmartNames.CorrectedErrors),
4.33 + new SmartAttribute(0xCC, SmartNames.BadBlockFullFlag),
4.34 + new SmartAttribute(0xCD, SmartNames.MaxCellCycles),
4.35 + new SmartAttribute(0xCE, SmartNames.MinErase),
4.36 + new SmartAttribute(0xCF, SmartNames.MaxErase),
4.37 + new SmartAttribute(0xD0, SmartNames.AverageEraseCount),
4.38 + new SmartAttribute(0xD1, SmartNames.RemainingLife,
4.39 null, SensorType.Level, 0),
4.40 - new SmartAttribute(0xD2, SmartAttributeNames.UnknownUnique),
4.41 - new SmartAttribute(0xD3, SmartAttributeNames.SataErrorCountCrc),
4.42 - new SmartAttribute(0xD4, SmartAttributeNames.SataErrorCountHandshake),
4.43 + new SmartAttribute(0xD2, SmartNames.UnknownUnique),
4.44 + new SmartAttribute(0xD3, SmartNames.SataErrorCountCrc),
4.45 + new SmartAttribute(0xD4, SmartNames.SataErrorCountHandshake),
4.46 };
4.47
4.48 public SSDIndilinx(ISmart smart, string name, string firmwareRevision,
5.1 --- a/Hardware/HDD/SSDIntel.cs Sun Jan 01 17:12:34 2012 +0000
5.2 +++ b/Hardware/HDD/SSDIntel.cs Mon Jan 02 18:44:19 2012 +0000
5.3 @@ -47,27 +47,27 @@
5.4 private static readonly IEnumerable<SmartAttribute> smartAttributes =
5.5 new List<SmartAttribute> {
5.6
5.7 - new SmartAttribute(0x01, SmartAttributeNames.ReadErrorRate),
5.8 - new SmartAttribute(0x03, SmartAttributeNames.SpinUpTime),
5.9 - new SmartAttribute(0x04, SmartAttributeNames.StartStopCount, RawToInt),
5.10 - new SmartAttribute(0x05, SmartAttributeNames.ReallocatedSectorsCount),
5.11 - new SmartAttribute(0x09, SmartAttributeNames.PowerOnHours, RawToInt),
5.12 - new SmartAttribute(0x0C, SmartAttributeNames.PowerCycleCount, RawToInt),
5.13 - new SmartAttribute(0xAA, SmartAttributeNames.AvailableReservedSpace),
5.14 - new SmartAttribute(0xAB, SmartAttributeNames.ProgramFailCount),
5.15 - new SmartAttribute(0xAC, SmartAttributeNames.EraseFailCount),
5.16 - new SmartAttribute(0xB8, SmartAttributeNames.EndToEndError),
5.17 - new SmartAttribute(0xC0, SmartAttributeNames.UnsafeShutdownCount),
5.18 - new SmartAttribute(0xE1, SmartAttributeNames.HostWrites,
5.19 + new SmartAttribute(0x01, SmartNames.ReadErrorRate),
5.20 + new SmartAttribute(0x03, SmartNames.SpinUpTime),
5.21 + new SmartAttribute(0x04, SmartNames.StartStopCount, RawToInt),
5.22 + new SmartAttribute(0x05, SmartNames.ReallocatedSectorsCount),
5.23 + new SmartAttribute(0x09, SmartNames.PowerOnHours, RawToInt),
5.24 + new SmartAttribute(0x0C, SmartNames.PowerCycleCount, RawToInt),
5.25 + new SmartAttribute(0xAA, SmartNames.AvailableReservedSpace),
5.26 + new SmartAttribute(0xAB, SmartNames.ProgramFailCount),
5.27 + new SmartAttribute(0xAC, SmartNames.EraseFailCount),
5.28 + new SmartAttribute(0xB8, SmartNames.EndToEndError),
5.29 + new SmartAttribute(0xC0, SmartNames.UnsafeShutdownCount),
5.30 + new SmartAttribute(0xE1, SmartNames.HostWrites,
5.31 (byte[] r, byte v) => { return RawToInt(r, v) / 0x20; },
5.32 SensorType.Data, 0),
5.33 - new SmartAttribute(0xE8, SmartAttributeNames.RemainingLife,
5.34 + new SmartAttribute(0xE8, SmartNames.RemainingLife,
5.35 null, SensorType.Level, 0),
5.36 - new SmartAttribute(0xE9, SmartAttributeNames.MediaWearOutIndicator),
5.37 - new SmartAttribute(0xF1, SmartAttributeNames.HostWrites,
5.38 + new SmartAttribute(0xE9, SmartNames.MediaWearOutIndicator),
5.39 + new SmartAttribute(0xF1, SmartNames.HostWrites,
5.40 (byte[] r, byte v) => { return RawToInt(r, v) / 0x20; },
5.41 SensorType.Data, 0),
5.42 - new SmartAttribute(0xF2, SmartAttributeNames.HostReads,
5.43 + new SmartAttribute(0xF2, SmartNames.HostReads,
5.44 (byte[] r, byte v) => { return RawToInt(r, v) / 0x20; },
5.45 SensorType.Data, 1),
5.46 };
6.1 --- a/Hardware/HDD/SSDPlextor.cs Sun Jan 01 17:12:34 2012 +0000
6.2 +++ b/Hardware/HDD/SSDPlextor.cs Mon Jan 02 18:44:19 2012 +0000
6.3 @@ -43,8 +43,8 @@
6.4
6.5 private static readonly IEnumerable<SmartAttribute> smartAttributes =
6.6 new List<SmartAttribute> {
6.7 - new SmartAttribute(0x09, SmartAttributeNames.PowerOnHours, RawToInt),
6.8 - new SmartAttribute(0x0C, SmartAttributeNames.PowerCycleCount, RawToInt),
6.9 + new SmartAttribute(0x09, SmartNames.PowerOnHours, RawToInt),
6.10 + new SmartAttribute(0x0C, SmartNames.PowerCycleCount, RawToInt),
6.11 };
6.12
6.13 public SSDPlextor(ISmart smart, string name, string firmwareRevision,
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
7.2 +++ b/Hardware/HDD/SSDSamsung.cs Mon Jan 02 18:44:19 2012 +0000
7.3 @@ -0,0 +1,77 @@
7.4 +/*
7.5 +
7.6 + Version: MPL 1.1/GPL 2.0/LGPL 2.1
7.7 +
7.8 + The contents of this file are subject to the Mozilla Public License Version
7.9 + 1.1 (the "License"); you may not use this file except in compliance with
7.10 + the License. You may obtain a copy of the License at
7.11 +
7.12 + http://www.mozilla.org/MPL/
7.13 +
7.14 + Software distributed under the License is distributed on an "AS IS" basis,
7.15 + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
7.16 + for the specific language governing rights and limitations under the License.
7.17 +
7.18 + The Original Code is the Open Hardware Monitor code.
7.19 +
7.20 + The Initial Developer of the Original Code is
7.21 + Michael Möller <m.moeller@gmx.ch>.
7.22 + Portions created by the Initial Developer are Copyright (C) 2012
7.23 + the Initial Developer. All Rights Reserved.
7.24 +
7.25 + Contributor(s):
7.26 +
7.27 + Alternatively, the contents of this file may be used under the terms of
7.28 + either the GNU General Public License Version 2 or later (the "GPL"), or
7.29 + the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
7.30 + in which case the provisions of the GPL or the LGPL are applicable instead
7.31 + of those above. If you wish to allow use of your version of this file only
7.32 + under the terms of either the GPL or the LGPL, and not to allow others to
7.33 + use your version of this file under the terms of the MPL, indicate your
7.34 + decision by deleting the provisions above and replace them with the notice
7.35 + and other provisions required by the GPL or the LGPL. If you do not delete
7.36 + the provisions above, a recipient may use your version of this file under
7.37 + the terms of any one of the MPL, the GPL or the LGPL.
7.38 +
7.39 +*/
7.40 +
7.41 +namespace OpenHardwareMonitor.Hardware.HDD {
7.42 + using System.Collections.Generic;
7.43 +
7.44 + [NamePrefix(""), RequireSmart(0xB0), RequireSmart(0xB1), RequireSmart(0xB2),
7.45 + RequireSmart(0xB3), RequireSmart(0xB4), RequireSmart(0xB5),
7.46 + RequireSmart(0xB6), RequireSmart(0xB7)]
7.47 + internal class SSDSamsung : AbstractHarddrive {
7.48 +
7.49 + private static readonly IEnumerable<SmartAttribute> smartAttributes =
7.50 + new List<SmartAttribute> {
7.51 + new SmartAttribute(0x09, SmartNames.PowerOnHours, RawToInt),
7.52 + new SmartAttribute(0x0C, SmartNames.PowerCycleCount, RawToInt),
7.53 + new SmartAttribute(0xAF, SmartNames.ProgramFailCountChip, RawToInt),
7.54 + new SmartAttribute(0xB0, SmartNames.EraseFailCountChip, RawToInt),
7.55 + new SmartAttribute(0xB1, SmartNames.WearLevelingCount, RawToInt),
7.56 + new SmartAttribute(0xB2, SmartNames.UsedReservedBlockCountChip, RawToInt),
7.57 + new SmartAttribute(0xB3, SmartNames.UsedReservedBlockCountTotal, RawToInt),
7.58 +
7.59 + // Unused Reserved Block Count (Total)
7.60 + new SmartAttribute(0xB4, SmartNames.RemainingLife,
7.61 + null, SensorType.Level, 0),
7.62 +
7.63 + new SmartAttribute(0xB5, SmartNames.ProgramFailCountTotal, RawToInt),
7.64 + new SmartAttribute(0xB6, SmartNames.EraseFailCountTotal, RawToInt),
7.65 + new SmartAttribute(0xB7, SmartNames.RuntimeBadBlockTotal, RawToInt),
7.66 + new SmartAttribute(0xBB, SmartNames.UncorrectableErrorCount, RawToInt),
7.67 + new SmartAttribute(0xBE, SmartNames.TemperatureExceedCount, RawToInt),
7.68 + new SmartAttribute(0xC2, SmartNames.AirflowTemperature),
7.69 + new SmartAttribute(0xC3, SmartNames.ECCRate),
7.70 + new SmartAttribute(0xC6, SmartNames.OffLineUncorrectableErrorCount, RawToInt),
7.71 + new SmartAttribute(0xC7, SmartNames.CRCErrorCount, RawToInt),
7.72 + new SmartAttribute(0xC9, SmartNames.SupercapStatus),
7.73 + new SmartAttribute(0xCA, SmartNames.ExceptionModeStatus)
7.74 + };
7.75 +
7.76 + public SSDSamsung(ISmart smart, string name, string firmwareRevision,
7.77 + int index, ISettings settings)
7.78 + : base(smart, name, firmwareRevision, index, smartAttributes, settings) { }
7.79 + }
7.80 +}
8.1 --- a/Hardware/HDD/SSDSandforce.cs Sun Jan 01 17:12:34 2012 +0000
8.2 +++ b/Hardware/HDD/SSDSandforce.cs Mon Jan 02 18:44:19 2012 +0000
8.3 @@ -44,23 +44,23 @@
8.4
8.5 private static readonly IEnumerable<SmartAttribute> smartAttributes =
8.6 new List<SmartAttribute> {
8.7 - new SmartAttribute(0x05, SmartAttributeNames.RetiredBlockCount),
8.8 - new SmartAttribute(0x09, SmartAttributeNames.PowerOnHours, RawToInt),
8.9 - new SmartAttribute(0x0C, SmartAttributeNames.PowerCycleCount, RawToInt),
8.10 - new SmartAttribute(0xAB, SmartAttributeNames.ProgramFailCount),
8.11 - new SmartAttribute(0xAC, SmartAttributeNames.EraseFailCount),
8.12 - new SmartAttribute(0xAE, SmartAttributeNames.UnexpectedPowerLossCount),
8.13 - new SmartAttribute(0xB1, SmartAttributeNames.WearRangeDelta),
8.14 - new SmartAttribute(0xB5, SmartAttributeNames.AlternativeProgramFailCount),
8.15 - new SmartAttribute(0xB6, SmartAttributeNames.AlternativeEraseFailCount),
8.16 - new SmartAttribute(0xC3, SmartAttributeNames.UnrecoverableEcc),
8.17 - new SmartAttribute(0xC4, SmartAttributeNames.ReallocationEventCount),
8.18 - new SmartAttribute(0xE7, SmartAttributeNames.RemainingLife,
8.19 + new SmartAttribute(0x05, SmartNames.RetiredBlockCount),
8.20 + new SmartAttribute(0x09, SmartNames.PowerOnHours, RawToInt),
8.21 + new SmartAttribute(0x0C, SmartNames.PowerCycleCount, RawToInt),
8.22 + new SmartAttribute(0xAB, SmartNames.ProgramFailCount),
8.23 + new SmartAttribute(0xAC, SmartNames.EraseFailCount),
8.24 + new SmartAttribute(0xAE, SmartNames.UnexpectedPowerLossCount),
8.25 + new SmartAttribute(0xB1, SmartNames.WearRangeDelta),
8.26 + new SmartAttribute(0xB5, SmartNames.AlternativeProgramFailCount),
8.27 + new SmartAttribute(0xB6, SmartNames.AlternativeEraseFailCount),
8.28 + new SmartAttribute(0xC3, SmartNames.UnrecoverableEcc),
8.29 + new SmartAttribute(0xC4, SmartNames.ReallocationEventCount),
8.30 + new SmartAttribute(0xE7, SmartNames.RemainingLife,
8.31 null, SensorType.Level, 0),
8.32 - new SmartAttribute(0xF1, SmartAttributeNames.HostWrites,
8.33 + new SmartAttribute(0xF1, SmartNames.HostWrites,
8.34 (byte[] r, byte v) => { return RawToInt(r, v); },
8.35 SensorType.Data, 0),
8.36 - new SmartAttribute(0xF2, SmartAttributeNames.HostReads,
8.37 + new SmartAttribute(0xF2, SmartNames.HostReads,
8.38 (byte[] r, byte v) => { return RawToInt(r, v); },
8.39 SensorType.Data, 1)
8.40 };
9.1 --- a/Hardware/HDD/SmartAttributeNames.cs Sun Jan 01 17:12:34 2012 +0000
9.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
9.3 @@ -1,449 +0,0 @@
9.4 -/*
9.5 -
9.6 - Version: MPL 1.1/GPL 2.0/LGPL 2.1
9.7 -
9.8 - The contents of this file are subject to the Mozilla Public License Version
9.9 - 1.1 (the "License"); you may not use this file except in compliance with
9.10 - the License. You may obtain a copy of the License at
9.11 -
9.12 - http://www.mozilla.org/MPL/
9.13 -
9.14 - Software distributed under the License is distributed on an "AS IS" basis,
9.15 - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
9.16 - for the specific language governing rights and limitations under the License.
9.17 -
9.18 - The Original Code is the Open Hardware Monitor code.
9.19 -
9.20 - The Initial Developer of the Original Code is
9.21 - Roland Reinl <roland-reinl@gmx.de>.
9.22 - Portions created by the Initial Developer are Copyright (C) 2011
9.23 - the Initial Developer. All Rights Reserved.
9.24 -
9.25 - Contributor(s):
9.26 - Michael Möller <m.moeller@gmx.ch>
9.27 -
9.28 - Alternatively, the contents of this file may be used under the terms of
9.29 - either the GNU General Public License Version 2 or later (the "GPL"), or
9.30 - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
9.31 - in which case the provisions of the GPL or the LGPL are applicable instead
9.32 - of those above. If you wish to allow use of your version of this file only
9.33 - under the terms of either the GPL or the LGPL, and not to allow others to
9.34 - use your version of this file under the terms of the MPL, indicate your
9.35 - decision by deleting the provisions above and replace them with the notice
9.36 - and other provisions required by the GPL or the LGPL. If you do not delete
9.37 - the provisions above, a recipient may use your version of this file under
9.38 - the terms of any one of the MPL, the GPL or the LGPL.
9.39 -
9.40 -*/
9.41 -
9.42 -namespace OpenHardwareMonitor.Hardware.HDD {
9.43 - /// <summary>
9.44 - /// Localization class for SMART attribute names.
9.45 - /// </summary>
9.46 - internal static class SmartAttributeNames {
9.47 -
9.48 - public static string AirflowTemperature {
9.49 - get { return "Airflow Temperature"; }
9.50 - }
9.51 -
9.52 - public static string Temperature {
9.53 - get { return "Temperature"; }
9.54 - }
9.55 -
9.56 - public static string RetiredBlockCount {
9.57 - get { return "Retired Block Count"; }
9.58 - }
9.59 -
9.60 - public static string ProgramFailCount {
9.61 - get { return "Program Fail Count"; }
9.62 - }
9.63 -
9.64 - public static string EraseFailCount {
9.65 - get { return "Erase Fail Count"; }
9.66 - }
9.67 -
9.68 - public static string UnexpectedPowerLossCount {
9.69 - get { return "Unexpected Power Loss Count"; }
9.70 - }
9.71 -
9.72 - public static string WearRangeDelta {
9.73 - get { return "Wear Range Delta"; }
9.74 - }
9.75 -
9.76 - public static string AlternativeProgramFailCount {
9.77 - get { return "Alternative Program Fail Count"; }
9.78 - }
9.79 -
9.80 - public static string AlternativeEraseFailCount {
9.81 - get { return "Alternative Erase Fail Count"; }
9.82 - }
9.83 -
9.84 - public static string UnrecoverableEcc {
9.85 - get { return "Unrecoverable ECC"; }
9.86 - }
9.87 -
9.88 - public static string ReallocationEventCount {
9.89 - get { return "Reallocation Event Count"; }
9.90 - }
9.91 -
9.92 - public static string RemainingLife {
9.93 - get { return "Remaining Life"; }
9.94 - }
9.95 -
9.96 - public static string AvailableReservedSpace {
9.97 - get { return "Available Reserved Space"; }
9.98 - }
9.99 -
9.100 - public static string CalibrationRetryCount {
9.101 - get { return "Calibration Retry Count"; }
9.102 - }
9.103 -
9.104 - public static string CommandTimeout {
9.105 - get { return "Command Timeout"; }
9.106 - }
9.107 -
9.108 - public static string CurrentPendingSectorCount {
9.109 - get { return "Current Pending Sector Count"; }
9.110 - }
9.111 -
9.112 - public static string DataAddressMarkErrors {
9.113 - get { return "Data Address Mark errors"; }
9.114 - }
9.115 -
9.116 - public static string DiskShift {
9.117 - get { return "Disk Shift"; }
9.118 - }
9.119 -
9.120 - public static string DriveTemperature {
9.121 - get { return "Drive Temperature"; }
9.122 - }
9.123 -
9.124 - public static string EmergencyRetractCycleCount {
9.125 - get { return "Emergency Retract Cycle Count"; }
9.126 - }
9.127 -
9.128 - public static string EndToEndError {
9.129 - get { return "End-to-End error"; }
9.130 - }
9.131 -
9.132 - public static string EnduranceRemaining {
9.133 - get { return "Endurance Remaining"; }
9.134 - }
9.135 -
9.136 - public static string FlyingHeight {
9.137 - get { return "Flying Height"; }
9.138 - }
9.139 -
9.140 - public static string FreeFallProtection {
9.141 - get { return "Free Fall Protection"; }
9.142 - }
9.143 -
9.144 - public static string GmrHeadAmplitude {
9.145 - get { return "GMR Head Amplitude"; }
9.146 - }
9.147 -
9.148 - public static string GSenseErrorRate {
9.149 - get { return "G-sense Error Rate"; }
9.150 - }
9.151 -
9.152 - public static string HardwareEccRecovered {
9.153 - get { return "Hardware ECC Recovered"; }
9.154 - }
9.155 -
9.156 - public static string HeadFlyingHours {
9.157 - get { return "Head Flying Hours"; }
9.158 - }
9.159 -
9.160 - public static string HeadStability {
9.161 - get { return "Head Stability"; }
9.162 - }
9.163 -
9.164 - public static string HighFlyWrites {
9.165 - get { return "High Fly Writes"; }
9.166 - }
9.167 -
9.168 - public static string InducedOpVibrationDetection {
9.169 - get { return "Induced Op-Vibration Detection"; }
9.170 - }
9.171 -
9.172 - public static string LoadedHours {
9.173 - get { return "Loaded Hours"; }
9.174 - }
9.175 -
9.176 - public static string LoadFriction {
9.177 - get { return "Load Friction"; }
9.178 - }
9.179 -
9.180 - public static string LoadInTime {
9.181 - get { return "Load 'In'-time"; }
9.182 - }
9.183 -
9.184 - public static string LoadUnloadCycleCount {
9.185 - get { return "Load/Unload Cycle Count"; }
9.186 - }
9.187 -
9.188 - public static string LoadUnloadCycleCountFujitsu {
9.189 - get { return "Load/Unload Cycle Count (Fujitus)"; }
9.190 - }
9.191 -
9.192 - public static string LoadUnloadRetryCount {
9.193 - get { return "Load/Unload Retry Count"; }
9.194 - }
9.195 -
9.196 - public static string MediaWearoutIndicator {
9.197 - get { return "Media Wearout Indicator"; }
9.198 - }
9.199 -
9.200 - public static string MultiZoneErrorRate {
9.201 - get { return "Multi-Zone Error Rate"; }
9.202 - }
9.203 -
9.204 - public static string OfflineSeekPerformance {
9.205 - get { return "Offline Seek Performance"; }
9.206 - }
9.207 -
9.208 - public static string PowerCycleCount {
9.209 - get { return "Power Cycle Count"; }
9.210 - }
9.211 -
9.212 - public static string PowerOffRetractCycle {
9.213 - get { return "Power-Off Retract Cycle"; }
9.214 - }
9.215 -
9.216 - public static string PowerOnHours {
9.217 - get { return "Power-On Hours (POH)"; }
9.218 - }
9.219 -
9.220 - public static string ReadChannelMargin {
9.221 - get { return "Read Channel Margin"; }
9.222 - }
9.223 -
9.224 - public static string ReadErrorRate {
9.225 - get { return "Read Error Rate"; }
9.226 - }
9.227 -
9.228 - public static string ReadErrorRetryRate {
9.229 - get { return "Read Error Retry Rate"; }
9.230 - }
9.231 -
9.232 - public static string ReallocatedSectorsCount {
9.233 - get { return "Reallocated Sectors Count"; }
9.234 - }
9.235 -
9.236 - public static string ReportedUncorrectableErrors {
9.237 - get { return "Reported Uncorrectable Errors"; }
9.238 - }
9.239 -
9.240 - public static string RunOutCancel {
9.241 - get { return "Run Out Cancel"; }
9.242 - }
9.243 -
9.244 - public static string SataDownshiftErrorCount {
9.245 - get { return "SATA Downshift Error Count"; }
9.246 - }
9.247 -
9.248 - public static string SeekErrorRate {
9.249 - get { return "Seek Error Rate"; }
9.250 - }
9.251 -
9.252 - public static string SeekTimePerformance {
9.253 - get { return "Seek Time Performance"; }
9.254 - }
9.255 -
9.256 - public static string ShockDuringWrite {
9.257 - get { return "Shock During Write"; }
9.258 - }
9.259 -
9.260 - public static string SoftEccCorrection {
9.261 - get { return "Soft ECC Correction"; }
9.262 - }
9.263 -
9.264 - public static string SoftReadErrorRate {
9.265 - get { return "Soft Read Error Rate"; }
9.266 - }
9.267 -
9.268 - public static string SpinBuzz {
9.269 - get { return "Spin Buzz"; }
9.270 - }
9.271 -
9.272 - public static string SpinHighCurrent {
9.273 - get { return "Spin High Current"; }
9.274 - }
9.275 -
9.276 - public static string SpinRetryCount {
9.277 - get { return "Spin Retry Count"; }
9.278 - }
9.279 -
9.280 - public static string SpinUpTime {
9.281 - get { return "Spin-Up Time"; }
9.282 - }
9.283 -
9.284 - public static string StartStopCount {
9.285 - get { return "Start/Stop Count"; }
9.286 - }
9.287 -
9.288 - public static string TaCounterDetected {
9.289 - get { return "TA Counter Detected"; }
9.290 - }
9.291 -
9.292 - public static string TemperatureDifferenceFrom100 {
9.293 - get { return "Temperature Difference from 100"; }
9.294 - }
9.295 -
9.296 - public static string ThermalAsperityRate {
9.297 - get { return "Thermal Asperity Rate (TAR)"; }
9.298 - }
9.299 -
9.300 - public static string ThroughputPerformance {
9.301 - get { return "Throughput Performance"; }
9.302 - }
9.303 -
9.304 - public static string TorqueAmplificationCount {
9.305 - get { return "Torque Amplification Count"; }
9.306 - }
9.307 -
9.308 - public static string TotalLbasRead {
9.309 - get { return "Total LBAs Read"; }
9.310 - }
9.311 -
9.312 - public static string TotalLbasWritten {
9.313 - get { return "Total LBAs Written"; }
9.314 - }
9.315 -
9.316 - public static string TransferErrorRate {
9.317 - get { return "Transfer Error Rate"; }
9.318 - }
9.319 -
9.320 - public static string UltraDmaCrcErrorCount {
9.321 - get { return "UltraDMA CRC Error Count"; }
9.322 - }
9.323 -
9.324 - public static string UncorrectableSectorCount {
9.325 - get { return "Uncorrectable Sector Count"; }
9.326 - }
9.327 -
9.328 - public static string Unknown {
9.329 - get { return "Unknown"; }
9.330 - }
9.331 -
9.332 - public static string VibrationDuringWrite {
9.333 - get { return "Vibration During Write"; }
9.334 - }
9.335 -
9.336 - public static string WriteErrorRate {
9.337 - get { return "Write Error Rate"; }
9.338 - }
9.339 -
9.340 - public static string RecalibrationRetries {
9.341 - get { return "Recalibration Retries"; }
9.342 - }
9.343 -
9.344 - public static string LoadCycleCount {
9.345 - get { return "Load Cycle Count"; }
9.346 - }
9.347 -
9.348 - public static string AlternativeGSenseErrorRate {
9.349 - get { return "Alternative G-Sense Error Rate"; }
9.350 - }
9.351 -
9.352 - public static string InitialBadBlockCount {
9.353 - get { return "Initial Bad Block Count"; }
9.354 - }
9.355 -
9.356 - public static string ProgramFailure {
9.357 - get { return "Program Failure"; }
9.358 - }
9.359 -
9.360 - public static string EraseFailure {
9.361 - get { return "Erase Failure"; }
9.362 - }
9.363 -
9.364 - public static string ReadFailure {
9.365 - get { return "Read Failure"; }
9.366 - }
9.367 -
9.368 - public static string SectorsRead {
9.369 - get { return "Sectors Read"; }
9.370 - }
9.371 -
9.372 - public static string SectorsWritten {
9.373 - get { return "Sectors Written"; }
9.374 - }
9.375 -
9.376 - public static string ReadCommands {
9.377 - get { return "Read Commands"; }
9.378 - }
9.379 -
9.380 - public static string WriteCommands {
9.381 - get { return "Write Commands"; }
9.382 - }
9.383 -
9.384 - public static string BitErrors {
9.385 - get { return "Bit Errors"; }
9.386 - }
9.387 -
9.388 - public static string CorrectedErrors {
9.389 - get { return "Corrected Errors"; }
9.390 - }
9.391 -
9.392 - public static string BadBlockFullFlag {
9.393 - get { return "Bad Block Full Flag"; }
9.394 - }
9.395 -
9.396 - public static string MaxCellCycles {
9.397 - get { return "Max Cell Cycles"; }
9.398 - }
9.399 -
9.400 - public static string MinErase {
9.401 - get { return "Min Erase"; }
9.402 - }
9.403 -
9.404 - public static string MaxErase {
9.405 - get { return "Max Erase"; }
9.406 - }
9.407 -
9.408 - public static string AverageEraseCount {
9.409 - get { return "Average Erase Count"; }
9.410 - }
9.411 -
9.412 - public static string UnknownUnique {
9.413 - get { return "Unknown Unique"; }
9.414 - }
9.415 -
9.416 - public static string SataErrorCountCrc {
9.417 - get { return "SATA Error Count CRC"; }
9.418 - }
9.419 -
9.420 - public static string SataErrorCountHandshake {
9.421 - get { return "SATA Error Count Handshake"; }
9.422 - }
9.423 -
9.424 - public static string UnsafeShutdownCount {
9.425 - get { return "Unsafe Shutdown Count"; }
9.426 - }
9.427 -
9.428 - public static string HostWrites {
9.429 - get { return "Host Writes"; }
9.430 - }
9.431 -
9.432 - public static string UsedReservedBlockCountChip {
9.433 - get { return "Used Reserved Block Count Chip"; }
9.434 - }
9.435 -
9.436 - public static string UsedReservedBlockCountTotal {
9.437 - get { return "Used Reserved Block Count Total"; }
9.438 - }
9.439 -
9.440 - public static string RuntimeBadBlockTotal {
9.441 - get { return "Runtime Bad Block Total"; }
9.442 - }
9.443 -
9.444 - public static string HostReads {
9.445 - get { return "Host Reads"; }
9.446 - }
9.447 -
9.448 - public static string MediaWearOutIndicator {
9.449 - get { return "Media Wear Out Indicator"; }
9.450 - }
9.451 - }
9.452 -}
9.453 \ No newline at end of file
10.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
10.2 +++ b/Hardware/HDD/SmartNames.cs Mon Jan 02 18:44:19 2012 +0000
10.3 @@ -0,0 +1,497 @@
10.4 +/*
10.5 +
10.6 + Version: MPL 1.1/GPL 2.0/LGPL 2.1
10.7 +
10.8 + The contents of this file are subject to the Mozilla Public License Version
10.9 + 1.1 (the "License"); you may not use this file except in compliance with
10.10 + the License. You may obtain a copy of the License at
10.11 +
10.12 + http://www.mozilla.org/MPL/
10.13 +
10.14 + Software distributed under the License is distributed on an "AS IS" basis,
10.15 + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
10.16 + for the specific language governing rights and limitations under the License.
10.17 +
10.18 + The Original Code is the Open Hardware Monitor code.
10.19 +
10.20 + The Initial Developer of the Original Code is
10.21 + Roland Reinl <roland-reinl@gmx.de>.
10.22 + Portions created by the Initial Developer are Copyright (C) 2011
10.23 + the Initial Developer. All Rights Reserved.
10.24 +
10.25 + Contributor(s):
10.26 + Michael Möller <m.moeller@gmx.ch>
10.27 +
10.28 + Alternatively, the contents of this file may be used under the terms of
10.29 + either the GNU General Public License Version 2 or later (the "GPL"), or
10.30 + the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
10.31 + in which case the provisions of the GPL or the LGPL are applicable instead
10.32 + of those above. If you wish to allow use of your version of this file only
10.33 + under the terms of either the GPL or the LGPL, and not to allow others to
10.34 + use your version of this file under the terms of the MPL, indicate your
10.35 + decision by deleting the provisions above and replace them with the notice
10.36 + and other provisions required by the GPL or the LGPL. If you do not delete
10.37 + the provisions above, a recipient may use your version of this file under
10.38 + the terms of any one of the MPL, the GPL or the LGPL.
10.39 +
10.40 +*/
10.41 +
10.42 +namespace OpenHardwareMonitor.Hardware.HDD {
10.43 + /// <summary>
10.44 + /// Localization class for SMART attribute names.
10.45 + /// </summary>
10.46 + internal static class SmartNames {
10.47 +
10.48 + public static string AirflowTemperature {
10.49 + get { return "Airflow Temperature"; }
10.50 + }
10.51 +
10.52 + public static string Temperature {
10.53 + get { return "Temperature"; }
10.54 + }
10.55 +
10.56 + public static string RetiredBlockCount {
10.57 + get { return "Retired Block Count"; }
10.58 + }
10.59 +
10.60 + public static string ProgramFailCount {
10.61 + get { return "Program Fail Count"; }
10.62 + }
10.63 +
10.64 + public static string EraseFailCount {
10.65 + get { return "Erase Fail Count"; }
10.66 + }
10.67 +
10.68 + public static string UnexpectedPowerLossCount {
10.69 + get { return "Unexpected Power Loss Count"; }
10.70 + }
10.71 +
10.72 + public static string WearRangeDelta {
10.73 + get { return "Wear Range Delta"; }
10.74 + }
10.75 +
10.76 + public static string AlternativeProgramFailCount {
10.77 + get { return "Alternative Program Fail Count"; }
10.78 + }
10.79 +
10.80 + public static string AlternativeEraseFailCount {
10.81 + get { return "Alternative Erase Fail Count"; }
10.82 + }
10.83 +
10.84 + public static string UnrecoverableEcc {
10.85 + get { return "Unrecoverable ECC"; }
10.86 + }
10.87 +
10.88 + public static string ReallocationEventCount {
10.89 + get { return "Reallocation Event Count"; }
10.90 + }
10.91 +
10.92 + public static string RemainingLife {
10.93 + get { return "Remaining Life"; }
10.94 + }
10.95 +
10.96 + public static string AvailableReservedSpace {
10.97 + get { return "Available Reserved Space"; }
10.98 + }
10.99 +
10.100 + public static string CalibrationRetryCount {
10.101 + get { return "Calibration Retry Count"; }
10.102 + }
10.103 +
10.104 + public static string CommandTimeout {
10.105 + get { return "Command Timeout"; }
10.106 + }
10.107 +
10.108 + public static string CurrentPendingSectorCount {
10.109 + get { return "Current Pending Sector Count"; }
10.110 + }
10.111 +
10.112 + public static string DataAddressMarkErrors {
10.113 + get { return "Data Address Mark errors"; }
10.114 + }
10.115 +
10.116 + public static string DiskShift {
10.117 + get { return "Disk Shift"; }
10.118 + }
10.119 +
10.120 + public static string DriveTemperature {
10.121 + get { return "Drive Temperature"; }
10.122 + }
10.123 +
10.124 + public static string EmergencyRetractCycleCount {
10.125 + get { return "Emergency Retract Cycle Count"; }
10.126 + }
10.127 +
10.128 + public static string EndToEndError {
10.129 + get { return "End-to-End error"; }
10.130 + }
10.131 +
10.132 + public static string EnduranceRemaining {
10.133 + get { return "Endurance Remaining"; }
10.134 + }
10.135 +
10.136 + public static string FlyingHeight {
10.137 + get { return "Flying Height"; }
10.138 + }
10.139 +
10.140 + public static string FreeFallProtection {
10.141 + get { return "Free Fall Protection"; }
10.142 + }
10.143 +
10.144 + public static string GmrHeadAmplitude {
10.145 + get { return "GMR Head Amplitude"; }
10.146 + }
10.147 +
10.148 + public static string GSenseErrorRate {
10.149 + get { return "G-sense Error Rate"; }
10.150 + }
10.151 +
10.152 + public static string HardwareEccRecovered {
10.153 + get { return "Hardware ECC Recovered"; }
10.154 + }
10.155 +
10.156 + public static string HeadFlyingHours {
10.157 + get { return "Head Flying Hours"; }
10.158 + }
10.159 +
10.160 + public static string HeadStability {
10.161 + get { return "Head Stability"; }
10.162 + }
10.163 +
10.164 + public static string HighFlyWrites {
10.165 + get { return "High Fly Writes"; }
10.166 + }
10.167 +
10.168 + public static string InducedOpVibrationDetection {
10.169 + get { return "Induced Op-Vibration Detection"; }
10.170 + }
10.171 +
10.172 + public static string LoadedHours {
10.173 + get { return "Loaded Hours"; }
10.174 + }
10.175 +
10.176 + public static string LoadFriction {
10.177 + get { return "Load Friction"; }
10.178 + }
10.179 +
10.180 + public static string LoadInTime {
10.181 + get { return "Load 'In'-time"; }
10.182 + }
10.183 +
10.184 + public static string LoadUnloadCycleCount {
10.185 + get { return "Load/Unload Cycle Count"; }
10.186 + }
10.187 +
10.188 + public static string LoadUnloadCycleCountFujitsu {
10.189 + get { return "Load/Unload Cycle Count (Fujitus)"; }
10.190 + }
10.191 +
10.192 + public static string LoadUnloadRetryCount {
10.193 + get { return "Load/Unload Retry Count"; }
10.194 + }
10.195 +
10.196 + public static string MediaWearoutIndicator {
10.197 + get { return "Media Wearout Indicator"; }
10.198 + }
10.199 +
10.200 + public static string MultiZoneErrorRate {
10.201 + get { return "Multi-Zone Error Rate"; }
10.202 + }
10.203 +
10.204 + public static string OfflineSeekPerformance {
10.205 + get { return "Offline Seek Performance"; }
10.206 + }
10.207 +
10.208 + public static string PowerCycleCount {
10.209 + get { return "Power Cycle Count"; }
10.210 + }
10.211 +
10.212 + public static string PowerOffRetractCycle {
10.213 + get { return "Power-Off Retract Cycle"; }
10.214 + }
10.215 +
10.216 + public static string PowerOnHours {
10.217 + get { return "Power-On Hours (POH)"; }
10.218 + }
10.219 +
10.220 + public static string ReadChannelMargin {
10.221 + get { return "Read Channel Margin"; }
10.222 + }
10.223 +
10.224 + public static string ReadErrorRate {
10.225 + get { return "Read Error Rate"; }
10.226 + }
10.227 +
10.228 + public static string ReadErrorRetryRate {
10.229 + get { return "Read Error Retry Rate"; }
10.230 + }
10.231 +
10.232 + public static string ReallocatedSectorsCount {
10.233 + get { return "Reallocated Sectors Count"; }
10.234 + }
10.235 +
10.236 + public static string ReportedUncorrectableErrors {
10.237 + get { return "Reported Uncorrectable Errors"; }
10.238 + }
10.239 +
10.240 + public static string RunOutCancel {
10.241 + get { return "Run Out Cancel"; }
10.242 + }
10.243 +
10.244 + public static string SataDownshiftErrorCount {
10.245 + get { return "SATA Downshift Error Count"; }
10.246 + }
10.247 +
10.248 + public static string SeekErrorRate {
10.249 + get { return "Seek Error Rate"; }
10.250 + }
10.251 +
10.252 + public static string SeekTimePerformance {
10.253 + get { return "Seek Time Performance"; }
10.254 + }
10.255 +
10.256 + public static string ShockDuringWrite {
10.257 + get { return "Shock During Write"; }
10.258 + }
10.259 +
10.260 + public static string SoftEccCorrection {
10.261 + get { return "Soft ECC Correction"; }
10.262 + }
10.263 +
10.264 + public static string SoftReadErrorRate {
10.265 + get { return "Soft Read Error Rate"; }
10.266 + }
10.267 +
10.268 + public static string SpinBuzz {
10.269 + get { return "Spin Buzz"; }
10.270 + }
10.271 +
10.272 + public static string SpinHighCurrent {
10.273 + get { return "Spin High Current"; }
10.274 + }
10.275 +
10.276 + public static string SpinRetryCount {
10.277 + get { return "Spin Retry Count"; }
10.278 + }
10.279 +
10.280 + public static string SpinUpTime {
10.281 + get { return "Spin-Up Time"; }
10.282 + }
10.283 +
10.284 + public static string StartStopCount {
10.285 + get { return "Start/Stop Count"; }
10.286 + }
10.287 +
10.288 + public static string TaCounterDetected {
10.289 + get { return "TA Counter Detected"; }
10.290 + }
10.291 +
10.292 + public static string TemperatureDifferenceFrom100 {
10.293 + get { return "Temperature Difference from 100"; }
10.294 + }
10.295 +
10.296 + public static string ThermalAsperityRate {
10.297 + get { return "Thermal Asperity Rate (TAR)"; }
10.298 + }
10.299 +
10.300 + public static string ThroughputPerformance {
10.301 + get { return "Throughput Performance"; }
10.302 + }
10.303 +
10.304 + public static string TorqueAmplificationCount {
10.305 + get { return "Torque Amplification Count"; }
10.306 + }
10.307 +
10.308 + public static string TotalLbasRead {
10.309 + get { return "Total LBAs Read"; }
10.310 + }
10.311 +
10.312 + public static string TotalLbasWritten {
10.313 + get { return "Total LBAs Written"; }
10.314 + }
10.315 +
10.316 + public static string TransferErrorRate {
10.317 + get { return "Transfer Error Rate"; }
10.318 + }
10.319 +
10.320 + public static string UltraDmaCrcErrorCount {
10.321 + get { return "UltraDMA CRC Error Count"; }
10.322 + }
10.323 +
10.324 + public static string UncorrectableSectorCount {
10.325 + get { return "Uncorrectable Sector Count"; }
10.326 + }
10.327 +
10.328 + public static string Unknown {
10.329 + get { return "Unknown"; }
10.330 + }
10.331 +
10.332 + public static string VibrationDuringWrite {
10.333 + get { return "Vibration During Write"; }
10.334 + }
10.335 +
10.336 + public static string WriteErrorRate {
10.337 + get { return "Write Error Rate"; }
10.338 + }
10.339 +
10.340 + public static string RecalibrationRetries {
10.341 + get { return "Recalibration Retries"; }
10.342 + }
10.343 +
10.344 + public static string LoadCycleCount {
10.345 + get { return "Load Cycle Count"; }
10.346 + }
10.347 +
10.348 + public static string AlternativeGSenseErrorRate {
10.349 + get { return "Alternative G-Sense Error Rate"; }
10.350 + }
10.351 +
10.352 + public static string InitialBadBlockCount {
10.353 + get { return "Initial Bad Block Count"; }
10.354 + }
10.355 +
10.356 + public static string ProgramFailure {
10.357 + get { return "Program Failure"; }
10.358 + }
10.359 +
10.360 + public static string EraseFailure {
10.361 + get { return "Erase Failure"; }
10.362 + }
10.363 +
10.364 + public static string ReadFailure {
10.365 + get { return "Read Failure"; }
10.366 + }
10.367 +
10.368 + public static string SectorsRead {
10.369 + get { return "Sectors Read"; }
10.370 + }
10.371 +
10.372 + public static string SectorsWritten {
10.373 + get { return "Sectors Written"; }
10.374 + }
10.375 +
10.376 + public static string ReadCommands {
10.377 + get { return "Read Commands"; }
10.378 + }
10.379 +
10.380 + public static string WriteCommands {
10.381 + get { return "Write Commands"; }
10.382 + }
10.383 +
10.384 + public static string BitErrors {
10.385 + get { return "Bit Errors"; }
10.386 + }
10.387 +
10.388 + public static string CorrectedErrors {
10.389 + get { return "Corrected Errors"; }
10.390 + }
10.391 +
10.392 + public static string BadBlockFullFlag {
10.393 + get { return "Bad Block Full Flag"; }
10.394 + }
10.395 +
10.396 + public static string MaxCellCycles {
10.397 + get { return "Max Cell Cycles"; }
10.398 + }
10.399 +
10.400 + public static string MinErase {
10.401 + get { return "Min Erase"; }
10.402 + }
10.403 +
10.404 + public static string MaxErase {
10.405 + get { return "Max Erase"; }
10.406 + }
10.407 +
10.408 + public static string AverageEraseCount {
10.409 + get { return "Average Erase Count"; }
10.410 + }
10.411 +
10.412 + public static string UnknownUnique {
10.413 + get { return "Unknown Unique"; }
10.414 + }
10.415 +
10.416 + public static string SataErrorCountCrc {
10.417 + get { return "SATA Error Count CRC"; }
10.418 + }
10.419 +
10.420 + public static string SataErrorCountHandshake {
10.421 + get { return "SATA Error Count Handshake"; }
10.422 + }
10.423 +
10.424 + public static string UnsafeShutdownCount {
10.425 + get { return "Unsafe Shutdown Count"; }
10.426 + }
10.427 +
10.428 + public static string HostWrites {
10.429 + get { return "Host Writes"; }
10.430 + }
10.431 +
10.432 + public static string HostReads {
10.433 + get { return "Host Reads"; }
10.434 + }
10.435 +
10.436 + public static string MediaWearOutIndicator {
10.437 + get { return "Media Wear Out Indicator"; }
10.438 + }
10.439 +
10.440 + public static string ProgramFailCountChip {
10.441 + get { return "Program Fail Count (Chip)"; }
10.442 + }
10.443 +
10.444 + public static string EraseFailCountChip {
10.445 + get { return "Erase Fail Count (Chip)"; }
10.446 + }
10.447 +
10.448 + public static string WearLevelingCount {
10.449 + get { return "Wear Leveling Count"; }
10.450 + }
10.451 +
10.452 + public static string UsedReservedBlockCountChip {
10.453 + get { return "Used Reserved Block Count (Chip)"; }
10.454 + }
10.455 +
10.456 + public static string UsedReservedBlockCountTotal {
10.457 + get { return "Used Reserved Block Count (Total)"; }
10.458 + }
10.459 +
10.460 + public static string ProgramFailCountTotal {
10.461 + get { return "Program Fail Count (Total)"; }
10.462 + }
10.463 +
10.464 + public static string EraseFailCountTotal {
10.465 + get { return "Erase Fail Count (Total)"; }
10.466 + }
10.467 +
10.468 + public static string RuntimeBadBlockTotal {
10.469 + get { return "Runtime Bad Block Total"; }
10.470 + }
10.471 +
10.472 + public static string UncorrectableErrorCount {
10.473 + get { return "Uncorrectable Error Count"; }
10.474 + }
10.475 +
10.476 + public static string TemperatureExceedCount {
10.477 + get { return "Temperature Exceed Count"; }
10.478 + }
10.479 +
10.480 + public static string ECCRate {
10.481 + get { return "ECC Rate"; }
10.482 + }
10.483 +
10.484 + public static string OffLineUncorrectableErrorCount {
10.485 + get { return "Off-Line Uncorrectable Error Count"; }
10.486 + }
10.487 +
10.488 + public static string CRCErrorCount {
10.489 + get { return "CRC Error Count"; }
10.490 + }
10.491 +
10.492 + public static string SupercapStatus {
10.493 + get { return "Supercap Status"; }
10.494 + }
10.495 +
10.496 + public static string ExceptionModeStatus {
10.497 + get { return "Exception Mode Status"; }
10.498 + }
10.499 + }
10.500 +}
10.501 \ No newline at end of file
11.1 --- a/OpenHardwareMonitorLib.csproj Sun Jan 01 17:12:34 2012 +0000
11.2 +++ b/OpenHardwareMonitorLib.csproj Mon Jan 02 18:44:19 2012 +0000
11.3 @@ -69,12 +69,13 @@
11.4 <Compile Include="Hardware\HDD\HDDGeneric.cs" />
11.5 <Compile Include="Hardware\HDD\ISmart.cs" />
11.6 <Compile Include="Hardware\HDD\SmartAttribute.cs" />
11.7 - <Compile Include="Hardware\HDD\SmartAttributeNames.cs" />
11.8 + <Compile Include="Hardware\HDD\SmartNames.cs" />
11.9 <Compile Include="Hardware\HDD\RequireSmartAttribute.cs" />
11.10 <Compile Include="Hardware\HDD\NamePrefixAttribute.cs" />
11.11 <Compile Include="Hardware\HDD\SSDIndilinx.cs" />
11.12 <Compile Include="Hardware\HDD\SSDIntel.cs" />
11.13 <Compile Include="Hardware\HDD\SSDPlextor.cs" />
11.14 + <Compile Include="Hardware\HDD\SSDSamsung.cs" />
11.15 <Compile Include="Hardware\HDD\SSDSandforce.cs" />
11.16 <Compile Include="Hardware\IControl.cs" />
11.17 <Compile Include="Hardware\IOControlCode.cs" />