public byte[] GetBytes(ScsiCommand cmd, byte[] immediateData, int offset, int count, bool isFinalData, bool willRead, bool willWrite, uint expected) { BasicHeaderSegment _basicHeader = new BasicHeaderSegment(); _basicHeader.Immediate = cmd.ImmediateDelivery; _basicHeader.OpCode = OpCode.ScsiCommand; _basicHeader.FinalPdu = isFinalData; _basicHeader.TotalAhsLength = 0; _basicHeader.DataSegmentLength = count; _basicHeader.InitiatorTaskTag = _connection.Session.CurrentTaskTag; byte[] buffer = new byte[48 + Utilities.RoundUp(count, 4)]; _basicHeader.WriteTo(buffer, 0); buffer[1] = PackAttrByte(isFinalData, willRead, willWrite, cmd.TaskAttributes); Utilities.WriteBytesBigEndian(_lun, buffer, 8); Utilities.WriteBytesBigEndian(expected, buffer, 20); Utilities.WriteBytesBigEndian(_connection.Session.CommandSequenceNumber, buffer, 24); Utilities.WriteBytesBigEndian(_connection.ExpectedStatusSequenceNumber, buffer, 28); cmd.WriteTo(buffer, 32); if (immediateData != null && count != 0) { Array.Copy(immediateData, offset, buffer, 48, count); } return buffer; }
public byte[] GetBytes(ScsiCommand cmd, byte[] immediateData, int offset, int count, bool isFinalData, bool willRead, bool willWrite, uint expected) { BasicHeaderSegment _basicHeader = new BasicHeaderSegment(); _basicHeader.Immediate = cmd.ImmediateDelivery; _basicHeader.OpCode = OpCode.ScsiCommand; _basicHeader.FinalPdu = isFinalData; _basicHeader.TotalAhsLength = 0; _basicHeader.DataSegmentLength = count; _basicHeader.InitiatorTaskTag = _connection.Session.CurrentTaskTag; byte[] buffer = new byte[48 + Utilities.RoundUp(count, 4)]; _basicHeader.WriteTo(buffer, 0); buffer[1] = PackAttrByte(isFinalData, willRead, willWrite, cmd.TaskAttributes); Utilities.WriteBytesBigEndian(_lun, buffer, 8); Utilities.WriteBytesBigEndian(expected, buffer, 20); Utilities.WriteBytesBigEndian(_connection.Session.CommandSequenceNumber, buffer, 24); Utilities.WriteBytesBigEndian(_connection.ExpectedStatusSequenceNumber, buffer, 28); cmd.WriteTo(buffer, 32); if (immediateData != null && count != 0) { Array.Copy(immediateData, offset, buffer, 48, count); } return(buffer); }