Hardware/HDD/HDDGeneric.cs
author sl
Sun, 03 Feb 2013 18:01:50 +0100
changeset 391 ca4c0e7ae75d
parent 358 7962499f9cd6
permissions -rw-r--r--
Converted project to VisualStudio 2012.
Adding SoundGraphDisplay and SensorFrontView classes.
They were respectively based on SystemTray and SensorNotifyIcon.
SoundGraphDisplay is now able to load iMONDisplay.dll providing it lives on your PATH.
Adding option to sensor context menu for adding it into FrontView.
moel@324
     1
/*
moel@324
     2
 
moel@344
     3
  This Source Code Form is subject to the terms of the Mozilla Public
moel@344
     4
  License, v. 2.0. If a copy of the MPL was not distributed with this
moel@344
     5
  file, You can obtain one at http://mozilla.org/MPL/2.0/.
moel@324
     6
 
moel@344
     7
  Copyright (C) 2011-2012 Michael Möller <mmoeller@openhardwaremonitor.org>
moel@344
     8
	Copyright (C) 2010 Paul Werelds
moel@344
     9
  Copyright (C) 2011 Roland Reinl <roland-reinl@gmx.de>
moel@344
    10
	
moel@324
    11
*/
moel@324
    12
moel@324
    13
using System;
moel@324
    14
using System.Collections.Generic;
moel@324
    15
using System.Text;
moel@374
    16
using OpenHardwareMonitor.Collections;
moel@324
    17
moel@324
    18
