From 7fc26e8678e147cf3260ccbcc0431656034fa644 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Thu, 3 Dec 2020 18:19:05 +0000 Subject: [PATCH] Fix detection of flash drives that report themselves as CD drives when they're not. --- MediaTypeFromDevice/FromMmc.cs | 11 ++++++++++- MediaTypeFromDevice/FromScsi.cs | 5 +++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/MediaTypeFromDevice/FromMmc.cs b/MediaTypeFromDevice/FromMmc.cs index 5532a0c4b..f09791794 100644 --- a/MediaTypeFromDevice/FromMmc.cs +++ b/MediaTypeFromDevice/FromMmc.cs @@ -39,7 +39,8 @@ namespace Aaru.CommonTypes { public static partial class MediaTypeFromDevice { - static MediaType GetFromMmc(string model, byte mediumType, byte densityCode, ulong blocks, uint blockSize) + static MediaType GetFromMmc(string model, byte mediumType, byte densityCode, ulong blocks, uint blockSize, + bool isUsb) { switch(mediumType) { @@ -121,6 +122,14 @@ namespace Aaru.CommonTypes "SCSI medium type is {0:X2}h, setting media type to CD-RW.", mediumType); return MediaType.CDRW; + case 0x40 when isUsb: + case 0x41 when isUsb: + case 0x42 when isUsb: + AaruConsole.DebugWriteLine("Media detection", + "SCSI medium type is {0:X2}h and device is USB, setting media type to Flash Drive.", + mediumType); + + return MediaType.FlashDrive; case 0x80: if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) switch(densityCode) diff --git a/MediaTypeFromDevice/FromScsi.cs b/MediaTypeFromDevice/FromScsi.cs index 6b4e776ba..508b15724 100644 --- a/MediaTypeFromDevice/FromScsi.cs +++ b/MediaTypeFromDevice/FromScsi.cs @@ -47,9 +47,10 @@ namespace Aaru.CommonTypes /// The density type byte from MODE SENSE /// How many blocks are on the media /// Size in bytes of each block + /// Device is USB /// public static MediaType GetFromScsi(byte scsiPeripheralType, string vendor, string model, byte mediumType, - byte densityCode, ulong blocks, uint blockSize) + byte densityCode, ulong blocks, uint blockSize, bool isUsb) { switch(scsiPeripheralType) { @@ -74,7 +75,7 @@ namespace Aaru.CommonTypes case 0x07: return GetFromOdc(mediumType, blocks, blockSize); // MultiMedia Device - case 0x05: return GetFromMmc(model, mediumType, densityCode, blocks, blockSize); + case 0x05: return GetFromMmc(model, mediumType, densityCode, blocks, blockSize, isUsb); // MD DATA drives case 0x10 when model.StartsWith("MDM", StringComparison.Ordinal) ||