Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -170,8 +170,9 @@ if(LIBVIRTUALHID_INSTALL)
"find_dependency(X11 COMPONENTS Xtst)\n")
endif()

install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE"
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/LICENSES/MIT.md"
DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/libvirtualhid"
RENAME LICENSE
COMPONENT library)

configure_package_config_file(
Expand Down
14 changes: 14 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Repository License Notice

`libvirtualhid` contains components under different licenses. This file is a
summary and does not replace the complete license texts.

- The cross-platform library source, public headers, non-driver backends,
examples, tests, build scripts, and documentation are licensed under the
[MIT License](LICENSES/MIT.md), except where the license map says otherwise.
- The Windows UMDF driver, broker, proprietary entitlement and evaluation
sources, and generated Windows driver package artifacts are licensed under
the [LizardByte Source-Available License 1.0](LICENSES/LicenseRef-LizardByte-SAL-1.0.md).

See the [license map](LICENSES/README.md) for the authoritative repository path
and artifact assignments.
File renamed without changes.
2 changes: 1 addition & 1 deletion LICENSES/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Windows driver package.
- LB-SAL 1.0 SPDX custom identifier: `LicenseRef-LizardByte-SAL-1.0`.
- Cross-platform library source, public headers, non-driver backends, examples,
tests, build scripts, and documentation unless listed below:
[MIT](https://github.com/LizardByte/libvirtualhid/blob/master/LICENSE).
[MIT](https://github.com/LizardByte/libvirtualhid/blob/master/LICENSES/MIT.md).
- Windows UMDF driver source under `src/platform/windows/driver/`, the broker
service under `src/platform/windows/broker/`, and the broker entitlement and
evaluation sources
Expand Down
44 changes: 23 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,20 +85,14 @@ More complete examples live in `examples/`, including the streaming-host-oriente

## 📚 Documentation

- [Usage and API](docs/usage.md): CMake consumption, build options, public API
overview, profiles, and examples.
- [Platform support](docs/platform-support.md): backend capability model,
Windows, Linux, macOS, and Linux permission setup.
- [Windows driver package](docs/windows-driver.md): UMDF/VHF package build,
installation, validation, diagnostics, and signing notes.
- [TODO](docs/todo.md): known larger compatibility gaps and proposed solution
paths.
- [Streaming-host integration](docs/streaming-host-integration.md): integration
contract and remaining replacement-readiness work for streaming hosts.
- [Development](docs/development.md): local build/test commands, repository
layout, docs generation, and roadmap.
- [Microsoft Store validation](docs/store-review-validation.md): review notes
and manual validation for Store submissions.
- [Usage and API](docs/usage.md): CMake consumption, build options, public API overview, profiles, and examples.
- [Platform support](docs/platform-support.md): backend capability model, Windows, Linux, macOS,
and Linux permission setup.
- [Windows driver package](docs/windows-driver.md): UMDF/VHF package build, installation, validation, diagnostics,
and signing notes.
- [Streaming-host integration](docs/streaming-host-integration.md): integration contract.
- [Development](docs/development.md): local build/test commands, repository layout, docs generation, and roadmap.
- [TODO](docs/todo.md): known larger compatibility gaps and proposed solution paths.

## 🎯 Scope

Expand All @@ -109,10 +103,12 @@ devices from the OS, or ship a Windows kernel-mode driver.

## 📌 Status

Linux and Windows are the active backends. Linux uses standard user-space kernel
interfaces. Windows remains user-mode: the C++ library talks to a UMDF2 control
driver, and the driver publishes HID gamepads through VHF. macOS support is not
implemented yet.
Linux and Windows provide virtual-device backends. Linux uses standard
user-space kernel interfaces. Windows remains user-mode: the C++ library talks
to a UMDF2 control driver, and the driver publishes HID gamepads through VHF.
macOS currently provides a limited CoreGraphics synthetic-input backend for
keyboard and mouse only. It is not a virtual-HID backend and does not yet
support gamepads; native macOS virtual-HID gamepad support is planned.

The library is designed around gamepad use first because remote streaming hosts
are the first consumer class. Non-gamepad device types are available through the
Expand Down Expand Up @@ -183,8 +179,14 @@ test app path and does not currently advertise an ARM64 build.

## 📄 License

The cross-platform `libvirtualhid` library is licensed under the MIT License.
The cross-platform `libvirtualhid` library is licensed under the
[MIT License](https://github.com/LizardByte/libvirtualhid/blob/master/LICENSES/MIT.md).
The Windows UMDF driver, broker, proprietary entitlement/evaluation sources,
and generated Windows driver package artifacts, including the driver MSI, are
licensed under the LizardByte Source-Available License 1.0 (LB-SAL 1.0). See the
[license map](LICENSES/README.md) for the full repository split.
licensed under the
[LizardByte Source-Available License 1.0](https://github.com/LizardByte/libvirtualhid/blob/master/LICENSES/LicenseRef-LizardByte-SAL-1.0.md)
(LB-SAL 1.0). The root
[license notice](https://github.com/LizardByte/libvirtualhid/blob/master/LICENSE.md)
points to both complete license texts; see the
[license map](https://github.com/LizardByte/libvirtualhid/blob/master/LICENSES/README.md)
for the authoritative repository path and artifact assignments.
2 changes: 1 addition & 1 deletion cmake/packaging/common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ set(CPACK_PACKAGE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cpack_artifacts)
set(CPACK_PACKAGE_CONTACT "https://app.lizardbyte.dev")
set(CPACK_PACKAGE_DESCRIPTION ${CMAKE_PROJECT_DESCRIPTION})
set(CPACK_PACKAGE_HOMEPAGE_URL ${CMAKE_PROJECT_HOMEPAGE_URL})
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSES/MIT.md)
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}")
set(CPACK_STRIP_FILES YES)

Expand Down
10 changes: 7 additions & 3 deletions cmake/packaging/windows.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,14 @@ if(LIBVIRTUALHID_DRIVER_TEST_CERTIFICATE)
OPTIONAL)
endif()

install(FILES
"${PROJECT_SOURCE_DIR}/LICENSE"
"${LIBVIRTUALHID_DRIVER_LICENSE_FILE}"
install(FILES "${PROJECT_SOURCE_DIR}/LICENSES/MIT.md"
DESTINATION "licenses"
RENAME "MIT.md"
COMPONENT driver)

install(FILES "${LIBVIRTUALHID_DRIVER_LICENSE_FILE}"
DESTINATION "licenses"
RENAME "LicenseRef-LizardByte-SAL-1.0.md"
COMPONENT driver)

set(CPACK_COMPONENT_DRIVER_DISPLAY_NAME "Windows UMDF Driver")
Expand Down
1 change: 0 additions & 1 deletion docs/Doxyfile
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ INPUT = ../README.md \
todo.md \
streaming-host-integration.md \
development.md \
store-review-validation.md \
../LICENSES/README.md \
../examples \
../third-party/doxyconfig/docs/source_code.md \
Expand Down
17 changes: 8 additions & 9 deletions docs/development.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,11 @@ code and tests provide a better source of truth.

## Roadmap

- Finish Windows streaming-host replacement validation, especially application
compatibility for the UMDF/VHF HID backend and any XInput-only fallback story.
- Replace consumer-specific ViGEmBus installer/status/diagnostic flows with
libvirtualhid driver-package checks.
- Validate Linux host-adapter behavior across the selected controller profiles.
- Define and implement the FreeBSD-supported backend subset.
- Extend macOS support beyond CoreGraphics keyboard and mouse injection to
native virtual HID devices, including signing, entitlement, and installer
constraints.
- Add native macOS virtual-HID gamepad support beyond the current CoreGraphics
keyboard and mouse injection backend, including signing, entitlement, and
installer constraints.
- Add bindings for other languages, such as Python, Rust, and C#. Bindings will
be considered for any requested language.
- Evaluate an optional FreeBSD CUSE-backed `uhid(4)`-compatible device for
direct HID consumers. This would supplement uinput; it is not equivalent to
registering a virtual device with FreeBSD's kernel HID bus.
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ Expected result:
4. Run the required validation tool from the submission notes.
5. Activate the review key supplied through Partner Center.
6. Create the default gamepad and exercise its controls.
7. Optionally run the browser validation steps.
7. Optionally, run the browser validation steps.

If the default install location was changed during MSI installation, replace
`$env:ProgramFiles\libvirtualhid` with the selected install directory.
Expand Down
7 changes: 4 additions & 3 deletions docs/platform-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@ Unsupported macOS capabilities currently return `unsupported_profile`:
- Touchscreen, trackpad, and pen tablet devices.
- Keyboard text input through `KeyboardTextEvent`.

Future native virtual HID support may use `IOHIDUserDevice`,
DriverKit/HIDDriverKit, or a combination that preserves the same public API
while documenting any signing, entitlement, and installer requirements.
Native macOS virtual-HID gamepad support is planned. A future backend may use
`IOHIDUserDevice`, DriverKit/HIDDriverKit, or a combination that preserves the
same public API while documenting any signing, entitlement, and installer
requirements.
16 changes: 0 additions & 16 deletions docs/streaming-host-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,19 +58,3 @@ The core API and adapter shape cover the major streaming-host requirements:
- FreeBSD uinput gamepads and pointer devices, with basic PlayStation input and
rumble but without Linux UHID-only PlayStation features.
- Windows UMDF/VHF gamepad creation through an installed driver package.

Remaining replacement work is validation and packaging, not broad API shape:

- Validate Windows UMDF/VHF gamepads against the same application classes that
previously relied on ViGEmBus, including XInput-only compatibility decisions.
- Validate DualShock 4 and Xbox behavior through the intended Windows streaming
host path.
- Replace any consumer-specific ViGEmBus installer, status, and diagnostics with
libvirtualhid driver-package checks.
- Add and validate the Linux host adapter for the selected controller profile
names used by the consuming application.
- Evaluate an optional FreeBSD CUSE-backed `uhid(4)`-compatible device for
direct HID consumers. This would supplement uinput; it is not equivalent to
registering a virtual device with FreeBSD's kernel HID bus.
- Validate macOS CoreGraphics keyboard and mouse support in a streaming host, and
keep native macOS virtual HID device work scoped separately.
Loading