diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs b/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs index 0a278edcd..39cc6543f 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs @@ -148,15 +148,15 @@ partial class Dump bool cdiReadyReadAsAudio, int offsetBytes, int sectorsForOffset, Dictionary smallestPregapLbaPerTrack) { - ulong sectorSpeedStart = 0; // Used to calculate correct speed - bool sense; // Sense indicator - byte[] cmdBuf; // Data buffer - byte[] senseBuf; // Sense buffer - double cmdDuration; // Command execution time - const uint sectorSize = 2352; // Full sector size - Track firstTrack = tracks.FirstOrDefault(); - uint blocksToRead; // How many sectors to read at once - var outputOptical = _outputPlugin as IWritableOpticalImage; + ulong sectorSpeedStart = 0; // Used to calculate correct speed + bool sense; // Sense indicator + byte[] cmdBuf; // Data buffer + ReadOnlySpan senseBuf; // Sense buffer + double cmdDuration; // Command execution time + const uint sectorSize = 2352; // Full sector size + Track firstTrack = tracks.FirstOrDefault(); + uint blocksToRead; // How many sectors to read at once + var outputOptical = _outputPlugin as IWritableOpticalImage; if(firstTrack is null) return; @@ -337,7 +337,7 @@ partial class Dump } else { - _errorLog?.WriteLine(i + r, _dev.Error, _dev.LastError, senseBuf); + _errorLog?.WriteLine(i + r, _dev.Error, _dev.LastError, senseBuf.ToArray()); leadOutExtents.Add(i + r, firstTrack.EndSector); @@ -469,7 +469,7 @@ partial class Dump } else { - _errorLog?.WriteLine(i, _dev.Error, _dev.LastError, senseBuf); + _errorLog?.WriteLine(i, _dev.Error, _dev.LastError, senseBuf.ToArray()); _resume.NextBlock = firstTrack.EndSector + 1; diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs index 53a6fe863..7a836c9f7 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs @@ -101,13 +101,13 @@ partial class Dump Dictionary isrcs, ref string mcn, HashSet subchannelExtents, Dictionary smallestPregapLbaPerTrack) { - ulong sectorSpeedStart = 0; // Used to calculate correct speed - uint blocksToRead; // How many sectors to read at once - bool sense = true; // Sense indicator - byte[] cmdBuf = null; // Data buffer - byte[] senseBuf = null; // Sense buffer - double cmdDuration = 0; // Command execution time - const uint sectorSize = 2352; // Full sector size + ulong sectorSpeedStart = 0; // Used to calculate correct speed + uint blocksToRead; // How many sectors to read at once + bool sense = true; // Sense indicator + byte[] cmdBuf = null; // Data buffer + ReadOnlySpan senseBuf = null; // Sense buffer + double cmdDuration = 0; // Command execution time + const uint sectorSize = 2352; // Full sector size newTrim = false; PlextorSubchannel supportedPlextorSubchannel; var outputFormat = _outputPlugin as IWritableImage; @@ -859,7 +859,7 @@ partial class Dump } else { - _errorLog?.WriteLine(i + r, _dev.Error, _dev.LastError, senseBuf); + _errorLog?.WriteLine(i + r, _dev.Error, _dev.LastError, senseBuf.ToArray()); // Write empty data _writeStopwatch.Restart(); @@ -1054,7 +1054,7 @@ partial class Dump continue; } - _errorLog?.WriteLine(firstSectorToRead, _dev.Error, _dev.LastError, senseBuf); + _errorLog?.WriteLine(firstSectorToRead, _dev.Error, _dev.LastError, senseBuf.ToArray()); // TODO: Reset device after X errors if(_stopOnError) return; // TODO: Return more cleanly diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs index 6476b3c0b..dddf745a0 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs @@ -80,13 +80,13 @@ partial class Dump ref string mcn, HashSet subchannelExtents, Dictionary smallestPregapLbaPerTrack, bool supportsLongSectors) { - bool sense = true; // Sense indicator - byte[] cmdBuf = null; // Data buffer - double cmdDuration; // Command execution time - const uint sectorSize = 2352; // Full sector size - byte[] senseBuf = null; // Sense buffer - PlextorSubchannel supportedPlextorSubchannel; - var outputOptical = _outputPlugin as IWritableOpticalImage; + bool sense = true; // Sense indicator + byte[] cmdBuf = null; // Data buffer + double cmdDuration; // Command execution time + const uint sectorSize = 2352; // Full sector size + ReadOnlySpan senseBuf = null; // Sense buffer + PlextorSubchannel supportedPlextorSubchannel; + var outputOptical = _outputPlugin as IWritableOpticalImage; supportedPlextorSubchannel = supportedSubchannel switch { @@ -457,7 +457,7 @@ partial class Dump if(sense || _dev.Error) { - _errorLog?.WriteLine(badSector, _dev.Error, _dev.LastError, senseBuf); + _errorLog?.WriteLine(badSector, _dev.Error, _dev.LastError, senseBuf.ToArray()); if(!runningPersistent) continue; @@ -465,9 +465,8 @@ partial class Dump // MEDIUM ERROR, retry with ignore error below if(decSense is { ASC: 0x11 }) - { - if(!sectorsNotEvenPartial.Contains(badSector)) sectorsNotEvenPartial.Add(badSector); - } + if(!sectorsNotEvenPartial.Contains(badSector)) + sectorsNotEvenPartial.Add(badSector); } // Because one block has been partially used to fix the offset @@ -499,7 +498,7 @@ partial class Dump sectorsNotEvenPartial.Remove(badSector); } else - _errorLog?.WriteLine(badSector, _dev.Error, _dev.LastError, senseBuf); + _errorLog?.WriteLine(badSector, _dev.Error, _dev.LastError, senseBuf.ToArray()); if(supportedSubchannel != MmcSubchannel.None) { @@ -647,7 +646,7 @@ partial class Dump if(sense || _dev.Error) { - _errorLog?.WriteLine(badSector, _dev.Error, _dev.LastError, senseBuf); + _errorLog?.WriteLine(badSector, _dev.Error, _dev.LastError, senseBuf.ToArray()); continue; } @@ -742,12 +741,12 @@ partial class Dump Dictionary isrcs, ref string mcn, HashSet subchannelExtents, Dictionary smallestPregapLbaPerTrack) { - bool sense = true; // Sense indicator - byte[] cmdBuf = null; // Data buffer - double cmdDuration; // Command execution time - byte[] senseBuf = null; // Sense buffer - PlextorSubchannel supportedPlextorSubchannel; - var outputOptical = _outputPlugin as IWritableOpticalImage; + bool sense = true; // Sense indicator + byte[] cmdBuf = null; // Data buffer + double cmdDuration; // Command execution time + ReadOnlySpan senseBuf = null; // Sense buffer + PlextorSubchannel supportedPlextorSubchannel; + var outputOptical = _outputPlugin as IWritableOpticalImage; if(supportedSubchannel == MmcSubchannel.None || desiredSubchannel == MmcSubchannel.None) return; @@ -836,7 +835,7 @@ partial class Dump if(sense || _dev.Error) { - _errorLog?.WriteLine(badSector, _dev.Error, _dev.LastError, senseBuf); + _errorLog?.WriteLine(badSector, _dev.Error, _dev.LastError, senseBuf.ToArray()); continue; } diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs b/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs index b421c9524..f8fc7bf2d 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs @@ -90,11 +90,11 @@ partial class Dump ref string mcn, Track[] tracks, HashSet subchannelExtents, Dictionary smallestPregapLbaPerTrack) { - byte[] cmdBuf = null; // Data buffer - const uint sectorSize = 2352; // Full sector size - bool sense = true; // Sense indicator - byte[] senseBuf = null; - var outputOptical = _outputPlugin as IWritableOpticalImage; + byte[] cmdBuf = null; // Data buffer + const uint sectorSize = 2352; // Full sector size + bool sense = true; // Sense indicator + ReadOnlySpan senseBuf = null; + var outputOptical = _outputPlugin as IWritableOpticalImage; UpdateStatus?.Invoke(Localization.Core.Reading_lead_outs); @@ -253,7 +253,7 @@ partial class Dump } else { - _errorLog?.WriteLine(i, _dev.Error, _dev.LastError, senseBuf); + _errorLog?.WriteLine(i, _dev.Error, _dev.LastError, senseBuf.ToArray()); // TODO: Reset device after X errors if(_stopOnError) return; // TODO: Return more cleanly @@ -329,11 +329,11 @@ partial class Dump ref string mcn, Track[] tracks, HashSet subchannelExtents, Dictionary smallestPregapLbaPerTrack) { - byte[] cmdBuf = null; // Data buffer - const uint sectorSize = 2352; // Full sector size - bool sense = true; // Sense indicator - byte[] senseBuf = null; - var outputOptical = _outputPlugin as IWritableOpticalImage; + byte[] cmdBuf = null; // Data buffer + const uint sectorSize = 2352; // Full sector size + bool sense = true; // Sense indicator + ReadOnlySpan senseBuf = null; + var outputOptical = _outputPlugin as IWritableOpticalImage; AaruLogging.WriteLine("Retrying lead-outs"); @@ -492,7 +492,7 @@ partial class Dump } else { - _errorLog?.WriteLine(i, _dev.Error, _dev.LastError, senseBuf); + _errorLog?.WriteLine(i, _dev.Error, _dev.LastError, senseBuf.ToArray()); // TODO: Reset device after X errors if(_stopOnError) return; // TODO: Return more cleanly diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Plextor.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Plextor.cs index 7e23bc880..5531de406 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Plextor.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Plextor.cs @@ -46,8 +46,8 @@ partial class Dump /// Supported subchannel type /// Time spent sending commands to the drive /// true if an error occured, false otherwise - bool ReadPlextorWithSubchannel(out byte[] cmdBuf, out byte[] senseBuf, uint firstSectorToRead, uint blockSize, - uint blocksToRead, PlextorSubchannel supportedPlextorSubchannel, + bool ReadPlextorWithSubchannel(out byte[] cmdBuf, out ReadOnlySpan senseBuf, uint firstSectorToRead, + uint blockSize, uint blocksToRead, PlextorSubchannel supportedPlextorSubchannel, out double cmdDuration) { bool sense; @@ -140,7 +140,7 @@ partial class Dump cmdBuf = new byte[2352 * blocksToRead + subSize * blocksToRead]; - for(var b = 0; b < blocksToRead; b++) + for(int b = 0; b < blocksToRead; b++) { Array.Copy(dataBuf, 2352 * b, cmdBuf, (2352 + subSize) * b, 2352); Array.Copy(subBuf, subSize * b, cmdBuf, (2352 + subSize) * b + 2352, subSize); diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs index b93fab69d..57ff5e8b2 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs @@ -84,13 +84,13 @@ partial class Dump Dictionary isrcs, ref string mcn, HashSet subchannelExtents, Dictionary smallestPregapLbaPerTrack) { - bool sense = true; // Sense indicator - byte[] cmdBuf = null; // Data buffer - double cmdDuration = 0; // Command execution time - const uint sectorSize = 2352; // Full sector size - PlextorSubchannel supportedPlextorSubchannel; - byte[] senseBuf = null; - var outputOptical = _outputPlugin as IWritableOpticalImage; + bool sense = true; // Sense indicator + byte[] cmdBuf = null; // Data buffer + double cmdDuration = 0; // Command execution time + const uint sectorSize = 2352; // Full sector size + PlextorSubchannel supportedPlextorSubchannel; + ReadOnlySpan senseBuf = null; + var outputOptical = _outputPlugin as IWritableOpticalImage; supportedPlextorSubchannel = supportedSubchannel switch { @@ -387,7 +387,7 @@ partial class Dump if(sense || _dev.Error) { - _errorLog?.WriteLine(badSectorToRead, _dev.Error, _dev.LastError, senseBuf); + _errorLog?.WriteLine(badSectorToRead, _dev.Error, _dev.LastError, senseBuf.ToArray()); continue; } diff --git a/Aaru.Core/Devices/Dumping/LinearMemory/Retrode.cs b/Aaru.Core/Devices/Dumping/LinearMemory/Retrode.cs index 0866620f2..32d741f89 100644 --- a/Aaru.Core/Devices/Dumping/LinearMemory/Retrode.cs +++ b/Aaru.Core/Devices/Dumping/LinearMemory/Retrode.cs @@ -192,12 +192,12 @@ public partial class Dump ? MediaType.MegaDriveCartridge : MediaType.SNESGamePak; - uint blocksToRead = 64; - double totalDuration = 0; - double currentSpeed = 0; - double maxSpeed = double.MinValue; - double minSpeed = double.MaxValue; - byte[] senseBuf; + uint blocksToRead = 64; + double totalDuration = 0; + double currentSpeed = 0; + double maxSpeed = double.MinValue; + double minSpeed = double.MaxValue; + ReadOnlySpan senseBuf; if(_outputPlugin is not IByteAddressableImage outputBai || !outputBai.SupportedMediaTypes.Contains(mediaType)) { @@ -232,7 +232,8 @@ public partial class Dump uint romSectors = romSize / 512; uint romRemaining = romSize % 512; - UpdateStatus?.Invoke(string.Format(Localization.Core.Cartridge_has_0_bytes_1, romSize, + UpdateStatus?.Invoke(string.Format(Localization.Core.Cartridge_has_0_bytes_1, + romSize, ByteSize.FromBytes(romSize).ToString("0.000"))); UpdateStatus?.Invoke(string.Format(Localization.Core.Media_identified_as_0, mediaType)); diff --git a/Aaru.Core/Devices/Dumping/MiniDisc.cs b/Aaru.Core/Devices/Dumping/MiniDisc.cs index 8c39c3334..000cdf408 100644 --- a/Aaru.Core/Devices/Dumping/MiniDisc.cs +++ b/Aaru.Core/Devices/Dumping/MiniDisc.cs @@ -573,7 +573,7 @@ partial class Dump md6 = Modes.EncodeMode6(md, _dev.ScsiType); UpdateStatus?.Invoke(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks); - sense = _dev.ModeSelect(md6, out byte[] senseBuf, true, false, _dev.Timeout, out _); + sense = _dev.ModeSelect(md6, out ReadOnlySpan senseBuf, true, false, _dev.Timeout, out _); if(sense) { diff --git a/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs b/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs index 9f6794917..e68fc7440 100644 --- a/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs +++ b/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs @@ -59,16 +59,16 @@ public partial class Dump [SuppressMessage("ReSharper", "JoinDeclarationAndInitializer")] void DumpMs() { - const ushort sbcProfile = 0x0001; - const uint blockSize = 512; - double totalDuration = 0; - double currentSpeed = 0; - double maxSpeed = double.MinValue; - double minSpeed = double.MaxValue; - uint blocksToRead = 64; - MediaType dskType; - bool sense; - byte[] senseBuf; + const ushort sbcProfile = 0x0001; + const uint blockSize = 512; + double totalDuration = 0; + double currentSpeed = 0; + double maxSpeed = double.MinValue; + double minSpeed = double.MaxValue; + uint blocksToRead = 64; + MediaType dskType; + bool sense; + ReadOnlySpan senseBuf; if(_outputPlugin is not IWritableImage outputFormat) { diff --git a/Aaru.Core/Devices/Dumping/PlayStationPortable/UMD.cs b/Aaru.Core/Devices/Dumping/PlayStationPortable/UMD.cs index 1600abffa..50f19f671 100644 --- a/Aaru.Core/Devices/Dumping/PlayStationPortable/UMD.cs +++ b/Aaru.Core/Devices/Dumping/PlayStationPortable/UMD.cs @@ -58,14 +58,14 @@ public partial class Dump [SuppressMessage("ReSharper", "JoinDeclarationAndInitializer")] void DumpUmd() { - const uint blockSize = 2048; - const MediaType dskType = MediaType.UMD; - uint blocksToRead = 16; - double totalDuration = 0; - double currentSpeed = 0; - double maxSpeed = double.MinValue; - double minSpeed = double.MaxValue; - byte[] senseBuf; + const uint blockSize = 2048; + const MediaType dskType = MediaType.UMD; + uint blocksToRead = 16; + double totalDuration = 0; + double currentSpeed = 0; + double maxSpeed = double.MinValue; + double minSpeed = double.MaxValue; + ReadOnlySpan senseBuf; if(_outputPlugin is not IWritableOpticalImage outputOptical) { diff --git a/Aaru.Core/Devices/Dumping/SCSI.cs b/Aaru.Core/Devices/Dumping/SCSI.cs index 6124c1e42..8ca449f00 100644 --- a/Aaru.Core/Devices/Dumping/SCSI.cs +++ b/Aaru.Core/Devices/Dumping/SCSI.cs @@ -52,7 +52,7 @@ public partial class Dump { InitProgress?.Invoke(); deviceGotReset: - bool sense = _dev.ScsiTestUnitReady(out byte[] senseBuf, _dev.Timeout, out _); + bool sense = _dev.ScsiTestUnitReady(out ReadOnlySpan senseBuf, _dev.Timeout, out _); if(sense) { @@ -198,7 +198,7 @@ public partial class Dump } default: StoppingErrorMessage?.Invoke(string.Format(Localization.Core.Error_testing_unit_was_ready_0, - Sense.PrettifySense(senseBuf))); + Sense.PrettifySense(senseBuf.ToArray()))); return; } diff --git a/Aaru.Core/Devices/Dumping/SSC.cs b/Aaru.Core/Devices/Dumping/SSC.cs index 87587044d..a8435a9a9 100644 --- a/Aaru.Core/Devices/Dumping/SSC.cs +++ b/Aaru.Core/Devices/Dumping/SSC.cs @@ -74,8 +74,8 @@ partial class Dump double minSpeed = double.MaxValue; var outputTape = _outputPlugin as IWritableTapeImage; - _dev.RequestSense(out byte[] senseBuf, _dev.Timeout, out double duration); - decSense = Sense.Decode(senseBuf); + _dev.RequestSense(out byte[] buffer, _dev.Timeout, out double duration); + decSense = Sense.Decode(buffer); InitProgress?.Invoke(); @@ -93,6 +93,8 @@ partial class Dump return; } + ReadOnlySpan senseBuf; + // Not in BOM/P if(decSense is { ASC: 0x00 } && decSense?.ASCQ != 0x00 && @@ -109,12 +111,12 @@ partial class Dump do { PulseProgress?.Invoke(Localization.Core.Rewinding_please_wait); - _dev.RequestSense(out senseBuf, _dev.Timeout, out duration); - decSense = Sense.Decode(senseBuf); + _dev.RequestSense(out buffer, _dev.Timeout, out duration); + decSense = Sense.Decode(buffer); } while(decSense is { ASC: 0x00, ASCQ: 0x1A or not (0x04 and 0x00) }); - _dev.RequestSense(out senseBuf, _dev.Timeout, out duration); - decSense = Sense.Decode(senseBuf); + _dev.RequestSense(out buffer, _dev.Timeout, out duration); + decSense = Sense.Decode(buffer); // And yet, did not rewind! if(decSense.HasValue && @@ -194,8 +196,8 @@ partial class Dump { Thread.Sleep(1000); PulseProgress?.Invoke(Localization.Core.Rewinding_please_wait); - _dev.RequestSense(out senseBuf, _dev.Timeout, out duration); - decSense = Sense.Decode(senseBuf); + _dev.RequestSense(out buffer, _dev.Timeout, out duration); + decSense = Sense.Decode(buffer); } while(decSense is { ASC: 0x00, ASCQ: 0x1A or 0x19 }); // And yet, did not rewind! @@ -283,8 +285,9 @@ partial class Dump Modes.DecodedMode? decMode = null; if(!sense && !_dev.Error) - if(Modes.DecodeMode10(cmdBuf, _dev.ScsiType).HasValue) - decMode = Modes.DecodeMode10(cmdBuf, _dev.ScsiType); + { + if(Modes.DecodeMode10(cmdBuf, _dev.ScsiType).HasValue) decMode = Modes.DecodeMode10(cmdBuf, _dev.ScsiType); + } UpdateStatus?.Invoke(Localization.Core.Requesting_MODE_SENSE_6); @@ -312,8 +315,9 @@ partial class Dump if(sense || _dev.Error) sense = _dev.ModeSense(out cmdBuf, out senseBuf, 5, out duration); if(!sense && !_dev.Error) - if(Modes.DecodeMode6(cmdBuf, _dev.ScsiType).HasValue) - decMode = Modes.DecodeMode6(cmdBuf, _dev.ScsiType); + { + if(Modes.DecodeMode6(cmdBuf, _dev.ScsiType).HasValue) decMode = Modes.DecodeMode6(cmdBuf, _dev.ScsiType); + } // TODO: Check partitions page if(decMode.HasValue) @@ -786,8 +790,8 @@ partial class Dump { Thread.Sleep(1000); PulseProgress?.Invoke(Localization.Core.Rewinding_please_wait); - _dev.RequestSense(out senseBuf, _dev.Timeout, out duration); - decSense = Sense.Decode(senseBuf); + _dev.RequestSense(out buffer, _dev.Timeout, out duration); + decSense = Sense.Decode(buffer); } while(decSense is { ASC: 0x00, ASCQ: 0x1A or 0x19 }); // And yet, did not rewind! @@ -944,7 +948,7 @@ partial class Dump _speedStopwatch.Stop(); totalDuration += duration; - if(sense && senseBuf?.Length != 0 && !ArrayHelpers.ArrayIsNullOrEmpty(senseBuf)) + if(sense && !senseBuf.IsEmpty) { decSense = Sense.Decode(senseBuf); @@ -1064,7 +1068,7 @@ partial class Dump .Drive_could_not_read_block_0_Sense_bytes_follow, currentBlock)); - AaruLogging.Information(PrintHex.ByteArrayToHexArrayString(senseBuf, 32)); + AaruLogging.Information(PrintHex.ByteArrayToHexArrayString(senseBuf.ToArray(), 32)); } else { diff --git a/Aaru.Core/Devices/Dumping/Sbc/Error.cs b/Aaru.Core/Devices/Dumping/Sbc/Error.cs index 7c4ff241b..d700f43a7 100644 --- a/Aaru.Core/Devices/Dumping/Sbc/Error.cs +++ b/Aaru.Core/Devices/Dumping/Sbc/Error.cs @@ -25,6 +25,7 @@ // Copyright © 2020-2025 Rebecca Wallander // ****************************************************************************/ +using System; using System.Linq; using Aaru.CommonTypes.AaruMetadata; using Aaru.CommonTypes.Enums; @@ -223,7 +224,7 @@ partial class Dump } UpdateStatus?.Invoke(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks); - sense = _dev.ModeSelect(md6, out byte[] senseBuf, true, false, _dev.Timeout, out _); + sense = _dev.ModeSelect(md6, out ReadOnlySpan senseBuf, true, false, _dev.Timeout, out _); if(sense) sense = _dev.ModeSelect10(md10, out senseBuf, true, false, _dev.Timeout, out _); diff --git a/Aaru.Core/Devices/Dumping/Sbc/Optical.cs b/Aaru.Core/Devices/Dumping/Sbc/Optical.cs index 33c7993bc..115b8e0f4 100644 --- a/Aaru.Core/Devices/Dumping/Sbc/Optical.cs +++ b/Aaru.Core/Devices/Dumping/Sbc/Optical.cs @@ -9,7 +9,6 @@ using Aaru.CommonTypes.Extents; using Aaru.CommonTypes.Interfaces; using Aaru.Core.Logging; using Aaru.Decoders.SCSI; -using Aaru.Helpers; using Aaru.Logging; using Humanizer; using Humanizer.Bytes; @@ -62,7 +61,7 @@ partial class Dump { blankExtents = new ExtentsULong(); - written = _dev.MediumScan(out buffer, + written = _dev.MediumScan(out ReadOnlySpan senseBuffer, true, false, false, @@ -76,7 +75,7 @@ partial class Dump uint.MaxValue, out _); - DecodedSense? decodedSense = Sense.Decode(buffer); + DecodedSense? decodedSense = Sense.Decode(senseBuffer.ToArray()); if(_dev.LastError != 0 || decodedSense?.SenseKey == SenseKeys.IllegalRequest) { @@ -87,8 +86,7 @@ partial class Dump } // TODO: Find a place where MEDIUM SCAN works properly - else if(buffer?.Length > 0 && !ArrayHelpers.ArrayIsNullOrEmpty(buffer)) - AaruLogging.WriteLine(Localization.Core.MEDIUM_SCAN_github_plead_message); + else if(senseBuffer.IsEmpty) AaruLogging.WriteLine(Localization.Core.MEDIUM_SCAN_github_plead_message); changingCounter = false; changingWritten = false; @@ -181,8 +179,9 @@ partial class Dump writtenExtents.Add(0, blocks - 1); foreach(Tuple blank in blankExtents.ToArray()) - for(ulong b = blank.Item1; b <= blank.Item2; b++) - writtenExtents.Remove(b); + { + for(ulong b = blank.Item1; b <= blank.Item2; b++) writtenExtents.Remove(b); + } } if(writtenExtents.Count == 0) diff --git a/Aaru.Core/Devices/Dumping/XGD.cs b/Aaru.Core/Devices/Dumping/XGD.cs index b6d6b86e4..9a9cd9610 100644 --- a/Aaru.Core/Devices/Dumping/XGD.cs +++ b/Aaru.Core/Devices/Dumping/XGD.cs @@ -103,7 +103,7 @@ partial class Dump if(mediaTags.ContainsKey(MediaTagType.DVD_DMI)) mediaTags.Remove(MediaTagType.DVD_DMI); // Drive shall move to lock state when a new disc is inserted. Old kreon versions do not lock correctly so save this - sense = _dev.ReadCapacity(out byte[] coldReadCapacity, out byte[] senseBuf, _dev.Timeout, out _); + sense = _dev.ReadCapacity(out byte[] coldReadCapacity, out ReadOnlySpan senseBuf, _dev.Timeout, out _); if(sense) { @@ -894,7 +894,7 @@ partial class Dump } else { - _errorLog?.WriteLine(currentSector, _dev.Error, _dev.LastError, senseBuf); + _errorLog?.WriteLine(currentSector, _dev.Error, _dev.LastError, senseBuf.ToArray()); // TODO: Reset device after X errors if(_stopOnError) return; // TODO: Return more cleanly @@ -1050,8 +1050,9 @@ partial class Dump List tmpList = []; foreach(ulong ur in _resume.BadBlocks) - for(ulong i = ur; i < ur + blocksToRead; i++) - tmpList.Add(i); + { + for(ulong i = ur; i < ur + blocksToRead; i++) tmpList.Add(i); + } tmpList.Sort(); @@ -1223,7 +1224,8 @@ partial class Dump totalDuration += cmdDuration; - if(sense || _dev.Error) _errorLog?.WriteLine(currentSector, _dev.Error, _dev.LastError, senseBuf); + if(sense || _dev.Error) + _errorLog?.WriteLine(currentSector, _dev.Error, _dev.LastError, senseBuf.ToArray()); if(!sense && !_dev.Error) { diff --git a/Aaru.Core/Devices/Info/DeviceInfo.cs b/Aaru.Core/Devices/Info/DeviceInfo.cs index 9018f03ed..8ff5d7dd4 100644 --- a/Aaru.Core/Devices/Info/DeviceInfo.cs +++ b/Aaru.Core/Devices/Info/DeviceInfo.cs @@ -157,11 +157,11 @@ public partial class DeviceInfo case DeviceType.SCSI: { - bool sense = dev.ScsiInquiry(out byte[] inqBuf, out byte[] senseBuf); + bool sense = dev.ScsiInquiry(out byte[] inqBuf, out ReadOnlySpan senseBuf); if(sense) { - AaruLogging.Error(Localization.Core.SCSI_error_0, Sense.PrettifySense(senseBuf)); + AaruLogging.Error(Localization.Core.SCSI_error_0, Sense.PrettifySense(senseBuf.ToArray())); break; } @@ -546,14 +546,14 @@ public partial class DeviceInfo sense = dev.ReadBlockLimits(out byte[] seqBuf, out senseBuf, dev.Timeout, out _); if(sense) - AaruLogging.Error("READ BLOCK LIMITS:\n{0}", Sense.PrettifySense(senseBuf)); + AaruLogging.Error("READ BLOCK LIMITS:\n{0}", Sense.PrettifySense(senseBuf.ToArray())); else BlockLimits = seqBuf; sense = dev.ReportDensitySupport(out seqBuf, out senseBuf, dev.Timeout, out _); if(sense) - AaruLogging.Error("REPORT DENSITY SUPPORT:\n{0}", Sense.PrettifySense(senseBuf)); + AaruLogging.Error("REPORT DENSITY SUPPORT:\n{0}", Sense.PrettifySense(senseBuf.ToArray())); else { DensitySupport = seqBuf; @@ -565,7 +565,7 @@ public partial class DeviceInfo if(sense) { AaruLogging.Error("REPORT DENSITY SUPPORT (MEDIUM):\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else { diff --git a/Aaru.Core/Devices/ReaderSCSI.cs b/Aaru.Core/Devices/ReaderSCSI.cs index b8c47d117..de03608f9 100644 --- a/Aaru.Core/Devices/ReaderSCSI.cs +++ b/Aaru.Core/Devices/ReaderSCSI.cs @@ -66,10 +66,10 @@ sealed partial class Reader if(Blocks == 0) return true; - byte[] senseBuf; - int tries = 0; - uint lba = 0; - bool mediumScan = false; + ReadOnlySpan senseBuf; + int tries = 0; + uint lba = 0; + bool mediumScan = false; if(_dev.ScsiType == PeripheralDeviceTypes.OpticalDevice) { @@ -641,7 +641,7 @@ sealed partial class Reader { Blocks = 0; - bool sense = _dev.ReadCapacity(out byte[] cmdBuf, out byte[] senseBuf, _timeout, out _); + bool sense = _dev.ReadCapacity(out byte[] cmdBuf, out ReadOnlySpan senseBuf, _timeout, out _); if(!sense) { @@ -774,8 +774,8 @@ sealed partial class Reader bool ScsiReadBlocks(out byte[] buffer, ulong block, uint count, out double duration, out bool recoveredError, out bool blankCheck) { - bool sense; - byte[] senseBuf; + bool sense; + ReadOnlySpan senseBuf; buffer = null; duration = 0; recoveredError = false; @@ -913,7 +913,7 @@ sealed partial class Reader return true; } - if(sense || _dev.Error) _errorLog?.WriteLine(block, _dev.Error, _dev.LastError, senseBuf); + if(sense || _dev.Error) _errorLog?.WriteLine(block, _dev.Error, _dev.LastError, senseBuf.ToArray()); if(!sense && !_dev.Error) return false; @@ -921,7 +921,7 @@ sealed partial class Reader blankCheck = Sense.Decode(senseBuf)?.SenseKey == SenseKeys.BlankCheck; - AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.READ_error_0, Sense.PrettifySense(senseBuf)); + AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.READ_error_0, Sense.PrettifySense(senseBuf.ToArray())); return sense; } diff --git a/Aaru.Core/Devices/Report/GdRomSwapTrick.cs b/Aaru.Core/Devices/Report/GdRomSwapTrick.cs index 3545bafa4..59c3d29ee 100644 --- a/Aaru.Core/Devices/Report/GdRomSwapTrick.cs +++ b/Aaru.Core/Devices/Report/GdRomSwapTrick.cs @@ -80,10 +80,10 @@ public sealed partial class DeviceReport AaruLogging.WriteLine(Localization.Core.Sending_READ_FULL_TOC_to_the_device); - int retries = 0; - bool sense; - byte[] buffer; - byte[] senseBuffer; + int retries = 0; + bool sense; + byte[] buffer; + ReadOnlySpan senseBuffer; do { @@ -104,7 +104,7 @@ public sealed partial class DeviceReport if(sense) { AaruLogging.WriteLine(Localization.Core.READ_FULL_TOC_failed); - AaruLogging.Debug(GDROM_MODULE_NAME, "{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Debug(GDROM_MODULE_NAME, "{0}", Sense.PrettifySense(senseBuffer.ToArray())); report.GdRomSwapDiscCapabilities.RecognizedSwapDisc = false; report.GdRomSwapDiscCapabilities.TestCrashed = false; @@ -218,7 +218,7 @@ public sealed partial class DeviceReport if(sense) { AaruLogging.WriteLine(Localization.Core.READ_FULL_TOC_failed); - AaruLogging.Debug(GDROM_MODULE_NAME, "{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Debug(GDROM_MODULE_NAME, "{0}", Sense.PrettifySense(senseBuffer.ToArray())); report.GdRomSwapDiscCapabilities.RecognizedSwapDisc = false; report.GdRomSwapDiscCapabilities.TestCrashed = false; @@ -273,7 +273,7 @@ public sealed partial class DeviceReport AaruLogging.Write(Localization.Core.Reading_LBA_zero); report.GdRomSwapDiscCapabilities.Lba0Readable = !_dev.ReadCd(out byte[] lba0Buffer, - out byte[] lba0Sense, + out ReadOnlySpan lba0Sense, 0, 2352, 1, @@ -290,7 +290,7 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba0Data = lba0Buffer; - report.GdRomSwapDiscCapabilities.Lba0Sense = lba0Sense; + report.GdRomSwapDiscCapabilities.Lba0Sense = lba0Sense.ToArray(); report.GdRomSwapDiscCapabilities.Lba0DecodedSense = Sense.PrettifySense(lba0Sense); AaruLogging.WriteLine(report.GdRomSwapDiscCapabilities.Lba0Readable @@ -300,7 +300,7 @@ public sealed partial class DeviceReport AaruLogging.Write(Localization.Core.Reading_LBA_zero_as_audio_scrambled); report.GdRomSwapDiscCapabilities.Lba0ScrambledReadable = !_dev.ReadCd(out byte[] lba0ScrambledBuffer, - out byte[] lba0ScrambledSense, + out ReadOnlySpan lba0ScrambledSense, 0, 2352, 1, @@ -317,7 +317,7 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba0ScrambledData = lba0ScrambledBuffer; - report.GdRomSwapDiscCapabilities.Lba0ScrambledSense = lba0ScrambledSense; + report.GdRomSwapDiscCapabilities.Lba0ScrambledSense = lba0ScrambledSense.ToArray(); report.GdRomSwapDiscCapabilities.Lba0ScrambledDecodedSense = Sense.PrettifySense(lba0ScrambledSense); AaruLogging.WriteLine(report.GdRomSwapDiscCapabilities.Lba0ScrambledReadable @@ -330,7 +330,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba100000AudioReadable = !_dev.ReadCd(out byte[] lba100000AudioBuffer, - out byte[] lba100000AudioSenseBuffer, + out ReadOnlySpan + lba100000AudioSenseBuffer, 100000, 2352, cluster, @@ -347,10 +348,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba100000AudioData = lba100000AudioBuffer; - report.GdRomSwapDiscCapabilities.Lba100000AudioSense = lba100000AudioSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba100000AudioSense = lba100000AudioSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba100000AudioDecodedSense = - Sense.PrettifySense(lba100000AudioSenseBuffer); + Sense.PrettifySense(lba100000AudioSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba100000AudioReadableCluster = (int)cluster; @@ -371,7 +372,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba50000AudioReadable = !_dev.ReadCd(out byte[] lba50000AudioBuffer, - out byte[] lba50000AudioSenseBuffer, + out ReadOnlySpan + lba50000AudioSenseBuffer, 50000, 2352, cluster, @@ -388,9 +390,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba50000AudioData = lba50000AudioBuffer; - report.GdRomSwapDiscCapabilities.Lba50000AudioSense = lba50000AudioSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba50000AudioSense = lba50000AudioSenseBuffer.ToArray(); - report.GdRomSwapDiscCapabilities.Lba50000AudioDecodedSense = Sense.PrettifySense(lba50000AudioSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba50000AudioDecodedSense = + Sense.PrettifySense(lba50000AudioSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba50000AudioReadableCluster = (int)cluster; @@ -411,7 +414,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba450000AudioReadable = !_dev.ReadCd(out byte[] lba450000AudioBuffer, - out byte[] lba450000AudioSenseBuffer, + out ReadOnlySpan + lba450000AudioSenseBuffer, 450000, 2352, cluster, @@ -428,10 +432,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba450000AudioData = lba450000AudioBuffer; - report.GdRomSwapDiscCapabilities.Lba450000AudioSense = lba450000AudioSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba450000AudioSense = lba450000AudioSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba450000AudioDecodedSense = - Sense.PrettifySense(lba450000AudioSenseBuffer); + Sense.PrettifySense(lba450000AudioSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba450000AudioReadableCluster = (int)cluster; @@ -452,7 +456,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba400000AudioReadable = !_dev.ReadCd(out byte[] lba400000AudioBuffer, - out byte[] lba400000AudioSenseBuffer, + out ReadOnlySpan + lba400000AudioSenseBuffer, 400000, 2352, cluster, @@ -469,10 +474,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba400000AudioData = lba400000AudioBuffer; - report.GdRomSwapDiscCapabilities.Lba400000AudioSense = lba400000AudioSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba400000AudioSense = lba400000AudioSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba400000AudioDecodedSense = - Sense.PrettifySense(lba400000AudioSenseBuffer); + Sense.PrettifySense(lba400000AudioSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba400000AudioReadableCluster = (int)cluster; @@ -493,7 +498,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba45000AudioReadable = !_dev.ReadCd(out byte[] lba45000AudioBuffer, - out byte[] lba45000AudioSenseBuffer, + out ReadOnlySpan + lba45000AudioSenseBuffer, 45000, 2352, cluster, @@ -510,9 +516,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba45000AudioData = lba45000AudioBuffer; - report.GdRomSwapDiscCapabilities.Lba45000AudioSense = lba45000AudioSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba45000AudioSense = lba45000AudioSenseBuffer.ToArray(); - report.GdRomSwapDiscCapabilities.Lba45000AudioDecodedSense = Sense.PrettifySense(lba45000AudioSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba45000AudioDecodedSense = + Sense.PrettifySense(lba45000AudioSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba45000AudioReadableCluster = (int)cluster; @@ -533,7 +540,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba44990AudioReadable = !_dev.ReadCd(out byte[] lba44990AudioBuffer, - out byte[] lba44990AudioSenseBuffer, + out ReadOnlySpan + lba44990AudioSenseBuffer, 44990, 2352, cluster, @@ -550,9 +558,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba44990AudioData = lba44990AudioBuffer; - report.GdRomSwapDiscCapabilities.Lba44990AudioSense = lba44990AudioSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba44990AudioSense = lba44990AudioSenseBuffer.ToArray(); - report.GdRomSwapDiscCapabilities.Lba44990AudioDecodedSense = Sense.PrettifySense(lba44990AudioSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba44990AudioDecodedSense = + Sense.PrettifySense(lba44990AudioSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba44990AudioReadableCluster = (int)cluster; @@ -573,7 +582,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba100000AudioPqReadable = !_dev.ReadCd(out byte[] lba100000AudioPqBuffer, - out byte[] lba100000AudioPqSenseBuffer, + out ReadOnlySpan + lba100000AudioPqSenseBuffer, 100000, 2368, cluster, @@ -590,10 +600,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba100000AudioPqData = lba100000AudioPqBuffer; - report.GdRomSwapDiscCapabilities.Lba100000AudioPqSense = lba100000AudioPqSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba100000AudioPqSense = lba100000AudioPqSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba100000AudioPqDecodedSense = - Sense.PrettifySense(lba100000AudioPqSenseBuffer); + Sense.PrettifySense(lba100000AudioPqSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba100000AudioPqReadableCluster = (int)cluster; @@ -614,7 +624,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba50000AudioPqReadable = !_dev.ReadCd(out byte[] lba50000AudioPqBuffer, - out byte[] lba50000AudioPqSenseBuffer, + out ReadOnlySpan + lba50000AudioPqSenseBuffer, 50000, 2368, cluster, @@ -631,10 +642,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba50000AudioPqData = lba50000AudioPqBuffer; - report.GdRomSwapDiscCapabilities.Lba50000AudioPqSense = lba50000AudioPqSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba50000AudioPqSense = lba50000AudioPqSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba50000AudioPqDecodedSense = - Sense.PrettifySense(lba50000AudioPqSenseBuffer); + Sense.PrettifySense(lba50000AudioPqSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba50000AudioPqReadableCluster = (int)cluster; @@ -655,7 +666,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba450000AudioPqReadable = !_dev.ReadCd(out byte[] lba450000AudioPqBuffer, - out byte[] lba450000AudioPqSenseBuffer, + out ReadOnlySpan + lba450000AudioPqSenseBuffer, 450000, 2368, cluster, @@ -672,10 +684,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba450000AudioPqData = lba450000AudioPqBuffer; - report.GdRomSwapDiscCapabilities.Lba450000AudioPqSense = lba450000AudioPqSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba450000AudioPqSense = lba450000AudioPqSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba450000AudioPqDecodedSense = - Sense.PrettifySense(lba450000AudioPqSenseBuffer); + Sense.PrettifySense(lba450000AudioPqSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba450000AudioPqReadableCluster = (int)cluster; @@ -696,7 +708,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba400000AudioPqReadable = !_dev.ReadCd(out byte[] lba400000AudioPqBuffer, - out byte[] lba400000AudioPqSenseBuffer, + out ReadOnlySpan + lba400000AudioPqSenseBuffer, 400000, 2368, cluster, @@ -713,10 +726,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba400000AudioPqData = lba400000AudioPqBuffer; - report.GdRomSwapDiscCapabilities.Lba400000AudioPqSense = lba400000AudioPqSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba400000AudioPqSense = lba400000AudioPqSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba400000AudioPqDecodedSense = - Sense.PrettifySense(lba400000AudioPqSenseBuffer); + Sense.PrettifySense(lba400000AudioPqSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba400000AudioPqReadableCluster = (int)cluster; @@ -737,7 +750,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba45000AudioPqReadable = !_dev.ReadCd(out byte[] lba45000AudioPqBuffer, - out byte[] lba45000AudioPqSenseBuffer, + out ReadOnlySpan + lba45000AudioPqSenseBuffer, 45000, 2368, cluster, @@ -754,10 +768,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba45000AudioPqData = lba45000AudioPqBuffer; - report.GdRomSwapDiscCapabilities.Lba45000AudioPqSense = lba45000AudioPqSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba45000AudioPqSense = lba45000AudioPqSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba45000AudioPqDecodedSense = - Sense.PrettifySense(lba45000AudioPqSenseBuffer); + Sense.PrettifySense(lba45000AudioPqSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba45000AudioPqReadableCluster = (int)cluster; @@ -778,7 +792,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba44990AudioPqReadable = !_dev.ReadCd(out byte[] lba44990AudioPqBuffer, - out byte[] lba44990AudioPqSenseBuffer, + out ReadOnlySpan + lba44990AudioPqSenseBuffer, 44990, 2368, cluster, @@ -795,10 +810,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba44990AudioPqData = lba44990AudioPqBuffer; - report.GdRomSwapDiscCapabilities.Lba44990AudioPqSense = lba44990AudioPqSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba44990AudioPqSense = lba44990AudioPqSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba44990AudioPqDecodedSense = - Sense.PrettifySense(lba44990AudioPqSenseBuffer); + Sense.PrettifySense(lba44990AudioPqSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba44990AudioPqReadableCluster = (int)cluster; @@ -819,7 +834,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba100000AudioRwReadable = !_dev.ReadCd(out byte[] lba100000AudioRwBuffer, - out byte[] lba100000AudioRwSenseBuffer, + out ReadOnlySpan + lba100000AudioRwSenseBuffer, 100000, 2448, cluster, @@ -836,10 +852,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba100000AudioRwData = lba100000AudioRwBuffer; - report.GdRomSwapDiscCapabilities.Lba100000AudioRwSense = lba100000AudioRwSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba100000AudioRwSense = lba100000AudioRwSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba100000AudioRwDecodedSense = - Sense.PrettifySense(lba100000AudioRwSenseBuffer); + Sense.PrettifySense(lba100000AudioRwSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba100000AudioRwReadableCluster = (int)cluster; @@ -860,7 +876,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba50000AudioRwReadable = !_dev.ReadCd(out byte[] lba50000AudioRwBuffer, - out byte[] lba50000AudioRwSenseBuffer, + out ReadOnlySpan + lba50000AudioRwSenseBuffer, 50000, 2448, cluster, @@ -877,10 +894,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba50000AudioRwData = lba50000AudioRwBuffer; - report.GdRomSwapDiscCapabilities.Lba50000AudioRwSense = lba50000AudioRwSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba50000AudioRwSense = lba50000AudioRwSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba50000AudioRwDecodedSense = - Sense.PrettifySense(lba50000AudioRwSenseBuffer); + Sense.PrettifySense(lba50000AudioRwSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba50000AudioRwReadableCluster = (int)cluster; @@ -901,7 +918,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba450000AudioRwReadable = !_dev.ReadCd(out byte[] lba450000AudioRwBuffer, - out byte[] lba450000AudioRwSenseBuffer, + out ReadOnlySpan + lba450000AudioRwSenseBuffer, 450000, 2448, cluster, @@ -918,10 +936,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba450000AudioRwData = lba450000AudioRwBuffer; - report.GdRomSwapDiscCapabilities.Lba450000AudioRwSense = lba450000AudioRwSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba450000AudioRwSense = lba450000AudioRwSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba450000AudioRwDecodedSense = - Sense.PrettifySense(lba450000AudioRwSenseBuffer); + Sense.PrettifySense(lba450000AudioRwSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba450000AudioRwReadableCluster = (int)cluster; @@ -942,7 +960,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba400000AudioRwReadable = !_dev.ReadCd(out byte[] lba400000AudioRwBuffer, - out byte[] lba400000AudioRwSenseBuffer, + out ReadOnlySpan + lba400000AudioRwSenseBuffer, 400000, 2448, cluster, @@ -959,10 +978,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba400000AudioRwData = lba400000AudioRwBuffer; - report.GdRomSwapDiscCapabilities.Lba400000AudioRwSense = lba400000AudioRwSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba400000AudioRwSense = lba400000AudioRwSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba400000AudioRwDecodedSense = - Sense.PrettifySense(lba400000AudioRwSenseBuffer); + Sense.PrettifySense(lba400000AudioRwSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba400000AudioRwReadableCluster = (int)cluster; @@ -983,7 +1002,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba45000AudioRwReadable = !_dev.ReadCd(out byte[] lba45000AudioRwBuffer, - out byte[] lba45000AudioRwSenseBuffer, + out ReadOnlySpan + lba45000AudioRwSenseBuffer, 45000, 2448, cluster, @@ -1000,10 +1020,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba45000AudioRwData = lba45000AudioRwBuffer; - report.GdRomSwapDiscCapabilities.Lba45000AudioRwSense = lba45000AudioRwSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba45000AudioRwSense = lba45000AudioRwSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba45000AudioRwDecodedSense = - Sense.PrettifySense(lba45000AudioRwSenseBuffer); + Sense.PrettifySense(lba45000AudioRwSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba45000AudioRwReadableCluster = (int)cluster; @@ -1024,7 +1044,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba44990AudioRwReadable = !_dev.ReadCd(out byte[] lba44990AudioRwBuffer, - out byte[] lba44990AudioRwSenseBuffer, + out ReadOnlySpan + lba44990AudioRwSenseBuffer, 44990, 2448, cluster, @@ -1041,10 +1062,10 @@ public sealed partial class DeviceReport out _); report.GdRomSwapDiscCapabilities.Lba44990AudioRwData = lba44990AudioRwBuffer; - report.GdRomSwapDiscCapabilities.Lba44990AudioRwSense = lba44990AudioRwSenseBuffer; + report.GdRomSwapDiscCapabilities.Lba44990AudioRwSense = lba44990AudioRwSenseBuffer.ToArray(); report.GdRomSwapDiscCapabilities.Lba44990AudioRwDecodedSense = - Sense.PrettifySense(lba44990AudioRwSenseBuffer); + Sense.PrettifySense(lba44990AudioRwSenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba44990AudioRwReadableCluster = (int)cluster; @@ -1065,7 +1086,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba100000Readable = !_dev.ReadCd(out byte[] lba100000Buffer, - out byte[] lba100000SenseBuffer, + out ReadOnlySpan + lba100000SenseBuffer, 100000, 2352, cluster, @@ -1081,9 +1103,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba100000Data = lba100000Buffer; - report.GdRomSwapDiscCapabilities.Lba100000Sense = lba100000SenseBuffer; - report.GdRomSwapDiscCapabilities.Lba100000DecodedSense = Sense.PrettifySense(lba100000SenseBuffer); + report.GdRomSwapDiscCapabilities.Lba100000Data = lba100000Buffer; + report.GdRomSwapDiscCapabilities.Lba100000Sense = lba100000SenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba100000DecodedSense = + Sense.PrettifySense(lba100000SenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba100000ReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba100000Readable) break; @@ -1103,7 +1128,7 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba50000Readable = !_dev.ReadCd(out byte[] lba50000Buffer, - out byte[] lba50000SenseBuffer, + out ReadOnlySpan lba50000SenseBuffer, 50000, 2352, cluster, @@ -1119,9 +1144,9 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba50000Data = lba50000Buffer; - report.GdRomSwapDiscCapabilities.Lba50000Sense = lba50000SenseBuffer; - report.GdRomSwapDiscCapabilities.Lba50000DecodedSense = Sense.PrettifySense(lba50000SenseBuffer); + report.GdRomSwapDiscCapabilities.Lba50000Data = lba50000Buffer; + report.GdRomSwapDiscCapabilities.Lba50000Sense = lba50000SenseBuffer.ToArray(); + report.GdRomSwapDiscCapabilities.Lba50000DecodedSense = Sense.PrettifySense(lba50000SenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba50000ReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba50000Readable) break; @@ -1141,7 +1166,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba450000Readable = !_dev.ReadCd(out byte[] lba450000Buffer, - out byte[] lba450000SenseBuffer, + out ReadOnlySpan + lba450000SenseBuffer, 450000, 2352, cluster, @@ -1157,9 +1183,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba450000Data = lba450000Buffer; - report.GdRomSwapDiscCapabilities.Lba450000Sense = lba450000SenseBuffer; - report.GdRomSwapDiscCapabilities.Lba450000DecodedSense = Sense.PrettifySense(lba450000SenseBuffer); + report.GdRomSwapDiscCapabilities.Lba450000Data = lba450000Buffer; + report.GdRomSwapDiscCapabilities.Lba450000Sense = lba450000SenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba450000DecodedSense = + Sense.PrettifySense(lba450000SenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba450000ReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba450000Readable) break; @@ -1179,7 +1208,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba400000Readable = !_dev.ReadCd(out byte[] lba400000Buffer, - out byte[] lba400000SenseBuffer, + out ReadOnlySpan + lba400000SenseBuffer, 400000, 2352, cluster, @@ -1195,9 +1225,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba400000Data = lba400000Buffer; - report.GdRomSwapDiscCapabilities.Lba400000Sense = lba400000SenseBuffer; - report.GdRomSwapDiscCapabilities.Lba400000DecodedSense = Sense.PrettifySense(lba400000SenseBuffer); + report.GdRomSwapDiscCapabilities.Lba400000Data = lba400000Buffer; + report.GdRomSwapDiscCapabilities.Lba400000Sense = lba400000SenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba400000DecodedSense = + Sense.PrettifySense(lba400000SenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba400000ReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba400000Readable) break; @@ -1217,7 +1250,7 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba45000Readable = !_dev.ReadCd(out byte[] lba45000Buffer, - out byte[] lba45000SenseBuffer, + out ReadOnlySpan lba45000SenseBuffer, 45000, 2352, cluster, @@ -1233,9 +1266,9 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba45000Data = lba45000Buffer; - report.GdRomSwapDiscCapabilities.Lba45000Sense = lba45000SenseBuffer; - report.GdRomSwapDiscCapabilities.Lba45000DecodedSense = Sense.PrettifySense(lba45000SenseBuffer); + report.GdRomSwapDiscCapabilities.Lba45000Data = lba45000Buffer; + report.GdRomSwapDiscCapabilities.Lba45000Sense = lba45000SenseBuffer.ToArray(); + report.GdRomSwapDiscCapabilities.Lba45000DecodedSense = Sense.PrettifySense(lba45000SenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba45000ReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba45000Readable) break; @@ -1255,7 +1288,7 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba44990Readable = !_dev.ReadCd(out byte[] lba44990Buffer, - out byte[] lba44990SenseBuffer, + out ReadOnlySpan lba44990SenseBuffer, 44990, 2352, cluster, @@ -1271,9 +1304,9 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba44990Data = lba44990Buffer; - report.GdRomSwapDiscCapabilities.Lba44990Sense = lba44990SenseBuffer; - report.GdRomSwapDiscCapabilities.Lba44990DecodedSense = Sense.PrettifySense(lba44990SenseBuffer); + report.GdRomSwapDiscCapabilities.Lba44990Data = lba44990Buffer; + report.GdRomSwapDiscCapabilities.Lba44990Sense = lba44990SenseBuffer.ToArray(); + report.GdRomSwapDiscCapabilities.Lba44990DecodedSense = Sense.PrettifySense(lba44990SenseBuffer.ToArray()); report.GdRomSwapDiscCapabilities.Lba44990ReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba44990Readable) break; @@ -1293,7 +1326,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba100000PqReadable = !_dev.ReadCd(out byte[] lba100000PqBuffer, - out byte[] lba100000PqSenseBuffer, + out ReadOnlySpan + lba100000PqSenseBuffer, 100000, 2368, cluster, @@ -1309,9 +1343,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba100000PqData = lba100000PqBuffer; - report.GdRomSwapDiscCapabilities.Lba100000PqSense = lba100000PqSenseBuffer; - report.GdRomSwapDiscCapabilities.Lba100000PqDecodedSense = Sense.PrettifySense(lba100000PqSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba100000PqData = lba100000PqBuffer; + report.GdRomSwapDiscCapabilities.Lba100000PqSense = lba100000PqSenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba100000PqDecodedSense = + Sense.PrettifySense(lba100000PqSenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba100000PqReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba100000PqReadable) break; @@ -1331,7 +1368,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba50000PqReadable = !_dev.ReadCd(out byte[] lba50000PqBuffer, - out byte[] lba50000PqSenseBuffer, + out ReadOnlySpan + lba50000PqSenseBuffer, 50000, 2368, cluster, @@ -1347,9 +1385,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba50000PqData = lba50000PqBuffer; - report.GdRomSwapDiscCapabilities.Lba50000PqSense = lba50000PqSenseBuffer; - report.GdRomSwapDiscCapabilities.Lba50000PqDecodedSense = Sense.PrettifySense(lba50000PqSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba50000PqData = lba50000PqBuffer; + report.GdRomSwapDiscCapabilities.Lba50000PqSense = lba50000PqSenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba50000PqDecodedSense = + Sense.PrettifySense(lba50000PqSenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba50000PqReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba50000PqReadable) break; @@ -1369,7 +1410,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba450000PqReadable = !_dev.ReadCd(out byte[] lba450000PqBuffer, - out byte[] lba450000PqSenseBuffer, + out ReadOnlySpan + lba450000PqSenseBuffer, 450000, 2368, cluster, @@ -1385,9 +1427,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba450000PqData = lba450000PqBuffer; - report.GdRomSwapDiscCapabilities.Lba450000PqSense = lba450000PqSenseBuffer; - report.GdRomSwapDiscCapabilities.Lba450000PqDecodedSense = Sense.PrettifySense(lba450000PqSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba450000PqData = lba450000PqBuffer; + report.GdRomSwapDiscCapabilities.Lba450000PqSense = lba450000PqSenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba450000PqDecodedSense = + Sense.PrettifySense(lba450000PqSenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba450000PqReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba450000PqReadable) break; @@ -1407,7 +1452,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba400000PqReadable = !_dev.ReadCd(out byte[] lba400000PqBuffer, - out byte[] lba400000PqSenseBuffer, + out ReadOnlySpan + lba400000PqSenseBuffer, 400000, 2368, cluster, @@ -1423,9 +1469,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba400000PqData = lba400000PqBuffer; - report.GdRomSwapDiscCapabilities.Lba400000PqSense = lba400000PqSenseBuffer; - report.GdRomSwapDiscCapabilities.Lba400000PqDecodedSense = Sense.PrettifySense(lba400000PqSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba400000PqData = lba400000PqBuffer; + report.GdRomSwapDiscCapabilities.Lba400000PqSense = lba400000PqSenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba400000PqDecodedSense = + Sense.PrettifySense(lba400000PqSenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba400000PqReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba400000PqReadable) break; @@ -1445,7 +1494,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba45000PqReadable = !_dev.ReadCd(out byte[] lba45000PqBuffer, - out byte[] lba45000PqSenseBuffer, + out ReadOnlySpan + lba45000PqSenseBuffer, 45000, 2368, cluster, @@ -1461,9 +1511,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba45000PqData = lba45000PqBuffer; - report.GdRomSwapDiscCapabilities.Lba45000PqSense = lba45000PqSenseBuffer; - report.GdRomSwapDiscCapabilities.Lba45000PqDecodedSense = Sense.PrettifySense(lba45000PqSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba45000PqData = lba45000PqBuffer; + report.GdRomSwapDiscCapabilities.Lba45000PqSense = lba45000PqSenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba45000PqDecodedSense = + Sense.PrettifySense(lba45000PqSenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba45000PqReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba45000PqReadable) break; @@ -1483,7 +1536,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba44990PqReadable = !_dev.ReadCd(out byte[] lba44990PqBuffer, - out byte[] lba44990PqSenseBuffer, + out ReadOnlySpan + lba44990PqSenseBuffer, 44990, 2368, cluster, @@ -1499,9 +1553,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba44990PqData = lba44990PqBuffer; - report.GdRomSwapDiscCapabilities.Lba44990PqSense = lba44990PqSenseBuffer; - report.GdRomSwapDiscCapabilities.Lba44990PqDecodedSense = Sense.PrettifySense(lba44990PqSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba44990PqData = lba44990PqBuffer; + report.GdRomSwapDiscCapabilities.Lba44990PqSense = lba44990PqSenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba44990PqDecodedSense = + Sense.PrettifySense(lba44990PqSenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba44990PqReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba44990PqReadable) break; @@ -1521,7 +1578,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba100000RwReadable = !_dev.ReadCd(out byte[] lba100000RwBuffer, - out byte[] lba100000RwSenseBuffer, + out ReadOnlySpan + lba100000RwSenseBuffer, 100000, 2448, cluster, @@ -1537,9 +1595,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba100000RwData = lba100000RwBuffer; - report.GdRomSwapDiscCapabilities.Lba100000RwSense = lba100000RwSenseBuffer; - report.GdRomSwapDiscCapabilities.Lba100000RwDecodedSense = Sense.PrettifySense(lba100000RwSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba100000RwData = lba100000RwBuffer; + report.GdRomSwapDiscCapabilities.Lba100000RwSense = lba100000RwSenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba100000RwDecodedSense = + Sense.PrettifySense(lba100000RwSenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba100000RwReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba100000RwReadable) break; @@ -1559,7 +1620,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba50000RwReadable = !_dev.ReadCd(out byte[] lba50000RwBuffer, - out byte[] lba50000RwSenseBuffer, + out ReadOnlySpan + lba50000RwSenseBuffer, 50000, 2448, cluster, @@ -1575,9 +1637,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba50000RwData = lba50000RwBuffer; - report.GdRomSwapDiscCapabilities.Lba50000RwSense = lba50000RwSenseBuffer; - report.GdRomSwapDiscCapabilities.Lba50000RwDecodedSense = Sense.PrettifySense(lba50000RwSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba50000RwData = lba50000RwBuffer; + report.GdRomSwapDiscCapabilities.Lba50000RwSense = lba50000RwSenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba50000RwDecodedSense = + Sense.PrettifySense(lba50000RwSenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba50000RwReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba50000RwReadable) break; @@ -1597,7 +1662,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba450000RwReadable = !_dev.ReadCd(out byte[] lba450000RwBuffer, - out byte[] lba450000RwSenseBuffer, + out ReadOnlySpan + lba450000RwSenseBuffer, 450000, 2448, cluster, @@ -1613,9 +1679,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba450000RwData = lba450000RwBuffer; - report.GdRomSwapDiscCapabilities.Lba450000RwSense = lba450000RwSenseBuffer; - report.GdRomSwapDiscCapabilities.Lba450000RwDecodedSense = Sense.PrettifySense(lba450000RwSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba450000RwData = lba450000RwBuffer; + report.GdRomSwapDiscCapabilities.Lba450000RwSense = lba450000RwSenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba450000RwDecodedSense = + Sense.PrettifySense(lba450000RwSenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba450000RwReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba450000RwReadable) break; @@ -1635,7 +1704,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba400000RwReadable = !_dev.ReadCd(out byte[] lba400000RwBuffer, - out byte[] lba400000RwSenseBuffer, + out ReadOnlySpan + lba400000RwSenseBuffer, 400000, 2448, cluster, @@ -1651,9 +1721,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba400000RwData = lba400000RwBuffer; - report.GdRomSwapDiscCapabilities.Lba400000RwSense = lba400000RwSenseBuffer; - report.GdRomSwapDiscCapabilities.Lba400000RwDecodedSense = Sense.PrettifySense(lba400000RwSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba400000RwData = lba400000RwBuffer; + report.GdRomSwapDiscCapabilities.Lba400000RwSense = lba400000RwSenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba400000RwDecodedSense = + Sense.PrettifySense(lba400000RwSenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba400000RwReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba400000RwReadable) break; @@ -1673,7 +1746,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba45000RwReadable = !_dev.ReadCd(out byte[] lba45000RwBuffer, - out byte[] lba45000RwSenseBuffer, + out ReadOnlySpan + lba45000RwSenseBuffer, 45000, 2448, cluster, @@ -1689,9 +1763,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba45000RwData = lba45000RwBuffer; - report.GdRomSwapDiscCapabilities.Lba45000RwSense = lba45000RwSenseBuffer; - report.GdRomSwapDiscCapabilities.Lba45000RwDecodedSense = Sense.PrettifySense(lba45000RwSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba45000RwData = lba45000RwBuffer; + report.GdRomSwapDiscCapabilities.Lba45000RwSense = lba45000RwSenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba45000RwDecodedSense = + Sense.PrettifySense(lba45000RwSenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba45000RwReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba45000RwReadable) break; @@ -1711,7 +1788,8 @@ public sealed partial class DeviceReport while(true) { report.GdRomSwapDiscCapabilities.Lba44990RwReadable = !_dev.ReadCd(out byte[] lba44990RwBuffer, - out byte[] lba44990RwSenseBuffer, + out ReadOnlySpan + lba44990RwSenseBuffer, 44990, 2448, cluster, @@ -1727,9 +1805,12 @@ public sealed partial class DeviceReport _dev.Timeout, out _); - report.GdRomSwapDiscCapabilities.Lba44990RwData = lba44990RwBuffer; - report.GdRomSwapDiscCapabilities.Lba44990RwSense = lba44990RwSenseBuffer; - report.GdRomSwapDiscCapabilities.Lba44990RwDecodedSense = Sense.PrettifySense(lba44990RwSenseBuffer); + report.GdRomSwapDiscCapabilities.Lba44990RwData = lba44990RwBuffer; + report.GdRomSwapDiscCapabilities.Lba44990RwSense = lba44990RwSenseBuffer.ToArray(); + + report.GdRomSwapDiscCapabilities.Lba44990RwDecodedSense = + Sense.PrettifySense(lba44990RwSenseBuffer.ToArray()); + report.GdRomSwapDiscCapabilities.Lba44990RwReadableCluster = (int)cluster; if(report.GdRomSwapDiscCapabilities.Lba44990RwReadable) break; diff --git a/Aaru.Core/Devices/Report/MMC.cs b/Aaru.Core/Devices/Report/MMC.cs index 130477d96..8162fa2e5 100644 --- a/Aaru.Core/Devices/Report/MMC.cs +++ b/Aaru.Core/Devices/Report/MMC.cs @@ -578,15 +578,15 @@ public sealed partial class DeviceReport public TestedMedia ReportMmcMedia(string mediaType, bool tryPlextor, bool tryPioneer, bool tryNec, bool tryHldtst, bool tryMediaTekF106, bool tryLiteOn) { - bool sense = true; - byte[] buffer = []; - byte[] senseBuffer = []; - var mediaTest = new TestedMedia(); + bool sense = true; + byte[] buffer = []; + ReadOnlySpan senseBuffer = []; + var mediaTest = new TestedMedia(); Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Querying_SCSI_READ_CAPACITY).IsIndeterminate(); - sense = _dev.ReadCapacity(out buffer, out senseBuffer, _dev.Timeout, out _); + sense = _dev.ReadCapacity(out buffer, out _, _dev.Timeout, out _); }); if(!sense && !_dev.Error) @@ -603,7 +603,7 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Querying_SCSI_READ_CAPACITY_16).IsIndeterminate(); - sense = _dev.ReadCapacity16(out buffer, out buffer, _dev.Timeout, out _); + sense = _dev.ReadCapacity16(out buffer, out _, _dev.Timeout, out _); }); if(!sense && !_dev.Error) @@ -623,7 +623,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_SCSI_MODE_SENSE_10).IsIndeterminate(); sense = _dev.ModeSense10(out buffer, - out senseBuffer, + out _, false, true, ScsiModeSensePageControl.Current, @@ -643,7 +643,7 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Querying_SCSI_MODE_SENSE).IsIndeterminate(); - sense = _dev.ModeSense(out buffer, out senseBuffer, _dev.Timeout, out _); + sense = _dev.ModeSense(out buffer, out _, _dev.Timeout, out _); }); if(!sense && !_dev.Error) @@ -669,8 +669,7 @@ public sealed partial class DeviceReport { ctx.AddTask(Localization.Core.Querying_CD_TOC).IsIndeterminate(); - mediaTest.CanReadTOC = - !_dev.ReadTocPmaAtip(out buffer, out senseBuffer, false, 0, 0, _dev.Timeout, out _); + mediaTest.CanReadTOC = !_dev.ReadTocPmaAtip(out buffer, out _, false, 0, 0, _dev.Timeout, out _); }); AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.CanReadTOC); @@ -679,7 +678,7 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Querying_CD_Full_TOC).IsIndeterminate(); - mediaTest.CanReadFullTOC = !_dev.ReadRawToc(out buffer, out senseBuffer, 1, _dev.Timeout, out _); + mediaTest.CanReadFullTOC = !_dev.ReadRawToc(out buffer, out _, 1, _dev.Timeout, out _); }); AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.CanReadFullTOC); @@ -692,7 +691,7 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Querying_CD_ATIP).IsIndeterminate(); - mediaTest.CanReadATIP = !_dev.ReadAtip(out buffer, out senseBuffer, _dev.Timeout, out _); + mediaTest.CanReadATIP = !_dev.ReadAtip(out buffer, out _, _dev.Timeout, out _); }); AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.CanReadATIP); @@ -702,7 +701,7 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Querying_CD_PMA).IsIndeterminate(); - mediaTest.CanReadPMA = !_dev.ReadPma(out buffer, out senseBuffer, _dev.Timeout, out _); + mediaTest.CanReadPMA = !_dev.ReadPma(out buffer, out _, _dev.Timeout, out _); }); AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.CanReadPMA); @@ -720,7 +719,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_PFI).IsIndeterminate(); mediaTest.CanReadPFI = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -739,7 +738,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_DMI).IsIndeterminate(); mediaTest.CanReadDMI = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -761,7 +760,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_CMI).IsIndeterminate(); mediaTest.CanReadCMI = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -785,7 +784,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_BCA).IsIndeterminate(); mediaTest.CanReadBCA = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -804,7 +803,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_AACS).IsIndeterminate(); mediaTest.CanReadAACS = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -826,7 +825,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_BCA).IsIndeterminate(); mediaTest.CanReadBCA = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -845,7 +844,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_PFI).IsIndeterminate(); mediaTest.CanReadPFI = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -864,7 +863,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_DMI).IsIndeterminate(); mediaTest.CanReadDMI = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -891,7 +890,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_BD_BCA).IsIndeterminate(); mediaTest.CanReadBCA = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Bd, 0, 0, @@ -915,7 +914,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_Disc_Definition_Structure).IsIndeterminate(); mediaTest.CanReadDDS = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -935,7 +934,7 @@ public sealed partial class DeviceReport mediaTest.CanReadSpareAreaInformation = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -961,7 +960,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_BD_DDS).IsIndeterminate(); mediaTest.CanReadDDS = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Bd, 0, 0, @@ -981,7 +980,7 @@ public sealed partial class DeviceReport mediaTest.CanReadSpareAreaInformation = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Bd, 0, 0, @@ -1005,7 +1004,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_PRI).IsIndeterminate(); mediaTest.CanReadPRI = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -1027,7 +1026,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_Media_ID).IsIndeterminate(); mediaTest.CanReadMediaID = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -1044,7 +1043,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_Embossed_PFI).IsIndeterminate(); mediaTest.CanReadRecordablePFI = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -1066,7 +1065,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_ADIP).IsIndeterminate(); mediaTest.CanReadADIP = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -1085,7 +1084,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_DCB).IsIndeterminate(); mediaTest.CanReadDCB = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -1107,7 +1106,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_HD_DVD_CMI).IsIndeterminate(); mediaTest.CanReadHDCMI = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -1129,7 +1128,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_DVD_Layer_Capacity).IsIndeterminate(); mediaTest.CanReadLayerCapacity = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Dvd, 0, 0, @@ -1157,7 +1156,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_BD_Disc_Information).IsIndeterminate(); mediaTest.CanReadDiscInformation = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Bd, 0, 0, @@ -1176,7 +1175,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_BD_PAC).IsIndeterminate(); mediaTest.CanReadPAC = !_dev.ReadDiscStructure(out buffer, - out senseBuffer, + out _, MmcDiscStructureMediaType.Bd, 0, 0, @@ -1198,7 +1197,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_CD_scrambled).IsIndeterminate(); mediaTest.CanReadCdScrambled = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2352, 1, @@ -1223,7 +1222,7 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Trying_SCSI_READ_6).IsIndeterminate(); - mediaTest.SupportsRead6 = !_dev.Read6(out buffer, out senseBuffer, 16, 512, _dev.Timeout, out _); + mediaTest.SupportsRead6 = !_dev.Read6(out buffer, out _, 16, 512, _dev.Timeout, out _); }); AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsRead6); @@ -1235,7 +1234,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_10).IsIndeterminate(); mediaTest.SupportsRead10 = !_dev.Read10(out buffer, - out senseBuffer, + out _, 0, false, true, @@ -1258,7 +1257,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_12).IsIndeterminate(); mediaTest.SupportsRead12 = !_dev.Read12(out buffer, - out senseBuffer, + out _, 0, false, true, @@ -1282,7 +1281,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_16).IsIndeterminate(); mediaTest.SupportsRead16 = !_dev.Read16(out buffer, - out senseBuffer, + out _, 0, false, true, @@ -1305,7 +1304,7 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Trying_SCSI_READ_6).IsIndeterminate(); - mediaTest.SupportsRead6 = !_dev.Read6(out buffer, out senseBuffer, 16, 2048, _dev.Timeout, out _); + mediaTest.SupportsRead6 = !_dev.Read6(out buffer, out _, 16, 2048, _dev.Timeout, out _); }); AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsRead6); @@ -1317,7 +1316,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_10).IsIndeterminate(); mediaTest.SupportsRead10 = !_dev.Read10(out buffer, - out senseBuffer, + out _, 0, false, true, @@ -1340,7 +1339,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_12).IsIndeterminate(); mediaTest.SupportsRead12 = !_dev.Read12(out buffer, - out senseBuffer, + out _, 0, false, true, @@ -1364,7 +1363,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_16).IsIndeterminate(); mediaTest.SupportsRead16 = !_dev.Read16(out buffer, - out senseBuffer, + out _, 0, false, true, @@ -1394,7 +1393,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_CD).IsIndeterminate(); mediaTest.SupportsReadCd = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2352, 1, @@ -1420,7 +1419,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_CD_MSF).IsIndeterminate(); mediaTest.SupportsReadCdMsf = !_dev.ReadCdMsf(out buffer, - out senseBuffer, + out _, 0x00000210, 0x00000211, 2352, @@ -1447,7 +1446,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_CD).IsIndeterminate(); mediaTest.SupportsReadCd = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2048, 1, @@ -1473,7 +1472,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_CD_MSF).IsIndeterminate(); mediaTest.SupportsReadCdMsf = !_dev.ReadCdMsf(out buffer, - out senseBuffer, + out _, 0x00000210, 0x00000211, 2048, @@ -1498,7 +1497,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_CD_full_sector).IsIndeterminate(); mediaTest.SupportsReadCdRaw = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2352, 1, @@ -1524,7 +1523,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_CD_MSF_full_sector).IsIndeterminate(); mediaTest.SupportsReadCdMsfRaw = !_dev.ReadCdMsf(out buffer, - out senseBuffer, + out _, 0x00000210, 0x00000211, 2352, @@ -1557,7 +1556,7 @@ public sealed partial class DeviceReport if(mediaType == "Audio CD") { sense = _dev.ReadCd(out buffer, - out senseBuffer, + out _, (uint)i, 2352, 1, @@ -1576,7 +1575,7 @@ public sealed partial class DeviceReport else { sense = _dev.ReadCd(out buffer, - out senseBuffer, + out _, (uint)i, 2352, 1, @@ -1621,7 +1620,7 @@ public sealed partial class DeviceReport if(mediaType == "Audio CD") { sense = _dev.ReadCd(out buffer, - out senseBuffer, + out _, (uint)i, 2352, 1, @@ -1640,7 +1639,7 @@ public sealed partial class DeviceReport else { sense = _dev.ReadCd(out buffer, - out senseBuffer, + out _, (uint)i, 2352, 1, @@ -1678,7 +1677,7 @@ public sealed partial class DeviceReport if(mediaType == "Audio CD") { mediaTest.CanReadLeadOut = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, (uint)((mediaTest.Blocks ?? 0) + 1), 2352, 1, @@ -1697,7 +1696,7 @@ public sealed partial class DeviceReport else { mediaTest.CanReadLeadOut = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, (uint)((mediaTest.Blocks ?? 0) + 1), 2352, 1, @@ -1732,7 +1731,7 @@ public sealed partial class DeviceReport else { mediaTest.CanReadC2Pointers = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 11, 2646, 1, @@ -1751,7 +1750,7 @@ public sealed partial class DeviceReport if(!mediaTest.CanReadC2Pointers == true) { mediaTest.CanReadC2Pointers = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 11, 2648, 1, @@ -1781,7 +1780,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_to_read_subchannels).IsIndeterminate(); mediaTest.CanReadPQSubchannel = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 11, 2368, 1, @@ -1804,7 +1803,7 @@ public sealed partial class DeviceReport mediaTest.PQSubchannelData = buffer; mediaTest.CanReadRWSubchannel = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 11, 2448, 1, @@ -1832,7 +1831,7 @@ public sealed partial class DeviceReport else { mediaTest.CanReadCorrectedSubchannel = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 11, 2448, 1, @@ -1870,7 +1869,7 @@ public sealed partial class DeviceReport else { mediaTest.CanReadPQSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 11, 2662, 1, @@ -1889,7 +1888,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadPQSubchannelWithC2 == false) { mediaTest.CanReadPQSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 11, 2664, 1, @@ -1913,7 +1912,7 @@ public sealed partial class DeviceReport mediaTest.PQSubchannelWithC2Data = buffer; mediaTest.CanReadRWSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 11, 2712, 1, @@ -1932,7 +1931,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadRWSubchannelWithC2 == false) { mediaTest.CanReadRWSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 11, 2714, 1, @@ -1956,7 +1955,7 @@ public sealed partial class DeviceReport mediaTest.RWSubchannelWithC2Data = buffer; mediaTest.CanReadCorrectedSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 11, 2712, 1, @@ -1975,7 +1974,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadCorrectedSubchannelWithC2 == false) { mediaTest.CanReadCorrectedSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 11, 2714, 1, @@ -2012,7 +2011,7 @@ public sealed partial class DeviceReport else { mediaTest.CanReadC2Pointers = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2646, 1, @@ -2031,7 +2030,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadC2Pointers == false) { mediaTest.CanReadC2Pointers = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2648, 1, @@ -2061,7 +2060,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_to_read_subchannels).IsIndeterminate(); mediaTest.CanReadPQSubchannel = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2368, 1, @@ -2084,7 +2083,7 @@ public sealed partial class DeviceReport mediaTest.PQSubchannelData = buffer; mediaTest.CanReadRWSubchannel = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2448, 1, @@ -2112,7 +2111,7 @@ public sealed partial class DeviceReport else { mediaTest.CanReadCorrectedSubchannel = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2448, 1, @@ -2149,7 +2148,7 @@ public sealed partial class DeviceReport else { mediaTest.CanReadPQSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2662, 1, @@ -2168,7 +2167,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadPQSubchannelWithC2 == false) { mediaTest.CanReadPQSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2664, 1, @@ -2192,7 +2191,7 @@ public sealed partial class DeviceReport mediaTest.PQSubchannelWithC2Data = buffer; mediaTest.CanReadRWSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2712, 1, @@ -2211,7 +2210,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadRWSubchannelWithC2 == false) { mediaTest.CanReadRWSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2714, 1, @@ -2235,7 +2234,7 @@ public sealed partial class DeviceReport mediaTest.RWSubchannelWithC2Data = buffer; mediaTest.CanReadCorrectedSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2712, 1, @@ -2259,7 +2258,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadCorrectedSubchannelWithC2 == false) { mediaTest.CanReadCorrectedSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2714, 1, @@ -2296,7 +2295,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_to_read_C2_Pointers).IsIndeterminate(); mediaTest.CanReadC2Pointers = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2342, 1, @@ -2315,7 +2314,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadC2Pointers == false) { mediaTest.CanReadC2Pointers = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2344, 1, @@ -2343,7 +2342,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_to_read_subchannels).IsIndeterminate(); mediaTest.CanReadPQSubchannel = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2064, 1, @@ -2366,7 +2365,7 @@ public sealed partial class DeviceReport mediaTest.PQSubchannelData = buffer; mediaTest.CanReadRWSubchannel = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2144, 1, @@ -2394,7 +2393,7 @@ public sealed partial class DeviceReport else { mediaTest.CanReadCorrectedSubchannel = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2144, 1, @@ -2431,7 +2430,7 @@ public sealed partial class DeviceReport else { mediaTest.CanReadPQSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2358, 1, @@ -2450,7 +2449,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadPQSubchannelWithC2 == false) { mediaTest.CanReadPQSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2360, 1, @@ -2474,7 +2473,7 @@ public sealed partial class DeviceReport mediaTest.PQSubchannelWithC2Data = buffer; mediaTest.CanReadRWSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2438, 1, @@ -2493,7 +2492,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadRWSubchannelWithC2 == false) { mediaTest.CanReadRWSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2440, 1, @@ -2517,7 +2516,7 @@ public sealed partial class DeviceReport mediaTest.RWSubchannelWithC2Data = buffer; mediaTest.CanReadCorrectedSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2438, 1, @@ -2536,7 +2535,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadCorrectedSubchannelWithC2 == false) { mediaTest.CanReadCorrectedSubchannelWithC2 = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, 16, 2440, 1, @@ -2570,7 +2569,7 @@ public sealed partial class DeviceReport mediaTest.SupportsPlextorReadCDDA = !_dev.PlextorReadCdDa(out buffer, - out senseBuffer, + out _, 16, 2352, 1, @@ -2594,7 +2593,7 @@ public sealed partial class DeviceReport mediaTest.SupportsPioneerReadCDDA = !_dev.PioneerReadCdDa(out buffer, - out senseBuffer, + out _, 16, 2352, 1, @@ -2615,7 +2614,7 @@ public sealed partial class DeviceReport mediaTest.SupportsPioneerReadCDDAMSF = !_dev.PioneerReadCdDaMsf(out buffer, - out senseBuffer, + out _, 0x00000210, 0x00000211, 2352, @@ -2637,8 +2636,7 @@ public sealed partial class DeviceReport { ctx.AddTask(Localization.Core.Trying_NEC_READ_CD_DA).IsIndeterminate(); - mediaTest.SupportsNECReadCDDA = - !_dev.NecReadCdDa(out buffer, out senseBuffer, 16, 1, _dev.Timeout, out _); + mediaTest.SupportsNECReadCDDA = !_dev.NecReadCdDa(out buffer, out _, 16, 1, _dev.Timeout, out _); }); AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsNECReadCDDA); @@ -2648,16 +2646,19 @@ public sealed partial class DeviceReport } mediaTest.LongBlockSize = mediaTest.BlockSize; + byte[] senseBytes = []; Spectre.ProgressSingleSpinner(ctx => { + ReadOnlySpan localSense; ctx.AddTask(Localization.Core.Trying_SCSI_READ_LONG_10).IsIndeterminate(); - sense = _dev.ReadLong10(out buffer, out senseBuffer, false, false, 16, 0xFFFF, _dev.Timeout, out _); + sense = _dev.ReadLong10(out buffer, out localSense, false, false, 16, 0xFFFF, _dev.Timeout, out _); + senseBytes = localSense.ToArray(); }); if(sense && !_dev.Error) { - DecodedSense? decSense = Sense.Decode(senseBuffer); + DecodedSense? decSense = Sense.Decode(senseBytes); if(decSense is { SenseKey: SenseKeys.IllegalRequest, ASC: 0x24, ASCQ: 0x00 }) { @@ -2682,7 +2683,7 @@ public sealed partial class DeviceReport if(mediaTest.SupportsReadLong == true && mediaTest.LongBlockSize == mediaTest.BlockSize) { // DVDs - sense = _dev.ReadLong10(out buffer, out senseBuffer, false, false, 16, 37856, _dev.Timeout, out _); + sense = _dev.ReadLong10(out buffer, out _, false, false, 16, 37856, _dev.Timeout, out _); if(!sense && !_dev.Error) { @@ -2699,7 +2700,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_Plextor_trick_to_raw_read_DVDs).IsIndeterminate(); mediaTest.SupportsPlextorReadRawDVD = - !_dev.PlextorReadRawDvd(out buffer, out senseBuffer, 16, 1, _dev.Timeout, out _); + !_dev.PlextorReadRawDvd(out buffer, out _, 16, 1, _dev.Timeout, out _); }); AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsPlextorReadRawDVD); @@ -2717,7 +2718,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_HL_DT_ST_aka_LG_trick_to_raw_read_DVDs).IsIndeterminate(); mediaTest.SupportsHLDTSTReadRawDVD = - !_dev.HlDtStReadRawDvd(out buffer, out senseBuffer, 16, 1, _dev.Timeout, out _, 0xffff, false); + !_dev.HlDtStReadRawDvd(out buffer, out _, 16, 1, _dev.Timeout, out _, 0xffff, false); }); AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsHLDTSTReadRawDVD); @@ -2735,7 +2736,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_Lite_On_trick_to_raw_read_DVDs).IsIndeterminate(); mediaTest.SupportsLiteOnReadRawDVD = - !_dev.LiteOnReadRawDvd(out buffer, out senseBuffer, 16, 1, _dev.Timeout, out _, 0xffff, false); + !_dev.LiteOnReadRawDvd(out buffer, out _, 16, 1, _dev.Timeout, out _, 0xffff, false); }); AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsLiteOnReadRawDVD); @@ -2846,10 +2847,12 @@ public sealed partial class DeviceReport if(!triedLba0) return; - mediaTest.CanReadF1_06 = - !_dev.MediaTekReadDram(out buffer, out senseBuffer, 0, 0xB00, _dev.Timeout, out _); + ReadOnlySpan localSense; - mediaTest.ReadF1_06Data = mediaTest.CanReadF1_06 == true ? buffer : senseBuffer; + mediaTest.CanReadF1_06 = + !_dev.MediaTekReadDram(out buffer, out localSense, 0, 0xB00, _dev.Timeout, out _); + + mediaTest.ReadF1_06Data = mediaTest.CanReadF1_06 == true ? buffer : localSense.ToArray(); AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.CanReadF1_06); }); @@ -2990,10 +2993,12 @@ public sealed partial class DeviceReport if(!triedLeadOut) return; - mediaTest.CanReadF1_06LeadOut = - !_dev.MediaTekReadDram(out buffer, out senseBuffer, 0, 0xB00, _dev.Timeout, out _); + ReadOnlySpan localSense; - mediaTest.ReadF1_06LeadOutData = mediaTest.CanReadF1_06LeadOut == true ? buffer : senseBuffer; + mediaTest.CanReadF1_06LeadOut = + !_dev.MediaTekReadDram(out buffer, out localSense, 0, 0xB00, _dev.Timeout, out _); + + mediaTest.ReadF1_06LeadOutData = mediaTest.CanReadF1_06LeadOut == true ? buffer : localSense.ToArray(); // This means it has returned the same as previous read, so not really lead-out. if(mediaTest.CanReadF1_06 == true && @@ -3001,7 +3006,7 @@ public sealed partial class DeviceReport mediaTest.ReadF1_06Data.SequenceEqual(mediaTest.ReadF1_06LeadOutData)) { mediaTest.CanReadF1_06LeadOut = false; - mediaTest.ReadF1_06LeadOutData = senseBuffer; + mediaTest.ReadF1_06LeadOutData = localSense.ToArray(); } AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.CanReadF1_06LeadOut); @@ -3014,7 +3019,7 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Querying_CD_Full_TOC).IsIndeterminate(); - mediaTest.CanReadFullTOC = !_dev.ReadRawToc(out buffer, out senseBuffer, 1, _dev.Timeout, out _); + mediaTest.CanReadFullTOC = !_dev.ReadRawToc(out buffer, out _, 1, _dev.Timeout, out _); }); AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.CanReadFullTOC); @@ -3082,7 +3087,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_CD_in_first_session_Lead_Out).IsIndeterminate(); mediaTest.CanReadingIntersessionLeadOut = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, firstSessionLeadOutLba, 2448, 1, @@ -3101,7 +3106,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadingIntersessionLeadOut != false) return; mediaTest.CanReadingIntersessionLeadOut = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, firstSessionLeadOutLba, 2368, 1, @@ -3120,7 +3125,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadingIntersessionLeadOut == false) { mediaTest.CanReadingIntersessionLeadOut = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, firstSessionLeadOutLba, 2352, 1, @@ -3149,7 +3154,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_CD_in_second_session_Lead_In).IsIndeterminate(); mediaTest.CanReadingIntersessionLeadIn = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, secondSessionLeadInLba, 2448, 1, @@ -3168,7 +3173,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadingIntersessionLeadIn != false) return; mediaTest.CanReadingIntersessionLeadIn = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, secondSessionLeadInLba, 2368, 1, @@ -3187,7 +3192,7 @@ public sealed partial class DeviceReport if(mediaTest.CanReadingIntersessionLeadIn == false) { mediaTest.CanReadingIntersessionLeadIn = !_dev.ReadCd(out buffer, - out senseBuffer, + out _, secondSessionLeadInLba, 2352, 1, diff --git a/Aaru.Core/Devices/Report/Scsi.cs b/Aaru.Core/Devices/Report/Scsi.cs index 127d3a865..b72a6db95 100644 --- a/Aaru.Core/Devices/Report/Scsi.cs +++ b/Aaru.Core/Devices/Report/Scsi.cs @@ -510,15 +510,15 @@ public sealed partial class DeviceReport /// Media report public TestedMedia ReportScsiMedia() { - var mediaTest = new TestedMedia(); - bool sense = true; - byte[] buffer = []; - byte[] senseBuffer = []; + var mediaTest = new TestedMedia(); + bool sense = true; + byte[] buffer = []; + ReadOnlySpan senseBuffer = []; Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Querying_SCSI_READ_CAPACITY).IsIndeterminate(); - sense = _dev.ReadCapacity(out buffer, out senseBuffer, _dev.Timeout, out _); + sense = _dev.ReadCapacity(out buffer, out _, _dev.Timeout, out _); }); if(!sense && !_dev.Error) @@ -535,7 +535,7 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Querying_SCSI_READ_CAPACITY_16).IsIndeterminate(); - sense = _dev.ReadCapacity16(out buffer, out buffer, _dev.Timeout, out _); + sense = _dev.ReadCapacity16(out buffer, out _, _dev.Timeout, out _); }); if(!sense && !_dev.Error) @@ -555,7 +555,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_SCSI_MODE_SENSE_10).IsIndeterminate(); sense = _dev.ModeSense10(out buffer, - out senseBuffer, + out _, false, true, ScsiModeSensePageControl.Current, @@ -574,7 +574,7 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Querying_SCSI_MODE_SENSE).IsIndeterminate(); - sense = _dev.ModeSense(out buffer, out senseBuffer, _dev.Timeout, out _); + sense = _dev.ModeSense(out buffer, out _, _dev.Timeout, out _); }); if(!sense && !_dev.Error) @@ -597,7 +597,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_6).IsIndeterminate(); mediaTest.SupportsRead6 = - !_dev.Read6(out buffer, out senseBuffer, 0, mediaTest.BlockSize ?? 512, _dev.Timeout, out _); + !_dev.Read6(out buffer, out _, 0, mediaTest.BlockSize ?? 512, _dev.Timeout, out _); }); AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsRead6); @@ -608,7 +608,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_10).IsIndeterminate(); mediaTest.SupportsRead10 = !_dev.Read10(out buffer, - out senseBuffer, + out _, 0, false, false, @@ -630,7 +630,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_12).IsIndeterminate(); mediaTest.SupportsRead12 = !_dev.Read12(out buffer, - out senseBuffer, + out _, 0, false, false, @@ -653,7 +653,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_16).IsIndeterminate(); mediaTest.SupportsRead16 = !_dev.Read16(out buffer, - out senseBuffer, + out _, 0, false, false, @@ -671,16 +671,19 @@ public sealed partial class DeviceReport mediaTest.Read16Data = buffer; mediaTest.LongBlockSize = mediaTest.BlockSize; + byte[] senseBytes = []; Spectre.ProgressSingleSpinner(ctx => { + ReadOnlySpan localSense; ctx.AddTask(Localization.Core.Trying_SCSI_READ_LONG_10).IsIndeterminate(); - sense = _dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 0xFFFF, _dev.Timeout, out _); + sense = _dev.ReadLong10(out buffer, out localSense, false, false, 0, 0xFFFF, _dev.Timeout, out _); + senseBytes = localSense.ToArray(); }); if(sense && !_dev.Error) { - DecodedSense? decSense = Sense.Decode(senseBuffer); + DecodedSense? decSense = Sense.Decode(senseBytes); if(decSense is { SenseKey: SenseKeys.IllegalRequest, ASC: 0x24, ASCQ: 0x00 }) { @@ -704,12 +707,13 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { + ReadOnlySpan localSense; ctx.AddTask(Localization.Core.Trying_SCSI_READ_LONG_16).IsIndeterminate(); - sense = _dev.ReadLong16(out buffer, out senseBuffer, false, 0, 0xFFFF, _dev.Timeout, out _); + sense = _dev.ReadLong16(out buffer, out localSense, false, 0, 0xFFFF, _dev.Timeout, out _); if(sense && !_dev.Error) { - DecodedSense? decSense = Sense.Decode(senseBuffer); + DecodedSense? decSense = Sense.Decode(localSense); if(decSense is { SenseKey: SenseKeys.IllegalRequest, ASC: 0x24, ASCQ: 0x00 }) { @@ -753,14 +757,14 @@ public sealed partial class DeviceReport { sense = mediaTest.SupportsReadLong16 == true ? _dev.ReadLong16(out buffer, - out senseBuffer, + out localSense, false, 0, testSize, _dev.Timeout, out _) : _dev.ReadLong10(out buffer, - out senseBuffer, + out localSense, false, false, 0, @@ -790,14 +794,14 @@ public sealed partial class DeviceReport { sense = mediaTest.SupportsReadLong16 == true ? _dev.ReadLong16(out buffer, - out senseBuffer, + out localSense, false, 0, testSize, _dev.Timeout, out _) : _dev.ReadLong10(out buffer, - out senseBuffer, + out localSense, false, false, 0, @@ -817,9 +821,9 @@ public sealed partial class DeviceReport case 2048: { sense = mediaTest.SupportsReadLong16 == true - ? _dev.ReadLong16(out buffer, out senseBuffer, false, 0, 2380, _dev.Timeout, out _) + ? _dev.ReadLong16(out buffer, out localSense, false, 0, 2380, _dev.Timeout, out _) : _dev.ReadLong10(out buffer, - out senseBuffer, + out localSense, false, false, 0, @@ -834,9 +838,9 @@ public sealed partial class DeviceReport case 4096: { sense = mediaTest.SupportsReadLong16 == true - ? _dev.ReadLong16(out buffer, out senseBuffer, false, 0, 4760, _dev.Timeout, out _) + ? _dev.ReadLong16(out buffer, out localSense, false, 0, 4760, _dev.Timeout, out _) : _dev.ReadLong10(out buffer, - out senseBuffer, + out localSense, false, false, 0, @@ -851,9 +855,9 @@ public sealed partial class DeviceReport case 8192: { sense = mediaTest.SupportsReadLong16 == true - ? _dev.ReadLong16(out buffer, out senseBuffer, false, 0, 9424, _dev.Timeout, out _) + ? _dev.ReadLong16(out buffer, out localSense, false, 0, 9424, _dev.Timeout, out _) : _dev.ReadLong10(out buffer, - out senseBuffer, + out localSense, false, false, 0, @@ -872,8 +876,7 @@ public sealed partial class DeviceReport { ctx.AddTask(Localization.Core.Trying_SCSI_READ_MEDIA_SERIAL_NUMBER).IsIndeterminate(); - mediaTest.CanReadMediaSerial = - !_dev.ReadMediaSerialNumber(out buffer, out senseBuffer, _dev.Timeout, out _); + mediaTest.CanReadMediaSerial = !_dev.ReadMediaSerialNumber(out buffer, out _, _dev.Timeout, out _); }); return mediaTest; @@ -883,9 +886,9 @@ public sealed partial class DeviceReport /// Media report public TestedMedia ReportScsi() { - bool sense = true; - byte[] buffer = []; - byte[] senseBuffer = []; + bool sense = true; + byte[] buffer = []; + ReadOnlySpan senseBuffer = []; var capabilities = new TestedMedia { @@ -895,7 +898,7 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Querying_SCSI_READ_CAPACITY).IsIndeterminate(); - sense = _dev.ReadCapacity(out buffer, out senseBuffer, _dev.Timeout, out _); + sense = _dev.ReadCapacity(out buffer, out _, _dev.Timeout, out _); }); if(!sense && !_dev.Error) @@ -912,7 +915,7 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Querying_SCSI_READ_CAPACITY_16).IsIndeterminate(); - sense = _dev.ReadCapacity16(out buffer, out buffer, _dev.Timeout, out _); + sense = _dev.ReadCapacity16(out buffer, out _, _dev.Timeout, out _); }); if(!sense && !_dev.Error) @@ -932,7 +935,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Querying_SCSI_MODE_SENSE_10).IsIndeterminate(); sense = _dev.ModeSense10(out buffer, - out senseBuffer, + out _, false, true, ScsiModeSensePageControl.Current, @@ -951,7 +954,7 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(Localization.Core.Querying_SCSI_MODE_SENSE).IsIndeterminate(); - sense = _dev.ModeSense(out buffer, out senseBuffer, _dev.Timeout, out _); + sense = _dev.ModeSense(out buffer, out _, _dev.Timeout, out _); }); if(!sense && !_dev.Error) @@ -974,7 +977,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_6).IsIndeterminate(); capabilities.SupportsRead6 = !_dev.Read6(out buffer, - out senseBuffer, + out _, 0, capabilities.BlockSize ?? 512, _dev.Timeout, @@ -989,7 +992,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_10).IsIndeterminate(); capabilities.SupportsRead10 = !_dev.Read10(out buffer, - out senseBuffer, + out _, 0, false, false, @@ -1011,7 +1014,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_12).IsIndeterminate(); capabilities.SupportsRead12 = !_dev.Read12(out buffer, - out senseBuffer, + out _, 0, false, false, @@ -1034,7 +1037,7 @@ public sealed partial class DeviceReport ctx.AddTask(Localization.Core.Trying_SCSI_READ_16).IsIndeterminate(); capabilities.SupportsRead16 = !_dev.Read16(out buffer, - out senseBuffer, + out _, 0, false, false, @@ -1052,16 +1055,19 @@ public sealed partial class DeviceReport capabilities.Read16Data = buffer; capabilities.LongBlockSize = capabilities.BlockSize; + byte[] senseBytes = []; Spectre.ProgressSingleSpinner(ctx => { + ReadOnlySpan localSense; ctx.AddTask(Localization.Core.Trying_SCSI_READ_LONG_10).IsIndeterminate(); - sense = _dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 0xFFFF, _dev.Timeout, out _); + sense = _dev.ReadLong10(out buffer, out localSense, false, false, 0, 0xFFFF, _dev.Timeout, out _); + senseBytes = localSense.ToArray(); }); if(sense && !_dev.Error) { - DecodedSense? decSense = Sense.Decode(senseBuffer); + DecodedSense? decSense = Sense.Decode(senseBytes); if(decSense is { SenseKey: SenseKeys.IllegalRequest, ASC: 0x24, ASCQ: 0x00 }) { @@ -1085,14 +1091,16 @@ public sealed partial class DeviceReport Spectre.ProgressSingleSpinner(ctx => { + ReadOnlySpan localSense; ctx.AddTask(Localization.Core.Trying_SCSI_READ_LONG_16).IsIndeterminate(); - sense = _dev.ReadLong16(out buffer, out senseBuffer, false, 0, 0xFFFF, _dev.Timeout, out _); + sense = _dev.ReadLong16(out buffer, out localSense, false, 0, 0xFFFF, _dev.Timeout, out _); + senseBytes = localSense.ToArray(); }); if(sense && !_dev.Error) { capabilities.SupportsReadLong16 = true; - DecodedSense? decSense = Sense.Decode(senseBuffer); + DecodedSense? decSense = Sense.Decode(senseBytes); if(decSense is { SenseKey: SenseKeys.IllegalRequest, ASC: 0x24, ASCQ: 0x00 }) { @@ -1142,15 +1150,9 @@ public sealed partial class DeviceReport }) { sense = capabilities.SupportsReadLong16 == true - ? _dev.ReadLong16(out buffer, - out senseBuffer, - false, - 0, - testSize, - _dev.Timeout, - out _) + ? _dev.ReadLong16(out buffer, out _, false, 0, testSize, _dev.Timeout, out _) : _dev.ReadLong10(out buffer, - out senseBuffer, + out _, false, false, 0, @@ -1180,15 +1182,9 @@ public sealed partial class DeviceReport }) { sense = capabilities.SupportsReadLong16 == true - ? _dev.ReadLong16(out buffer, - out senseBuffer, - false, - 0, - testSize, - _dev.Timeout, - out _) + ? _dev.ReadLong16(out buffer, out _, false, 0, testSize, _dev.Timeout, out _) : _dev.ReadLong10(out buffer, - out senseBuffer, + out _, false, false, 0, @@ -1209,15 +1205,8 @@ public sealed partial class DeviceReport case 2048: { sense = capabilities.SupportsReadLong16 == true - ? _dev.ReadLong16(out buffer, out senseBuffer, false, 0, 2380, _dev.Timeout, out _) - : _dev.ReadLong10(out buffer, - out senseBuffer, - false, - false, - 0, - 2380, - _dev.Timeout, - out _); + ? _dev.ReadLong16(out buffer, out _, false, 0, 2380, _dev.Timeout, out _) + : _dev.ReadLong10(out buffer, out _, false, false, 0, 2380, _dev.Timeout, out _); if(sense || _dev.Error) return; @@ -1229,15 +1218,8 @@ public sealed partial class DeviceReport case 4096: { sense = capabilities.SupportsReadLong16 == true - ? _dev.ReadLong16(out buffer, out senseBuffer, false, 0, 4760, _dev.Timeout, out _) - : _dev.ReadLong10(out buffer, - out senseBuffer, - false, - false, - 0, - 4760, - _dev.Timeout, - out _); + ? _dev.ReadLong16(out buffer, out _, false, 0, 4760, _dev.Timeout, out _) + : _dev.ReadLong10(out buffer, out _, false, false, 0, 4760, _dev.Timeout, out _); if(sense || _dev.Error) return; @@ -1249,15 +1231,8 @@ public sealed partial class DeviceReport case 8192: { sense = capabilities.SupportsReadLong16 == true - ? _dev.ReadLong16(out buffer, out senseBuffer, false, 0, 9424, _dev.Timeout, out _) - : _dev.ReadLong10(out buffer, - out senseBuffer, - false, - false, - 0, - 9424, - _dev.Timeout, - out _); + ? _dev.ReadLong16(out buffer, out _, false, 0, 9424, _dev.Timeout, out _) + : _dev.ReadLong10(out buffer, out _, false, false, 0, 9424, _dev.Timeout, out _); if(sense || _dev.Error) return; diff --git a/Aaru.Core/Devices/Scanning/SCSI.cs b/Aaru.Core/Devices/Scanning/SCSI.cs index a265bc0a7..4be9f64bb 100644 --- a/Aaru.Core/Devices/Scanning/SCSI.cs +++ b/Aaru.Core/Devices/Scanning/SCSI.cs @@ -49,15 +49,15 @@ public sealed partial class MediaScan { ScanResults Scsi() { - var results = new ScanResults(); - MhddLog mhddLog; - IbgLog ibgLog; - byte[] senseBuf; - bool sense; - uint blockSize = 0; - ushort currentProfile = 0x0001; - bool foundReadCommand = false; - bool readcd = false; + var results = new ScanResults(); + MhddLog mhddLog; + IbgLog ibgLog; + ReadOnlySpan senseBuf; + bool sense; + uint blockSize = 0; + ushort currentProfile = 0x0001; + bool foundReadCommand = false; + bool readcd = false; results.Blocks = 0; @@ -119,7 +119,7 @@ public sealed partial class MediaScan { StoppingErrorMessage?.Invoke(string.Format(Localization.Core .Error_testing_unit_was_ready_0, - Sense.PrettifySense(senseBuf))); + Sense.PrettifySense(senseBuf.ToArray()))); return results; } @@ -148,7 +148,7 @@ public sealed partial class MediaScan { StoppingErrorMessage?.Invoke(string.Format(Localization.Core .Error_testing_unit_was_ready_0, - Sense.PrettifySense(senseBuf))); + Sense.PrettifySense(senseBuf.ToArray()))); return results; } @@ -157,7 +157,7 @@ public sealed partial class MediaScan } default: StoppingErrorMessage?.Invoke(string.Format(Localization.Core.Error_testing_unit_was_ready_0, - Sense.PrettifySense(senseBuf))); + Sense.PrettifySense(senseBuf.ToArray()))); return results; } @@ -458,7 +458,9 @@ public sealed partial class MediaScan { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_CD_error_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); + + ; senseDecoded = Sense.Decode(senseBuf); diff --git a/Aaru.Core/Logging/ErrorLog.cs b/Aaru.Core/Logging/ErrorLog.cs index 7433a1dd1..8a3e8faa0 100644 --- a/Aaru.Core/Logging/ErrorLog.cs +++ b/Aaru.Core/Logging/ErrorLog.cs @@ -319,8 +319,8 @@ public sealed class ErrorLog } DecodedSense? decodedSense = Sense.Decode(senseBuffer); - string prettySense = Sense.PrettifySense(senseBuffer); - var hexSense = string.Join(' ', senseBuffer.Select(b => $"{b:X2}")); + string prettySense = Sense.PrettifySense(senseBuffer.ToArray()); + string hexSense = string.Join(' ', senseBuffer.Select(b => $"{b:X2}")); if(decodedSense.HasValue) { @@ -369,6 +369,9 @@ public sealed class ErrorLog _logSw.Flush(); } + public void WriteLine(ulong block, bool osError, int errno, ReadOnlySpan senseBuffer) => + WriteLine(block, osError, errno, senseBuffer.ToArray()); + /// Register an SCSI error after trying to read /// Starting block /// true if operating system returned an error status instead of the device @@ -385,8 +388,8 @@ public sealed class ErrorLog } DecodedSense? decodedSense = Sense.Decode(senseBuffer); - string prettySense = Sense.PrettifySense(senseBuffer); - var hexSense = string.Join(' ', senseBuffer.Select(b => $"{b:X2}")); + string prettySense = Sense.PrettifySense(senseBuffer.ToArray()); + string hexSense = string.Join(' ', senseBuffer.Select(b => $"{b:X2}")); if(decodedSense.HasValue) { @@ -488,4 +491,9 @@ public sealed class ErrorLog throw new NotImplementedException(); } + + public void WriteLine(string command, bool osError, int errno, ReadOnlySpan senseBuffer) + { + WriteLine(command, osError, errno, senseBuffer.ToArray()); + } } \ No newline at end of file diff --git a/Aaru.Core/Media/Info/ScsiInfo.cs b/Aaru.Core/Media/Info/ScsiInfo.cs index eaa9cea27..791f26fd6 100644 --- a/Aaru.Core/Media/Info/ScsiInfo.cs +++ b/Aaru.Core/Media/Info/ScsiInfo.cs @@ -66,13 +66,13 @@ public sealed class ScsiInfo MediaType = MediaType.Unknown; MediaInserted = false; - int resets = 0; - bool sense; - byte[] cmdBuf; - byte[] senseBuf; - bool containsFloppyPage = false; - int sessions = 1; - int firstTrackLastSession = 1; + int resets = 0; + bool sense; + byte[] cmdBuf; + ReadOnlySpan senseBuf; + bool containsFloppyPage = false; + int sessions = 1; + int firstTrackLastSession = 1; if(dev.IsRemovable) { @@ -137,7 +137,7 @@ public sealed class ScsiInfo if(sense) { AaruLogging.Error(Localization.Core.Error_testing_unit_was_ready_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); return; } @@ -146,7 +146,7 @@ public sealed class ScsiInfo } default: AaruLogging.Error(Localization.Core.Error_testing_unit_was_ready_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); return; } @@ -211,7 +211,7 @@ public sealed class ScsiInfo if(dev.ScsiType != PeripheralDeviceTypes.MultiMediaDevice) { AaruLogging.Error(Localization.Core.Unable_to_get_media_capacity); - AaruLogging.Error("{0}", Sense.PrettifySense(senseBuf)); + AaruLogging.Error("{0}", Sense.PrettifySense(senseBuf.ToArray())); } } @@ -262,7 +262,7 @@ public sealed class ScsiInfo /* sense = dev.ReadAttribute(out seqBuf, out senseBuf, ScsiAttributeAction.List, 0, dev.Timeout, out _); if (sense) - AaruLogging.ErrorWriteLine("SCSI READ ATTRIBUTE:\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); + AaruLogging.ErrorWriteLine("SCSI READ ATTRIBUTE:\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf.ToArray())); else { DataFile.WriteTo(MODULE_NAME, outputPrefix, "_scsi_readattribute.bin", "SCSI READ ATTRIBUTE", seqBuf); @@ -296,7 +296,7 @@ public sealed class ScsiInfo if(sense) { - AaruLogging.Debug(MODULE_NAME, "READ GET CONFIGURATION:\n{0}", Sense.PrettifySense(senseBuf)); + AaruLogging.Debug(MODULE_NAME, "READ GET CONFIGURATION:\n{0}", Sense.PrettifySense(senseBuf.ToArray())); if(dev.IsUsb && scsiMediumType is 0x40 or 0x41 or 0x42) MediaType = MediaType.FlashDrive; } @@ -371,7 +371,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Recognized_Format_Layers_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else RecognizedFormatLayers = cmdBuf; @@ -390,7 +390,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Write_Protection_Status_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else WriteProtectionStatus = cmdBuf; @@ -399,7 +399,7 @@ public sealed class ScsiInfo /* sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.CapabilityList, 0, dev.Timeout, out _); if(sense) - AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: Capability List\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); + AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: Capability List\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf.ToArray())); else DataFile.WriteTo(MODULE_NAME, outputPrefix, "_readdiscstructure_capabilitylist.bin", "SCSI READ DISC STRUCTURE", cmdBuf); */ @@ -438,7 +438,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_PFI_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else { @@ -490,7 +490,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_DMI_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else { @@ -529,7 +529,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_CMI_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdCmi = cmdBuf; @@ -558,7 +558,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_BCA_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdBca = cmdBuf; @@ -577,7 +577,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_DVD_AACS_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdAacs = cmdBuf; @@ -604,7 +604,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_DDS_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdRamDds = cmdBuf; @@ -623,7 +623,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Medium_Status_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdRamCartridgeStatus = cmdBuf; @@ -642,7 +642,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_SAI_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdRamSpareArea = cmdBuf; @@ -669,7 +669,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Last_Out_Border_RMD_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else LastBorderOutRmd = cmdBuf; @@ -698,7 +698,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Disc_Key_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdDiscKey = cmdBuf; @@ -717,7 +717,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Sector_CMI_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdSectorCmi = cmdBuf; @@ -728,47 +728,47 @@ public sealed class ScsiInfo /* sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.MediaIdentifier, 0, dev.Timeout, out _); if(sense) - AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: Media ID\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); + AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: Media ID\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf.ToArray())); else DataFile.WriteTo(MODULE_NAME, outputPrefix, "_readdiscstructure_dvd_mediaid.bin", "SCSI READ DISC STRUCTURE", cmdBuf); sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.MediaKeyBlock, 0, dev.Timeout, out _); if(sense) - AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: MKB\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); + AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: MKB\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf.ToArray())); else DataFile.WriteTo(MODULE_NAME, outputPrefix, "_readdiscstructure_dvd_mkb.bin", "SCSI READ DISC STRUCTURE", cmdBuf); sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.AACSVolId, 0, dev.Timeout, out _); if(sense) - AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS Volume ID\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); + AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS Volume ID\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf.ToArray())); else DataFile.WriteTo(MODULE_NAME, outputPrefix, "_readdiscstructure_aacsvolid.bin", "SCSI READ DISC STRUCTURE", cmdBuf); sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.AACSMediaSerial, 0, dev.Timeout, out _); if(sense) - AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS Media Serial Number\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); + AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS Media Serial Number\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf.ToArray())); else DataFile.WriteTo(MODULE_NAME, outputPrefix, "_readdiscstructure_aacssn.bin", "SCSI READ DISC STRUCTURE", cmdBuf); sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.AACSMediaId, 0, dev.Timeout, out _); if(sense) - AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS Media ID\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); + AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS Media ID\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf.ToArray())); else DataFile.WriteTo(MODULE_NAME, outputPrefix, "_readdiscstructure_aacsmediaid.bin", "SCSI READ DISC STRUCTURE", cmdBuf); sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.AACSMKB, 0, dev.Timeout, out _); if(sense) - AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS MKB\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); + AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS MKB\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf.ToArray())); else DataFile.WriteTo(MODULE_NAME, outputPrefix, "_readdiscstructure_aacsmkb.bin", "SCSI READ DISC STRUCTURE", cmdBuf); sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.AACSLBAExtents, 0, dev.Timeout, out _); if(sense) - AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS LBA Extents\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); + AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS LBA Extents\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf.ToArray())); else DataFile.WriteTo(MODULE_NAME, outputPrefix, "_readdiscstructure_aacslbaextents.bin", "SCSI READ DISC STRUCTURE", cmdBuf); sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.AACSMKBCPRM, 0, dev.Timeout, out _); if(sense) - AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS CPRM MKB\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); + AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS CPRM MKB\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf.ToArray())); else DataFile.WriteTo(MODULE_NAME, outputPrefix, "_readdiscstructure_aacscprmmkb.bin", "SCSI READ DISC STRUCTURE", cmdBuf); sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.AACSDataKeys, 0, dev.Timeout, out _); if(sense) - AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS Data Keys\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); + AaruLogging.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: AACS Data Keys\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf.ToArray())); else DataFile.WriteTo(MODULE_NAME, outputPrefix, "_readdiscstructure_aacsdatakeys.bin", "SCSI READ DISC STRUCTURE", cmdBuf); */ @@ -793,7 +793,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Pre_Recorded_Info_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else { @@ -828,7 +828,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_DVD_R_Media_ID_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdrMediaIdentifier = cmdBuf; @@ -847,7 +847,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_DVD_R_PFI_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else { @@ -880,7 +880,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_ADIP_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdPlusAdip = cmdBuf; @@ -899,7 +899,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_DCB_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdPlusDcb = cmdBuf; @@ -925,7 +925,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_HD_DVD_CMI_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else HddvdCopyrightInformation = cmdBuf; @@ -955,7 +955,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_HD_DVD_R_Medium_Status, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else HddvdrMediumStatus = cmdBuf; @@ -974,7 +974,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Last_RMD_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else HddvdrLastRmd = cmdBuf; @@ -1002,7 +1002,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Layer_Capacity_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdrLayerCapacity = cmdBuf; @@ -1032,7 +1032,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Middle_Zone_Start_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdrDlMiddleZoneStart = cmdBuf; @@ -1051,7 +1051,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Jump_Interval_Size_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdrDlJumpIntervalSize = cmdBuf; @@ -1070,7 +1070,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Manual_Layer_Jump_Start_LBA_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdrDlManualLayerJumpStartLba = cmdBuf; @@ -1089,7 +1089,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Remap_Anchor_Point_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdrDlRemapAnchorPoint = cmdBuf; @@ -1123,7 +1123,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_DI_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else BlurayDiscInformation = cmdBuf; @@ -1142,7 +1142,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_PAC_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else BlurayPac = cmdBuf; @@ -1161,7 +1161,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_BCA_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else BlurayBurstCuttingArea = cmdBuf; @@ -1193,7 +1193,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_DDS_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else BlurayDds = cmdBuf; @@ -1212,7 +1212,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Cartridge_Status_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else BlurayCartridgeStatus = cmdBuf; @@ -1231,7 +1231,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, "READ DISC STRUCTURE: Spare Area Information\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else BluraySpareAreaInformation = cmdBuf; @@ -1250,7 +1250,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Raw_DFL_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else BlurayRawDfl = cmdBuf; @@ -1265,7 +1265,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_001b_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else BlurayTrackResources = cmdBuf; @@ -1280,7 +1280,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_010b_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else BlurayPowResources = cmdBuf; @@ -1304,7 +1304,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_TOC_PMA_ATIP_TOC_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else { @@ -1322,7 +1322,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_TOC_PMA_ATIP_ATIP_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else { @@ -1346,7 +1346,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_TOC_PMA_ATIP_Session_Info_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else if(cmdBuf.Length > 4) { @@ -1366,7 +1366,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_TOC_PMA_ATIP_Raw_TOC_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else if(cmdBuf.Length > 4) { @@ -1381,7 +1381,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_TOC_PMA_ATIP_PMA_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else if(cmdBuf.Length > 4) Pma = cmdBuf; @@ -1391,7 +1391,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_TOC_PMA_ATIP_CD_TEXT_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else if(cmdBuf.Length > 4) { @@ -1438,7 +1438,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_PFI_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else { @@ -1475,7 +1475,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_DMI_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else DvdDmi = cmdBuf; @@ -1487,9 +1487,9 @@ public sealed class ScsiInfo sense = dev.ReadMediaSerialNumber(out cmdBuf, out senseBuf, dev.Timeout, out _); if(sense) - { - AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_MEDIA_SERIAL_NUMBER_0, Sense.PrettifySense(senseBuf)); - } + AaruLogging.Debug(MODULE_NAME, + Localization.Core.READ_MEDIA_SERIAL_NUMBER_0, + Sense.PrettifySense(senseBuf.ToArray())); else { if(cmdBuf.Length >= 4) MediaSerialNumber = cmdBuf; @@ -1517,7 +1517,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.KREON_EXTRACT_SS_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else XboxSecuritySector = cmdBuf; @@ -1702,7 +1702,7 @@ public sealed class ScsiInfo { AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_DISC_INFORMATION_000b_0, - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf.ToArray())); } else { diff --git a/Aaru.Decoders/SCSI/Sense.cs b/Aaru.Decoders/SCSI/Sense.cs index 00016ad39..10c3c8129 100644 --- a/Aaru.Decoders/SCSI/Sense.cs +++ b/Aaru.Decoders/SCSI/Sense.cs @@ -219,7 +219,7 @@ public static class Sense return decoded; } - public static DecodedSense? Decode(byte[] sense) + public static DecodedSense? Decode(ReadOnlySpan sense) { var decoded = new DecodedSense(); @@ -227,12 +227,12 @@ public static class Sense { case 0x70: case 0x71: - decoded.Fixed = DecodeFixed(sense); + decoded.Fixed = DecodeFixed(sense.ToArray()); break; case 0x72: case 0x73: - decoded.Descriptor = DecodeDescriptor(sense); + decoded.Descriptor = DecodeDescriptor(sense.ToArray()); break; } @@ -310,7 +310,7 @@ public static class Sense senseDescription = GetSenseDescription(decoded.ASC, decoded.ASCQ); - var offset = 8; + int offset = 8; while(offset < sense.Length) { @@ -319,7 +319,7 @@ public static class Sense byte descType = sense[offset]; int descLen = sense[offset + 1] + 2; - var desc = new byte[descLen]; + byte[] desc = new byte[descLen]; if(offset + descLen >= sense.Length) descLen = sense.Length - offset; @@ -466,7 +466,7 @@ public static class Sense { if(descriptor.Length != 12 || descriptor[0] != 0x00) return 0; - var temp = new byte[8]; + byte[] temp = new byte[8]; temp[0] = descriptor[11]; temp[1] = descriptor[10]; @@ -487,7 +487,7 @@ public static class Sense { if(descriptor.Length != 12 || descriptor[0] != 0x01) return 0; - var temp = new byte[8]; + byte[] temp = new byte[8]; temp[0] = descriptor[11]; temp[1] = descriptor[10]; @@ -508,7 +508,7 @@ public static class Sense { if(descriptor.Length != 8 || descriptor[0] != 0x02) return null; - var temp = new byte[3]; + byte[] temp = new byte[3]; Array.Copy(descriptor, 4, temp, 0, 3); return temp; @@ -2705,4 +2705,6 @@ public static class Sense ? string.Format(Localization.ASC_0_WITH_VENDOR_SPECIFIC_ASCQ_1, ASC, ASCQ) : string.Format(Localization.ASC_0_WITH_ASCQ_1, ASC, ASCQ); } + + public static string PrettifySense(ReadOnlySpan senseBuffer) => PrettifySense(senseBuffer.ToArray()); } \ No newline at end of file diff --git a/Aaru.Decryption/DVD/Dump.cs b/Aaru.Decryption/DVD/Dump.cs index 3634f2ce0..12b0f905a 100644 --- a/Aaru.Decryption/DVD/Dump.cs +++ b/Aaru.Decryption/DVD/Dump.cs @@ -58,10 +58,10 @@ public sealed class Dump(Device dev) /// Key class. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadAsf(out byte[] buffer, out byte[] senseBuffer, DvdCssKeyClass keyClass, uint timeout, + public bool ReadAsf(out byte[] buffer, out ReadOnlySpan senseBuffer, DvdCssKeyClass keyClass, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = dev.SenseBuffer; Span cdb = dev.CdbBuffer[..12]; cdb.Clear(); buffer = new byte[8]; @@ -72,7 +72,7 @@ public sealed class Dump(Device dev) cdb[9] = (byte)(buffer.Length & 0xFF); cdb[10] = (byte)((byte)CssReportKeyFormat.Asf ^ (Agid & 0x03) << 6); - dev.SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.In, out duration, out bool sense); + dev.SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); AaruLogging.Debug(MODULE_NAME, Localization.REPORT_ASF_AGID_1_Sense_2_Last_Error_3_took_0_ms, @@ -91,10 +91,10 @@ public sealed class Dump(Device dev) /// Key class. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadRpc(out byte[] buffer, out byte[] senseBuffer, DvdCssKeyClass keyClass, uint timeout, + public bool ReadRpc(out byte[] buffer, out ReadOnlySpan senseBuffer, DvdCssKeyClass keyClass, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = dev.SenseBuffer; Span cdb = dev.CdbBuffer[..12]; cdb.Clear(); buffer = new byte[8]; @@ -105,7 +105,7 @@ public sealed class Dump(Device dev) cdb[9] = (byte)(buffer.Length & 0xFF); cdb[10] = (byte)((byte)CssReportKeyFormat.RpcState ^ (Agid & 0x03) << 6); - dev.SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.In, out duration, out bool sense); + dev.SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); AaruLogging.Debug(MODULE_NAME, Localization.REPORT_ASF_AGID_1_Sense_2_Last_Error_3_took_0_ms, @@ -124,10 +124,10 @@ public sealed class Dump(Device dev) /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool InvalidateAgid(out byte[] buffer, out byte[] senseBuffer, DvdCssKeyClass keyClass, uint timeout, - out double duration) + public bool InvalidateAgid(out byte[] buffer, out ReadOnlySpan senseBuffer, DvdCssKeyClass keyClass, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = dev.SenseBuffer; Span cdb = dev.CdbBuffer[..12]; cdb.Clear(); buffer = []; @@ -138,7 +138,7 @@ public sealed class Dump(Device dev) cdb[9] = (byte)(buffer.Length & 0xFF); cdb[10] = (byte)((byte)CssReportKeyFormat.InvalidateAgid ^ (Agid & 0x03) << 6); - dev.SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.In, out duration, out bool sense); + dev.SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); AaruLogging.Debug(MODULE_NAME, Localization.INVALIDATE_AGID_AGID_1_Sense_2_Last_Error_3_took_0_ms, @@ -157,10 +157,10 @@ public sealed class Dump(Device dev) /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool ReportAgidCssCppm(out byte[] buffer, out byte[] senseBuffer, DvdCssKeyClass keyClass, uint timeout, - out double duration) + public bool ReportAgidCssCppm(out byte[] buffer, out ReadOnlySpan senseBuffer, DvdCssKeyClass keyClass, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = dev.SenseBuffer; Span cdb = dev.CdbBuffer[..12]; cdb.Clear(); buffer = new byte[8]; @@ -171,7 +171,7 @@ public sealed class Dump(Device dev) cdb[9] = (byte)(buffer.Length & 0xFF); cdb[10] = (byte)((byte)CssReportKeyFormat.AgidForCssCppm ^ (Agid & 0x03) << 6); - dev.SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.In, out duration, out bool sense); + dev.SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); AaruLogging.Debug(MODULE_NAME, Localization.REPORT_AGID_CSS_CPPM_AGID_1_Sense_2_Last_Error_3_took_0_ms, @@ -190,10 +190,10 @@ public sealed class Dump(Device dev) /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool ReportKey1(out byte[] buffer, out byte[] senseBuffer, DvdCssKeyClass keyClass, uint timeout, + public bool ReportKey1(out byte[] buffer, out ReadOnlySpan senseBuffer, DvdCssKeyClass keyClass, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = dev.SenseBuffer; Span cdb = dev.CdbBuffer[..12]; cdb.Clear(); buffer = new byte[12]; @@ -204,7 +204,7 @@ public sealed class Dump(Device dev) cdb[9] = (byte)(buffer.Length & 0xFF); cdb[10] = (byte)((byte)CssReportKeyFormat.Key1 ^ (Agid & 0x03) << 6); - dev.SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.In, out duration, out bool sense); + dev.SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); AaruLogging.Debug(MODULE_NAME, Localization.REPORT_KEY1_AGID_1_Sense_2_Last_Error_3_took_0_ms, @@ -223,10 +223,10 @@ public sealed class Dump(Device dev) /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool ReportChallenge(out byte[] buffer, out byte[] senseBuffer, DvdCssKeyClass keyClass, uint timeout, - out double duration) + public bool ReportChallenge(out byte[] buffer, out ReadOnlySpan senseBuffer, DvdCssKeyClass keyClass, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = dev.SenseBuffer; Span cdb = dev.CdbBuffer[..12]; cdb.Clear(); buffer = new byte[16]; @@ -237,7 +237,7 @@ public sealed class Dump(Device dev) cdb[9] = (byte)(buffer.Length & 0xFF); cdb[10] = (byte)((byte)CssReportKeyFormat.ChallengeKey ^ (Agid & 0x03) << 6); - dev.SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.In, out duration, out bool sense); + dev.SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); AaruLogging.Debug(MODULE_NAME, Localization.REPORT_CHALLENGE_AGID_1_Sense_2_Last_Error_3_took_0_ms, @@ -257,10 +257,10 @@ public sealed class Dump(Device dev) /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool SendChallenge(out byte[] buffer, out byte[] senseBuffer, DvdCssKeyClass keyClass, byte[] challengeKey, - uint timeout, out double duration) + public bool SendChallenge(out byte[] buffer, out ReadOnlySpan senseBuffer, DvdCssKeyClass keyClass, + byte[] challengeKey, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = dev.SenseBuffer; Span cdb = dev.CdbBuffer[..12]; cdb.Clear(); buffer = new byte[16]; @@ -283,7 +283,7 @@ public sealed class Dump(Device dev) buffer[12] = challengeKey[1]; buffer[13] = challengeKey[0]; - dev.SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.Out, out duration, out bool sense); + dev.SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.Out, out duration, out bool sense); AaruLogging.Debug(MODULE_NAME, Localization.SEND_CHALLENGE_AGID_1_Challenge_2_Sense_3_Last_Error_4_took_0_ms, @@ -304,10 +304,10 @@ public sealed class Dump(Device dev) /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool SendKey2(out byte[] buffer, out byte[] senseBuffer, DvdCssKeyClass keyClass, byte[] key2, uint timeout, - out double duration) + public bool SendKey2(out byte[] buffer, out ReadOnlySpan senseBuffer, DvdCssKeyClass keyClass, byte[] key2, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = dev.SenseBuffer; Span cdb = dev.CdbBuffer[..12]; cdb.Clear(); buffer = new byte[12]; @@ -325,7 +325,7 @@ public sealed class Dump(Device dev) buffer[7] = key2[1]; buffer[8] = key2[0]; - dev.SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.Out, out duration, out bool sense); + dev.SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.Out, out duration, out bool sense); AaruLogging.Debug(MODULE_NAME, Localization.SEND_CHALLENGE_AGID_1_KEY2_2_Sense_3_Last_Error_4_took_0_ms, @@ -344,9 +344,9 @@ public sealed class Dump(Device dev) /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadDiscKey(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool ReadDiscKey(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = dev.SenseBuffer; Span cdb = dev.CdbBuffer[..12]; cdb.Clear(); buffer = new byte[2052]; @@ -359,7 +359,7 @@ public sealed class Dump(Device dev) cdb[9] = (byte)(buffer.Length & 0xFF); cdb[10] = (byte)((Agid & 0x03) << 6); - dev.SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.In, out duration, out bool sense); + dev.SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); return sense; } @@ -371,12 +371,12 @@ public sealed class Dump(Device dev) /// The type of protection the logical unit reports /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadBusKey(out byte[] buffer, out byte[] senseBuffer, CopyrightType protectionType, uint timeout, - out double duration) + public bool ReadBusKey(out byte[] buffer, out ReadOnlySpan senseBuffer, CopyrightType protectionType, + uint timeout, out double duration) { duration = 0; buffer = []; - senseBuffer = new byte[64]; + senseBuffer = dev.SenseBuffer; bool sense = false; byte[] challenge = new byte[CHALLENGE_SIZE]; @@ -478,15 +478,15 @@ public sealed class Dump(Device dev) /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool ReadTitleKey(out byte[] buffer, out byte[] senseBuffer, DvdCssKeyClass keyClass, ulong address, - uint timeout, out double duration) + public bool ReadTitleKey(out byte[] buffer, out ReadOnlySpan senseBuffer, DvdCssKeyClass keyClass, + ulong address, uint timeout, out double duration) { // We need to be in a bus key state to read title keys. Only CSS has title keys. ReadBusKey(out buffer, out senseBuffer, CopyrightType.CSS, timeout, out duration); BusKey = buffer; - senseBuffer = new byte[64]; + senseBuffer = dev.SenseBuffer; Span cdb = dev.CdbBuffer[..12]; cdb.Clear(); buffer = new byte[12]; @@ -501,7 +501,7 @@ public sealed class Dump(Device dev) cdb[9] = (byte)(buffer.Length & 0xFF); cdb[10] = (byte)((byte)CssReportKeyFormat.TitleKey ^ (Agid & 0x03) << 6); - dev.SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.In, out duration, out bool sense); + dev.SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); AaruLogging.Debug(MODULE_NAME, Localization.GET_TITLE_KEY_AGID_1_LBA_2_Sense_3_took_0_ms, diff --git a/Aaru.Devices/Device/Commands.cs b/Aaru.Devices/Device/Commands.cs index fdacdd62e..568ced306 100644 --- a/Aaru.Devices/Device/Commands.cs +++ b/Aaru.Devices/Device/Commands.cs @@ -43,7 +43,6 @@ public partial class Device /// 0 if no error occurred, otherwise, errno /// SCSI CDB /// Buffer for SCSI command response - /// Buffer with the SCSI sense /// Timeout in seconds /// SCSI command transfer direction /// Time it took to execute the command in milliseconds @@ -51,12 +50,12 @@ public partial class Device /// True if SCSI command returned non-OK status and contains /// SCSI sense /// - public virtual int SendScsiCommand(Span cdb, ref byte[] buffer, out byte[] senseBuffer, uint timeout, - ScsiDirection direction, out double duration, out bool sense) + public virtual int SendScsiCommand(Span cdb, ref byte[] buffer, uint timeout, ScsiDirection direction, + out double duration, out bool sense) { - duration = 0; - sense = true; - senseBuffer = null; + duration = 0; + sense = true; + buffer = null; return -1; } diff --git a/Aaru.Devices/Device/Constructor.cs b/Aaru.Devices/Device/Constructor.cs index 84d16f609..9bd09a65c 100644 --- a/Aaru.Devices/Device/Constructor.cs +++ b/Aaru.Devices/Device/Constructor.cs @@ -53,18 +53,22 @@ public partial class Device : IDisposable { // Pointer to send CDB to device protected unsafe void* CdbPtr; + protected unsafe void* SensePtr; protected Device() { unsafe { - CdbPtr = NativeMemory.AlignedAlloc(16, 64); - NativeMemory.Clear(CdbPtr, 16); + CdbPtr = NativeMemory.AlignedAlloc(16, 64); + SensePtr = NativeMemory.AlignedAlloc(64, 64); + NativeMemory.Clear(CdbPtr, 16); + NativeMemory.Clear(SensePtr, 64); } } // Span to make pointer usable as data. Fixed size CDB is maximum 16 bytes. Variable size CDB is another problem. - public unsafe Span CdbBuffer => new(CdbPtr, 16); + public unsafe Span CdbBuffer => new(CdbPtr, 16); + public unsafe Span SenseBuffer => new(SensePtr, 64); #region IDisposable Members @@ -211,9 +215,8 @@ public partial class Device : IDisposable if(string.IsNullOrEmpty(dev.Serial)) dev.Serial = dev.UsbSerialString; else - { - foreach(char c in dev.Serial.Where(c => !char.IsControl(c))) dev.Serial = $"{dev.Serial}{c:X2}"; - } + foreach(char c in dev.Serial.Where(c => !char.IsControl(c))) + dev.Serial = $"{dev.Serial}{c:X2}"; } if(dev.IsFireWire) @@ -225,9 +228,8 @@ public partial class Device : IDisposable if(string.IsNullOrEmpty(dev.Serial)) dev.Serial = $"{dev.FirewireGuid:X16}"; else - { - foreach(char c in dev.Serial.Where(c => !char.IsControl(c))) dev.Serial = $"{dev.Serial}{c:X2}"; - } + foreach(char c in dev.Serial.Where(c => !char.IsControl(c))) + dev.Serial = $"{dev.Serial}{c:X2}"; } // Some optical drives are not getting the correct serial, and IDENTIFY PACKET DEVICE is blocked without diff --git a/Aaru.Devices/Device/ScsiCommands/Adaptec.cs b/Aaru.Devices/Device/ScsiCommands/Adaptec.cs index 4725f8ab0..6af338b44 100644 --- a/Aaru.Devices/Device/ScsiCommands/Adaptec.cs +++ b/Aaru.Devices/Device/ScsiCommands/Adaptec.cs @@ -46,7 +46,7 @@ public partial class Device /// SCSI Logical Block Address. /// Timeout. /// Duration. - public bool AdaptecTranslate(out byte[] buffer, out byte[] senseBuffer, uint lba, uint timeout, + public bool AdaptecTranslate(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint timeout, out double duration) => AdaptecTranslate(out buffer, out senseBuffer, false, lba, timeout, out duration); @@ -57,13 +57,13 @@ public partial class Device /// SCSI Logical Block Address. /// Timeout. /// Duration. - public bool AdaptecTranslate(out byte[] buffer, out byte[] senseBuffer, bool drive1, uint lba, uint timeout, - out double duration) + public bool AdaptecTranslate(out byte[] buffer, out ReadOnlySpan senseBuffer, bool drive1, uint lba, + uint timeout, out double duration) { buffer = new byte[8]; Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.AdaptecTranslate; cdb[1] = (byte)((lba & 0x1F0000) >> 16); @@ -72,13 +72,7 @@ public partial class Device if(drive1) cdb[1] += 0x20; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -93,7 +87,8 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool AdaptecSetErrorThreshold(byte threshold, out byte[] senseBuffer, uint timeout, out double duration) => + public bool AdaptecSetErrorThreshold(byte threshold, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) => AdaptecSetErrorThreshold(threshold, out senseBuffer, false, timeout, out duration); /// Sets the error threshold @@ -103,14 +98,14 @@ public partial class Device /// If set to true set the threshold from drive 1. /// Timeout. /// Duration. - public bool AdaptecSetErrorThreshold(byte threshold, out byte[] senseBuffer, bool drive1, uint timeout, + public bool AdaptecSetErrorThreshold(byte threshold, out ReadOnlySpan senseBuffer, bool drive1, uint timeout, out double duration) { byte[] buffer = new byte[1]; buffer[0] = threshold; Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.AdaptecSetErrorThreshold; @@ -118,13 +113,7 @@ public partial class Device cdb[4] = 1; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.Out, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.Out, out duration, out bool sense); Error = LastError != 0; @@ -138,7 +127,8 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool AdaptecReadUsageCounter(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool AdaptecReadUsageCounter(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) => AdaptecReadUsageCounter(out buffer, out senseBuffer, false, timeout, out duration); /// Requests the usage, seek and error counters, and resets them @@ -147,13 +137,13 @@ public partial class Device /// If set to true get the counters from drive 1. /// Timeout. /// Duration. - public bool AdaptecReadUsageCounter(out byte[] buffer, out byte[] senseBuffer, bool drive1, uint timeout, - out double duration) + public bool AdaptecReadUsageCounter(out byte[] buffer, out ReadOnlySpan senseBuffer, bool drive1, + uint timeout, out double duration) { buffer = new byte[9]; Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.AdaptecTranslate; @@ -161,13 +151,7 @@ public partial class Device cdb[4] = (byte)buffer.Length; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -181,24 +165,18 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool AdaptecWriteBuffer(byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool AdaptecWriteBuffer(byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, out double duration) { byte[] oneKBuffer = new byte[1024]; Array.Copy(buffer, 0, oneKBuffer, 0, buffer.Length < 1024 ? buffer.Length : 1024); Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.AdaptecWriteBuffer; - LastError = SendScsiCommand(cdb, - ref oneKBuffer, - out senseBuffer, - timeout, - ScsiDirection.Out, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref oneKBuffer, timeout, ScsiDirection.Out, out duration, out bool sense); Error = LastError != 0; @@ -212,22 +190,17 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool AdaptecReadBuffer(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool AdaptecReadBuffer(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { buffer = new byte[1024]; Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.AdaptecReadBuffer; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/ArchiveCorp.cs b/Aaru.Devices/Device/ScsiCommands/ArchiveCorp.cs index 8ea66951a..634f521aa 100644 --- a/Aaru.Devices/Device/ScsiCommands/ArchiveCorp.cs +++ b/Aaru.Devices/Device/ScsiCommands/ArchiveCorp.cs @@ -45,13 +45,13 @@ public partial class Device /// Address. /// Timeout. /// Duration. - public bool ArchiveCorpRequestBlockAddress(out byte[] buffer, out byte[] senseBuffer, uint lba, uint timeout, - out double duration) + public bool ArchiveCorpRequestBlockAddress(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, + uint timeout, out double duration) { buffer = new byte[3]; Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.ArchiveRequestBlockAddress; cdb[1] = (byte)((lba & 0x1F0000) >> 16); @@ -59,13 +59,7 @@ public partial class Device cdb[3] = (byte)(lba & 0xFF); cdb[4] = 3; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -79,7 +73,7 @@ public partial class Device /// Logical Block Address, starting from 1. /// Timeout. /// Duration. - public bool ArchiveCorpSeekBlock(out byte[] senseBuffer, uint lba, uint timeout, out double duration) => + public bool ArchiveCorpSeekBlock(out ReadOnlySpan senseBuffer, uint lba, uint timeout, out double duration) => ArchiveCorpSeekBlock(out senseBuffer, false, lba, timeout, out duration); /// Positions the tape at the specified block address @@ -88,13 +82,13 @@ public partial class Device /// Logical Block Address, starting from 1. /// Timeout. /// Duration. - public bool ArchiveCorpSeekBlock(out byte[] senseBuffer, bool immediate, uint lba, uint timeout, - out double duration) + public bool ArchiveCorpSeekBlock(out ReadOnlySpan senseBuffer, bool immediate, uint lba, uint timeout, + out double duration) { byte[] buffer = []; Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.ArchiveSeekBlock; cdb[1] = (byte)((lba & 0x1F0000) >> 16); @@ -103,13 +97,7 @@ public partial class Device if(immediate) cdb[1] += 0x01; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/Certance.cs b/Aaru.Devices/Device/ScsiCommands/Certance.cs index 809bd9807..1f7d3bcbf 100644 --- a/Aaru.Devices/Device/ScsiCommands/Certance.cs +++ b/Aaru.Devices/Device/ScsiCommands/Certance.cs @@ -43,14 +43,14 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool CertancePark(out byte[] senseBuffer, uint timeout, out double duration) => + public bool CertancePark(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => CertanceParkUnpark(out senseBuffer, true, timeout, out duration); /// Unparks the load arm prior to operation /// Sense buffer. /// Timeout. /// Duration. - public bool CertanceUnpark(out byte[] senseBuffer, uint timeout, out double duration) => + public bool CertanceUnpark(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => CertanceParkUnpark(out senseBuffer, false, timeout, out duration); /// Parks the load arm in preparation for transport or unparks it prior to operation @@ -58,24 +58,18 @@ public partial class Device /// If set to true, parks the load arm /// Timeout. /// Duration. - public bool CertanceParkUnpark(out byte[] senseBuffer, bool park, uint timeout, out double duration) + public bool CertanceParkUnpark(out ReadOnlySpan senseBuffer, bool park, uint timeout, out double duration) { byte[] buffer = []; Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.CertanceParkUnpark; if(park) cdb[4] = 1; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/Fujitsu.cs b/Aaru.Devices/Device/ScsiCommands/Fujitsu.cs index 8c75ea873..57c955fe1 100644 --- a/Aaru.Devices/Device/ScsiCommands/Fujitsu.cs +++ b/Aaru.Devices/Device/ScsiCommands/Fujitsu.cs @@ -48,8 +48,8 @@ public partial class Device /// Timeout to wait for command execution /// Time the device took to execute the command in milliseconds /// true if the device set an error condition, false otherwise - public bool FujitsuDisplay(out byte[] senseBuffer, bool flash, FujitsuDisplayModes mode, string firstHalf, - string secondHalf, uint timeout, out double duration) + public bool FujitsuDisplay(out ReadOnlySpan senseBuffer, bool flash, FujitsuDisplayModes mode, + string firstHalf, string secondHalf, uint timeout, out double duration) { byte[] tmp; byte[] firstHalfBytes = new byte[8]; @@ -58,6 +58,7 @@ public partial class Device bool displayLen = false; bool halfMsg = false; Span cdb = CdbBuffer[..10]; + senseBuffer = SenseBuffer; cdb.Clear(); if(!string.IsNullOrWhiteSpace(firstHalf)) @@ -98,13 +99,7 @@ public partial class Device cdb[0] = (byte)ScsiCommands.FujitsuDisplay; cdb[6] = (byte)buffer.Length; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.Out, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.Out, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/HL-DT-ST.cs b/Aaru.Devices/Device/ScsiCommands/HL-DT-ST.cs index 36653edfa..3d371707d 100644 --- a/Aaru.Devices/Device/ScsiCommands/HL-DT-ST.cs +++ b/Aaru.Devices/Device/ScsiCommands/HL-DT-ST.cs @@ -53,14 +53,14 @@ public partial class Device /// How many blocks to read. /// The address in which the layerbreak occur /// Set to true if disk is Opposite Track Path (OTP) - public bool HlDtStReadRawDvd(out byte[] buffer, out byte[] senseBuffer, uint lba, uint transferLength, uint timeout, - out double duration, uint layerbreak, bool otp) + public bool HlDtStReadRawDvd(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint transferLength, + uint timeout, out double duration, uint layerbreak, bool otp) { // We need to fill the buffer before reading it with the HL-DT-ST command. We don't care about sense, // because the data can be wrong anyway, so we check the buffer data later instead. Read12(out _, out _, 0, false, false, false, false, lba, 2048, 0, 16, false, timeout, out duration); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); buffer = new byte[2064 * transferLength]; @@ -79,13 +79,7 @@ public partial class Device cdb[10] = (byte)((buffer.Length & 0xFF00) >> 8); cdb[11] = (byte)(buffer.Length & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/HP.cs b/Aaru.Devices/Device/ScsiCommands/HP.cs index a9b833663..f4af1bcfa 100644 --- a/Aaru.Devices/Device/ScsiCommands/HP.cs +++ b/Aaru.Devices/Device/ScsiCommands/HP.cs @@ -49,8 +49,8 @@ public partial class Device /// If set to true address contain physical block address. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool HpReadLong(out byte[] buffer, out byte[] senseBuffer, bool relAddr, uint address, ushort blockBytes, - bool pba, uint timeout, out double duration) => + public bool HpReadLong(out byte[] buffer, out ReadOnlySpan senseBuffer, bool relAddr, uint address, + ushort blockBytes, bool pba, uint timeout, out double duration) => HpReadLong(out buffer, out senseBuffer, relAddr, address, 0, blockBytes, pba, false, timeout, out duration); /// Sends the HP READ LONG vendor command @@ -68,10 +68,11 @@ public partial class Device /// /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool HpReadLong(out byte[] buffer, out byte[] senseBuffer, bool relAddr, uint address, ushort transferLen, - ushort blockBytes, bool pba, bool sectorCount, uint timeout, out double duration) + public bool HpReadLong(out byte[] buffer, out ReadOnlySpan senseBuffer, bool relAddr, uint address, + ushort transferLen, ushort blockBytes, bool pba, bool sectorCount, uint timeout, + out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); @@ -92,13 +93,7 @@ public partial class Device buffer = sectorCount ? new byte[blockBytes * transferLen] : new byte[transferLen]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/Kreon.cs b/Aaru.Devices/Device/ScsiCommands/Kreon.cs index 5c1e4bcf8..9b87e351d 100644 --- a/Aaru.Devices/Device/ScsiCommands/Kreon.cs +++ b/Aaru.Devices/Device/ScsiCommands/Kreon.cs @@ -42,9 +42,9 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool KreonDeprecatedUnlock(out byte[] senseBuffer, uint timeout, out double duration) + public bool KreonDeprecatedUnlock(out ReadOnlySpan senseBuffer, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); byte[] buffer = []; @@ -54,13 +54,7 @@ public partial class Device cdb[2] = 0x01; cdb[3] = 0x01; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -74,7 +68,7 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool KreonLock(out byte[] senseBuffer, uint timeout, out double duration) => + public bool KreonLock(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => KreonSetLockState(out senseBuffer, KreonLockStates.Locked, timeout, out duration); /// Sets the drive to the xtreme unlocked state @@ -82,7 +76,7 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool KreonUnlockXtreme(out byte[] senseBuffer, uint timeout, out double duration) => + public bool KreonUnlockXtreme(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => KreonSetLockState(out senseBuffer, KreonLockStates.Xtreme, timeout, out duration); /// Sets the drive to the wxripper unlocked state @@ -90,7 +84,7 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool KreonUnlockWxripper(out byte[] senseBuffer, uint timeout, out double duration) => + public bool KreonUnlockWxripper(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => KreonSetLockState(out senseBuffer, KreonLockStates.Wxripper, timeout, out duration); /// Sets the drive to the specified lock state @@ -99,9 +93,10 @@ public partial class Device /// Timeout. /// Duration. /// Lock state - public bool KreonSetLockState(out byte[] senseBuffer, KreonLockStates state, uint timeout, out double duration) + public bool KreonSetLockState(out ReadOnlySpan senseBuffer, KreonLockStates state, uint timeout, + out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); byte[] buffer = []; @@ -112,13 +107,7 @@ public partial class Device cdb[3] = 0x11; cdb[4] = (byte)state; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -133,10 +122,10 @@ public partial class Device /// Timeout. /// Duration. /// Features supported by drive. - public bool KreonGetFeatureList(out byte[] senseBuffer, out KreonFeatures features, uint timeout, - out double duration) + public bool KreonGetFeatureList(out ReadOnlySpan senseBuffer, out KreonFeatures features, uint timeout, + out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); byte[] buffer = new byte[26]; @@ -147,13 +136,7 @@ public partial class Device cdb[2] = 0x01; cdb[3] = 0x10; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -224,13 +207,13 @@ public partial class Device /// Duration. /// The SS sector. /// Request number. - public bool KreonExtractSs(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration, + public bool KreonExtractSs(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, out double duration, byte requestNumber = 0x00) { buffer = new byte[2048]; Span cdb = CdbBuffer[..12]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.KreonSsCommand; cdb[1] = 0x00; @@ -245,13 +228,7 @@ public partial class Device cdb[10] = requestNumber; cdb[11] = 0xC0; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/LiteOn.cs b/Aaru.Devices/Device/ScsiCommands/LiteOn.cs index 676c28f78..0ab66046d 100644 --- a/Aaru.Devices/Device/ScsiCommands/LiteOn.cs +++ b/Aaru.Devices/Device/ScsiCommands/LiteOn.cs @@ -50,8 +50,8 @@ public partial class Device /// How many blocks to read. /// The address in which the layerbreak occur /// Set to true if disk is Opposite Track Path (OTP) - public bool LiteOnReadRawDvd(out byte[] buffer, out byte[] senseBuffer, uint lba, uint transferLength, uint timeout, - out double duration, uint layerbreak, bool otp) + public bool LiteOnReadRawDvd(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint transferLength, + uint timeout, out double duration, uint layerbreak, bool otp) { _bufferOffset %= 714; @@ -61,7 +61,7 @@ public partial class Device { buffer = new byte[transferLength * 2064]; duration = 0; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; return true; } @@ -107,14 +107,14 @@ public partial class Device /// Duration in milliseconds it took for the device to execute the command. /// Start block address. /// true if the command failed and contains the sense buffer. - private bool LiteOnReadBuffer(out byte[] buffer, out byte[] senseBuffer, uint bufferOffset, uint transferLength, - uint timeout, out double duration, uint lba) + private bool LiteOnReadBuffer(out byte[] buffer, out ReadOnlySpan senseBuffer, uint bufferOffset, + uint transferLength, uint timeout, out double duration, uint lba) { // We need to fill the buffer before reading it with the ReadBuffer command. We don't care about sense, // because the data can be wrong anyway, so we check the buffer data later instead. Read12(out _, out _, 0, false, false, false, false, lba, 2048, 0, 16, false, timeout, out duration); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); @@ -130,13 +130,7 @@ public partial class Device cdb[7] = (byte)((buffer.Length & 0xFF00) >> 8); cdb[8] = (byte)(buffer.Length & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); return sense; } @@ -153,8 +147,9 @@ public partial class Device /// How many blocks to read. /// The address in which the layerbreak occur /// Set to true if disk is Opposite Track Path (OTP) - private bool LiteOnReadSectorsFromBuffer(out byte[] buffer, out byte[] senseBuffer, uint lba, uint transferLength, - uint timeout, out double duration, uint layerbreak, bool otp) + private bool LiteOnReadSectorsFromBuffer(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, + uint transferLength, uint timeout, out double duration, uint layerbreak, + bool otp) { bool sense = LiteOnReadBuffer(out buffer, out senseBuffer, @@ -210,15 +205,15 @@ public partial class Device /// How many blocks to read. /// The address in which the layerbreak occur /// Set to true if disk is Opposite Track Path (OTP) - private bool LiteOnReadSectorsAcrossBufferBorder(out byte[] buffer, out byte[] senseBuffer, uint lba, - uint transferLength, uint timeout, out double duration, - uint layerbreak, bool otp) + private bool LiteOnReadSectorsAcrossBufferBorder(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, + uint transferLength, uint timeout, out double duration, + uint layerbreak, bool otp) { uint newTransferLength1 = 714 - _bufferOffset; uint newTransferLength2 = transferLength - newTransferLength1; bool sense1 = LiteOnReadBuffer(out byte[] buffer1, - out byte[] _, + out _, _bufferOffset * 2384, newTransferLength1 * 2384, timeout, @@ -226,14 +221,14 @@ public partial class Device lba); bool sense2 = LiteOnReadBuffer(out byte[] buffer2, - out byte[] _, + out _, 0, newTransferLength2 * 2384, timeout, out double duration2, lba); - senseBuffer = new byte[64]; // TODO + senseBuffer = SenseBuffer; // TODO buffer = new byte[2384 * transferLength]; Array.Copy(buffer1, buffer, buffer1.Length); @@ -267,7 +262,7 @@ public partial class Device { for(uint i = 0; i < 714; i++) { - LiteOnReadBuffer(out byte[] buffer, out byte[] _, i * 2384, 2384, timeout, out double _, lba); + LiteOnReadBuffer(out byte[] buffer, out _, i * 2384, 2384, timeout, out double _, lba); if(CheckSectorNumber(buffer, lba, 1, layerbreak, otp)) return (int)i; } diff --git a/Aaru.Devices/Device/ScsiCommands/MMC.cs b/Aaru.Devices/Device/ScsiCommands/MMC.cs index 27d4a93b4..8b676deb9 100644 --- a/Aaru.Devices/Device/ScsiCommands/MMC.cs +++ b/Aaru.Devices/Device/ScsiCommands/MMC.cs @@ -48,7 +48,8 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool GetConfiguration(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool GetConfiguration(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) => GetConfiguration(out buffer, out senseBuffer, 0x0000, MmcGetConfigurationRt.All, timeout, out duration); /// Sends the MMC GET CONFIGURATION command for all Features starting with specified one @@ -58,8 +59,8 @@ public partial class Device /// Feature number where the feature list should start from /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool GetConfiguration(out byte[] buffer, out byte[] senseBuffer, ushort startingFeatureNumber, uint timeout, - out double duration) => + public bool GetConfiguration(out byte[] buffer, out ReadOnlySpan senseBuffer, ushort startingFeatureNumber, + uint timeout, out double duration) => GetConfiguration(out buffer, out senseBuffer, startingFeatureNumber, @@ -75,10 +76,10 @@ public partial class Device /// Duration in milliseconds it took for the device to execute the command. /// Starting Feature number. /// Return type, . - public bool GetConfiguration(out byte[] buffer, out byte[] senseBuffer, ushort startingFeatureNumber, - MmcGetConfigurationRt rt, uint timeout, out double duration) + public bool GetConfiguration(out byte[] buffer, out ReadOnlySpan senseBuffer, ushort startingFeatureNumber, + MmcGetConfigurationRt rt, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); buffer = new byte[8]; @@ -91,13 +92,7 @@ public partial class Device cdb[8] = (byte)(buffer.Length & 0xFF); cdb[9] = 0; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -107,15 +102,9 @@ public partial class Device buffer = new byte[confLength]; cdb[7] = (byte)((buffer.Length & 0xFF00) >> 8); cdb[8] = (byte)(buffer.Length & 0xFF); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out sense); Error = LastError != 0; @@ -142,11 +131,11 @@ public partial class Device /// Which disc structure are we requesting /// AGID used in medium copy protection /// Duration in milliseconds it took for the device to execute the command. - public bool ReadDiscStructure(out byte[] buffer, out byte[] senseBuffer, MmcDiscStructureMediaType mediaType, - uint address, byte layerNumber, MmcDiscStructureFormat format, byte agid, - uint timeout, out double duration) + public bool ReadDiscStructure(out byte[] buffer, out ReadOnlySpan senseBuffer, + MmcDiscStructureMediaType mediaType, uint address, byte layerNumber, + MmcDiscStructureFormat format, byte agid, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); buffer = new byte[8]; @@ -163,13 +152,7 @@ public partial class Device cdb[9] = (byte)(buffer.Length & 0xFF); cdb[10] = (byte)((agid & 0x03) << 6); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -195,15 +178,9 @@ public partial class Device cdb[8] = (byte)((buffer.Length & 0xFF00) >> 8); cdb[9] = (byte)(buffer.Length & 0xFF); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out sense); Error = LastError != 0; @@ -229,7 +206,8 @@ public partial class Device /// Start TOC from this track /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadToc(out byte[] buffer, out byte[] senseBuffer, byte track, uint timeout, out double duration) => + public bool ReadToc(out byte[] buffer, out ReadOnlySpan senseBuffer, byte track, uint timeout, + out double duration) => ReadTocPmaAtip(out buffer, out senseBuffer, true, 0, track, timeout, out duration); /// Sends the MMC READ TOC/PMA/ATIP command to get formatted TOC from disc @@ -240,7 +218,7 @@ public partial class Device /// Start TOC from this track /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadToc(out byte[] buffer, out byte[] senseBuffer, bool msf, byte track, uint timeout, + public bool ReadToc(out byte[] buffer, out ReadOnlySpan senseBuffer, bool msf, byte track, uint timeout, out double duration) => ReadTocPmaAtip(out buffer, out senseBuffer, msf, 0, track, timeout, out duration); @@ -250,7 +228,8 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadSessionInfo(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool ReadSessionInfo(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) => ReadTocPmaAtip(out buffer, out senseBuffer, true, 1, 0, timeout, out duration); /// Sends the MMC READ TOC/PMA/ATIP command to get multi-session information @@ -260,7 +239,7 @@ public partial class Device /// If true, request data in MM:SS:FF units, otherwise, in blocks /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadSessionInfo(out byte[] buffer, out byte[] senseBuffer, bool msf, uint timeout, + public bool ReadSessionInfo(out byte[] buffer, out ReadOnlySpan senseBuffer, bool msf, uint timeout, out double duration) => ReadTocPmaAtip(out buffer, out senseBuffer, msf, 1, 0, timeout, out duration); @@ -271,7 +250,7 @@ public partial class Device /// Session which TOC to get /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadRawToc(out byte[] buffer, out byte[] senseBuffer, byte sessionNumber, uint timeout, + public bool ReadRawToc(out byte[] buffer, out ReadOnlySpan senseBuffer, byte sessionNumber, uint timeout, out double duration) => ReadTocPmaAtip(out buffer, out senseBuffer, true, 2, sessionNumber, timeout, out duration); @@ -281,7 +260,7 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadPma(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool ReadPma(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, out double duration) => ReadTocPmaAtip(out buffer, out senseBuffer, true, 3, 0, timeout, out duration); /// Sends the MMC READ TOC/PMA/ATIP command to get ATIP @@ -290,7 +269,7 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadAtip(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool ReadAtip(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, out double duration) => ReadTocPmaAtip(out buffer, out senseBuffer, true, 4, 0, timeout, out duration); /// Sends the MMC READ TOC/PMA/ATIP command to get Lead-In CD-TEXT @@ -299,7 +278,7 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadCdText(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool ReadCdText(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, out double duration) => ReadTocPmaAtip(out buffer, out senseBuffer, true, 5, 0, timeout, out duration); /// Sends the MMC READ TOC/PMA/ATIP command @@ -311,10 +290,10 @@ public partial class Device /// Track/Session number /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadTocPmaAtip(out byte[] buffer, out byte[] senseBuffer, bool msf, byte format, - byte trackSessionNumber, uint timeout, out double duration) + public bool ReadTocPmaAtip(out byte[] buffer, out ReadOnlySpan senseBuffer, bool msf, byte format, + byte trackSessionNumber, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); @@ -329,13 +308,7 @@ public partial class Device cdb[7] = (byte)((tmpBuffer.Length & 0xFF00) >> 8); cdb[8] = (byte)(tmpBuffer.Length & 0xFF); - LastError = SendScsiCommand(cdb, - ref tmpBuffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref tmpBuffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -361,13 +334,7 @@ public partial class Device double tmpDuration = duration; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out sense); Error = LastError != 0; @@ -392,7 +359,8 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadDiscInformation(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool ReadDiscInformation(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) => ReadDiscInformation(out buffer, out senseBuffer, MmcDiscInformationDataTypes.DiscInformation, @@ -406,10 +374,10 @@ public partial class Device /// Which disc information to read /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadDiscInformation(out byte[] buffer, out byte[] senseBuffer, MmcDiscInformationDataTypes dataType, - uint timeout, out double duration) + public bool ReadDiscInformation(out byte[] buffer, out ReadOnlySpan senseBuffer, + MmcDiscInformationDataTypes dataType, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); byte[] tmpBuffer = new byte[804]; @@ -419,13 +387,7 @@ public partial class Device cdb[7] = (byte)((tmpBuffer.Length & 0xFF00) >> 8); cdb[8] = (byte)(tmpBuffer.Length & 0xFF); - LastError = SendScsiCommand(cdb, - ref tmpBuffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref tmpBuffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -464,12 +426,12 @@ public partial class Device /// If set to true we request the EDC/ECC fields for data sectors. /// C2 error options. /// Subchannel selection. - public bool ReadCd(out byte[] buffer, out byte[] senseBuffer, uint lba, uint blockSize, uint transferLength, - MmcSectorTypes expectedSectorType, bool dap, bool relAddr, bool sync, MmcHeaderCodes headerCodes, - bool userData, bool edcEcc, MmcErrorField c2Error, MmcSubchannel subchannel, uint timeout, - out double duration) + public bool ReadCd(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint blockSize, + uint transferLength, MmcSectorTypes expectedSectorType, bool dap, bool relAddr, bool sync, + MmcHeaderCodes headerCodes, bool userData, bool edcEcc, MmcErrorField c2Error, + MmcSubchannel subchannel, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -500,13 +462,7 @@ public partial class Device buffer = new byte[blockSize * transferLength]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -549,12 +505,12 @@ public partial class Device /// If set to true we request the EDC/ECC fields for data sectors. /// C2 error options. /// Subchannel selection. - public bool ReadCdMsf(out byte[] buffer, out byte[] senseBuffer, uint startMsf, uint endMsf, uint blockSize, - MmcSectorTypes expectedSectorType, bool dap, bool sync, MmcHeaderCodes headerCodes, - bool userData, bool edcEcc, MmcErrorField c2Error, MmcSubchannel subchannel, uint timeout, - out double duration) + public bool ReadCdMsf(out byte[] buffer, out ReadOnlySpan senseBuffer, uint startMsf, uint endMsf, + uint blockSize, MmcSectorTypes expectedSectorType, bool dap, bool sync, + MmcHeaderCodes headerCodes, bool userData, bool edcEcc, MmcErrorField c2Error, + MmcSubchannel subchannel, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -584,13 +540,7 @@ public partial class Device buffer = new byte[blockSize * transferLength]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -620,7 +570,7 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool PreventMediumRemoval(out byte[] senseBuffer, uint timeout, out double duration) => + public bool PreventMediumRemoval(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => PreventAllowMediumRemoval(out senseBuffer, false, true, timeout, out duration); /// Allows ejection of the media inserted in the drive @@ -628,7 +578,7 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool AllowMediumRemoval(out byte[] senseBuffer, uint timeout, out double duration) => + public bool AllowMediumRemoval(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => PreventAllowMediumRemoval(out senseBuffer, false, false, timeout, out duration); /// Prevents or allows ejection of the media inserted in the drive @@ -638,10 +588,10 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool PreventAllowMediumRemoval(out byte[] senseBuffer, bool persistent, bool prevent, uint timeout, - out double duration) + public bool PreventAllowMediumRemoval(out ReadOnlySpan senseBuffer, bool persistent, bool prevent, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; cdb.Clear(); byte[] buffer = []; @@ -652,13 +602,7 @@ public partial class Device if(persistent) cdb[4] += 0x02; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -679,7 +623,7 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool LoadTray(out byte[] senseBuffer, uint timeout, out double duration) => + public bool LoadTray(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => StartStopUnit(out senseBuffer, false, 0, 0, false, true, true, timeout, out duration); /// Ejects the media or its tray @@ -687,7 +631,7 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool EjectTray(out byte[] senseBuffer, uint timeout, out double duration) => + public bool EjectTray(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => StartStopUnit(out senseBuffer, false, 0, 0, false, true, false, timeout, out duration); /// Starts the drive's reading mechanism @@ -695,7 +639,7 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool StartUnit(out byte[] senseBuffer, uint timeout, out double duration) => + public bool StartUnit(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => StartStopUnit(out senseBuffer, false, 0, 0, false, false, true, timeout, out duration); /// Stops the drive's reading mechanism @@ -703,7 +647,7 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool StopUnit(out byte[] senseBuffer, uint timeout, out double duration) => + public bool StopUnit(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => StartStopUnit(out senseBuffer, false, 0, 0, false, false, false, timeout, out duration); /// Starts or stops the drive's reading mechanism or tray @@ -717,10 +661,11 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool StartStopUnit(out byte[] senseBuffer, bool immediate, byte formatLayer, byte powerConditions, - bool changeFormatLayer, bool loadEject, bool start, uint timeout, out double duration) + public bool StartStopUnit(out ReadOnlySpan senseBuffer, bool immediate, byte formatLayer, + byte powerConditions, bool changeFormatLayer, bool loadEject, bool start, uint timeout, + out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; cdb.Clear(); byte[] buffer = []; @@ -743,13 +688,7 @@ public partial class Device cdb[4] += (byte)((powerConditions & 0x0F) << 4); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -777,9 +716,10 @@ public partial class Device /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. [SuppressMessage("ReSharper", "ShiftExpressionZeroLeftOperand")] - public bool ReadMcn(out string mcn, out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool ReadMcn(out string mcn, out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); mcn = null; @@ -793,13 +733,7 @@ public partial class Device buffer = new byte[23]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -823,10 +757,10 @@ public partial class Device /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. [SuppressMessage("ReSharper", "ShiftExpressionZeroLeftOperand")] - public bool ReadIsrc(byte trackNumber, out string isrc, out byte[] buffer, out byte[] senseBuffer, uint timeout, - out double duration) + public bool ReadIsrc(byte trackNumber, out string isrc, out byte[] buffer, out ReadOnlySpan senseBuffer, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); isrc = null; @@ -841,13 +775,7 @@ public partial class Device buffer = new byte[23]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -871,10 +799,10 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool SetCdSpeed(out byte[] senseBuffer, RotationalControl rotationalControl, ushort readSpeed, - ushort writeSpeed, uint timeout, out double duration) + public bool SetCdSpeed(out ReadOnlySpan senseBuffer, RotationalControl rotationalControl, ushort readSpeed, + ushort writeSpeed, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); byte[] buffer = []; @@ -886,13 +814,7 @@ public partial class Device cdb[4] = (byte)((writeSpeed & 0xFF00) >> 8); cdb[5] = (byte)(writeSpeed & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -918,10 +840,10 @@ public partial class Device /// Duration in milliseconds it took for the device to execute the command. /// Report information of non-closed tracks /// Type of information to retrieve - public bool ReadTrackInformation(out byte[] buffer, out byte[] senseBuffer, bool open, TrackInformationType type, - uint address, uint timeout, out double duration) + public bool ReadTrackInformation(out byte[] buffer, out ReadOnlySpan senseBuffer, bool open, + TrackInformationType type, uint address, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); buffer = new byte[48]; @@ -937,13 +859,7 @@ public partial class Device if(open) cdb[1] += 4; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/MediaTek.cs b/Aaru.Devices/Device/ScsiCommands/MediaTek.cs index 2ba9e25e4..02718df29 100644 --- a/Aaru.Devices/Device/ScsiCommands/MediaTek.cs +++ b/Aaru.Devices/Device/ScsiCommands/MediaTek.cs @@ -45,10 +45,10 @@ public partial class Device /// Duration in milliseconds it took for the device to execute the command. /// Starting offset in DRAM memory. /// How much data to retrieve from DRAM. - public bool MediaTekReadDram(out byte[] buffer, out byte[] senseBuffer, uint offset, uint length, uint timeout, - out double duration) + public bool MediaTekReadDram(out byte[] buffer, out ReadOnlySpan senseBuffer, uint offset, uint length, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); buffer = new byte[length]; @@ -64,13 +64,7 @@ public partial class Device cdb[8] = (byte)((length & 0xFF00) >> 8); cdb[9] = (byte)(length & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/MiniDisc.cs b/Aaru.Devices/Device/ScsiCommands/MiniDisc.cs index d532b0950..11ac2cbbd 100644 --- a/Aaru.Devices/Device/ScsiCommands/MiniDisc.cs +++ b/Aaru.Devices/Device/ScsiCommands/MiniDisc.cs @@ -47,10 +47,11 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool MiniDiscReadDataTOC(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool MiniDiscReadDataTOC(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { const ushort transferLength = 2336; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); @@ -61,13 +62,7 @@ public partial class Device buffer = new byte[transferLength]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -83,11 +78,11 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool MiniDiscReadUserTOC(out byte[] buffer, out byte[] senseBuffer, uint sector, uint timeout, + public bool MiniDiscReadUserTOC(out byte[] buffer, out ReadOnlySpan senseBuffer, uint sector, uint timeout, out double duration) { const ushort transferLength = 2336; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); @@ -102,13 +97,7 @@ public partial class Device buffer = new byte[transferLength]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -123,10 +112,10 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool MiniDiscD5(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool MiniDiscD5(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, out double duration) { const ushort transferLength = 4; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); @@ -137,13 +126,7 @@ public partial class Device buffer = new byte[transferLength]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -158,9 +141,10 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool MiniDiscStopPlaying(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool MiniDiscStopPlaying(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); @@ -168,13 +152,7 @@ public partial class Device buffer = []; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -189,10 +167,11 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool MiniDiscReadPosition(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool MiniDiscReadPosition(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { const ushort transferLength = 4; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); @@ -203,13 +182,7 @@ public partial class Device buffer = new byte[transferLength]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -224,10 +197,11 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true if the command failed and contains the sense buffer. - public bool MiniDiscGetType(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool MiniDiscGetType(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { const ushort transferLength = 8; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); @@ -238,13 +212,7 @@ public partial class Device buffer = new byte[transferLength]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/NEC.cs b/Aaru.Devices/Device/ScsiCommands/NEC.cs index 26ef84257..ad85814f2 100644 --- a/Aaru.Devices/Device/ScsiCommands/NEC.cs +++ b/Aaru.Devices/Device/ScsiCommands/NEC.cs @@ -45,10 +45,10 @@ public partial class Device /// Duration in milliseconds it took for the device to execute the command. /// Start block address. /// How many blocks to read. - public bool NecReadCdDa(out byte[] buffer, out byte[] senseBuffer, uint lba, uint transferLength, uint timeout, - out double duration) + public bool NecReadCdDa(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint transferLength, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); @@ -62,13 +62,7 @@ public partial class Device buffer = new byte[2352 * transferLength]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/Optical.cs b/Aaru.Devices/Device/ScsiCommands/Optical.cs index 09ad1b4db..abc7cc517 100644 --- a/Aaru.Devices/Device/ScsiCommands/Optical.cs +++ b/Aaru.Devices/Device/ScsiCommands/Optical.cs @@ -58,11 +58,11 @@ public partial class Device /// /// Number of contiguous blocks to find /// First LBA found - public bool MediumScan(out byte[] senseBuffer, bool written, bool advancedScan, bool reverse, bool partial, - bool relAddr, uint lba, uint requested, uint scanLength, out uint foundLba, - out uint foundBlocks, uint timeout, out double duration) + public bool MediumScan(out ReadOnlySpan senseBuffer, bool written, bool advancedScan, bool reverse, + bool partial, bool relAddr, uint lba, uint requested, uint scanLength, out uint foundLba, + out uint foundBlocks, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); byte[] buffer = []; @@ -102,7 +102,6 @@ public partial class Device LastError = SendScsiCommand(cdb, ref buffer, - out senseBuffer, timeout, buffer.Length == 0 ? ScsiDirection.None : ScsiDirection.Out, out duration, @@ -114,7 +113,7 @@ public partial class Device if(Error) return sense; - DecodedSense? decodedSense = Sense.Decode(senseBuffer); + DecodedSense? decodedSense = Sense.Decode(senseBuffer.ToArray()); switch(decodedSense?.SenseKey) { diff --git a/Aaru.Devices/Device/ScsiCommands/Pioneer.cs b/Aaru.Devices/Device/ScsiCommands/Pioneer.cs index 9fddd6e1c..6fcd1da85 100644 --- a/Aaru.Devices/Device/ScsiCommands/Pioneer.cs +++ b/Aaru.Devices/Device/ScsiCommands/Pioneer.cs @@ -47,10 +47,10 @@ public partial class Device /// How many blocks to read. /// Block size. /// Subchannel selection. - public bool PioneerReadCdDa(out byte[] buffer, out byte[] senseBuffer, uint lba, uint blockSize, + public bool PioneerReadCdDa(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint blockSize, uint transferLength, PioneerSubchannel subchannel, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -66,13 +66,7 @@ public partial class Device buffer = new byte[blockSize * transferLength]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -91,10 +85,10 @@ public partial class Device /// End MM:SS:FF of read encoded as 0x00MMSSFF. /// Block size. /// Subchannel selection. - public bool PioneerReadCdDaMsf(out byte[] buffer, out byte[] senseBuffer, uint startMsf, uint endMsf, + public bool PioneerReadCdDaMsf(out byte[] buffer, out ReadOnlySpan senseBuffer, uint startMsf, uint endMsf, uint blockSize, PioneerSubchannel subchannel, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -110,13 +104,7 @@ public partial class Device uint transferLength = (uint)((cdb[7] - cdb[3]) * 60 * 75 + (cdb[8] - cdb[4]) * 75 + (cdb[9] - cdb[5])); buffer = new byte[blockSize * transferLength]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -138,10 +126,10 @@ public partial class Device /// If set to true, returns all 2352 bytes of sector data. /// Start block address. /// How many blocks to read. - public bool PioneerReadCdXa(out byte[] buffer, out byte[] senseBuffer, uint lba, uint transferLength, - bool errorFlags, bool wholeSector, uint timeout, out double duration) + public bool PioneerReadCdXa(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint transferLength, + bool errorFlags, bool wholeSector, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -170,13 +158,7 @@ public partial class Device cdb[6] = 0x00; } - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/Plasmon.cs b/Aaru.Devices/Device/ScsiCommands/Plasmon.cs index d7470b0d2..63c2f9801 100644 --- a/Aaru.Devices/Device/ScsiCommands/Plasmon.cs +++ b/Aaru.Devices/Device/ScsiCommands/Plasmon.cs @@ -49,8 +49,8 @@ public partial class Device /// If set to true address contain physical block address. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool PlasmonReadLong(out byte[] buffer, out byte[] senseBuffer, bool relAddr, uint address, - ushort blockBytes, bool pba, uint timeout, out double duration) => + public bool PlasmonReadLong(out byte[] buffer, out ReadOnlySpan senseBuffer, bool relAddr, uint address, + ushort blockBytes, bool pba, uint timeout, out double duration) => HpReadLong(out buffer, out senseBuffer, relAddr, address, 0, blockBytes, pba, false, timeout, out duration); /// Sends the Plasmon READ LONG vendor command @@ -68,8 +68,8 @@ public partial class Device /// /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool PlasmonReadLong(out byte[] buffer, out byte[] senseBuffer, bool relAddr, uint address, - ushort transferLen, ushort blockBytes, bool pba, bool sectorCount, uint timeout, + public bool PlasmonReadLong(out byte[] buffer, out ReadOnlySpan senseBuffer, bool relAddr, uint address, + ushort transferLen, ushort blockBytes, bool pba, bool sectorCount, uint timeout, out double duration) => HpReadLong(out buffer, out senseBuffer, relAddr, @@ -89,10 +89,10 @@ public partial class Device /// If set to true address contain a physical block address. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool PlasmonReadSectorLocation(out byte[] buffer, out byte[] senseBuffer, uint address, bool pba, + public bool PlasmonReadSectorLocation(out byte[] buffer, out ReadOnlySpan senseBuffer, uint address, bool pba, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); @@ -106,13 +106,7 @@ public partial class Device buffer = new byte[8]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/Plextor.cs b/Aaru.Devices/Device/ScsiCommands/Plextor.cs index ea1009c99..4881325b8 100644 --- a/Aaru.Devices/Device/ScsiCommands/Plextor.cs +++ b/Aaru.Devices/Device/ScsiCommands/Plextor.cs @@ -48,10 +48,10 @@ public partial class Device /// How many blocks to read. /// Block size. /// Subchannel selection. - public bool PlextorReadCdDa(out byte[] buffer, out byte[] senseBuffer, uint lba, uint blockSize, + public bool PlextorReadCdDa(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint blockSize, uint transferLength, PlextorSubchannel subchannel, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -68,13 +68,7 @@ public partial class Device buffer = new byte[blockSize * transferLength]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -100,10 +94,10 @@ public partial class Device /// Duration in milliseconds it took for the device to execute the command. /// Start block address. /// How many blocks to read. - public bool PlextorReadRawDvd(out byte[] buffer, out byte[] senseBuffer, uint lba, uint transferLength, - uint timeout, out double duration) + public bool PlextorReadRawDvd(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint transferLength, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); buffer = new byte[2064 * transferLength]; @@ -117,13 +111,7 @@ public partial class Device cdb[7] = (byte)((buffer.Length & 0xFF00) >> 8); cdb[8] = (byte)(buffer.Length & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -138,23 +126,18 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool PlextorReadEepromCdr(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool PlextorReadEepromCdr(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { buffer = new byte[256]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); cdb[0] = (byte)ScsiCommands.PlextorReadEeprom; cdb[8] = 1; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -169,23 +152,18 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool PlextorReadEeprom(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool PlextorReadEeprom(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { buffer = new byte[512]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); cdb[0] = (byte)ScsiCommands.PlextorReadEeprom; cdb[8] = 2; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -202,11 +180,11 @@ public partial class Device /// How many bytes are in the EEPROM block /// Timeout. /// Duration. - public bool PlextorReadEepromBlock(out byte[] buffer, out byte[] senseBuffer, byte block, ushort blockSize, - uint timeout, out double duration) + public bool PlextorReadEepromBlock(out byte[] buffer, out ReadOnlySpan senseBuffer, byte block, + ushort blockSize, uint timeout, out double duration) { buffer = new byte[blockSize]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -216,13 +194,7 @@ public partial class Device cdb[8] = (byte)((blockSize & 0xFF00) >> 8); cdb[9] = (byte)(blockSize & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -239,11 +211,11 @@ public partial class Device /// Last actual speed. /// Timeout. /// Duration. - public bool PlextorGetSpeeds(out byte[] senseBuffer, out ushort selected, out ushort max, out ushort last, - uint timeout, out double duration) + public bool PlextorGetSpeeds(out ReadOnlySpan senseBuffer, out ushort selected, out ushort max, + out ushort last, uint timeout, out double duration) { byte[] buf = new byte[10]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -254,13 +226,7 @@ public partial class Device cdb[0] = (byte)ScsiCommands.PlextorPoweRec; cdb[9] = (byte)buf.Length; - LastError = SendScsiCommand(cdb, - ref buf, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buf, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -282,11 +248,11 @@ public partial class Device /// PoweRec recommended speed. /// Timeout. /// Duration. - public bool PlextorGetPoweRec(out byte[] senseBuffer, out bool enabled, out ushort speed, uint timeout, - out double duration) + public bool PlextorGetPoweRec(out ReadOnlySpan senseBuffer, out bool enabled, out ushort speed, uint timeout, + out double duration) { byte[] buf = new byte[8]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -297,13 +263,7 @@ public partial class Device cdb[1] = (byte)PlextorSubCommands.GetMode; cdb[9] = (byte)buf.Length; - LastError = SendScsiCommand(cdb, - ref buf, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buf, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -323,10 +283,11 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool PlextorGetSilentMode(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool PlextorGetSilentMode(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { buffer = new byte[8]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -336,13 +297,7 @@ public partial class Device cdb[3] = 4; cdb[10] = (byte)buffer.Length; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -357,10 +312,11 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool PlextorGetGigaRec(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool PlextorGetGigaRec(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { buffer = new byte[8]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -369,13 +325,7 @@ public partial class Device cdb[2] = (byte)PlextorSubCommands.GigaRec; cdb[10] = (byte)buffer.Length; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -391,11 +341,11 @@ public partial class Device /// Set if request is for DVD. /// Timeout. /// Duration. - public bool PlextorGetVariRec(out byte[] buffer, out byte[] senseBuffer, bool dvd, uint timeout, + public bool PlextorGetVariRec(out byte[] buffer, out ReadOnlySpan senseBuffer, bool dvd, uint timeout, out double duration) { buffer = new byte[8]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -409,13 +359,7 @@ public partial class Device else cdb[3] = 0x02; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -430,10 +374,11 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool PlextorGetSecuRec(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool PlextorGetSecuRec(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { buffer = new byte[8]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -441,13 +386,7 @@ public partial class Device cdb[2] = (byte)PlextorSubCommands.SecuRec; cdb[10] = (byte)buffer.Length; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -462,10 +401,11 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool PlextorGetSpeedRead(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool PlextorGetSpeedRead(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { buffer = new byte[8]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -474,13 +414,7 @@ public partial class Device cdb[2] = (byte)PlextorSubCommands.SpeedRead; cdb[10] = (byte)buffer.Length; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -495,10 +429,11 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool PlextorGetHiding(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool PlextorGetHiding(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { buffer = new byte[8]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -507,13 +442,7 @@ public partial class Device cdb[2] = (byte)PlextorSubCommands.SessionHide; cdb[9] = (byte)buffer.Length; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -529,11 +458,11 @@ public partial class Device /// Set if bitset is for dual layer discs. /// Timeout. /// Duration. - public bool PlextorGetBitsetting(out byte[] buffer, out byte[] senseBuffer, bool dualLayer, uint timeout, - out double duration) + public bool PlextorGetBitsetting(out byte[] buffer, out ReadOnlySpan senseBuffer, bool dualLayer, + uint timeout, out double duration) { buffer = new byte[8]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -547,13 +476,7 @@ public partial class Device else cdb[3] = (byte)PlextorSubCommands.BitSetR; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -568,10 +491,11 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool PlextorGetTestWriteDvdPlus(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool PlextorGetTestWriteDvdPlus(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { buffer = new byte[8]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -580,13 +504,7 @@ public partial class Device cdb[2] = (byte)PlextorSubCommands.TestWriteDvdPlus; cdb[10] = (byte)buffer.Length; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/SBC.cs b/Aaru.Devices/Device/ScsiCommands/SBC.cs index 06f499f3f..79f405e22 100644 --- a/Aaru.Devices/Device/ScsiCommands/SBC.cs +++ b/Aaru.Devices/Device/ScsiCommands/SBC.cs @@ -45,7 +45,7 @@ public partial class Device /// Duration in milliseconds it took for the device to execute the command. /// Starting block. /// Block size in bytes. - public bool Read6(out byte[] buffer, out byte[] senseBuffer, uint lba, uint blockSize, uint timeout, + public bool Read6(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint blockSize, uint timeout, out double duration) => Read6(out buffer, out senseBuffer, lba, blockSize, 1, timeout, out duration); @@ -58,10 +58,10 @@ public partial class Device /// Starting block. /// Block size in bytes. /// How many blocks to read. - public bool Read6(out byte[] buffer, out byte[] senseBuffer, uint lba, uint blockSize, byte transferLength, - uint timeout, out double duration) + public bool Read6(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint blockSize, + byte transferLength, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; cdb.Clear(); @@ -73,13 +73,7 @@ public partial class Device buffer = transferLength == 0 ? new byte[256 * blockSize] : new byte[transferLength * blockSize]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -109,11 +103,11 @@ public partial class Device /// Group number where attributes associated with this command should be collected. /// How many blocks to read. /// If set to true address is relative to current position. - public bool Read10(out byte[] buffer, out byte[] senseBuffer, byte rdprotect, bool dpo, bool fua, bool fuaNv, - bool relAddr, uint lba, uint blockSize, byte groupNumber, ushort transferLength, uint timeout, - out double duration) + public bool Read10(out byte[] buffer, out ReadOnlySpan senseBuffer, byte rdprotect, bool dpo, bool fua, + bool fuaNv, bool relAddr, uint lba, uint blockSize, byte groupNumber, ushort transferLength, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); @@ -138,13 +132,7 @@ public partial class Device buffer = new byte[transferLength * blockSize]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -175,11 +163,11 @@ public partial class Device /// How many blocks to read. /// If set to true the stream playback operation should be used (MMC only). /// If set to true address is relative to current position. - public bool Read12(out byte[] buffer, out byte[] senseBuffer, byte rdprotect, bool dpo, bool fua, bool fuaNv, - bool relAddr, uint lba, uint blockSize, byte groupNumber, uint transferLength, bool streaming, - uint timeout, out double duration) + public bool Read12(out byte[] buffer, out ReadOnlySpan senseBuffer, byte rdprotect, bool dpo, bool fua, + bool fuaNv, bool relAddr, uint lba, uint blockSize, byte groupNumber, uint transferLength, + bool streaming, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); @@ -208,13 +196,7 @@ public partial class Device buffer = new byte[transferLength * blockSize]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -244,11 +226,11 @@ public partial class Device /// Group number where attributes associated with this command should be collected. /// How many blocks to read. /// If set to true the stream playback operation should be used (MMC only). - public bool Read16(out byte[] buffer, out byte[] senseBuffer, byte rdprotect, bool dpo, bool fua, bool fuaNv, - ulong lba, uint blockSize, byte groupNumber, uint transferLength, bool streaming, uint timeout, - out double duration) + public bool Read16(out byte[] buffer, out ReadOnlySpan senseBuffer, byte rdprotect, bool dpo, bool fua, + bool fuaNv, ulong lba, uint blockSize, byte groupNumber, uint transferLength, bool streaming, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..16]; cdb.Clear(); byte[] lbaBytes = BitConverter.GetBytes(lba); @@ -280,13 +262,7 @@ public partial class Device buffer = new byte[transferLength * blockSize]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -308,10 +284,10 @@ public partial class Device /// How many bytes to read. If the number is not exactly the drive's size, the command will /// fail and incidate a delta of the size in SENSE. /// - public bool ReadLong10(out byte[] buffer, out byte[] senseBuffer, bool correct, bool relAddr, uint lba, - ushort transferBytes, uint timeout, out double duration) + public bool ReadLong10(out byte[] buffer, out ReadOnlySpan senseBuffer, bool correct, bool relAddr, uint lba, + ushort transferBytes, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); @@ -330,13 +306,7 @@ public partial class Device buffer = new byte[transferBytes]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -357,10 +327,10 @@ public partial class Device /// How many bytes to read. If the number is not exactly the drive's size, the command will /// fail and incidate a delta of the size in SENSE. /// - public bool ReadLong16(out byte[] buffer, out byte[] senseBuffer, bool correct, ulong lba, uint transferBytes, - uint timeout, out double duration) + public bool ReadLong16(out byte[] buffer, out ReadOnlySpan senseBuffer, bool correct, ulong lba, + uint transferBytes, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..16]; cdb.Clear(); byte[] lbaBytes = BitConverter.GetBytes(lba); @@ -382,13 +352,7 @@ public partial class Device buffer = new byte[transferBytes]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -402,9 +366,9 @@ public partial class Device /// LBA. /// Timeout. /// Duration. - public bool Seek6(out byte[] senseBuffer, uint lba, uint timeout, out double duration) + public bool Seek6(out ReadOnlySpan senseBuffer, uint lba, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; cdb.Clear(); byte[] buffer = []; @@ -414,13 +378,7 @@ public partial class Device cdb[2] = (byte)((lba & 0xFF00) >> 8); cdb[3] = (byte)(lba & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -434,9 +392,9 @@ public partial class Device /// LBA. /// Timeout. /// Duration. - public bool Seek10(out byte[] senseBuffer, uint lba, uint timeout, out double duration) + public bool Seek10(out ReadOnlySpan senseBuffer, uint lba, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); byte[] buffer = []; @@ -447,13 +405,7 @@ public partial class Device cdb[4] = (byte)((lba & 0xFF00) >> 8); cdb[5] = (byte)(lba & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/SMC.cs b/Aaru.Devices/Device/ScsiCommands/SMC.cs index 6fad2c150..69d80db1e 100644 --- a/Aaru.Devices/Device/ScsiCommands/SMC.cs +++ b/Aaru.Devices/Device/ScsiCommands/SMC.cs @@ -49,14 +49,14 @@ public partial class Device /// If set to true device can return cached data. /// Timeout. /// Duration. - public bool ReadAttribute(out byte[] buffer, out byte[] senseBuffer, ScsiAttributeAction action, ushort element, - byte elementType, byte volume, byte partition, ushort firstAttribute, bool cache, - uint timeout, out double duration) + public bool ReadAttribute(out byte[] buffer, out ReadOnlySpan senseBuffer, ScsiAttributeAction action, + ushort element, byte elementType, byte volume, byte partition, ushort firstAttribute, + bool cache, uint timeout, out double duration) { buffer = new byte[256]; Span cdb = CdbBuffer[..16]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.ReadAttribute; cdb[1] = (byte)((byte)action & 0x1F); @@ -74,13 +74,7 @@ public partial class Device if(cache) cdb[14] += 0x01; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -92,15 +86,9 @@ public partial class Device cdb[11] = (byte)((buffer.Length & 0xFF0000) >> 16); cdb[12] = (byte)((buffer.Length & 0xFF00) >> 8); cdb[13] = (byte)(buffer.Length & 0xFF); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/SPC.cs b/Aaru.Devices/Device/ScsiCommands/SPC.cs index e757a4df3..1f4a321ef 100644 --- a/Aaru.Devices/Device/ScsiCommands/SPC.cs +++ b/Aaru.Devices/Device/ScsiCommands/SPC.cs @@ -47,7 +47,7 @@ public partial class Device /// true if the command failed and contains the sense buffer. /// Buffer where the SCSI INQUIRY response will be stored /// Sense buffer. - public bool ScsiInquiry(out byte[] buffer, out byte[] senseBuffer) => + public bool ScsiInquiry(out byte[] buffer, out ReadOnlySpan senseBuffer) => ScsiInquiry(out buffer, out senseBuffer, Timeout); /// Sends the SPC INQUIRY command to the device using default device timeout. @@ -55,7 +55,7 @@ public partial class Device /// Buffer where the SCSI INQUIRY response will be stored /// Sense buffer. /// Duration in milliseconds it took for the device to execute the command. - public bool ScsiInquiry(out byte[] buffer, out byte[] senseBuffer, out double duration) => + public bool ScsiInquiry(out byte[] buffer, out ReadOnlySpan senseBuffer, out double duration) => ScsiInquiry(out buffer, out senseBuffer, Timeout, out duration); /// Sends the SPC INQUIRY command to the device. @@ -63,7 +63,7 @@ public partial class Device /// Buffer where the SCSI INQUIRY response will be stored /// Sense buffer. /// Timeout in seconds. - public bool ScsiInquiry(out byte[] buffer, out byte[] senseBuffer, uint timeout) => + public bool ScsiInquiry(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout) => ScsiInquiry(out buffer, out senseBuffer, timeout, out _); /// Sends the SPC INQUIRY command to the device. @@ -72,10 +72,10 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ScsiInquiry(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool ScsiInquiry(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, out double duration) { buffer = new byte[36]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; cdb.Clear(); @@ -87,13 +87,7 @@ public partial class Device cdb[4] = 36; cdb[5] = 0; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -109,15 +103,9 @@ public partial class Device cdb[5] = 0; buffer = new byte[pagesLength]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out sense); Error = LastError != 0; @@ -134,7 +122,7 @@ public partial class Device /// Buffer where the SCSI INQUIRY response will be stored /// Sense buffer. /// The Extended Vital Product Data - public bool ScsiInquiry(out byte[] buffer, out byte[] senseBuffer, byte page) => + public bool ScsiInquiry(out byte[] buffer, out ReadOnlySpan senseBuffer, byte page) => ScsiInquiry(out buffer, out senseBuffer, page, Timeout); /// @@ -146,7 +134,7 @@ public partial class Device /// Sense buffer. /// Duration in milliseconds it took for the device to execute the command. /// The Extended Vital Product Data - public bool ScsiInquiry(out byte[] buffer, out byte[] senseBuffer, byte page, out double duration) => + public bool ScsiInquiry(out byte[] buffer, out ReadOnlySpan senseBuffer, byte page, out double duration) => ScsiInquiry(out buffer, out senseBuffer, page, Timeout, out duration); /// Sends the SPC INQUIRY command to the device with an Extended Vital Product Data page. @@ -155,7 +143,7 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// The Extended Vital Product Data - public bool ScsiInquiry(out byte[] buffer, out byte[] senseBuffer, byte page, uint timeout) => + public bool ScsiInquiry(out byte[] buffer, out ReadOnlySpan senseBuffer, byte page, uint timeout) => ScsiInquiry(out buffer, out senseBuffer, page, timeout, out _); /// Sends the SPC INQUIRY command to the device with an Extended Vital Product Data page. @@ -165,10 +153,11 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// The Extended Vital Product Data - public bool ScsiInquiry(out byte[] buffer, out byte[] senseBuffer, byte page, uint timeout, out double duration) + public bool ScsiInquiry(out byte[] buffer, out ReadOnlySpan senseBuffer, byte page, uint timeout, + out double duration) { buffer = new byte[36]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; @@ -179,13 +168,7 @@ public partial class Device cdb[4] = 36; cdb[5] = 0; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -204,15 +187,9 @@ public partial class Device cdb[5] = 0; buffer = new byte[pagesLength]; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out sense); Error = LastError != 0; @@ -226,9 +203,9 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ScsiTestUnitReady(out byte[] senseBuffer, uint timeout, out double duration) + public bool ScsiTestUnitReady(out ReadOnlySpan senseBuffer, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; cdb.Clear(); @@ -237,13 +214,7 @@ public partial class Device byte[] buffer = []; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -258,7 +229,7 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ModeSense(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool ModeSense(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, out double duration) => ModeSense6(out buffer, out senseBuffer, false, ScsiModeSensePageControl.Current, 0, 0, timeout, out duration); /// Sends the SPC MODE SENSE(6) command to the device as introduced in SCSI-2 @@ -270,8 +241,8 @@ public partial class Device /// If set to true device MUST not return any block descriptor. /// Page control. /// Page code. - public bool ModeSense6(out byte[] buffer, out byte[] senseBuffer, bool dbd, ScsiModeSensePageControl pageControl, - byte pageCode, uint timeout, out double duration) => + public bool ModeSense6(out byte[] buffer, out ReadOnlySpan senseBuffer, bool dbd, + ScsiModeSensePageControl pageControl, byte pageCode, uint timeout, out double duration) => ModeSense6(out buffer, out senseBuffer, dbd, pageControl, pageCode, 0, timeout, out duration); /// Sends the SPC MODE SENSE(6) command to the device as introduced in SCSI-3 SPC-3 @@ -284,10 +255,11 @@ public partial class Device /// Page control. /// Page code. /// Sub-page code. - public bool ModeSense6(out byte[] buffer, out byte[] senseBuffer, bool dbd, ScsiModeSensePageControl pageControl, - byte pageCode, byte subPageCode, uint timeout, out double duration) + public bool ModeSense6(out byte[] buffer, out ReadOnlySpan senseBuffer, bool dbd, + ScsiModeSensePageControl pageControl, byte pageCode, byte subPageCode, uint timeout, + out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; cdb.Clear(); buffer = new byte[254]; @@ -303,13 +275,7 @@ public partial class Device cdb[4] = (byte)buffer.Length; cdb[5] = 0; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -320,15 +286,9 @@ public partial class Device buffer = new byte[modeLength]; cdb[4] = (byte)buffer.Length; - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out sense); Error = LastError != 0; @@ -346,8 +306,8 @@ public partial class Device /// If set to true device MUST not return any block descriptor. /// Page control. /// Page code. - public bool ModeSense10(out byte[] buffer, out byte[] senseBuffer, bool dbd, ScsiModeSensePageControl pageControl, - byte pageCode, uint timeout, out double duration) => + public bool ModeSense10(out byte[] buffer, out ReadOnlySpan senseBuffer, bool dbd, + ScsiModeSensePageControl pageControl, byte pageCode, uint timeout, out double duration) => ModeSense10(out buffer, out senseBuffer, false, dbd, pageControl, pageCode, 0, timeout, out duration); /// Sends the SPC MODE SENSE(10) command to the device as introduced in SCSI-3 SPC-2 @@ -360,7 +320,7 @@ public partial class Device /// Page control. /// Page code. /// If set means 64-bit LBAs are accepted by the caller. - public bool ModeSense10(out byte[] buffer, out byte[] senseBuffer, bool llbaa, bool dbd, + public bool ModeSense10(out byte[] buffer, out ReadOnlySpan senseBuffer, bool llbaa, bool dbd, ScsiModeSensePageControl pageControl, byte pageCode, uint timeout, out double duration) => ModeSense10(out buffer, out senseBuffer, llbaa, dbd, pageControl, pageCode, 0, timeout, out duration); @@ -375,11 +335,11 @@ public partial class Device /// Page code. /// Sub-page code. /// If set means 64-bit LBAs are accepted by the caller. - public bool ModeSense10(out byte[] buffer, out byte[] senseBuffer, bool llbaa, bool dbd, - ScsiModeSensePageControl pageControl, byte pageCode, byte subPageCode, uint timeout, + public bool ModeSense10(out byte[] buffer, out ReadOnlySpan senseBuffer, bool llbaa, bool dbd, + ScsiModeSensePageControl pageControl, byte pageCode, byte subPageCode, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); buffer = new byte[4096]; @@ -397,13 +357,7 @@ public partial class Device cdb[8] = (byte)(buffer.Length & 0xFF); cdb[9] = 0; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -415,15 +369,9 @@ public partial class Device buffer = new byte[modeLength]; cdb[7] = (byte)((buffer.Length & 0xFF00) >> 8); cdb[8] = (byte)(buffer.Length & 0xFF); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out sense); Error = LastError != 0; @@ -437,7 +385,7 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool SpcPreventMediumRemoval(out byte[] senseBuffer, uint timeout, out double duration) => + public bool SpcPreventMediumRemoval(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => SpcPreventAllowMediumRemoval(out senseBuffer, ScsiPreventAllowMode.Prevent, timeout, out duration); /// Sends the SPC PREVENT ALLOW MEDIUM REMOVAL command to allow medium removal @@ -445,7 +393,7 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool SpcAllowMediumRemoval(out byte[] senseBuffer, uint timeout, out double duration) => + public bool SpcAllowMediumRemoval(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => SpcPreventAllowMediumRemoval(out senseBuffer, ScsiPreventAllowMode.Allow, timeout, out duration); /// Sends the SPC PREVENT ALLOW MEDIUM REMOVAL command @@ -454,7 +402,8 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// true to prevent medium removal, false to allow it. - public bool SpcPreventAllowMediumRemoval(out byte[] senseBuffer, bool prevent, uint timeout, out double duration) => + public bool SpcPreventAllowMediumRemoval(out ReadOnlySpan senseBuffer, bool prevent, uint timeout, + out double duration) => prevent ? SpcPreventAllowMediumRemoval(out senseBuffer, ScsiPreventAllowMode.Prevent, timeout, out duration) : SpcPreventAllowMediumRemoval(out senseBuffer, ScsiPreventAllowMode.Allow, timeout, out duration); @@ -465,10 +414,10 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// Prevention mode. - public bool SpcPreventAllowMediumRemoval(out byte[] senseBuffer, ScsiPreventAllowMode preventMode, uint timeout, - out double duration) + public bool SpcPreventAllowMediumRemoval(out ReadOnlySpan senseBuffer, ScsiPreventAllowMode preventMode, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; cdb.Clear(); byte[] buffer = []; @@ -476,13 +425,7 @@ public partial class Device cdb[0] = (byte)ScsiCommands.PreventAllowMediumRemoval; cdb[4] = (byte)((byte)preventMode & 0x03); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -497,7 +440,8 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadCapacity(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool + ReadCapacity(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, out double duration) => ReadCapacity(out buffer, out senseBuffer, false, 0, false, timeout, out duration); /// Sends the SPC READ CAPACITY command @@ -509,10 +453,10 @@ public partial class Device /// If set, it is requesting partial media capacity /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadCapacity(out byte[] buffer, out byte[] senseBuffer, bool relAddr, uint address, bool pmi, - uint timeout, out double duration) + public bool ReadCapacity(out byte[] buffer, out ReadOnlySpan senseBuffer, bool relAddr, uint address, + bool pmi, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); buffer = new byte[8]; @@ -531,13 +475,7 @@ public partial class Device cdb[5] = (byte)(address & 0xFF); } - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -552,7 +490,8 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadCapacity16(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool + ReadCapacity16(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, out double duration) => ReadCapacity16(out buffer, out senseBuffer, 0, false, timeout, out duration); /// Sends the SPC READ CAPACITY(16) command @@ -563,10 +502,10 @@ public partial class Device /// If set, it is requesting partial media capacity /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadCapacity16(out byte[] buffer, out byte[] senseBuffer, ulong address, bool pmi, uint timeout, - out double duration) + public bool ReadCapacity16(out byte[] buffer, out ReadOnlySpan senseBuffer, ulong address, bool pmi, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..16]; cdb.Clear(); buffer = new byte[32]; @@ -593,13 +532,7 @@ public partial class Device cdb[12] = (byte)((buffer.Length & 0xFF00) >> 8); cdb[13] = (byte)(buffer.Length & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -614,9 +547,10 @@ public partial class Device /// Sense buffer. /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. - public bool ReadMediaSerialNumber(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool ReadMediaSerialNumber(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..12]; cdb.Clear(); buffer = new byte[4]; @@ -628,13 +562,7 @@ public partial class Device cdb[8] = (byte)((buffer.Length & 0xFF00) >> 8); cdb[9] = (byte)(buffer.Length & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -646,15 +574,9 @@ public partial class Device cdb[7] = (byte)((buffer.Length & 0xFF0000) >> 16); cdb[8] = (byte)((buffer.Length & 0xFF00) >> 8); cdb[9] = (byte)(buffer.Length & 0xFF); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out sense); Error = LastError != 0; @@ -672,8 +594,8 @@ public partial class Device /// If set to true device can return cached data. /// Timeout. /// Duration. - public bool ReadAttribute(out byte[] buffer, out byte[] senseBuffer, ScsiAttributeAction action, byte partition, - ushort firstAttribute, bool cache, uint timeout, out double duration) => + public bool ReadAttribute(out byte[] buffer, out ReadOnlySpan senseBuffer, ScsiAttributeAction action, + byte partition, ushort firstAttribute, bool cache, uint timeout, out double duration) => ReadAttribute(out buffer, out senseBuffer, action, @@ -694,8 +616,8 @@ public partial class Device /// If set to true device can return cached data. /// Timeout. /// Duration. - public bool ReadAttribute(out byte[] buffer, out byte[] senseBuffer, ScsiAttributeAction action, - ushort firstAttribute, bool cache, uint timeout, out double duration) => + public bool ReadAttribute(out byte[] buffer, out ReadOnlySpan senseBuffer, ScsiAttributeAction action, + ushort firstAttribute, bool cache, uint timeout, out double duration) => ReadAttribute(out buffer, out senseBuffer, action, 0, 0, 0, 0, firstAttribute, cache, timeout, out duration); /// Reads an attribute from the medium auxiliary memory @@ -706,8 +628,8 @@ public partial class Device /// First attribute identifier. /// Timeout. /// Duration. - public bool ReadAttribute(out byte[] buffer, out byte[] senseBuffer, ScsiAttributeAction action, byte partition, - ushort firstAttribute, uint timeout, out double duration) => + public bool ReadAttribute(out byte[] buffer, out ReadOnlySpan senseBuffer, ScsiAttributeAction action, + byte partition, ushort firstAttribute, uint timeout, out double duration) => ReadAttribute(out buffer, out senseBuffer, action, @@ -727,8 +649,8 @@ public partial class Device /// First attribute identifier. /// Timeout. /// Duration. - public bool ReadAttribute(out byte[] buffer, out byte[] senseBuffer, ScsiAttributeAction action, - ushort firstAttribute, uint timeout, out double duration) => + public bool ReadAttribute(out byte[] buffer, out ReadOnlySpan senseBuffer, ScsiAttributeAction action, + ushort firstAttribute, uint timeout, out double duration) => ReadAttribute(out buffer, out senseBuffer, action, 0, 0, 0, 0, firstAttribute, false, timeout, out duration); /// Reads an attribute from the medium auxiliary memory @@ -740,8 +662,8 @@ public partial class Device /// First attribute identifier. /// Timeout. /// Duration. - public bool ReadAttribute(out byte[] buffer, out byte[] senseBuffer, ScsiAttributeAction action, byte volume, - byte partition, ushort firstAttribute, uint timeout, out double duration) => + public bool ReadAttribute(out byte[] buffer, out ReadOnlySpan senseBuffer, ScsiAttributeAction action, + byte volume, byte partition, ushort firstAttribute, uint timeout, out double duration) => ReadAttribute(out buffer, out senseBuffer, action, @@ -764,19 +686,19 @@ public partial class Device /// If set to true device can return cached data. /// Timeout. /// Duration. - public bool ReadAttribute(out byte[] buffer, out byte[] senseBuffer, ScsiAttributeAction action, byte volume, - byte partition, ushort firstAttribute, bool cache, uint timeout, out double duration) => - ReadAttribute(out buffer, - out senseBuffer, - action, - 0, - 0, - volume, - partition, - firstAttribute, - cache, - timeout, - out duration); + public bool ReadAttribute(out byte[] buffer, out ReadOnlySpan senseBuffer, ScsiAttributeAction action, + byte volume, byte partition, ushort firstAttribute, bool cache, uint timeout, + out double duration) => ReadAttribute(out buffer, + out senseBuffer, + action, + 0, + 0, + volume, + partition, + firstAttribute, + cache, + timeout, + out duration); /// Sends the SPC MODE SELECT(6) command /// true if the command failed and contains the sense buffer. @@ -786,10 +708,10 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// Set if page is formatted. - public bool ModeSelect(byte[] buffer, out byte[] senseBuffer, bool pageFormat, bool savePages, uint timeout, - out double duration) + public bool ModeSelect(byte[] buffer, out ReadOnlySpan senseBuffer, bool pageFormat, bool savePages, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; // Prevent overflows if(buffer.Length > 255) @@ -821,13 +743,7 @@ public partial class Device cdb[4] = (byte)buffer.Length; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.Out, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.Out, out duration, out bool sense); Error = LastError != 0; @@ -844,10 +760,10 @@ public partial class Device /// Timeout in seconds. /// Duration in milliseconds it took for the device to execute the command. /// Set if page is formatted. - public bool ModeSelect10(byte[] buffer, out byte[] senseBuffer, bool pageFormat, bool savePages, uint timeout, - out double duration) + public bool ModeSelect10(byte[] buffer, out ReadOnlySpan senseBuffer, bool pageFormat, bool savePages, + uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; // Prevent overflows if(buffer.Length > 65535) @@ -878,13 +794,7 @@ public partial class Device cdb[7] = (byte)((buffer.Length & 0xFF00) << 8); cdb[8] = (byte)(buffer.Length & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.Out, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.Out, out duration, out bool sense); Error = LastError != 0; @@ -922,7 +832,7 @@ public partial class Device cdb[4] = (byte)buffer.Length; cdb[5] = 0; - LastError = SendScsiCommand(cdb, ref buffer, out _, timeout, ScsiDirection.In, out duration, out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/SSC.cs b/Aaru.Devices/Device/ScsiCommands/SSC.cs index 27fad0fd6..b85ab339c 100644 --- a/Aaru.Devices/Device/ScsiCommands/SSC.cs +++ b/Aaru.Devices/Device/ScsiCommands/SSC.cs @@ -46,7 +46,7 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool Load(out byte[] senseBuffer, uint timeout, out double duration) => + public bool Load(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => LoadUnload(out senseBuffer, false, true, false, false, false, timeout, out duration); /// Prepares the medium for ejection @@ -54,7 +54,7 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool Unload(out byte[] senseBuffer, uint timeout, out double duration) => + public bool Unload(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => LoadUnload(out senseBuffer, false, false, false, false, false, timeout, out duration); /// Prepares the medium for reading or ejection @@ -70,10 +70,10 @@ public partial class Device /// /// Timeout. /// Duration. - public bool LoadUnload(out byte[] senseBuffer, bool immediate, bool load, bool retense, bool endOfTape, bool hold, - uint timeout, out double duration) + public bool LoadUnload(out ReadOnlySpan senseBuffer, bool immediate, bool load, bool retense, bool endOfTape, + bool hold, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; cdb.Clear(); byte[] buffer = []; @@ -90,13 +90,7 @@ public partial class Device if(hold) cdb[4] += 0x08; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -110,7 +104,7 @@ public partial class Device /// Logical block address. /// Timeout. /// Duration. - public bool Locate(out byte[] senseBuffer, uint lba, uint timeout, out double duration) => + public bool Locate(out ReadOnlySpan senseBuffer, uint lba, uint timeout, out double duration) => Locate(out senseBuffer, false, false, false, 0, lba, timeout, out duration); /// Positions the medium to the specified block in the specified partition @@ -119,7 +113,8 @@ public partial class Device /// Logical block address. /// Timeout. /// Duration. - public bool Locate(out byte[] senseBuffer, byte partition, uint lba, uint timeout, out double duration) => + public bool + Locate(out ReadOnlySpan senseBuffer, byte partition, uint lba, uint timeout, out double duration) => Locate(out senseBuffer, false, false, false, partition, lba, timeout, out duration); /// Positions the medium to the specified block in the current partition @@ -128,7 +123,8 @@ public partial class Device /// Logical block address. /// Timeout. /// Duration. - public bool Locate(out byte[] senseBuffer, bool immediate, uint lba, uint timeout, out double duration) => + public bool Locate(out ReadOnlySpan senseBuffer, bool immediate, uint lba, uint timeout, + out double duration) => Locate(out senseBuffer, immediate, false, false, 0, lba, timeout, out duration); /// Positions the medium to the specified block in the specified partition @@ -138,15 +134,15 @@ public partial class Device /// Logical block address. /// Timeout. /// Duration. - public bool Locate(out byte[] senseBuffer, bool immediate, byte partition, uint lba, uint timeout, - out double duration) => Locate(out senseBuffer, - immediate, - false, - false, - partition, - lba, - timeout, - out duration); + public bool Locate(out ReadOnlySpan senseBuffer, bool immediate, byte partition, uint lba, uint timeout, + out double duration) => Locate(out senseBuffer, + immediate, + false, + false, + partition, + lba, + timeout, + out duration); /// Positions the medium to the specified object identifier /// Sense buffer. @@ -157,10 +153,10 @@ public partial class Device /// Object identifier. /// Timeout. /// Duration. - public bool Locate(out byte[] senseBuffer, bool immediate, bool blockType, bool changePartition, byte partition, - uint objectId, uint timeout, out double duration) + public bool Locate(out ReadOnlySpan senseBuffer, bool immediate, bool blockType, bool changePartition, + byte partition, uint objectId, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); byte[] buffer = []; @@ -179,13 +175,7 @@ public partial class Device cdb[6] = (byte)(objectId & 0xFF); cdb[8] = partition; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -199,7 +189,7 @@ public partial class Device /// Logical block address. /// Timeout. /// Duration. - public bool Locate16(out byte[] senseBuffer, ulong lba, uint timeout, out double duration) => + public bool Locate16(out ReadOnlySpan senseBuffer, ulong lba, uint timeout, out double duration) => Locate16(out senseBuffer, false, false, SscLogicalIdTypes.ObjectId, false, 0, lba, timeout, out duration); /// Positions the medium to the specified block in the specified partition @@ -208,16 +198,16 @@ public partial class Device /// Logical block address. /// Timeout. /// Duration. - public bool Locate16(out byte[] senseBuffer, byte partition, ulong lba, uint timeout, out double duration) => - Locate16(out senseBuffer, - false, - false, - SscLogicalIdTypes.ObjectId, - false, - partition, - lba, - timeout, - out duration); + public bool Locate16(out ReadOnlySpan senseBuffer, byte partition, ulong lba, uint timeout, + out double duration) => Locate16(out senseBuffer, + false, + false, + SscLogicalIdTypes.ObjectId, + false, + partition, + lba, + timeout, + out duration); /// Positions the medium to the specified block in the current partition /// Sense buffer. @@ -225,8 +215,16 @@ public partial class Device /// Logical block address. /// Timeout. /// Duration. - public bool Locate16(out byte[] senseBuffer, bool immediate, ulong lba, uint timeout, out double duration) => - Locate16(out senseBuffer, immediate, false, SscLogicalIdTypes.ObjectId, false, 0, lba, timeout, out duration); + public bool Locate16(out ReadOnlySpan senseBuffer, bool immediate, ulong lba, uint timeout, + out double duration) => Locate16(out senseBuffer, + immediate, + false, + SscLogicalIdTypes.ObjectId, + false, + 0, + lba, + timeout, + out duration); /// Positions the medium to the specified block in the specified partition /// Sense buffer. @@ -235,16 +233,16 @@ public partial class Device /// Logical block address. /// Timeout. /// Duration. - public bool Locate16(out byte[] senseBuffer, bool immediate, byte partition, ulong lba, uint timeout, - out double duration) => Locate16(out senseBuffer, - immediate, - false, - SscLogicalIdTypes.ObjectId, - false, - partition, - lba, - timeout, - out duration); + public bool Locate16(out ReadOnlySpan senseBuffer, bool immediate, byte partition, ulong lba, uint timeout, + out double duration) => Locate16(out senseBuffer, + immediate, + false, + SscLogicalIdTypes.ObjectId, + false, + partition, + lba, + timeout, + out duration); /// Positions the medium to the specified object identifier /// Sense buffer. @@ -256,10 +254,11 @@ public partial class Device /// Destination identifier. /// Timeout. /// Duration. - public bool Locate16(out byte[] senseBuffer, bool immediate, bool changePartition, SscLogicalIdTypes destType, - bool bam, byte partition, ulong identifier, uint timeout, out double duration) + public bool Locate16(out ReadOnlySpan senseBuffer, bool immediate, bool changePartition, + SscLogicalIdTypes destType, bool bam, byte partition, ulong identifier, uint timeout, + out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..16]; cdb.Clear(); byte[] buffer = []; @@ -285,13 +284,7 @@ public partial class Device cdb[10] = idBytes[1]; cdb[11] = idBytes[0]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -309,7 +302,7 @@ public partial class Device /// Block size in bytes. /// Timeout. /// Duration. - public bool Read6(out byte[] buffer, out byte[] senseBuffer, uint blocks, uint blockSize, uint timeout, out double duration) + public bool Read6(out byte[] buffer, out ReadOnlySpan senseBuffer, uint blocks, uint blockSize, uint timeout, out double duration) { return Read6(out buffer, out senseBuffer, false, true, blocks, blockSize, timeout, out duration); }*/ @@ -322,15 +315,9 @@ public partial class Device /// Block size in bytes. /// Timeout. /// Duration. - public bool Read6(out byte[] buffer, out byte[] senseBuffer, bool sili, uint transferLen, uint blockSize, - uint timeout, out double duration) => Read6(out buffer, - out senseBuffer, - sili, - false, - transferLen, - blockSize, - timeout, - out duration); + public bool Read6(out byte[] buffer, out ReadOnlySpan senseBuffer, bool sili, uint transferLen, + uint blockSize, uint timeout, out double duration) => + Read6(out buffer, out senseBuffer, sili, false, transferLen, blockSize, timeout, out duration); /// Reads the specified number of bytes or of blocks from the medium /// Buffer. @@ -347,13 +334,13 @@ public partial class Device /// Block size in bytes. /// Timeout. /// Duration. - public bool Read6(out byte[] buffer, out byte[] senseBuffer, bool sili, bool fixedLen, uint transferLen, - uint blockSize, uint timeout, out double duration) + public bool Read6(out byte[] buffer, out ReadOnlySpan senseBuffer, bool sili, bool fixedLen, uint transferLen, + uint blockSize, uint timeout, out double duration) { buffer = fixedLen ? new byte[blockSize * transferLen] : new byte[transferLen]; Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.Read6; @@ -365,13 +352,7 @@ public partial class Device cdb[3] = (byte)((transferLen & 0xFF00) >> 8); cdb[4] = (byte)(transferLen & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -389,8 +370,8 @@ public partial class Device /// Object size in bytes. /// Timeout. /// Duration. - public bool Read16(out byte[] buffer, out byte[] senseBuffer, bool sili, ulong objectId, uint blocks, - uint blockSize, uint timeout, out double duration) => + public bool Read16(out byte[] buffer, out ReadOnlySpan senseBuffer, bool sili, ulong objectId, uint blocks, + uint blockSize, uint timeout, out double duration) => Read16(out buffer, out senseBuffer, sili, false, 0, objectId, blocks, blockSize, timeout, out duration); /// Reads a number of fixed-length blocks starting at specified block from the specified partition @@ -403,8 +384,8 @@ public partial class Device /// Object size in bytes. /// Timeout. /// Duration. - public bool Read16(out byte[] buffer, out byte[] senseBuffer, bool sili, byte partition, ulong objectId, - uint blocks, uint blockSize, uint timeout, out double duration) => + public bool Read16(out byte[] buffer, out ReadOnlySpan senseBuffer, bool sili, byte partition, ulong objectId, + uint blocks, uint blockSize, uint timeout, out double duration) => Read16(out buffer, out senseBuffer, sili, false, partition, objectId, blocks, blockSize, timeout, out duration); /// Reads a number of fixed-length blocks starting at specified object @@ -415,17 +396,9 @@ public partial class Device /// Object size in bytes. /// Timeout. /// Duration. - public bool Read16(out byte[] buffer, out byte[] senseBuffer, ulong objectId, uint blocks, uint blockSize, - uint timeout, out double duration) => Read16(out buffer, - out senseBuffer, - false, - true, - 0, - objectId, - blocks, - blockSize, - timeout, - out duration); + public bool Read16(out byte[] buffer, out ReadOnlySpan senseBuffer, ulong objectId, uint blocks, + uint blockSize, uint timeout, out double duration) => + Read16(out buffer, out senseBuffer, false, true, 0, objectId, blocks, blockSize, timeout, out duration); /// Reads a number of fixed-length blocks starting at specified block from the specified partition /// Buffer. @@ -436,8 +409,8 @@ public partial class Device /// Object size in bytes. /// Timeout. /// Duration. - public bool Read16(out byte[] buffer, out byte[] senseBuffer, byte partition, ulong objectId, uint blocks, - uint blockSize, uint timeout, out double duration) => + public bool Read16(out byte[] buffer, out ReadOnlySpan senseBuffer, byte partition, ulong objectId, + uint blocks, uint blockSize, uint timeout, out double duration) => Read16(out buffer, out senseBuffer, false, true, partition, objectId, blocks, blockSize, timeout, out duration); /// Reads a number of bytes or objects starting at specified object from the specified partition @@ -457,13 +430,13 @@ public partial class Device /// Object size in bytes. /// Timeout. /// Duration. - public bool Read16(out byte[] buffer, out byte[] senseBuffer, bool sili, bool fixedLen, byte partition, - ulong objectId, uint transferLen, uint objectSize, uint timeout, out double duration) + public bool Read16(out byte[] buffer, out ReadOnlySpan senseBuffer, bool sili, bool fixedLen, byte partition, + ulong objectId, uint transferLen, uint objectSize, uint timeout, out double duration) { buffer = fixedLen ? new byte[objectSize * transferLen] : new byte[transferLen]; Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; byte[] idBytes = BitConverter.GetBytes(objectId); cdb[0] = (byte)ScsiCommands.Read16; @@ -485,13 +458,7 @@ public partial class Device cdb[13] = (byte)((transferLen & 0xFF00) >> 8); cdb[14] = (byte)(transferLen & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -505,22 +472,17 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool ReadBlockLimits(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) + public bool ReadBlockLimits(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) { buffer = new byte[6]; Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.ReadBlockLimits; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -534,7 +496,8 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool ReadPosition(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool + ReadPosition(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, out double duration) => ReadPosition(out buffer, out senseBuffer, SscPositionForms.Short, timeout, out duration); /// Reports current reading/writing elements position on the medium using 32 bytes response @@ -542,7 +505,8 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool ReadPositionLong(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool ReadPositionLong(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) => ReadPosition(out buffer, out senseBuffer, SscPositionForms.Long, timeout, out duration); /// Reports current reading/writing elements position on the medium @@ -553,8 +517,8 @@ public partial class Device /// Requests current logical position. /// Timeout. /// Duration. - public bool ReadPosition(out byte[] buffer, out byte[] senseBuffer, bool vendorType, bool longForm, - bool totalPosition, uint timeout, out double duration) + public bool ReadPosition(out byte[] buffer, out ReadOnlySpan senseBuffer, bool vendorType, bool longForm, + bool totalPosition, uint timeout, out double duration) { byte responseForm = 0; @@ -573,8 +537,8 @@ public partial class Device /// Response form. /// Timeout. /// Duration. - public bool ReadPosition(out byte[] buffer, out byte[] senseBuffer, SscPositionForms responseForm, uint timeout, - out double duration) + public bool ReadPosition(out byte[] buffer, out ReadOnlySpan senseBuffer, SscPositionForms responseForm, + uint timeout, out double duration) { buffer = responseForm switch { @@ -592,7 +556,7 @@ public partial class Device Span cdb = CdbBuffer[..10]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.ReadPosition; cdb[1] = (byte)((byte)responseForm & 0x1F); @@ -603,13 +567,7 @@ public partial class Device cdb[8] = (byte)(buffer.Length & 0xFF); } - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -625,16 +583,9 @@ public partial class Device /// Block size in bytes. /// Timeout. /// Duration. - public bool ReadReverse6(out byte[] buffer, out byte[] senseBuffer, uint blocks, uint blockSize, uint timeout, - out double duration) => ReadReverse6(out buffer, - out senseBuffer, - false, - false, - true, - blocks, - blockSize, - timeout, - out duration); + public bool ReadReverse6(out byte[] buffer, out ReadOnlySpan senseBuffer, uint blocks, uint blockSize, + uint timeout, out double duration) => + ReadReverse6(out buffer, out senseBuffer, false, false, true, blocks, blockSize, timeout, out duration); /// Reads the specified number of bytes or of blocks from the medium, backwards /// Buffer. @@ -644,8 +595,8 @@ public partial class Device /// Block size in bytes. /// Timeout. /// Duration. - public bool ReadReverse6(out byte[] buffer, out byte[] senseBuffer, bool sili, uint transferLen, uint blockSize, - uint timeout, out double duration) => + public bool ReadReverse6(out byte[] buffer, out ReadOnlySpan senseBuffer, bool sili, uint transferLen, + uint blockSize, uint timeout, out double duration) => ReadReverse6(out buffer, out senseBuffer, false, sili, false, transferLen, blockSize, timeout, out duration); /// Reads the specified number of bytes or of blocks from the medium, backwards @@ -664,13 +615,13 @@ public partial class Device /// Block size in bytes. /// Timeout. /// Duration. - public bool ReadReverse6(out byte[] buffer, out byte[] senseBuffer, bool byteOrder, bool sili, bool fixedLen, - uint transferLen, uint blockSize, uint timeout, out double duration) + public bool ReadReverse6(out byte[] buffer, out ReadOnlySpan senseBuffer, bool byteOrder, bool sili, + bool fixedLen, uint transferLen, uint blockSize, uint timeout, out double duration) { buffer = fixedLen ? new byte[blockSize * transferLen] : new byte[transferLen]; Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.ReadReverse; @@ -684,13 +635,7 @@ public partial class Device cdb[3] = (byte)((transferLen & 0xFF00) >> 8); cdb[4] = (byte)(transferLen & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -708,8 +653,8 @@ public partial class Device /// Object size in bytes. /// Timeout. /// Duration. - public bool ReadReverse16(out byte[] buffer, out byte[] senseBuffer, bool sili, ulong objectId, uint blocks, - uint blockSize, uint timeout, out double duration) => + public bool ReadReverse16(out byte[] buffer, out ReadOnlySpan senseBuffer, bool sili, ulong objectId, + uint blocks, uint blockSize, uint timeout, out double duration) => ReadReverse16(out buffer, out senseBuffer, false, @@ -732,8 +677,8 @@ public partial class Device /// Object size in bytes. /// Timeout. /// Duration. - public bool ReadReverse16(out byte[] buffer, out byte[] senseBuffer, bool sili, byte partition, ulong objectId, - uint blocks, uint blockSize, uint timeout, out double duration) => + public bool ReadReverse16(out byte[] buffer, out ReadOnlySpan senseBuffer, bool sili, byte partition, + ulong objectId, uint blocks, uint blockSize, uint timeout, out double duration) => ReadReverse16(out buffer, out senseBuffer, false, @@ -754,8 +699,8 @@ public partial class Device /// Object size in bytes. /// Timeout. /// Duration. - public bool ReadReverse16(out byte[] buffer, out byte[] senseBuffer, ulong objectId, uint blocks, uint blockSize, - uint timeout, out double duration) => + public bool ReadReverse16(out byte[] buffer, out ReadOnlySpan senseBuffer, ulong objectId, uint blocks, + uint blockSize, uint timeout, out double duration) => ReadReverse16(out buffer, out senseBuffer, false, @@ -777,8 +722,8 @@ public partial class Device /// Object size in bytes. /// Timeout. /// Duration. - public bool ReadReverse16(out byte[] buffer, out byte[] senseBuffer, byte partition, ulong objectId, uint blocks, - uint blockSize, uint timeout, out double duration) => + public bool ReadReverse16(out byte[] buffer, out ReadOnlySpan senseBuffer, byte partition, ulong objectId, + uint blocks, uint blockSize, uint timeout, out double duration) => ReadReverse16(out buffer, out senseBuffer, false, @@ -809,14 +754,14 @@ public partial class Device /// Object size in bytes. /// Timeout. /// Duration. - public bool ReadReverse16(out byte[] buffer, out byte[] senseBuffer, bool byteOrder, bool sili, bool fixedLen, - byte partition, ulong objectId, uint transferLen, uint objectSize, uint timeout, - out double duration) + public bool ReadReverse16(out byte[] buffer, out ReadOnlySpan senseBuffer, bool byteOrder, bool sili, + bool fixedLen, byte partition, ulong objectId, uint transferLen, uint objectSize, + uint timeout, out double duration) { buffer = fixedLen ? new byte[objectSize * transferLen] : new byte[transferLen]; Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; byte[] idBytes = BitConverter.GetBytes(objectId); cdb[0] = (byte)ScsiCommands.Read16; @@ -840,13 +785,7 @@ public partial class Device cdb[13] = (byte)((transferLen & 0xFF00) >> 8); cdb[14] = (byte)(transferLen & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -862,8 +801,8 @@ public partial class Device /// Block size in bytes. /// Timeout. /// Duration. - public bool RecoverBufferedData(out byte[] buffer, out byte[] senseBuffer, uint blocks, uint blockSize, - uint timeout, out double duration) => + public bool RecoverBufferedData(out byte[] buffer, out ReadOnlySpan senseBuffer, uint blocks, uint blockSize, + uint timeout, out double duration) => RecoverBufferedData(out buffer, out senseBuffer, false, true, blocks, blockSize, timeout, out duration); /// Reads the specified number of bytes or of blocks from the device's buffer @@ -874,8 +813,8 @@ public partial class Device /// Block size in bytes. /// Timeout. /// Duration. - public bool RecoverBufferedData(out byte[] buffer, out byte[] senseBuffer, bool sili, uint transferLen, - uint blockSize, uint timeout, out double duration) => + public bool RecoverBufferedData(out byte[] buffer, out ReadOnlySpan senseBuffer, bool sili, uint transferLen, + uint blockSize, uint timeout, out double duration) => RecoverBufferedData(out buffer, out senseBuffer, sili, false, transferLen, blockSize, timeout, out duration); /// Reads the specified number of bytes or of blocks from the device's buffer @@ -893,13 +832,13 @@ public partial class Device /// Block size in bytes. /// Timeout. /// Duration. - public bool RecoverBufferedData(out byte[] buffer, out byte[] senseBuffer, bool sili, bool fixedLen, - uint transferLen, uint blockSize, uint timeout, out double duration) + public bool RecoverBufferedData(out byte[] buffer, out ReadOnlySpan senseBuffer, bool sili, bool fixedLen, + uint transferLen, uint blockSize, uint timeout, out double duration) { buffer = fixedLen ? new byte[blockSize * transferLen] : new byte[transferLen]; Span cdb = CdbBuffer[..6]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.RecoverBufferedData; @@ -911,13 +850,7 @@ public partial class Device cdb[3] = (byte)((transferLen & 0xFF00) >> 8); cdb[4] = (byte)(transferLen & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -931,7 +864,8 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool ReportDensitySupport(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool ReportDensitySupport(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) => ReportDensitySupport(out buffer, out senseBuffer, false, false, timeout, out duration); /// Requests the device to return descriptors for supported densities or medium types @@ -940,8 +874,8 @@ public partial class Device /// If set to true descriptors should apply to currently inserted media. /// Timeout. /// Duration. - public bool ReportDensitySupport(out byte[] buffer, out byte[] senseBuffer, bool currentMedia, uint timeout, - out double duration) => + public bool ReportDensitySupport(out byte[] buffer, out ReadOnlySpan senseBuffer, bool currentMedia, + uint timeout, out double duration) => ReportDensitySupport(out buffer, out senseBuffer, false, currentMedia, timeout, out duration); /// Requests the device to return descriptors for supported densities or medium types @@ -951,13 +885,13 @@ public partial class Device /// If set to true descriptors should apply to currently inserted media. /// Timeout. /// Duration. - public bool ReportDensitySupport(out byte[] buffer, out byte[] senseBuffer, bool mediumType, bool currentMedia, - uint timeout, out double duration) + public bool ReportDensitySupport(out byte[] buffer, out ReadOnlySpan senseBuffer, bool mediumType, + bool currentMedia, uint timeout, out double duration) { buffer = new byte[256]; Span cdb = CdbBuffer[..10]; cdb.Clear(); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; cdb[0] = (byte)ScsiCommands.ReportDensitySupport; @@ -968,13 +902,7 @@ public partial class Device cdb[7] = (byte)((buffer.Length & 0xFF00) >> 8); cdb[8] = (byte)(buffer.Length & 0xFF); - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out bool sense); Error = LastError != 0; @@ -984,15 +912,9 @@ public partial class Device buffer = new byte[availableLength]; cdb[7] = (byte)((buffer.Length & 0xFF00) >> 8); cdb[8] = (byte)(buffer.Length & 0xFF); - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out sense); Error = LastError != 0; @@ -1005,7 +927,7 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool Rewind(out byte[] senseBuffer, uint timeout, out double duration) => + public bool Rewind(out ReadOnlySpan senseBuffer, uint timeout, out double duration) => Rewind(out senseBuffer, false, timeout, out duration); /// Positions the reading/writing element to the beginning of current partition @@ -1013,9 +935,9 @@ public partial class Device /// If set to true return from the command immediately. /// Timeout. /// Duration. - public bool Rewind(out byte[] senseBuffer, bool immediate, uint timeout, out double duration) + public bool Rewind(out ReadOnlySpan senseBuffer, bool immediate, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; cdb.Clear(); byte[] buffer = []; @@ -1024,13 +946,7 @@ public partial class Device if(immediate) cdb[1] += 0x01; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -1045,9 +961,9 @@ public partial class Device /// Track. /// Timeout. /// Duration. - public bool TrackSelect(out byte[] senseBuffer, byte track, uint timeout, out double duration) + public bool TrackSelect(out ReadOnlySpan senseBuffer, byte track, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; cdb.Clear(); byte[] buffer = []; @@ -1055,13 +971,7 @@ public partial class Device cdb[0] = (byte)ScsiCommands.TrackSelect; cdb[5] = track; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; @@ -1077,9 +987,10 @@ public partial class Device /// Timeout. /// Duration. /// true, if select was tracked, false otherwise. - public bool Space(out byte[] senseBuffer, SscSpaceCodes code, int count, uint timeout, out double duration) + public bool Space(out ReadOnlySpan senseBuffer, SscSpaceCodes code, int count, uint timeout, + out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; cdb.Clear(); byte[] buffer = []; @@ -1091,13 +1002,7 @@ public partial class Device cdb[3] = countB[1]; cdb[4] = countB[0]; - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out bool sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out bool sense); Error = LastError != 0; diff --git a/Aaru.Devices/Device/ScsiCommands/SyQuest.cs b/Aaru.Devices/Device/ScsiCommands/SyQuest.cs index 35f2a55a2..a9cc48462 100644 --- a/Aaru.Devices/Device/ScsiCommands/SyQuest.cs +++ b/Aaru.Devices/Device/ScsiCommands/SyQuest.cs @@ -47,16 +47,9 @@ public partial class Device /// Duration in milliseconds it took for the device to execute the command. /// Starting block. /// Block size in bytes. - public bool SyQuestRead6(out byte[] buffer, out byte[] senseBuffer, uint lba, uint blockSize, uint timeout, - out double duration) => SyQuestRead6(out buffer, - out senseBuffer, - lba, - blockSize, - 1, - false, - false, - timeout, - out duration); + public bool SyQuestRead6(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint blockSize, + uint timeout, out double duration) => + SyQuestRead6(out buffer, out senseBuffer, lba, blockSize, 1, false, false, timeout, out duration); /// Sends the SyQuest READ LONG (6) command /// true if the command failed and contains the sense buffer. @@ -66,8 +59,8 @@ public partial class Device /// Duration in milliseconds it took for the device to execute the command. /// Starting block. /// Block size in bytes. - public bool SyQuestReadLong6(out byte[] buffer, out byte[] senseBuffer, uint lba, uint blockSize, uint timeout, - out double duration) => + public bool SyQuestReadLong6(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint blockSize, + uint timeout, out double duration) => SyQuestRead6(out buffer, out senseBuffer, lba, blockSize, 1, false, true, timeout, out duration); /// Sends the SyQuest READ (6) command @@ -81,10 +74,10 @@ public partial class Device /// If set to true drive will return ECC bytes and disable error detection. /// Block size in bytes. /// How many blocks to read. - public bool SyQuestRead6(out byte[] buffer, out byte[] senseBuffer, uint lba, uint blockSize, byte transferLength, - bool inhibitDma, bool readLong, uint timeout, out double duration) + public bool SyQuestRead6(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint blockSize, + byte transferLength, bool inhibitDma, bool readLong, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..6]; cdb.Clear(); bool sense; @@ -111,23 +104,11 @@ public partial class Device if(!inhibitDma) { - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out sense); } else { - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out sense); } Error = LastError != 0; @@ -142,7 +123,8 @@ public partial class Device /// Sense buffer. /// Timeout. /// Duration. - public bool SyQuestReadUsageCounter(out byte[] buffer, out byte[] senseBuffer, uint timeout, out double duration) => + public bool SyQuestReadUsageCounter(out byte[] buffer, out ReadOnlySpan senseBuffer, uint timeout, + out double duration) => AdaptecReadUsageCounter(out buffer, out senseBuffer, false, timeout, out duration); /// Sends the SyQuest READ LONG (10) command @@ -153,8 +135,8 @@ public partial class Device /// Duration in milliseconds it took for the device to execute the command. /// Starting block. /// Block size in bytes. - public bool SyQuestReadLong10(out byte[] buffer, out byte[] senseBuffer, uint lba, uint blockSize, uint timeout, - out double duration) => + public bool SyQuestReadLong10(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint blockSize, + uint timeout, out double duration) => SyQuestRead10(out buffer, out senseBuffer, lba, blockSize, 1, false, true, timeout, out duration); /// Sends the SyQuest READ (10) command @@ -168,10 +150,10 @@ public partial class Device /// If set to true drive will return ECC bytes and disable error detection. /// Block size in bytes. /// How many blocks to read. - public bool SyQuestRead10(out byte[] buffer, out byte[] senseBuffer, uint lba, uint blockSize, + public bool SyQuestRead10(out byte[] buffer, out ReadOnlySpan senseBuffer, uint lba, uint blockSize, ushort transferLength, bool inhibitDma, bool readLong, uint timeout, out double duration) { - senseBuffer = new byte[64]; + senseBuffer = SenseBuffer; Span cdb = CdbBuffer[..10]; cdb.Clear(); bool sense; @@ -200,23 +182,11 @@ public partial class Device if(!inhibitDma) { - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.In, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.In, out duration, out sense); } else { - LastError = SendScsiCommand(cdb, - ref buffer, - out senseBuffer, - timeout, - ScsiDirection.None, - out duration, - out sense); + LastError = SendScsiCommand(cdb, ref buffer, timeout, ScsiDirection.None, out duration, out sense); } Error = LastError != 0; diff --git a/Aaru.Devices/Linux/Command.cs b/Aaru.Devices/Linux/Command.cs index 6a5f193de..63cf6978b 100644 --- a/Aaru.Devices/Linux/Command.cs +++ b/Aaru.Devices/Linux/Command.cs @@ -43,15 +43,15 @@ namespace Aaru.Devices.Linux; partial class Device { /// - public override unsafe int SendScsiCommand(Span cdb, ref byte[] buffer, out byte[] senseBuffer, uint timeout, - ScsiDirection direction, out double duration, out bool sense) + public override unsafe int SendScsiCommand(Span cdb, ref byte[] buffer, uint timeout, ScsiDirection direction, + out double duration, out bool sense) { // We need a timeout if(timeout == 0) timeout = Timeout > 0 ? Timeout : 15; - senseBuffer = null; - duration = 0; - sense = false; + duration = 0; + sense = false; + SenseBuffer.Clear(); if(buffer == null) return -1; @@ -66,21 +66,18 @@ partial class Device var ioHdr = new SgIoHdrT(); - senseBuffer = new byte[64]; - ioHdr.interface_id = 'S'; ioHdr.cmd_len = (byte)cdb.Length; - ioHdr.mx_sb_len = (byte)senseBuffer.Length; + ioHdr.mx_sb_len = (byte)SenseBuffer.Length; ioHdr.dxfer_direction = dir; ioHdr.dxfer_len = (uint)buffer.Length; ioHdr.dxferp = Marshal.AllocHGlobal(buffer.Length); ioHdr.cmdp = (IntPtr)CdbPtr; - ioHdr.sbp = Marshal.AllocHGlobal(senseBuffer.Length); + ioHdr.sbp = (IntPtr)SensePtr; ioHdr.timeout = timeout * 1000; ioHdr.flags = (uint)SgFlags.DirectIo; - Marshal.Copy(buffer, 0, ioHdr.dxferp, buffer.Length); - Marshal.Copy(senseBuffer, 0, ioHdr.sbp, senseBuffer.Length); + Marshal.Copy(buffer, 0, ioHdr.dxferp, buffer.Length); var cmdStopWatch = new Stopwatch(); cmdStopWatch.Start(); @@ -89,15 +86,13 @@ partial class Device if(error < 0) error = Marshal.GetLastWin32Error(); - Marshal.Copy(ioHdr.dxferp, buffer, 0, buffer.Length); - Marshal.Copy(ioHdr.sbp, senseBuffer, 0, senseBuffer.Length); + Marshal.Copy(ioHdr.dxferp, buffer, 0, buffer.Length); sense |= (ioHdr.info & SgInfo.OkMask) != SgInfo.Ok; duration = ioHdr.duration > 0 ? ioHdr.duration : cmdStopWatch.Elapsed.TotalMilliseconds; Marshal.FreeHGlobal(ioHdr.dxferp); - Marshal.FreeHGlobal(ioHdr.sbp); return error; } @@ -165,22 +160,21 @@ partial class Device int error = SendScsiCommand(cdb, ref buffer, - out byte[] senseBuffer, timeout, AtaProtocolToScsiDirection(protocol), out duration, out sense); - if(senseBuffer.Length < 22 || senseBuffer[8] != 0x09 && senseBuffer[9] != 0x0C) return error; + if(SenseBuffer.Length < 22 || SenseBuffer[8] != 0x09 && SenseBuffer[9] != 0x0C) return error; - errorRegisters.Error = senseBuffer[11]; + errorRegisters.Error = SenseBuffer[11]; - errorRegisters.SectorCount = senseBuffer[13]; - errorRegisters.Sector = senseBuffer[15]; - errorRegisters.CylinderLow = senseBuffer[17]; - errorRegisters.CylinderHigh = senseBuffer[19]; - errorRegisters.DeviceHead = senseBuffer[20]; - errorRegisters.Status = senseBuffer[21]; + errorRegisters.SectorCount = SenseBuffer[13]; + errorRegisters.Sector = SenseBuffer[15]; + errorRegisters.CylinderLow = SenseBuffer[17]; + errorRegisters.CylinderHigh = SenseBuffer[19]; + errorRegisters.DeviceHead = SenseBuffer[20]; + errorRegisters.Status = SenseBuffer[21]; sense = errorRegisters.Error != 0 || (errorRegisters.Status & 0xA5) != 0; @@ -230,22 +224,21 @@ partial class Device int error = SendScsiCommand(cdb, ref buffer, - out byte[] senseBuffer, timeout, AtaProtocolToScsiDirection(protocol), out duration, out sense); - if(senseBuffer.Length < 22 || senseBuffer[8] != 0x09 && senseBuffer[9] != 0x0C) return error; + if(SenseBuffer.Length < 22 || SenseBuffer[8] != 0x09 && SenseBuffer[9] != 0x0C) return error; - errorRegisters.Error = senseBuffer[11]; + errorRegisters.Error = SenseBuffer[11]; - errorRegisters.SectorCount = senseBuffer[13]; - errorRegisters.LbaLow = senseBuffer[15]; - errorRegisters.LbaMid = senseBuffer[17]; - errorRegisters.LbaHigh = senseBuffer[19]; - errorRegisters.DeviceHead = senseBuffer[20]; - errorRegisters.Status = senseBuffer[21]; + errorRegisters.SectorCount = SenseBuffer[13]; + errorRegisters.LbaLow = SenseBuffer[15]; + errorRegisters.LbaMid = SenseBuffer[17]; + errorRegisters.LbaHigh = SenseBuffer[19]; + errorRegisters.DeviceHead = SenseBuffer[20]; + errorRegisters.Status = SenseBuffer[21]; sense = errorRegisters.Error != 0 || (errorRegisters.Status & 0xA5) != 0; @@ -301,25 +294,24 @@ partial class Device int error = SendScsiCommand(cdb, ref buffer, - out byte[] senseBuffer, timeout, AtaProtocolToScsiDirection(protocol), out duration, out sense); - if(senseBuffer.Length < 22 || senseBuffer[8] != 0x09 && senseBuffer[9] != 0x0C) return error; + if(SenseBuffer.Length < 22 || SenseBuffer[8] != 0x09 && SenseBuffer[9] != 0x0C) return error; - errorRegisters.Error = senseBuffer[11]; + errorRegisters.Error = SenseBuffer[11]; - errorRegisters.SectorCount = (ushort)((senseBuffer[12] << 8) + senseBuffer[13]); - errorRegisters.LbaLowPrevious = senseBuffer[14]; - errorRegisters.LbaLowCurrent = senseBuffer[15]; - errorRegisters.LbaMidPrevious = senseBuffer[16]; - errorRegisters.LbaMidCurrent = senseBuffer[17]; - errorRegisters.LbaHighPrevious = senseBuffer[18]; - errorRegisters.LbaHighCurrent = senseBuffer[19]; - errorRegisters.DeviceHead = senseBuffer[20]; - errorRegisters.Status = senseBuffer[21]; + errorRegisters.SectorCount = (ushort)((SenseBuffer[12] << 8) + SenseBuffer[13]); + errorRegisters.LbaLowPrevious = SenseBuffer[14]; + errorRegisters.LbaLowCurrent = SenseBuffer[15]; + errorRegisters.LbaMidPrevious = SenseBuffer[16]; + errorRegisters.LbaMidCurrent = SenseBuffer[17]; + errorRegisters.LbaHighPrevious = SenseBuffer[18]; + errorRegisters.LbaHighCurrent = SenseBuffer[19]; + errorRegisters.DeviceHead = SenseBuffer[20]; + errorRegisters.Status = SenseBuffer[21]; sense = errorRegisters.Error != 0 || (errorRegisters.Status & 0xA5) != 0; diff --git a/Aaru.Devices/Remote/Command.cs b/Aaru.Devices/Remote/Command.cs index 015f8029f..c3f9f1ae7 100644 --- a/Aaru.Devices/Remote/Command.cs +++ b/Aaru.Devices/Remote/Command.cs @@ -41,13 +41,13 @@ namespace Aaru.Devices.Remote; public partial class Device { /// - public override int SendScsiCommand(Span cdb, ref byte[] buffer, out byte[] senseBuffer, uint timeout, - ScsiDirection direction, out double duration, out bool sense) + public override int SendScsiCommand(Span cdb, ref byte[] buffer, uint timeout, ScsiDirection direction, + out double duration, out bool sense) { // We need a timeout if(timeout == 0) timeout = Timeout > 0 ? Timeout : 15; - return _remote.SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, direction, out duration, out sense); + return _remote.SendScsiCommand(cdb, ref buffer, SenseBuffer, timeout, direction, out duration, out sense); } /// diff --git a/Aaru.Devices/Remote/Remote.cs b/Aaru.Devices/Remote/Remote.cs index a9a0dcb7e..a9a927c08 100644 --- a/Aaru.Devices/Remote/Remote.cs +++ b/Aaru.Devices/Remote/Remote.cs @@ -522,7 +522,7 @@ public class Remote : IDisposable /// True if SCSI command returned non-OK status and contains /// SCSI sense /// - public int SendScsiCommand(Span cdb, ref byte[] buffer, out byte[] senseBuffer, uint timeout, + public int SendScsiCommand(Span cdb, ref byte[] buffer, Span senseBuffer, uint timeout, ScsiDirection direction, out double duration, out bool sense) { senseBuffer = null; @@ -610,8 +610,7 @@ public class Remote : IDisposable AaruPacketResScsi res = Marshal.ByteArrayToStructureLittleEndian(buf); - senseBuffer = new byte[res.sense_len]; - Array.Copy(buf, Marshal.SizeOf(), senseBuffer, 0, res.sense_len); + buf.AsSpan(Marshal.SizeOf(), (int)res.sense_len).CopyTo(senseBuffer); buffer = new byte[res.buf_len]; Array.Copy(buf, Marshal.SizeOf() + res.sense_len, buffer, 0, res.buf_len); duration = res.duration; diff --git a/Aaru.Devices/Windows/Command.cs b/Aaru.Devices/Windows/Command.cs index c520ce250..35d4a7e7e 100644 --- a/Aaru.Devices/Windows/Command.cs +++ b/Aaru.Devices/Windows/Command.cs @@ -44,15 +44,14 @@ namespace Aaru.Devices.Windows; partial class Device { /// - public override int SendScsiCommand(Span cdb, ref byte[] buffer, out byte[] senseBuffer, uint timeout, - ScsiDirection direction, out double duration, out bool sense) + public override int SendScsiCommand(Span cdb, ref byte[] buffer, uint timeout, ScsiDirection direction, + out double duration, out bool sense) { // We need a timeout if(timeout == 0) timeout = Timeout > 0 ? Timeout : 15; - senseBuffer = null; - duration = 0; - sense = false; + duration = 0; + sense = false; if(buffer == null) return -1; @@ -107,8 +106,7 @@ partial class Device sense |= sptdSb.sptd.ScsiStatus != 0; - senseBuffer = new byte[64]; - Array.Copy(sptdSb.SenseBuf, senseBuffer, 32); + sptdSb.SenseBuf.AsSpan().CopyTo(SenseBuffer); duration = cmdStopwatch.Elapsed.TotalMilliseconds; diff --git a/Aaru.Tests.Devices/SCSI/Adaptec.cs b/Aaru.Tests.Devices/SCSI/Adaptec.cs index 7f4dc4168..564df623a 100644 --- a/Aaru.Tests.Devices/SCSI/Adaptec.cs +++ b/Aaru.Tests.Devices/SCSI/Adaptec.cs @@ -148,7 +148,7 @@ static class Adaptec Console.Clear(); bool sense = dev.AdaptecReadUsageCounter(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, drive1, dev.Timeout, out double duration); @@ -161,11 +161,9 @@ static class Adaptec AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -212,7 +210,7 @@ static class Adaptec AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_RESET_USAGE_COUNTER_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -224,7 +222,7 @@ static class Adaptec Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_RESET_USAGE_COUNTER_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -249,7 +247,10 @@ static class Adaptec start: Console.Clear(); - bool sense = dev.AdaptecReadBuffer(out byte[] buffer, out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.AdaptecReadBuffer(out byte[] buffer, + out ReadOnlySpan senseBuffer, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -259,11 +260,9 @@ static class Adaptec AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -309,7 +308,7 @@ static class Adaptec AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_DATA_BUFFER_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -321,7 +320,7 @@ static class Adaptec Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_DATA_BUFFER_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -409,8 +408,11 @@ static class Adaptec start: Console.Clear(); - bool sense = - dev.AdaptecSetErrorThreshold(threshold, out byte[] senseBuffer, drive1, dev.Timeout, out double duration); + bool sense = dev.AdaptecSetErrorThreshold(threshold, + out ReadOnlySpan senseBuffer, + drive1, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -418,14 +420,12 @@ static class Adaptec AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.SET_ERROR_THRESHOLD_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -456,7 +456,7 @@ static class Adaptec AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.SET_ERROR_THRESHOLD_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -548,7 +548,7 @@ static class Adaptec Console.Clear(); bool sense = dev.AdaptecTranslate(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, drive1, lba, dev.Timeout, @@ -562,11 +562,9 @@ static class Adaptec AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -613,7 +611,7 @@ static class Adaptec AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.TRANSLATE_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -625,7 +623,7 @@ static class Adaptec Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.TRANSLATE_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); diff --git a/Aaru.Tests.Devices/SCSI/ArchiveCorp.cs b/Aaru.Tests.Devices/SCSI/ArchiveCorp.cs index 0191f97d2..abdd92b11 100644 --- a/Aaru.Tests.Devices/SCSI/ArchiveCorp.cs +++ b/Aaru.Tests.Devices/SCSI/ArchiveCorp.cs @@ -141,12 +141,11 @@ static class ArchiveCorp start: Console.Clear(); - bool sense = - dev.ArchiveCorpRequestBlockAddress(out byte[] buffer, - out byte[] senseBuffer, - lba, - dev.Timeout, - out double duration); + bool sense = dev.ArchiveCorpRequestBlockAddress(out byte[] buffer, + out ReadOnlySpan senseBuffer, + lba, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -156,11 +155,9 @@ static class ArchiveCorp AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -208,7 +205,7 @@ static class ArchiveCorp AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.ArchiveCorp_RequestBlockAddress_REQUEST_BLOCK_ADDRESS_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -220,7 +217,7 @@ static class ArchiveCorp Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.ArchiveCorp_RequestBlockAddress_REQUEST_BLOCK_ADDRESS_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -311,7 +308,11 @@ static class ArchiveCorp start: Console.Clear(); - bool sense = dev.ArchiveCorpSeekBlock(out byte[] senseBuffer, immediate, lba, dev.Timeout, out double duration); + bool sense = dev.ArchiveCorpSeekBlock(out ReadOnlySpan senseBuffer, + immediate, + lba, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -319,14 +320,12 @@ static class ArchiveCorp AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.SEEK_BLOCK_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -358,7 +357,7 @@ static class ArchiveCorp AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.SEEK_BLOCK_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); diff --git a/Aaru.Tests.Devices/SCSI/Certance.cs b/Aaru.Tests.Devices/SCSI/Certance.cs index dd98339ad..ff631ef3f 100644 --- a/Aaru.Tests.Devices/SCSI/Certance.cs +++ b/Aaru.Tests.Devices/SCSI/Certance.cs @@ -85,7 +85,7 @@ static class Certance { start: Console.Clear(); - bool sense = dev.CertancePark(out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.CertancePark(out ReadOnlySpan senseBuffer, dev.Timeout, out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -93,14 +93,12 @@ static class Certance AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.PARK_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -130,7 +128,7 @@ static class Certance AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.PARK_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -153,7 +151,7 @@ static class Certance { start: Console.Clear(); - bool sense = dev.CertanceUnpark(out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.CertanceUnpark(out ReadOnlySpan senseBuffer, dev.Timeout, out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -161,14 +159,12 @@ static class Certance AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.UNPARK_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -198,7 +194,7 @@ static class Certance AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.UNPARK_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); diff --git a/Aaru.Tests.Devices/SCSI/Fujitsu.cs b/Aaru.Tests.Devices/SCSI/Fujitsu.cs index 700993dd0..ccf9d2894 100644 --- a/Aaru.Tests.Devices/SCSI/Fujitsu.cs +++ b/Aaru.Tests.Devices/SCSI/Fujitsu.cs @@ -163,7 +163,7 @@ static class Fujitsu start: Console.Clear(); - bool sense = dev.FujitsuDisplay(out byte[] senseBuffer, + bool sense = dev.FujitsuDisplay(out ReadOnlySpan senseBuffer, flash, mode, firstHalf, @@ -177,14 +177,12 @@ static class Fujitsu AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.DISPLAY_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -215,7 +213,7 @@ static class Fujitsu AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.DISPLAY_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); diff --git a/Aaru.Tests.Devices/SCSI/HL-DT-ST.cs b/Aaru.Tests.Devices/SCSI/HL-DT-ST.cs index bee0d8523..617679912 100644 --- a/Aaru.Tests.Devices/SCSI/HL-DT-ST.cs +++ b/Aaru.Tests.Devices/SCSI/HL-DT-ST.cs @@ -147,7 +147,7 @@ static class HlDtSt Console.Clear(); bool sense = dev.HlDtStReadRawDvd(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, lba, count, dev.Timeout, @@ -163,11 +163,9 @@ static class HlDtSt AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -214,7 +212,7 @@ static class HlDtSt AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_DVD_RAW_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -226,7 +224,7 @@ static class HlDtSt Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_DVD_RAW_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); diff --git a/Aaru.Tests.Devices/SCSI/HP.cs b/Aaru.Tests.Devices/SCSI/HP.cs index f633e66eb..09c64a4e4 100644 --- a/Aaru.Tests.Devices/SCSI/HP.cs +++ b/Aaru.Tests.Devices/SCSI/HP.cs @@ -221,7 +221,7 @@ static class Hp Console.Clear(); bool sense = dev.HpReadLong(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, relative, address, length, @@ -239,11 +239,9 @@ static class Hp AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -290,7 +288,7 @@ static class Hp AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_LONG_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -302,7 +300,7 @@ static class Hp Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_LONG_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); diff --git a/Aaru.Tests.Devices/SCSI/Kreon.cs b/Aaru.Tests.Devices/SCSI/Kreon.cs index b5345be4f..a35f73a67 100644 --- a/Aaru.Tests.Devices/SCSI/Kreon.cs +++ b/Aaru.Tests.Devices/SCSI/Kreon.cs @@ -148,7 +148,7 @@ static class Kreon Console.Clear(); bool sense = dev.KreonExtractSs(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, dev.Timeout, out double duration, requestNumber); @@ -161,11 +161,9 @@ static class Kreon AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -212,7 +210,7 @@ static class Kreon AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.EXTRACT_SS_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -224,7 +222,7 @@ static class Kreon Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.EXTRACT_SS_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -249,7 +247,7 @@ static class Kreon start: Console.Clear(); - bool sense = dev.KreonGetFeatureList(out byte[] senseBuffer, + bool sense = dev.KreonGetFeatureList(out ReadOnlySpan senseBuffer, out KreonFeatures features, dev.Timeout, out double duration); @@ -260,15 +258,13 @@ static class Kreon AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.Features_0, features); AaruLogging.WriteLine(Localization.GET_FEATURE_LIST_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -298,7 +294,7 @@ static class Kreon AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_FEATURE_LIST_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -379,7 +375,7 @@ static class Kreon start: Console.Clear(); - bool sense = dev.KreonSetLockState(out byte[] senseBuffer, state, dev.Timeout, out double duration); + bool sense = dev.KreonSetLockState(out ReadOnlySpan senseBuffer, state, dev.Timeout, out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -387,7 +383,7 @@ static class Kreon AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); AaruLogging.WriteLine(Localization.SET_LOCK_STATE_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Send_command_again); @@ -429,7 +425,7 @@ static class Kreon { start: Console.Clear(); - bool sense = dev.KreonDeprecatedUnlock(out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.KreonDeprecatedUnlock(out ReadOnlySpan senseBuffer, dev.Timeout, out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -437,14 +433,12 @@ static class Kreon AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.UNLOCK_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -474,7 +468,7 @@ static class Kreon AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.UNLOCK_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); diff --git a/Aaru.Tests.Devices/SCSI/MMC.cs b/Aaru.Tests.Devices/SCSI/MMC.cs index ee919ae95..9bd79168b 100644 --- a/Aaru.Tests.Devices/SCSI/MMC.cs +++ b/Aaru.Tests.Devices/SCSI/MMC.cs @@ -192,7 +192,7 @@ static class Mmc Console.Clear(); bool sense = dev.GetConfiguration(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, startingFeatureNumber, rt, dev.Timeout, @@ -206,11 +206,9 @@ static class Mmc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -583,7 +581,7 @@ static class Mmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_CONFIGURATION_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -596,7 +594,7 @@ static class Mmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_CONFIGURATION_decoded_sense); - if(senseBuffer != null) AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + if(senseBuffer != null) AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -687,12 +685,11 @@ static class Mmc start: Console.Clear(); - bool sense = - dev.PreventAllowMediumRemoval(out byte[] senseBuffer, - persistent, - prevent, - dev.Timeout, - out double duration); + bool sense = dev.PreventAllowMediumRemoval(out ReadOnlySpan senseBuffer, + persistent, + prevent, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -700,14 +697,12 @@ static class Mmc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.PREVENT_ALLOW_MEDIUM_REMOVAL_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -738,7 +733,7 @@ static class Mmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.PREVENT_ALLOW_MEDIUM_REMOVAL_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1003,7 +998,7 @@ static class Mmc Console.Clear(); bool sense = dev.ReadCd(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, address, blockSize, length, @@ -1027,11 +1022,9 @@ static class Mmc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1078,7 +1071,7 @@ static class Mmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1090,7 +1083,7 @@ static class Mmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1394,7 +1387,7 @@ static class Mmc Console.Clear(); bool sense = dev.ReadCdMsf(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, startMsf, endMsf, blockSize, @@ -1417,11 +1410,9 @@ static class Mmc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1468,7 +1459,7 @@ static class Mmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_MSF_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1480,7 +1471,7 @@ static class Mmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_MSF_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1564,7 +1555,7 @@ static class Mmc Console.Clear(); bool sense = dev.ReadDiscInformation(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, info, dev.Timeout, out double duration); @@ -1577,11 +1568,9 @@ static class Mmc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1640,7 +1629,7 @@ static class Mmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_DISC_INFORMATION_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1652,7 +1641,7 @@ static class Mmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_DISC_INFORMATION_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1871,7 +1860,7 @@ static class Mmc Console.Clear(); bool sense = dev.ReadDiscStructure(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, mediaType, address, layer, @@ -1888,11 +1877,9 @@ static class Mmc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1952,7 +1939,7 @@ static class Mmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_DISC_STRUCTURE_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1964,7 +1951,7 @@ static class Mmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_DISC_STRUCTURE_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -2069,7 +2056,7 @@ static class Mmc Console.Clear(); bool sense = dev.ReadTocPmaAtip(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, msf, format, session, @@ -2084,11 +2071,9 @@ static class Mmc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -2184,7 +2169,7 @@ static class Mmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_TOC_PMA_ATIP_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -2197,7 +2182,7 @@ static class Mmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_TOC_PMA_ATIP_decoded_sense); - if(senseBuffer != null) AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + if(senseBuffer != null) AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -2344,7 +2329,7 @@ static class Mmc start: Console.Clear(); - bool sense = dev.StartStopUnit(out byte[] senseBuffer, + bool sense = dev.StartStopUnit(out ReadOnlySpan senseBuffer, immediate, formatLayer, powerConditions, @@ -2360,14 +2345,12 @@ static class Mmc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.START_STOP_UNIT_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -2398,7 +2381,7 @@ static class Mmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.START_STOP_UNIT_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); diff --git a/Aaru.Tests.Devices/SCSI/NEC.cs b/Aaru.Tests.Devices/SCSI/NEC.cs index 72fd69a9a..cd32d77d2 100644 --- a/Aaru.Tests.Devices/SCSI/NEC.cs +++ b/Aaru.Tests.Devices/SCSI/NEC.cs @@ -147,7 +147,7 @@ static class Nec Console.Clear(); bool sense = dev.NecReadCdDa(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, address, length, dev.Timeout, @@ -161,11 +161,9 @@ static class Nec AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -212,7 +210,7 @@ static class Nec AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_DA_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -224,7 +222,7 @@ static class Nec Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_DA_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); diff --git a/Aaru.Tests.Devices/SCSI/Pioneer.cs b/Aaru.Tests.Devices/SCSI/Pioneer.cs index fe7dd5247..9a260ce5a 100644 --- a/Aaru.Tests.Devices/SCSI/Pioneer.cs +++ b/Aaru.Tests.Devices/SCSI/Pioneer.cs @@ -191,7 +191,7 @@ static class Pioneer Console.Clear(); bool sense = dev.PioneerReadCdDa(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, address, blockSize, length, @@ -207,11 +207,9 @@ static class Pioneer AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -258,7 +256,7 @@ static class Pioneer AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_DA_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -270,7 +268,7 @@ static class Pioneer Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_DA_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -449,7 +447,7 @@ static class Pioneer Console.Clear(); bool sense = dev.PioneerReadCdDaMsf(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, startMsf, endMsf, blockSize, @@ -465,11 +463,9 @@ static class Pioneer AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -516,7 +512,7 @@ static class Pioneer AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_DA_MSF_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -528,7 +524,7 @@ static class Pioneer Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_DA_MSF_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -647,7 +643,7 @@ static class Pioneer Console.Clear(); bool sense = dev.PioneerReadCdXa(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, address, length, errorFlags, @@ -663,11 +659,9 @@ static class Pioneer AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -714,7 +708,7 @@ static class Pioneer AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_XA_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -726,7 +720,7 @@ static class Pioneer Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_XA_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); diff --git a/Aaru.Tests.Devices/SCSI/Plasmon.cs b/Aaru.Tests.Devices/SCSI/Plasmon.cs index 742b61b43..b00796e3f 100644 --- a/Aaru.Tests.Devices/SCSI/Plasmon.cs +++ b/Aaru.Tests.Devices/SCSI/Plasmon.cs @@ -226,7 +226,7 @@ static class Plasmon Console.Clear(); bool sense = dev.PlasmonReadLong(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, relative, address, length, @@ -244,11 +244,9 @@ static class Plasmon AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -295,7 +293,7 @@ static class Plasmon AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_LONG_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -307,7 +305,7 @@ static class Plasmon Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_LONG_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -405,7 +403,7 @@ static class Plasmon Console.Clear(); bool sense = dev.PlasmonReadSectorLocation(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, address, physical, dev.Timeout, @@ -419,11 +417,9 @@ static class Plasmon AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -470,7 +466,7 @@ static class Plasmon AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_SECTOR_LOCATION_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -482,7 +478,7 @@ static class Plasmon Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_SECTOR_LOCATION_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); diff --git a/Aaru.Tests.Devices/SCSI/Plextor.cs b/Aaru.Tests.Devices/SCSI/Plextor.cs index c54e9766b..5ee04178e 100644 --- a/Aaru.Tests.Devices/SCSI/Plextor.cs +++ b/Aaru.Tests.Devices/SCSI/Plextor.cs @@ -198,7 +198,7 @@ static class Plextor Console.Clear(); bool sense = dev.PlextorGetBitsetting(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, dl, dev.Timeout, out double duration); @@ -211,11 +211,9 @@ static class Plextor AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -262,7 +260,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_BOOK_BITSETTING_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -274,7 +272,7 @@ static class Plextor Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_BOOK_BITSETTING_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -299,7 +297,10 @@ static class Plextor start: Console.Clear(); - bool sense = dev.PlextorGetGigaRec(out byte[] buffer, out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.PlextorGetGigaRec(out byte[] buffer, + out ReadOnlySpan senseBuffer, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -309,11 +310,9 @@ static class Plextor AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -359,7 +358,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_GIGAREC_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -371,7 +370,7 @@ static class Plextor Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_GIGAREC_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -394,7 +393,10 @@ static class Plextor start: Console.Clear(); - bool sense = dev.PlextorGetSecuRec(out byte[] buffer, out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.PlextorGetSecuRec(out byte[] buffer, + out ReadOnlySpan senseBuffer, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -404,11 +406,9 @@ static class Plextor AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -454,7 +454,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_SECUREC_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -466,7 +466,7 @@ static class Plextor Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_SECUREC_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -489,8 +489,10 @@ static class Plextor start: Console.Clear(); - bool sense = - dev.PlextorGetSilentMode(out byte[] buffer, out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.PlextorGetSilentMode(out byte[] buffer, + out ReadOnlySpan senseBuffer, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -500,11 +502,9 @@ static class Plextor AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -550,7 +550,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_SILENT_MODE_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -562,7 +562,7 @@ static class Plextor Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_SILENT_MODE_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -585,7 +585,10 @@ static class Plextor start: Console.Clear(); - bool sense = dev.PlextorGetHiding(out byte[] buffer, out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.PlextorGetHiding(out byte[] buffer, + out ReadOnlySpan senseBuffer, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -595,11 +598,9 @@ static class Plextor AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -645,7 +646,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_SINGLE_SESSION_HIDE_CD_R_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -657,7 +658,7 @@ static class Plextor Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_SINGLE_SESSION_HIDE_CD_R_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -680,8 +681,10 @@ static class Plextor start: Console.Clear(); - bool sense = - dev.PlextorGetSpeedRead(out byte[] buffer, out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.PlextorGetSpeedRead(out byte[] buffer, + out ReadOnlySpan senseBuffer, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -691,11 +694,9 @@ static class Plextor AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -741,7 +742,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_SPEEDREAD_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -753,7 +754,7 @@ static class Plextor Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_SPEEDREAD_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -776,8 +777,10 @@ static class Plextor start: Console.Clear(); - bool sense = - dev.PlextorGetTestWriteDvdPlus(out byte[] buffer, out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.PlextorGetTestWriteDvdPlus(out byte[] buffer, + out ReadOnlySpan senseBuffer, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -787,11 +790,9 @@ static class Plextor AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -837,7 +838,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_TEST_WRITE_DVD_Plus_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -849,7 +850,7 @@ static class Plextor Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_TEST_WRITE_DVD_Plus_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -924,7 +925,7 @@ static class Plextor Console.Clear(); bool sense = dev.PlextorGetVariRec(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, dvd, dev.Timeout, out double duration); @@ -937,11 +938,9 @@ static class Plextor AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -988,7 +987,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_VARIREC_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1000,7 +999,7 @@ static class Plextor Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.GET_VARIREC_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1025,7 +1024,7 @@ static class Plextor start: Console.Clear(); - bool sense = dev.PlextorGetPoweRec(out byte[] senseBuffer, + bool sense = dev.PlextorGetPoweRec(out ReadOnlySpan senseBuffer, out bool enabled, out ushort speed, dev.Timeout, @@ -1039,14 +1038,12 @@ static class Plextor AaruLogging.WriteLine(enabled ? Localization.PoweRec_is_enabled : Localization.PoweRec_is_disabled); AaruLogging.WriteLine(Localization.Speed_0, speed); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.POWEREC_GET_SPEEDS_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -1076,7 +1073,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.POWEREC_GET_SPEEDS_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1201,7 +1198,7 @@ static class Plextor Console.Clear(); bool sense = dev.PlextorReadCdDa(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, address, blockSize, length, @@ -1217,11 +1214,9 @@ static class Plextor AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1268,7 +1263,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_DA_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1280,7 +1275,7 @@ static class Plextor Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CD_DA_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1371,7 +1366,7 @@ static class Plextor Console.Clear(); bool sense = dev.PlextorReadRawDvd(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, lba, count, dev.Timeout, @@ -1385,11 +1380,9 @@ static class Plextor AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1436,7 +1429,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_DVD_RAW_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1448,7 +1441,7 @@ static class Plextor Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_DVD_RAW_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1473,8 +1466,10 @@ static class Plextor start: Console.Clear(); - bool sense = - dev.PlextorReadEepromCdr(out byte[] buffer, out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.PlextorReadEepromCdr(out byte[] buffer, + out ReadOnlySpan senseBuffer, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -1484,11 +1479,9 @@ static class Plextor AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1534,7 +1527,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_EEPROM_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1546,7 +1539,7 @@ static class Plextor Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_EEPROM_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1635,7 +1628,7 @@ static class Plextor Console.Clear(); bool sense = dev.PlextorReadEepromBlock(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, block, blockSize, dev.Timeout, @@ -1649,11 +1642,9 @@ static class Plextor AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1700,7 +1691,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_EEPROM_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1712,7 +1703,7 @@ static class Plextor Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_EEPROM_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1737,7 +1728,10 @@ static class Plextor start: Console.Clear(); - bool sense = dev.PlextorReadEeprom(out byte[] buffer, out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.PlextorReadEeprom(out byte[] buffer, + out ReadOnlySpan senseBuffer, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -1747,11 +1741,9 @@ static class Plextor AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1797,7 +1789,7 @@ static class Plextor AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_EEPROM_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1809,7 +1801,7 @@ static class Plextor Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_EEPROM_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); diff --git a/Aaru.Tests.Devices/SCSI/SBC.cs b/Aaru.Tests.Devices/SCSI/SBC.cs index 7ad74287d..964b0e4ba 100644 --- a/Aaru.Tests.Devices/SCSI/SBC.cs +++ b/Aaru.Tests.Devices/SCSI/SBC.cs @@ -202,7 +202,7 @@ static class Sbc Console.Clear(); bool sense = dev.Read6(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, lba, blockSize, count, @@ -217,11 +217,9 @@ static class Sbc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -268,7 +266,7 @@ static class Sbc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_6_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -280,7 +278,7 @@ static class Sbc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_6_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -469,7 +467,7 @@ static class Sbc Console.Clear(); bool sense = dev.Read10(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, rdprotect, dpo, fua, @@ -490,11 +488,9 @@ static class Sbc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -541,7 +537,7 @@ static class Sbc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_10_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -553,7 +549,7 @@ static class Sbc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_10_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -756,7 +752,7 @@ static class Sbc Console.Clear(); bool sense = dev.Read12(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, rdprotect, dpo, fua, @@ -778,11 +774,9 @@ static class Sbc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -829,7 +823,7 @@ static class Sbc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_12_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -841,7 +835,7 @@ static class Sbc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_12_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1030,7 +1024,7 @@ static class Sbc Console.Clear(); bool sense = dev.Read16(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, rdprotect, dpo, fua, @@ -1051,11 +1045,9 @@ static class Sbc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1102,7 +1094,7 @@ static class Sbc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_16_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1114,7 +1106,7 @@ static class Sbc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_16_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1233,7 +1225,7 @@ static class Sbc Console.Clear(); bool sense = dev.ReadLong10(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, correct, relative, lba, @@ -1249,11 +1241,9 @@ static class Sbc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1300,7 +1290,7 @@ static class Sbc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_LONG_10_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1312,7 +1302,7 @@ static class Sbc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_LONG_10_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1417,7 +1407,7 @@ static class Sbc Console.Clear(); bool sense = dev.ReadLong16(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, correct, lba, blockSize, @@ -1432,11 +1422,9 @@ static class Sbc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1483,7 +1471,7 @@ static class Sbc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_LONG_16_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1495,7 +1483,7 @@ static class Sbc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_LONG_16_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1578,7 +1566,7 @@ static class Sbc start: Console.Clear(); - bool sense = dev.Seek6(out byte[] senseBuffer, lba, dev.Timeout, out double duration); + bool sense = dev.Seek6(out ReadOnlySpan senseBuffer, lba, dev.Timeout, out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -1586,14 +1574,12 @@ static class Sbc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.SEEK_6_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -1624,7 +1610,7 @@ static class Sbc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.SEEK_6_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1700,7 +1686,7 @@ static class Sbc start: Console.Clear(); - bool sense = dev.Seek10(out byte[] senseBuffer, lba, dev.Timeout, out double duration); + bool sense = dev.Seek10(out ReadOnlySpan senseBuffer, lba, dev.Timeout, out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -1708,14 +1694,12 @@ static class Sbc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.SEEK_6_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -1746,7 +1730,7 @@ static class Sbc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.SEEK_10_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); diff --git a/Aaru.Tests.Devices/SCSI/SMC.cs b/Aaru.Tests.Devices/SCSI/SMC.cs index 87b9490f5..9156d0b01 100644 --- a/Aaru.Tests.Devices/SCSI/SMC.cs +++ b/Aaru.Tests.Devices/SCSI/SMC.cs @@ -227,7 +227,7 @@ static class Smc Console.Clear(); bool sense = dev.ReadAttribute(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, action, element, elementType, @@ -246,11 +246,9 @@ static class Smc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -297,7 +295,7 @@ static class Smc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_ATTRIBUTE_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -309,7 +307,7 @@ static class Smc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_ATTRIBUTE_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); diff --git a/Aaru.Tests.Devices/SCSI/SPC.cs b/Aaru.Tests.Devices/SCSI/SPC.cs index 61a4258c9..8a02d5385 100644 --- a/Aaru.Tests.Devices/SCSI/SPC.cs +++ b/Aaru.Tests.Devices/SCSI/SPC.cs @@ -125,7 +125,11 @@ static class Spc { start: Console.Clear(); - bool sense = dev.ScsiInquiry(out byte[] buffer, out byte[] senseBuffer, dev.Timeout, out double duration); + + bool sense = dev.ScsiInquiry(out byte[] buffer, + out ReadOnlySpan senseBuffer, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -135,11 +139,9 @@ static class Spc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -199,7 +201,7 @@ static class Spc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.INQUIRY_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -211,7 +213,7 @@ static class Spc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.INQUIRY_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -285,7 +287,11 @@ static class Spc start: Console.Clear(); - bool sense = dev.ScsiInquiry(out byte[] buffer, out byte[] senseBuffer, page, dev.Timeout, out double duration); + bool sense = dev.ScsiInquiry(out byte[] buffer, + out ReadOnlySpan senseBuffer, + page, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -295,11 +301,9 @@ static class Spc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -346,7 +350,7 @@ static class Spc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.INQUIRY_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -358,7 +362,7 @@ static class Spc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.INQUIRY_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -485,7 +489,7 @@ static class Spc Console.Clear(); bool sense = dev.ModeSense6(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, dbd, pageControl, page, @@ -501,11 +505,9 @@ static class Spc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -566,7 +568,7 @@ static class Spc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.MODE_SENSE_6_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -578,7 +580,7 @@ static class Spc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.MODE_SENSE_6_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -719,7 +721,7 @@ static class Spc Console.Clear(); bool sense = dev.ModeSense10(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, llba, dbd, pageControl, @@ -736,11 +738,9 @@ static class Spc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -801,7 +801,7 @@ static class Spc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.MODE_SENSE_10_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -813,7 +813,7 @@ static class Spc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.MODE_SENSE_10_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -897,7 +897,11 @@ static class Spc start: Console.Clear(); - bool sense = dev.SpcPreventAllowMediumRemoval(out byte[] senseBuffer, mode, dev.Timeout, out double duration); + bool sense = + dev.SpcPreventAllowMediumRemoval(out ReadOnlySpan senseBuffer, + mode, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -905,7 +909,7 @@ static class Spc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); AaruLogging.WriteLine(Localization.PREVENT_ALLOW_MEDIUM_REMOVAL_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Send_command_again); @@ -1028,7 +1032,7 @@ static class Spc Console.Clear(); bool sense = dev.ReadCapacity(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, relative, address, partial, @@ -1043,11 +1047,9 @@ static class Spc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1094,7 +1096,7 @@ static class Spc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CAPACITY_10_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1106,7 +1108,7 @@ static class Spc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CAPACITY_10_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1197,7 +1199,7 @@ static class Spc Console.Clear(); bool sense = dev.ReadCapacity16(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, address, partial, dev.Timeout, @@ -1211,11 +1213,9 @@ static class Spc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1262,7 +1262,7 @@ static class Spc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CAPACITY_16_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1274,7 +1274,7 @@ static class Spc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_CAPACITY_16_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1299,8 +1299,10 @@ static class Spc start: Console.Clear(); - bool sense = - dev.ReadMediaSerialNumber(out byte[] buffer, out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.ReadMediaSerialNumber(out byte[] buffer, + out ReadOnlySpan senseBuffer, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -1310,11 +1312,9 @@ static class Spc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1360,7 +1360,7 @@ static class Spc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_MEDIA_SERIAL_NUMBER_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1372,7 +1372,7 @@ static class Spc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_MEDIA_SERIAL_NUMBER_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1453,8 +1453,7 @@ static class Spc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); @@ -1516,7 +1515,7 @@ static class Spc { start: Console.Clear(); - bool sense = dev.ScsiTestUnitReady(out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.ScsiTestUnitReady(out ReadOnlySpan senseBuffer, dev.Timeout, out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -1524,14 +1523,12 @@ static class Spc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.TEST_UNIT_READY_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -1561,7 +1558,7 @@ static class Spc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.TEST_UNIT_READY_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); diff --git a/Aaru.Tests.Devices/SCSI/SSC.cs b/Aaru.Tests.Devices/SCSI/SSC.cs index 867315d9a..f0cfc6c75 100644 --- a/Aaru.Tests.Devices/SCSI/SSC.cs +++ b/Aaru.Tests.Devices/SCSI/SSC.cs @@ -254,7 +254,7 @@ static class Ssc start: Console.Clear(); - bool sense = dev.LoadUnload(out byte[] senseBuffer, + bool sense = dev.LoadUnload(out ReadOnlySpan senseBuffer, immediate, load, retense, @@ -269,14 +269,12 @@ static class Ssc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.LOAD_UNLOAD_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -307,7 +305,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LOAD_UNLOAD_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -440,7 +438,7 @@ static class Ssc start: Console.Clear(); - bool sense = dev.Locate(out byte[] senseBuffer, + bool sense = dev.Locate(out ReadOnlySpan senseBuffer, immediate, blockType, changePartition, @@ -455,14 +453,12 @@ static class Ssc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.LOCATE_10_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -493,7 +489,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LOCATE_10_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -648,7 +644,7 @@ static class Ssc start: Console.Clear(); - bool sense = dev.Locate16(out byte[] senseBuffer, + bool sense = dev.Locate16(out ReadOnlySpan senseBuffer, immediate, changePartition, destType, @@ -664,14 +660,12 @@ static class Ssc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.LOCATE_16_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -702,7 +696,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LOCATE_16_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -840,7 +834,7 @@ static class Ssc Console.Clear(); bool sense = dev.Read6(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, sili, fixedLen, length, @@ -856,11 +850,9 @@ static class Ssc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -907,7 +899,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_6_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -919,7 +911,7 @@ static class Ssc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_6_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1083,7 +1075,7 @@ static class Ssc Console.Clear(); bool sense = dev.Read16(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, sili, fixedLen, partition, @@ -1101,11 +1093,9 @@ static class Ssc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1152,7 +1142,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_16_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1164,7 +1154,7 @@ static class Ssc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_16_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1189,7 +1179,10 @@ static class Ssc start: Console.Clear(); - bool sense = dev.ReadBlockLimits(out byte[] buffer, out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.ReadBlockLimits(out byte[] buffer, + out ReadOnlySpan senseBuffer, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -1199,11 +1192,9 @@ static class Ssc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1263,7 +1254,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_BLOCK_LIMITS_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1275,7 +1266,7 @@ static class Ssc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_BLOCK_LIMITS_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1362,7 +1353,11 @@ static class Ssc start: Console.Clear(); - bool sense = dev.ReadPosition(out _, out byte[] senseBuffer, responseForm, dev.Timeout, out double duration); + bool sense = dev.ReadPosition(out _, + out ReadOnlySpan senseBuffer, + responseForm, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -1370,14 +1365,12 @@ static class Ssc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.READ_POSITION_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -1408,7 +1401,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_POSITION_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1560,7 +1553,7 @@ static class Ssc Console.Clear(); bool sense = dev.ReadReverse6(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, byteOrder, sili, fixedLen, @@ -1577,11 +1570,9 @@ static class Ssc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1628,7 +1619,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_REVERSE_6_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1640,7 +1631,7 @@ static class Ssc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_REVERSE_6_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -1818,7 +1809,7 @@ static class Ssc Console.Clear(); bool sense = dev.ReadReverse16(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, byteOrder, sili, fixedLen, @@ -1837,11 +1828,9 @@ static class Ssc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -1888,7 +1877,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_REVERSE_16_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -1900,7 +1889,7 @@ static class Ssc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_REVERSE_16_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -2037,7 +2026,7 @@ static class Ssc Console.Clear(); bool sense = dev.RecoverBufferedData(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, sili, fixedLen, length, @@ -2053,11 +2042,9 @@ static class Ssc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -2104,7 +2091,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.RECOVER_BUFFERED_DATA_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -2116,7 +2103,7 @@ static class Ssc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.RECOVER_BUFFERED_DATA_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -2207,7 +2194,7 @@ static class Ssc Console.Clear(); bool sense = dev.ReportDensitySupport(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, medium, current, dev.Timeout, @@ -2221,11 +2208,9 @@ static class Ssc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -2289,7 +2274,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.REPORT_DENSITY_SUPPORT_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -2301,7 +2286,7 @@ static class Ssc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.REPORT_DENSITY_SUPPORT_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -2376,7 +2361,7 @@ static class Ssc start: Console.Clear(); - bool sense = dev.Rewind(out byte[] senseBuffer, immediate, dev.Timeout, out double duration); + bool sense = dev.Rewind(out ReadOnlySpan senseBuffer, immediate, dev.Timeout, out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -2384,14 +2369,12 @@ static class Ssc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.REWIND_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -2422,7 +2405,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.REWIND_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -2522,7 +2505,7 @@ static class Ssc start: Console.Clear(); - bool sense = dev.Space(out byte[] senseBuffer, what, count, dev.Timeout, out double duration); + bool sense = dev.Space(out ReadOnlySpan senseBuffer, what, count, dev.Timeout, out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -2530,14 +2513,12 @@ static class Ssc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.SPACE_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -2568,7 +2549,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.SPACE_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -2644,7 +2625,7 @@ static class Ssc start: Console.Clear(); - bool sense = dev.TrackSelect(out byte[] senseBuffer, track, dev.Timeout, out double duration); + bool sense = dev.TrackSelect(out ReadOnlySpan senseBuffer, track, dev.Timeout, out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -2652,14 +2633,12 @@ static class Ssc AaruLogging.WriteLine(Localization.Command_took_0_ms, duration); AaruLogging.WriteLine(Localization.Sense_is_0, sense); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(Localization.TRACK_SELECT_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); AaruLogging.WriteLine(Localization._1_Print_sense_buffer); @@ -2690,7 +2669,7 @@ static class Ssc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.TRACK_SELECT_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); diff --git a/Aaru.Tests.Devices/SCSI/SyQuest.cs b/Aaru.Tests.Devices/SCSI/SyQuest.cs index d0dbd8229..97a7a5a29 100644 --- a/Aaru.Tests.Devices/SCSI/SyQuest.cs +++ b/Aaru.Tests.Devices/SCSI/SyQuest.cs @@ -205,7 +205,7 @@ static class SyQuest Console.Clear(); bool sense = dev.SyQuestRead6(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, lba, blockSize, count, @@ -227,10 +227,9 @@ static class SyQuest AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + senseBuffer.Length.ToString() ?? Localization._null); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -277,7 +276,7 @@ static class SyQuest AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(readlong ? Localization.READ_LONG_6_sense : Localization.READ_6_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -293,7 +292,7 @@ static class SyQuest ? Localization.READ_LONG_6_decoded_sense : Localization.READ_6_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -416,7 +415,7 @@ static class SyQuest Console.Clear(); bool sense = dev.SyQuestRead10(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, lba, blockSize, count, @@ -437,11 +436,9 @@ static class SyQuest AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -488,7 +485,7 @@ static class SyQuest AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(readlong ? Localization.READ_LONG_10_sense : Localization.READ_10_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -504,7 +501,7 @@ static class SyQuest ? Localization.READ_LONG_10_decoded_sense : Localization.READ_10_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); @@ -529,8 +526,10 @@ static class SyQuest start: Console.Clear(); - bool sense = - dev.SyQuestReadUsageCounter(out byte[] buffer, out byte[] senseBuffer, dev.Timeout, out double duration); + bool sense = dev.SyQuestReadUsageCounter(out byte[] buffer, + out ReadOnlySpan senseBuffer, + dev.Timeout, + out double duration); menu: AaruLogging.WriteLine(Localization.Device_0, devPath); @@ -540,11 +539,9 @@ static class SyQuest AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -590,7 +587,7 @@ static class SyQuest AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_RESET_USAGE_COUNTER_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -602,7 +599,7 @@ static class SyQuest Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.READ_RESET_USAGE_COUNTER_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); diff --git a/Aaru.Tests.Devices/SCSI_MMC/GdRom.cs b/Aaru.Tests.Devices/SCSI_MMC/GdRom.cs index 3ad31a030..af39b9eda 100644 --- a/Aaru.Tests.Devices/SCSI_MMC/GdRom.cs +++ b/Aaru.Tests.Devices/SCSI_MMC/GdRom.cs @@ -13,9 +13,9 @@ static partial class ScsiMmc { static void CheckGdromReadability(string devPath, Device dev) { - bool tocIsNotBcd = false; - bool sense; - byte[] senseBuffer; + bool tocIsNotBcd = false; + bool sense; + ReadOnlySpan senseBuffer; start: Console.Clear(); @@ -54,7 +54,7 @@ static partial class ScsiMmc if(sense) { AaruLogging.WriteLine(Localization.READ_FULL_TOC_failed); - AaruLogging.WriteLine("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.WriteLine("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadLine(); @@ -159,7 +159,7 @@ static partial class ScsiMmc if(sense) { AaruLogging.WriteLine(Localization.READ_FULL_TOC_failed); - AaruLogging.WriteLine("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.WriteLine("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadLine(); @@ -209,7 +209,7 @@ static partial class ScsiMmc AaruLogging.Write(Localization.Reading_LBA_zero); bool lba0Result = dev.ReadCd(out byte[] lba0Buffer, - out byte[] lba0Sense, + out ReadOnlySpan lba0Sense, 0, 2352, 1, @@ -230,7 +230,7 @@ static partial class ScsiMmc AaruLogging.Write(Localization.Reading_LBA_zero_as_audio_scrambled); bool lba0ScrambledResult = dev.ReadCd(out byte[] lba0ScrambledBuffer, - out byte[] lba0ScrambledSense, + out ReadOnlySpan lba0ScrambledSense, 0, 2352, 1, @@ -251,7 +251,7 @@ static partial class ScsiMmc AaruLogging.Write(Localization.Reading_LBA_100000); bool lba100000Result = dev.ReadCd(out byte[] lba100000Buffer, - out byte[] lba100000Sense, + out ReadOnlySpan lba100000Sense, 100000, 2352, 1, @@ -272,7 +272,7 @@ static partial class ScsiMmc AaruLogging.Write(Localization.Reading_LBA_50000); bool lba50000Result = dev.ReadCd(out byte[] lba50000Buffer, - out byte[] lba50000Sense, + out ReadOnlySpan lba50000Sense, 50000, 2352, 1, @@ -293,7 +293,7 @@ static partial class ScsiMmc AaruLogging.Write(Localization.Reading_LBA_450000); bool lba450000Result = dev.ReadCd(out byte[] lba450000Buffer, - out byte[] lba450000Sense, + out ReadOnlySpan lba450000Sense, 450000, 2352, 1, @@ -314,7 +314,7 @@ static partial class ScsiMmc AaruLogging.Write(Localization.Reading_LBA_400000); bool lba400000Result = dev.ReadCd(out byte[] lba400000Buffer, - out byte[] lba400000Sense, + out ReadOnlySpan lba400000Sense, 400000, 2352, 1, @@ -335,7 +335,7 @@ static partial class ScsiMmc AaruLogging.Write(Localization.Reading_LBA_45000); bool lba45000Result = dev.ReadCd(out byte[] lba45000Buffer, - out byte[] lba45000Sense, + out ReadOnlySpan lba45000Sense, 45000, 2352, 1, @@ -356,7 +356,7 @@ static partial class ScsiMmc AaruLogging.Write(Localization.Reading_LBA_44990); bool lba44990Result = dev.ReadCd(out byte[] lba44990Buffer, - out byte[] lba44990Sense, + out ReadOnlySpan lba44990Sense, 44990, 2352, 1, @@ -389,11 +389,7 @@ static partial class ScsiMmc : ArrayHelpers.ArrayIsNullOrEmpty(lba0Buffer) ? Localization.empty : string.Format(Localization._0_bytes, lba0Buffer.Length), - lba0Sense is null - ? Localization._null - : ArrayHelpers.ArrayIsNullOrEmpty(lba0Sense) - ? Localization.empty - : $"{lba0Sense.Length}"); + lba0Sense.IsEmpty ? Localization.empty : $"{lba0Sense.Length}"); AaruLogging.WriteLine(Localization.LBA_zero_scrambled_sense_is_0_buffer_is_1_sense_buffer_is_2_, lba0ScrambledResult, @@ -402,11 +398,7 @@ static partial class ScsiMmc : ArrayHelpers.ArrayIsNullOrEmpty(lba0ScrambledBuffer) ? Localization.empty : string.Format(Localization._0_bytes, lba0ScrambledBuffer.Length), - lba0ScrambledSense is null - ? Localization._null - : ArrayHelpers.ArrayIsNullOrEmpty(lba0ScrambledSense) - ? Localization.empty - : $"{lba0ScrambledSense.Length}"); + lba0ScrambledSense.IsEmpty ? Localization.empty : $"{lba0ScrambledSense.Length}"); AaruLogging.WriteLine(Localization.LBA_44990_sense_is_0_buffer_is_1_sense_buffer_is_2, lba44990Result, @@ -415,11 +407,7 @@ static partial class ScsiMmc : ArrayHelpers.ArrayIsNullOrEmpty(lba44990Buffer) ? Localization.empty : string.Format(Localization._0_bytes, lba44990Buffer.Length), - lba44990Sense is null - ? Localization._null - : ArrayHelpers.ArrayIsNullOrEmpty(lba44990Sense) - ? Localization.empty - : $"{lba44990Sense.Length}"); + lba44990Sense.IsEmpty ? Localization.empty : $"{lba44990Sense.Length}"); AaruLogging.WriteLine(Localization.LBA_45000_sense_is_0_buffer_is_1_sense_buffer_is_2, lba45000Result, @@ -428,11 +416,7 @@ static partial class ScsiMmc : ArrayHelpers.ArrayIsNullOrEmpty(lba45000Buffer) ? Localization.empty : string.Format(Localization._0_bytes, lba45000Buffer.Length), - lba45000Sense is null - ? Localization._null - : ArrayHelpers.ArrayIsNullOrEmpty(lba45000Sense) - ? Localization.empty - : $"{lba45000Sense.Length}"); + lba45000Sense.IsEmpty ? Localization.empty : $"{lba45000Sense.Length}"); AaruLogging.WriteLine(Localization.LBA_50000_sense_is_0_buffer_is_1_sense_buffer_is_2, lba50000Result, @@ -441,11 +425,7 @@ static partial class ScsiMmc : ArrayHelpers.ArrayIsNullOrEmpty(lba50000Buffer) ? Localization.empty : string.Format(Localization._0_bytes, lba50000Buffer.Length), - lba50000Sense is null - ? Localization._null - : ArrayHelpers.ArrayIsNullOrEmpty(lba50000Sense) - ? Localization.empty - : $"{lba50000Sense.Length}"); + lba50000Sense.IsEmpty ? Localization.empty : $"{lba50000Sense.Length}"); AaruLogging.WriteLine(Localization.LBA_100000_sense_is_0_buffer_is_1_sense_buffer_is_2, lba100000Result, @@ -454,11 +434,7 @@ static partial class ScsiMmc : ArrayHelpers.ArrayIsNullOrEmpty(lba100000Buffer) ? Localization.empty : string.Format(Localization._0_bytes, lba100000Buffer.Length), - lba100000Sense is null - ? Localization._null - : ArrayHelpers.ArrayIsNullOrEmpty(lba100000Sense) - ? Localization.empty - : $"{lba100000Sense.Length}"); + lba100000Sense.IsEmpty ? Localization.empty : $"{lba100000Sense.Length}"); AaruLogging.WriteLine(Localization.LBA_400000_sense_is_0_buffer_is_1_sense_buffer_is_2, lba400000Result, @@ -467,11 +443,7 @@ static partial class ScsiMmc : ArrayHelpers.ArrayIsNullOrEmpty(lba400000Buffer) ? Localization.empty : string.Format(Localization._0_bytes, lba400000Buffer.Length), - lba400000Sense is null - ? Localization._null - : ArrayHelpers.ArrayIsNullOrEmpty(lba400000Sense) - ? Localization.empty - : $"{lba400000Sense.Length}"); + lba400000Sense.IsEmpty ? Localization.empty : $"{lba400000Sense.Length}"); AaruLogging.WriteLine(Localization.LBA_450000_sense_is_0_buffer_is_1_sense_buffer_is_2, lba450000Result, @@ -480,11 +452,7 @@ static partial class ScsiMmc : ArrayHelpers.ArrayIsNullOrEmpty(lba450000Buffer) ? Localization.empty : string.Format(Localization._0_bytes, lba450000Buffer.Length), - lba450000Sense is null - ? Localization._null - : ArrayHelpers.ArrayIsNullOrEmpty(lba450000Sense) - ? Localization.empty - : $"{lba450000Sense.Length}"); + lba450000Sense.IsEmpty ? Localization.empty : $"{lba450000Sense.Length}"); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -549,7 +517,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_zero_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(lba0Sense, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(lba0Sense.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -559,7 +527,7 @@ static partial class ScsiMmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_zero_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(lba0Sense)); + AaruLogging.Write("{0}", Sense.PrettifySense(lba0Sense.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -580,7 +548,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_zero_scrambled_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(lba0ScrambledSense, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(lba0ScrambledSense.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -590,7 +558,7 @@ static partial class ScsiMmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_zero_scrambled_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(lba0ScrambledSense)); + AaruLogging.Write("{0}", Sense.PrettifySense(lba0ScrambledSense.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -611,7 +579,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_44990_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(lba44990Sense, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(lba44990Sense.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -621,7 +589,7 @@ static partial class ScsiMmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_44990_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(lba44990Sense)); + AaruLogging.Write("{0}", Sense.PrettifySense(lba44990Sense.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -642,7 +610,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_45000_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(lba45000Sense, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(lba45000Sense.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -652,7 +620,7 @@ static partial class ScsiMmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_45000_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(lba45000Sense)); + AaruLogging.Write("{0}", Sense.PrettifySense(lba45000Sense.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -673,7 +641,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_50000_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(lba50000Sense, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(lba50000Sense.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -683,7 +651,7 @@ static partial class ScsiMmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_50000_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(lba50000Sense)); + AaruLogging.Write("{0}", Sense.PrettifySense(lba50000Sense.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -704,7 +672,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_100000_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(lba100000Sense, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(lba100000Sense.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -714,7 +682,7 @@ static partial class ScsiMmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_100000_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(lba100000Sense)); + AaruLogging.Write("{0}", Sense.PrettifySense(lba100000Sense.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -735,7 +703,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_400000_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(lba400000Sense, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(lba400000Sense.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -745,7 +713,7 @@ static partial class ScsiMmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_400000_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(lba400000Sense)); + AaruLogging.Write("{0}", Sense.PrettifySense(lba400000Sense.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -766,7 +734,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_450000_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(lba450000Sense, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(lba450000Sense.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -776,7 +744,7 @@ static partial class ScsiMmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_450000_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(lba450000Sense)); + AaruLogging.Write("{0}", Sense.PrettifySense(lba450000Sense.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); diff --git a/Aaru.Tests.Devices/SCSI_MMC/LeadOutTrap.cs b/Aaru.Tests.Devices/SCSI_MMC/LeadOutTrap.cs index a147175a0..ad4fdfa02 100644 --- a/Aaru.Tests.Devices/SCSI_MMC/LeadOutTrap.cs +++ b/Aaru.Tests.Devices/SCSI_MMC/LeadOutTrap.cs @@ -13,9 +13,9 @@ static partial class ScsiMmc { static void ReadLeadOutUsingTrapDisc(string devPath, Device dev) { - bool tocIsNotBcd = false; - bool sense; - byte[] senseBuffer; + bool tocIsNotBcd = false; + bool sense; + ReadOnlySpan senseBuffer; start: Console.Clear(); @@ -54,7 +54,7 @@ static partial class ScsiMmc if(sense) { AaruLogging.WriteLine(Localization.READ_FULL_TOC_failed); - AaruLogging.WriteLine("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.WriteLine("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadLine(); @@ -127,7 +127,7 @@ static partial class ScsiMmc if(sense) { AaruLogging.WriteLine(Localization.READ_FULL_TOC_failed); - AaruLogging.WriteLine("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.WriteLine("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadLine(); @@ -231,7 +231,7 @@ static partial class ScsiMmc if(sense) { AaruLogging.WriteLine(Localization.READ_FULL_TOC_failed); - AaruLogging.WriteLine("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.WriteLine("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadLine(); @@ -278,7 +278,7 @@ static partial class ScsiMmc AaruLogging.Write(Localization.Reading_LBA_0, sectors + 5); bool dataResult = dev.ReadCd(out byte[] dataBuffer, - out byte[] dataSense, + out ReadOnlySpan dataSense, (uint)(sectors + 5), 2352, 1, @@ -299,7 +299,7 @@ static partial class ScsiMmc AaruLogging.Write(Localization.Reading_LBA_0_as_audio_scrambled, sectors + 5); bool scrambledResult = dev.ReadCd(out byte[] scrambledBuffer, - out byte[] scrambledSense, + out ReadOnlySpan scrambledSense, (uint)(sectors + 5), 2352, 1, @@ -320,7 +320,7 @@ static partial class ScsiMmc AaruLogging.Write(Localization.Reading_LBA_0_PQ_subchannel, sectors + 5); bool pqResult = dev.ReadCd(out byte[] pqBuffer, - out byte[] pqSense, + out ReadOnlySpan pqSense, (uint)(sectors + 5), 16, 1, @@ -361,7 +361,7 @@ static partial class ScsiMmc AaruLogging.Write(Localization.Reading_LBA_0_RW_subchannel, sectors + 5); bool rwResult = dev.ReadCd(out byte[] rwBuffer, - out byte[] rwSense, + out ReadOnlySpan rwSense, (uint)(sectors + 5), 16, 1, @@ -415,11 +415,7 @@ static partial class ScsiMmc : ArrayHelpers.ArrayIsNullOrEmpty(dataBuffer) ? Localization.empty : string.Format(Localization._0_bytes, dataBuffer.Length), - dataSense is null - ? Localization._null - : ArrayHelpers.ArrayIsNullOrEmpty(dataSense) - ? Localization.empty - : $"{dataSense.Length}"); + dataSense.IsEmpty ? Localization.empty : $"{dataSense.Length}"); AaruLogging.WriteLine(Localization.LBA_0_scrambled_sense_is_1_buffer_is_2_sense_buffer_is_3, sectors + 5, @@ -429,11 +425,7 @@ static partial class ScsiMmc : ArrayHelpers.ArrayIsNullOrEmpty(scrambledBuffer) ? Localization.empty : string.Format(Localization._0_bytes, scrambledBuffer.Length), - scrambledSense is null - ? Localization._null - : ArrayHelpers.ArrayIsNullOrEmpty(scrambledSense) - ? Localization.empty - : $"{scrambledSense.Length}"); + scrambledSense.IsEmpty ? Localization.empty : $"{scrambledSense.Length}"); AaruLogging.WriteLine(Localization.LBA_0_PQ_sense_is_1_buffer_is_2_sense_buffer_is_3, sectors + 5, @@ -443,11 +435,7 @@ static partial class ScsiMmc : ArrayHelpers.ArrayIsNullOrEmpty(pqBuffer) ? Localization.empty : string.Format(Localization._0_bytes, pqBuffer.Length), - pqSense is null - ? Localization._null - : ArrayHelpers.ArrayIsNullOrEmpty(pqSense) - ? Localization.empty - : $"{pqSense.Length}"); + pqSense.IsEmpty ? Localization.empty : $"{pqSense.Length}"); AaruLogging.WriteLine(Localization.LBA_0_RW_sense_is_1_buffer_is_2_sense_buffer_is_3, sectors + 5, @@ -457,11 +445,7 @@ static partial class ScsiMmc : ArrayHelpers.ArrayIsNullOrEmpty(rwBuffer) ? Localization.empty : string.Format(Localization._0_bytes, rwBuffer.Length), - rwSense is null - ? Localization._null - : ArrayHelpers.ArrayIsNullOrEmpty(rwSense) - ? Localization.empty - : $"{rwSense.Length}"); + rwSense.IsEmpty ? Localization.empty : $"{rwSense.Length}"); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -514,7 +498,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_0_sense, sectors + 5); - if(senseBuffer != null) PrintHex.PrintHexArray(dataSense, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(dataSense.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -524,7 +508,7 @@ static partial class ScsiMmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_0_decoded_sense, sectors + 5); - AaruLogging.Write("{0}", Sense.PrettifySense(dataSense)); + AaruLogging.Write("{0}", Sense.PrettifySense(dataSense.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -545,7 +529,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_0_scrambled_sense, sectors + 5); - if(senseBuffer != null) PrintHex.PrintHexArray(scrambledSense, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(scrambledSense.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -555,7 +539,7 @@ static partial class ScsiMmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_0_scrambled_decoded_sense, sectors + 5); - AaruLogging.Write("{0}", Sense.PrettifySense(scrambledSense)); + AaruLogging.Write("{0}", Sense.PrettifySense(scrambledSense.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -576,7 +560,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_PQ_0_sense, sectors + 5); - if(senseBuffer != null) PrintHex.PrintHexArray(pqSense, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(pqSense.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -586,7 +570,7 @@ static partial class ScsiMmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_PQ_decoded_sense, sectors + 5); - AaruLogging.Write("{0}", Sense.PrettifySense(pqSense)); + AaruLogging.Write("{0}", Sense.PrettifySense(pqSense.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -607,7 +591,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_RW_0_sense, sectors + 5); - if(senseBuffer != null) PrintHex.PrintHexArray(rwSense, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(rwSense.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -617,7 +601,7 @@ static partial class ScsiMmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.LBA_RW_0_decoded_sense, sectors + 5); - AaruLogging.Write("{0}", Sense.PrettifySense(rwSense)); + AaruLogging.Write("{0}", Sense.PrettifySense(rwSense.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); diff --git a/Aaru.Tests.Devices/SCSI_MMC/MediaTek.cs b/Aaru.Tests.Devices/SCSI_MMC/MediaTek.cs index 8b66cb525..cbddcc676 100644 --- a/Aaru.Tests.Devices/SCSI_MMC/MediaTek.cs +++ b/Aaru.Tests.Devices/SCSI_MMC/MediaTek.cs @@ -67,7 +67,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Sending_READ_CD_to_the_device); bool sense = dev.ReadCd(out byte[] buffer, - out byte[] senseBuffer, + out ReadOnlySpan senseBuffer, address, 2352, 1, @@ -96,11 +96,9 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Buffer_is_0_bytes, buffer?.Length.ToString() ?? Localization._null); AaruLogging.WriteLine(Localization.Buffer_is_null_or_empty_0_Q, ArrayHelpers.ArrayIsNullOrEmpty(buffer)); - AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, - senseBuffer?.Length.ToString() ?? Localization._null); + AaruLogging.WriteLine(Localization.Sense_buffer_is_0_bytes, senseBuffer.Length.ToString()); - AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, - ArrayHelpers.ArrayIsNullOrEmpty(senseBuffer)); + AaruLogging.WriteLine(Localization.Sense_buffer_is_null_or_empty_0, senseBuffer.IsEmpty); AaruLogging.WriteLine(); AaruLogging.WriteLine(Localization.Choose_what_to_do); @@ -147,7 +145,7 @@ static partial class ScsiMmc AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.MediaTek_READ_CACHE_sense); - if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer, 64); + if(senseBuffer != null) PrintHex.PrintHexArray(senseBuffer.ToArray(), 64); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); @@ -159,7 +157,7 @@ static partial class ScsiMmc Console.Clear(); AaruLogging.WriteLine(Localization.Device_0, devPath); AaruLogging.WriteLine(Localization.MediaTek_READ_CACHE_decoded_sense); - AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer)); + AaruLogging.Write("{0}", Sense.PrettifySense(senseBuffer.ToArray())); AaruLogging.WriteLine(Localization.Press_any_key_to_continue); Console.ReadKey(); Console.Clear(); diff --git a/Aaru/Commands/Device/DeviceReport.cs b/Aaru/Commands/Device/DeviceReport.cs index 79fcc2cf6..8fa78bf6e 100644 --- a/Aaru/Commands/Device/DeviceReport.cs +++ b/Aaru/Commands/Device/DeviceReport.cs @@ -71,7 +71,8 @@ sealed class DeviceReportCommand : AsyncCommand AaruLogging.Debug(MODULE_NAME, "--device={0}", Markup.Escape(settings.Path ?? "")); AaruLogging.Debug(MODULE_NAME, "--verbose={0}", settings.Verbose); - string devicePath = settings.Path; + string devicePath = settings.Path; + ReadOnlySpan senseBuffer = []; if(devicePath.Length == 2 && devicePath[1] == ':' && devicePath[0] != '/' && char.IsLetter(devicePath[0])) devicePath = "\\\\.\\" + char.ToUpper(devicePath[0]) + ':'; @@ -326,18 +327,18 @@ sealed class DeviceReportCommand : AsyncCommand case PeripheralDeviceTypes.BridgingExpander when dev.Model.StartsWith("MDM", StringComparison.Ordinal) || dev.Model.StartsWith("MDH", StringComparison.Ordinal): - dev.AllowMediumRemoval(out buffer, dev.Timeout, out _); - dev.EjectTray(out buffer, dev.Timeout, out _); + dev.AllowMediumRemoval(out _, dev.Timeout, out _); + dev.EjectTray(out _, dev.Timeout, out _); break; case PeripheralDeviceTypes.SequentialAccess: - dev.SpcAllowMediumRemoval(out buffer, dev.Timeout, out _); + dev.SpcAllowMediumRemoval(out _, dev.Timeout, out _); Core.Spectre.ProgressSingleSpinner(ctx => { ctx.AddTask(UI.Asking_drive_to_unload_tape).IsIndeterminate(); - dev.Unload(out buffer, dev.Timeout, out _); + dev.Unload(out _, dev.Timeout, out _); }); break; @@ -360,8 +361,7 @@ sealed class DeviceReportCommand : AsyncCommand reporter.ReportScsiModes(ref report, out byte[] cdromMode, out MediumTypes mediumType); string mediumManufacturer; - byte[] senseBuffer = []; - bool sense = true; + bool sense = true; switch(dev.ScsiType) { @@ -723,13 +723,15 @@ sealed class DeviceReportCommand : AsyncCommand .StartAsync(Localization.Core.Waiting_for_drive_to_become_ready, async ctx => { - sense = dev.ScsiTestUnitReady(out senseBuffer, + ReadOnlySpan localSense; + + sense = dev.ScsiTestUnitReady(out localSense, dev.Timeout, out _); if(!sense) return; - DecodedSense? decSense = Sense.Decode(senseBuffer); + DecodedSense? decSense = Sense.Decode(localSense); if(decSense.HasValue) { @@ -749,7 +751,7 @@ sealed class DeviceReportCommand : AsyncCommand sense = dev .ScsiTestUnitReady(out - senseBuffer, + localSense, dev.Timeout, out _); @@ -830,14 +832,14 @@ sealed class DeviceReportCommand : AsyncCommand sense = mediaTest.SupportsReadLong16 == true ? dev.ReadLong16(out buffer, - out senseBuffer, + out _, false, 0, i, dev.Timeout, out _) : dev.ReadLong10(out buffer, - out senseBuffer, + out _, false, false, 0, @@ -865,7 +867,7 @@ sealed class DeviceReportCommand : AsyncCommand ctx.AddTask(Localization.Core.Trying_SCSI_READ_LONG_10).IsIndeterminate(); sense = dev.ReadLong10(out buffer, - out senseBuffer, + out _, false, false, 0, @@ -886,7 +888,7 @@ sealed class DeviceReportCommand : AsyncCommand ctx.AddTask(Localization.Core.Trying_SCSI_READ_LONG_16).IsIndeterminate(); sense = dev.ReadLong16(out buffer, - out senseBuffer, + out _, false, 0, mediaTest.LongBlockSize ?? mediaTest.BlockSize ?? 0, @@ -902,8 +904,8 @@ sealed class DeviceReportCommand : AsyncCommand mediaTest.MediaIsRecognized = mediaIsRecognized; mediaTests.Add(mediaTest); - dev.AllowMediumRemoval(out buffer, dev.Timeout, out _); - dev.EjectTray(out buffer, dev.Timeout, out _); + dev.AllowMediumRemoval(out _, dev.Timeout, out _); + dev.EjectTray(out senseBuffer, dev.Timeout, out _); } report.SCSI.MultiMediaDevice.TestedMedia = mediaTests; @@ -937,7 +939,9 @@ sealed class DeviceReportCommand : AsyncCommand .StartAsync(Localization.Core.Waiting_for_drive_to_become_ready, async ctx => { - sense = dev.ScsiTestUnitReady(out senseBuffer, + ReadOnlySpan localSense; + + sense = dev.ScsiTestUnitReady(out localSense, dev.Timeout, out _); @@ -945,7 +949,7 @@ sealed class DeviceReportCommand : AsyncCommand if(!sense) return; - DecodedSense? decSense = Sense.Decode(senseBuffer); + DecodedSense? decSense = Sense.Decode(localSense); if(decSense.HasValue) { @@ -963,7 +967,7 @@ sealed class DeviceReportCommand : AsyncCommand await Task.Delay(2000); sense = - dev.ScsiTestUnitReady(out senseBuffer, + dev.ScsiTestUnitReady(out localSense, dev.Timeout, out _); @@ -1015,8 +1019,8 @@ sealed class DeviceReportCommand : AsyncCommand { ctx.AddTask(UI.Asking_drive_to_unload_tape).IsIndeterminate(); - dev.SpcAllowMediumRemoval(out buffer, dev.Timeout, out _); - dev.Unload(out buffer, dev.Timeout, out _); + dev.SpcAllowMediumRemoval(out _, dev.Timeout, out _); + dev.Unload(out _, dev.Timeout, out _); }); } @@ -1054,13 +1058,15 @@ sealed class DeviceReportCommand : AsyncCommand .StartAsync(Localization.Core.Waiting_for_drive_to_become_ready, async ctx => { - sense = dev.ScsiTestUnitReady(out senseBuffer, + ReadOnlySpan localSense; + + sense = dev.ScsiTestUnitReady(out localSense, dev.Timeout, out _); if(!sense) return; - DecodedSense? decSense = Sense.Decode(senseBuffer); + DecodedSense? decSense = Sense.Decode(localSense); if(decSense.HasValue) { @@ -1078,7 +1084,7 @@ sealed class DeviceReportCommand : AsyncCommand await Task.Delay(2000); sense = - dev.ScsiTestUnitReady(out senseBuffer, + dev.ScsiTestUnitReady(out localSense, dev.Timeout, out _); @@ -1149,14 +1155,14 @@ sealed class DeviceReportCommand : AsyncCommand sense = mediaTest.SupportsReadLong16 == true ? dev.ReadLong16(out buffer, - out senseBuffer, + out _, false, 0, i, dev.Timeout, out _) : dev.ReadLong10(out buffer, - out senseBuffer, + out _, false, false, 0, @@ -1185,7 +1191,7 @@ sealed class DeviceReportCommand : AsyncCommand ctx.AddTask(Localization.Core.Trying_SCSI_READ_LONG_10).IsIndeterminate(); sense = dev.ReadLong10(out buffer, - out senseBuffer, + out _, false, false, 0, @@ -1206,7 +1212,7 @@ sealed class DeviceReportCommand : AsyncCommand ctx.AddTask(Localization.Core.Trying_SCSI_READ_LONG_16).IsIndeterminate(); sense = dev.ReadLong16(out buffer, - out senseBuffer, + out _, false, 0, (ushort)(mediaTest.LongBlockSize ?? @@ -1234,8 +1240,8 @@ sealed class DeviceReportCommand : AsyncCommand mediaTest.MediaIsRecognized = mediaIsRecognized; mediaTests.Add(mediaTest); - dev.AllowMediumRemoval(out buffer, dev.Timeout, out _); - dev.EjectTray(out buffer, dev.Timeout, out _); + dev.AllowMediumRemoval(out _, dev.Timeout, out _); + dev.EjectTray(out _, dev.Timeout, out _); } report.SCSI.RemovableMedias = mediaTests; @@ -1268,13 +1274,15 @@ sealed class DeviceReportCommand : AsyncCommand .StartAsync(Localization.Core.Waiting_for_drive_to_become_ready, async ctx => { - sense = dev.ScsiTestUnitReady(out senseBuffer, + ReadOnlySpan localSense; + + sense = dev.ScsiTestUnitReady(out localSense, dev.Timeout, out _); if(!sense) return; - DecodedSense? decSense = Sense.Decode(senseBuffer); + DecodedSense? decSense = Sense.Decode(localSense); if(decSense.HasValue) { @@ -1292,7 +1300,7 @@ sealed class DeviceReportCommand : AsyncCommand sense = dev .ScsiTestUnitReady(out - senseBuffer, + localSense, dev.Timeout, out _); @@ -1350,14 +1358,14 @@ sealed class DeviceReportCommand : AsyncCommand sense = mediaTest.SupportsReadLong16 == true ? dev.ReadLong16(out buffer, - out senseBuffer, + out _, false, 0, i, dev.Timeout, out _) : dev.ReadLong10(out buffer, - out senseBuffer, + out _, false, false, 0, @@ -1387,7 +1395,7 @@ sealed class DeviceReportCommand : AsyncCommand ctx.AddTask(Localization.Core.Trying_SCSI_READ_LONG_10).IsIndeterminate(); sense = dev.ReadLong10(out buffer, - out senseBuffer, + out _, false, false, 0, @@ -1408,7 +1416,7 @@ sealed class DeviceReportCommand : AsyncCommand ctx.AddTask(Localization.Core.Trying_SCSI_READ_LONG_16).IsIndeterminate(); sense = dev.ReadLong16(out buffer, - out senseBuffer, + out _, false, 0, (ushort)(mediaTest.LongBlockSize ?? @@ -1428,8 +1436,8 @@ sealed class DeviceReportCommand : AsyncCommand mediaTests.Add(mediaTest); - dev.AllowMediumRemoval(out buffer, dev.Timeout, out _); - dev.EjectTray(out buffer, dev.Timeout, out _); + dev.AllowMediumRemoval(out _, dev.Timeout, out _); + dev.EjectTray(out _, dev.Timeout, out _); } report.SCSI.RemovableMedias = mediaTests; @@ -1467,14 +1475,14 @@ sealed class DeviceReportCommand : AsyncCommand sense = report.SCSI.ReadCapabilities.SupportsReadLong16 == true ? dev.ReadLong16(out buffer, - out senseBuffer, + out _, false, 0, i, dev.Timeout, out _) : dev.ReadLong10(out buffer, - out senseBuffer, + out _, false, false, 0, @@ -1504,7 +1512,7 @@ sealed class DeviceReportCommand : AsyncCommand ctx.AddTask(Localization.Core.Trying_SCSI_READ_LONG_10).IsIndeterminate(); sense = dev.ReadLong10(out buffer, - out senseBuffer, + out _, false, false, 0, @@ -1525,7 +1533,7 @@ sealed class DeviceReportCommand : AsyncCommand ctx.AddTask(Localization.Core.Trying_SCSI_READ_LONG_16).IsIndeterminate(); sense = dev.ReadLong16(out buffer, - out senseBuffer, + out _, false, 0, report.SCSI.ReadCapabilities.LongBlockSize ??