diff --git a/LibreHardwareMonitorLib/Hardware/Storage/StorageDevice.cs b/LibreHardwareMonitorLib/Hardware/Storage/StorageDevice.cs index 666acb7..e390b5e 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/StorageDevice.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/StorageDevice.cs @@ -7,12 +7,12 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Globalization; using System.IO; using System.Linq; using System.Text; using BlackSharp.Core.Converters; using BlackSharp.Core.Converters.Enums; +using DiskInfoToolkit; using DiskInfoToolkit.Smart; using Windows.Win32; using Windows.Win32.Foundation; @@ -49,8 +49,8 @@ public sealed class StorageDevice : Hardware, ISmart private Sensor _usageSensor; private Sensor _freeSpaceSensor; - public StorageDevice(StorageDeviceDIT storage, string id, ISettings settings) - : base(storage.ProductName, new Identifier(id, storage.StorageDeviceNumber.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)), settings) + public StorageDevice(StorageDeviceDIT storage, ISettings settings) + : base(storage.ProductName, GetIdentifier(storage), settings) { _storage = storage; @@ -202,6 +202,7 @@ public sealed class StorageDevice : Hardware, ISmart } r.AppendLine($"Total Size: {_storage.DiskSizeBytes}"); + _storage.ProbeTrace.ForEach(line => r.AppendLine($"Probe Trace: {line}")); return r.ToString(); } @@ -212,6 +213,56 @@ public sealed class StorageDevice : Hardware, ISmart sensor.Accept(visitor); } + private static string GetID(StorageDeviceDIT disk) + { + switch (disk.TransportKind) + { + case StorageTransportKind.Ata: + return "ata"; + case StorageTransportKind.Scsi: + return "scsi"; + case StorageTransportKind.Nvme: + return "nvme"; + case StorageTransportKind.Usb: + return "usb"; + case StorageTransportKind.Sd: + return "sd"; + case StorageTransportKind.Mmc: + return "mmc"; + case StorageTransportKind.Raid: + return "raid"; + case StorageTransportKind.Sas: + return "sas"; + case StorageTransportKind.Ahci: + return "ahci"; + case StorageTransportKind.Virtual: + return "virtual"; + case StorageTransportKind.Unknown: + default: + return "disk"; + } + } + + private static Identifier GetIdentifier(StorageDeviceDIT storage) + { + string id; + + if (storage.StorageDeviceNumber.HasValue) + { + id = storage.StorageDeviceNumber.Value.ToString(); + } + else if (storage.Scsi.PathID.HasValue && storage.Scsi.TargetID.HasValue) + { + id = $"{storage.Scsi.PathID}::{storage.Scsi.TargetID}"; + } + else + { + id = "id_error"; + } + + return new Identifier(GetID(storage), id); + } + private void CreateAttributes() { _attributes.Clear(); diff --git a/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs b/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs index edce57e..c37ae4c 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs @@ -7,7 +7,6 @@ using System.Collections.Generic; using System.Linq; using DiskInfoToolkit; -using StorageDeviceDIT = DiskInfoToolkit.StorageDevice; using StorageDIT = DiskInfoToolkit.Storage; namespace LibreHardwareMonitor.Hardware.Storage; @@ -41,7 +40,7 @@ internal class StorageGroup : IGroup, IHardwareChanged var disks = StorageDIT.GetDisks(); //Transform storage device to hardware - _hardware.AddRange(disks.Select(s => new StorageDevice(s, GetID(s), settings))); + _hardware.AddRange(disks.Select(s => new StorageDevice(s, settings))); StorageDIT.DevicesChanged += OnStoragesChanged; } @@ -50,7 +49,7 @@ internal class StorageGroup : IGroup, IHardwareChanged { foreach (var added in e.Added) { - var storageDevice = new StorageDevice(added, GetID(added), _settings); + var storageDevice = new StorageDevice(added, _settings); _hardware.Add(storageDevice); HardwareAdded?.Invoke(storageDevice); @@ -67,36 +66,6 @@ internal class StorageGroup : IGroup, IHardwareChanged } } - private string GetID(StorageDeviceDIT disk) - { - switch (disk.TransportKind) - { - case StorageTransportKind.Ata: - return "ata"; - case StorageTransportKind.Scsi: - return "scsi"; - case StorageTransportKind.Nvme: - return "nvme"; - case StorageTransportKind.Usb: - return "usb"; - case StorageTransportKind.Sd: - return "sd"; - case StorageTransportKind.Mmc: - return "mmc"; - case StorageTransportKind.Raid: - return "raid"; - case StorageTransportKind.Sas: - return "sas"; - case StorageTransportKind.Ahci: - return "ahci"; - case StorageTransportKind.Virtual: - return "virtual"; - case StorageTransportKind.Unknown: - default: - return "disk"; - } - } - public void Close() { } public string GetReport() => null; diff --git a/LibreHardwareMonitorLib/LibreHardwareMonitorLib.csproj b/LibreHardwareMonitorLib/LibreHardwareMonitorLib.csproj index 0bd2d43..a51eec0 100644 --- a/LibreHardwareMonitorLib/LibreHardwareMonitorLib.csproj +++ b/LibreHardwareMonitorLib/LibreHardwareMonitorLib.csproj @@ -81,7 +81,7 @@ - + all