From 80af6c4d6fe168697a20390e12b4e9079962f3d5 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sat, 14 Dec 2019 18:57:54 +0000 Subject: [PATCH] Read ATIP. --- .../Devices/Dumping/CompactDisc.cs | 54 +++++++++---------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs index d3993e9ee..70642d75a 100644 --- a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs +++ b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs @@ -73,14 +73,9 @@ namespace DiscImageChef.Core.Devices.Dumping /// Disc type as detected in MMC layer internal void CompactDisc(ref MediaType dskType) { - DicContext - ctx; // Master database context - - Device - dbDev; // Device database entry - - CdOffset - cdOffset; // Read offset from database + DicContext ctx; // Master database context + Device dbDev; // Device database entry + CdOffset cdOffset; // Read offset from database bool sense; // Sense indicator byte[] cmdBuf; // Data buffer @@ -89,6 +84,8 @@ namespace DiscImageChef.Core.Devices.Dumping FullTOC.CDFullTOC? toc = null; // Full CD TOC Dictionary mediaTags = new Dictionary(); // Media tags + dskType = MediaType.CD; + if(dumpRaw) { dumpLog.WriteLine("Raw CD dumping not yet implemented"); @@ -148,6 +145,26 @@ namespace DiscImageChef.Core.Devices.Dumping mediaTags.Add(MediaTagType.CD_FullTOC, tmpBuf); } } + + // ATIP exists on blank CDs + dumpLog.WriteLine("Reading ATIP"); + UpdateStatus?.Invoke("Reading ATIP"); + sense = dev.ReadAtip(out cmdBuf, out senseBuf, dev.Timeout, out _); + + if(!sense) + { + ATIP.CDATIP? atip = ATIP.Decode(cmdBuf); + + if(atip.HasValue) + { + // Only CD-R and CD-RW have ATIP + dskType = atip.Value.DiscType ? MediaType.CDRW : MediaType.CDR; + + tmpBuf = new byte[cmdBuf.Length - 4]; + Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); + mediaTags.Add(MediaTagType.CD_ATIP, tmpBuf); + } + } } /// Dumps a compact disc @@ -172,29 +189,8 @@ namespace DiscImageChef.Core.Devices.Dumping byte[] senseBuf; byte[] tmpBuf; - dskType = MediaType.CD; int sessions = 1; - // ATIP exists on blank CDs - dumpLog.WriteLine("Reading ATIP"); - UpdateStatus?.Invoke("Reading ATIP"); - sense = dev.ReadAtip(out cmdBuf, out senseBuf, dev.Timeout, out _); - - if(!sense) - { - ATIP.CDATIP? atip = ATIP.Decode(cmdBuf); - - if(atip.HasValue) - { - // Only CD-R and CD-RW have ATIP - dskType = atip.Value.DiscType ? MediaType.CDRW : MediaType.CDR; - - tmpBuf = new byte[cmdBuf.Length - 4]; - Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); - mediaTags.Add(MediaTagType.CD_ATIP, tmpBuf); - } - } - dumpLog.WriteLine("Reading Disc Information"); UpdateStatus?.Invoke("Reading Disc Information");