public static string PrettifyHPModePage_3C(HP_ModePage_3C?modePage) { if (!modePage.HasValue) { return(null); } HP_ModePage_3C page = modePage.Value; var sb = new StringBuilder(); sb.AppendLine("HP Device Time Mode Page:"); if (page.PS) { sb.AppendLine("\tParameters can be saved"); } if (page.PT) { sb.AppendFormat("\tDrive has been powered up {0} times", page.CurrentPowerOn); sb.AppendFormat("\tDrive has been powered up since {0} this time", TimeSpan.FromSeconds(page.PowerOnTime)).AppendLine(); sb.AppendFormat("\tDrive has been powered up a total of {0}", TimeSpan.FromSeconds(page.CumulativePowerOn)).AppendLine(); } if (page.WT) { sb.AppendFormat("\tDrive's date/time is: {0}", DateHandlers.UnixUnsignedToDateTime(page.WorldTime)). AppendLine(); if (page.UTC) { sb.AppendLine("\tDrive's time is UTC"); } if (page.NTP) { sb.AppendLine("\tDrive's time is synchronized with a NTP source"); } } if (page.LT) { sb.AppendFormat("\tLibrary time is {0}", new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, page.LibraryHours, page.LibraryMinutes, page.LibrarySeconds)).AppendLine(); } return(sb.ToString()); }
public static HP_ModePage_3C?DecodeHPModePage_3C(byte[] pageResponse) { if ((pageResponse?[0] &0x40) == 0x40) { return(null); } if ((pageResponse?[0] &0x3F) != 0x3C) { return(null); } if (pageResponse[1] + 2 != pageResponse.Length) { return(null); } if (pageResponse.Length != 36) { return(null); } var decoded = new HP_ModePage_3C(); decoded.PS |= (pageResponse[0] & 0x80) == 0x80; decoded.LT |= (pageResponse[2] & 0x04) == 0x04; decoded.WT |= (pageResponse[2] & 0x02) == 0x02; decoded.PT |= (pageResponse[2] & 0x01) == 0x01; decoded.CurrentPowerOn = (ushort)((pageResponse[6] << 8) + pageResponse[7]); decoded.PowerOnTime = (uint)((pageResponse[8] << 24) + (pageResponse[9] << 16) + (pageResponse[10] << 8) + pageResponse[11]); decoded.UTC |= (pageResponse[14] & 0x02) == 0x02; decoded.NTP |= (pageResponse[14] & 0x01) == 0x01; decoded.WorldTime = (uint)((pageResponse[16] << 24) + (pageResponse[17] << 16) + (pageResponse[18] << 8) + pageResponse[19]); decoded.LibraryHours = pageResponse[23]; decoded.LibraryMinutes = pageResponse[24]; decoded.LibrarySeconds = pageResponse[25]; decoded.CumulativePowerOn = (uint)((pageResponse[32] << 24) + (pageResponse[33] << 16) + (pageResponse[34] << 8) + pageResponse[35]); return(decoded); }