namespace FieldLogger.Models;
///
/// Info string the UM receiver sends the first time push-button data logging is enabled.
///
public sealed class UmDeviceInfo
{
public string Manufacturer { get; init; } = "";
public string ModelName { get; init; } = "";
public string SerialNumber { get; init; } = "";
public string BootloaderVersion { get; init; } = "";
public string SoftwareVersion { get; init; } = "";
public string ManufactureDate { get; init; } = "";
public string CalibrationDate { get; init; } = "";
public double HourCount { get; init; }
public int PbdlSchema { get; init; }
public string RawText { get; init; } = "";
///
/// Parses the 10-field info string (9 parameters followed by "OK").
/// Returns null if the line does not match.
///
public static UmDeviceInfo? TryParse(string line)
{
var fields = line.Trim().Split(',');
if (fields.Length < 10 || !fields[^1].Trim().Equals("OK", StringComparison.OrdinalIgnoreCase))
return null;
// Serial number is 9 digits; use it to distinguish from other OK-terminated responses.
if (fields[2].Trim().Length < 6)
return null;
double.TryParse(fields[7], System.Globalization.NumberStyles.Float,
System.Globalization.CultureInfo.InvariantCulture, out var hours);
int.TryParse(fields[8], out var schema);
return new UmDeviceInfo
{
Manufacturer = fields[0].Trim(),
ModelName = fields[1].Trim(),
SerialNumber = fields[2].Trim(),
BootloaderVersion = fields[3].Trim(),
SoftwareVersion = fields[4].Trim(),
ManufactureDate = fields[5].Trim(),
CalibrationDate = fields[6].Trim(),
HourCount = hours,
PbdlSchema = schema,
RawText = line.Trim(),
};
}
}