Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions PostCodeSerialMonitor.Tests/SerialDecoderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,20 @@ public class TestDataGenerator : IEnumerable<object[]>
{
private readonly List<object[]> _data = new List<object[]>
{
new object[] {"CPU (1): 0x14ff [2BL_FINAL_SUCCESS] (6683 ms)", new DecodedCode(){
new object[] {"CPU: 0x14ff (+0.000 mS)", new DecodedCode(){
Flavor = CodeFlavor.CPU,
Index = 1,
Code = 0x14ff
}},
new object[] {"SP (1): 0x0075 [BOOT_SUCCESS] (2423 ms)", new DecodedCode(){
new object[] {"CPU: 0x14ff", new DecodedCode(){
Flavor = CodeFlavor.CPU,
Code = 0x14ff
}},
new object[] {"SP : 0x75 (+4252.064 mS)", new DecodedCode(){
Flavor = CodeFlavor.SP,
Code = 0x0075
}},
new object[] {"SP : 0x75", new DecodedCode(){
Flavor = CodeFlavor.SP,
Index = 1,
Code = 0x0075
}}
};
Expand Down Expand Up @@ -86,7 +92,6 @@ public void TestDecoding(string input, DecodedCode expected)
var result = _decoder.DecodeLine(input, ConsoleType.XboxOnePhat);
Assert.NotNull(result);
Assert.Equal(expected.Flavor, result.Flavor);
Assert.Equal(expected.Index, result.Index);
Assert.Equal(expected.Code, result.Code);
}
}
4 changes: 2 additions & 2 deletions PostCodeSerialMonitor/Models/CsvConverters.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ public class HexNumberConverter : DefaultTypeConverter
if (text == null || text == "")
return null;

return Convert.ToUInt32(text, 16);
return Convert.ToUInt64(text, 16);
}

public override string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
{
if (value == null)
return null;

return $"0x{value:X4}";
return $"0x{value:X8}";
}
}

Expand Down
7 changes: 2 additions & 5 deletions PostCodeSerialMonitor/Models/DecodedCode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ namespace PostCodeSerialMonitor.Models;
public class DecodedCode
{
public CodeFlavor Flavor { get; set; }
public int Index { get; set; }
public int Code { get; set; }
public UInt64 Code { get; set; }
public CodeSeverity SeverityLevel { get; set; } = CodeSeverity.Info;
public string Name { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
Expand All @@ -14,8 +13,7 @@ public override int GetHashCode()
{
var result = 0;
result = (result * 397) ^ Convert.ToInt32(Flavor);
result = (result * 397) ^ Index;
result = (result * 397) ^ Code;
result = (result * 397) ^ (int)Code;
result = (result * 397) ^ Convert.ToInt32(SeverityLevel);
return result;
}
Expand All @@ -26,7 +24,6 @@ public bool Equals(DecodedCode obj)
{
return (
this.Flavor == obj.Flavor
&& this.Index == obj.Index
&& this.Code == obj.Code
&& this.SeverityLevel == obj.SeverityLevel
);
Expand Down
5 changes: 3 additions & 2 deletions PostCodeSerialMonitor/Models/ErrorMaskDefinition.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using CsvHelper.Configuration.Attributes;

namespace PostCodeSerialMonitor.Models;
Expand All @@ -12,10 +13,10 @@ public class ErrorMaskDefinition
public CodeFlavor CodeFlavor { get; set; } = CodeFlavor.UNKNOWN;

[TypeConverter(typeof(HexNumberConverter))]
public uint Bitmask { get; set; }
public UInt64 Bitmask { get; set; }

[TypeConverter(typeof(HexNumberConverter))]
public uint Code { get; set; }
public UInt64 Code { get; set; }

public string Name { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
Expand Down
3 changes: 1 addition & 2 deletions PostCodeSerialMonitor/Models/LogEntry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ public bool IsSelected
public string CodeText => FormatCodeText();
// Individual fields, for column-aligned display
public string FlavorText => DecodedCode.Flavor.ToString();
public string IndexText => $"({DecodedCode.Index}):";
public string CodeHexText => $"{DecodedCode.Code:X4}";
public string NameText => string.IsNullOrEmpty(DecodedCode?.Name) ? string.Empty : $"[{DecodedCode.Name}]";
// Name + description on one line, for the truncated inline preview
Expand All @@ -48,7 +47,7 @@ public bool IsSelected
private string FormatCodeText()
{
// Format flavor, index, and code with fixed spacing
var formatted = $"{DecodedCode?.Flavor,-4} ({DecodedCode?.Index}): {DecodedCode?.Code,4:X4}";
var formatted = $"{DecodedCode?.Flavor,-4}: {DecodedCode?.Code,4:X8}";
if (!string.IsNullOrEmpty(DecodedCode?.Name))
formatted += $" [{DecodedCode?.Name}]";
return formatted;
Expand Down
3 changes: 2 additions & 1 deletion PostCodeSerialMonitor/Models/OSErrorDefinition.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using CsvHelper.Configuration.Attributes;

namespace PostCodeSerialMonitor.Models;
Expand All @@ -13,7 +14,7 @@ public class OSErrorDefinition
public CodeFlavor CodeFlavor { get; set; } = CodeFlavor.UNKNOWN;

[TypeConverter(typeof(HexNumberConverter))]
public uint Code { get; set; }
public UInt64 Code { get; set; }

public string Name { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
Expand Down
5 changes: 3 additions & 2 deletions PostCodeSerialMonitor/Models/PostCodeDefinition.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using CsvHelper.Configuration.Attributes;

namespace PostCodeSerialMonitor.Models;
Expand All @@ -12,9 +13,9 @@ public class PostCodeDefinition
public CodeFlavor CodeFlavor { get; set; } = CodeFlavor.UNKNOWN;

[TypeConverter(typeof(HexNumberConverter))]
public uint Code { get; set; }
public UInt64 Code { get; set; }
[TypeConverter(typeof(HexNumberConverter))]
public uint? Bitmask { get; set; }
public UInt64? Bitmask { get; set; }
public bool IsError { get; set; }
public string Name { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
Expand Down
17 changes: 3 additions & 14 deletions PostCodeSerialMonitor/Services/SerialLineDecoder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class SerialLineDecoder
{
private readonly MetaDefinitionService _metaDefinitionService;
private readonly ILogger<SerialLineDecoder> _logger;
private static readonly Regex regex = new Regex(@"^(SMC|SP|CPU|OS)\s+?\((\d)\)\s?\:\s?([x0-9a-fA-F]{6})");
private static readonly Regex regex = new Regex(@"^(SMC|SP|CPU|OS)\s?\:\s?([x0-9a-fA-F]{4,})\s?");

public SerialLineDecoder(MetaDefinitionService metaDefinitionService, ILogger<SerialLineDecoder> logger)
{
Expand All @@ -27,8 +27,7 @@ public SerialLineDecoder(MetaDefinitionService metaDefinitionService, ILogger<Se
}

var codeFlavorStr = match.Groups[1].Value;
var indexStr = match.Groups[2].Value;
var codeStr = match.Groups[3].Value;
var codeStr = match.Groups[2].Value;

var flavor = CodeFlavor.UNKNOWN;
if (codeFlavorStr == "SMC")
Expand All @@ -40,24 +39,14 @@ public SerialLineDecoder(MetaDefinitionService metaDefinitionService, ILogger<Se
else if (codeFlavorStr == "OS")
flavor = CodeFlavor.OS;

var index = int.Parse(indexStr);
var code = Convert.ToInt32(codeStr.Substring(2), 16);
var code = Convert.ToUInt64(codeStr.Substring(2), 16);

var decoded = new DecodedCode()
{
Flavor = flavor,
Index = index,
Code = code
};

// Until we have proper names for the E errors, bail out here early.
if (flavor == CodeFlavor.OS && index == 1) {
decoded.SeverityLevel = CodeSeverity.Error;
decoded.Name = $"OS_ERROR_E{code}";
decoded.Description = Assets.Resources.UemOsError;
return decoded;
}

// First: Try to find distinct code
var postCode = _metaDefinitionService.PostCodes.FirstOrDefault(x =>
x.Code == code &&
Expand Down
7 changes: 3 additions & 4 deletions PostCodeSerialMonitor/ViewModels/DebugDialogViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ private void FillDummyData()
{
for (int i = 0; i < (int)EntryCount; i++)
{
var code = i * 0x11;
var code = (UInt64)(i * 0x11);
var segment = i % 4;
var flavor = CodeFlavors[i % CodeFlavors.Count];

Expand All @@ -65,7 +65,6 @@ private void FillDummyData()
DecodedCode = new DecodedCode
{
Flavor = flavor,
Index = segment,
Code = code,
SeverityLevel = (CodeSeverity)(i % 3),
Name = $"DEBUG_CODE_{i}",
Expand All @@ -80,13 +79,13 @@ private void FillDummyData()
[RelayCommand]
private async Task DecodeStandaloneAsync()
{
int code;
UInt64 code;
try
{
var hex = CodeInput.Trim();
if (hex.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
hex = hex[2..];
code = Convert.ToInt32(hex, 16) & 0xFFFF;
code = Convert.ToUInt64(hex, 16);
}
catch (Exception)
{
Expand Down
14 changes: 3 additions & 11 deletions PostCodeSerialMonitor/Views/MainWindow.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -229,15 +229,7 @@
FontSize="16"
Margin="0,0,4,0"
VerticalAlignment="Top"/>
<TextBlock Grid.Column="2" Text="{Binding IndexText}"
Classes="logText"
Classes.severity-warning="{Binding IsWarning}"
Classes.severity-error="{Binding IsError}"
FontFamily="Consolas,Menlo,Monospace"
FontSize="16"
Margin="0,0,4,0"
VerticalAlignment="Top"/>
<TextBlock Grid.Column="3" Text="{Binding CodeHexText}"
<TextBlock Grid.Column="2" Text="{Binding CodeHexText}"
Classes="logText"
Classes.severity-warning="{Binding IsWarning}"
Classes.severity-error="{Binding IsError}"
Expand All @@ -246,7 +238,7 @@
Margin="0,0,4,0"
VerticalAlignment="Top"/>
<!-- NewLine / bottom-panel mode: just the name -->
<TextBlock Grid.Column="4" Text="{Binding NameText}"
<TextBlock Grid.Column="3" Text="{Binding NameText}"
Classes="logText"
Classes.severity-warning="{Binding IsWarning}"
Classes.severity-error="{Binding IsError}"
Expand All @@ -256,7 +248,7 @@
VerticalAlignment="Top"
TextWrapping="Wrap"/>
<!-- Inline mode: name + description, truncated with an ellipsis until expanded -->
<TextBlock Grid.Column="4" Text="{Binding InlinePreviewText}"
<TextBlock Grid.Column="3" Text="{Binding InlinePreviewText}"
Classes="logText"
Classes.severity-warning="{Binding IsWarning}"
Classes.severity-error="{Binding IsError}"
Expand Down
Loading