moel@324: /* moel@324: moel@344: This Source Code Form is subject to the terms of the Mozilla Public moel@344: License, v. 2.0. If a copy of the MPL was not distributed with this moel@344: file, You can obtain one at http://mozilla.org/MPL/2.0/. moel@324: moel@344: Copyright (C) 2009-2012 Michael Möller moel@344: Copyright (C) 2010 Paul Werelds moel@344: Copyright (C) 2011 Roland Reinl moel@344: moel@324: */ moel@324: moel@374: using System.Collections.Generic; moel@374: using OpenHardwareMonitor.Collections; moel@374: moel@324: namespace OpenHardwareMonitor.Hardware.HDD { moel@374: moel@324: [NamePrefix("INTEL SSD"), moel@324: RequireSmart(0xE1), RequireSmart(0xE8), RequireSmart(0xE9)] moel@324: internal class SSDIntel : AbstractHarddrive { moel@324: moel@324: private static readonly IEnumerable smartAttributes = moel@324: new List { moel@324: moel@328: new SmartAttribute(0x01, SmartNames.ReadErrorRate), moel@328: new SmartAttribute(0x03, SmartNames.SpinUpTime), moel@328: new SmartAttribute(0x04, SmartNames.StartStopCount, RawToInt), moel@328: new SmartAttribute(0x05, SmartNames.ReallocatedSectorsCount), moel@328: new SmartAttribute(0x09, SmartNames.PowerOnHours, RawToInt), moel@328: new SmartAttribute(0x0C, SmartNames.PowerCycleCount, RawToInt), moel@328: new SmartAttribute(0xAA, SmartNames.AvailableReservedSpace), moel@328: new SmartAttribute(0xAB, SmartNames.ProgramFailCount), moel@328: new SmartAttribute(0xAC, SmartNames.EraseFailCount), moel@328: new SmartAttribute(0xB8, SmartNames.EndToEndError), moel@328: new SmartAttribute(0xC0, SmartNames.UnsafeShutdownCount), moel@328: new SmartAttribute(0xE1, SmartNames.HostWrites, moel@374: (byte[] r, byte v, IReadOnlyArray p) moel@374: => { return RawToInt(r, v, p) / 0x20; }, moel@324: SensorType.Data, 0), moel@328: new SmartAttribute(0xE8, SmartNames.RemainingLife, moel@324: null, SensorType.Level, 0), moel@328: new SmartAttribute(0xE9, SmartNames.MediaWearOutIndicator), moel@328: new SmartAttribute(0xF1, SmartNames.HostWrites, moel@374: (byte[] r, byte v, IReadOnlyArray p) moel@374: => { return RawToInt(r, v, p) / 0x20; }, moel@324: SensorType.Data, 0), moel@328: new SmartAttribute(0xF2, SmartNames.HostReads, moel@374: (byte[] r, byte v, IReadOnlyArray p) moel@374: => { return RawToInt(r, v, p) / 0x20; }, moel@324: SensorType.Data, 1), moel@324: }; moel@324: moel@325: public SSDIntel(ISmart smart, string name, string firmwareRevision, moel@325: int index, ISettings settings) moel@325: : base(smart, name, firmwareRevision, index, smartAttributes, settings) {} moel@324: } moel@324: }