Пример #1
0
        /// <summary>
        ///     Sets the drive to the specified lock state
        /// </summary>
        /// <returns><c>true</c> if the command failed and <paramref name="senseBuffer" /> contains the sense buffer.</returns>
        /// <param name="senseBuffer">Sense buffer.</param>
        /// <param name="timeout">Timeout.</param>
        /// <param name="duration">Duration.</param>
        /// <param name="state">Lock state</param>
        public bool KreonSetLockState(out byte[] senseBuffer, KreonLockStates state, uint timeout, out double duration)
        {
            senseBuffer = new byte[32];
            byte[] cdb    = new byte[6];
            byte[] buffer = new byte[0];

            cdb[0] = (byte)ScsiCommands.KreonCommand;
            cdb[1] = 0x08;
            cdb[2] = 0x01;
            cdb[3] = 0x11;
            cdb[4] = (byte)state;

            LastError = SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.None, out duration,
                                        out bool sense);
            Error = LastError != 0;

            DicConsole.DebugWriteLine("SCSI Device", "KREON SET LOCK STATE took {0} ms.", duration);

            return(sense);
        }
Пример #2
0
        static void SetLockState(string devPath, Device dev)
        {
            KreonLockStates state = KreonLockStates.Locked;
            string          strDev;
            int             item;

parameters:
            while (true)
            {
                System.Console.Clear();
                DicConsole.WriteLine("Device: {0}", devPath);
                DicConsole.WriteLine("Parameters for SET LOCK STATE command:");
                DicConsole.WriteLine("Lock state: {0}", state);
                DicConsole.WriteLine();
                DicConsole.WriteLine("Choose what to do:");
                DicConsole.WriteLine("1.- Change parameters.");
                DicConsole.WriteLine("2.- Send command with these parameters.");
                DicConsole.WriteLine("0.- Return to Kreon vendor commands menu.");

                strDev = System.Console.ReadLine();
                if (!int.TryParse(strDev, out item))
                {
                    DicConsole.WriteLine("Not a number. Press any key to continue...");
                    System.Console.ReadKey();
                    continue;
                }

                switch (item)
                {
                case 0:
                    DicConsole.WriteLine("Returning to Kreon vendor commands menu...");
                    return;

                case 1:
                    DicConsole.WriteLine("Lock state");
                    DicConsole.WriteLine("Available values: {0} {1} {2}", KreonLockStates.Locked,
                                         KreonLockStates.Wxripper, KreonLockStates.Xtreme);
                    DicConsole.Write("Choose?: ");
                    strDev = System.Console.ReadLine();
                    if (!Enum.TryParse(strDev, true, out state))
                    {
                        DicConsole.WriteLine("Not a correct page control. Press any key to continue...");
                        state = KreonLockStates.Locked;
                        System.Console.ReadKey();
                    }

                    break;

                case 2: goto start;
                }
            }

start:
            System.Console.Clear();
            bool sense = dev.KreonSetLockState(out byte[] senseBuffer, state, dev.Timeout, out double duration);

menu:
            DicConsole.WriteLine("Device: {0}", devPath);
            DicConsole.WriteLine("Sending SET LOCK STATE to the device:");
            DicConsole.WriteLine("Command took {0} ms.", duration);
            DicConsole.WriteLine("Sense is {0}.", sense);
            DicConsole.WriteLine("SET LOCK STATE decoded sense:");
            DicConsole.Write("{0}", Sense.PrettifySense(senseBuffer));
            DicConsole.WriteLine();
            DicConsole.WriteLine("Choose what to do:");
            DicConsole.WriteLine("1.- Send command again.");
            DicConsole.WriteLine("2.- Change parameters.");
            DicConsole.WriteLine("0.- Return to Kreon vendor commands menu.");
            DicConsole.Write("Choose: ");

            strDev = System.Console.ReadLine();
            if (!int.TryParse(strDev, out item))
            {
                DicConsole.WriteLine("Not a number. Press any key to continue...");
                System.Console.ReadKey();
                System.Console.Clear();
                goto menu;
            }

            switch (item)
            {
            case 0:
                DicConsole.WriteLine("Returning to Kreon vendor commands menu...");
                return;

            case 1: goto start;

            case 2: goto parameters;

            default:
                DicConsole.WriteLine("Incorrect option. Press any key to continue...");
                System.Console.ReadKey();
                System.Console.Clear();
                goto menu;
            }
        }