Skip to content

Claude/clarify project requirements qz5 io#934

Open
rohite1983 wants to merge 38 commits intonecolas:masterfrom
rohite1983:claude/clarify-project-requirements-Qz5IO
Open

Claude/clarify project requirements qz5 io#934
rohite1983 wants to merge 38 commits intonecolas:masterfrom
rohite1983:claude/clarify-project-requirements-Qz5IO

Conversation

@rohite1983
Copy link
Copy Markdown

No description provided.

claude added 30 commits April 21, 2026 03:02
Session deliverable for branch claude/clarify-project-requirements-Qz5IO.
The plan describes a separate personal/workshop Mercedes diagnostic app
project; it is unrelated to normalize.css itself and lives here only as
a durable record of the session. The actual implementation will happen
in its own repository.

https://claude.ai/code/session_01Fj9uqsN2XU94g88Y4qLXUa
The git bundle + tarball contain the M0 Avalonia solution scaffold
for the separate Bench-mercedes project. They live here only as a
sandbox-crossing delivery channel; see artifacts/README.md for how
to import the bundle into the actual repo.

https://claude.ai/code/session_01Fj9uqsN2XU94g88Y4qLXUa
Adds bench-mercedes-m1.bundle (full, 2 commits),
bench-mercedes-m0-to-m1.bundle (incremental), and .tar.gz.
Updates SESSION_STATE.md with M1 summary and M2 queue.

https://claude.ai/code/session_01Fj9uqsN2XU94g88Y4qLXUa
User's Mac has SDK 10.0.202 and the project was pinned to 8.0.100
via global.json. Rather than have him install an older SDK,
upgrade the project to .NET 10 (current LTS).

