Files
ulapp/FieldLogger/MauiProgram.cs
brentperteet 299ec3875d Add Debug page and fix BLE communication issues
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>
2026-07-06 17:32:00 -05:00

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;
}
}