diff --git a/DiscImageChef.Devices/Device/Constructor.cs b/DiscImageChef.Devices/Device/Constructor.cs
index 3519f9257..5ee6e8439 100644
--- a/DiscImageChef.Devices/Device/Constructor.cs
+++ b/DiscImageChef.Devices/Device/Constructor.cs
@@ -40,7 +40,6 @@ using DiscImageChef.CommonTypes.Interop;
using DiscImageChef.Decoders.ATA;
using DiscImageChef.Decoders.SCSI;
using DiscImageChef.Decoders.SCSI.MMC;
-using DiscImageChef.Decoders.SecureDigital;
using DiscImageChef.Devices.FreeBSD;
using DiscImageChef.Devices.Windows;
using Microsoft.Win32.SafeHandles;
@@ -63,23 +62,35 @@ namespace DiscImageChef.Devices
/// Device path
public Device(string devicePath)
{
- PlatformId = DetectOS.GetRealPlatformID();
- Timeout = 15;
- Error = false;
+ PlatformId = DetectOS.GetRealPlatformID();
+ Timeout = 15;
+ Error = false;
IsRemovable = false;
- switch(PlatformId)
+ if (devicePath.StartsWith("dic://"))
+ {
+ devicePath = devicePath.Substring(6);
+ var pieces = devicePath.Split('/');
+ var host = pieces[0];
+ devicePath = devicePath.Substring(host.Length);
+
+ remote = new Remote.Remote(host);
+
+ throw new NotImplementedException("Remote devices not yet implemented...");
+ }
+
+ switch (PlatformId)
{
case PlatformID.Win32NT:
{
FileHandle = Extern.CreateFile(devicePath, FileAccess.GenericRead | FileAccess.GenericWrite,
- FileShare.Read | FileShare.Write, IntPtr.Zero,
- FileMode.OpenExisting,
- FileAttributes.Normal, IntPtr.Zero);
+ FileShare.Read | FileShare.Write, IntPtr.Zero,
+ FileMode.OpenExisting,
+ FileAttributes.Normal, IntPtr.Zero);
- if(((SafeFileHandle)FileHandle).IsInvalid)
+ if (((SafeFileHandle) FileHandle).IsInvalid)
{
- Error = true;
+ Error = true;
LastError = Marshal.GetLastWin32Error();
}
@@ -89,22 +100,25 @@ namespace DiscImageChef.Devices
{
FileHandle =
Linux.Extern.open(devicePath,
- FileFlags.ReadWrite | FileFlags.NonBlocking | FileFlags.CreateNew);
+ FileFlags.ReadWrite | FileFlags.NonBlocking | FileFlags.CreateNew);
- if((int)FileHandle < 0)
+ if ((int) FileHandle < 0)
{
LastError = Marshal.GetLastWin32Error();
- if(LastError == 13 || LastError == 30) // EACCES or EROFS
+ if (LastError == 13 || LastError == 30) // EACCES or EROFS
{
FileHandle = Linux.Extern.open(devicePath, FileFlags.Readonly | FileFlags.NonBlocking);
- if((int)FileHandle < 0)
+ if ((int) FileHandle < 0)
{
- Error = true;
+ Error = true;
LastError = Marshal.GetLastWin32Error();
}
}
- else Error = true;
+ else
+ {
+ Error = true;
+ }
LastError = Marshal.GetLastWin32Error();
}
@@ -115,80 +129,81 @@ namespace DiscImageChef.Devices
{
FileHandle = FreeBSD.Extern.cam_open_device(devicePath, FreeBSD.FileFlags.ReadWrite);
- if(((IntPtr)FileHandle).ToInt64() == 0)
+ if (((IntPtr) FileHandle).ToInt64() == 0)
{
- Error = true;
+ Error = true;
LastError = Marshal.GetLastWin32Error();
}
- CamDevice camDevice = (CamDevice)Marshal.PtrToStructure((IntPtr)FileHandle, typeof(CamDevice));
+ var camDevice = (CamDevice) Marshal.PtrToStructure((IntPtr) FileHandle, typeof(CamDevice));
- if(StringHandlers.CToString(camDevice.SimName) == "ata")
+ if (StringHandlers.CToString(camDevice.SimName) == "ata")
throw new
- InvalidOperationException("Parallel ATA devices are not supported on FreeBSD due to upstream bug #224250.");
+ InvalidOperationException(
+ "Parallel ATA devices are not supported on FreeBSD due to upstream bug #224250.");
break;
}
default: throw new InvalidOperationException($"Platform {PlatformId} not yet supported.");
}
- if(Error) throw new SystemException($"Error {LastError} opening device.");
+ if (Error) throw new SystemException($"Error {LastError} opening device.");
- Type = DeviceType.Unknown;
+ Type = DeviceType.Unknown;
ScsiType = PeripheralDeviceTypes.UnknownDevice;
byte[] ataBuf;
byte[] inqBuf = null;
- if(Error) throw new SystemException($"Error {LastError} trying device.");
+ if (Error) throw new SystemException($"Error {LastError} trying device.");
- bool scsiSense = true;
+ var scsiSense = true;
// Windows is answering SCSI INQUIRY for all device types so it needs to be detected first
- switch(PlatformId)
+ switch (PlatformId)
{
case PlatformID.Win32NT:
- StoragePropertyQuery query = new StoragePropertyQuery();
- query.PropertyId = StoragePropertyId.Device;
- query.QueryType = StorageQueryType.Standard;
+ var query = new StoragePropertyQuery();
+ query.PropertyId = StoragePropertyId.Device;
+ query.QueryType = StorageQueryType.Standard;
query.AdditionalParameters = new byte[1];
- IntPtr descriptorPtr = Marshal.AllocHGlobal(1000);
- byte[] descriptorB = new byte[1000];
+ var descriptorPtr = Marshal.AllocHGlobal(1000);
+ var descriptorB = new byte[1000];
uint returned = 0;
- int error = 0;
+ var error = 0;
- bool hasError = !Extern.DeviceIoControlStorageQuery((SafeFileHandle)FileHandle,
- WindowsIoctl.IoctlStorageQueryProperty,
- ref query, (uint)Marshal.SizeOf(query),
- descriptorPtr, 1000, ref returned, IntPtr.Zero);
+ var hasError = !Extern.DeviceIoControlStorageQuery((SafeFileHandle) FileHandle,
+ WindowsIoctl.IoctlStorageQueryProperty,
+ ref query, (uint) Marshal.SizeOf(query),
+ descriptorPtr, 1000, ref returned, IntPtr.Zero);
- if(hasError) error = Marshal.GetLastWin32Error();
+ if (hasError) error = Marshal.GetLastWin32Error();
Marshal.Copy(descriptorPtr, descriptorB, 0, 1000);
- if(!hasError && error == 0)
+ if (!hasError && error == 0)
{
- StorageDeviceDescriptor descriptor = new StorageDeviceDescriptor
+ var descriptor = new StorageDeviceDescriptor
{
- Version = BitConverter.ToUInt32(descriptorB, 0),
- Size = BitConverter.ToUInt32(descriptorB, 4),
- DeviceType = descriptorB[8],
- DeviceTypeModifier = descriptorB[9],
- RemovableMedia = descriptorB[10] > 0,
- CommandQueueing = descriptorB[11] > 0,
- VendorIdOffset = BitConverter.ToInt32(descriptorB, 12),
- ProductIdOffset = BitConverter.ToInt32(descriptorB, 16),
+ Version = BitConverter.ToUInt32(descriptorB, 0),
+ Size = BitConverter.ToUInt32(descriptorB, 4),
+ DeviceType = descriptorB[8],
+ DeviceTypeModifier = descriptorB[9],
+ RemovableMedia = descriptorB[10] > 0,
+ CommandQueueing = descriptorB[11] > 0,
+ VendorIdOffset = BitConverter.ToInt32(descriptorB, 12),
+ ProductIdOffset = BitConverter.ToInt32(descriptorB, 16),
ProductRevisionOffset = BitConverter.ToInt32(descriptorB, 20),
- SerialNumberOffset = BitConverter.ToInt32(descriptorB, 24),
- BusType = (StorageBusType)BitConverter.ToUInt32(descriptorB, 28),
- RawPropertiesLength = BitConverter.ToUInt32(descriptorB, 32)
+ SerialNumberOffset = BitConverter.ToInt32(descriptorB, 24),
+ BusType = (StorageBusType) BitConverter.ToUInt32(descriptorB, 28),
+ RawPropertiesLength = BitConverter.ToUInt32(descriptorB, 32)
};
descriptor.RawDeviceProperties = new byte[descriptor.RawPropertiesLength];
Array.Copy(descriptorB, 36, descriptor.RawDeviceProperties, 0, descriptor.RawPropertiesLength);
- switch(descriptor.BusType)
+ switch (descriptor.BusType)
{
case StorageBusType.SCSI:
case StorageBusType.SSA:
@@ -199,11 +214,11 @@ namespace DiscImageChef.Devices
break;
case StorageBusType.FireWire:
IsFireWire = true;
- Type = DeviceType.SCSI;
+ Type = DeviceType.SCSI;
break;
case StorageBusType.USB:
IsUsb = true;
- Type = DeviceType.SCSI;
+ Type = DeviceType.SCSI;
break;
case StorageBusType.ATAPI:
Type = DeviceType.ATAPI;
@@ -223,23 +238,26 @@ namespace DiscImageChef.Devices
break;
}
- switch(Type)
+ switch (Type)
{
case DeviceType.SCSI:
case DeviceType.ATAPI:
scsiSense = ScsiInquiry(out inqBuf, out _);
break;
case DeviceType.ATA:
- bool atapiSense = AtapiIdentify(out ataBuf, out _);
+ var atapiSense = AtapiIdentify(out ataBuf, out _);
- if(!atapiSense)
+ if (!atapiSense)
{
Type = DeviceType.ATAPI;
- Identify.IdentifyDevice? ataid = Identify.Decode(ataBuf);
+ var ataid = Identify.Decode(ataBuf);
- if(ataid.HasValue) scsiSense = ScsiInquiry(out inqBuf, out _);
+ if (ataid.HasValue) scsiSense = ScsiInquiry(out inqBuf, out _);
+ }
+ else
+ {
+ Manufacturer = "ATA";
}
- else Manufacturer = "ATA";
break;
}
@@ -247,17 +265,17 @@ namespace DiscImageChef.Devices
Marshal.FreeHGlobal(descriptorPtr);
- if(Windows.Command.IsSdhci((SafeFileHandle)FileHandle))
+ if (Windows.Command.IsSdhci((SafeFileHandle) FileHandle))
{
- byte[] sdBuffer = new byte[16];
+ var sdBuffer = new byte[16];
- LastError = Windows.Command.SendMmcCommand((SafeFileHandle)FileHandle, MmcCommands.SendCsd,
- false, false,
- MmcFlags.ResponseSpiR2 | MmcFlags.ResponseR2 |
- MmcFlags.CommandAc, 0, 16, 1, ref sdBuffer, out _,
- out _, out bool sense);
+ LastError = Windows.Command.SendMmcCommand((SafeFileHandle) FileHandle, MmcCommands.SendCsd,
+ false, false,
+ MmcFlags.ResponseSpiR2 | MmcFlags.ResponseR2 |
+ MmcFlags.CommandAc, 0, 16, 1, ref sdBuffer, out _,
+ out _, out var sense);
- if(!sense)
+ if (!sense)
{
cachedCsd = new byte[16];
Array.Copy(sdBuffer, 0, cachedCsd, 0, 16);
@@ -265,13 +283,13 @@ namespace DiscImageChef.Devices
sdBuffer = new byte[16];
- LastError = Windows.Command.SendMmcCommand((SafeFileHandle)FileHandle, MmcCommands.SendCid,
- false, false,
- MmcFlags.ResponseSpiR2 | MmcFlags.ResponseR2 |
- MmcFlags.CommandAc, 0, 16, 1, ref sdBuffer, out _,
- out _, out sense);
+ LastError = Windows.Command.SendMmcCommand((SafeFileHandle) FileHandle, MmcCommands.SendCid,
+ false, false,
+ MmcFlags.ResponseSpiR2 | MmcFlags.ResponseR2 |
+ MmcFlags.CommandAc, 0, 16, 1, ref sdBuffer, out _,
+ out _, out sense);
- if(!sense)
+ if (!sense)
{
cachedCid = new byte[16];
Array.Copy(sdBuffer, 0, cachedCid, 0, 16);
@@ -279,31 +297,31 @@ namespace DiscImageChef.Devices
sdBuffer = new byte[8];
- LastError = Windows.Command.SendMmcCommand((SafeFileHandle)FileHandle,
- (MmcCommands)SecureDigitalCommands.SendScr, false,
- true,
- MmcFlags.ResponseSpiR1 | MmcFlags.ResponseR1 |
- MmcFlags.CommandAdtc, 0, 8, 1, ref sdBuffer, out _,
- out _, out sense);
+ LastError = Windows.Command.SendMmcCommand((SafeFileHandle) FileHandle,
+ (MmcCommands) SecureDigitalCommands.SendScr, false,
+ true,
+ MmcFlags.ResponseSpiR1 | MmcFlags.ResponseR1 |
+ MmcFlags.CommandAdtc, 0, 8, 1, ref sdBuffer, out _,
+ out _, out sense);
- if(!sense)
+ if (!sense)
{
cachedScr = new byte[8];
Array.Copy(sdBuffer, 0, cachedScr, 0, 8);
}
- if(cachedScr != null)
+ if (cachedScr != null)
{
sdBuffer = new byte[4];
- LastError = Windows.Command.SendMmcCommand((SafeFileHandle)FileHandle,
- (MmcCommands)SecureDigitalCommands
- .SendOperatingCondition, false, true,
- MmcFlags.ResponseSpiR3 | MmcFlags.ResponseR3 |
- MmcFlags.CommandBcr, 0, 4, 1, ref sdBuffer,
- out _, out _, out sense);
+ LastError = Windows.Command.SendMmcCommand((SafeFileHandle) FileHandle,
+ (MmcCommands) SecureDigitalCommands
+ .SendOperatingCondition, false, true,
+ MmcFlags.ResponseSpiR3 | MmcFlags.ResponseR3 |
+ MmcFlags.CommandBcr, 0, 4, 1, ref sdBuffer,
+ out _, out _, out sense);
- if(!sense)
+ if (!sense)
{
cachedScr = new byte[4];
Array.Copy(sdBuffer, 0, cachedScr, 0, 4);
@@ -313,13 +331,13 @@ namespace DiscImageChef.Devices
{
sdBuffer = new byte[4];
- LastError = Windows.Command.SendMmcCommand((SafeFileHandle)FileHandle,
- MmcCommands.SendOpCond, false, true,
- MmcFlags.ResponseSpiR3 | MmcFlags.ResponseR3 |
- MmcFlags.CommandBcr, 0, 4, 1, ref sdBuffer,
- out _, out _, out sense);
+ LastError = Windows.Command.SendMmcCommand((SafeFileHandle) FileHandle,
+ MmcCommands.SendOpCond, false, true,
+ MmcFlags.ResponseSpiR3 | MmcFlags.ResponseR3 |
+ MmcFlags.CommandBcr, 0, 4, 1, ref sdBuffer,
+ out _, out _, out sense);
- if(!sense)
+ if (!sense)
{
cachedScr = new byte[4];
Array.Copy(sdBuffer, 0, cachedScr, 0, 4);
@@ -329,40 +347,42 @@ namespace DiscImageChef.Devices
break;
case PlatformID.Linux:
- if(devicePath.StartsWith("/dev/sd", StringComparison.Ordinal) ||
- devicePath.StartsWith("/dev/sr", StringComparison.Ordinal) ||
- devicePath.StartsWith("/dev/st", StringComparison.Ordinal))
- scsiSense = ScsiInquiry(out inqBuf, out _);
- // MultiMediaCard and SecureDigital go here
- else if(devicePath.StartsWith("/dev/mmcblk", StringComparison.Ordinal))
+ if (devicePath.StartsWith("/dev/sd", StringComparison.Ordinal) ||
+ devicePath.StartsWith("/dev/sr", StringComparison.Ordinal) ||
+ devicePath.StartsWith("/dev/st", StringComparison.Ordinal))
{
- string devPath = devicePath.Substring(5);
- if(File.Exists("/sys/block/" + devPath + "/device/csd"))
+ scsiSense = ScsiInquiry(out inqBuf, out _);
+ }
+ // MultiMediaCard and SecureDigital go here
+ else if (devicePath.StartsWith("/dev/mmcblk", StringComparison.Ordinal))
+ {
+ var devPath = devicePath.Substring(5);
+ if (File.Exists("/sys/block/" + devPath + "/device/csd"))
{
- int len =
+ var len =
ConvertFromHexAscii("/sys/block/" + devPath + "/device/csd", out cachedCsd);
- if(len == 0) cachedCsd = null;
+ if (len == 0) cachedCsd = null;
}
- if(File.Exists("/sys/block/" + devPath + "/device/cid"))
+ if (File.Exists("/sys/block/" + devPath + "/device/cid"))
{
- int len =
+ var len =
ConvertFromHexAscii("/sys/block/" + devPath + "/device/cid", out cachedCid);
- if(len == 0) cachedCid = null;
+ if (len == 0) cachedCid = null;
}
- if(File.Exists("/sys/block/" + devPath + "/device/scr"))
+ if (File.Exists("/sys/block/" + devPath + "/device/scr"))
{
- int len =
+ var len =
ConvertFromHexAscii("/sys/block/" + devPath + "/device/scr", out cachedScr);
- if(len == 0) cachedScr = null;
+ if (len == 0) cachedScr = null;
}
- if(File.Exists("/sys/block/" + devPath + "/device/ocr"))
+ if (File.Exists("/sys/block/" + devPath + "/device/ocr"))
{
- int len =
+ var len =
ConvertFromHexAscii("/sys/block/" + devPath + "/device/ocr", out cachedOcr);
- if(len == 0) cachedOcr = null;
+ if (len == 0) cachedOcr = null;
}
}
@@ -373,91 +393,94 @@ namespace DiscImageChef.Devices
}
#region SecureDigital / MultiMediaCard
- if(cachedCid != null)
+
+ if (cachedCid != null)
{
- ScsiType = PeripheralDeviceTypes.DirectAccess;
+ ScsiType = PeripheralDeviceTypes.DirectAccess;
IsRemovable = false;
- if(cachedScr != null)
+ if (cachedScr != null)
{
Type = DeviceType.SecureDigital;
- CID decoded = Decoders.SecureDigital.Decoders.DecodeCID(cachedCid);
+ var decoded = Decoders.SecureDigital.Decoders.DecodeCID(cachedCid);
Manufacturer = VendorString.Prettify(decoded.Manufacturer);
- Model = decoded.ProductName;
- Revision = $"{(decoded.ProductRevision & 0xF0) >> 4:X2}.{decoded.ProductRevision & 0x0F:X2}";
- Serial = $"{decoded.ProductSerialNumber}";
+ Model = decoded.ProductName;
+ Revision = $"{(decoded.ProductRevision & 0xF0) >> 4:X2}.{decoded.ProductRevision & 0x0F:X2}";
+ Serial = $"{decoded.ProductSerialNumber}";
}
else
{
Type = DeviceType.MMC;
- Decoders.MMC.CID decoded = Decoders.MMC.Decoders.DecodeCID(cachedCid);
+ var decoded = Decoders.MMC.Decoders.DecodeCID(cachedCid);
Manufacturer = Decoders.MMC.VendorString.Prettify(decoded.Manufacturer);
- Model = decoded.ProductName;
- Revision = $"{(decoded.ProductRevision & 0xF0) >> 4:X2}.{decoded.ProductRevision & 0x0F:X2}";
- Serial = $"{decoded.ProductSerialNumber}";
+ Model = decoded.ProductName;
+ Revision = $"{(decoded.ProductRevision & 0xF0) >> 4:X2}.{decoded.ProductRevision & 0x0F:X2}";
+ Serial = $"{decoded.ProductSerialNumber}";
}
}
+
#endregion SecureDigital / MultiMediaCard
#region USB
- switch(PlatformId)
+
+ switch (PlatformId)
{
case PlatformID.Linux:
- if(devicePath.StartsWith("/dev/sd", StringComparison.Ordinal) ||
- devicePath.StartsWith("/dev/sr", StringComparison.Ordinal) ||
- devicePath.StartsWith("/dev/st", StringComparison.Ordinal))
+ if (devicePath.StartsWith("/dev/sd", StringComparison.Ordinal) ||
+ devicePath.StartsWith("/dev/sr", StringComparison.Ordinal) ||
+ devicePath.StartsWith("/dev/st", StringComparison.Ordinal))
{
- string devPath = devicePath.Substring(5);
- if(Directory.Exists("/sys/block/" + devPath))
+ var devPath = devicePath.Substring(5);
+ if (Directory.Exists("/sys/block/" + devPath))
{
- string resolvedLink = Linux.Command.ReadLink("/sys/block/" + devPath);
+ var resolvedLink = Linux.Command.ReadLink("/sys/block/" + devPath);
resolvedLink = "/sys" + resolvedLink.Substring(2);
- if(!string.IsNullOrEmpty(resolvedLink))
- while(resolvedLink.Contains("usb"))
+ if (!string.IsNullOrEmpty(resolvedLink))
+ while (resolvedLink.Contains("usb"))
{
resolvedLink = Path.GetDirectoryName(resolvedLink);
- if(!File.Exists(resolvedLink + "/descriptors") ||
- !File.Exists(resolvedLink + "/idProduct") ||
- !File.Exists(resolvedLink + "/idVendor")) continue;
+ if (!File.Exists(resolvedLink + "/descriptors") ||
+ !File.Exists(resolvedLink + "/idProduct") ||
+ !File.Exists(resolvedLink + "/idVendor")) continue;
- FileStream usbFs = new FileStream(resolvedLink + "/descriptors",
- System.IO.FileMode.Open,
- System.IO.FileAccess.Read);
- byte[] usbBuf = new byte[65536];
- int usbCount = usbFs.Read(usbBuf, 0, 65536);
+ var usbFs = new FileStream(resolvedLink + "/descriptors",
+ System.IO.FileMode.Open,
+ System.IO.FileAccess.Read);
+ var usbBuf = new byte[65536];
+ var usbCount = usbFs.Read(usbBuf, 0, 65536);
UsbDescriptors = new byte[usbCount];
Array.Copy(usbBuf, 0, UsbDescriptors, 0, usbCount);
usbFs.Close();
- StreamReader usbSr = new StreamReader(resolvedLink + "/idProduct");
- string usbTemp = usbSr.ReadToEnd();
+ var usbSr = new StreamReader(resolvedLink + "/idProduct");
+ var usbTemp = usbSr.ReadToEnd();
ushort.TryParse(usbTemp, NumberStyles.HexNumber, CultureInfo.InvariantCulture,
- out usbProduct);
+ out usbProduct);
usbSr.Close();
- usbSr = new StreamReader(resolvedLink + "/idVendor");
+ usbSr = new StreamReader(resolvedLink + "/idVendor");
usbTemp = usbSr.ReadToEnd();
ushort.TryParse(usbTemp, NumberStyles.HexNumber, CultureInfo.InvariantCulture,
- out usbVendor);
+ out usbVendor);
usbSr.Close();
- if(File.Exists(resolvedLink + "/manufacturer"))
+ if (File.Exists(resolvedLink + "/manufacturer"))
{
- usbSr = new StreamReader(resolvedLink + "/manufacturer");
+ usbSr = new StreamReader(resolvedLink + "/manufacturer");
UsbManufacturerString = usbSr.ReadToEnd().Trim();
usbSr.Close();
}
- if(File.Exists(resolvedLink + "/product"))
+ if (File.Exists(resolvedLink + "/product"))
{
- usbSr = new StreamReader(resolvedLink + "/product");
+ usbSr = new StreamReader(resolvedLink + "/product");
UsbProductString = usbSr.ReadToEnd().Trim();
usbSr.Close();
}
- if(File.Exists(resolvedLink + "/serial"))
+ if (File.Exists(resolvedLink + "/serial"))
{
- usbSr = new StreamReader(resolvedLink + "/serial");
+ usbSr = new StreamReader(resolvedLink + "/serial");
UsbSerialString = usbSr.ReadToEnd().Trim();
usbSr.Close();
}
@@ -473,22 +496,22 @@ namespace DiscImageChef.Devices
Usb.UsbDevice usbDevice = null;
// I have to search for USB disks, floppies and CD-ROMs as separate device types
- foreach(string devGuid in new[]
+ foreach (var devGuid in new[]
{
Usb.GuidDevinterfaceFloppy, Usb.GuidDevinterfaceCdrom, Usb.GuidDevinterfaceDisk
})
{
usbDevice = Usb.FindDrivePath(devicePath, devGuid);
- if(usbDevice != null) break;
+ if (usbDevice != null) break;
}
- if(usbDevice != null)
+ if (usbDevice != null)
{
- UsbDescriptors = usbDevice.BinaryDescriptors;
- usbVendor = (ushort)usbDevice.DeviceDescriptor.idVendor;
- usbProduct = (ushort)usbDevice.DeviceDescriptor.idProduct;
+ UsbDescriptors = usbDevice.BinaryDescriptors;
+ usbVendor = (ushort) usbDevice.DeviceDescriptor.idVendor;
+ usbProduct = (ushort) usbDevice.DeviceDescriptor.idProduct;
UsbManufacturerString = usbDevice.Manufacturer;
- UsbProductString = usbDevice.Product;
+ UsbProductString = usbDevice.Product;
UsbSerialString =
usbDevice.SerialNumber; // This is incorrect filled by Windows with SCSI/ATA serial number
}
@@ -498,55 +521,57 @@ namespace DiscImageChef.Devices
IsUsb = false;
break;
}
+
#endregion USB
#region FireWire
- if(PlatformId == PlatformID.Linux)
+
+ if (PlatformId == PlatformID.Linux)
{
- if(devicePath.StartsWith("/dev/sd", StringComparison.Ordinal) ||
- devicePath.StartsWith("/dev/sr", StringComparison.Ordinal) ||
- devicePath.StartsWith("/dev/st", StringComparison.Ordinal))
+ if (devicePath.StartsWith("/dev/sd", StringComparison.Ordinal) ||
+ devicePath.StartsWith("/dev/sr", StringComparison.Ordinal) ||
+ devicePath.StartsWith("/dev/st", StringComparison.Ordinal))
{
- string devPath = devicePath.Substring(5);
- if(Directory.Exists("/sys/block/" + devPath))
+ var devPath = devicePath.Substring(5);
+ if (Directory.Exists("/sys/block/" + devPath))
{
- string resolvedLink = Linux.Command.ReadLink("/sys/block/" + devPath);
+ var resolvedLink = Linux.Command.ReadLink("/sys/block/" + devPath);
resolvedLink = "/sys" + resolvedLink.Substring(2);
- if(!string.IsNullOrEmpty(resolvedLink))
- while(resolvedLink.Contains("firewire"))
+ if (!string.IsNullOrEmpty(resolvedLink))
+ while (resolvedLink.Contains("firewire"))
{
resolvedLink = Path.GetDirectoryName(resolvedLink);
- if(!File.Exists(resolvedLink + "/model") || !File.Exists(resolvedLink + "/vendor") ||
- !File.Exists(resolvedLink + "/guid")) continue;
+ if (!File.Exists(resolvedLink + "/model") || !File.Exists(resolvedLink + "/vendor") ||
+ !File.Exists(resolvedLink + "/guid")) continue;
- StreamReader fwSr = new StreamReader(resolvedLink + "/model");
- string fwTemp = fwSr.ReadToEnd();
+ var fwSr = new StreamReader(resolvedLink + "/model");
+ var fwTemp = fwSr.ReadToEnd();
uint.TryParse(fwTemp, NumberStyles.HexNumber, CultureInfo.InvariantCulture,
- out firewireModel);
+ out firewireModel);
fwSr.Close();
- fwSr = new StreamReader(resolvedLink + "/vendor");
+ fwSr = new StreamReader(resolvedLink + "/vendor");
fwTemp = fwSr.ReadToEnd();
uint.TryParse(fwTemp, NumberStyles.HexNumber, CultureInfo.InvariantCulture,
- out firewireVendor);
+ out firewireVendor);
fwSr.Close();
- fwSr = new StreamReader(resolvedLink + "/guid");
+ fwSr = new StreamReader(resolvedLink + "/guid");
fwTemp = fwSr.ReadToEnd();
ulong.TryParse(fwTemp, NumberStyles.HexNumber, CultureInfo.InvariantCulture,
- out firewireGuid);
+ out firewireGuid);
fwSr.Close();
- if(File.Exists(resolvedLink + "/model_name"))
+ if (File.Exists(resolvedLink + "/model_name"))
{
- fwSr = new StreamReader(resolvedLink + "/model_name");
+ fwSr = new StreamReader(resolvedLink + "/model_name");
FireWireModelName = fwSr.ReadToEnd().Trim();
fwSr.Close();
}
- if(File.Exists(resolvedLink + "/vendor_name"))
+ if (File.Exists(resolvedLink + "/vendor_name"))
{
- fwSr = new StreamReader(resolvedLink + "/vendor_name");
+ fwSr = new StreamReader(resolvedLink + "/vendor_name");
FireWireVendorName = fwSr.ReadToEnd().Trim();
fwSr.Close();
}
@@ -558,41 +583,46 @@ namespace DiscImageChef.Devices
}
}
// TODO: Implement for other operating systems
- else IsFireWire = false;
+ else
+ {
+ IsFireWire = false;
+ }
+
#endregion FireWire
#region PCMCIA
- if(PlatformId == PlatformID.Linux)
+
+ if (PlatformId == PlatformID.Linux)
{
- if(devicePath.StartsWith("/dev/sd", StringComparison.Ordinal) ||
- devicePath.StartsWith("/dev/sr", StringComparison.Ordinal) ||
- devicePath.StartsWith("/dev/st", StringComparison.Ordinal))
+ if (devicePath.StartsWith("/dev/sd", StringComparison.Ordinal) ||
+ devicePath.StartsWith("/dev/sr", StringComparison.Ordinal) ||
+ devicePath.StartsWith("/dev/st", StringComparison.Ordinal))
{
- string devPath = devicePath.Substring(5);
- if(Directory.Exists("/sys/block/" + devPath))
+ var devPath = devicePath.Substring(5);
+ if (Directory.Exists("/sys/block/" + devPath))
{
- string resolvedLink = Linux.Command.ReadLink("/sys/block/" + devPath);
+ var resolvedLink = Linux.Command.ReadLink("/sys/block/" + devPath);
resolvedLink = "/sys" + resolvedLink.Substring(2);
- if(!string.IsNullOrEmpty(resolvedLink))
- while(resolvedLink.Contains("/sys/devices"))
+ if (!string.IsNullOrEmpty(resolvedLink))
+ while (resolvedLink.Contains("/sys/devices"))
{
resolvedLink = Path.GetDirectoryName(resolvedLink);
- if(!Directory.Exists(resolvedLink + "/pcmcia_socket")) continue;
+ if (!Directory.Exists(resolvedLink + "/pcmcia_socket")) continue;
- string[] subdirs = Directory.GetDirectories(resolvedLink + "/pcmcia_socket",
- "pcmcia_socket*",
- SearchOption.TopDirectoryOnly);
+ var subdirs = Directory.GetDirectories(resolvedLink + "/pcmcia_socket",
+ "pcmcia_socket*",
+ SearchOption.TopDirectoryOnly);
- if(subdirs.Length <= 0) continue;
+ if (subdirs.Length <= 0) continue;
- string possibleDir = Path.Combine(resolvedLink, "pcmcia_socket", subdirs[0]);
- if(!File.Exists(possibleDir + "/card_type") || !File.Exists(possibleDir + "/cis"))
+ var possibleDir = Path.Combine(resolvedLink, "pcmcia_socket", subdirs[0]);
+ if (!File.Exists(possibleDir + "/card_type") || !File.Exists(possibleDir + "/cis"))
continue;
- FileStream cisFs = new FileStream(possibleDir + "/cis", System.IO.FileMode.Open,
- System.IO.FileAccess.Read);
- byte[] cisBuf = new byte[65536];
- int cisCount = cisFs.Read(cisBuf, 0, 65536);
+ var cisFs = new FileStream(possibleDir + "/cis", System.IO.FileMode.Open,
+ System.IO.FileAccess.Read);
+ var cisBuf = new byte[65536];
+ var cisCount = cisFs.Read(cisBuf, 0, 65536);
Cis = new byte[cisCount];
Array.Copy(cisBuf, 0, Cis, 0, cisCount);
cisFs.Close();
@@ -604,69 +634,76 @@ namespace DiscImageChef.Devices
}
}
// TODO: Implement for other operating systems
- else IsPcmcia = false;
+ else
+ {
+ IsPcmcia = false;
+ }
+
#endregion PCMCIA
- if(!scsiSense)
+ if (!scsiSense)
{
- Inquiry.SCSIInquiry? inquiry = Inquiry.Decode(inqBuf);
+ var inquiry = Inquiry.Decode(inqBuf);
Type = DeviceType.SCSI;
- bool serialSense = ScsiInquiry(out inqBuf, out _, 0x80);
- if(!serialSense) Serial = EVPD.DecodePage80(inqBuf);
+ var serialSense = ScsiInquiry(out inqBuf, out _, 0x80);
+ if (!serialSense) Serial = EVPD.DecodePage80(inqBuf);
- if(inquiry.HasValue)
+ if (inquiry.HasValue)
{
- string tmp = StringHandlers.CToString(inquiry.Value.ProductRevisionLevel);
- if(tmp != null) Revision = tmp.Trim();
+ var tmp = StringHandlers.CToString(inquiry.Value.ProductRevisionLevel);
+ if (tmp != null) Revision = tmp.Trim();
tmp = StringHandlers.CToString(inquiry.Value.ProductIdentification);
- if(tmp != null) Model = tmp.Trim();
+ if (tmp != null) Model = tmp.Trim();
tmp = StringHandlers.CToString(inquiry.Value.VendorIdentification);
- if(tmp != null) Manufacturer = tmp.Trim();
+ if (tmp != null) Manufacturer = tmp.Trim();
IsRemovable = inquiry.Value.RMB;
- ScsiType = (PeripheralDeviceTypes)inquiry.Value.PeripheralDeviceType;
+ ScsiType = (PeripheralDeviceTypes) inquiry.Value.PeripheralDeviceType;
}
- bool atapiSense = AtapiIdentify(out ataBuf, out _);
+ var atapiSense = AtapiIdentify(out ataBuf, out _);
- if(!atapiSense)
+ if (!atapiSense)
{
Type = DeviceType.ATAPI;
- Identify.IdentifyDevice? ataId = Identify.Decode(ataBuf);
+ var ataId = Identify.Decode(ataBuf);
- if(ataId.HasValue) Serial = ataId.Value.SerialNumber;
+ if (ataId.HasValue) Serial = ataId.Value.SerialNumber;
}
LastError = 0;
- Error = false;
+ Error = false;
}
- if(scsiSense && (IsUsb || IsFireWire) || Manufacturer == "ATA")
+ if (scsiSense && (IsUsb || IsFireWire) || Manufacturer == "ATA")
{
- bool ataSense = AtaIdentify(out ataBuf, out _);
- if(!ataSense)
+ var ataSense = AtaIdentify(out ataBuf, out _);
+ if (!ataSense)
{
Type = DeviceType.ATA;
- Identify.IdentifyDevice? ataid = Identify.Decode(ataBuf);
+ var ataid = Identify.Decode(ataBuf);
- if(ataid.HasValue)
+ if (ataid.HasValue)
{
- string[] separated = ataid.Value.Model.Split(' ');
+ var separated = ataid.Value.Model.Split(' ');
- if(separated.Length == 1) Model = separated[0];
+ if (separated.Length == 1)
+ {
+ Model = separated[0];
+ }
else
{
Manufacturer = separated[0];
- Model = separated[separated.Length - 1];
+ Model = separated[separated.Length - 1];
}
Revision = ataid.Value.FirmwareRevision;
- Serial = ataid.Value.SerialNumber;
+ Serial = ataid.Value.SerialNumber;
ScsiType = PeripheralDeviceTypes.DirectAccess;
- if((ushort)ataid.Value.GeneralConfiguration != 0x848A)
+ if ((ushort) ataid.Value.GeneralConfiguration != 0x848A)
IsRemovable |=
(ataid.Value.GeneralConfiguration & Identify.GeneralConfigurationBit.Removable) ==
Identify.GeneralConfigurationBit.Removable;
@@ -675,69 +712,72 @@ namespace DiscImageChef.Devices
}
}
- if(Type == DeviceType.Unknown)
+ if (Type == DeviceType.Unknown)
{
Manufacturer = null;
- Model = null;
- Revision = null;
- Serial = null;
+ Model = null;
+ Revision = null;
+ Serial = null;
}
- if(IsUsb)
+ if (IsUsb)
{
- if(string.IsNullOrEmpty(Manufacturer)) Manufacturer = UsbManufacturerString;
- if(string.IsNullOrEmpty(Model)) Model = UsbProductString;
- if(string.IsNullOrEmpty(Serial)) Serial = UsbSerialString;
+ if (string.IsNullOrEmpty(Manufacturer)) Manufacturer = UsbManufacturerString;
+ if (string.IsNullOrEmpty(Model)) Model = UsbProductString;
+ if (string.IsNullOrEmpty(Serial)) Serial = UsbSerialString;
else
- foreach(char c in Serial.Where(char.IsControl))
+ foreach (var c in Serial.Where(char.IsControl))
Serial = UsbSerialString;
}
- if(IsFireWire)
+ if (IsFireWire)
{
- if(string.IsNullOrEmpty(Manufacturer)) Manufacturer = FireWireVendorName;
- if(string.IsNullOrEmpty(Model)) Model = FireWireModelName;
- if(string.IsNullOrEmpty(Serial)) Serial = $"{firewireGuid:X16}";
+ if (string.IsNullOrEmpty(Manufacturer)) Manufacturer = FireWireVendorName;
+ if (string.IsNullOrEmpty(Model)) Model = FireWireModelName;
+ if (string.IsNullOrEmpty(Serial)) Serial = $"{firewireGuid:X16}";
else
- foreach(char c in Serial.Where(char.IsControl))
+ foreach (var c in Serial.Where(char.IsControl))
Serial = $"{firewireGuid:X16}";
}
// Some optical drives are not getting the correct serial, and IDENTIFY PACKET DEVICE is blocked without
// administrator privileges
- if(ScsiType != PeripheralDeviceTypes.MultiMediaDevice) return;
+ if (ScsiType != PeripheralDeviceTypes.MultiMediaDevice) return;
- bool featureSense = GetConfiguration(out byte[] featureBuffer, out _, 0x0108, MmcGetConfigurationRt.Single,
- Timeout, out _);
+ var featureSense = GetConfiguration(out var featureBuffer, out _, 0x0108, MmcGetConfigurationRt.Single,
+ Timeout, out _);
- if(featureSense) return;
+ if (featureSense) return;
- Features.SeparatedFeatures features = Features.Separate(featureBuffer);
- if(features.Descriptors?.Length != 1 || features.Descriptors[0].Code != 0x0108) return;
+ var features = Features.Separate(featureBuffer);
+ if (features.Descriptors?.Length != 1 || features.Descriptors[0].Code != 0x0108) return;
- Feature_0108? serialFeature = Features.Decode_0108(features.Descriptors[0].Data);
+ var serialFeature = Features.Decode_0108(features.Descriptors[0].Data);
- if(serialFeature is null) return;
+ if (serialFeature is null) return;
Serial = serialFeature.Value.Serial;
}
- static int ConvertFromHexAscii(string file, out byte[] outBuf)
+ private static int ConvertFromHexAscii(string file, out byte[] outBuf)
{
- StreamReader sr = new StreamReader(file);
- string ins = sr.ReadToEnd().Trim();
+ var sr = new StreamReader(file);
+ var ins = sr.ReadToEnd().Trim();
outBuf = new byte[ins.Length / 2];
- int count = 0;
+ var count = 0;
try
{
- for(int i = 0; i < ins.Length; i += 2)
+ for (var i = 0; i < ins.Length; i += 2)
{
outBuf[i / 2] = Convert.ToByte(ins.Substring(i, 2), 16);
count++;
}
}
- catch { count = 0; }
+ catch
+ {
+ count = 0;
+ }
sr.Close();
return count;
diff --git a/DiscImageChef.Devices/Device/Variables.cs b/DiscImageChef.Devices/Device/Variables.cs
index df2253d10..007053a1e 100644
--- a/DiscImageChef.Devices/Device/Variables.cs
+++ b/DiscImageChef.Devices/Device/Variables.cs
@@ -38,18 +38,18 @@ namespace DiscImageChef.Devices
{
public partial class Device
{
- readonly ushort usbVendor;
- readonly ushort usbProduct;
- readonly ulong firewireGuid;
- readonly uint firewireModel;
- readonly uint firewireVendor;
+ private readonly ushort usbVendor;
+ private readonly ushort usbProduct;
+ private readonly ulong firewireGuid;
+ private readonly uint firewireModel;
+ private readonly uint firewireVendor;
// MMC and SecureDigital, values that need to be get with card idle, something that may
// not be possible to do but usually is already done by the SDHCI driver.
- readonly byte[] cachedCsd;
- readonly byte[] cachedCid;
- readonly byte[] cachedScr;
- readonly byte[] cachedOcr;
+ private readonly byte[] cachedCsd;
+ private readonly byte[] cachedCid;
+ private readonly byte[] cachedScr;
+ private readonly byte[] cachedOcr;
///
/// Gets the Platform ID for this device
@@ -217,5 +217,7 @@ namespace DiscImageChef.Devices
/// Contains the PCMCIA CIS if applicable
///
public byte[] Cis { get; }
+
+ private readonly Remote.Remote remote;
}
}
\ No newline at end of file