public static string PrettifyModePage_0A_S01(ModePage_0A_S01?modePage) { if (!modePage.HasValue) { return(null); } ModePage_0A_S01 page = modePage.Value; var sb = new StringBuilder(); sb.AppendLine("SCSI Control extension page:"); if (page.PS) { sb.AppendLine("\tParameters can be saved"); } if (page.TCMOS) { sb.Append("\tTimestamp can be initialized by methods outside of the SCSI standards"); if (page.SCSIP) { sb.Append(", but SCSI's SET TIMESTAMP shall take precedence over them"); } sb.AppendLine(); } if (page.IALUAE) { sb.AppendLine("\tImplicit Asymmetric Logical Unit Access is enabled"); } sb.AppendFormat("\tInitial priority is {0}", page.InitialPriority).AppendLine(); if (page.DLC) { sb.AppendLine("\tDevice will not degrade performance to extend its life"); } if (page.MaximumSenseLength > 0) { sb.AppendFormat("\tMaximum sense data would be {0} bytes", page.MaximumSenseLength).AppendLine(); } return(sb.ToString()); }
public static ModePage_0A_S01?DecodeModePage_0A_S01(byte[] pageResponse) { if ((pageResponse?[0] &0x40) != 0x40) { return(null); } if ((pageResponse[0] & 0x3F) != 0x0A) { return(null); } if (pageResponse[1] != 0x01) { return(null); } if ((pageResponse[2] << 8) + pageResponse[3] + 4 != pageResponse.Length) { return(null); } if (pageResponse.Length < 32) { return(null); } var decoded = new ModePage_0A_S01(); decoded.PS |= (pageResponse[0] & 0x80) == 0x80; decoded.IALUAE |= (pageResponse[4] & 0x01) == 0x01; decoded.SCSIP |= (pageResponse[4] & 0x02) == 0x02; decoded.TCMOS |= (pageResponse[4] & 0x04) == 0x04; decoded.InitialPriority = (byte)(pageResponse[5] & 0x0F); return(decoded); }