refactor(host/W6.2): extract the input-injection backends into the pf-inject crate
inject.rs + inject/* (the per-OS injectors — wlroots virtual-input, KWin
fake_input, libei/reis, gamescope-EI on Linux; SendInput on Windows — plus the
virtual-gamepad HID stack: DualSense/DualShock4/Switch Pro/Steam Controller/Deck
over uhid/usbip and the Windows UMDF drivers, the proto codecs, the injector
service, and the uhid manager) move into crates/pf-inject behind the
InputInjector trait (plan §W6). It consumes punktfunk_core::input (the neutral
GamepadEvent/InputEvent vocabulary, moved to core in W5) + the pf-driver-proto
wire contract, and reaches pf-capture only for the Windows gamepad-channel
WUDFHost check + the resident-mouse compose-kick hook.
The one inject->vdisplay coupling (the libei gamescope-EI backend needs the EIS
relay socket path) is broken via a leaf: gamescope_ei_socket_file moves to
pf-paths as the shared contract — the gamescope producer (host vdisplay) keeps
its session-env-lock wrapper around it, the libei consumer (pf-inject) reads it
directly post-retarget. The host keeps a `mod inject { pub use pf_inject::* }`
shim so every crate::inject::* path (the native/gamestream input planes + devtest)
is unchanged; the heavy input deps (wayland/reis/xkbcommon/usbip + the KWin
fake-input protocol XML) moved with the crate.
Verified: Linux clippy -D warnings (pf-inject + host nvenc,vulkan-encode,pyrowave
--all-targets) + pf-inject 69/69 + host 230/230 tests; Windows clippy -D warnings
(pf-inject --all-targets + host nvenc,amf-qsv --all-targets) Finished exit 0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -9,6 +9,20 @@
|
||||
|
||||
use std::path::PathBuf;
|
||||
|
||||
/// The shared path of the file where the gamescope backend relays the nested session's
|
||||
/// `LIBEI_SOCKET` (gamescope's EIS server) for the input injector: `$XDG_RUNTIME_DIR/
|
||||
/// punktfunk-gamescope-ei` (per-user 0700), or `/tmp/…` when the runtime dir is unset. It is a
|
||||
/// **contract shared** by the gamescope producer (`pf-vdisplay`, which writes it under the session
|
||||
/// env lock) and the libei consumer (`pf-inject`, which reads it after the session env is applied) —
|
||||
/// a leaf so neither subsystem crate has to reach into the other (plan §W6). Linux-only.
|
||||
#[cfg(target_os = "linux")]
|
||||
pub fn gamescope_ei_socket_file() -> PathBuf {
|
||||
match std::env::var_os("XDG_RUNTIME_DIR").filter(|s| !s.is_empty()) {
|
||||
Some(rt) => PathBuf::from(rt).join("punktfunk-gamescope-ei"),
|
||||
None => PathBuf::from("/tmp/punktfunk-gamescope-ei"),
|
||||
}
|
||||
}
|
||||
|
||||
/// The host config dir (host identity, pairing state, mgmt token, library) — created on demand.
|
||||
/// Linux: `$XDG_CONFIG_HOME/punktfunk` or `~/.config/punktfunk`. Windows: `%ProgramData%\punktfunk`
|
||||
/// (machine-wide — the SYSTEM service and the interactive user share ONE dir that survives logout).
|
||||
|
||||
Reference in New Issue
Block a user