Major changes: - Added Debug tab with real-time message logging and hex viewer - Implemented timed data logging ($UMTDL command) per API v1.3 - Fixed BLE message parsing to handle notifications without line endings - Added Schema 2 support (22-field timed logging packets) - Updated Maglink BLE UUIDs (fff0/fff1/fff2) - Added connection timeout (10s) to prevent hanging on unavailable devices - Added connection status display and manual push-button logging trigger - Improved retry logging with attempt numbers and delays - Added console window allocation for Windows debug output - Added BLE disconnect on app close Bug fixes: - Fixed device name filtering for Maglink (ML-* prefix) - Fixed RtkGps enum reference in DeviceScanViewModel - Fixed DebugMessage namespace (moved to Models) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
67 lines
2.0 KiB
C#
67 lines
2.0 KiB
C#
using FieldLogger.Services;
|
|
using FieldLogger.Services.Ble;
|
|
using FieldLogger.Services.Data;
|
|
using FieldLogger.Services.Sync;
|
|
using FieldLogger.ViewModels;
|
|
using FieldLogger.Views;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace FieldLogger;
|
|
|
|
public static class MauiProgram
|
|
{
|
|
public static MauiApp CreateMauiApp()
|
|
{
|
|
var builder = MauiApp.CreateBuilder();
|
|
builder
|
|
.UseMauiApp<App>()
|
|
#if !WINDOWS
|
|
.UseMauiMaps()
|
|
#endif
|
|
.ConfigureFonts(fonts =>
|
|
{
|
|
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
|
|
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
|
|
});
|
|
|
|
#if DEBUG
|
|
builder.Logging.AddDebug();
|
|
#endif
|
|
|
|
// Core services
|
|
builder.Services.AddSingleton<SettingsService>();
|
|
builder.Services.AddSingleton<AppDatabase>();
|
|
builder.Services.AddSingleton<BleScanner>();
|
|
builder.Services.AddSingleton<UmReceiverService>();
|
|
builder.Services.AddSingleton<MaglinkService>();
|
|
builder.Services.AddSingleton<DeviceConnectionManager>();
|
|
builder.Services.AddSingleton<PointLogger>();
|
|
builder.Services.AddSingleton<IMqttSyncService, NullMqttSyncService>();
|
|
|
|
// View models
|
|
builder.Services.AddSingleton<HomeViewModel>();
|
|
builder.Services.AddSingleton<JobsViewModel>();
|
|
builder.Services.AddSingleton<MapViewModel>();
|
|
builder.Services.AddSingleton<DebugViewModel>();
|
|
builder.Services.AddSingleton<SettingsViewModel>();
|
|
builder.Services.AddTransient<DeviceScanViewModel>();
|
|
builder.Services.AddTransient<JobDetailViewModel>();
|
|
|
|
// Pages
|
|
builder.Services.AddSingleton<HomePage>();
|
|
builder.Services.AddSingleton<JobsPage>();
|
|
builder.Services.AddSingleton<MapPage>();
|
|
builder.Services.AddSingleton<DebugPage>();
|
|
builder.Services.AddSingleton<SettingsPage>();
|
|
builder.Services.AddTransient<DeviceScanPage>();
|
|
builder.Services.AddTransient<JobDetailPage>();
|
|
|
|
var app = builder.Build();
|
|
|
|
// Instantiate the point logger so it listens for receiver packets from startup.
|
|
_ = app.Services.GetRequiredService<PointLogger>();
|
|
|
|
return app;
|
|
}
|
|
}
|