protected override DeviceStatus ParseStatus(byte[]?rawStatus) { var deviceStatus = new DeviceStatus(); if (rawStatus == null || rawStatus.Length != 12) { deviceStatus.AddError("E401", "Invalid status"); return(deviceStatus); } byte[] status = new byte[] { 0, 0, 0, 0, 0, 0 }; for (var i = 0; i < status.Length; i++) { byte hi4 = (byte)((rawStatus[i * 2] - 0x30) << 4); byte lo4 = (byte)(rawStatus[i * 2 + 1] - 0x30); status[i] = (byte)(hi4 + lo4); } for (var i = 0; i < status.Length; i++) { byte mask = 0b10000000; byte b = status[i]; for (var j = 0; j < 8; j++) { if ((mask & b) != 0) { var(statusBitsCode, statusBitsText, statusBitStringType) = StatusBitsStrings[i * 8 + (7 - j)]; deviceStatus.AddMessage(new StatusMessage { Type = statusBitStringType, Code = statusBitsCode, Text = statusBitsText }); } mask >>= 1; } } return(deviceStatus); }