Added Maglink RTK GNSS receiver integration with correct BLE UUIDs and device name filtering (ML-* prefix). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
52 lines
1.9 KiB
C#
52 lines
1.9 KiB
C#
namespace FieldLogger.Models;
|
|
|
|
/// <summary>
|
|
/// Info string the UM receiver sends the first time push-button data logging is enabled.
|
|
/// </summary>
|
|
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; } = "";
|
|
|
|
/// <summary>
|
|
/// Parses the 10-field info string (9 parameters followed by "OK").
|
|
/// Returns null if the line does not match.
|
|
/// </summary>
|
|
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(),
|
|
};
|
|
}
|
|
}
|