Files
Aaru/Aaru.Tests.Devices/SCSI_MMC/MediaTek.cs

170 lines
6.5 KiB
C#

using Aaru.Console;
using Aaru.Decoders.SCSI;
using Aaru.Devices;
using Aaru.Helpers;
namespace Aaru.Tests.Devices;
static partial class ScsiMmc
{
static void MediaTekReadCache(string devPath, Device dev)
{
uint address = 0;
string strDev;
int item;
parameters:
while(true)
{
System.Console.Clear();
AaruConsole.WriteLine(Localization.Device_0, devPath);
AaruConsole.WriteLine(Localization.Parameters_for_MediaTek_READ_CACHE_command);
AaruConsole.WriteLine(Localization.LBA_0, address);
AaruConsole.WriteLine();
AaruConsole.WriteLine(Localization.Choose_what_to_do);
AaruConsole.WriteLine(Localization._1_Change_parameters);
AaruConsole.WriteLine(Localization._2_Send_command_with_these_parameters);
AaruConsole.WriteLine(Localization.Return_to_special_SCSI_MultiMedia_Commands_menu);
strDev = System.Console.ReadLine();
if(!int.TryParse(strDev, out item))
{
AaruConsole.WriteLine(Localization.Not_a_number_Press_any_key_to_continue);
System.Console.ReadKey();
continue;
}
switch(item)
{
case 0:
AaruConsole.WriteLine(Localization.Returning_to_special_SCSI_MultiMedia_Commands_menu);
return;
case 1:
AaruConsole.Write(Localization.LBA_Q);
strDev = System.Console.ReadLine();
if(!uint.TryParse(strDev, out address))
{
AaruConsole.WriteLine(Localization.Not_a_number_Press_any_key_to_continue);
address = 0;
System.Console.ReadKey();
}
break;
case 2:
goto start;
}
}
start:
System.Console.Clear();
AaruConsole.WriteLine(Localization.Sending_READ_CD_to_the_device);
bool sense = dev.ReadCd(out byte[] buffer, out byte[] senseBuffer, address, 2352, 1, MmcSectorTypes.AllTypes,
false, false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None,
MmcSubchannel.None, dev.Timeout, out double duration);
if(sense)
AaruConsole.WriteLine(Localization.READ_CD_failed);
AaruConsole.WriteLine(Localization.Sending_MediaTek_READ_DRAM_to_the_device);
sense = dev.MediaTekReadDram(out buffer, out senseBuffer, 0, 0xB00, dev.Timeout, out duration);
menu:
AaruConsole.WriteLine(Localization.Device_0, devPath);
AaruConsole.WriteLine(Localization.Command_took_0_ms, duration);
AaruConsole.WriteLine(Localization.Sense_is_0, sense);
AaruConsole.WriteLine(Localization.System_error_status_is_0_and_error_number_is_1, dev.Error, dev.LastError);
AaruConsole.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null);
AaruConsole.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer));
AaruConsole.WriteLine(Localization.Sense_buffer_is_0_bytes,
senseBuffer?.Length.ToString() ?? Localization._null);
AaruConsole.WriteLine(Localization.Sense_buffer_is_null_or_empty_0,
ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer));
AaruConsole.WriteLine();
AaruConsole.WriteLine(Localization.Choose_what_to_do);
AaruConsole.WriteLine(Localization.Print_buffer);
AaruConsole.WriteLine(Localization._2_Print_sense_buffer);
AaruConsole.WriteLine(Localization._3_Decode_sense_buffer);
AaruConsole.WriteLine(Localization._4_Send_command_again);
AaruConsole.WriteLine(Localization._5_Change_parameters);
AaruConsole.WriteLine(Localization.Return_to_special_SCSI_MultiMedia_Commands_menu);
AaruConsole.Write(Localization.Choose);
strDev = System.Console.ReadLine();
if(!int.TryParse(strDev, out item))
{
AaruConsole.WriteLine(Localization.Not_a_number_Press_any_key_to_continue);
System.Console.ReadKey();
System.Console.Clear();
goto menu;
}
switch(item)
{
case 0:
AaruConsole.WriteLine(Localization.Returning_to_special_SCSI_MultiMedia_Commands_menu);
return;
case 1:
System.Console.Clear();
AaruConsole.WriteLine(Localization.Device_0, devPath);
AaruConsole.WriteLine(Localization.MediaTek_READ_CACHE_response);
if(buffer != null)
PrintHex.PrintHexArray(buffer, 64);
AaruConsole.WriteLine(Localization.Press_any_key_to_continue);
System.Console.ReadKey();
System.Console.Clear();
AaruConsole.WriteLine(Localization.Device_0, devPath);
goto menu;
case 2:
System.Console.Clear();
AaruConsole.WriteLine(Localization.Device_0, devPath);
AaruConsole.WriteLine(Localization.MediaTek_READ_CACHE_sense);
if(senseBuffer != null)
PrintHex.PrintHexArray(senseBuffer, 64);
AaruConsole.WriteLine(Localization.Press_any_key_to_continue);
System.Console.ReadKey();
System.Console.Clear();
AaruConsole.WriteLine(Localization.Device_0, devPath);
goto menu;
case 3:
System.Console.Clear();
AaruConsole.WriteLine(Localization.Device_0, devPath);
AaruConsole.WriteLine(Localization.MediaTek_READ_CACHE_decoded_sense);
AaruConsole.Write("{0}", Sense.PrettifySense(senseBuffer));
AaruConsole.WriteLine(Localization.Press_any_key_to_continue);
System.Console.ReadKey();
System.Console.Clear();
AaruConsole.WriteLine(Localization.Device_0, devPath);
goto menu;
case 4:
goto start;
case 5:
goto parameters;
default:
AaruConsole.WriteLine(Localization.Incorrect_option_Press_any_key_to_continue);
System.Console.ReadKey();
System.Console.Clear();
goto menu;
}
}
}