diff --git a/DiscImageChef.Decoders/CD/ATIP.cs b/DiscImageChef.Decoders/CD/ATIP.cs index d51084d6..f358351e 100644 --- a/DiscImageChef.Decoders/CD/ATIP.cs +++ b/DiscImageChef.Decoders/CD/ATIP.cs @@ -464,6 +464,9 @@ namespace DiscImageChef.Decoders.CD manufacturer = "CDA Datenträger Albrechts GmbH"; break; case 21: + // Seen only once + if (frm == 10) + manufacturer = "GCK"; if (frm == 30) manufacturer = "Bestdisc Technology Corporation"; if (frm == 40) diff --git a/DiscImageChef.Decoders/ChangeLog b/DiscImageChef.Decoders/ChangeLog index e86c8adc..3b70044e 100644 --- a/DiscImageChef.Decoders/ChangeLog +++ b/DiscImageChef.Decoders/ChangeLog @@ -1,3 +1,8 @@ +2015-12-13 Natalia Portillo + + * CD/ATIP.cs: + Added manufacturer code for a GCK disc I just came upon. + 2015-12-04 Natalia Portillo * SCSI/Sense.cs: diff --git a/DiscImageChef.Metadata/ChangeLog b/DiscImageChef.Metadata/ChangeLog index 0db1fd12..3945b4e8 100644 --- a/DiscImageChef.Metadata/ChangeLog +++ b/DiscImageChef.Metadata/ChangeLog @@ -1,3 +1,8 @@ +2015-12-13 Natalia Portillo + + * DiskType.cs: + Corrected miswriting of CDXA, CDRW and CDROM. + 2015-12-06 Natalia Portillo * DiskType.cs: diff --git a/DiscImageChef.Metadata/DiskType.cs b/DiscImageChef.Metadata/DiskType.cs index 05b08c83..d3a35e52 100644 --- a/DiscImageChef.Metadata/DiskType.cs +++ b/DiscImageChef.Metadata/DiskType.cs @@ -110,16 +110,16 @@ namespace DiscImageChef.Metadata DiscSubType = "CD-R"; break; case CommonTypes.DiskType.CDROM: - DiscType = "CD-ROM"; - DiscSubType = "CD"; + DiscType = "CD"; + DiscSubType = "CD-ROM"; break; case CommonTypes.DiskType.CDROMXA: - DiscType = "CD-ROM XA"; - DiscSubType = "CD"; + DiscType = "CD"; + DiscSubType = "CD-ROM XA"; break; case CommonTypes.DiskType.CDRW: - DiscType = "CD-RW"; - DiscSubType = "CD"; + DiscType = "CD"; + DiscSubType = "CD-RW"; break; case CommonTypes.DiskType.CDV: DiscType = "CD"; diff --git a/DiscImageChef/ChangeLog b/DiscImageChef/ChangeLog index 4cd41a04..a8132179 100644 --- a/DiscImageChef/ChangeLog +++ b/DiscImageChef/ChangeLog @@ -1,3 +1,9 @@ +2015-12-13 Natalia Portillo + + * Commands/MediaInfo.cs: + Check ATIP even if no TOC, as blank discs do always have + ATIP (but no TOC or PMA). + 2015-12-06 Natalia Portillo * Commands/Checksum.cs: diff --git a/DiscImageChef/Commands/MediaInfo.cs b/DiscImageChef/Commands/MediaInfo.cs index 2e54a8a0..353a645c 100644 --- a/DiscImageChef/Commands/MediaInfo.cs +++ b/DiscImageChef/Commands/MediaInfo.cs @@ -711,37 +711,43 @@ namespace DiscImageChef.Commands dskType == DiskType.CDRW || dskType == DiskType.Unknown) { + Decoders.CD.TOC.CDTOC? toc = null; + // We discarded all discs that falsify a TOC before requesting a real TOC - // No TOC, no CD - sense = dev.ReadTocPmaAtip(out cmdBuf, out senseBuf, false, 0, 0, dev.Timeout, out duration); - if (sense) + // No TOC, no CD (or an empty one) + bool tocSense = dev.ReadTocPmaAtip(out cmdBuf, out senseBuf, false, 0, 0, dev.Timeout, out duration); + if (tocSense) DicConsole.ErrorWriteLine("READ TOC/PMA/ATIP: TOC\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); else { - Decoders.CD.TOC.CDTOC? toc = Decoders.CD.TOC.Decode(cmdBuf); + toc = Decoders.CD.TOC.Decode(cmdBuf); DicConsole.WriteLine("TOC:\n{0}", Decoders.CD.TOC.Prettify(toc)); doWriteFile(outputPrefix, "_toc.bin", "SCSI READ TOC/PMA/ATIP", cmdBuf); // As we have a TOC we know it is a CD if(dskType == DiskType.Unknown) dskType = DiskType.CD; + } - // Now check if it is a CD-R or CD-RW before everything else - sense = dev.ReadAtip(out cmdBuf, out senseBuf, dev.Timeout, out duration); - if (sense) - DicConsole.ErrorWriteLine("READ TOC/PMA/ATIP: ATIP\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); - else + // ATIP exists on blank CDs + sense = dev.ReadAtip(out cmdBuf, out senseBuf, dev.Timeout, out duration); + if (sense) + DicConsole.ErrorWriteLine("READ TOC/PMA/ATIP: ATIP\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); + else + { + doWriteFile(outputPrefix, "_atip.bin", "SCSI READ TOC/PMA/ATIP", cmdBuf); + Decoders.CD.ATIP.CDATIP? atip = Decoders.CD.ATIP.Decode(cmdBuf); + if(atip.HasValue) { - doWriteFile(outputPrefix, "_atip.bin", "SCSI READ TOC/PMA/ATIP", cmdBuf); - Decoders.CD.ATIP.CDATIP? atip = Decoders.CD.ATIP.Decode(cmdBuf); - if(atip.HasValue) - { - DicConsole.WriteLine("ATIP:\n{0}", Decoders.CD.ATIP.Prettify(atip)); - // Only CD-R and CD-RW have ATIP - dskType = atip.Value.DiscType ? DiskType.CDRW : DiskType.CDR; - } + DicConsole.WriteLine("ATIP:\n{0}", Decoders.CD.ATIP.Prettify(atip)); + // Only CD-R and CD-RW have ATIP + dskType = atip.Value.DiscType ? DiskType.CDRW : DiskType.CDR; } + } + // We got a TOC, get information about a recorded/mastered CD + if(!tocSense) + { sense = dev.ReadDiscInformation(out cmdBuf, out senseBuf, MmcDiscInformationDataTypes.DiscInformation, dev.Timeout, out duration); if (sense) DicConsole.ErrorWriteLine("READ DISC INFORMATION 000b\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf));