Added SMART support for Samsung SSDs.
authormoel.mich
Mon, 02 Jan 2012 18:44:19 +0000
changeset 328f837f9f0973e
parent 327 e837e1e4b282
child 329 756af5ee409e
Added SMART support for Samsung SSDs.
Hardware/HDD/AbstractHarddrive.cs
Hardware/HDD/DebugSmart.cs
Hardware/HDD/HDDGeneric.cs
Hardware/HDD/SSDIndilinx.cs
Hardware/HDD/SSDIntel.cs
Hardware/HDD/SSDPlextor.cs
Hardware/HDD/SSDSamsung.cs
Hardware/HDD/SSDSandforce.cs
Hardware/HDD/SmartAttributeNames.cs
Hardware/HDD/SmartNames.cs
OpenHardwareMonitorLib.csproj
     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" />