Implemented decoding DVD-RAM Spare Area Information.

This commit is contained in:
2015-12-02 06:49:36 +00:00
parent ba50144dca
commit b6eb17c9f0
4 changed files with 54 additions and 1 deletions

View File

@@ -1,3 +1,8 @@
2015-12-02 Natalia Portillo <claunia@claunia.com>
* DVD/Spare.cs:
Implemented decoding DVD-RAM Spare Area Information.
2015-12-02 Natalia Portillo <claunia@claunia.com>
* DVD/Cartridge.cs:

View File

@@ -36,6 +36,7 @@
// ****************************************************************************/
// //$Id$
using System;
using System.Text;
namespace DiscImageChef.Decoders.DVD
{
@@ -53,7 +54,6 @@ namespace DiscImageChef.Decoders.DVD
/// T10/1675-D revision 2c
/// T10/1675-D revision 4
/// T10/1836-D revision 2g
/// ECMA 365
/// </summary>
public static class Spare
{
@@ -90,6 +90,46 @@ namespace DiscImageChef.Decoders.DVD
/// </summary>
public UInt32 AllocatedSupplementaryBlocks;
}
public static SpareAreaInformation? Decode(byte[] response)
{
if (response == null)
return null;
if (response.Length != 16)
return null;
SpareAreaInformation sai = new SpareAreaInformation();
sai.DataLength = (ushort)((response[0] << 8) + response[1]);
sai.Reserved1 = response[2];
sai.Reserved2 = response[3];
sai.UnusedPrimaryBlocks = (uint)((response[4] << 24) + (response[5] << 16) + (response[6] << 8) + response[7]);
sai.UnusedSupplementaryBlocks = (uint)((response[8] << 24) + (response[9] << 16) + (response[10] << 8) + response[11]);
sai.AllocatedSupplementaryBlocks = (uint)((response[12] << 24) + (response[13] << 16) + (response[14] << 8) + response[15]);
return sai;
}
public static string Prettify(SpareAreaInformation? sai)
{
if (sai == null)
return null;
SpareAreaInformation decoded = sai.Value;
StringBuilder sb = new StringBuilder();
sb.AppendFormat("{0} unused primary spare blocks", decoded.UnusedPrimaryBlocks).AppendLine();
sb.AppendFormat("{0} unused supplementary spare blocks", decoded.UnusedSupplementaryBlocks).AppendLine();
sb.AppendFormat("{0} allocated supplementary spare blocks", decoded.AllocatedSupplementaryBlocks).AppendLine();
return sb.ToString();
}
public static string Prettify(byte[] response)
{
return Prettify(Decode(response));
}
}
}

View File

@@ -1,3 +1,8 @@
2015-12-02 Natalia Portillo <claunia@claunia.com>
* Commands/MediaInfo.cs:
Implemented decoding DVD-RAM Spare Area Information.
2015-12-02 Natalia Portillo <claunia@claunia.com>
* Commands/MediaInfo.cs:

View File

@@ -431,7 +431,10 @@ namespace DiscImageChef.Commands
if(sense)
DicConsole.ErrorWriteLine("READ DISC STRUCTURE: SAI\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf));
else
{
doWriteFile(outputPrefix, "_readdiscstructure_dvdram_spare.bin", "SCSI READ DISC STRUCTURE", cmdBuf);
DicConsole.WriteLine("Spare Area Information:\n{0}", Decoders.DVD.Spare.Prettify(cmdBuf));
}
sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.DVDRAM_RecordingType, 0, dev.Timeout, out duration);
if(sense)
DicConsole.ErrorWriteLine("READ DISC STRUCTURE: Recording Type\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf));