diff --git a/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs b/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs index d03852886..c6ecfa385 100644 --- a/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs +++ b/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs @@ -82,8 +82,6 @@ namespace DiscImageChef.Core.Devices.Dumping BlockMedia = new BlockMediaType[] { new BlockMediaType() } }; - sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType(); - uint blocksToRead = 128; uint blockSize = 512; ulong blocks = 0; @@ -134,6 +132,8 @@ namespace DiscImageChef.Core.Devices.Dumping sense = dev.ReadOCR(out ocr, out response, timeout, out duration); if(sense) ocr = null; + + sidecar.BlockMedia[0].MultiMediaCard = new MultiMediaCardType(); } else if(dev.Type == DeviceType.SecureDigital) { @@ -158,68 +158,82 @@ namespace DiscImageChef.Core.Devices.Dumping sense = dev.ReadSCR(out scr, out response, timeout, out duration); if(sense) scr = null; + + sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType(); } sense = dev.ReadCID(out cid, out response, timeout, out duration); if(sense) cid = null; - // TODO: MultiMediaCard should be different + DumpType cidDump = null; + DumpType csdDump = null; + DumpType ocrDump = null; + if(cid != null) { - sidecar.BlockMedia[0].SecureDigital.CID = new DumpType + cidDump = new DumpType { Image = outputPrefix + ".cid.bin", Size = cid.Length, Checksums = Checksum.GetChecksums(cid).ToArray() }; - DataFile.WriteTo("MMC/SecureDigital Dump", sidecar.BlockMedia[0].SecureDigital.CID.Image, cid); + DataFile.WriteTo("MMC/SecureDigital Dump", cidDump.Image, cid); }; if(csd != null) { - sidecar.BlockMedia[0].SecureDigital.CSD = new DumpType + csdDump = new DumpType { Image = outputPrefix + ".csd.bin", Size = csd.Length, Checksums = Checksum.GetChecksums(csd).ToArray() }; - DataFile.WriteTo("MMC/SecureDigital Dump", sidecar.BlockMedia[0].SecureDigital.CSD.Image, csd); + DataFile.WriteTo("MMC/SecureDigital Dump", csdDump.Image, csd); }; if(ecsd != null) { - sidecar.BlockMedia[0].SecureDigital.ExtendedCSD = new DumpType + sidecar.BlockMedia[0].MultiMediaCard.ExtendedCSD = new DumpType { Image = outputPrefix + ".ecsd.bin", Size = ecsd.Length, Checksums = Checksum.GetChecksums(ecsd).ToArray() }; - DataFile.WriteTo("MMC/SecureDigital Dump", sidecar.BlockMedia[0].SecureDigital.ExtendedCSD.Image, ecsd); + DataFile.WriteTo("MMC/SecureDigital Dump", sidecar.BlockMedia[0].MultiMediaCard.ExtendedCSD.Image, ecsd); }; if(ocr != null) { - // TODO: Add to metadata.xml - /*sidecar.BlockMedia[0].SecureDigital.OCR = new DumpType + ocrDump = new DumpType { Image = outputPrefix + ".ocr.bin", Size = ocr.Length, Checksums = Checksum.GetChecksums(ocr).ToArray() }; - DataFile.WriteTo("MMC/SecureDigital Dump", sidecar.BlockMedia[0].SecureDigital.OCR.Image, ocr);*/ - DataFile.WriteTo("MMC/SecureDigital Dump", outputPrefix + ".ocr.bin", ocr); + DataFile.WriteTo("MMC/SecureDigital Dump", ocrDump.Image, ocr); }; if(scr != null) { - // TODO: Add to metadata.xml - /*sidecar.BlockMedia[0].SecureDigital.SCR = new DumpType + sidecar.BlockMedia[0].SecureDigital.SCR = new DumpType { Image = outputPrefix + ".scr.bin", Size = scr.Length, Checksums = Checksum.GetChecksums(scr).ToArray() }; - DataFile.WriteTo("MMC/SecureDigital Dump", sidecar.BlockMedia[0].SecureDigital.SCR.Image, scr);*/ - DataFile.WriteTo("MMC/SecureDigital Dump", outputPrefix + ".scr.bin", scr); + DataFile.WriteTo("MMC/SecureDigital Dump", sidecar.BlockMedia[0].SecureDigital.SCR.Image, scr); }; + if(dev.Type == DeviceType.MMC) + { + sidecar.BlockMedia[0].MultiMediaCard.CID = cidDump; + sidecar.BlockMedia[0].MultiMediaCard.CSD = csdDump; + sidecar.BlockMedia[0].MultiMediaCard.OCR = ocrDump; + } + else if(dev.Type == DeviceType.SecureDigital) + { + sidecar.BlockMedia[0].SecureDigital.CID = cidDump; + sidecar.BlockMedia[0].SecureDigital.CSD = csdDump; + sidecar.BlockMedia[0].SecureDigital.OCR = ocrDump; + } + DateTime start; DateTime end; double totalDuration = 0; diff --git a/DiscImageChef.Core/Sidecar/BlockMedia.cs b/DiscImageChef.Core/Sidecar/BlockMedia.cs index 2a202376e..5d478bd08 100644 --- a/DiscImageChef.Core/Sidecar/BlockMedia.cs +++ b/DiscImageChef.Core/Sidecar/BlockMedia.cs @@ -175,13 +175,58 @@ namespace DiscImageChef.Core Size = image.ReadDiskTag(MediaTagType.SD_CSD).Length }; break; - case MediaTagType.SD_ExtendedCSD: + case MediaTagType.SD_SCR: if(sidecar.BlockMedia[0].SecureDigital == null) sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType(); - sidecar.BlockMedia[0].SecureDigital.ExtendedCSD = new DumpType + sidecar.BlockMedia[0].SecureDigital.SCR = new DumpType { - Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SD_ExtendedCSD)).ToArray(), - Size = image.ReadDiskTag(MediaTagType.SD_ExtendedCSD).Length + Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SD_SCR)).ToArray(), + Size = image.ReadDiskTag(MediaTagType.SD_SCR).Length + }; + break; + case MediaTagType.SD_OCR: + if(sidecar.BlockMedia[0].SecureDigital == null) + sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType(); + sidecar.BlockMedia[0].SecureDigital.OCR = new DumpType + { + Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SD_OCR)).ToArray(), + Size = image.ReadDiskTag(MediaTagType.SD_OCR).Length + }; + break; + case MediaTagType.MMC_CID: + if(sidecar.BlockMedia[0].MultiMediaCard == null) + sidecar.BlockMedia[0].MultiMediaCard = new MultiMediaCardType(); + sidecar.BlockMedia[0].MultiMediaCard.CID = new DumpType + { + Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SD_CID)).ToArray(), + Size = image.ReadDiskTag(MediaTagType.SD_CID).Length + }; + break; + case MediaTagType.MMC_CSD: + if(sidecar.BlockMedia[0].MultiMediaCard == null) + sidecar.BlockMedia[0].MultiMediaCard = new MultiMediaCardType(); + sidecar.BlockMedia[0].MultiMediaCard.CSD = new DumpType + { + Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SD_CSD)).ToArray(), + Size = image.ReadDiskTag(MediaTagType.SD_CSD).Length + }; + break; + case MediaTagType.MMC_OCR: + if(sidecar.BlockMedia[0].MultiMediaCard == null) + sidecar.BlockMedia[0].MultiMediaCard = new MultiMediaCardType(); + sidecar.BlockMedia[0].MultiMediaCard.OCR = new DumpType + { + Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SD_OCR)).ToArray(), + Size = image.ReadDiskTag(MediaTagType.SD_OCR).Length + }; + break; + case MediaTagType.MMC_ExtendedCSD: + if(sidecar.BlockMedia[0].MultiMediaCard == null) + sidecar.BlockMedia[0].MultiMediaCard = new MultiMediaCardType(); + sidecar.BlockMedia[0].MultiMediaCard.ExtendedCSD = new DumpType + { + Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.MMC_ExtendedCSD)).ToArray(), + Size = image.ReadDiskTag(MediaTagType.MMC_ExtendedCSD).Length }; break; } diff --git a/DiscImageChef.DiscImages/ImagePlugin.cs b/DiscImageChef.DiscImages/ImagePlugin.cs index b7bc5c875..26e8ce819 100644 --- a/DiscImageChef.DiscImages/ImagePlugin.cs +++ b/DiscImageChef.DiscImages/ImagePlugin.cs @@ -676,12 +676,22 @@ namespace DiscImageChef.ImagePlugins ATAPI_IDENTIFY, /// PCMCIA/CardBus Card Information Structure PCMCIA_CIS, - /// SecureDigital / MMC CID + /// SecureDigital CID SD_CID, - /// SecureDigital / MMC CSD + /// SecureDigital CSD SD_CSD, - /// SecureDigital Extended CSD - SD_ExtendedCSD, + /// SecureDigital SCR + SD_SCR, + /// SecureDigital OCR + SD_OCR, + /// MultiMediaCard CID + MMC_CID, + /// MultiMediaCard CSD + MMC_CSD, + /// MultiMediaCard OCR + MMC_OCR, + /// MultiMediaCard Extended CSD + MMC_ExtendedCSD, /// Xbox Security Sector Xbox_SecuritySector };