Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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);
        }