| 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@324 |     51 |       new SmartAttribute(0x01, SmartAttributeNames.ReadErrorRate),
 | 
| moel@324 |     52 |       new SmartAttribute(0x02, SmartAttributeNames.ThroughputPerformance),
 | 
| moel@324 |     53 |       new SmartAttribute(0x03, SmartAttributeNames.SpinUpTime),
 | 
| moel@324 |     54 |       new SmartAttribute(0x04, SmartAttributeNames.StartStopCount, RawToInt),
 | 
| moel@324 |     55 |       new SmartAttribute(0x05, SmartAttributeNames.ReallocatedSectorsCount),
 | 
| moel@324 |     56 |       new SmartAttribute(0x06, SmartAttributeNames.ReadChannelMargin),
 | 
| moel@324 |     57 |       new SmartAttribute(0x07, SmartAttributeNames.SeekErrorRate),
 | 
| moel@324 |     58 |       new SmartAttribute(0x08, SmartAttributeNames.SeekTimePerformance),
 | 
| moel@324 |     59 |       new SmartAttribute(0x09, SmartAttributeNames.PowerOnHours, RawToInt),
 | 
| moel@324 |     60 |       new SmartAttribute(0x0A, SmartAttributeNames.SpinRetryCount),
 | 
| moel@324 |     61 |       new SmartAttribute(0x0B, SmartAttributeNames.RecalibrationRetries),
 | 
| moel@324 |     62 |       new SmartAttribute(0x0C, SmartAttributeNames.PowerCycleCount, RawToInt),
 | 
| moel@324 |     63 |       new SmartAttribute(0x0D, SmartAttributeNames.SoftReadErrorRate),
 | 
| moel@324 |     64 |       new SmartAttribute(0xAA, SmartAttributeNames.Unknown), 
 | 
| moel@324 |     65 |       new SmartAttribute(0xAB, SmartAttributeNames.Unknown), 
 | 
| moel@324 |     66 |       new SmartAttribute(0xAC, SmartAttributeNames.Unknown),
 | 
| moel@324 |     67 |       new SmartAttribute(0xB7, SmartAttributeNames.SataDownshiftErrorCount),
 | 
| moel@324 |     68 |       new SmartAttribute(0xB8, SmartAttributeNames.EndToEndError),
 | 
| moel@324 |     69 |       new SmartAttribute(0xB9, SmartAttributeNames.HeadStability),
 | 
| moel@324 |     70 |       new SmartAttribute(0xBA, SmartAttributeNames.InducedOpVibrationDetection),
 | 
| moel@324 |     71 |       new SmartAttribute(0xBB, SmartAttributeNames.ReportedUncorrectableErrors),
 | 
| moel@324 |     72 |       new SmartAttribute(0xBC, SmartAttributeNames.CommandTimeout),
 | 
| moel@324 |     73 |       new SmartAttribute(0xBD, SmartAttributeNames.HighFlyWrites),
 | 
| moel@324 |     74 |       new SmartAttribute(0xBF, SmartAttributeNames.GSenseErrorRate),
 | 
| moel@324 |     75 |       new SmartAttribute(0xC0, SmartAttributeNames.EmergencyRetractCycleCount),
 | 
| moel@324 |     76 |       new SmartAttribute(0xC1, SmartAttributeNames.LoadCycleCount),
 | 
| moel@324 |     77 |       new SmartAttribute(0xC3, SmartAttributeNames.HardwareEccRecovered),
 | 
| moel@324 |     78 |       new SmartAttribute(0xC4, SmartAttributeNames.ReallocationEventCount),
 | 
| moel@324 |     79 |       new SmartAttribute(0xC5, SmartAttributeNames.CurrentPendingSectorCount),
 | 
| moel@324 |     80 |       new SmartAttribute(0xC6, SmartAttributeNames.UncorrectableSectorCount),
 | 
| moel@324 |     81 |       new SmartAttribute(0xC7, SmartAttributeNames.UltraDmaCrcErrorCount),
 | 
| moel@324 |     82 |       new SmartAttribute(0xC8, SmartAttributeNames.WriteErrorRate),
 | 
