3.1 KiB
3.1 KiB
HC_APTBS
What this is
WPF desktop application (.NET 10 / x64) that controls a VP44 diesel injection pump test bench.
- Reads/writes bench sensors (temperature, RPM, flow) via CAN bus (PCAN-Basic, 500 kbps)
- Communicates with the pump ECU via K-Line/KWP2000 (FTDI USB adapter, 9600 bps)
- Runs automated multi-phase test sequences with PID temperature control
- Generates PDF test reports (QuestPDF)
Build
Windows only, .NET 10 x64. dotnet build -r win-x64 from solution root. SDK pinned in global.json. No WSL/Linux — native DLLs (PCANBasic.dll, ftd2xx.dll) are x64 Windows binaries. No test project; validation is code review + manual hardware testing.
Stack
- C# / .NET 10, WPF, XAML
- CommunityToolkit.Mvvm:
[ObservableProperty],[RelayCommand] - Microsoft.Extensions.DependencyInjection for bootstrap
- QuestPDF 2025.3.2 (requires
LicenseType.Communityin constructor) - Native DLLs in output:
PCANBasic.dll,ftd2xx.dll(x64 only)
Architecture
Infrastructure/
Pcan/PcanBasic.cs — Vendor P/Invoke file. NEVER modify.
Pcan/PcanAdapter.cs — CAN read thread, OEM legitimation, frame decode, IIR filter
Kwp/FtdiInterface.cs — FTDI D2XX wrapper (manual LoadLibrary, not NativeLibrary.Load)
Kwp/KwpCommon.cs — 5-baud slow-init, complement-ACK byte I/O
Kwp/KW1281Connection.cs — KWP/KW1281 protocol state machine
Logging/AppLogger.cs — Daily rotating log files
Services/Impl/
BenchService.cs — Test orchestration, temperature PID, relay control (background Task)
KwpService.cs — All KWP operations; one FtdiInterface open/close per call
ConfigurationService.cs — XML persistence for pump definitions, bench config, client list
PdfService.cs — Report generation
ViewModels/ — [ObservableProperty] / [RelayCommand], no UI logic
Views/ — Pure XAML; no code-behind except DI constructors
Rules for all edits
Always:
- Read the file before editing it
- Keep XML doc comments on all public types and members
- Use
BenchParameterNames/PumpParameterNames/KlineKeysconstants — no magic strings - Marshal to the UI thread when consuming
IBenchServiceorIKwpServiceevents (they fire on background threads)
Never:
- Modify
Infrastructure/Pcan/PcanBasic.cs(vendor file, intentionally untouched) - Modify anything under
old_source/(archived reference only) - Add logic to View code-behind files
- Add
Thread.Sleep, allocations, or logging inside the per-byte K-Line loops inKwpCommon/KW1281Connection
Protocol constants
Do not change without knowing why. Use /protocol-ref skill for full reference including DFI encoding, IIR filter, OEM legitimation, and K-Line timing.
Conventions
- ViewModels in
/ViewModels, Views in/Views, Models in/Models - Async methods use
Asyncsuffix - Commit format:
feat:,fix:,refactor:(conventional commits) - Git remote: self-hosted Gitea at 192.168.8.130
Known debt
Do not worsen before addressing deliberately. See memory file project_known_debt.md for details.