diff --git a/.github/workflows/update-pages.yml b/.github/workflows/update-pages.yml index e29768e..3f258a4 100644 --- a/.github/workflows/update-pages.yml +++ b/.github/workflows/update-pages.yml @@ -40,6 +40,7 @@ jobs: GH_BOT_EMAIL: ${{ secrets.GH_BOT_EMAIL }} GH_BOT_TOKEN: ${{ secrets.GH_BOT_TOKEN }} with: + base_url: '_auto' clean_gh_pages: true gh_bot_name: ${{ vars.GH_BOT_NAME }} site_artifact: 'prep' diff --git a/README.md b/README.md index b6a5cd6..b1f66a4 100644 --- a/README.md +++ b/README.md @@ -112,29 +112,29 @@ same API where the backend exposes them. Alternatives exist if `libvirtualhid` does not meet your needs. -| Feature | `libvirtualhid` | [ViGEmBus](https://github.com/nefarius/ViGEmBus) | [HIDMaestro](https://github.com/hifihedgehog/HIDMaestro) | [inputtino](https://github.com/games-on-whales/inputtino) | [WinUHid](https://github.com/cgutman/WinUHid) | -|-----------------------------------|--------------------------------------------------|--------------------------------------------------|----------------------------------------------------------|-----------------------------------------------------------|--------------------------------------------------| -| Windows support | ✅ | ✅ | ✅ | ❌ | ✅ | -| Linux support | ✅ | ❌ | ❌ | ✅ | ❌ | -| Windows AMD64 support | ✅ | ✅ | ✅ | - | ✅ | -| Windows ARM64 support | ❌5 | ✅ | ❌6 | - | ✅ | -| Windows user-mode driver | ✅ | ❌ | ✅ | - | ✅ | -| No Windows kernel-mode driver | ✅ | ❌ | ✅ | - | ✅ | -| Descriptor-defined HID devices | ✅ | ❌ | ✅ | ✅1 | ✅ | -| Platform-neutral C++ API | ✅ | ❌2 | ❌2 | ❌3 | ❌2 | -| Keyboard | ✅ | ❌ | ❌ | ✅ | ✅4 | -| Mouse | ✅ | ❌ | ❌ | ✅ | ✅4 | -| Touchscreen, trackpad, or pen | ✅ | ❌ | ❌ | ✅ | ✅4 | -| Generic HID gamepad | ✅ | ❌ | ✅ | ❌ | ✅4 | -| Xbox 360 gamepad | ✅ | ✅ | ✅ | ❌ | ✅4 | -| Xbox One gamepad | ✅ | ❌ | ✅ | ✅ | ✅4 | -| Xbox Series gamepad | ✅ | ❌ | ✅ | ❌ | ✅4 | -| DualShock 4 gamepad | ✅ | ✅ | ✅ | ❌ | ✅4 | -| DualSense gamepad | ✅ | ❌ | ✅ | ✅ | ✅4 | -| Nintendo Switch Pro-style gamepad | ✅ | ❌ | ✅ | ✅ | ✅4 | -| Rumble or output callbacks | ✅ | ❌ | ✅ | ✅ | ✅4 | -| Data-driven profiles | ❌ | ❌ | ✅ | ❌ | ❌ | -| Actively developed | ✅ | ❌ | ✅ | ✅ | ✅ | +| Feature | `libvirtualhid` | [ViGEmBus](https://github.com/nefarius/ViGEmBus) | [HIDMaestro](https://github.com/hifihedgehog/HIDMaestro) | [inputtino](https://github.com/games-on-whales/inputtino) | [WinUHid](https://github.com/cgutman/WinUHid) | +|-----------------------------------|---------------------------------------------------|---------------------------------------------------|----------------------------------------------------------|-----------------------------------------------------------|---------------------------------------------------| +| Windows support | ✅ | ✅ | ✅ | ❌ | ✅ | +| Linux support | ✅ | ❌ | ❌ | ✅ | ❌ | +| Windows AMD64 support | ✅ | ✅ | ✅ | - | ✅ | +| Windows ARM64 support | ❌5 | ✅ | ❌6 | - | ✅ | +| Windows user-mode driver | ✅ | ❌ | ✅ | - | ✅ | +| No Windows kernel-mode driver | ✅ | ❌ | ✅ | - | ✅ | +| Descriptor-defined HID devices | ✅ | ❌ | ✅ | ✅1 | ✅ | +| Platform-neutral C++ API | ✅ | ❌2 | ❌2 | ❌3 | ❌2 | +| Keyboard | ✅ | ❌ | ❌ | ✅ | ✅4 | +| Mouse | ✅ | ❌ | ❌ | ✅ | ✅4 | +| Touchscreen, trackpad, or pen | ✅ | ❌ | ❌ | ✅ | ✅4 | +| Generic HID gamepad | ✅ | ❌ | ✅ | ❌ | ✅4 | +| Xbox 360 gamepad | ✅ | ✅ | ✅ | ❌ | ✅4 | +| Xbox One gamepad | ✅ | ❌ | ✅ | ✅ | ✅4 | +| Xbox Series gamepad | ✅ | ❌ | ✅ | ❌ | ✅4 | +| DualShock 4 gamepad | ✅ | ✅ | ✅ | ❌ | ✅4 | +| DualSense gamepad | ✅ | ❌ | ✅ | ✅ | ✅4 | +| Nintendo Switch Pro-style gamepad | ✅ | ❌ | ✅ | ✅ | ✅4 | +| Rumble or output callbacks | ✅ | ❌ | ✅ | ✅ | ✅4 | +| Data-driven profiles | ❌ | ❌ | ✅ | ❌ | ❌ | +| Actively developed | ✅ | ❌ | ✅ | ✅ | ✅ | 1 inputtino uses `uhid` for virtual joypads; its other listed device types use Linux input interfaces rather diff --git a/gh-pages-template/_data/driver_features.yml b/gh-pages-template/_data/driver_features.yml new file mode 100644 index 0000000..d67db51 --- /dev/null +++ b/gh-pages-template/_data/driver_features.yml @@ -0,0 +1,38 @@ +--- +- title: "User-mode by design" + icon_img: "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/icons/windows.svg" + icon_img_alt: "Windows" + icon_img_invert: true + description: > + Uses a UMDF2 control driver backed by Windows Virtual HID Framework, with no + custom kernel-mode driver added by libvirtualhid. + +- title: "Standard HID gamepads" + icon_fa: "fas fa-gamepad" + description: > + Publishes virtual HID devices for compatible DirectInput, SDL/HIDAPI, + Windows Gaming Input, GameInput, and browser Gamepad API consumers. + +- title: "Process-owned lifecycle" + icon_fa: "fas fa-link" + description: > + Associates each virtual gamepad with the client that created it so Windows + can clean up the device if that process exits or crashes. + +- title: "Built-in diagnostic UI" + icon_fa: "fas fa-sliders" + description: > + Includes a native tool for creating, controlling, and monitoring gamepads, + device nodes, battery state, and output feedback. + +- title: "Multiple controller profiles" + icon_fa: "fas fa-layer-group" + description: > + Supports Generic, Xbox One, Xbox Series, DualShock 4, DualSense, and Nintendo + Switch Pro-style virtual controller profiles. + +- title: "Output feedback" + icon_fa: "fas fa-wave-square" + description: > + Normalizes supported rumble, RGB LED, adaptive trigger, and raw output + events for the application that owns the virtual gamepad. diff --git a/gh-pages-template/_includes/feature-cards.html b/gh-pages-template/_includes/feature-cards.html new file mode 100644 index 0000000..46c2843 --- /dev/null +++ b/gh-pages-template/_includes/feature-cards.html @@ -0,0 +1,21 @@ +{% for feature in include.features %} +
+
+
+
+
+ {% if feature.icon_fa %} + + {% elsif feature.icon_img %} + {{ feature.icon_img_alt | default: feature.title }} + {% endif %} +
+
+
{{ feature.title }}
+

{{ feature.description }}

+
+
+
+
+
+{% endfor %} diff --git a/gh-pages-template/index.html b/gh-pages-template/index.html index aeaa0ef..93328fc 100644 --- a/gh-pages-template/index.html +++ b/gh-pages-template/index.html @@ -26,27 +26,7 @@

Features

- {% for feature in site.data.features %} -
-
-
-
-
- {% if feature.icon_fa %} - - {% elsif feature.icon_img %} - {{ feature.icon_img_alt | default: feature.title }} - {% endif %} -
-
-
{{ feature.title }}
-

{{ feature.description }}

-
-
-
-
-
- {% endfor %} + {% include feature-cards.html features=site.data.features %}
@@ -54,6 +34,30 @@
{{ feature.title }}
+ +
+
+
+
+ +
+

Virtual HID Driver

+

+ Explore the separate Windows driver package for compatible applications that create + virtual HID gamepads. +

+
+
+
+ +
+
+
diff --git a/gh-pages-template/virtual-hid-driver.html b/gh-pages-template/virtual-hid-driver.html new file mode 100644 index 0000000..27da915 --- /dev/null +++ b/gh-pages-template/virtual-hid-driver.html @@ -0,0 +1,135 @@ +--- +title: Virtual HID Driver +subtitle: User-mode virtual gamepads for Windows +layout: page +full-width: true +after-content: + - donate.html + - support.html +cover-img: + - /libvirtualhid/assets/img/banners/libvirtualhid.jpeg +--- + + +
+
+

+ Virtual HID Driver is the Windows gamepad backend for libvirtualhid. It installs the user-mode driver + component that compatible applications use to create virtual HID gamepads discoverable by Windows apps. + The driver package is separate from the portable C++ library and is currently packaged for AMD64 systems. +

+ +
+
+ + +
+
+

Driver features

+
+ {% include feature-cards.html features=site.data.driver_features %} +
+
+
+ + +
+
+
+
+
+
+ +
+

For compatible applications

+

+ Applications create and update gamepads through libvirtualhid's platform-neutral C++ + API. The Windows backend communicates with the installed driver, while platform-specific + HID details stay out of consumer code. The library and driver must use matching control + protocol versions. +

+

+ The installed package also includes the virtualhid_control diagnostic UI + and the gamepad_adapter example for local validation. +

+
+
+
+ +
+
+ +
+
+
+
+ +
+

Compatibility notes

+
    +
  • + The driver is for virtual gamepads. libvirtualhid's Windows keyboard and mouse + support does not require this package. +
  • +
  • + Xbox 360 is not available through this UMDF/VHF backend because a real Xbox 360 + controller uses XUSB rather than standard HID. +
  • +
  • + Xbox-style HID profiles do not guarantee an XInput slot. Applications that require + XInput-specific behavior should review the profile compatibility documentation. +
  • +
+
+
+
+
+
+ +
+
+
+
+ +
+

License

+

+ The Windows UMDF driver source and generated driver package artifacts use the + LizardByte Source-Available License 1.0. Packaged helper components may use the MIT + License as documented in the repository license map. +

+
+
+
+ +
+
+
+