Skip to content

Commit

Permalink
Various logger improvements
Browse files Browse the repository at this point in the history
Merged many new parameters.
Improved bit-flag support.
Support for signed values may not be correct, but is certainly improved.
Logger reloads last profile on startup.
  • Loading branch information
LegacyNsfw committed May 28, 2021
2 parents 788277a + dca7192 commit 48f1da3
Show file tree
Hide file tree
Showing 22 changed files with 1,207 additions and 444 deletions.
3 changes: 0 additions & 3 deletions Apps/PcmLibrary/Devices/AvtDevice.cs
Expand Up @@ -175,9 +175,6 @@ async private Task<Response<Message>> ReadAVTPacket()
this.Logger.AddDebugMessage("Waited 2seconds.. no data present");
return Response.Create(ResponseStatus.Timeout, (Message)null);
}



}
catch (Exception) // timeout exception - log no data, return error.
{
Expand Down
88 changes: 53 additions & 35 deletions Apps/PcmLibrary/Logging/LogRowParser.cs
Expand Up @@ -14,7 +14,6 @@ namespace PcmHacking
/// </summary>
public class PcmParameterValue
{
public Int16 RawValue { get; set; }
public string ValueAsString { get; set; }
public double ValueAsDouble { get; set; }
}
Expand Down Expand Up @@ -103,7 +102,7 @@ private void EvaluateDpidMessage(ParameterGroup group, byte[] payload, PcmParame
int startIndex = 0;
foreach (LogColumn column in group.LogColumns)
{
Int16 value = 0;
double value;
PcmParameter pcmParameter = column.Parameter as PcmParameter;
if (pcmParameter == null)
{
Expand All @@ -115,22 +114,41 @@ private void EvaluateDpidMessage(ParameterGroup group, byte[] payload, PcmParame
case 1:
if (startIndex < payload.Length)
{
value = payload[startIndex++];
if (pcmParameter.IsSigned)
{
value = (sbyte)payload[startIndex++];
}
else
{
value = (byte)payload[startIndex++];
}
}
else
{
value = 0;
}

break;

case 2:
if (startIndex < payload.Length)
if (startIndex + 1 < payload.Length)
{
value = payload[startIndex++];
if (pcmParameter.IsSigned)
{
value = BitConverter.ToInt16(payload, startIndex);
}
else
{
value = BitConverter.ToUInt16(payload, startIndex);
}

startIndex += 2;
}

value <<= 8;

if (startIndex < payload.Length)
else
{
value = (Int16)((UInt16)value | (byte)payload[startIndex++]);
value = 0;
}

break;

default:
Expand All @@ -145,57 +163,57 @@ private void EvaluateDpidMessage(ParameterGroup group, byte[] payload, PcmParame
column,
new PcmParameterValue()
{
RawValue = value,
ValueAsDouble = value,
ValueAsString = value.ToString(format)
});
}
else
{
double convertedValue = 0;
string formattedValue;

try
if (column.Conversion.IsBitMapped)
{
Interpreter interpreter = new Interpreter();
interpreter.SetVariable("x", value);
interpreter.SetVariable("x_high", value >> 8);
interpreter.SetVariable("x_low", value & 0xFF);
int bits = (int)value;
bits = bits >> column.Conversion.BitIndex;
bool flag = (bits & 1) != 0;

convertedValue = interpreter.Eval<double>(column.Conversion.Expression);
}
catch(Exception exception)
{
throw new InvalidOperationException(
string.Format("Unable to evaluate expression \"{0}\" for parameter \"{1}\"",
column.Conversion.Expression,
column.Parameter.Name),
exception);
}

string formatted;
if (pcmParameter.BitMapped)
{
int flag = ((int)convertedValue) & 1;
formatted = (flag > 0).ToString();
convertedValue = value;
formattedValue = flag ? column.Conversion.TrueValue : column.Conversion.FalseValue;
}
else
{
try
{
Interpreter interpreter = new Interpreter();
interpreter.SetVariable("x", value);

convertedValue = interpreter.Eval<double>(column.Conversion.Expression);
}
catch (Exception exception)
{
throw new InvalidOperationException(
string.Format("Unable to evaluate expression \"{0}\" for parameter \"{1}\"",
column.Conversion.Expression,
column.Parameter.Name),
exception);
}

string format = column.Conversion.Format;
if (string.IsNullOrWhiteSpace(format))
{
format = "0.00";
}

formatted = convertedValue.ToString(format);
formattedValue = convertedValue.ToString(format);
}

results.Add(
column,
new PcmParameterValue()
{
RawValue = value,
ValueAsDouble = convertedValue,
ValueAsString = formatted
ValueAsString = formattedValue
});
}
}
Expand Down
8 changes: 2 additions & 6 deletions Apps/PcmLibrary/Logging/MathValueProcessor.cs
Expand Up @@ -73,11 +73,9 @@ public IEnumerable<string> GetMathValues(PcmParameterValues dpidValues)

try
{
Int16 xParameterValue = dpidValues[value.XColumn].RawValue;
double xParameterValue = dpidValues[value.XColumn].ValueAsDouble;
Interpreter xConverter = new Interpreter();
xConverter.SetVariable("x", xParameterValue);
xConverter.SetVariable("x_high", xParameterValue >> 8);
xConverter.SetVariable("x_low", xParameterValue & 0xFF);
xConverted = xConverter.Eval<double>(value.XColumn.Conversion.Expression);
}
catch (Exception exception)
Expand All @@ -88,11 +86,9 @@ public IEnumerable<string> GetMathValues(PcmParameterValues dpidValues)

try
{
Int16 yParameterValue = dpidValues[value.YColumn].RawValue;
double yParameterValue = dpidValues[value.YColumn].ValueAsDouble;
Interpreter yConverter = new Interpreter();
yConverter.SetVariable("x", yParameterValue);
yConverter.SetVariable("x_high", yParameterValue >> 8);
yConverter.SetVariable("x_low", yParameterValue & 0xFF);
yConverted = yConverter.Eval<double>(value.YColumn.Conversion.Expression);
}
catch (Exception exception)
Expand Down
74 changes: 69 additions & 5 deletions Apps/PcmLibrary/Logging/Parameter.cs
Expand Up @@ -16,11 +16,34 @@ public class Conversion

public string Format { get; private set; }

public bool IsBitMapped { get; private set; }

public int BitIndex { get; private set; }

public string TrueValue { get; private set; }

public string FalseValue { get; private set; }

public Conversion(string units, string expression, string format)
{
this.Units = units;
this.Expression = Sanitize(expression);
this.Format = format;
this.IsBitMapped = false;
this.BitIndex = -1;
this.TrueValue = null;
this.FalseValue = null;
}

public Conversion(string units, int bitIndex, string trueValue, string falseValue)
{
this.Units = units;
this.Expression = "x";
this.Format = "";
this.IsBitMapped = true;
this.BitIndex = bitIndex;
this.TrueValue = trueValue;
this.FalseValue = falseValue;
}

public override string ToString()
Expand Down Expand Up @@ -111,7 +134,48 @@ public bool TryGetConversion(string units, out Conversion conversion)
/// </summary>
public abstract class PcmParameter : Parameter
{
public int ByteCount { get; protected set; }
public string StorageType { get; protected set; }

public int ByteCount
{
get
{
switch(this.StorageType)
{
case "uint8":
case "int8":
return 1;

case "uint16":
case "int16":
return 2;

default:
return 0;
}
}
}

public bool IsSigned
{
get
{
switch (this.StorageType)
{
case "int8":
case "int16":
return true;

case "uint8":
case "uint16":
return false;

default:
return false;
}
}
}

public bool BitMapped { get; protected set; }
}

Expand All @@ -130,15 +194,15 @@ public class PidParameter : PcmParameter
uint id,
string name,
string description,
int byteCount,
string storageType,
bool bitMapped,
IEnumerable<Conversion> conversions)
{
this.Id = id.ToString("X4");
this.PID = UnsignedHex.GetUnsignedHex("0x" + this.Id);
this.Name = name;
this.Description = description;
this.ByteCount = byteCount;
this.StorageType = storageType;
this.BitMapped = bitMapped;
this.Conversions = conversions;
}
Expand All @@ -164,15 +228,15 @@ public class RamParameter : PcmParameter
string id,
string name,
string description,
int byteCount,
string storageType,
bool bitMapped,
IEnumerable<Conversion> conversions,
Dictionary<uint, uint> addresses)
{
this.Id = id;
this.Name = name;
this.Description = description;
this.ByteCount = byteCount;
this.StorageType = storageType;
this.BitMapped = bitMapped;
this.Conversions = conversions;
this.addresses = addresses;
Expand Down

0 comments on commit 48f1da3

Please sign in to comment.