Conversation
The 31 09 routine only re-writes the service date (record 0x91) when a service is actually due, so on a not-yet-due bike the dash keeps showing the previous reset date. After the routine, explicitly write today's date to record 0x91 via KWP WriteDataByLocalIdentifier (3B 91 00 YY MM DD, BCD) on the dashboard ECU (7E3), then read 0x91 back and only report success when the read-back shows the new date. Skipped for custom profiles on non-dash headers. Note: the 3B 91 date write is newly added and not yet validated on a real bike; it self-verifies and reports honestly if the dash rejects it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The committed icon-1024.png was a solid black square — the opaque NSImage/lockFocus path in tools/make-icon.swift renders black in a headless context, so the iOS icon shipped blank. Regenerate the V-twin artwork via a direct CoreGraphics bitmap renderer (tools/make-ios-icon.swift), which is reliable headless, and replace the icon. macOS iconset is unaffected. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The dash answers a raw 3B 91 date write with NRC 0x33 (securityAccessDenied),
so the write needs a KWP SecurityAccess unlock first. On NRC 0x33, perform
27 01 (seed) → 27 02 (key) using the Melco "Voilou" seed→key mapping, then
retry the write. Falls back to 10 03 (extended session) if 27 01 isn't
accepted in the default session.
The seed→key lookup table is a private vendor asset: it is loaded at runtime
from a bundled asset-catalog data set ("MelcoKeys") that is gitignored and
present only in local/private builds. Public and macOS builds without it
simply skip the secured write and do the routine-only reset. Failure message
now names the NRC (and security specifically).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
You observed that after resetting, the dash kept showing the previous service date (e.g.
2026-06-05) even when the reset clearly ran. Root cause: the validated31 09routine only re-writes the date record (0x91) when a service is actually due — on a not-yet-due bike it acks but leaves the date alone.This change makes the reset always stamp today's date.
How
After the
31 09routine completes, write today's date to dash record0x91:WriteDataByLocalIdentifier:3B 91 00 YY MM DD(BCD), e.g.3B 91 00 26 06 12for 2026-06-12.00 25 08 08(2025-08-08) →00 26 06 05(2026-06-05).7E3) only — skipped for custom profiles on other headers.0x91back and only reports ✅ success when the read-back equals the date we wrote. If the dash rejects the write (no7B 91), it says so honestly and changes nothing about the routine's own result.Shared engine change, so it applies to the macOS app, the iOS app, and the
motodiagCLI. Dry-run path is unaffected (returns before any write).The
3B 91date write has never been sent to an actual dash before. It's built to fail safe (verify-by-read-back, honest messaging), but it needs one on-bike test. If the dash returns7F 3B .., the log will show the NRC so we can adjust (e.g. add an extended session10 03or SecurityAccess).🤖 Generated with Claude Code