1 // 2 // Copyright (c) 2010-2018 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 using System; 8 using Antmicro.Renode.Utilities.Packets; 9 10 namespace Antmicro.Renode.Core.USB.MSC 11 { 12 [LeastSignificantByteFirst] 13 public struct BulkOnlyTransportCommandBlockWrapper 14 { TryParseAntmicro.Renode.Core.USB.MSC.BulkOnlyTransportCommandBlockWrapper15 public static bool TryParse(byte[] bytes, out BulkOnlyTransportCommandBlockWrapper cbw) 16 { 17 if(bytes == null 18 || bytes.Length != 31 19 || BitConverter.ToUInt32(bytes, 0) != SignatureValue) 20 { 21 cbw = default(BulkOnlyTransportCommandBlockWrapper); 22 return false; 23 } 24 25 cbw = Packet.Decode<BulkOnlyTransportCommandBlockWrapper>(bytes); 26 27 return true; 28 } 29 ToStringAntmicro.Renode.Core.USB.MSC.BulkOnlyTransportCommandBlockWrapper30 public override string ToString() 31 { 32 return $"Tag: 0x{Tag:x}, DataTransferLength: {DataTransferLength}, Flags: 0x{Flags:x}, LogicalUnitNumber: {LogicalUnitNumber}, Length: {Length}"; 33 } 34 35 [PacketField] 36 public uint Signature => SignatureValue; 37 38 [PacketField] 39 public uint Tag { get; private set; } 40 41 [PacketField] 42 public uint DataTransferLength { get; private set; } 43 44 [PacketField] 45 public byte Flags { get; private set; } 46 47 [PacketField, Offset(bytes: 13), Width(4)] 48 public byte LogicalUnitNumber { get; private set; } 49 50 [PacketField, Offset(bytes: 14), Width(5)] 51 public byte Length { get; private set; } 52 53 public const int CommandOffset = 15; 54 public const uint SignatureValue = 0x43425355; 55 } 56 }