コード例 #1
0
ファイル: SSC.cs プロジェクト: paulyc/Aaru
        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);
        }
コード例 #2
0
ファイル: SCSI.cs プロジェクト: morefun0302/Aaru
        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;
                }
            }
        }