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

762 lines
32 KiB
C#
Raw Normal View History

using System;
using System.Linq;
using System.Threading;
using Aaru.Decoders.CD;
using Aaru.Decoders.SCSI;
using Aaru.Devices;
2020-07-20 15:43:52 +01:00
using Aaru.Helpers;
using Aaru.Logging;
namespace Aaru.Tests.Devices;
2022-03-07 07:36:44 +00:00
static partial class ScsiMmc
{
2022-03-06 13:29:38 +00:00
static void CheckGdromReadability(string devPath, Device dev)
{
var tocIsNotBcd = false;
2025-08-22 19:57:09 +01:00
bool sense;
ReadOnlySpan<byte> senseBuffer;
2022-03-06 13:29:38 +00:00
start:
Console.Clear();
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Ejecting_disc);
2022-03-06 13:29:38 +00:00
dev.AllowMediumRemoval(out _, dev.Timeout, out _);
dev.EjectTray(out _, dev.Timeout, out _);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Please_insert_trap_disc_inside);
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadLine();
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Sending_READ_FULL_TOC_to_the_device);
2022-03-06 13:29:38 +00:00
var retries = 0;
2022-03-06 13:29:38 +00:00
do
{
2022-03-06 13:29:38 +00:00
retries++;
sense = dev.ScsiTestUnitReady(out senseBuffer, dev.Timeout, out _);
2024-05-01 04:05:22 +01:00
if(!sense) break;
2022-03-06 13:29:38 +00:00
DecodedSense? decodedSense = Sense.Decode(senseBuffer);
2024-05-01 04:05:22 +01:00
if(decodedSense?.ASC != 0x04) break;
2024-05-01 04:05:22 +01:00
if(decodedSense?.ASCQ != 0x01) break;
2022-03-06 13:29:38 +00:00
Thread.Sleep(2000);
} while(retries < 25);
2022-11-14 01:10:11 +00:00
sense = dev.ReadRawToc(out byte[] buffer, out senseBuffer, 1, dev.Timeout, out _);
2022-03-06 13:29:38 +00:00
if(sense)
{
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.READ_FULL_TOC_failed);
AaruLogging.WriteLine(Sense.PrettifySense(senseBuffer.ToArray()));
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadLine();
2022-03-06 13:29:38 +00:00
return;
}
FullTOC.CDFullTOC? decodedToc = FullTOC.Decode(buffer);
if(decodedToc is null)
{
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Could_not_decode_TOC);
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadLine();
2022-03-06 13:29:38 +00:00
return;
}
// Guaranteed to never fall into default
FullTOC.CDFullTOC toc = decodedToc ?? default(FullTOC.CDFullTOC);
2022-03-06 13:29:38 +00:00
FullTOC.TrackDataDescriptor leadOutTrack = toc.TrackDescriptors.FirstOrDefault(static t => t.POINT == 0xA2);
2022-03-06 13:29:38 +00:00
if(leadOutTrack.POINT != 0xA2)
{
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Cannot_find_lead_out);
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadLine();
2022-03-06 13:29:38 +00:00
return;
}
int min = 0, sec, frame;
2022-11-13 19:38:03 +00:00
switch(leadOutTrack.PMIN)
2022-03-06 13:29:38 +00:00
{
2022-11-13 19:38:03 +00:00
case 122:
tocIsNotBcd = true;
break;
case >= 0xA0 when !tocIsNotBcd:
min += 90;
leadOutTrack.PMIN -= 0x90;
break;
2022-03-06 13:29:38 +00:00
}
2022-03-06 13:29:38 +00:00
if(tocIsNotBcd)
{
min = leadOutTrack.PMIN;
sec = leadOutTrack.PSEC;
frame = leadOutTrack.PFRAME;
}
else
{
min += (leadOutTrack.PMIN >> 4) * 10 + (leadOutTrack.PMIN & 0x0F);
sec = (leadOutTrack.PSEC >> 4) * 10 + (leadOutTrack.PSEC & 0x0F);
frame = (leadOutTrack.PFRAME >> 4) * 10 + (leadOutTrack.PFRAME & 0x0F);
2022-03-06 13:29:38 +00:00
}
int sectors = min * 60 * 75 + sec * 75 + frame - 150;
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Trap_disc_shows_0_sectors, sectors);
2022-03-06 13:29:38 +00:00
if(sectors < 450000)
{
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Trap_disc_doesnt_have_enough_sectors);
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadLine();
2022-03-06 13:29:38 +00:00
return;
}
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Stopping_motor);
2022-03-06 13:29:38 +00:00
dev.StopUnit(out _, dev.Timeout, out _);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Please_MANUALLY_get_the_trap_disc_out_and_put_the_GD_ROM_disc_inside);
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadLine();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Waiting_5_seconds);
2022-03-06 13:29:38 +00:00
Thread.Sleep(5000);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Sending_READ_FULL_TOC_to_the_device);
2022-03-06 13:29:38 +00:00
retries = 0;
do
{
retries++;
sense = dev.ReadRawToc(out buffer, out senseBuffer, 1, dev.Timeout, out _);
2024-05-01 04:05:22 +01:00
if(!sense) break;
2022-03-06 13:29:38 +00:00
DecodedSense? decodedSense = Sense.Decode(senseBuffer);
2024-05-01 04:05:22 +01:00
if(decodedSense?.ASC != 0x04) break;
2024-05-01 04:05:22 +01:00
if(decodedSense?.ASCQ != 0x01) break;
2022-03-06 13:29:38 +00:00
} while(retries < 25);
2022-03-06 13:29:38 +00:00
if(sense)
{
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.READ_FULL_TOC_failed);
AaruLogging.WriteLine(Sense.PrettifySense(senseBuffer.ToArray()));
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadLine();
2022-03-06 13:29:38 +00:00
return;
}
2022-03-06 13:29:38 +00:00
decodedToc = FullTOC.Decode(buffer);
2022-03-06 13:29:38 +00:00
if(decodedToc is null)
{
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Could_not_decode_TOC);
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadLine();
2022-03-06 13:29:38 +00:00
return;
}
// Guaranteed to never fall into default
2024-05-01 04:05:22 +01:00
toc = decodedToc ?? default(FullTOC.CDFullTOC);
FullTOC.TrackDataDescriptor newLeadOutTrack = toc.TrackDescriptors.FirstOrDefault(static t => t.POINT == 0xA2);
2022-03-06 13:29:38 +00:00
if(newLeadOutTrack.POINT != 0xA2)
{
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Cannot_find_lead_out);
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadLine();
2022-03-06 13:29:38 +00:00
return;
}
2024-05-01 04:05:22 +01:00
if(newLeadOutTrack.PMIN >= 0xA0 && !tocIsNotBcd) newLeadOutTrack.PMIN -= 0x90;
2022-03-06 13:29:38 +00:00
if(newLeadOutTrack.PMIN != leadOutTrack.PMIN ||
newLeadOutTrack.PSEC != leadOutTrack.PSEC ||
newLeadOutTrack.PFRAME != leadOutTrack.PFRAME)
{
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Lead_out_has_changed_this_drive_does_not_support_hot_swapping_discs);
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadLine();
2022-03-06 13:29:38 +00:00
return;
}
2022-03-06 13:29:38 +00:00
dev.SetCdSpeed(out _, RotationalControl.PureCav, 170, 0, dev.Timeout, out _);
2025-08-17 06:11:22 +01:00
AaruLogging.Write(Localization.Reading_LBA_zero);
2024-05-01 04:05:22 +01:00
bool lba0Result = dev.ReadCd(out byte[] lba0Buffer,
2025-08-22 19:57:09 +01:00
out ReadOnlySpan<byte> lba0Sense,
2024-05-01 04:05:22 +01:00
0,
2352,
1,
MmcSectorTypes.AllTypes,
false,
false,
true,
MmcHeaderCodes.AllHeaders,
true,
true,
MmcErrorField.None,
MmcSubchannel.None,
dev.Timeout,
out _);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(lba0Result ? Localization.FAIL : Localization.Success);
2025-08-17 06:11:22 +01:00
AaruLogging.Write(Localization.Reading_LBA_zero_as_audio_scrambled);
2024-05-01 04:05:22 +01:00
bool lba0ScrambledResult = dev.ReadCd(out byte[] lba0ScrambledBuffer,
2025-08-22 19:57:09 +01:00
out ReadOnlySpan<byte> lba0ScrambledSense,
2024-05-01 04:05:22 +01:00
0,
2352,
1,
MmcSectorTypes.Cdda,
false,
false,
false,
MmcHeaderCodes.None,
true,
false,
MmcErrorField.None,
MmcSubchannel.None,
dev.Timeout,
out _);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(lba0ScrambledResult ? Localization.FAIL : Localization.Success);
2025-08-17 06:11:22 +01:00
AaruLogging.Write(Localization.Reading_LBA_100000);
2022-03-06 13:29:38 +00:00
2024-05-01 04:05:22 +01:00
bool lba100000Result = dev.ReadCd(out byte[] lba100000Buffer,
2025-08-22 19:57:09 +01:00
out ReadOnlySpan<byte> lba100000Sense,
2024-05-01 04:05:22 +01:00
100000,
2352,
1,
MmcSectorTypes.AllTypes,
false,
false,
true,
MmcHeaderCodes.AllHeaders,
true,
true,
MmcErrorField.None,
MmcSubchannel.None,
dev.Timeout,
out _);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(lba100000Result ? Localization.FAIL : Localization.Success);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.Write(Localization.Reading_LBA_50000);
2022-03-06 13:29:38 +00:00
2024-05-01 04:05:22 +01:00
bool lba50000Result = dev.ReadCd(out byte[] lba50000Buffer,
2025-08-22 19:57:09 +01:00
out ReadOnlySpan<byte> lba50000Sense,
2024-05-01 04:05:22 +01:00
50000,
2352,
1,
MmcSectorTypes.AllTypes,
false,
false,
true,
MmcHeaderCodes.AllHeaders,
true,
true,
MmcErrorField.None,
MmcSubchannel.None,
dev.Timeout,
out _);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(lba50000Result ? Localization.FAIL : Localization.Success);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.Write(Localization.Reading_LBA_450000);
2022-03-06 13:29:38 +00:00
2024-05-01 04:05:22 +01:00
bool lba450000Result = dev.ReadCd(out byte[] lba450000Buffer,
2025-08-22 19:57:09 +01:00
out ReadOnlySpan<byte> lba450000Sense,
2024-05-01 04:05:22 +01:00
450000,
2352,
1,
MmcSectorTypes.AllTypes,
false,
false,
true,
MmcHeaderCodes.AllHeaders,
true,
true,
MmcErrorField.None,
MmcSubchannel.None,
dev.Timeout,
out _);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(lba450000Result ? Localization.FAIL : Localization.Success);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.Write(Localization.Reading_LBA_400000);
2022-03-06 13:29:38 +00:00
2024-05-01 04:05:22 +01:00
bool lba400000Result = dev.ReadCd(out byte[] lba400000Buffer,
2025-08-22 19:57:09 +01:00
out ReadOnlySpan<byte> lba400000Sense,
2024-05-01 04:05:22 +01:00
400000,
2352,
1,
MmcSectorTypes.AllTypes,
false,
false,
true,
MmcHeaderCodes.AllHeaders,
true,
true,
MmcErrorField.None,
MmcSubchannel.None,
dev.Timeout,
out _);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(lba400000Result ? Localization.FAIL : Localization.Success);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.Write(Localization.Reading_LBA_45000);
2022-03-06 13:29:38 +00:00
2024-05-01 04:05:22 +01:00
bool lba45000Result = dev.ReadCd(out byte[] lba45000Buffer,
2025-08-22 19:57:09 +01:00
out ReadOnlySpan<byte> lba45000Sense,
2024-05-01 04:05:22 +01:00
45000,
2352,
1,
MmcSectorTypes.AllTypes,
false,
false,
true,
MmcHeaderCodes.AllHeaders,
true,
true,
MmcErrorField.None,
MmcSubchannel.None,
dev.Timeout,
out _);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(lba45000Result ? Localization.FAIL : Localization.Success);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.Write(Localization.Reading_LBA_44990);
2022-03-06 13:29:38 +00:00
2024-05-01 04:05:22 +01:00
bool lba44990Result = dev.ReadCd(out byte[] lba44990Buffer,
2025-08-22 19:57:09 +01:00
out ReadOnlySpan<byte> lba44990Sense,
2024-05-01 04:05:22 +01:00
44990,
2352,
1,
MmcSectorTypes.AllTypes,
false,
false,
true,
MmcHeaderCodes.AllHeaders,
true,
true,
MmcErrorField.None,
MmcSubchannel.None,
dev.Timeout,
out _);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(lba44990Result ? Localization.FAIL : Localization.Success);
2022-03-06 13:29:38 +00:00
menu:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(lba450000Result
? Localization.Device_cannot_read_HD_area
: Localization.Device_can_read_HD_area);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.LBA_zero_sense_is_0_buffer_is_1_sense_buffer_is_2,
2024-05-01 04:05:22 +01:00
lba0Result,
lba0Buffer is null
? Localization._null
2024-05-01 04:05:22 +01:00
: ArrayHelpers.ArrayIsNullOrEmpty(lba0Buffer)
? Localization.empty
: string.Format(Localization._0_bytes, lba0Buffer.Length),
2025-08-22 19:57:09 +01:00
lba0Sense.IsEmpty ? Localization.empty : $"{lba0Sense.Length}");
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.LBA_zero_scrambled_sense_is_0_buffer_is_1_sense_buffer_is_2_,
lba0ScrambledResult,
lba0ScrambledBuffer is null
? Localization._null
2024-05-01 04:05:22 +01:00
: ArrayHelpers.ArrayIsNullOrEmpty(lba0ScrambledBuffer)
? Localization.empty
: string.Format(Localization._0_bytes, lba0ScrambledBuffer.Length),
2025-08-22 19:57:09 +01:00
lba0ScrambledSense.IsEmpty ? Localization.empty : $"{lba0ScrambledSense.Length}");
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.LBA_44990_sense_is_0_buffer_is_1_sense_buffer_is_2,
2024-05-01 04:05:22 +01:00
lba44990Result,
2022-03-06 13:29:38 +00:00
lba44990Buffer is null
? Localization._null
2024-05-01 04:05:22 +01:00
: ArrayHelpers.ArrayIsNullOrEmpty(lba44990Buffer)
? Localization.empty
: string.Format(Localization._0_bytes, lba44990Buffer.Length),
2025-08-22 19:57:09 +01:00
lba44990Sense.IsEmpty ? Localization.empty : $"{lba44990Sense.Length}");
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.LBA_45000_sense_is_0_buffer_is_1_sense_buffer_is_2,
2024-05-01 04:05:22 +01:00
lba45000Result,
2022-03-06 13:29:38 +00:00
lba45000Buffer is null
? Localization._null
2024-05-01 04:05:22 +01:00
: ArrayHelpers.ArrayIsNullOrEmpty(lba45000Buffer)
? Localization.empty
: string.Format(Localization._0_bytes, lba45000Buffer.Length),
2025-08-22 19:57:09 +01:00
lba45000Sense.IsEmpty ? Localization.empty : $"{lba45000Sense.Length}");
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.LBA_50000_sense_is_0_buffer_is_1_sense_buffer_is_2,
2024-05-01 04:05:22 +01:00
lba50000Result,
2022-03-06 13:29:38 +00:00
lba50000Buffer is null
? Localization._null
2024-05-01 04:05:22 +01:00
: ArrayHelpers.ArrayIsNullOrEmpty(lba50000Buffer)
? Localization.empty
: string.Format(Localization._0_bytes, lba50000Buffer.Length),
2025-08-22 19:57:09 +01:00
lba50000Sense.IsEmpty ? Localization.empty : $"{lba50000Sense.Length}");
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.LBA_100000_sense_is_0_buffer_is_1_sense_buffer_is_2,
2024-05-01 04:05:22 +01:00
lba100000Result,
2022-03-06 13:29:38 +00:00
lba100000Buffer is null
? Localization._null
2024-05-01 04:05:22 +01:00
: ArrayHelpers.ArrayIsNullOrEmpty(lba100000Buffer)
? Localization.empty
: string.Format(Localization._0_bytes, lba100000Buffer.Length),
2025-08-22 19:57:09 +01:00
lba100000Sense.IsEmpty ? Localization.empty : $"{lba100000Sense.Length}");
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.LBA_400000_sense_is_0_buffer_is_1_sense_buffer_is_2,
2024-05-01 04:05:22 +01:00
lba400000Result,
2022-03-06 13:29:38 +00:00
lba400000Buffer is null
? Localization._null
2024-05-01 04:05:22 +01:00
: ArrayHelpers.ArrayIsNullOrEmpty(lba400000Buffer)
? Localization.empty
: string.Format(Localization._0_bytes, lba400000Buffer.Length),
2025-08-22 19:57:09 +01:00
lba400000Sense.IsEmpty ? Localization.empty : $"{lba400000Sense.Length}");
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.LBA_450000_sense_is_0_buffer_is_1_sense_buffer_is_2,
2024-05-01 04:05:22 +01:00
lba450000Result,
2022-03-06 13:29:38 +00:00
lba450000Buffer is null
? Localization._null
2024-05-01 04:05:22 +01:00
: ArrayHelpers.ArrayIsNullOrEmpty(lba450000Buffer)
? Localization.empty
: string.Format(Localization._0_bytes, lba450000Buffer.Length),
2025-08-22 19:57:09 +01:00
lba450000Sense.IsEmpty ? Localization.empty : $"{lba450000Sense.Length}");
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine();
AaruLogging.WriteLine(Localization.Choose_what_to_do);
AaruLogging.WriteLine(Localization._1_Print_LBA_zero_buffer);
AaruLogging.WriteLine(Localization._2_Print_LBA_zero_sense_buffer);
AaruLogging.WriteLine(Localization._3_Decode_LBA_zero_sense_buffer);
AaruLogging.WriteLine(Localization._4_Print_LBA_zero_scrambled_buffer);
AaruLogging.WriteLine(Localization._5_Print_LBA_zero_scrambled_sense_buffer);
AaruLogging.WriteLine(Localization._6_Decode_LBA_zero_scrambled_sense_buffer);
AaruLogging.WriteLine(Localization._7_Print_LBA_44990_buffer);
AaruLogging.WriteLine(Localization._8_Print_LBA_44990_sense_buffer);
AaruLogging.WriteLine(Localization._9_Decode_LBA_44990_sense_buffer);
AaruLogging.WriteLine(Localization._10_Print_LBA_45000_buffer);
AaruLogging.WriteLine(Localization._11_Print_LBA_45000_sense_buffer);
AaruLogging.WriteLine(Localization._12_Decode_LBA_45000_sense_buffer);
AaruLogging.WriteLine(Localization._13_Print_LBA_50000_buffer);
AaruLogging.WriteLine(Localization._14_Print_LBA_50000_sense_buffer);
AaruLogging.WriteLine(Localization._15_Decode_LBA_50000_sense_buffer);
AaruLogging.WriteLine(Localization._16_Print_LBA_100000_buffer);
AaruLogging.WriteLine(Localization._17_Print_LBA_100000_sense_buffer);
AaruLogging.WriteLine(Localization._18_Decode_LBA_100000_sense_buffer);
AaruLogging.WriteLine(Localization._19_Print_LBA_400000_buffer);
AaruLogging.WriteLine(Localization._20_Print_LBA_400000_sense_buffer);
AaruLogging.WriteLine(Localization._21_Decode_LBA_400000_sense_buffer);
AaruLogging.WriteLine(Localization._22_Print_LBA_450000_buffer);
AaruLogging.WriteLine(Localization._23_Print_LBA_450000_sense_buffer);
AaruLogging.WriteLine(Localization._24_Decode_LBA_450000_sense_buffer);
AaruLogging.WriteLine(Localization._25_Send_command_again);
AaruLogging.WriteLine(Localization.Return_to_special_SCSI_MultiMedia_Commands_menu);
AaruLogging.Write(Localization.Choose);
2022-03-06 13:29:38 +00:00
string strDev = Console.ReadLine();
2022-03-06 13:29:38 +00:00
2022-11-14 01:10:11 +00:00
if(!int.TryParse(strDev, out int item))
2022-03-06 13:29:38 +00:00
{
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Not_a_number_Press_any_key_to_continue);
Console.ReadKey();
Console.Clear();
2022-03-06 13:29:38 +00:00
goto menu;
}
switch(item)
{
case 0:
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Returning_to_special_SCSI_MultiMedia_Commands_menu);
return;
2022-03-06 13:29:38 +00:00
case 1:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_zero_response);
2024-05-01 04:05:22 +01:00
if(buffer != null) PrintHex.PrintHexArray(lba0Buffer, 64);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 2:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_zero_sense);
2025-08-22 19:57:09 +01:00
if(senseBuffer != null) PrintHex.PrintHexArray(lba0Sense.ToArray(), 64);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 3:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_zero_decoded_sense);
AaruLogging.Write(Sense.PrettifySense(lba0Sense.ToArray()));
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 4:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_zero_scrambled_response);
2024-05-01 04:05:22 +01:00
if(buffer != null) PrintHex.PrintHexArray(lba0ScrambledBuffer, 64);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 5:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_zero_scrambled_sense);
2025-08-22 19:57:09 +01:00
if(senseBuffer != null) PrintHex.PrintHexArray(lba0ScrambledSense.ToArray(), 64);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 6:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_zero_scrambled_decoded_sense);
AaruLogging.Write(Sense.PrettifySense(lba0ScrambledSense.ToArray()));
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 7:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_44990_response);
2024-05-01 04:05:22 +01:00
if(buffer != null) PrintHex.PrintHexArray(lba44990Buffer, 64);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 8:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_44990_sense);
2025-08-22 19:57:09 +01:00
if(senseBuffer != null) PrintHex.PrintHexArray(lba44990Sense.ToArray(), 64);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 9:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_44990_decoded_sense);
AaruLogging.Write(Sense.PrettifySense(lba44990Sense.ToArray()));
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 10:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_45000_response);
2024-05-01 04:05:22 +01:00
if(buffer != null) PrintHex.PrintHexArray(lba45000Buffer, 64);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 11:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_45000_sense);
2025-08-22 19:57:09 +01:00
if(senseBuffer != null) PrintHex.PrintHexArray(lba45000Sense.ToArray(), 64);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 12:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_45000_decoded_sense);
AaruLogging.Write(Sense.PrettifySense(lba45000Sense.ToArray()));
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 13:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_50000_response);
2024-05-01 04:05:22 +01:00
if(buffer != null) PrintHex.PrintHexArray(lba50000Buffer, 64);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 14:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_50000_sense);
2025-08-22 19:57:09 +01:00
if(senseBuffer != null) PrintHex.PrintHexArray(lba50000Sense.ToArray(), 64);
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 15:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_50000_decoded_sense);
AaruLogging.Write(Sense.PrettifySense(lba50000Sense.ToArray()));
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 16:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_100000_response);
2024-05-01 04:05:22 +01:00
if(buffer != null) PrintHex.PrintHexArray(lba100000Buffer, 64);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 17:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_100000_sense);
2022-03-06 13:29:38 +00:00
2025-08-22 19:57:09 +01:00
if(senseBuffer != null) PrintHex.PrintHexArray(lba100000Sense.ToArray(), 64);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 18:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_100000_decoded_sense);
AaruLogging.Write(Sense.PrettifySense(lba100000Sense.ToArray()));
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 19:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_400000_response);
2022-03-06 13:29:38 +00:00
2024-05-01 04:05:22 +01:00
if(buffer != null) PrintHex.PrintHexArray(lba400000Buffer, 64);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 20:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_400000_sense);
2022-03-06 13:29:38 +00:00
2025-08-22 19:57:09 +01:00
if(senseBuffer != null) PrintHex.PrintHexArray(lba400000Sense.ToArray(), 64);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 21:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_400000_decoded_sense);
AaruLogging.Write(Sense.PrettifySense(lba400000Sense.ToArray()));
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 22:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_450000_response);
2022-03-06 13:29:38 +00:00
2024-05-01 04:05:22 +01:00
if(buffer != null) PrintHex.PrintHexArray(lba450000Buffer, 64);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 23:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_450000_sense);
2022-03-06 13:29:38 +00:00
2025-08-22 19:57:09 +01:00
if(senseBuffer != null) PrintHex.PrintHexArray(lba450000Sense.ToArray(), 64);
2022-03-06 13:29:38 +00:00
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 24:
Console.Clear();
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Device_0, devPath);
AaruLogging.WriteLine(Localization.LBA_450000_decoded_sense);
AaruLogging.Write(Sense.PrettifySense(lba450000Sense.ToArray()));
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Press_any_key_to_continue);
Console.ReadKey();
2022-03-06 13:29:38 +00:00
goto menu;
case 25:
goto start;
2022-03-06 13:29:38 +00:00
default:
2025-08-17 06:11:22 +01:00
AaruLogging.WriteLine(Localization.Incorrect_option_Press_any_key_to_continue);
Console.ReadKey();
Console.Clear();
goto menu;
}
}
}