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(), }; } }