public static string PrettifyModePage_10(ModePage_10?modePage) { if (!modePage.HasValue) { return(null); } ModePage_10 page = modePage.Value; var sb = new StringBuilder(); sb.AppendLine("SCSI XOR control mode page:"); if (page.PS) { sb.AppendLine("\tParameters can be saved"); } if (page.XORDIS) { sb.AppendLine("\tXOR operations are disabled"); } else { if (page.MaxXorWrite > 0) { sb.AppendFormat("\tDrive accepts a maximum of {0} blocks in a single XOR WRITE command", page.MaxXorWrite).AppendLine(); } if (page.MaxRegenSize > 0) { sb.AppendFormat("\tDrive accepts a maximum of {0} blocks in a REGENERATE command", page.MaxRegenSize).AppendLine(); } if (page.MaxRebuildRead > 0) { sb.AppendFormat("\tDrive accepts a maximum of {0} blocks in a READ command during rebuild", page.MaxRebuildRead).AppendLine(); } if (page.RebuildDelay > 0) { sb.AppendFormat("\tDrive needs a minimum of {0} ms between READ commands during rebuild", page.RebuildDelay).AppendLine(); } } return(sb.ToString()); }
public static ModePage_10?DecodeModePage_10(byte[] pageResponse) { if ((pageResponse?[0] &0x40) == 0x40) { return(null); } if ((pageResponse?[0] &0x3F) != 0x10) { return(null); } if (pageResponse[1] + 2 != pageResponse.Length) { return(null); } if (pageResponse.Length < 24) { return(null); } var decoded = new ModePage_10(); decoded.PS |= (pageResponse[0] & 0x80) == 0x80; decoded.XORDIS |= (pageResponse[2] & 0x02) == 0x02; decoded.MaxXorWrite = (uint)((pageResponse[4] << 24) + (pageResponse[5] << 16) + (pageResponse[6] << 8) + pageResponse[7]); decoded.MaxRegenSize = (uint)((pageResponse[12] << 24) + (pageResponse[13] << 16) + (pageResponse[14] << 8) + pageResponse[15]); decoded.MaxRebuildRead = (uint)((pageResponse[16] << 24) + (pageResponse[17] << 16) + (pageResponse[18] << 8) + pageResponse[19]); decoded.RebuildDelay = (ushort)((pageResponse[22] << 8) + pageResponse[23]); return(decoded); }