public SCSICommandDescriptorBlock10(SCSIOpCodeName opCode) : base()
 {
     this.OpCode = opCode;
 }
        public static SCSICommandDescriptorBlock Create(SCSIOpCodeName opCode)
        {
            switch (opCode)
            {
            case SCSIOpCodeName.TestUnitReady:
                return(new SCSICommandDescriptorBlock6(opCode));

            case SCSIOpCodeName.RequestSense:
                return(new SCSICommandDescriptorBlock6(opCode));

            case SCSIOpCodeName.Read6:
                return(new SCSICommandDescriptorBlock6(opCode));

            case SCSIOpCodeName.Write6:
                return(new SCSICommandDescriptorBlock6(opCode));

            case SCSIOpCodeName.Inquiry:
                return(new InquiryCommand());

            case SCSIOpCodeName.Reserve6:
                return(new SCSICommandDescriptorBlock6(opCode));

            case SCSIOpCodeName.Release6:
                return(new SCSICommandDescriptorBlock6(opCode));

            case SCSIOpCodeName.ModeSense6:
                return(new ModeSense6CommandDescriptorBlock());

            case SCSIOpCodeName.ReadCapacity10:
                return(new SCSICommandDescriptorBlock10(opCode));

            case SCSIOpCodeName.Read10:
                return(new SCSICommandDescriptorBlock10(opCode));

            case SCSIOpCodeName.Write10:
                return(new SCSICommandDescriptorBlock10(opCode));

            case SCSIOpCodeName.Verify10:
                return(new SCSICommandDescriptorBlock10(opCode));

            case SCSIOpCodeName.SynchronizeCache10:
                return(new SCSICommandDescriptorBlock10(opCode));

            case SCSIOpCodeName.WriteSame10:
                return(new SCSICommandDescriptorBlock10(opCode));

            case SCSIOpCodeName.Read16:
                return(new SCSICommandDescriptorBlock16(opCode));

            case SCSIOpCodeName.Write16:
                return(new SCSICommandDescriptorBlock16(opCode));

            case SCSIOpCodeName.Verify16:
                return(new SCSICommandDescriptorBlock16(opCode));

            case SCSIOpCodeName.WriteSame16:
                return(new SCSICommandDescriptorBlock16(opCode));

            case SCSIOpCodeName.ServiceActionIn:
                return(new SCSICommandDescriptorBlock16(opCode));

            case SCSIOpCodeName.ReportLUNs:
                return(new SCSICommandDescriptorBlock12(opCode));

            default:
                throw new NotImplementedException("SCSI opcode not implemented");
            }
        }