Hardware/HDD/SSDMicron.cs
changeset 358 7962499f9cd6
child 374 ea86cea126bc
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/Hardware/HDD/SSDMicron.cs	Sun Jul 08 15:24:44 2012 +0000
     1.3 @@ -0,0 +1,51 @@
     1.4 +/*
     1.5 + 
     1.6 +  This Source Code Form is subject to the terms of the Mozilla Public
     1.7 +  License, v. 2.0. If a copy of the MPL was not distributed with this
     1.8 +  file, You can obtain one at http://mozilla.org/MPL/2.0/.
     1.9 + 
    1.10 +  Copyright (C) 2012 Michael Möller <mmoeller@openhardwaremonitor.org>
    1.11 +	
    1.12 +*/
    1.13 +
    1.14 +namespace OpenHardwareMonitor.Hardware.HDD {
    1.15 +  using System.Collections.Generic;
    1.16 +
    1.17 +  [NamePrefix(""), RequireSmart(0xAA), RequireSmart(0xAB), RequireSmart(0xAC), 
    1.18 +   RequireSmart(0xAD), RequireSmart(0xAE), RequireSmart(0xCA)]
    1.19 +  internal class SSDMicron : AbstractHarddrive {
    1.20 +
    1.21 +    private static readonly IEnumerable<SmartAttribute> smartAttributes =
    1.22 +      new List<SmartAttribute> {
    1.23 +      
    1.24 +      new SmartAttribute(0x01, SmartNames.ReadErrorRate, RawToInt),
    1.25 +      new SmartAttribute(0x05, SmartNames.ReallocatedSectorsCount, RawToInt),
    1.26 +      new SmartAttribute(0x09, SmartNames.PowerOnHours, RawToInt),
    1.27 +      new SmartAttribute(0x0C, SmartNames.PowerCycleCount, RawToInt),
    1.28 +      new SmartAttribute(0xAA, SmartNames.NewFailingBlockCount, RawToInt),
    1.29 +      new SmartAttribute(0xAB, SmartNames.ProgramFailCount, RawToInt),
    1.30 +      new SmartAttribute(0xAC, SmartNames.EraseFailCount, RawToInt),
    1.31 +      new SmartAttribute(0xAD, SmartNames.WearLevelingCount, RawToInt),
    1.32 +      new SmartAttribute(0xAE, SmartNames.UnexpectedPowerLossCount, RawToInt),
    1.33 +      new SmartAttribute(0xB5, SmartNames.Non4kAlignedAccess, 
    1.34 +        (byte[] raw, byte value) => { return 6e4f * ((raw[5] << 8) | raw[4]); }),
    1.35 +      new SmartAttribute(0xB7, SmartNames.SataDownshiftErrorCount, RawToInt),
    1.36 +      new SmartAttribute(0xBB, SmartNames.ReportedUncorrectableErrors, RawToInt),
    1.37 +      new SmartAttribute(0xBC, SmartNames.CommandTimeout, RawToInt),
    1.38 +      new SmartAttribute(0xBD, SmartNames.FactoryBadBlockCount, RawToInt),
    1.39 +      new SmartAttribute(0xC4, SmartNames.ReallocationEventCount, RawToInt),
    1.40 +      new SmartAttribute(0xC5, SmartNames.CurrentPendingSectorCount),
    1.41 +      new SmartAttribute(0xC6, SmartNames.OffLineUncorrectableErrorCount, RawToInt),
    1.42 +      new SmartAttribute(0xC7, SmartNames.UltraDmaCrcErrorCount, RawToInt),
    1.43 +      new SmartAttribute(0xCA, SmartNames.RemainingLife, 
    1.44 +        (byte[] raw, byte value) => { return 100 - RawToInt(raw, value); }, 
    1.45 +        SensorType.Level, 0),
    1.46 +      new SmartAttribute(0xCE, SmartNames.WriteErrorRate, 
    1.47 +         (byte[] raw, byte value) => { return 6e4f * ((raw[1] << 8) | raw[0]); }),
    1.48 +    };
    1.49 +
    1.50 +    public SSDMicron(ISmart smart, string name, string firmwareRevision, 
    1.51 +      int index, ISettings settings)
    1.52 +      : base(smart, name, firmwareRevision, index, smartAttributes, settings) {}
    1.53 +  }
    1.54 +}