mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
General refactor and cleanup.
This commit is contained in:
@@ -114,7 +114,7 @@ public static class Identify
|
||||
MustBeClear = 0x8000,
|
||||
/// <summary>MUST be set</summary>
|
||||
MustBeSet = 0x4000,
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Reserved13 = 0x2000,
|
||||
Reserved12 = 0x1000,
|
||||
Reserved11 = 0x0800,
|
||||
@@ -128,7 +128,7 @@ public static class Identify
|
||||
Reserved03 = 0x0008,
|
||||
Reserved02 = 0x0004,
|
||||
Reserved01 = 0x0002,
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
/// <summary>Indicates a device specific minimum standby timer value</summary>
|
||||
SpecificStandbyTimer = 0x0001
|
||||
}
|
||||
@@ -153,9 +153,9 @@ public static class Identify
|
||||
SanitizeCommands = 0x0008,
|
||||
/// <summary>SANITIZE ANTIFREEZE LOCK EXT is supported</summary>
|
||||
SanitizeAntifreeze = 0x0004,
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Reserved01 = 0x0002,
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
/// <summary>Multiple logical sector setting is valid</summary>
|
||||
MultipleValid = 0x0001
|
||||
}
|
||||
@@ -298,12 +298,12 @@ public static class Identify
|
||||
MustBeClear = 0x8000,
|
||||
/// <summary>MUST be set</summary>
|
||||
MustBeSet = 0x4000,
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Reserved13 = 0x2000,
|
||||
Reserved12 = 0x1000,
|
||||
Reserved11 = 0x0800,
|
||||
Reserved10 = 0x0400,
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
/// <summary>DSN feature set is supported</summary>
|
||||
DSN = 0x0200,
|
||||
/// <summary>Accessible Max Address Configuration is supported</summary>
|
||||
@@ -376,7 +376,7 @@ public static class Identify
|
||||
[Flags]
|
||||
public enum DataSetMgmtBit : ushort
|
||||
{
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Reserved15 = 0x8000,
|
||||
Reserved14 = 0x4000,
|
||||
Reserved13 = 0x2000,
|
||||
@@ -392,7 +392,7 @@ public static class Identify
|
||||
Reserved03 = 0x0008,
|
||||
Reserved02 = 0x0004,
|
||||
Reserved01 = 0x0002,
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
/// <summary>TRIM is supported</summary>
|
||||
Trim = 0x0001
|
||||
}
|
||||
@@ -496,12 +496,12 @@ public static class Identify
|
||||
[Flags]
|
||||
public enum MajorVersionBit : ushort
|
||||
{
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Reserved15 = 0x8000,
|
||||
Reserved14 = 0x4000,
|
||||
Reserved13 = 0x2000,
|
||||
Reserved12 = 0x1000,
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
/// <summary>ACS-4</summary>
|
||||
ACS4 = 0x0800,
|
||||
/// <summary>ACS-3</summary>
|
||||
@@ -524,9 +524,9 @@ public static class Identify
|
||||
Ata2 = 0x0004,
|
||||
/// <summary>ATA-1</summary>
|
||||
Ata1 = 0x0002,
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Reserved00 = 0x0001
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -553,12 +553,12 @@ public static class Identify
|
||||
PowerReceipt = 0x0200,
|
||||
/// <summary>Supports NCQ</summary>
|
||||
NCQ = 0x0100,
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Reserved07 = 0x0080,
|
||||
Reserved06 = 0x0040,
|
||||
Reserved05 = 0x0020,
|
||||
Reserved04 = 0x0010,
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
/// <summary>Supports SATA Gen. 3 Signaling Speed (6.0Gb/s)</summary>
|
||||
Gen3Speed = 0x0008,
|
||||
/// <summary>Supports SATA Gen. 2 Signaling Speed (3.0Gb/s)</summary>
|
||||
@@ -577,7 +577,7 @@ public static class Identify
|
||||
[Flags]
|
||||
public enum SATACapabilitiesBit2 : ushort
|
||||
{
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Reserved15 = 0x8000,
|
||||
Reserved14 = 0x4000,
|
||||
Reserved13 = 0x2000,
|
||||
@@ -587,7 +587,7 @@ public static class Identify
|
||||
Reserved09 = 0x0200,
|
||||
Reserved08 = 0x0100,
|
||||
Reserved07 = 0x0080,
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
/// <summary>Supports RECEIVE FPDMA QUEUED and SEND FPDMA QUEUED</summary>
|
||||
FPDMAQ = 0x0040,
|
||||
/// <summary>Supports NCQ Queue Management</summary>
|
||||
@@ -616,7 +616,7 @@ public static class Identify
|
||||
[Flags]
|
||||
public enum SATAFeaturesBit : ushort
|
||||
{
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Reserved15 = 0x8000,
|
||||
Reserved14 = 0x4000,
|
||||
Reserved13 = 0x2000,
|
||||
@@ -625,7 +625,7 @@ public static class Identify
|
||||
Reserved10 = 0x0400,
|
||||
Reserved09 = 0x0200,
|
||||
Reserved08 = 0x0100,
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
/// <summary>Supports NCQ autosense</summary>
|
||||
NCQAutoSense = 0x0080,
|
||||
/// <summary>Automatic Partial to Slumber transitions are enabled</summary>
|
||||
@@ -656,7 +656,7 @@ public static class Identify
|
||||
[Flags]
|
||||
public enum SCTCommandTransportBit : ushort
|
||||
{
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Vendor15 = 0x8000,
|
||||
Vendor14 = 0x4000,
|
||||
Vendor13 = 0x2000,
|
||||
@@ -667,7 +667,7 @@ public static class Identify
|
||||
Reserved08 = 0x0100,
|
||||
Reserved07 = 0x0080,
|
||||
Reserved06 = 0x0040,
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
/// <summary>SCT Command Transport Data Tables supported</summary>
|
||||
DataTables = 0x0020,
|
||||
/// <summary>SCT Command Transport Features Control supported</summary>
|
||||
@@ -690,7 +690,7 @@ public static class Identify
|
||||
[Flags]
|
||||
public enum SecurityStatusBit : ushort
|
||||
{
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Reserved15 = 0x8000,
|
||||
Reserved14 = 0x4000,
|
||||
Reserved13 = 0x2000,
|
||||
@@ -698,13 +698,13 @@ public static class Identify
|
||||
Reserved11 = 0x0800,
|
||||
Reserved10 = 0x0400,
|
||||
Reserved09 = 0x0200,
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
/// <summary>Maximum security level</summary>
|
||||
Maximum = 0x0100,
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Reserved07 = 0x0080,
|
||||
Reserved06 = 0x0040,
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
/// <summary>Supports enhanced security erase</summary>
|
||||
Enhanced = 0x0020,
|
||||
/// <summary>Security count expired</summary>
|
||||
@@ -744,7 +744,7 @@ public static class Identify
|
||||
[Flags]
|
||||
public enum TransferMode : byte
|
||||
{
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Mode7 = 0x80,
|
||||
Mode6 = 0x40,
|
||||
Mode5 = 0x20,
|
||||
@@ -753,7 +753,7 @@ public static class Identify
|
||||
Mode2 = 0x04,
|
||||
Mode1 = 0x02,
|
||||
Mode0 = 0x01
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -768,7 +768,7 @@ public static class Identify
|
||||
Clear = 0x8000,
|
||||
/// <summary>MUST be set</summary>
|
||||
Set = 0x4000,
|
||||
#pragma warning disable 1591
|
||||
#pragma warning disable 1591
|
||||
Reserved13 = 0x2000,
|
||||
Reserved12 = 0x1000,
|
||||
Reserved11 = 0x0800,
|
||||
@@ -782,7 +782,7 @@ public static class Identify
|
||||
Reserved03 = 0x0008,
|
||||
Reserved02 = 0x0004,
|
||||
Reserved01 = 0x0002,
|
||||
#pragma warning restore 1591
|
||||
#pragma warning restore 1591
|
||||
/// <summary>Trusted Computing feature set is supported</summary>
|
||||
TrustedComputing = 0x0001
|
||||
}
|
||||
@@ -796,8 +796,7 @@ public static class Identify
|
||||
/// <returns>Decoded IDENTIFY DEVICE</returns>
|
||||
public static IdentifyDevice? Decode(byte[] IdentifyDeviceResponse)
|
||||
{
|
||||
if(IdentifyDeviceResponse == null)
|
||||
return null;
|
||||
if(IdentifyDeviceResponse == null) return null;
|
||||
|
||||
if(IdentifyDeviceResponse.Length != 512)
|
||||
{
|
||||
@@ -827,8 +826,7 @@ public static class Identify
|
||||
/// <returns>Raw IDENTIFY DEVICE response</returns>
|
||||
public static byte[] Encode(IdentifyDevice? identify)
|
||||
{
|
||||
if(identify is null)
|
||||
return null;
|
||||
if(identify is null) return null;
|
||||
|
||||
IdentifyDevice ataId = identify.Value;
|
||||
|
||||
@@ -893,11 +891,9 @@ public static class Identify
|
||||
{
|
||||
var buf = new byte[length];
|
||||
|
||||
for(var i = 0; i < length; i++)
|
||||
buf[i] = 0x20;
|
||||
for(var i = 0; i < length; i++) buf[i] = 0x20;
|
||||
|
||||
if(str is null)
|
||||
return buf;
|
||||
if(str is null) return buf;
|
||||
|
||||
byte[] bytes = Encoding.ASCII.GetBytes(str);
|
||||
|
||||
|
||||
@@ -271,8 +271,7 @@ public struct Inquiry
|
||||
|
||||
public static Inquiry? Decode(byte[] SCSIInquiryResponse)
|
||||
{
|
||||
if(SCSIInquiryResponse == null)
|
||||
return null;
|
||||
if(SCSIInquiryResponse == null) return null;
|
||||
|
||||
if(SCSIInquiryResponse.Length < 36 && SCSIInquiryResponse.Length != 5)
|
||||
{
|
||||
@@ -287,9 +286,10 @@ public struct Inquiry
|
||||
SCSIInquiryResponse.Length != SCSIInquiryResponse[4])
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.
|
||||
INQUIRY_response_length_0_bytes_is_different_than_specified_in_length_field,
|
||||
SCSIInquiryResponse.Length, SCSIInquiryResponse[4] + 4);
|
||||
Localization
|
||||
.INQUIRY_response_length_0_bytes_is_different_than_specified_in_length_field,
|
||||
SCSIInquiryResponse.Length,
|
||||
SCSIInquiryResponse[4] + 4);
|
||||
|
||||
return null;
|
||||
}
|
||||
@@ -324,8 +324,7 @@ public struct Inquiry
|
||||
decoded.ResponseDataFormat = (byte)(SCSIInquiryResponse[3] & 0x07);
|
||||
}
|
||||
|
||||
if(SCSIInquiryResponse.Length >= 5)
|
||||
decoded.AdditionalLength = SCSIInquiryResponse[4];
|
||||
if(SCSIInquiryResponse.Length >= 5) decoded.AdditionalLength = SCSIInquiryResponse[4];
|
||||
|
||||
if(SCSIInquiryResponse.Length >= 6)
|
||||
{
|
||||
@@ -465,8 +464,7 @@ public struct Inquiry
|
||||
decoded.IUS = Convert.ToBoolean(SCSIInquiryResponse[56] & 0x01);
|
||||
}
|
||||
|
||||
if(SCSIInquiryResponse.Length >= 58)
|
||||
decoded.Reserved4 = SCSIInquiryResponse[57];
|
||||
if(SCSIInquiryResponse.Length >= 58) decoded.Reserved4 = SCSIInquiryResponse[57];
|
||||
|
||||
if(SCSIInquiryResponse.Length >= 60)
|
||||
{
|
||||
@@ -511,8 +509,7 @@ public struct Inquiry
|
||||
Array.Copy(SCSIInquiryResponse, 96, decoded.Seagate_Copyright, 0, 48);
|
||||
}
|
||||
|
||||
if(SCSIInquiryResponse.Length < 148)
|
||||
return decoded;
|
||||
if(SCSIInquiryResponse.Length < 148) return decoded;
|
||||
|
||||
// Seagate 2
|
||||
decoded.Seagate3Present = true;
|
||||
@@ -527,8 +524,7 @@ public struct Inquiry
|
||||
/// <returns>Raw SCSI INQUIRY response</returns>
|
||||
public static byte[] Encode(Inquiry? inq)
|
||||
{
|
||||
if(inq is null)
|
||||
return null;
|
||||
if(inq is null) return null;
|
||||
|
||||
Inquiry decoded = inq.Value;
|
||||
|
||||
@@ -538,8 +534,7 @@ public struct Inquiry
|
||||
buffer[0] = (byte)(decoded.PeripheralQualifier << 5);
|
||||
buffer[0] += decoded.PeripheralDeviceType;
|
||||
|
||||
if(decoded.RMB)
|
||||
buffer[1] = 0x80;
|
||||
if(decoded.RMB) buffer[1] = 0x80;
|
||||
|
||||
buffer[1] += decoded.DeviceTypeModifier;
|
||||
|
||||
@@ -547,17 +542,13 @@ public struct Inquiry
|
||||
buffer[2] += (byte)(decoded.ECMAVersion << 3);
|
||||
buffer[2] += decoded.ANSIVersion;
|
||||
|
||||
if(decoded.AERC)
|
||||
buffer[3] = 0x80;
|
||||
if(decoded.AERC) buffer[3] = 0x80;
|
||||
|
||||
if(decoded.TrmTsk)
|
||||
buffer[3] += 0x40;
|
||||
if(decoded.TrmTsk) buffer[3] += 0x40;
|
||||
|
||||
if(decoded.NormACA)
|
||||
buffer[3] += 0x20;
|
||||
if(decoded.NormACA) buffer[3] += 0x20;
|
||||
|
||||
if(decoded.HiSup)
|
||||
buffer[3] += 0x10;
|
||||
if(decoded.HiSup) buffer[3] += 0x10;
|
||||
|
||||
buffer[3] += decoded.ResponseDataFormat;
|
||||
|
||||
@@ -576,21 +567,17 @@ public struct Inquiry
|
||||
{
|
||||
length = 6;
|
||||
|
||||
if(decoded.SCCS)
|
||||
buffer[5] = 0x80;
|
||||
if(decoded.SCCS) buffer[5] = 0x80;
|
||||
|
||||
if(decoded.ACC)
|
||||
buffer[5] += 0x40;
|
||||
if(decoded.ACC) buffer[5] += 0x40;
|
||||
|
||||
buffer[5] += (byte)(decoded.TPGS << 4);
|
||||
|
||||
if(decoded.ThreePC)
|
||||
buffer[5] += 0x08;
|
||||
if(decoded.ThreePC) buffer[5] += 0x08;
|
||||
|
||||
buffer[5] += (byte)(decoded.Reserved2 << 1);
|
||||
|
||||
if(decoded.Protect)
|
||||
buffer[5] += 0x01;
|
||||
if(decoded.Protect) buffer[5] += 0x01;
|
||||
}
|
||||
|
||||
if(decoded.BQue ||
|
||||
@@ -604,29 +591,21 @@ public struct Inquiry
|
||||
{
|
||||
length = 7;
|
||||
|
||||
if(decoded.BQue)
|
||||
buffer[6] = 0x80;
|
||||
if(decoded.BQue) buffer[6] = 0x80;
|
||||
|
||||
if(decoded.EncServ)
|
||||
buffer[6] += 0x40;
|
||||
if(decoded.EncServ) buffer[6] += 0x40;
|
||||
|
||||
if(decoded.VS1)
|
||||
buffer[6] += 0x20;
|
||||
if(decoded.VS1) buffer[6] += 0x20;
|
||||
|
||||
if(decoded.MultiP)
|
||||
buffer[6] += 0x10;
|
||||
if(decoded.MultiP) buffer[6] += 0x10;
|
||||
|
||||
if(decoded.MChngr)
|
||||
buffer[6] += 0x08;
|
||||
if(decoded.MChngr) buffer[6] += 0x08;
|
||||
|
||||
if(decoded.ACKREQQ)
|
||||
buffer[6] += 0x04;
|
||||
if(decoded.ACKREQQ) buffer[6] += 0x04;
|
||||
|
||||
if(decoded.Addr32)
|
||||
buffer[6] += 0x02;
|
||||
if(decoded.Addr32) buffer[6] += 0x02;
|
||||
|
||||
if(decoded.Addr16)
|
||||
buffer[6] += 0x01;
|
||||
if(decoded.Addr16) buffer[6] += 0x01;
|
||||
}
|
||||
|
||||
if(decoded.RelAddr ||
|
||||
@@ -641,36 +620,31 @@ public struct Inquiry
|
||||
{
|
||||
length = 8;
|
||||
|
||||
if(decoded.RelAddr)
|
||||
buffer[7] = 0x80;
|
||||
if(decoded.RelAddr) buffer[7] = 0x80;
|
||||
|
||||
if(decoded.WBus32)
|
||||
buffer[7] += 0x40;
|
||||
if(decoded.WBus32) buffer[7] += 0x40;
|
||||
|
||||
if(decoded.WBus16)
|
||||
buffer[7] += 0x20;
|
||||
if(decoded.WBus16) buffer[7] += 0x20;
|
||||
|
||||
if(decoded.Sync)
|
||||
buffer[7] += 0x10;
|
||||
if(decoded.Sync) buffer[7] += 0x10;
|
||||
|
||||
if(decoded.Linked)
|
||||
buffer[7] += 0x08;
|
||||
if(decoded.Linked) buffer[7] += 0x08;
|
||||
|
||||
if(decoded.TranDis)
|
||||
buffer[7] += 0x04;
|
||||
if(decoded.TranDis) buffer[7] += 0x04;
|
||||
|
||||
if(decoded.CmdQue)
|
||||
buffer[7] += 0x02;
|
||||
if(decoded.CmdQue) buffer[7] += 0x02;
|
||||
|
||||
if(decoded.SftRe)
|
||||
buffer[7] += 0x01;
|
||||
if(decoded.SftRe) buffer[7] += 0x01;
|
||||
}
|
||||
|
||||
if(decoded.VendorIdentification != null)
|
||||
{
|
||||
length = 16;
|
||||
|
||||
Array.Copy(decoded.VendorIdentification, 0, buffer, 8,
|
||||
Array.Copy(decoded.VendorIdentification,
|
||||
0,
|
||||
buffer,
|
||||
8,
|
||||
decoded.VendorIdentification.Length >= 8 ? 8 : decoded.VendorIdentification.Length);
|
||||
}
|
||||
|
||||
@@ -678,7 +652,10 @@ public struct Inquiry
|
||||
{
|
||||
length = 32;
|
||||
|
||||
Array.Copy(decoded.ProductIdentification, 0, buffer, 16,
|
||||
Array.Copy(decoded.ProductIdentification,
|
||||
0,
|
||||
buffer,
|
||||
16,
|
||||
decoded.ProductIdentification.Length >= 16 ? 16 : decoded.ProductIdentification.Length);
|
||||
}
|
||||
|
||||
@@ -686,7 +663,10 @@ public struct Inquiry
|
||||
{
|
||||
length = 36;
|
||||
|
||||
Array.Copy(decoded.ProductRevisionLevel, 0, buffer, 32,
|
||||
Array.Copy(decoded.ProductRevisionLevel,
|
||||
0,
|
||||
buffer,
|
||||
32,
|
||||
decoded.ProductRevisionLevel.Length >= 4 ? 4 : decoded.ProductRevisionLevel.Length);
|
||||
}
|
||||
|
||||
@@ -708,8 +688,7 @@ public struct Inquiry
|
||||
{
|
||||
length = 49;
|
||||
|
||||
if(decoded.HP_WORM)
|
||||
buffer[40] = 0x01;
|
||||
if(decoded.HP_WORM) buffer[40] = 0x01;
|
||||
|
||||
buffer[40] += (byte)(decoded.HP_WORMVersion << 1);
|
||||
Array.Copy(decoded.HP_OBDR, 0, buffer, 43, 6);
|
||||
@@ -720,8 +699,7 @@ public struct Inquiry
|
||||
length = 56;
|
||||
Array.Copy(HiMDSignatureContents, 0, buffer, 36, 8);
|
||||
|
||||
if(decoded.HiMDSpecific != null)
|
||||
Array.Copy(decoded.HiMDSpecific, 0, buffer, 44, 12);
|
||||
if(decoded.HiMDSpecific != null) Array.Copy(decoded.HiMDSpecific, 0, buffer, 44, 12);
|
||||
}
|
||||
|
||||
if(decoded is { VendorSpecific: not null, IsHiMD: false })
|
||||
@@ -736,11 +714,9 @@ public struct Inquiry
|
||||
buffer[56] = (byte)(decoded.Reserved3 << 4);
|
||||
buffer[56] += (byte)(decoded.Clocking << 2);
|
||||
|
||||
if(decoded.QAS)
|
||||
buffer[56] += 0x02;
|
||||
if(decoded.QAS) buffer[56] += 0x02;
|
||||
|
||||
if(decoded.IUS)
|
||||
buffer[56] += 0x01;
|
||||
if(decoded.IUS) buffer[56] += 0x01;
|
||||
}
|
||||
|
||||
if(decoded.Reserved4 != 0)
|
||||
|
||||
@@ -215,6 +215,7 @@ public class ModePage_2A
|
||||
/// <summary>Database ID</summary>
|
||||
[JsonIgnore]
|
||||
[Key]
|
||||
|
||||
// ReSharper disable once UnusedMember.Global
|
||||
public int Id { get; set; }
|
||||
|
||||
@@ -223,17 +224,13 @@ public class ModePage_2A
|
||||
/// <returns>Decoded page 2Ah</returns>
|
||||
public static ModePage_2A Decode(byte[] pageResponse)
|
||||
{
|
||||
if((pageResponse?[0] & 0x40) == 0x40)
|
||||
return null;
|
||||
if((pageResponse?[0] & 0x40) == 0x40) return null;
|
||||
|
||||
if((pageResponse?[0] & 0x3F) != 0x2A)
|
||||
return null;
|
||||
if((pageResponse?[0] & 0x3F) != 0x2A) return null;
|
||||
|
||||
if(pageResponse[1] + 2 != pageResponse.Length)
|
||||
return null;
|
||||
if(pageResponse[1] + 2 != pageResponse.Length) return null;
|
||||
|
||||
if(pageResponse.Length < 16)
|
||||
return null;
|
||||
if(pageResponse.Length < 16) return null;
|
||||
|
||||
var decoded = new ModePage_2A();
|
||||
|
||||
@@ -266,8 +263,7 @@ public class ModePage_2A
|
||||
decoded.BufferSize = (ushort)((pageResponse[12] << 8) + pageResponse[13]);
|
||||
decoded.CurrentSpeed = (ushort)((pageResponse[14] << 8) + pageResponse[15]);
|
||||
|
||||
if(pageResponse.Length < 20)
|
||||
return decoded;
|
||||
if(pageResponse.Length < 20) return decoded;
|
||||
|
||||
decoded.Method2 |= (pageResponse[2] & 0x04) == 0x04;
|
||||
decoded.ReadCDRW |= (pageResponse[2] & 0x02) == 0x02;
|
||||
@@ -288,8 +284,7 @@ public class ModePage_2A
|
||||
decoded.RCK |= (pageResponse[17] & 0x04) == 0x04;
|
||||
decoded.BCK |= (pageResponse[17] & 0x02) == 0x02;
|
||||
|
||||
if(pageResponse.Length < 22)
|
||||
return decoded;
|
||||
if(pageResponse.Length < 22) return decoded;
|
||||
|
||||
decoded.TestWrite |= (pageResponse[3] & 0x04) == 0x04;
|
||||
decoded.MaxWriteSpeed = (ushort)((pageResponse[18] << 8) + pageResponse[19]);
|
||||
@@ -297,8 +292,7 @@ public class ModePage_2A
|
||||
|
||||
decoded.ReadBarcode |= (pageResponse[5] & 0x80) == 0x80;
|
||||
|
||||
if(pageResponse.Length < 26)
|
||||
return decoded;
|
||||
if(pageResponse.Length < 26) return decoded;
|
||||
|
||||
decoded.ReadDVDRAM |= (pageResponse[2] & 0x20) == 0x20;
|
||||
decoded.ReadDVDR |= (pageResponse[2] & 0x10) == 0x10;
|
||||
@@ -312,8 +306,7 @@ public class ModePage_2A
|
||||
|
||||
decoded.CMRSupported = (ushort)((pageResponse[22] << 8) + pageResponse[23]);
|
||||
|
||||
if(pageResponse.Length < 32)
|
||||
return decoded;
|
||||
if(pageResponse.Length < 32) return decoded;
|
||||
|
||||
decoded.BUF |= (pageResponse[4] & 0x80) == 0x80;
|
||||
decoded.RotationControlSelected = (byte)(pageResponse[27] & 0x03);
|
||||
@@ -344,61 +337,43 @@ public class ModePage_2A
|
||||
|
||||
pageResponse[0] = 0x2A;
|
||||
|
||||
if(decoded.PS)
|
||||
pageResponse[0] += 0x80;
|
||||
if(decoded.PS) pageResponse[0] += 0x80;
|
||||
|
||||
if(decoded.AudioPlay)
|
||||
pageResponse[4] += 0x01;
|
||||
if(decoded.AudioPlay) pageResponse[4] += 0x01;
|
||||
|
||||
if(decoded.Mode2Form1)
|
||||
pageResponse[4] += 0x10;
|
||||
if(decoded.Mode2Form1) pageResponse[4] += 0x10;
|
||||
|
||||
if(decoded.Mode2Form2)
|
||||
pageResponse[4] += 0x20;
|
||||
if(decoded.Mode2Form2) pageResponse[4] += 0x20;
|
||||
|
||||
if(decoded.MultiSession)
|
||||
pageResponse[4] += 0x40;
|
||||
if(decoded.MultiSession) pageResponse[4] += 0x40;
|
||||
|
||||
if(decoded.CDDACommand)
|
||||
pageResponse[5] += 0x01;
|
||||
if(decoded.CDDACommand) pageResponse[5] += 0x01;
|
||||
|
||||
if(decoded.AccurateCDDA)
|
||||
pageResponse[5] += 0x02;
|
||||
if(decoded.AccurateCDDA) pageResponse[5] += 0x02;
|
||||
|
||||
if(decoded.Subchannel)
|
||||
pageResponse[5] += 0x04;
|
||||
if(decoded.Subchannel) pageResponse[5] += 0x04;
|
||||
|
||||
if(decoded.DeinterlaveSubchannel)
|
||||
pageResponse[5] += 0x08;
|
||||
if(decoded.DeinterlaveSubchannel) pageResponse[5] += 0x08;
|
||||
|
||||
if(decoded.C2Pointer)
|
||||
pageResponse[5] += 0x10;
|
||||
if(decoded.C2Pointer) pageResponse[5] += 0x10;
|
||||
|
||||
if(decoded.UPC)
|
||||
pageResponse[5] += 0x20;
|
||||
if(decoded.UPC) pageResponse[5] += 0x20;
|
||||
|
||||
if(decoded.ISRC)
|
||||
pageResponse[5] += 0x40;
|
||||
if(decoded.ISRC) pageResponse[5] += 0x40;
|
||||
|
||||
decoded.LoadingMechanism = (byte)((pageResponse[6] & 0xE0) >> 5);
|
||||
|
||||
if(decoded.Lock)
|
||||
pageResponse[6] += 0x01;
|
||||
if(decoded.Lock) pageResponse[6] += 0x01;
|
||||
|
||||
if(decoded.LockState)
|
||||
pageResponse[6] += 0x02;
|
||||
if(decoded.LockState) pageResponse[6] += 0x02;
|
||||
|
||||
if(decoded.PreventJumper)
|
||||
pageResponse[6] += 0x04;
|
||||
if(decoded.PreventJumper) pageResponse[6] += 0x04;
|
||||
|
||||
if(decoded.Eject)
|
||||
pageResponse[6] += 0x08;
|
||||
if(decoded.Eject) pageResponse[6] += 0x08;
|
||||
|
||||
if(decoded.SeparateChannelVolume)
|
||||
pageResponse[7] += 0x01;
|
||||
if(decoded.SeparateChannelVolume) pageResponse[7] += 0x01;
|
||||
|
||||
if(decoded.SeparateChannelMute)
|
||||
pageResponse[7] += 0x02;
|
||||
if(decoded.SeparateChannelMute) pageResponse[7] += 0x02;
|
||||
|
||||
decoded.MaximumSpeed = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
|
||||
decoded.SupportedVolumeLevels = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
|
||||
@@ -422,62 +397,47 @@ public class ModePage_2A
|
||||
{
|
||||
length = 20;
|
||||
|
||||
if(decoded.Method2)
|
||||
pageResponse[2] += 0x04;
|
||||
if(decoded.Method2) pageResponse[2] += 0x04;
|
||||
|
||||
if(decoded.ReadCDRW)
|
||||
pageResponse[2] += 0x02;
|
||||
if(decoded.ReadCDRW) pageResponse[2] += 0x02;
|
||||
|
||||
if(decoded.ReadCDR)
|
||||
pageResponse[2] += 0x01;
|
||||
if(decoded.ReadCDR) pageResponse[2] += 0x01;
|
||||
|
||||
if(decoded.WriteCDRW)
|
||||
pageResponse[3] += 0x02;
|
||||
if(decoded.WriteCDRW) pageResponse[3] += 0x02;
|
||||
|
||||
if(decoded.WriteCDR)
|
||||
pageResponse[3] += 0x01;
|
||||
if(decoded.WriteCDR) pageResponse[3] += 0x01;
|
||||
|
||||
if(decoded.Composite)
|
||||
pageResponse[4] += 0x02;
|
||||
if(decoded.Composite) pageResponse[4] += 0x02;
|
||||
|
||||
if(decoded.DigitalPort1)
|
||||
pageResponse[4] += 0x04;
|
||||
if(decoded.DigitalPort1) pageResponse[4] += 0x04;
|
||||
|
||||
if(decoded.DigitalPort2)
|
||||
pageResponse[4] += 0x08;
|
||||
if(decoded.DigitalPort2) pageResponse[4] += 0x08;
|
||||
|
||||
if(decoded.SDP)
|
||||
pageResponse[7] += 0x04;
|
||||
if(decoded.SDP) pageResponse[7] += 0x04;
|
||||
|
||||
if(decoded.SSS)
|
||||
pageResponse[7] += 0x08;
|
||||
if(decoded.SSS) pageResponse[7] += 0x08;
|
||||
|
||||
pageResponse[17] = (byte)(decoded.Length << 4);
|
||||
|
||||
if(decoded.LSBF)
|
||||
pageResponse[17] += 0x08;
|
||||
if(decoded.LSBF) pageResponse[17] += 0x08;
|
||||
|
||||
if(decoded.RCK)
|
||||
pageResponse[17] += 0x04;
|
||||
if(decoded.RCK) pageResponse[17] += 0x04;
|
||||
|
||||
if(decoded.BCK)
|
||||
pageResponse[17] += 0x02;
|
||||
if(decoded.BCK) pageResponse[17] += 0x02;
|
||||
}
|
||||
|
||||
if(decoded.TestWrite || decoded.MaxWriteSpeed > 0 || decoded.CurrentWriteSpeed > 0 || decoded.ReadBarcode)
|
||||
{
|
||||
length = 22;
|
||||
|
||||
if(decoded.TestWrite)
|
||||
pageResponse[3] += 0x04;
|
||||
if(decoded.TestWrite) pageResponse[3] += 0x04;
|
||||
|
||||
pageResponse[18] = (byte)((decoded.MaxWriteSpeed & 0xFF00) >> 8);
|
||||
pageResponse[19] = (byte)(decoded.MaxWriteSpeed & 0xFF);
|
||||
pageResponse[20] = (byte)((decoded.CurrentWriteSpeed & 0xFF00) >> 8);
|
||||
pageResponse[21] = (byte)(decoded.CurrentWriteSpeed & 0xFF);
|
||||
|
||||
if(decoded.ReadBarcode)
|
||||
pageResponse[5] += 0x80;
|
||||
if(decoded.ReadBarcode) pageResponse[5] += 0x80;
|
||||
}
|
||||
|
||||
if(decoded.ReadDVDRAM ||
|
||||
@@ -492,26 +452,19 @@ public class ModePage_2A
|
||||
{
|
||||
length = 26;
|
||||
|
||||
if(decoded.ReadDVDRAM)
|
||||
pageResponse[2] += 0x20;
|
||||
if(decoded.ReadDVDRAM) pageResponse[2] += 0x20;
|
||||
|
||||
if(decoded.ReadDVDR)
|
||||
pageResponse[2] += 0x10;
|
||||
if(decoded.ReadDVDR) pageResponse[2] += 0x10;
|
||||
|
||||
if(decoded.ReadDVDROM)
|
||||
pageResponse[2] += 0x08;
|
||||
if(decoded.ReadDVDROM) pageResponse[2] += 0x08;
|
||||
|
||||
if(decoded.WriteDVDRAM)
|
||||
pageResponse[3] += 0x20;
|
||||
if(decoded.WriteDVDRAM) pageResponse[3] += 0x20;
|
||||
|
||||
if(decoded.WriteDVDR)
|
||||
pageResponse[3] += 0x10;
|
||||
if(decoded.WriteDVDR) pageResponse[3] += 0x10;
|
||||
|
||||
if(decoded.LeadInPW)
|
||||
pageResponse[3] += 0x20;
|
||||
if(decoded.LeadInPW) pageResponse[3] += 0x20;
|
||||
|
||||
if(decoded.SCC)
|
||||
pageResponse[3] += 0x10;
|
||||
if(decoded.SCC) pageResponse[3] += 0x10;
|
||||
|
||||
pageResponse[22] = (byte)((decoded.CMRSupported & 0xFF00) >> 8);
|
||||
pageResponse[23] = (byte)(decoded.CMRSupported & 0xFF);
|
||||
@@ -521,8 +474,7 @@ public class ModePage_2A
|
||||
{
|
||||
length = 32;
|
||||
|
||||
if(decoded.BUF)
|
||||
pageResponse[4] += 0x80;
|
||||
if(decoded.BUF) pageResponse[4] += 0x80;
|
||||
|
||||
pageResponse[27] += decoded.RotationControlSelected;
|
||||
pageResponse[28] = (byte)((decoded.CurrentWriteSpeedSelected & 0xFF00) >> 8);
|
||||
|
||||
Reference in New Issue
Block a user