Skip to content

feat: add native AYANEO 3 joystick lighting controls - #552

Closed
sknowledge1 wants to merge 5 commits into
ShadowBlip:mainfrom
sknowledge1:ayaneo3-rgb-20260924
Closed

sknowledge1 wants to merge 5 commits into
ShadowBlip:mainfrom
sknowledge1:ayaneo3-rgb-20260924

Conversation

@sknowledge1

@sknowledge1 sknowledge1 commented Sep 24, 2026 •

Copy link
Copy Markdown

Add an optional native Joystick lighting panel for InputPlumber's managed LED API 1. InputPlumber owns writes, saved settings and effects. This PR remains draft for direction review and native UI/device acceptance.

Behavior and current direction

Advertise only the device's supported effects: Off, Solid colour, native Breathing and Rainbow (the unchanged wire value cycle). Native Rainbow has fixed tempo; software-capable devices retain a period slider. Off preserves remembered colour/brightness. The shared model keeps dirty drafts and in-flight requests across menu remounts, pins unique D-Bus owners and reports saved versus applied/failed state.

The new unconfigured state clearly says that no lighting settings are saved. Opening or closing the panel leaves existing lighting untouched, including the placeholder Off value. An explicit Apply is required.

InputPlumber #734 is the managed-lighting dependency. The recorded kernel already exposes the AYANEO interfaces. The generic and temporary go-style names both failed to expose Steam controls in the recorded private test; OGC Linux #130 is a retired, non-required experiment. InputPlumber #735 remains closed. Steam lighting support is deferred; this optional generic client does not expand the Decky release prerequisites.

Local validation

Exact candidate: a88b6c6880d671ecf8129a585554c274808fb6f8, rebased on main 0db5812f21e98d0a5ac70bb1b5a674f2f369c22c, five linear contribution commits and no contribution merges. The clean-export resource changes and install-dialog regression tests are retained; the production install-dialog fix is already in current main.

  • 5 Rust LED/private-D-Bus tests pass and 14 focused Godot/GUT tests / 73 assertions pass, including untouched first use and controller-focus behavior.
  • Formatting passes. Clippy completes with the same 13 upstream diagnostics reproduced on untouched main; no suppressions are added.
  • Locked x86_64/aarch64 release builds and both Godot exports pass. Both resource packs contain the runtime model/panel and exclude tests/GUT fixtures. Cargo.lock is unchanged; artifact hashes are recorded locally.

The broader network-isolated headless suite has the same GitHub-release assertion and thread-pool/OSK errors reproduced on untouched main. New-head GitHub reads report no test check contexts. Shared API/effects have separate private Decky device evidence, while physical native-panel acceptance on this revision remains pending. Official-image/session permission qualification is also pending.

Assisted-by: Codex

@pastaq

pastaq commented Sep 27, 2026

Copy link
Copy Markdown
Collaborator

While an RGB interface is something we've planned for a while, this specific device in Bazzite should be using the steam menu once the v4 hid-ayaneo patch is integrated into OGC and a NOT-FOR-UPSTREAM patch is added to make it work like the go.

Preserve the existing install-dialog behavior in the exported build used
to validate the new joystick-lighting panel.

Assisted-by: OpenAI Codex
Read and apply shared LED state through InputPlumber, with a stock
gamepad-friendly panel for Off, Solid, Breathing and Colour cycle.
InputPlumber remains the settings owner and hardware writer.

Assisted-by: OpenAI Codex
Keep the new Godot resources available in a fresh exported build.

Assisted-by: OpenAI Codex
When InputPlumber reports firmware-timed cycling, show a fixed-tempo
note and no adjustable speed control. Retain the saved period for
compatibility with the shared LED setting format.

Assisted-by: OpenAI Codex
@sknowledge1

Copy link
Copy Markdown
Author

@pastaq, following up on your Steam-menu direction with the recorded results: the generic LED name and the temporary go-style name both failed to expose Steam controls on the tested 8840U. OGC #130 now records that retired experiment. #735 remains closed; the current managed path is InputPlumber #734, using the existing native kernel interfaces.

I have kept this PR draft as an optional generic client. a88b6c68 rebases it onto current main and handles unconfigured first use without applying the placeholder Off value. The UI calls the unchanged cycle effect Rainbow and preserves native fixed tempo.

Local validation passes 5 Rust/private-D-Bus tests, 14 focused Godot tests with 73 assertions, both release architectures and both Godot exports. The broader headless baseline failures and existing lint diagnostics are recorded in the description. Physical native-panel acceptance and official session/image qualification remain pending; the separate Decky evidence is not presented as native UI acceptance.

@pastaq

pastaq commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator

If the name change fails its because the driver isn't complaint with the ABI. Fix the driver.

@pastaq pastaq closed this Oct 15, 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.

2 participants