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
};