Skip to content

Harden and configure the RS50 OLED production path - #2

Closed
PeposCJ wants to merge 32 commits into
mainfrom
codex/rs50-oled-production
Closed

Harden and configure the RS50 OLED production path#2
PeposCJ wants to merge 32 commits into
mainfrom
codex/rs50-oled-production

Conversation

@PeposCJ

@PeposCJ PeposCJ commented Jul 29, 2026

Copy link
Copy Markdown
Owner

Summary

This production branch independently implements the confirmed RS50 Dynamic
OLED path while keeping hardware output disabled by default:

  • typed firmware-rendered layouts A-J over public HID++ feature 0x8130;
  • exact runtime discovery, collection selection, request, and ACK validation;
  • fail-closed lifecycle with no automatic physical reconnect;
  • single-consumer scheduler with a 200 ms heartbeat;
  • copied telemetry snapshots and serialized display callbacks;
  • exact iRacing event category and driver-car identity capture;
  • five current iRacing profiles: Sports Car, Formula Car, Oval, Dirt Oval, and
    Dirt Road;
  • strict per-mode configuration and deterministic hardware-free replay;
  • replay schema 2 retains category/car identity while schema 1 remains
    compatible;
  • bounded iRacing telemetry recording at no more than 5 Hz;
  • reviewed golden output and six-hour virtual endurance coverage;
  • hardware-free WPF configurator with typed previews and strict JSON I/O;
  • offline replay inspection showing car, category, track context, and profile
    decision with explicit apply;
  • documented Free/Pro scope and MIT-compatible monetization strategy;
  • dual Windows packages with configurator, SPDX SBOM, recursive hashes, and
    executable smoke tests.

Identity and category policy

WeekendInfo.Category is authoritative. The driver selected by
DriverCarIdx supplies CarID, path, display names, class identity, and
electric status. TrackType is retained only as context and never overrides
the official event category.

Unknown values, the legacy Road category, or a missing driver row fail
closed to manual selection. The application never guesses from speed,
steering, track name, or car-name keywords.

Reviewed defaults:

  • Sports Car: E normal, H brake bias, J last lap, H connection;
  • Formula Car: E/H/J/H with a higher RPM scale;
  • Oval: D/H/J/H;
  • Dirt Oval: D/H/J/H with dirt-specific scales;
  • Dirt Road: E/H/J/H with dirt-specific scales.

Automatic activation is deliberately separate from metadata capture and
remains gated behind physical production validation.

The included replays/session-identity.json demonstrates the complete
hardware-free car → category → recommendation flow.

Hardware-free tools

LogiDynamicDash.exe --preview-all --config .\my-dashboard.json
LogiDynamicDash.exe --simulate-all --config .\my-dashboard.json
LogiDynamicDash.exe --replay --config .\my-dashboard.json `
  --telemetry .\replays\mode-transitions.json
LogiDynamicDash.exe --record-telemetry --output .\my-session.json `
  --duration-seconds 300

The configurator and offline routes never construct a physical OLED session.

Safety boundary

With no arguments, the application remains console-only. The only compiled
hardware route still requires the exact stationary arming contract, cancels
after ten seconds, and rejects moving, missing, negative, or non-finite
on-track speed before the next OLED send.

The transport performs one typed write per transaction and never retries it.
It contains no DirectInput, feature 0x8123, FFB, LED, native-import,
feature-report, firmware, or bootloader API.

Validation

  • 146 unit/integration tests passed;
  • Release solution build passed with warnings as errors and 0 warnings;
  • format, whitespace, and production-surface audits passed;
  • direct/transitive NuGet audit found no known vulnerable packages;
  • one million serialized scheduler submissions and six virtual hours at
    20 Hz passed;
  • WPF configurator Release build and package isolation passed.

No production executable from this branch has been run against hardware.
Captures, videos, proprietary assets, and the user's untracked files are not
included.

Latest milestones

  • ef201ff — heartbeat, copied snapshots, recorder, golden tests, endurance;
  • e2be26d — hardware-free configurator;
  • 17b9e01 — GUI packaging, product tiers, monetization and release plan;
  • bea6e9e — exact car/category identity, five profiles, and replay schema 2.
  • 26c263d — offline identity inspection and exact-CarID profile decision.
  • ed96f3a — tolerate redirected console hosts and record the first bounded
    stationary attempt.

Remaining gate

Draft; do not merge yet.

The first authorized attempt on 2026-07-30 exited safely before opening HID
because the automated host had no interactive console handle. USBPcap
confirmed that no production 0x8130 request reached the RS50; the OLED did
not change and FFB, LEDs, inputs, and simulator connection remained normal.
That host issue is corrected and covered offline.

The required physical step remains one freshly authorized, bounded stationary
retry with the RS50. Build L stays postponed. The research PR remains separate
and must not be merged into main.

@PeposCJ PeposCJ changed the title Add typed RS50 OLED layouts to production Harden typed RS50 OLED production path Jul 29, 2026
@PeposCJ PeposCJ changed the title Harden typed RS50 OLED production path Harden and configure the RS50 OLED production path Jul 29, 2026
@PeposCJ
PeposCJ marked this pull request as ready for review July 30, 2026 09:12
@PeposCJ

PeposCJ commented Jul 30, 2026

Copy link
Copy Markdown
Owner Author

Superseded by #3. This branch and PR remain the research record; physical evidence, experimental checklists, and discovery history are intentionally not being merged into main.

@PeposCJ PeposCJ closed this Jul 30, 2026
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.

1 participant