Hardware/HDD/SSDIntel.cs
author moel.mich
Sat, 31 Dec 2011 17:31:04 +0000
changeset 324 c6ee430d6995
child 325 4c31341a4800
permissions -rw-r--r--
Modified and extended version of the patch v4 by Roland Reinl (see Issue 256). Main differences to the original patch: DeviceIoControl refactorings removed, SmartAttribute is now descriptive only and does not hold any state, report is written as one 80 columns table, sensors are created only for meaningful values and without duplicates (remaining life, temperatures, host writes and reads). Also the current implementation should really preserve all the functionality of the old system. Additionally there is now a simple SMART devices emulation class (DebugSmart) that can be used in place of WindowsSmart for testing with reported data.
moel@324
     1
/*
moel@324
     2
  
moel@324
     3
  Version: MPL 1.1/GPL 2.0/LGPL 2.1
moel@324
     4
moel@324
     5
  The contents of this file are subject to the Mozilla Public License Version
moel@324
     6
  1.1 (the "License"); you may not use this file except in compliance with
moel@324
     7
  the License. You may obtain a copy of the License at
moel@324
     8
 
moel@324
     9
  http://www.mozilla.org/MPL/
moel@324
    10
moel@324
    11
  Software distributed under the License is distributed on an "AS IS" basis,
moel@324
    12
  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
moel@324
    13
  for the specific language governing rights and limitations under the License.
moel@324
    14
moel@324
    15
  The Original Code is the Open Hardware Monitor code.
moel@324
    16
moel@324
    17
  The Initial Developer of the Original Code is 
moel@324
    18
  Michael Möller <m.moeller@gmx.ch>.
moel@324
    19
  Portions created by the Initial Developer are Copyright (C) 2009-2011
moel@324
    20
  the Initial Developer. All Rights Reserved.
moel@324
    21
moel@324
    22
  Contributor(s):
moel@324
    23
    Paul Werelds
moel@324
    24
    Roland Reinl <roland-reinl@gmx.de>
moel@324
    25
moel@324
    26
  Alternatively, the contents of this file may be used under the terms of
moel@324
    27
  either the GNU General Public License Version 2 or later (the "GPL"), or
moel@324
    28
  the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
moel@324
    29
  in which case the provisions of the GPL or the LGPL are applicable instead
moel@324
    30
  of those above. If you wish to allow use of your version of this file only
moel@324
    31
  under the terms of either the GPL or the LGPL, and not to allow others to
moel@324
    32
  use your version of this file under the terms of the MPL, indicate your
moel@324
    33
  decision by deleting the provisions above and replace them with the notice
moel@324
    34
  and other provisions required by the GPL or the LGPL. If you do not delete
moel@324
    35
  the provisions above, a recipient may use your version of this file under
moel@324
    36
  the terms of any one of the MPL, the GPL or the LGPL.
moel@324
    37
 
moel@324
    38
*/
moel@324
    39
moel@324
    40
namespace OpenHardwareMonitor.Hardware.HDD {
moel@324
    41
  using System.Collections.Generic;
moel@324
    42
moel@324
    43
  [NamePrefix("INTEL SSD"), 
moel@324
    44
   RequireSmart(0xE1), RequireSmart(0xE8), RequireSmart(0xE9)]
moel@324
    45
  internal class SSDIntel : AbstractHarddrive {
moel@324
    46
moel@324
    47
    private static readonly IEnumerable<SmartAttribute> smartAttributes =
moel@324
    48
      new List<SmartAttribute> {
moel@324
    49
moel@324
    50
      new SmartAttribute(0x01, SmartAttributeNames.ReadErrorRate),
moel@324
    51
      new SmartAttribute(0x03, SmartAttributeNames.SpinUpTime),
moel@324
    52
      new SmartAttribute(0x04, SmartAttributeNames.StartStopCount, RawToInt),
moel@324
    53
      new SmartAttribute(0x05, SmartAttributeNames.ReallocatedSectorsCount),
moel@324
    54
      new SmartAttribute(0x09, SmartAttributeNames.PowerOnHours, RawToInt),
moel@324
    55
      new SmartAttribute(0x0C, SmartAttributeNames.PowerCycleCount, RawToInt),
moel@324
    56
      new SmartAttribute(0xAA, SmartAttributeNames.AvailableReservedSpace),
moel@324
    57
      new SmartAttribute(0xAB, SmartAttributeNames.ProgramFailCount),
moel@324
    58
      new SmartAttribute(0xAC, SmartAttributeNames.EraseFailCount),
moel@324
    59
      new SmartAttribute(0xB8, SmartAttributeNames.EndToEndError),
moel@324
    60
      new SmartAttribute(0xC0, SmartAttributeNames.UnsafeShutdownCount), 
moel@324
    61
      new SmartAttribute(0xE1, SmartAttributeNames.HostWrites, 
moel@324
    62
        (byte[] r, byte v) => { return RawToInt(r, v) / 0x20; }, 
moel@324
    63
        SensorType.Data, 0),
moel@324
    64
      new SmartAttribute(0xE8, SmartAttributeNames.RemainingLife, 
moel@324
    65
        null, SensorType.Level, 0),
moel@324
    66
      new SmartAttribute(0xE9, SmartAttributeNames.MediaWearOutIndicator),
moel@324
    67
      new SmartAttribute(0xF1, SmartAttributeNames.HostWrites,
moel@324
    68
        (byte[] r, byte v) => { return RawToInt(r, v) / 0x20; }, 
moel@324
    69
        SensorType.Data, 0),
moel@324
    70
      new SmartAttribute(0xF2, SmartAttributeNames.HostReads, 
moel@324
    71
        (byte[] r, byte v) => { return RawToInt(r, v) / 0x20; }, 
moel@324
    72
        SensorType.Data, 1),      
moel@324
    73
    };
moel@324
    74
moel@324
    75
    public SSDIntel(ISmart smart, string name, int index, ISettings settings)
moel@324
    76
      : base(smart, name, index, smartAttributes, settings) { }
moel@324
    77
  }
moel@324
    78
}