/// <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); }
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; } }