namespace OpenHardwareMonitor.Hardware.HDD {
moel@324
    19
moel@324
    20
  [NamePrefix("")]
moel@324
    21
  internal class GenericHarddisk : AbstractHarddrive {
moel@324
    22
moel@324
    23
    private static readonly List<SmartAttribute> smartAttributes =
moel@324
    24
      new List<SmartAttribute> {
moel@328
    25
      new SmartAttribute(0x01, SmartNames.ReadErrorRate),
moel@328
    26
      new SmartAttribute(0x02, SmartNames.ThroughputPerformance),
moel@328
    27
      new SmartAttribute(0x03, SmartNames.SpinUpTime),
moel@328
    28
      new SmartAttribute(0x04, SmartNames.StartStopCount, RawToInt),
moel@328
    29
      new SmartAttribute(0x05, SmartNames.ReallocatedSectorsCount),
moel@328
    30
      new SmartAttribute(0x06, SmartNames.ReadChannelMargin),
moel@328
    31
      new SmartAttribute(0x07, SmartNames.SeekErrorRate),
moel@328
    32
      new SmartAttribute(0x08, SmartNames.SeekTimePerformance),
moel@328
    33
      new SmartAttribute(0x09, SmartNames.PowerOnHours, RawToInt),
moel@328
    34
      new SmartAttribute(0x0A, SmartNames.SpinRetryCount),
moel@328
    35
      new SmartAttribute(0x0B, SmartNames.RecalibrationRetries),
moel@328
    36
      new SmartAttribute(0x0C, SmartNames.PowerCycleCount, RawToInt),
moel@328
    37
      new SmartAttribute(0x0D, SmartNames.SoftReadErrorRate),
moel@328
    38
      new SmartAttribute(0xAA, SmartNames.Unknown), 
moel@328
    39
      new SmartAttribute(0xAB, SmartNames.Unknown), 
moel@328
    40
      new SmartAttribute(0xAC, SmartNames.Unknown),
moel@358
    41
      new SmartAttribute(0xB7, SmartNames.SataDownshiftErrorCount, RawToInt),
moel@328
    42
      new SmartAttribute(0xB8, SmartNames.EndToEndError),
moel@328
    43
      new SmartAttribute(0xB9, SmartNames.HeadStability),
moel@328
    44
      new SmartAttribute(0xBA, SmartNames.InducedOpVibrationDetection),
moel@358
    45
      new SmartAttribute(0xBB, SmartNames.ReportedUncorrectableErrors, RawToInt),
moel@358
    46
      new SmartAttribute(0xBC, SmartNames.CommandTimeout, RawToInt),
moel@328
    47
      new SmartAttribute(0xBD, SmartNames.HighFlyWrites),
moel@328
    48
      new SmartAttribute(0xBF, SmartNames.GSenseErrorRate),
moel@328
    49
      new SmartAttribute(0xC0, SmartNames.EmergencyRetractCycleCount),
moel@328
    50
      new SmartAttribute(0xC1, SmartNames.LoadCycleCount),
moel@328
    51
      new SmartAttribute(0xC3, SmartNames.HardwareEccRecovered),
moel@328
    52
      new SmartAttribute(0xC4, SmartNames.ReallocationEventCount),
moel@328
    53
      new SmartAttribute(0xC5, SmartNames.CurrentPendingSectorCount),
moel@328
    54
      new SmartAttribute(0xC6, SmartNames.UncorrectableSectorCount),
moel@328
    55
      new SmartAttribute(0xC7, SmartNames.UltraDmaCrcErrorCount),
moel@328
    56
      new SmartAttribute(0xC8, SmartNames.WriteErrorRate),
moel@328
    57
      new SmartAttribute(0xCA, SmartNames.DataAddressMarkErrors),
moel@328
    58
      new SmartAttribute(0xCB, SmartNames.RunOutCancel),
moel@328
    59
      new SmartAttribute(0xCC, SmartNames.SoftEccCorrection),
moel@328
    60
      new SmartAttribute(0xCD, SmartNames.ThermalAsperityRate),
moel@328
    61
      new SmartAttribute(0xCE, SmartNames.FlyingHeight),
moel@328
    62
      new SmartAttribute(0xCF, SmartNames.SpinHighCurrent),
moel@328
    63
      new SmartAttribute(0xD0, SmartNames.SpinBuzz),
moel@328
    64
      new SmartAttribute(0xD1, SmartNames.OfflineSeekPerformance),
moel@328
    65
      new SmartAttribute(0xD3, SmartNames.VibrationDuringWrite),
moel@328
    66
      new SmartAttribute(0xD4, SmartNames.ShockDuringWrite),
moel@328
    67
      new SmartAttribute(0xDC, SmartNames.DiskShift),
moel@328
    68
      new SmartAttribute(0xDD, SmartNames.AlternativeGSenseErrorRate), 
moel@328
    69
      new SmartAttribute(0xDE, SmartNames.LoadedHours),
moel@328
    70
      new SmartAttribute(0xDF, SmartNames.LoadUnloadRetryCount),
moel@328
    71
      new SmartAttribute(0xE0, SmartNames.LoadFriction),
moel@328
    72
      new SmartAttribute(0xE1, SmartNames.LoadUnloadCycleCount),
moel@328
    73
      new SmartAttribute(0xE2, SmartNames.LoadInTime),
moel@328
    74
      new SmartAttribute(0xE3, SmartNames.TorqueAmplificationCount),
moel@328
    75
      new SmartAttribute(0xE4, SmartNames.PowerOffRetractCycle),
moel@328
    76
      new SmartAttribute(0xE6, SmartNames.GmrHeadAmplitude),      
moel@328
    77
      new SmartAttribute(0xE8, SmartNames.EnduranceRemaining),
moel@328
    78
      new SmartAttribute(0xE9, SmartNames.PowerOnHours),
moel@328
    79
      new SmartAttribute(0xF0, SmartNames.HeadFlyingHours),
moel@328
    80
      new SmartAttribute(0xF1, SmartNames.TotalLbasWritten),
moel@328
    81
      new SmartAttribute(0xF2, SmartNames.TotalLbasRead),
moel@328
    82
      new SmartAttribute(0xFA, SmartNames.ReadErrorRetryRate),
moel@328
    83
      new SmartAttribute(0xFE, SmartNames.FreeFallProtection),
moel@324
    84
moel@328
    85
      new SmartAttribute(0xC2, SmartNames.Temperature, 
moel@374
    86
        (byte[] r, byte v, IReadOnlyArray<IParameter> p) 
moel@374
    87
          => { return r[0] + (p == null ? 0 : p[0].Value); }, 
moel@374
    88
          SensorType.Temperature, 0, false, 
moel@374
    89
        new[] { new ParameterDescription("Offset [°C]", 
moel@374
    90
                  "Temperature offset of the thermal sensor.\n" + 
moel@374
    91
                  "Temperature = Value + Offset.", 0) }),
moel@328
    92
      new SmartAttribute(0xE7, SmartNames.Temperature, 
moel@374
    93
        (byte[] r, byte v, IReadOnlyArray<IParameter> p) 
moel@374
    94
          => { return r[0] + (p == null ? 0 : p[0].Value); }, 
moel@374
    95
          SensorType.Temperature, 0, false, 
moel@374
    96
        new[] { new ParameterDescription("Offset [°C]", 
moel@374
    97
                  "Temperature offset of the thermal sensor.\n" + 
moel@374
    98
                  "Temperature = Value + Offset.", 0) }),
moel@328
    99
      new SmartAttribute(0xBE, SmartNames.TemperatureDifferenceFrom100, 
moel@324
   100
        null, SensorType.Temperature, 0)
moel@324
   101
    };
moel@324
   102
moel@325
   103
    public GenericHarddisk(ISmart smart, string name, string firmwareRevision, 
moel@325
   104
      int index, ISettings settings)
moel@325
   105
      : base(smart, name, firmwareRevision, index, smartAttributes, settings) {}
moel@324
   106
  }
moel@324
   107
}