public Ssc ReportScsiSsc() { var report = new Ssc(); AaruConsole.WriteLine("Querying SCSI READ BLOCK LIMITS..."); bool sense = _dev.ReadBlockLimits(out byte[] buffer, out byte[] _, _dev.Timeout, out _); if (!sense) { BlockLimits.BlockLimitsData?decBl = BlockLimits.Decode(buffer); if (decBl?.granularity > 0) { report.BlockSizeGranularity = decBl.Value.granularity; } if (decBl?.maxBlockLen > 0) { report.MaxBlockLength = decBl.Value.maxBlockLen; } if (decBl?.minBlockLen > 0) { report.MinBlockLength = decBl.Value.minBlockLen; } } AaruConsole.WriteLine("Querying SCSI REPORT DENSITY SUPPORT..."); sense = _dev.ReportDensitySupport(out buffer, out byte[] _, false, false, _dev.Timeout, out _); if (!sense) { DensitySupport.DensitySupportHeader?dsh = DensitySupport.DecodeDensity(buffer); if (dsh.HasValue) { SupportedDensity[] array = new SupportedDensity[dsh.Value.descriptors.Length]; for (int i = 0; i < dsh.Value.descriptors.Length; i++) { array[i] = new SupportedDensity { BitsPerMm = dsh.Value.descriptors[i].bpmm, Capacity = dsh.Value.descriptors[i].capacity, DefaultDensity = dsh.Value.descriptors[i].defaultDensity, Description = dsh.Value.descriptors[i].description, Duplicate = dsh.Value.descriptors[i].duplicate, Name = dsh.Value.descriptors[i].name, Organization = dsh.Value.descriptors[i].organization, PrimaryCode = dsh.Value.descriptors[i].primaryCode, SecondaryCode = dsh.Value.descriptors[i].secondaryCode, Tracks = dsh.Value.descriptors[i].tracks, Width = dsh.Value.descriptors[i].width, Writable = dsh.Value.descriptors[i].writable } } ; report.SupportedDensities = array.ToList(); } } AaruConsole.WriteLine("Querying SCSI REPORT DENSITY SUPPORT for medium types..."); sense = _dev.ReportDensitySupport(out buffer, out byte[] _, true, false, _dev.Timeout, out _); if (sense) { return(report); } DensitySupport.MediaTypeSupportHeader?mtsh = DensitySupport.DecodeMediumType(buffer); if (!mtsh.HasValue) { return(report); } SscSupportedMedia[] array2 = new SscSupportedMedia[mtsh.Value.descriptors.Length]; for (int i = 0; i < mtsh.Value.descriptors.Length; i++) { array2[i] = new SscSupportedMedia { Description = mtsh.Value.descriptors[i].description, Length = mtsh.Value.descriptors[i].length, MediumType = mtsh.Value.descriptors[i].mediumType, Name = mtsh.Value.descriptors[i].name, Organization = mtsh.Value.descriptors[i].organization, Width = mtsh.Value.descriptors[i].width }; if (mtsh.Value.descriptors[i].densityCodes == null) { continue; } DensityCode[] array3 = new DensityCode[mtsh.Value.descriptors[i].densityCodes.Length]; for (int j = 0; j < mtsh.Value.descriptors[i].densityCodes.Length; j++) { array3[j] = new DensityCode { Code = mtsh.Value.descriptors[i].densityCodes[j] } } ; array2[i].DensityCodes = array3.Distinct().ToList(); } report.SupportedMediaTypes = array2.ToList(); return(report); }
public static void Scsi(string devPath, Device dev) { while (true) { System.Console.Clear(); AaruConsole.WriteLine("Device: {0}", devPath); AaruConsole.WriteLine("Send a SCSI command to the device:"); AaruConsole.WriteLine("1.- Send an Adaptec vendor command to the device."); AaruConsole.WriteLine("2.- Send an Archive vendor command to the device."); AaruConsole.WriteLine("3.- Send a Certance vendor command to the device."); AaruConsole.WriteLine("4.- Send a Fujitsu vendor command to the device."); AaruConsole.WriteLine("5.- Send an HL-DT-ST vendor command to the device."); AaruConsole.WriteLine("6.- Send a Hewlett-Packard vendor command to the device."); AaruConsole.WriteLine("7.- Send a Kreon vendor command to the device."); AaruConsole.WriteLine("8.- Send a SCSI MultiMedia Command to the device."); AaruConsole.WriteLine("9.- Send a NEC vendor command to the device."); AaruConsole.WriteLine("10.- Send a Pioneer vendor command to the device."); AaruConsole.WriteLine("11.- Send a Plasmon vendor command to the device."); AaruConsole.WriteLine("12.- Send a Plextor vendor command to the device."); AaruConsole.WriteLine("13.- Send a SCSI Block Command to the device."); AaruConsole.WriteLine("14.- Send a SCSI Media Changer command to the device."); AaruConsole.WriteLine("15.- Send a SCSI Primary Command to the device."); AaruConsole.WriteLine("16.- Send a SCSI Streaming Command to the device."); AaruConsole.WriteLine("17.- Send a SyQuest vendor command to the device."); AaruConsole.WriteLine("0.- Return to command class menu."); AaruConsole.Write("Choose: "); string strDev = System.Console.ReadLine(); if (!int.TryParse(strDev, out int item)) { AaruConsole.WriteLine("Not a number. Press any key to continue..."); System.Console.ReadKey(); continue; } switch (item) { case 0: AaruConsole.WriteLine("Returning to command class menu..."); return; case 1: Adaptec.Menu(devPath, dev); continue; case 2: ArchiveCorp.Menu(devPath, dev); continue; case 3: Certance.Menu(devPath, dev); continue; case 4: Fujitsu.Menu(devPath, dev); continue; case 5: HlDtSt.Menu(devPath, dev); continue; case 6: Hp.Menu(devPath, dev); continue; case 7: Kreon.Menu(devPath, dev); continue; case 8: Mmc.Menu(devPath, dev); continue; case 9: Nec.Menu(devPath, dev); continue; case 10: Pioneer.Menu(devPath, dev); continue; case 11: Plasmon.Menu(devPath, dev); continue; case 12: Plextor.Menu(devPath, dev); continue; case 13: Sbc.Menu(devPath, dev); continue; case 14: Smc.Menu(devPath, dev); continue; case 15: Spc.Menu(devPath, dev); continue; case 16: Ssc.Menu(devPath, dev); continue; case 17: SyQuest.Menu(devPath, dev); continue; default: AaruConsole.WriteLine("Incorrect option. Press any key to continue..."); System.Console.ReadKey(); continue; } } }