mirror of
https://github.com/aaru-dps/Aaru.Decoders.git
synced 2025-12-16 19:24:32 +00:00
Decode fixed or descriptor SCSI sense in a single pass, use whichever was returned by drive.
This commit is contained in:
@@ -45,6 +45,16 @@ namespace Aaru.Decoders.SCSI
|
||||
Unknown
|
||||
}
|
||||
|
||||
public struct DecodedSense
|
||||
{
|
||||
public FixedSense? Fixed;
|
||||
public DescriptorSense? Descriptor;
|
||||
public byte ASC => Descriptor?.ASC ?? (Fixed?.ASC ?? 0);
|
||||
public byte ASCQ => Descriptor?.ASCQ ?? (Fixed?.ASCQ ?? 0);
|
||||
public SenseKeys SenseKey => Descriptor?.SenseKey ?? (Fixed?.SenseKey ?? SenseKeys.NoSense);
|
||||
public string Description => Sense.GetSenseDescription(ASC, ASCQ);
|
||||
}
|
||||
|
||||
[SuppressMessage("ReSharper", "MemberCanBeInternal"), SuppressMessage("ReSharper", "NotAccessedField.Global"),
|
||||
SuppressMessage("ReSharper", "InconsistentNaming")]
|
||||
public struct StandardSense
|
||||
@@ -198,6 +208,27 @@ namespace Aaru.Decoders.SCSI
|
||||
return decoded;
|
||||
}
|
||||
|
||||
public static DecodedSense? Decode(byte[] sense)
|
||||
{
|
||||
var decoded = new DecodedSense();
|
||||
|
||||
switch(sense[0])
|
||||
{
|
||||
case 0x70:
|
||||
case 0x71:
|
||||
decoded.Fixed = DecodeFixed(sense);
|
||||
|
||||
break;
|
||||
case 0x72:
|
||||
case 0x73:
|
||||
decoded.Descriptor = DecodeDescriptor(sense);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return decoded.Fixed is null && decoded.Descriptor is null ? (DecodedSense?)null : decoded;
|
||||
}
|
||||
|
||||
public static FixedSense? DecodeFixed(byte[] sense) => DecodeFixed(sense, out _);
|
||||
|
||||
public static FixedSense? DecodeFixed(byte[] sense, out string senseDescription)
|
||||
|
||||
Reference in New Issue
Block a user