Files
ReLibreHardwareMonitor/LibreHardwareMonitorLib/Hardware/Storage/SmartAttributeTranslator.cs
T
Blacktempel c542e856d4 Replace Storage implementation with CrystalDiskInfo based implementation (#2015)
* Replace Storage implementation with CrystalDiskInfo based implementation.

* Formatting.

* Code review.

* Code review.

* Increase space for attribute name in report.

* Implement dynamic disk handling for usage sensor.

Disable unused warnings.

* Further cleanup in NativeMethods.txt and referenced.
2025-11-08 10:53:43 +01:00

1761 lines
91 KiB
C#

// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Copyright (C) LibreHardwareMonitor and Contributors.
// Partial Copyright (C) Michael Möller <mmoeller@openhardwaremonitor.org> and Contributors.
// All Rights Reserved.
using System.Collections.Generic;
using DiskInfoToolkit.Interop.Enums;
namespace LibreHardwareMonitor.Hardware.Storage;
internal static class SmartAttributeTranslator
{
const int SensorChannelStartIndex = 30;
public static List<SmartAttribute> GetAttributesFor(DiskInfoToolkit.Storage storage)
{
switch (storage.SmartKey)
{
case SmartKey.Smart:
return GetSmart(storage);
case SmartKey.SSD:
return GetSSD(storage);
case SmartKey.Mtron:
return GetMtron(storage);
case SmartKey.Indilinx:
return GetIndilinx(storage);
case SmartKey.JMicron60x:
return GetJMicron60X(storage);
case SmartKey.Intel:
return GetIntel(storage);
case SmartKey.Samsung:
return GetSamsung(storage);
case SmartKey.SandForce:
return GetSandforce(storage);
case SmartKey.JMicron61x:
return GetJMicron61X(storage);
case SmartKey.Micron:
return GetMicron(storage);
case SmartKey.MicronMU02:
return GetMicronMU03(storage);
case SmartKey.Ocz:
return GetOcz(storage);
case SmartKey.Plextor:
return GetPlextor(storage);
case SmartKey.SanDisk:
return GetSandisk(storage);
case SmartKey.OczVector:
return GetOczVector(storage);
case SmartKey.Corsair:
return GetCorsair(storage);
case SmartKey.Toshiba:
return GetToshiba(storage);
case SmartKey.SanDiskGb:
return GetSandiskGB(storage);
case SmartKey.Kingston:
return GetKingston(storage);
case SmartKey.NVMe:
return GetNVME(storage);
case SmartKey.Realtek:
return GetRealtek(storage);
case SmartKey.SKhynix:
return GetSkhynix(storage);
case SmartKey.Kioxia:
return GetKioxia(storage);
case SmartKey.WDC:
return GetWdc(storage);
case SmartKey.KingstonSuv:
return GetKingstonSUV(storage);
case SmartKey.KingstonKC600:
return GetKingstonKC600(storage);
case SmartKey.KingstonDC500:
return GetKingstonDC500(storage);
case SmartKey.KingstonSA400:
return GetKingstonSA400(storage);
case SmartKey.Ssstc:
return GetSSSTC(storage);
case SmartKey.IntelDc:
return GetIntelDC(storage);
case SmartKey.Apacer:
return GetAPACER(storage);
case SmartKey.SiliconMotion:
return GetSiliconMotion(storage);
case SmartKey.JMicron66x:
return GetJMicron66X(storage);
case SmartKey.Phison:
return GetPhison(storage);
case SmartKey.Seagate:
return GetSeagate(storage);
case SmartKey.SeagateIronWolf:
return GetSeagateIronWolf(storage);
case SmartKey.Marvell:
return GetMarvell(storage);
case SmartKey.Maxiotek:
return GetMaxiotek(storage);
case SmartKey.SeagateBarraCuda:
return GetSeagateBarraCuda(storage);
case SmartKey.Ymtc:
return GetYMTC(storage);
case SmartKey.Scy:
return GetSCY(storage);
case SmartKey.Recadata:
return GetRecadata(storage);
case SmartKey.SanDiskHP:
return GetSandiskHP(storage);
case SmartKey.SanDiskHPVenus:
return GetSandiskHPVenus(storage);
case SmartKey.SanDiskDell:
return GetSandiskDell(storage);
case SmartKey.SanDiskLenovo:
return GetSandiskLenovo(storage);
case SmartKey.SanDiskLenovoHelenVenus:
return GetSandiskLenovoHelenVenus(storage);
case SmartKey.MicronMU03:
return GetMicronMU03(storage);
case SmartKey.SanDiskCloud:
return GetSandiskCloud(storage);
case SmartKey.SiliconMotionCVC:
return GetSiliconMotionCVC(storage);
case SmartKey.AdataIndustrial:
return GetAdataIndustrial(storage);
default:
return new();
}
}
private static List<SmartAttribute> GetSmart(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ThroughputPerformance),
Get(storage, SmartAttributeType.SpinUpTime),
Get(storage, SmartAttributeType.StartStopCount),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.ReadChannelMargin),
Get(storage, SmartAttributeType.SeekErrorRate),
Get(storage, SmartAttributeType.SeekTimePerformance),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.SpinRetryCount),
Get(storage, SmartAttributeType.RecalibrationRetries),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SoftReadErrorRateStab),
Get(storage, SmartAttributeType.CurrentHeliumLevel),
Get(storage, SmartAttributeType.EndToEndError),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.CommandTimeout),
Get(storage, SmartAttributeType.HighFlyWrites),
Get(storage, SmartAttributeType.AirflowTemperature),
Get(storage, SmartAttributeType.GSenseErrorRate),
Get(storage, SmartAttributeType.PowerOffRetractCount),
Get(storage, SmartAttributeType.LoadUnloadCycleCount),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.HardwareECCRecovered),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.PendingSectorCount),
Get(storage, SmartAttributeType.UncorrectableSectorCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.WriteErrorRate),
Get(storage, SmartAttributeType.SoftReadErrorRate),
Get(storage, SmartAttributeType.DataAddressMarkError),
Get(storage, SmartAttributeType.RunOutCancel),
Get(storage, SmartAttributeType.SoftECCCorrection),
Get(storage, SmartAttributeType.ThermalAsperityRate),
Get(storage, SmartAttributeType.FlyingHeight),
Get(storage, SmartAttributeType.SpinHighCurrent),
Get(storage, SmartAttributeType.SpinBuzz),
Get(storage, SmartAttributeType.OfflineSeekPerformance),
Get(storage, SmartAttributeType.VibrationDuringWrite),
Get(storage, SmartAttributeType.ShockDuringWrite),
Get(storage, SmartAttributeType.DiskShift),
Get(storage, SmartAttributeType.GSenseErrorRate),
Get(storage, SmartAttributeType.LoadedHours),
Get(storage, SmartAttributeType.LoadUnloadCycleCount),
Get(storage, SmartAttributeType.LoadFriction),
Get(storage, SmartAttributeType.LoadUnloadCycleCount),
Get(storage, SmartAttributeType.LoadInTime),
Get(storage, SmartAttributeType.TorqueAmplificationCount),
Get(storage, SmartAttributeType.PowerOffRetractCount),
Get(storage, SmartAttributeType.GMRHeadAmplitude),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.HeadFlyingHours),
Get(storage, SmartAttributeType.ReadErrorRetryRate),
Get(storage, SmartAttributeType.FreeFallProtection),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.HeliumConditionLower),
Get(storage, SmartAttributeType.HeliumConditionUpper),
Get(storage, SmartAttributeType.MAMRHealthMonitor),
];
}
private static List<SmartAttribute> GetSSD(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ThroughputPerformance),
Get(storage, SmartAttributeType.SpinUpTime),
Get(storage, SmartAttributeType.StartStopCount),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.ReadChannelMargin),
Get(storage, SmartAttributeType.SeekErrorRate),
Get(storage, SmartAttributeType.SeekTimePerformance),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.SpinRetryCount),
Get(storage, SmartAttributeType.RecalibrationRetries),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SoftReadErrorRateStab),
Get(storage, SmartAttributeType.UnsafeShutdownCount),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.PendingSectorCount),
Get(storage, SmartAttributeType.UncorrectableSectorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
];
}
private static List<SmartAttribute> GetMtron(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.TotalEraseCount),
];
}
private static List<SmartAttribute> GetIndilinx(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ProgramFailureBlockCount),
Get(storage, SmartAttributeType.EraseFailureBlockCount),
Get(storage, SmartAttributeType.ReadFailureBlockCount),
Get(storage, SmartAttributeType.TotalCountReadSectors),
Get(storage, SmartAttributeType.TotalCountWriteSectors),
Get(storage, SmartAttributeType.TotalCountReadCommands),
Get(storage, SmartAttributeType.TotalCountWriteCommands),
Get(storage, SmartAttributeType.TotalCountErrorBitsFromFlash),
Get(storage, SmartAttributeType.TotalCountReadSectorsWithCorrectableBitErrors),
Get(storage, SmartAttributeType.BadBlockFullFlag),
Get(storage, SmartAttributeType.MaximumPECountSpecification),
Get(storage, SmartAttributeType.MinimumEraseCount),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.RemainingLife),
];
}
private static List<SmartAttribute> GetIntel(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.SpinUpTime),
Get(storage, SmartAttributeType.StartStopCount),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.PowerLossProtectionFailure),
Get(storage, SmartAttributeType.SATADownshiftCount),
Get(storage, SmartAttributeType.EndToEndError),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.UnsafeShutdownCount),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.PendingSectorCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.TimedWorkloadMediaWear),
Get(storage, SmartAttributeType.TimedWorkloadHostReadWriteRatio),
Get(storage, SmartAttributeType.TimedWorkloadTimer),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.MediaWearoutIndicator),
Get(storage, SmartAttributeType.ThermalThrottleStatus),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.NandDataWritten),
];
}
private static List<SmartAttribute> GetSamsung(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.WearLevelingCount),
Get(storage, SmartAttributeType.UsedReservedBlockCount),
Get(storage, SmartAttributeType.UsedReservedBlockCount),
Get(storage, SmartAttributeType.UnusedReservedBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.RuntimeBadBlock),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.AirflowTemperature),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ECCErrorRate),
Get(storage, SmartAttributeType.OfflineUncorrectableErrors),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.SuperCapStatus),
Get(storage, SmartAttributeType.SSDModeStatus),
Get(storage, SmartAttributeType.PORRecoveryCount),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.UnusedReservedBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.WearLevelingCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.ErrorDetection),
Get(storage, SmartAttributeType.MediaWearoutIndicator),
];
}
private static List<SmartAttribute> GetSandforce(DiskInfoToolkit.Storage storage)
{
int sensorStart = SensorChannelStartIndex;
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.RetiredBlockCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SoftReadErrorRate),
Get(storage, SmartAttributeType.GigabytesErased),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.WearRangeDelta),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.IOErrorDetectionCodeErrors),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.UncorrectableSectorCount),
Get(storage, SmartAttributeType.SATARErrors),
Get(storage, SmartAttributeType.SoftReadErrorRate),
Get(storage, SmartAttributeType.SoftECCCorrection),
Get(storage, SmartAttributeType.DriveLifeProtectionStatus),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.NandDataWritten, SensorType.Data, sensorStart++),
Get(storage, SmartAttributeType.PowerFailBackupHealth),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
];
}
private static List<SmartAttribute> GetMicron(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedNANDBlocks),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SoftReadErrorRate),
Get(storage, SmartAttributeType.DeviceCapacity),
Get(storage, SmartAttributeType.UserCapacity),
Get(storage, SmartAttributeType.SpareBlocksAvailable),
Get(storage, SmartAttributeType.RemainingSpareBlocks),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.UnusedReservedBlockCount),
Get(storage, SmartAttributeType.UnalignedAccessCount),
Get(storage, SmartAttributeType.SATADownshiftCount),
Get(storage, SmartAttributeType.ErrorCorrectionCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.CommandTimeout),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ECCBitCorrectionCount),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.PendingSectorCount),
Get(storage, SmartAttributeType.OfflineUncorrectableErrors),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.LifetimeUsed),
Get(storage, SmartAttributeType.WriteErrorRate),
Get(storage, SmartAttributeType.SuccessfulRAINRecoveryCount),
Get(storage, SmartAttributeType.TotalBytesRead),
Get(storage, SmartAttributeType.WriteProtectProgress),
Get(storage, SmartAttributeType.ECCBitsCorrected),
Get(storage, SmartAttributeType.ECCCumulativeThresholdEvents),
Get(storage, SmartAttributeType.CumulativeProgramNANDPages),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostProgramPageCount),
Get(storage, SmartAttributeType.BackgroundProgramPageCount),
Get(storage, SmartAttributeType.TotalRefreshISPCount),
Get(storage, SmartAttributeType.TotalDoRefCalCount),
Get(storage, SmartAttributeType.TotalNANDReadPlaneCountLow),
Get(storage, SmartAttributeType.TotalNANDReadPlaneCountHigh),
Get(storage, SmartAttributeType.TotalBlockReMapPassCount),
Get(storage, SmartAttributeType.TotalBackgroundScanOverLimitCount),
Get(storage, SmartAttributeType.TotalBackgroundScan),
];
}
private static List<SmartAttribute> GetOcz(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.SpinUpTime),
Get(storage, SmartAttributeType.StartStopCount),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.TotalCountWriteSectors),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.TotalBlocksErased),
Get(storage, SmartAttributeType.SSDProtectMode),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.TotalNumberCorrectedBits),
Get(storage, SmartAttributeType.MaxRatedPECounts),
Get(storage, SmartAttributeType.MinimumEraseCount),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.NandReadRetryCount),
Get(storage, SmartAttributeType.SimpleReadRetryAttempts),
Get(storage, SmartAttributeType.AdaptiveReadRetryAttempts),
Get(storage, SmartAttributeType.OfflineUncorrectableErrors),
Get(storage, SmartAttributeType.RAIDRecoveryCount),
Get(storage, SmartAttributeType.PowerLossProtectionFailure),
Get(storage, SmartAttributeType.NandDataRead),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.NandDataWritten),
];
}
private static List<SmartAttribute> GetSeagate(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.RetiredBlockCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SpareBlocksAvailable),
Get(storage, SmartAttributeType.RemainingSpareBlocks),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.WearRangeDelta),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.SoftReadErrorRate),
Get(storage, SmartAttributeType.SoftECCCorrection),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.ReadFailureBlockCount),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.NandDataRead),
];
}
private static List<SmartAttribute> GetWdc(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedNANDBlocks),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.TotalNANDEraseCount),
Get(storage, SmartAttributeType.MinimumPECycles),
Get(storage, SmartAttributeType.MaximumBadBlocksPerDie),
Get(storage, SmartAttributeType.MaximumPECycles),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.GrownBadBlocks),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.AveragePECycles),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.EndToEndErrorsCorrected),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.CommandTimeout),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.MediaWearoutIndicator),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.MediaWearoutIndicator),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.ThermalThrottleStatus),
Get(storage, SmartAttributeType.NandDataWritten),
];
}
private static List<SmartAttribute> GetPlextor(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.ProgramFailCountWorstCase),
Get(storage, SmartAttributeType.EraseFailCountWorstCase),
Get(storage, SmartAttributeType.WearLevelingCount),
Get(storage, SmartAttributeType.UsedReservedBlockCountWorstCase),
Get(storage, SmartAttributeType.UsedReservedBlockCount),
Get(storage, SmartAttributeType.UnusedReservedBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.SATADownshiftCount),
Get(storage, SmartAttributeType.EndToEndErrorsCorrected),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.CommandTimeout),
Get(storage, SmartAttributeType.UnsafeShutdownCount),
Get(storage, SmartAttributeType.ECCErrorRate),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.UncorrectableSectorCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
];
}
private static List<SmartAttribute> GetSandisk(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReallocatedNANDBlocks),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.PercentOfTotalEraseCount),
Get(storage, SmartAttributeType.RemainingSpareBlocks),
Get(storage, SmartAttributeType.PercentOfTotalEraseCountBCBlocks),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
];
}
private static List<SmartAttribute> GetOczVector(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.RuntimeBadBlock),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SpareBlocksAvailable),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.TotalUncorrectableNANDReads),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.TotalReadFailures),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.TotalBlocksErased),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.TotalNumberCorrectedBits),
Get(storage, SmartAttributeType.MaxRatedPECounts),
Get(storage, SmartAttributeType.MinimumEraseCount),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.NandReadRetryCount),
Get(storage, SmartAttributeType.SimpleReadRetryAttempts),
Get(storage, SmartAttributeType.AdaptiveReadRetryAttempts),
Get(storage, SmartAttributeType.OfflineUncorrectableErrors),
Get(storage, SmartAttributeType.RAIDRecoveryCount),
Get(storage, SmartAttributeType.InWarranty),
Get(storage, SmartAttributeType.DASPolarity),
Get(storage, SmartAttributeType.PartialPfail),
Get(storage, SmartAttributeType.WriteThrottlingActivationFlag),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.NandDataRead),
];
}
private static List<SmartAttribute> GetToshiba(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ThroughputPerformance),
Get(storage, SmartAttributeType.SpinUpTime),
Get(storage, SmartAttributeType.StartStopCount),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.SeekErrorRate),
Get(storage, SmartAttributeType.SeekTimePerformance),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.SpinRetryCount),
Get(storage, SmartAttributeType.RecalibrationRetries),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SSDProtectMode),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.PendingSectorCount),
Get(storage, SmartAttributeType.UncorrectableSectorCount),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
];
}
private static List<SmartAttribute> GetCorsair(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.RetiredBlockCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
];
}
private static List<SmartAttribute> GetKingston(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ThroughputPerformance),
Get(storage, SmartAttributeType.SpinUpTime),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.SeekErrorRate),
Get(storage, SmartAttributeType.SeekTimePerformance),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.SpinRetryCount),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.BadClusterTableCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.UnsafeShutdownCount),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.PendingSectorCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.WriteHead),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.TotalEraseCount),
];
}
private static List<SmartAttribute> GetMicronMU03(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedNANDBlocks),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.UnusedSpareNANDBlocks),
Get(storage, SmartAttributeType.Non4KAlignedAccess),
Get(storage, SmartAttributeType.SATADownshiftCount),
Get(storage, SmartAttributeType.ErrorCorrectionCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.ErrorCorrectionCount),
Get(storage, SmartAttributeType.OfflineUncorrectableErrors),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.WriteErrorRate),
Get(storage, SmartAttributeType.SuccessfulRAINRecoveryCount),
Get(storage, SmartAttributeType.HostProgramPageCount),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.HostProgramPageCount),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.CumulativeProgramNANDPages),
Get(storage, SmartAttributeType.CumulativeProgramNANDPages),
];
}
private static List<SmartAttribute> GetNVME(DiskInfoToolkit.Storage storage)
{
int sensorStart = SensorChannelStartIndex;
return
[
Get(storage, SmartAttributeType.CriticalWarning),
Get(storage, SmartAttributeType.CompositeTemperature),
Get(storage, SmartAttributeType.AvailableSpare, SensorType.Level, sensorStart++),
Get(storage, SmartAttributeType.AvailableSpareThreshold, SensorType.Level, sensorStart++),
Get(storage, SmartAttributeType.PercentageUsed, SensorType.Level, sensorStart++),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostReadCommands),
Get(storage, SmartAttributeType.HostWriteCommands),
Get(storage, SmartAttributeType.ControllerBusyTime),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.UnsafeShutdownCount),
Get(storage, SmartAttributeType.MediaAndDataIntegrityErrors),
Get(storage, SmartAttributeType.NumberOfErrorInformationLogEntries),
Get(storage, SmartAttributeType.WarningCompositeTemperatureTime),
Get(storage, SmartAttributeType.CriticalCompositeTemperatureTime),
Get(storage, SmartAttributeType.TemperatureSensor1),
Get(storage, SmartAttributeType.TemperatureSensor2),
Get(storage, SmartAttributeType.TemperatureSensor3),
Get(storage, SmartAttributeType.TemperatureSensor4),
Get(storage, SmartAttributeType.TemperatureSensor5),
Get(storage, SmartAttributeType.TemperatureSensor6),
Get(storage, SmartAttributeType.TemperatureSensor7),
Get(storage, SmartAttributeType.TemperatureSensor8),
Get(storage, SmartAttributeType.ThermalManagementTemperature1TransitionCount),
Get(storage, SmartAttributeType.ThermalManagementTemperature2TransitionCount),
Get(storage, SmartAttributeType.TotalTimeThermalManagementTemperature1),
Get(storage, SmartAttributeType.TotalTimeThermalManagementTemperature2),
];
}
private static List<SmartAttribute> GetRealtek(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.RawDataErrorRate),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.GDN),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.MaximumPECycles),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.SSDProtectMode),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.ECCFailRecord),
Get(storage, SmartAttributeType.UnalignedAccessCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ECCBitCorrectionCount),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.MinimumEraseCount),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.NandDataWritten),
];
}
private static List<SmartAttribute> GetSkhynix(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.MinimumEraseCount),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.ProgramFailCountWorstCase),
Get(storage, SmartAttributeType.EraseFailCountWorstCase),
Get(storage, SmartAttributeType.WearLevelingCount),
Get(storage, SmartAttributeType.UsedReservedBlockCountWorstCase),
Get(storage, SmartAttributeType.UsedReservedBlockCount),
Get(storage, SmartAttributeType.UnusedReservedBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.SATADownshiftCount),
Get(storage, SmartAttributeType.EndToEndError),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.CommandTimeout),
Get(storage, SmartAttributeType.ShockEventCount),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ECCErrorRate),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.UncorrectableSectorCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.UncorrectableSoftReadErrorRate),
Get(storage, SmartAttributeType.SoftECCCorrection),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.NandDataRead),
];
}
private static List<SmartAttribute> GetKioxia(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SSDProtectMode),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.HostDataWritten),
];
}
private static List<SmartAttribute> GetSSSTC(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedNANDBlocks),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.ProgramFailCountWorstCase),
Get(storage, SmartAttributeType.EraseFailCountWorstCase),
Get(storage, SmartAttributeType.WearLevelingCount),
Get(storage, SmartAttributeType.UsedReservedBlockCountWorstCase),
Get(storage, SmartAttributeType.UsedReservedBlockCount),
Get(storage, SmartAttributeType.UnusedReservedBlockCount),
Get(storage, SmartAttributeType.SATADownshiftCount),
Get(storage, SmartAttributeType.EndToEndError),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.CommandTimeout),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ECCErrorRate),
Get(storage, SmartAttributeType.OfflineUncorrectableErrors),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.PowerLossProtectionFailure),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.NandDataWritten),
];
}
private static List<SmartAttribute> GetIntelDC(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedNANDBlocks),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.DeviceCapacity),
Get(storage, SmartAttributeType.UserCapacity),
Get(storage, SmartAttributeType.SpareBlocksAvailable),
Get(storage, SmartAttributeType.RemainingSpareBlocks),
Get(storage, SmartAttributeType.TotalBlockEraseFailure),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.PowerLossProtectionFailure),
Get(storage, SmartAttributeType.ProgramFailureBlockCount),
Get(storage, SmartAttributeType.EndToEndError),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.PendingSectorCount),
Get(storage, SmartAttributeType.OfflineUncorrectableErrors),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.LifetimeUsed),
Get(storage, SmartAttributeType.TimedWorkloadMediaWear),
Get(storage, SmartAttributeType.TimedWorkloadHostReadWriteRatio),
Get(storage, SmartAttributeType.TimedWorkloadTimer),
Get(storage, SmartAttributeType.ThermalThrottleStatus),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.NandDataWritten),
];
}
private static List<SmartAttribute> GetAPACER(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.SSDProtectMode),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.BadClusterTableCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.HostDataWritten),
];
}
private static List<SmartAttribute> GetSiliconMotion(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SLCTotalEraseCount),
Get(storage, SmartAttributeType.SLCMaximumEraseCount),
Get(storage, SmartAttributeType.SLCMinimumEraseCount),
Get(storage, SmartAttributeType.SLCAverageEraseCount),
Get(storage, SmartAttributeType.DRAM1BitErrorCount),
Get(storage, SmartAttributeType.UncorrectableSectorCount),
Get(storage, SmartAttributeType.SpareBlocksAvailable),
Get(storage, SmartAttributeType.NumberOfCacheDataBlock),
Get(storage, SmartAttributeType.NumberOfInvalidBlocks),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.MinimumEraseCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.MaxEraseCountOfSpec),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.ProgramFailCountInWorstDie),
Get(storage, SmartAttributeType.EraseFailCountInWorstDie),
Get(storage, SmartAttributeType.WearLevelingCount),
Get(storage, SmartAttributeType.RuntimeBadBlock),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.PowerOffRetractCount),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.HardwareECCRecovered),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.PendingSectorCount),
Get(storage, SmartAttributeType.OfflineUncorrectableErrors),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.TotalCountWriteSectors),
];
}
private static List<SmartAttribute> GetPhison(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.HostDataWritten),
];
}
private static List<SmartAttribute> GetMarvell(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.MinimumEraseCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.PowerOffRetractCount),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
];
}
private static List<SmartAttribute> GetMaxiotek(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SSDProtectMode),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.BadClusterTableCount),
Get(storage, SmartAttributeType.ReadErrorRetryRate),
Get(storage, SmartAttributeType.SpareBlocksAvailable),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.MinimumEraseCount),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.SLCMinimumEraseCount),
Get(storage, SmartAttributeType.SLCMaximumEraseCount),
Get(storage, SmartAttributeType.SLCAverageEraseCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.NandDataRead),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.BitErrorCount),
];
}
private static List<SmartAttribute> GetYMTC(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.MaximumBadBlocksPerDie),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.BadClusterTableCount),
Get(storage, SmartAttributeType.SATADownshiftCount),
Get(storage, SmartAttributeType.EndToEndErrorsCorrected),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.MinimumEraseCount),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.SLCMinimumEraseCount),
Get(storage, SmartAttributeType.SLCMaximumEraseCount),
Get(storage, SmartAttributeType.SLCAverageEraseCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.NandDataRead),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.NANDTemperature),
Get(storage, SmartAttributeType.BitErrorCount),
];
}
private static List<SmartAttribute> GetSCY(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.SeekErrorRate),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.ReadErrorRetryRate),
Get(storage, SmartAttributeType.SpareBlocksAvailable),
Get(storage, SmartAttributeType.RuntimeBadBlock),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ECCBitCorrectionCount),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.PendingSectorCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.NandDataWritten),
];
}
private static List<SmartAttribute> GetJMicron60X(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.HaltSystemIDFlashID),
Get(storage, SmartAttributeType.FirmwareVersion),
Get(storage, SmartAttributeType.ECCFailRecord),
Get(storage, SmartAttributeType.AverageEraseCountMaxEraseCount),
Get(storage, SmartAttributeType.GoodBlockCountSystemBlockCount),
];
}
private static List<SmartAttribute> GetJMicron61X(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ThroughputPerformance),
Get(storage, SmartAttributeType.SpinUpTime),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.SeekErrorRate),
Get(storage, SmartAttributeType.SeekTimePerformance),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.SpinRetryCount),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.ECCFailRecord),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.PendingSectorCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.TotalEraseCount),
];
}
private static List<SmartAttribute> GetJMicron66X(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ThroughputPerformance),
Get(storage, SmartAttributeType.SpinUpTime),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.SeekErrorRate),
Get(storage, SmartAttributeType.SeekTimePerformance),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.SpinRetryCount),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SSDProtectMode),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.BadClusterTableCount),
Get(storage, SmartAttributeType.SpareBlocksAvailable),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.PendingSectorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.WriteHead),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
];
}
private static List<SmartAttribute> GetSeagateIronWolf(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.GigabytesErased),
Get(storage, SmartAttributeType.LifetimePS4EntryCount),
Get(storage, SmartAttributeType.LifetimePS3EntryCount),
Get(storage, SmartAttributeType.GrownBadBlocks),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.WearRangeDelta),
Get(storage, SmartAttributeType.SATADownshiftCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.RAISEECCCorrectableCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.DriveLifeProtectionStatus),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.FreeSpace),
];
}
private static List<SmartAttribute> GetSeagateBarraCuda(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.RetiredBlockCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SpareBlocksAvailable),
Get(storage, SmartAttributeType.RemainingSpareBlocks),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.WearRangeDelta),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.SoftReadErrorRate),
Get(storage, SmartAttributeType.SoftECCCorrection),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.ReadFailureBlockCount),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.NandDataRead),
];
}
private static List<SmartAttribute> GetSandiskGB(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedNANDBlocks),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.TotalBlocksErased),
Get(storage, SmartAttributeType.MinimumPECycles),
Get(storage, SmartAttributeType.MaximumBadBlocksPerDie),
Get(storage, SmartAttributeType.MaximumPECycles),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.GrownBadBlocks),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.PECycles),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.EndToEndErrorsCorrected),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.CommandTimeout),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.MediaWearoutIndicator),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.MediaWearoutIndicator),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.ThermalThrottleStatus),
Get(storage, SmartAttributeType.NandDataWritten),
];
}
private static List<SmartAttribute> GetKingstonSUV(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.ProgramFailCountInWorstDie),
Get(storage, SmartAttributeType.EraseFailCountInWorstDie),
Get(storage, SmartAttributeType.WearLevelingCount),
Get(storage, SmartAttributeType.UsedReservedBlockCountWorstDie),
Get(storage, SmartAttributeType.UnusedReservedBlockCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ECCErrorRate),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.PendingSectorCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.SoftECCCorrection),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.NandDataRead),
];
}
private static List<SmartAttribute> GetKingstonKC600(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedNANDBlocks),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.Reserved),
Get(storage, SmartAttributeType.Reserved),
Get(storage, SmartAttributeType.Reserved),
Get(storage, SmartAttributeType.SLCAverageEraseCount),
Get(storage, SmartAttributeType.DRAM1BitErrorCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.Reserved),
Get(storage, SmartAttributeType.Reserved),
Get(storage, SmartAttributeType.Reserved),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.Reserved),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.Reserved),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.HardwareECCRecovered),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.UnusedReservedBlockCount),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.HostDataWritten),
];
}
private static List<SmartAttribute> GetKingstonDC500(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SSDProtectMode),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.BadBlockFullFlag),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.ThermalThrottleStatus),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.TotalReadFailures),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.TotalEraseCount),
];
}
private static List<SmartAttribute> GetKingstonSA400(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.VendorUnique),
Get(storage, SmartAttributeType.VendorUnique),
Get(storage, SmartAttributeType.VendorUnique),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.VendorUnique),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.VendorUnique),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.VendorUnique),
Get(storage, SmartAttributeType.VendorUnique),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.WearLevelingCount),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.TotalEraseCount),
];
}
private static List<SmartAttribute> GetRecadata(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.SeekErrorRate),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.ReadErrorRetryRate),
Get(storage, SmartAttributeType.SpareBlocksAvailable),
Get(storage, SmartAttributeType.RuntimeBadBlock),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ECCBitCorrectionCount),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.PendingSectorCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.NandDataWritten),
];
}
private static List<SmartAttribute> GetSandiskDell(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.WearLevelingCount),
Get(storage, SmartAttributeType.UsedReservedBlockCountWorstCase),
Get(storage, SmartAttributeType.UsedReservedBlockCount),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ECCErrorRate),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.MediaWearoutIndicator),
Get(storage, SmartAttributeType.MediaWearoutIndicator),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
];
}
private static List<SmartAttribute> GetSandiskHP(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.WearLevelingCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.SATADownshiftCount),
Get(storage, SmartAttributeType.EndToEndError),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.CommandTimeout),
Get(storage, SmartAttributeType.AirflowTemperature),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.MediaWearoutIndicator),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.ThrottleStatistics),
Get(storage, SmartAttributeType.ThermalThrottleStatus),
Get(storage, SmartAttributeType.NandDataWritten),
];
}
private static List<SmartAttribute> GetSandiskHPVenus(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.WearLevelingCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.SATADownshiftCount),
Get(storage, SmartAttributeType.EndToEndError),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.CommandTimeout),
Get(storage, SmartAttributeType.AirflowTemperature),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ReallocationEventCount),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.MediaWearoutIndicator),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.ThermalThrottleStatus),
Get(storage, SmartAttributeType.NandDataWritten),
];
}
private static List<SmartAttribute> GetSandiskLenovo(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.MinimumPECycles),
Get(storage, SmartAttributeType.MaximumBadBlocksPerDie),
Get(storage, SmartAttributeType.MaximumPECycles),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.GrownBadBlocks),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.AveragePECycles),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.RemainingSpareBlocks),
Get(storage, SmartAttributeType.EndToEndErrorsCorrected),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.CommandTimeout),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.MediaWearoutIndicator),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.ThrottleStatistics),
Get(storage, SmartAttributeType.ThermalThrottleStatus),
];
}
private static List<SmartAttribute> GetSandiskLenovoHelenVenus(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.MinimumPECycles),
Get(storage, SmartAttributeType.MaximumBadBlocksPerDie),
Get(storage, SmartAttributeType.MaximumPECycles),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.GrownBadBlocks),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.AveragePECycles),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.UsedReservedBlockCount),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.EndToEndError),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.CommandTimeout),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.AvailableReservedSpace),
Get(storage, SmartAttributeType.MediaWearoutIndicator),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.ThrottleStatistics),
Get(storage, SmartAttributeType.ThermalThrottleStatus),
Get(storage, SmartAttributeType.NandDataWritten),
];
}
private static List<SmartAttribute> GetSandiskCloud(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.RetiredBlockCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.WriteAmplificationMultipliedBy100),
Get(storage, SmartAttributeType.WriteAmplificationFactor),
Get(storage, SmartAttributeType.ReserveBlockCount),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.CleanShutdownCount),
Get(storage, SmartAttributeType.UnsafeShutdownCount),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.ReallocatedNANDBlocks),
Get(storage, SmartAttributeType.PercentOfTotalEraseCount),
Get(storage, SmartAttributeType.SpareBlocksAvailable),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.CapacitorHealth),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.ThermalThrottleStatus),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.SPITestsRemaining),
];
}
private static List<SmartAttribute> GetSiliconMotionCVC(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.ReallocatedSectorsCount),
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SLCCache),
Get(storage, SmartAttributeType.GrownBadBlocks),
Get(storage, SmartAttributeType.ProgramFailCount),
Get(storage, SmartAttributeType.EraseFailCount),
Get(storage, SmartAttributeType.AverageEraseCount),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.ProgramFailCountWorstCase),
Get(storage, SmartAttributeType.SATADownshiftCount),
Get(storage, SmartAttributeType.EndToEndError),
Get(storage, SmartAttributeType.UncorrectableErrors),
Get(storage, SmartAttributeType.MaximumEraseCount),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.MinimumEraseCount),
Get(storage, SmartAttributeType.ReadErrorRate),
Get(storage, SmartAttributeType.OfflineUncorrectableErrors),
Get(storage, SmartAttributeType.CRCErrorCount),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.SpareBlocksAvailable),
Get(storage, SmartAttributeType.NandDataWritten),
Get(storage, SmartAttributeType.HostDataWritten),
Get(storage, SmartAttributeType.HostDataRead),
Get(storage, SmartAttributeType.RAIDEventCount),
Get(storage, SmartAttributeType.RAIDUncorrectableCount),
Get(storage, SmartAttributeType.SSDProtectMode),
Get(storage, SmartAttributeType.ReadErrorRetryRate),
Get(storage, SmartAttributeType.NandDataWritten),
];
}
private static List<SmartAttribute> GetAdataIndustrial(DiskInfoToolkit.Storage storage)
{
return
[
Get(storage, SmartAttributeType.PowerOnHours),
Get(storage, SmartAttributeType.PowerCycleCount),
Get(storage, SmartAttributeType.SSDProtectMode),
Get(storage, SmartAttributeType.SATAPhysicalErrorCount),
Get(storage, SmartAttributeType.BadBlockCount),
Get(storage, SmartAttributeType.TotalEraseCount),
Get(storage, SmartAttributeType.BadClusterTableCount),
Get(storage, SmartAttributeType.SpareBlocksAvailable),
Get(storage, SmartAttributeType.UnexpectedPowerLoss),
Get(storage, SmartAttributeType.Temperature),
Get(storage, SmartAttributeType.RemainingLife),
Get(storage, SmartAttributeType.FlashWriteSectorCount),
Get(storage, SmartAttributeType.FlashReadSectorCount),
Get(storage, SmartAttributeType.TotalCountWriteSectors),
Get(storage, SmartAttributeType.TotalCountReadSectors),
];
}
private static SmartAttribute Get(DiskInfoToolkit.Storage storage, SmartAttributeType smartAttributeType, SensorType? sensorType = null, int sensorChannel = 0, string sensorName = null)
{
var attr = storage.Smart.SmartAttributes.Find(sa => sa.Info.Type == smartAttributeType);
if (attr == null)
{
return null;
}
else
{
return new(attr, sensorType, sensorChannel, sensorName);
}
}
}