* DiscImageChef.Decoders/SCSI/MMC/Features.cs:

Correct math priority

	* DiscImageChef.Devices/Device/ScsiCommands.cs:
	  Correct command size typo

	* DiscImageChef/Commands/DeviceInfo.cs:
	  Add MMC GET CONFIGURATION
This commit is contained in:
2015-11-01 22:09:10 +00:00
parent dfb15d0e4f
commit f02e668173
6 changed files with 251 additions and 29 deletions

View File

@@ -1,3 +1,8 @@
2015-11-01 Natalia Portillo <claunia@claunia.com>
* SCSI/MMC/Features.cs:
Correct math priority
2015-11-01 Natalia Portillo <claunia@claunia.com>
* SCSI/MMC/Features.cs:

View File

@@ -2216,7 +2216,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
if (decoded.Version >= 0)
decoded.PhysicalInterfaceStandard = (PhysicalInterfaces)(feature[4] << 24 + feature[5] << 16 + feature[6] << 8 + feature[7]);
decoded.PhysicalInterfaceStandard = (PhysicalInterfaces)((feature[4] << 24) + (feature[5] << 16) + (feature[6] << 8) + feature[7]);
if (decoded.Version >= 1 && feature.Length >= 12)
decoded.DBE |= (feature[8] & 0x01) == 0x01;
@@ -2358,8 +2358,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if (decoded.Version >= 0)
{
decoded.LogicalBlockSize = (uint)(feature[4] << 24 + feature[5] << 16 + feature[6] << 8 + feature[7]);
decoded.Blocking = (ushort)(feature[8] << 8 + feature[9]);
decoded.LogicalBlockSize = (uint)((feature[4] << 24) + (feature[5] << 16) + (feature[6] << 8) + feature[7]);
decoded.Blocking = (ushort)((feature[8] << 8) + feature[9]);
decoded.PP |= (feature[10] & 0x01) == 0x01;
}
@@ -2483,9 +2483,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if (decoded.Version >= 1)
{
decoded.LastLBA = (uint)(feature[4] << 24 + feature[5] << 16 + feature[6] << 8 + feature[7]);
decoded.LogicalBlockSize = (uint)(feature[8] << 24 + feature[9] << 16 + feature[10] << 8 + feature[11]);
decoded.Blocking = (ushort)(feature[12] << 8 + feature[13]);
decoded.LastLBA = (uint)((feature[4] << 24) + (feature[5] << 16) + (feature[6] << 8) + feature[7]);
decoded.LogicalBlockSize = (uint)((feature[8] << 24) + (feature[9] << 16) + (feature[10] << 8) + feature[11]);
decoded.Blocking = (ushort)((feature[12] << 8) + feature[13]);
decoded.PP |= (feature[14] & 0x01) == 0x01;
}
@@ -2516,7 +2516,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if (decoded.Version >= 1)
{
decoded.DataTypeSupported = (ushort)(feature[4] << 8 + feature[5]);
decoded.DataTypeSupported = (ushort)((feature[4] << 8) + feature[5]);
decoded.BUF |= (feature[6] & 0x01) == 0x01;
decoded.LinkSizes = new byte[feature[7]];
if (feature.Length > (feature[7] + 8))
@@ -2646,8 +2646,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if (decoded.Version >= 0)
{
decoded.LogicalBlockSize = (uint)(feature[4] << 24 + feature[5] << 16 + feature[6] << 8 + feature[7]);
decoded.Blocking = (ushort)(feature[8] << 8 + feature[9]);
decoded.LogicalBlockSize = (uint)((feature[4] << 24) + (feature[5] << 16) + (feature[6] << 8) + feature[7]);
decoded.Blocking = (ushort)((feature[8] << 8) + feature[9]);
decoded.PP |= (feature[10] & 0x01) == 0x01;
}
@@ -2764,7 +2764,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
decoded.DRTDM |= (feature[4] & 0x01) == 0x01;
decoded.DBICacheZones = feature[5];
decoded.Entries = (ushort)(feature[6] << 8 + feature[7]);
decoded.Entries = (ushort)((feature[6] << 8) + feature[7]);
}
return decoded;
@@ -2892,7 +2892,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
decoded.TestWrite |= (feature[4] & 0x04) == 0x04;
decoded.CDRW |= (feature[4] & 0x02) == 0x02;
decoded.RWSubchannel |= (feature[4] & 0x01) == 0x01;
decoded.DataTypeSupported = (ushort)(feature[6] << 8 + feature[7]);
decoded.DataTypeSupported = (ushort)((feature[6] << 8) + feature[7]);
}
if (decoded.Version >= 2)
@@ -2935,7 +2935,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
decoded.TestWrite |= (feature[4] & 0x04) == 0x04;
decoded.CDRW |= (feature[4] & 0x02) == 0x02;
decoded.RW |= (feature[4] & 0x01) == 0x01;
decoded.MaxCueSheet = (uint)(feature[5] << 16 + feature[6] << 8 + feature[7]);
decoded.MaxCueSheet = (uint)((feature[5] << 16) + (feature[6] << 8) + feature[7]);
}
if (decoded.Version >= 1)
@@ -3541,7 +3541,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
decoded.Scan |= (feature[4] & 0x04) == 0x04;
decoded.SCM |= (feature[4] & 0x02) == 0x02;
decoded.SV |= (feature[4] & 0x01) == 0x01;
decoded.VolumeLevels = (ushort)(feature[6] << 8 + feature[7]);
decoded.VolumeLevels = (ushort)((feature[6] << 8) + feature[7]);
}
return decoded;
@@ -3600,7 +3600,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if (decoded.Version >= 1 && feature.Length >= 8)
{
decoded.Group3 |= (feature[4] & 0x01) == 0x01;
decoded.UnitLength = (ushort)(feature[6] << 8 + feature[7]);
decoded.UnitLength = (ushort)((feature[6] << 8) + feature[7]);
}
return decoded;
@@ -3757,7 +3757,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
decoded.DCBs = new uint[feature[3] / 4];
for (int i = 0; i < decoded.DCBs.Length; i++)
decoded.DCBs[i] = (uint)(feature[0 + 4 + i * 4] << 24 + feature[1 + 4 + i * 4] << 16 + feature[2 + 4 + i * 4] << 8 + feature[3 + 4 + i * 4]);
decoded.DCBs[i] = (uint)((feature[0 + 4 + i * 4] << 24) + (feature[1 + 4 + i * 4] << 16) + (feature[2 + 4 + i * 4] << 8) + feature[3 + 4 + i * 4]);
}
return decoded;
@@ -3815,13 +3815,13 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if (decoded.Version >= 0)
{
decoded.Century = (ushort)(feature[4] << 8 + feature[5]);
decoded.Year = (ushort)(feature[6] << 8 + feature[7]);
decoded.Month = (ushort)(feature[8] << 8 + feature[9]);
decoded.Day = (ushort)(feature[10] << 8 + feature[11]);
decoded.Hour = (ushort)(feature[12] << 8 + feature[13]);
decoded.Minute = (ushort)(feature[14] << 8 + feature[15]);
decoded.Second = (ushort)(feature[16] << 8 + feature[17]);
decoded.Century = (ushort)((feature[4] << 8) + feature[5]);
decoded.Year = (ushort)((feature[6] << 8) + feature[7]);
decoded.Month = (ushort)((feature[8] << 8) + feature[9]);
decoded.Day = (ushort)((feature[10] << 8) + feature[11]);
decoded.Hour = (ushort)((feature[12] << 8) + feature[13]);
decoded.Minute = (ushort)((feature[14] << 8) + feature[15]);
decoded.Second = (ushort)((feature[16] << 8) + feature[17]);
}
return decoded;
@@ -3977,7 +3977,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if (feature[5] * 2 + 6 == feature.Length)
{
for (int i = 0; i < feature[5]; i++)
decoded.Profiles[i] = (ushort)(feature[0 + 6 + 2 * i] << 8 + feature[1 + 6 + 2 * i]);
decoded.Profiles[i] = (ushort)((feature[0 + 6 + 2 * i] << 8) + feature[1 + 6 + 2 * i]);
}
}
@@ -5756,18 +5756,18 @@ namespace DiscImageChef.Decoders.SCSI.MMC
public static SeparatedFeatures Separate(byte[] response)
{
SeparatedFeatures dec = new SeparatedFeatures();
dec.DataLength = (uint)(response[0] << 24 + response[1] << 16 + response[2] << 8 + response[4]);
dec.CurrentProfile = (ushort)(response[6] << 8 + response[7]);
dec.DataLength = (uint)((response[0] << 24) + (response[1] << 16) + (response[2] << 8) + response[4]);
dec.CurrentProfile = (ushort)((response[6] << 8) + response[7]);
uint offset = 8;
List<FeatureDescriptor> descLst = new List<FeatureDescriptor>();
while (offset < response.Length)
{
FeatureDescriptor desc = new FeatureDescriptor();
desc.Code = (ushort)(response[offset + 0] << 8 + response[offset + 1]);
desc.Code = (ushort)((response[offset + 0] << 8) + response[offset + 1]);
desc.Data = new byte[response[offset + 3] + 4];
Array.Copy(response, offset + 4, desc.Data, 0, desc.Data.Length + 4);
offset += (uint)(4 + desc.Data.Length);
Array.Copy(response, offset, desc.Data, 0, desc.Data.Length);
offset += (uint)(desc.Data.Length);
descLst.Add(desc);
}

View File

@@ -1,3 +1,8 @@
2015-11-01 Natalia Portillo <claunia@claunia.com>
* Device/ScsiCommands.cs:
Correct command size typo
2015-11-01 Natalia Portillo <claunia@claunia.com>
* Enums.cs:

View File

@@ -494,7 +494,7 @@ namespace DiscImageChef.Devices
if (sense)
return true;
ushort confLength = (ushort)(((int)buffer[2] << 8) + buffer[3] + 2);
ushort confLength = (ushort)(((int)buffer[2] << 8) + buffer[3] + 4);
buffer = new byte[confLength];
cdb[7] = (byte)((buffer.Length & 0xFF00) >> 8);
cdb[8] = (byte)(buffer.Length & 0xFF);

View File

@@ -1,3 +1,8 @@
2015-11-01 Natalia Portillo <claunia@claunia.com>
* Commands/DeviceInfo.cs:
Add MMC GET CONFIGURATION
2015-10-31 Natalia Portillo <claunia@claunia.com>
* Commands/DeviceInfo.cs:

View File

@@ -446,6 +446,213 @@ namespace DiscImageChef.Commands
}
}
if (devType == DiscImageChef.Decoders.SCSI.PeripheralDeviceTypes.MultiMediaDevice)
{
}
byte[] confBuf;
sense = dev.GetConfiguration(out confBuf, out senseBuf, dev.Timeout, out duration);
if (!sense)
{
Decoders.SCSI.MMC.Features.SeparatedFeatures ftr = Decoders.SCSI.MMC.Features.Separate(confBuf);
DicConsole.DebugWriteLine("Device-Info command", "GET CONFIGURATION length is {0} bytes", ftr.DataLength);
DicConsole.DebugWriteLine("Device-Info command", "GET CONFIGURATION current profile is 0x{0:X4} bytes", ftr.CurrentProfile);
if (ftr.Descriptors != null)
{
DicConsole.WriteLine("SCSI MMC GET CONFIGURATION Features:");
foreach (Decoders.SCSI.MMC.Features.FeatureDescriptor desc in ftr.Descriptors)
{
DicConsole.DebugWriteLine("Device-Info command", "Feature 0x{0:X4}", desc.Code);
switch (desc.Code)
{
case 0x0000:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0000(desc.Data));
break;
case 0x0001:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0001(desc.Data));
break;
case 0x0002:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0002(desc.Data));
break;
case 0x0003:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0003(desc.Data));
break;
case 0x0004:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0004(desc.Data));
break;
case 0x0010:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0010(desc.Data));
break;
case 0x001D:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_001D(desc.Data));
break;
case 0x001E:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_001E(desc.Data));
break;
case 0x001F:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_001F(desc.Data));
break;
case 0x0020:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0020(desc.Data));
break;
case 0x0021:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0021(desc.Data));
break;
case 0x0022:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0022(desc.Data));
break;
case 0x0023:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0023(desc.Data));
break;
case 0x0024:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0024(desc.Data));
break;
case 0x0025:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0025(desc.Data));
break;
case 0x0026:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0026(desc.Data));
break;
case 0x0027:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0027(desc.Data));
break;
case 0x0028:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0028(desc.Data));
break;
case 0x0029:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0029(desc.Data));
break;
case 0x002A:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_002A(desc.Data));
break;
case 0x002B:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_002B(desc.Data));
break;
case 0x002C:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_002C(desc.Data));
break;
case 0x002D:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_002D(desc.Data));
break;
case 0x002E:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_002E(desc.Data));
break;
case 0x002F:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_002F(desc.Data));
break;
case 0x0030:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0030(desc.Data));
break;
case 0x0031:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0031(desc.Data));
break;
case 0x0032:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0032(desc.Data));
break;
case 0x0033:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0033(desc.Data));
break;
case 0x0035:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0035(desc.Data));
break;
case 0x0037:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0037(desc.Data));
break;
case 0x0038:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0038(desc.Data));
break;
case 0x003A:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_003A(desc.Data));
break;
case 0x003B:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_003B(desc.Data));
break;
case 0x0040:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0040(desc.Data));
break;
case 0x0041:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0041(desc.Data));
break;
case 0x0042:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0042(desc.Data));
break;
case 0x0050:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0050(desc.Data));
break;
case 0x0051:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0051(desc.Data));
break;
case 0x0080:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0080(desc.Data));
break;
case 0x0100:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0100(desc.Data));
break;
case 0x0101:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0101(desc.Data));
break;
case 0x0102:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0102(desc.Data));
break;
case 0x0103:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0103(desc.Data));
break;
case 0x0104:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0104(desc.Data));
break;
case 0x0105:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0105(desc.Data));
break;
case 0x0106:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0106(desc.Data));
break;
case 0x0107:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0107(desc.Data));
break;
case 0x0108:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0108(desc.Data));
break;
case 0x0109:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0109(desc.Data));
break;
case 0x010A:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_010A(desc.Data));
break;
case 0x010B:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_010B(desc.Data));
break;
case 0x010C:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_010C(desc.Data));
break;
case 0x010D:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_010D(desc.Data));
break;
case 0x010E:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_010E(desc.Data));
break;
case 0x0110:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0110(desc.Data));
break;
case 0x0113:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0113(desc.Data));
break;
case 0x0142:
DicConsole.WriteLine(Decoders.SCSI.MMC.Features.Prettify_0142(desc.Data));
break;
default:
DicConsole.WriteLine("Found unknown feature code {0:X4}h", desc.Code);
break;
}
}
}
else
DicConsole.DebugWriteLine("Device-Info command", "GET CONFIGURATION returned no feature descriptors");
}
break;
}
default: