Skip to content

Validate RS50 shared-HID++ OLED, coexistence, telemetry, and layouts - #1

Draft
PeposCJ wants to merge 26 commits into
research/hid-explorerfrom
codex/rs50-directinput-bridge
Draft

Validate RS50 shared-HID++ OLED, coexistence, telemetry, and layouts#1
PeposCJ wants to merge 26 commits into
research/hid-explorerfrom
codex/rs50-directinput-bridge

Conversation

@PeposCJ

@PeposCJ PeposCJ commented Jul 28, 2026

Copy link
Copy Markdown
Owner

What changed

  • identifies public HID++ display feature 0x8130 and its ten fixed layouts
  • records successful static, live telemetry, bounded-stream, iRacing coexistence, stationary-telemetry, and A-J OLED gallery experiments
  • documents why exclusive DirectInput is unsafe for production coexistence
  • adds a closed shared-HID++ protocol and exact RS50 MI_01 transport
  • adds separately armed Builds G-K while keeping all physical transports out of the LogiDynamicDash application
  • documents the confirmed bars, alignment, typography, text fields, and practical telemetry mappings of Layouts A-J
  • adds a hash-gated, file-only firmware inspector for reproducible font geometry research without publishing extracted assets

Verified physical results

Build C replaced the RS50 Dynamic Test fallback with four OLED text rows. Build D proved the complete live telemetry path while stationary in the iRacing pits, rendering SPEED / 0 KMH / GEAR / N.

Build D also demonstrated why exclusive DirectInput cannot be the production route: shift LEDs stopped updating and normal FFB centering disappeared. Reloading the circuit restored normal behavior.

Builds G-I proved that the shared-HID++ route renders acknowledged OLED updates without an observed LED, FFB, torque, position, input, or connection side effect, including while iRacing and TRUEFORCE were active.

Build J2: confirmed stationary telemetry

J1 physically rendered the live SPEED / 0 KMH / GEAR / N frame with normal centering, RPM LEDs, inputs, and connection, but its Wireshark-managed PCAP omitted the setter/ACK pair.

J2 repeated exactly the same bounded ten-second stationary trial once. G HUB was closed; iRacing was running; the car remained stopped in the pits in neutral with the brake held; and direct USBPcapCMD, video, and the bounded local transcript were active.

The process acknowledged one frame. The transcript and independent direct PCAP contain byte-identical Root discovery and Layout J request/response pairs. Bus latency was 2.294 ms for discovery and 2.642 ms for the setter. The full capture reconstructed 2,421 matched HID++ host transactions with zero unmatched requests and zero invalid records.

The capture does not contain the destructive RESET_ALL -> SET_GLOBAL_GAINS(0xFFFF) -> RESET_ALL lifecycle. One matched RESET_ALL from SW-ID 0xE occurred 212.265 seconds after Build J's SW-ID-0xA setter; it had no gain operation or second reset and is not attributable to Build J. The operator reported no physical change or disconnect and confirmed normal LEDs and FFB.

J2 closes J1's USB evidence gap and completes the stationary telemetry gate. A separately reviewed, short, low-speed moving-car stage is still required before any full lap.

Raw USB/video/transcript artifacts remain local and ignored. The phone video contains private device/location metadata and is not published.

Build K: confirmed A-J visual gallery

Build K ran exactly once with G HUB and iRacing closed, video recording, and USBPcap active. The OLED visibly advanced through all ten layouts:

Layout Confirmed output
A completely black/blank; panel power state unknown
B firmware Test screen with four striped C/B/G/H bars
C one horizontal solid/striped gauge
D main gauge, thin lower indicator, and one text field
E the same two indicators plus split left/right text
F medium left text, separator, very large right text
G very large left text, separator, medium right text
H small centered top row and larger right-aligned lower row
I four alternating small/large rows with mixed alignment
J four alternating small/large centered rows

Layout E's three-character field occurs first in the wire payload but appears on the right. Its seven-character field occurs second and appears on the left. The typed APIs now name those fields by their confirmed visual positions so production telemetry cannot accidentally reverse gear and speed.

The complete K1 capture contains exactly one feature discovery and ten function-3 setters, all with exact acknowledgements. ACK latency was 2.210-3.069 ms and setter intervals were 3.005647-3.019032 seconds. There was no other host HID report: zero FFB, LED, MI_02, subdevice, or unknown-feature operation. The operator observed no movement, torque, unexpected resistance, LED change, input loss, or disconnect.

OLED capability conclusion

Feature 0x8130 is a typed firmware renderer, not a host framebuffer:

  • layouts C-E provide firmware-drawn gauges driven by normalized bytes;
  • layouts F-J provide fixed text regions, alignment, and layout-selected 9/16/18/27/37 px proportional bitmap fonts;
  • the internal monochrome framebuffer is 128 x 64, but no recovered host command accepts or exposes its 1024 bytes;
  • no confirmed request contains a font ID, free size, coordinates, pixels, bitmap, color, image format, drawing opcode, or arbitrary stream.

Layout A is a blank layout through 0x8130, not a host-drawable canvas. The evidence does not establish whether the panel is electrically powered down.

For LogiDynamicDash, Layout E is the strongest all-in-one candidate for gear/speed plus RPM and a secondary indicator. F/G maximize gear/speed legibility, while J is the least prescriptive text-only fallback.

Validation

  • solution build: 0 warnings, 0 errors
  • 138 LogiDynamicDash/RS50 tests
  • 121 LogiDynamicExplorer tests
  • Build K source-surface safety audit
  • Build J bounded-transcript source-surface safety audit
  • offline firmware-inspector safety audit
  • dotnet format --verify-no-changes
  • git diff --check

Integration boundary

This remains a draft research PR targeting research/hid-explorer. It must not be merged directly into main. Validated findings should be implemented from main in a separate, independently written production integration PR. J2 authorizes designing the next bounded moving-car research stage, not immediate full-lap use.

PeposCJ added 4 commits July 27, 2026 22:16
Document the July 27 RS50 iRacing captures, including startup,
ACK behavior, redline, pit-limiter flashing, and the resulting
rev-light driver findings.

Preserve the sanitized evidence separately and relate the results
back to the ongoing Dynamic OLED protocol research.
@PeposCJ PeposCJ changed the title Add guarded RS50 Dynamic OLED bridge and verified static output Add guarded RS50 Dynamic OLED bridge and validated live telemetry Jul 28, 2026
@PeposCJ PeposCJ changed the title Add guarded RS50 Dynamic OLED bridge and validated live telemetry Add guarded RS50 OLED bridge; investigate exclusive-stream side effects Jul 28, 2026
@PeposCJ PeposCJ changed the title Add guarded RS50 OLED bridge; investigate exclusive-stream side effects Add guarded RS50 OLED research and offline shared-HID++ Build E Jul 28, 2026
@PeposCJ PeposCJ changed the title Add guarded RS50 OLED research and offline shared-HID++ Build E Add guarded RS50 OLED research and disconnected shared-HID++ Build F Jul 28, 2026
@PeposCJ PeposCJ changed the title Add guarded RS50 OLED research and disconnected shared-HID++ Build F Add guarded RS50 OLED research and armed shared-HID++ Build G Jul 28, 2026
@PeposCJ PeposCJ changed the title Add guarded RS50 OLED research and armed shared-HID++ Build G Add guarded RS50 OLED research and validated shared-HID++ Build G Jul 28, 2026
@PeposCJ PeposCJ changed the title Add guarded RS50 OLED research and validated shared-HID++ Build G Add validated RS50 shared-HID++ OLED path and bounded Build H Jul 28, 2026
@PeposCJ PeposCJ changed the title Add validated RS50 shared-HID++ OLED path and bounded Build H Validate RS50 shared-HID++ OLED path and bounded stream Jul 28, 2026
@PeposCJ PeposCJ changed the title Validate RS50 shared-HID++ OLED path and bounded stream Validate RS50 shared-HID++ OLED path and add stationary coexistence trial Jul 28, 2026
@PeposCJ PeposCJ changed the title Validate RS50 shared-HID++ OLED path and add stationary coexistence trial Validate RS50 shared-HID++ OLED and iRacing coexistence Jul 28, 2026
@PeposCJ PeposCJ changed the title Validate RS50 shared-HID++ OLED and iRacing coexistence Validate RS50 shared-HID++ OLED, coexistence, and bounded telemetry Jul 28, 2026
@PeposCJ PeposCJ changed the title Validate RS50 shared-HID++ OLED, coexistence, and bounded telemetry Validate RS50 shared-HID++ OLED, coexistence, telemetry, and layouts Jul 28, 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