| moel@324 |     83 |       new SmartAttribute(0xCA, SmartAttributeNames.DataAddressMarkErrors),
 | 
| moel@324 |     84 |       new SmartAttribute(0xCB, SmartAttributeNames.RunOutCancel),
 | 
| moel@324 |     85 |       new SmartAttribute(0xCC, SmartAttributeNames.SoftEccCorrection),
 | 
| moel@324 |     86 |       new SmartAttribute(0xCD, SmartAttributeNames.ThermalAsperityRate),
 | 
| moel@324 |     87 |       new SmartAttribute(0xCE, SmartAttributeNames.FlyingHeight),
 | 
| moel@324 |     88 |       new SmartAttribute(0xCF, SmartAttributeNames.SpinHighCurrent),
 | 
| moel@324 |     89 |       new SmartAttribute(0xD0, SmartAttributeNames.SpinBuzz),
 | 
| moel@324 |     90 |       new SmartAttribute(0xD1, SmartAttributeNames.OfflineSeekPerformance),
 | 
| moel@324 |     91 |       new SmartAttribute(0xD3, SmartAttributeNames.VibrationDuringWrite),
 | 
| moel@324 |     92 |       new SmartAttribute(0xD4, SmartAttributeNames.ShockDuringWrite),
 | 
| moel@324 |     93 |       new SmartAttribute(0xDC, SmartAttributeNames.DiskShift),
 | 
| moel@324 |     94 |       new SmartAttribute(0xDD, SmartAttributeNames.AlternativeGSenseErrorRate), 
 | 
| moel@324 |     95 |       new SmartAttribute(0xDE, SmartAttributeNames.LoadedHours),
 | 
| moel@324 |     96 |       new SmartAttribute(0xDF, SmartAttributeNames.LoadUnloadRetryCount),
 | 
| moel@324 |     97 |       new SmartAttribute(0xE0, SmartAttributeNames.LoadFriction),
 | 
| moel@324 |     98 |       new SmartAttribute(0xE1, SmartAttributeNames.LoadUnloadCycleCount),
 | 
| moel@324 |     99 |       new SmartAttribute(0xE2, SmartAttributeNames.LoadInTime),
 | 
| moel@324 |    100 |       new SmartAttribute(0xE3, SmartAttributeNames.TorqueAmplificationCount),
 | 
| moel@324 |    101 |       new SmartAttribute(0xE4, SmartAttributeNames.PowerOffRetractCycle),
 | 
| moel@324 |    102 |       new SmartAttribute(0xE6, SmartAttributeNames.GmrHeadAmplitude),      
 | 
| moel@324 |    103 |       new SmartAttribute(0xE8, SmartAttributeNames.EnduranceRemaining),
 | 
| moel@324 |    104 |       new SmartAttribute(0xE9, SmartAttributeNames.PowerOnHours),
 | 
| moel@324 |    105 |       new SmartAttribute(0xF0, SmartAttributeNames.HeadFlyingHours),
 | 
| moel@324 |    106 |       new SmartAttribute(0xF1, SmartAttributeNames.TotalLbasWritten),
 | 
| moel@324 |    107 |       new SmartAttribute(0xF2, SmartAttributeNames.TotalLbasRead),
 | 
| moel@324 |    108 |       new SmartAttribute(0xFA, SmartAttributeNames.ReadErrorRetryRate),
 | 
| moel@324 |    109 |       new SmartAttribute(0xFE, SmartAttributeNames.FreeFallProtection),
 | 
| moel@324 |    110 | 
 | 
| moel@324 |    111 |       new SmartAttribute(0xC2, SmartAttributeNames.Temperature, 
 | 
| moel@324 |    112 |         (byte[] r, byte v) => { return r[0]; }, SensorType.Temperature, 0),
 | 
| moel@324 |    113 |       new SmartAttribute(0xE7, SmartAttributeNames.Temperature, 
 | 
| moel@324 |    114 |         (byte[] r, byte v) => { return r[0]; }, SensorType.Temperature, 0),
 | 
| moel@324 |    115 |       new SmartAttribute(0xBE, SmartAttributeNames.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 | }
 |