Beispiel #1
0
        public static ModePage_00_SFF?DecodeModePage_00_SFF(byte[] pageResponse)
        {
            if ((pageResponse?[0] &0x40) == 0x40)
            {
                return(null);
            }

            if ((pageResponse?[0] &0x3F) != 0x00)
            {
                return(null);
            }

            if (pageResponse[1] + 2 != pageResponse.Length)
            {
                return(null);
            }

            if (pageResponse.Length < 4)
            {
                return(null);
            }

            ModePage_00_SFF decoded = new ModePage_00_SFF();

            decoded.PS |= (pageResponse[0] & 0x80) == 0x80;

            decoded.SLM |= (pageResponse[2] & 0x80) == 0x80;
            decoded.SLR |= (pageResponse[2] & 0x40) == 0x40;
            decoded.DVW |= (pageResponse[2] & 0x20) == 0x20;

            decoded.DDE |= (pageResponse[3] & 0x10) == 0x10;

            return(decoded);
        }
Beispiel #2
0
        public static string PrettifyModePage_00_SFF(ModePage_00_SFF?modePage)
        {
            if (!modePage.HasValue)
            {
                return(null);
            }

            ModePage_00_SFF page = modePage.Value;
            var             sb   = new StringBuilder();

            sb.AppendLine("SCSI Drive Operation Mode page:");

            if (page.PS)
            {
                sb.AppendLine("\tParameters can be saved");
            }

            if (page.DVW)
            {
                sb.AppendLine("\tVerifying after writing is disabled");
            }

            if (page.DDE)
            {
                sb.AppendLine("\tDrive will abort when a writing error is detected");
            }

            if (!page.SLM)
            {
                return(sb.ToString());
            }

            sb.Append("\tDrive has two LUNs with rewritable being ");
            sb.AppendLine(page.SLR ? "LUN 1" : "LUN 0");

            return(sb.ToString());
        }