- New full bundle: bench-mercedes-m1.1.bundle (M0+M1+M1.1)
- New incremental: bench-mercedes-m1-to-m1.1.bundle (M1.1 on top of
  M1, for the user's already-pushed Bench-mercedes repo)
- README + SESSION_STATE updated with pull-and-push instructions
Tiny follow-up to M1.1: two NuGet errors surfaced on the user's
net10 restore.

- NU1605 Serilog downgrade: bump direct pin 4.1.0 -> 4.2.0 so
  Serilog.Extensions.Hosting 9.0.0's transitive requirement is
  satisfied.
- NU1903 Tmds.DBus.Protocol advisory: suppress NU1903 in the App
  csproj with a comment. The vulnerable package is transitive from
  Avalonia's Linux DBus integration; we target macOS + Windows so
  the code path is never loaded.
Follow-up to M1.2. .NET 10's analyzers + TreatWarningsAsErrors=true
made IDE0011 (missing braces) and the GenerateDocumentationFile
recommendation fatal. Adds braces everywhere, enables doc-file
generation (CS1591 already suppressed), removes one unused using.

After pulling this, 'dotnet build' and 'dotnet test' should go
green on net10.
One-liner follow-up: IDE0005 flagged 'using MercedesDiag.Transport'
in ConnectionService.cs. Dropped. Build should be green now.
Avalonia 11.2 Grid doesn't have ColumnSpacing/RowSpacing properties.
Replaced with Margin on the grid children. Tests already passing
(15/15); this is the last piece before the UI launches.
First slice of M2 (pre-2015 CAN support). Pure-logic layer, no
hardware dependency - builds and tests anywhere.

- IsoTpChannel with full SF/FF/CF + flow-control handling
- IsoTpOptions (Mercedes 0xCC padding default)
- 6 new unit tests on a fake ICanAdapter covering round-trip,
  reassembly, TX with FC, timeout, sequence mismatch, empty-payload
  rejection

Total tests after this bundle: 21 (was 15).

Next slices (separate bundles):
- M2.1: KWP2000 client (pre-2012 Mercedes protocol)
- M2.2: PCAN backend scaffolding (runtime needs Windows/Linux)
- M2.3: J2534 backend + UI adapter selection (runtime Windows only)
- MercedesEcuCatalog.Common grown from 10 to 27 entries
  (adds HVAC, SRS, KG, EHPS, HU, COMAND, A20, STH, RSL, SAM-F,
  SAM-R, IC, PTS, TPM, ISM, EAS, EZS, CGW, DTR, VGS, TCM-9G,
  DDM, PDM, RDM-R, RDM-L).
- MainWindowViewModel: new UseCustomTargetAddress toggle and
  TargetAddressHex string. ConnectAsync uses the typed hex
  when the toggle is on, else SelectedEcu.LogicalAddress.
- MainWindow.axaml: CheckBox + hex TextBox below the ECU
  ComboBox; ComboBox disables while custom mode is on so
  the UI makes it obvious which address will be used.

Bundle: artifacts/bench-mercedes-m2.0-to-m1.6.bundle (1024256..a1d6bca).
Bundle: artifacts/bench-mercedes-m1.6-to-m2.1fix.bundle (a1d6bca..713d67e).
Bundle: artifacts/bench-mercedes-m2.1fix-to-m2.2fix.bundle (713d67e..7c0b04f).
- KwpServices / KwpSession / KwpNrc / KwpDtcReportType / KwpEcuIdOptions
- KwpDtcRecord with 4-hex-digit Pxxxx / Cxxxx / Bxxxx / Uxxxx formatter
- KwpDtcParser tolerates responses with OR without the count byte
- KwpClient: session, tester-present (subfn 0x01), ECU ID + VIN,
  read/write by local & common ID, read & clear DTCs,
  security seed/key, ECU reset
- 11 unit tests via FakeDiagnosticChannel

Bundle: artifacts/bench-mercedes-m2.2fix-to-m2.3.bundle (7c0b04f..20881c6).
Expected test count after pull: 32 passing (15 M1 + 6 ISO-TP + 11 KWP).
Delivers M2.4 (commit 0495c83) on top of M2.3. Sidebar gains Adapter
and Protocol dropdowns with conditional per-transport panels:
DoIP (IP+port), CAN/PCAN (bitrate+TX+RX+extended+channel), J2534
(DLL path+device), SDconnect (host, not implemented). UDS and KWP
sessions now share an IDiagnosticSession abstraction with a
protocol-agnostic DtcEntry for the UI.

PCAN and J2534 HAL backends still throw on OpenAsync — those land
in M2.5 and M2.6. Ready for the user's bench test tomorrow with
the ENET cable (DoIP path is unchanged).
…kend

Delivers M2.5 and M2.6 (commits d290c84 + 033f39e) on top of M2.4.

M2.5 — adapter auto-probe + live ECU discovery + UI polish:
the sidebar gets a card look with a status dot; after a successful
DoIP connect the app now scans known ECU addresses on the real
vehicle and replaces the dropdown with only responders (marked with
a '•'). Adapter dropdown shows per-platform availability + details
(PCAN DLL probe on Win/Linux, macOS reports unavailable). Custom
target gains a name field so it shows up as 'My gateway (0x007F)'
in the status line.

M2.6 — real PCAN-USB P/Invoke backend: Windows (PCANBasic.dll) +
Linux (libpcanbasic.so), with a background RX pump into a bounded
Channel<CanFrame> and platform-guarded entrypoints. macOS throws
PlatformNotSupportedException up-front (no PEAK driver). J2534
backend still TBD — that lands in M2.7.

Ready for bench testing tomorrow: DoIP path is enhanced (ECU scan),
and if the user brings a PCAN-USB to the workshop the CAN path now
has a real driver behind it.
One-line fix for CS0246 in MainWindowViewModel.cs — the
DiscoverEcusAsync method casts the connected adapter to IDoipAdapter,
which lives in MercedesDiag.Hal, not MercedesDiag.Hal.Doip. Apply on
top of the M2.4→M2.6 bundle.
- M2.7 (932e9ba): 'Detect vehicle' broadcasts a DoIP UDP
  VehicleIdentificationRequest and auto-fills the vehicle IP/port
  and VIN from the car's announcement. All manual plumbing fields
  (IP, port, tester/ECU addresses, CAN bitrate, PCAN channel, CAN
  TX/RX IDs, J2534 DLL path, SDconnect host) move into a collapsed
  'Advanced (manual overrides)' expander. Default sidebar shows a
  single TransportSummary line instead.
- M2.8 (4bfe0f8): Replaces the throwing J2534Adapter stub with a
  real ICanAdapter over the SAE J2534 PassThru API. User-supplied
  DLL path is loaded at runtime via NativeLibrary.Load +
  Marshal.GetDelegateForFunctionPointer for StdCall bindings. On
  open, connects a raw-CAN channel at the requested bitrate,
  installs a pass-all filter, and pumps into a bounded
  Channel<CanFrame>. Windows-only.

Updates SESSION_STATE.md with the M2.6fix..M2.8 history and adds
bundle bench-mercedes-m2.6fix-to-m2.8.bundle.
User reported Tactrix OpenPort 2.0 was installed on the Windows PC
but the app still asked them to find op20pt32.dll. The SAE J2534-04
spec standardises the install-time registry location at
HKLM\SOFTWARE\PassThruSupport.04.04 — Tactrix, PEAK, DrewTech,
Mongoose etc. all register there.

- J2534DeviceEnumerator reads both 64-bit and 32-bit registry views
  and returns {Name, Vendor, DllPath} for each installed device.
- AdapterProbeService.ProbeJ2534 now reports the device names in
  its details string instead of 'point the DLL field at …'.
- MainWindowViewModel exposes J2534Devices + SelectedJ2534Device
  with auto-populate of J2534DllPath; Re-probe re-enumerates.
- MainWindow.axaml shows a top-level Device dropdown when J2534 is
  selected; the Advanced 'DLL path' field is relabelled as override.

Bundle bench-mercedes-m2.8-to-m2.9.bundle covers commit bac8ace.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants