using System.Text; namespace Common.Hardware.SIRT.Parameters { public class PAMStatus { private readonly byte[] bits; public PAMStatus(byte _byte) { this.IsValid = _byte <= 31; this.bits = _byte.GetBits(); } public bool CMD_UNKNOWN => this.bits[0] == 1; public bool WRONG_AUTH => this.bits[1] == 1; public bool EXPIRED_AUTH => this.bits[2] == 1; public bool MIXED_TYPES => this.bits[3] == 1; public bool OUT_OF_RANGE => this.bits[4] == 1; public bool IsValid { get; } public override string ToString() { if (this.bits.GetByte() == 0) { return nameof(OK); } else if (this.OUT_OF_RANGE) { return nameof(this.OUT_OF_RANGE); } else if (this.MIXED_TYPES) { return nameof(this.MIXED_TYPES); } else if (this.CMD_UNKNOWN) { return nameof(this.CMD_UNKNOWN); } else if (this.EXPIRED_AUTH) { return nameof(this.EXPIRED_AUTH); } else if (this.WRONG_AUTH) { return nameof(this.WRONG_AUTH); } else { return string.Join(string.Empty, this.bits); } } public string ToString(bool extended) { var stringBuilder = new StringBuilder(); if (this.bits.GetByte() == 0) { stringBuilder.AppendLine(nameof(OK)); } if (this.OUT_OF_RANGE) { stringBuilder.AppendLine(nameof(this.OUT_OF_RANGE)); } if (this.MIXED_TYPES) { stringBuilder.AppendLine(nameof(this.MIXED_TYPES)); } if (this.CMD_UNKNOWN) { stringBuilder.AppendLine(nameof(this.CMD_UNKNOWN)); } if (this.EXPIRED_AUTH) { stringBuilder.AppendLine(nameof(this.EXPIRED_AUTH)); } if (this.WRONG_AUTH) { stringBuilder.AppendLine(nameof(this.WRONG_AUTH)); } return stringBuilder.ToString().Trim(); } public static byte OK = 0; public static byte EXPIREDAUTH = 4; public static implicit operator byte(PAMStatus status) => status?.bits?.GetByte() ?? 0xFF; public static implicit operator string(PAMStatus status) => status?.ToString(); } }