Hardware/HDD/HDDGeneric.cs
author moel.mich
Tue, 14 Feb 2012 23:07:55 +0000
changeset 340 600962f8a298
parent 325 4c31341a4800
child 344 3145aadca3d2
permissions -rw-r--r--
Added a new sensor type "Factor" for dimensionless values (and similar) that are not to be shown as percent ("Level" type). Changed the write amplification sensor to use the new "Factor" sensor type. Added the temperature SMART attribute for Sandforce SSDs as hidden sensor (as it may show fake results on some hardware).
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
  Roland Reinl <roland-reinl@gmx.de>.
moel@325
    19
  Portions created by the Initial Developer are Copyright (C) 2011-2012
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
    Michael Möller <m.moeller@gmx.ch>    
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
using System;
moel@324
    41
using System.Collections.Generic;
moel@324
    42
using System.Text;
moel@324
    43
moel@324
    44
namespace OpenHardwareMonitor.Hardware.HDD {
moel@324
    45
moel@324
    46
  [NamePrefix("")]
moel@324
    47
  internal class GenericHarddisk : AbstractHarddrive {
moel@324
    48
moel@324
    49
    private static readonly List<SmartAttribute> smartAttributes =
moel@324
    50
      new List<SmartAttribute> {
moel@328
    51
      new SmartAttribute(0x01, SmartNames.ReadErrorRate),
moel@328
    52
      new SmartAttribute(0x02, SmartNames.ThroughputPerformance),
moel@328
    53
      new SmartAttribute(0x03, SmartNames.SpinUpTime),
moel@328
    54
      new SmartAttribute(0x04, SmartNames.StartStopCount, RawToInt),
moel@328
    55
      new SmartAttribute(0x05, SmartNames.ReallocatedSectorsCount),
moel@328
    56
      new SmartAttribute(0x06, SmartNames.ReadChannelMargin),
moel@328
    57
      new SmartAttribute(0x07, SmartNames.SeekErrorRate),
moel@328
    58
      new SmartAttribute(0x08, SmartNames.SeekTimePerformance),
moel@328
    59
      new SmartAttribute(0x09, SmartNames.PowerOnHours, RawToInt),
moel@328
    60
      new SmartAttribute(0x0A, SmartNames.SpinRetryCount),
moel@328
    61
      new SmartAttribute(0x0B, SmartNames.RecalibrationRetries),
moel@328
    62
      new SmartAttribute(0x0C, SmartNames.PowerCycleCount, RawToInt),
moel@328
    63
      new SmartAttribute(0x0D, SmartNames.SoftReadErrorRate),
moel@328
    64
      new SmartAttribute(0xAA, SmartNames.Unknown), 
moel@328
    65
      new SmartAttribute(0xAB, SmartNames.Unknown), 
moel@328
    66
      new SmartAttribute(0xAC, SmartNames.Unknown),
moel@328
    67
      new SmartAttribute(0xB7, SmartNames.SataDownshiftErrorCount),
moel@328
    68
      new SmartAttribute(0xB8, SmartNames.EndToEndError),
moel@328
    69
      new SmartAttribute(0xB9, SmartNames.HeadStability),
moel@328
    70
      new SmartAttribute(0xBA, SmartNames.InducedOpVibrationDetection),
moel@328
    71
      new SmartAttribute(0xBB, SmartNames.ReportedUncorrectableErrors),
moel@328
    72
      new SmartAttribute(0xBC, SmartNames.CommandTimeout),
moel@328
    73
      new SmartAttribute(0xBD, SmartNames.HighFlyWrites),
moel@328
    74
      new SmartAttribute(0xBF, SmartNames.GSenseErrorRate),
moel@328
    75
      new SmartAttribute(0xC0, SmartNames.EmergencyRetractCycleCount),
moel@328
    76
      new SmartAttribute(0xC1, SmartNames.LoadCycleCount),
moel@328
    77
      new SmartAttribute(0xC3, SmartNames.HardwareEccRecovered),
moel@328
    78
      new SmartAttribute(0xC4, SmartNames.ReallocationEventCount),
moel@328
    79
      new SmartAttribute(0xC5, SmartNames.CurrentPendingSectorCount),
moel@328
    80
      new SmartAttribute(0xC6, SmartNames.UncorrectableSectorCount),
moel@328
    81
      new SmartAttribute(0xC7, SmartNames.UltraDmaCrcErrorCount),
moel@328
    82
      new SmartAttribute(0xC8, SmartNames.WriteErrorRate),
moel@328
    83
      new SmartAttribute(0xCA, SmartNames.DataAddressMarkErrors),
moel@328
    84
      new SmartAttribute(0xCB, SmartNames.RunOutCancel),
moel@328
    85
      new SmartAttribute(0xCC, SmartNames.SoftEccCorrection),
moel@328
    86
      new SmartAttribute(0xCD, SmartNames.ThermalAsperityRate),
moel@328
    87
      new SmartAttribute(0xCE, SmartNames.FlyingHeight),
moel@328
    88
      new SmartAttribute(0xCF, SmartNames.SpinHighCurrent),
moel@328
    89
      new SmartAttribute(0xD0, SmartNames.SpinBuzz),
moel@328
    90
      new SmartAttribute(0xD1, SmartNames.OfflineSeekPerformance),
moel@328
    91
      new SmartAttribute(0xD3, SmartNames.VibrationDuringWrite),
moel@328
    92
      new SmartAttribute(0xD4, SmartNames.ShockDuringWrite),
moel@328
    93
      new SmartAttribute(0xDC, SmartNames.DiskShift),
moel@328
    94
      new SmartAttribute(0xDD, SmartNames.AlternativeGSenseErrorRate), 
moel@328
    95
      new SmartAttribute(0xDE, SmartNames.LoadedHours),
moel@328
    96
      new SmartAttribute(0xDF, SmartNames.LoadUnloadRetryCount),
moel@328
    97
      new SmartAttribute(0xE0, SmartNames.LoadFriction),
moel@328
    98
      new SmartAttribute(0xE1, SmartNames.LoadUnloadCycleCount),
moel@328
    99
      new SmartAttribute(0xE2, SmartNames.LoadInTime),
moel@328
   100
      new SmartAttribute(0xE3, SmartNames.TorqueAmplificationCount),
moel@328
   101
      new SmartAttribute(0xE4, SmartNames.PowerOffRetractCycle),
moel@328
   102
      new SmartAttribute(0xE6, SmartNames.GmrHeadAmplitude),      
moel@328
   103
      new SmartAttribute(0xE8, SmartNames.EnduranceRemaining),
moel@328
   104
      new SmartAttribute(0xE9, SmartNames.PowerOnHours),
moel@328
   105
      new SmartAttribute(0xF0, SmartNames.HeadFlyingHours),
moel@328
   106
      new SmartAttribute(0xF1, SmartNames.TotalLbasWritten),
moel@328
   107
      new SmartAttribute(0xF2, SmartNames.TotalLbasRead),
moel@328
   108
      new SmartAttribute(0xFA, SmartNames.ReadErrorRetryRate),
moel@328
   109
      new SmartAttribute(0xFE, SmartNames.FreeFallProtection),
moel@324
   110
moel@328
   111
      new SmartAttribute(0xC2, SmartNames.Temperature, 
moel@324
   112
        (byte[] r, byte v) => { return r[0]; }, SensorType.Temperature, 0),
moel@328
   113
      new SmartAttribute(0xE7, SmartNames.Temperature, 
moel@324
   114
        (byte[] r, byte v) => { return r[0]; }, SensorType.Temperature, 0),
moel@328
   115
      new SmartAttribute(0xBE, SmartNames.TemperatureDifferenceFrom100, 
moel@324
   116
        null, SensorType.Temperature, 0)
moel@324
   117
    };
moel@324
   118
moel@325
   119
    public GenericHarddisk(ISmart smart, string name, string firmwareRevision, 
moel@325
   120
      int index, ISettings settings)
moel@325
   121
      : base(smart, name, firmwareRevision, index, smartAttributes, settings) {}
moel@324
   122
  }
moel@324
   123
}