diff --git a/DiscImageChef.Devices/Device/Commands.cs b/DiscImageChef.Devices/Device/Commands.cs index c0e18e40..cb93ca96 100644 --- a/DiscImageChef.Devices/Device/Commands.cs +++ b/DiscImageChef.Devices/Device/Commands.cs @@ -171,6 +171,19 @@ namespace DiscImageChef.Devices return 0; } + if((command == (MmcCommands)SecureDigitalCommands.SendOperatingCondition || + command == MmcCommands.SendOpCond) && cachedOcr != null) + { + System.DateTime start = System.DateTime.Now; + buffer = new byte[cachedOcr.Length]; + System.Array.Copy(cachedOcr, buffer, buffer.Length); + response = new uint[4]; + sense = false; + System.DateTime end = System.DateTime.Now; + duration = (end - start).TotalMilliseconds; + return 0; + } + return Command.SendMmcCommand(platformID, fd, command, write, isApplication, flags, argument, blockSize, blocks, ref buffer, out response, out duration, out sense, timeout); } diff --git a/DiscImageChef.Devices/Device/Constructor.cs b/DiscImageChef.Devices/Device/Constructor.cs index dfd593c6..1f820b57 100644 --- a/DiscImageChef.Devices/Device/Constructor.cs +++ b/DiscImageChef.Devices/Device/Constructor.cs @@ -211,6 +211,12 @@ namespace DiscImageChef.Devices if(len == 0) cachedScr = null; } + if(System.IO.File.Exists("/sys/block/" + devPath + "/device/ocr")) + { + int len = ConvertFromHexASCII("/sys/block/" + devPath + "/device/ocr", out cachedOcr); + if(len == 0) + cachedOcr = null; + } if(cachedCid != null) { diff --git a/DiscImageChef.Devices/Device/Variables.cs b/DiscImageChef.Devices/Device/Variables.cs index 97aec359..5da1cb57 100644 --- a/DiscImageChef.Devices/Device/Variables.cs +++ b/DiscImageChef.Devices/Device/Variables.cs @@ -67,6 +67,7 @@ namespace DiscImageChef.Devices readonly byte[] cachedCsd; readonly byte[] cachedCid; readonly byte[] cachedScr; + readonly byte[] cachedOcr; /// /// Gets the Platform ID for this device