580b1ea7a7
apple / screenshots (push) Has been cancelled
android / android (push) Has been cancelled
apple / swift (push) Has been cancelled
audit / cargo-audit (push) Has been cancelled
ci / web (push) Has been cancelled
ci / docs-site (push) Has been cancelled
ci / bench (push) Has been cancelled
ci / rust (push) Has been cancelled
deb / build-publish (push) Has been cancelled
decky / build-publish (push) Has been cancelled
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Has been cancelled
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Has been cancelled
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Has been cancelled
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Has been cancelled
docker / deploy-docs (push) Has been cancelled
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Has been cancelled
flatpak / build-publish (push) Has been cancelled
release / apple (push) Has been cancelled
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Has been cancelled
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Has been cancelled
windows-host / package (push) Has been cancelled
windows-msix / package (arm64, C:\Users\Public\ffmpeg-arm64, aarch64-pc-windows-msvc, C:\t-a64) (push) Has been cancelled
windows-msix / package (x64, C:\Users\Public\ffmpeg, x86_64-pc-windows-msvc, C:\t) (push) Has been cancelled
windows / build (aarch64-pc-windows-msvc) (push) Has been cancelled
windows / build (x86_64-pc-windows-msvc) (push) Has been cancelled
Steam Deck pass-through (design/steam-deck-passthrough-plan.md), code-complete + all CI checks green on Linux + adversarially reviewed; on-glass validation pending: - usbip/`vhci_hcd` virtual Deck transport (inject/linux/steam_usbip.rs) for non-SteamOS hosts (Bazzite/generic) — presents a real interface-2 USB Deck so Steam Input promotes it. In-process vhci attach (loopback OP_REQ_IMPORT handshake → sysfs attach) with a bounded `usbip`-CLI fallback; detach on drop. - Backed by a vendored, libusb-free trim of the `usbip` crate (crates/punktfunk-host/vendor/usbip-sim, MIT + NOTICE; host/cdc/hid + rusb/nusb removed; interrupt-IN paced by bInterval). - Selection ladder raw_gadget (SteamOS fast-path) → usbip (universal) → UHID, with PUNKTFUNK_STEAM_USBIP / PUNKTFUNK_USBIP_ATTACH knobs. - Shared Deck descriptors + the 0x83/0xAE feature contract + a Steam-accepted serial consolidated into steam_proto.rs; the raw_gadget backend reuses them. - Linux client leave-shortcuts: Ctrl+Alt+Shift+D + holding the escape chord (L1+R1+Start+Select) >=1.5s end the session (short press still exits fullscreen); the chord state resets across sessions. Also bundles in-progress work already staged in the tree: - host(kwin): xdg-output logical-geometry mapping so the KWin fake_input backend places absolute coordinates correctly under display scaling. - docs: design/README index entries + design/controller-only-mode.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
46 lines
1.4 KiB
Rust
46 lines
1.4 KiB
Rust
use super::*;
|
|
|
|
/// Represent a USB interface
|
|
#[derive(Clone, Debug)]
|
|
#[cfg_attr(feature = "serde", derive(Serialize))]
|
|
pub struct UsbInterface {
|
|
pub interface_class: u8,
|
|
pub interface_subclass: u8,
|
|
pub interface_protocol: u8,
|
|
pub endpoints: Vec<UsbEndpoint>,
|
|
pub string_interface: u8,
|
|
pub class_specific_descriptor: Vec<u8>,
|
|
|
|
#[cfg_attr(feature = "serde", serde(skip))]
|
|
pub handler: Arc<Mutex<Box<dyn UsbInterfaceHandler + Send>>>,
|
|
}
|
|
|
|
/// A handler of a custom usb interface
|
|
pub trait UsbInterfaceHandler: std::fmt::Debug {
|
|
/// Return the class specific descriptor which is inserted between interface descriptor and endpoint descriptor
|
|
fn get_class_specific_descriptor(&self) -> Vec<u8>;
|
|
|
|
/// Handle a URB(USB Request Block) targeting at this interface
|
|
///
|
|
/// Can be one of: control transfer to ep0 or other types of transfer to its endpoint.
|
|
/// The resulting data should not exceed `transfer_buffer_length`.
|
|
fn handle_urb(
|
|
&mut self,
|
|
interface: &UsbInterface,
|
|
ep: UsbEndpoint,
|
|
transfer_buffer_length: u32,
|
|
setup: SetupPacket,
|
|
req: &[u8],
|
|
) -> Result<Vec<u8>>;
|
|
|
|
/// Helper to downcast to actual struct
|
|
///
|
|
/// Please implement it as:
|
|
/// ```ignore
|
|
/// fn as_any(&mut self) -> &mut dyn Any {
|
|
/// self
|
|
/// }
|
|
/// ```
|
|
fn as_any(&mut self) -> &mut dyn Any;
|
|
}
|