diff --git a/Makefile b/Makefile
index dba667d3..517e71ce 100644
--- a/Makefile
+++ b/Makefile
@@ -13,7 +13,7 @@ IMAGE_TAG ?= latest
# systemd-sysext variables
SYSEXT_ID ?= steamos
-SYSEXT_VERSION_ID ?= 3.5.14
+SYSEXT_VERSION_ID ?= 3.5.15
# Include any user defined settings
-include settings.mk
@@ -45,8 +45,6 @@ install: build ## Install inputplumber to the given prefix (default: PREFIX=/usr
$(PREFIX)/lib/systemd/system/$(NAME).service
install -D -m 644 rootfs/usr/share/$(NAME)/devices/steam_deck.yaml \
$(PREFIX)/share/$(NAME)/devices/steam_deck.yaml
- install -D -m 644 rootfs/usr/share/$(NAME)/devices/gamepads.yaml \
- $(PREFIX)/share/$(NAME)/devices/gamepads.yaml
@echo ""
@echo "Install completed. Enable service with:"
@echo " systemctl enable --now $(NAME)"
@@ -57,7 +55,6 @@ uninstall: ## Uninstall inputplumber
rm $(PREFIX)/share/dbus-1/system.d/$(DBUS_NAME).conf
rm $(PREFIX)/lib/systemd/system/$(NAME).service
rm $(PREFIX)/share/$(NAME)/devices/steam_deck.yaml
- rm $(PREFIX)/share/$(NAME)/devices/gamepads.yaml
##@ Development
@@ -139,6 +136,21 @@ dist/$(NAME).raw: dist/$(NAME).tar.gz
mv $(CACHE_DIR)/$(NAME).raw $@
cd dist && sha256sum $(NAME).raw > $(NAME).raw.sha256.txt
+XSL_TEMPLATE := ./docs/dbus2markdown.xsl
+.PHONY: docs
+docs: ## Generate markdown docs for DBus interfaces
+ mkdir -p docs
+ xsltproc --novalid -o docs/manager.md $(XSL_TEMPLATE) ./bindings/dbus-xml/org.shadowblip.Input.Manager.xml
+ sed -i 's/DBus Interface API/Manager DBus Interface API/g' ./docs/manager.md
+ xsltproc --novalid -o docs/composite_device.md $(XSL_TEMPLATE) ./bindings/dbus-xml/org.shadowblip.Input.CompositeDevice.xml
+ sed -i 's/DBus Interface API/CompositeDevice DBus Interface API/g' ./docs/composite_device.md
+ xsltproc --novalid -o docs/source_event_device.md $(XSL_TEMPLATE) ./bindings/dbus-xml/org.shadowblip.Input.Source.EventDevice.xml
+ sed -i 's/DBus Interface API/Source EventDevice DBus Interface API/g' ./docs/source_event_device.md
+ xsltproc --novalid -o docs/source_hidraw_device.md $(XSL_TEMPLATE) ./bindings/dbus-xml/org.shadowblip.Input.Source.HIDRawDevice.xml
+ sed -i 's/DBus Interface API/Source HIDRaw DBus Interface API/g' ./docs/source_hidraw_device.md
+ xsltproc --novalid -o docs/keyboard.md $(XSL_TEMPLATE) ./bindings/dbus-xml/org.shadowblip.Input.Keyboard
+ sed -i 's/DBus Interface API/Keyboard DBus Interface API/g' ./docs/keyboard.md
+
# Refer to .releaserc.yaml for release configuration
.PHONY: sem-release
sem-release: ## Publish a release with semantic release
diff --git a/bindings/dbus-xml/org.shadowblip.Input.CompositeDevice.xml b/bindings/dbus-xml/org.shadowblip.Input.CompositeDevice.xml
new file mode 100644
index 00000000..9d36bd05
--- /dev/null
+++ b/bindings/dbus-xml/org.shadowblip.Input.CompositeDevice.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bindings/dbus-xml/org.shadowblip.Input.Keyboard b/bindings/dbus-xml/org.shadowblip.Input.Keyboard
new file mode 100644
index 00000000..0624990f
--- /dev/null
+++ b/bindings/dbus-xml/org.shadowblip.Input.Keyboard
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bindings/dbus-xml/org.shadowblip.Input.Manager.xml b/bindings/dbus-xml/org.shadowblip.Input.Manager.xml
new file mode 100644
index 00000000..643fa9c3
--- /dev/null
+++ b/bindings/dbus-xml/org.shadowblip.Input.Manager.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bindings/dbus-xml/org.shadowblip.Input.Source.EventDevice.xml b/bindings/dbus-xml/org.shadowblip.Input.Source.EventDevice.xml
new file mode 100644
index 00000000..353d54c5
--- /dev/null
+++ b/bindings/dbus-xml/org.shadowblip.Input.Source.EventDevice.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bindings/dbus-xml/org.shadowblip.Input.Source.HIDRawDevice.xml b/bindings/dbus-xml/org.shadowblip.Input.Source.HIDRawDevice.xml
new file mode 100644
index 00000000..b1b78fa6
--- /dev/null
+++ b/bindings/dbus-xml/org.shadowblip.Input.Source.HIDRawDevice.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/composite_device.md b/docs/composite_device.md
new file mode 100644
index 00000000..6b2ab9dc
--- /dev/null
+++ b/docs/composite_device.md
@@ -0,0 +1,92 @@
+# CompositeDevice DBus Interface API
+
+## org.shadowblip.Input.CompositeDevice
+
+### Properties
+
+| Name | Access | Type | Description |
+| --- | :---: | :---: | --- |
+| **DbusDevices** | *read* | *as* | |
+| **InterceptMode** | *readwrite* | *u* | |
+| **Name** | *read* | *s* | |
+| **SourceDevicePaths** | *read* | *as* | |
+| **TargetDevices** | *read* | *as* | |
+
+### Methods
+
+### Signals
+
+## org.freedesktop.DBus.Introspectable
+
+### Methods
+
+#### Introspect
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| \*\*\*\* | *out* | *s* | |
+
+### Signals
+
+## org.freedesktop.DBus.Peer
+
+### Methods
+
+#### Ping
+
+#### GetMachineId
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| \*\*\*\* | *out* | *s* | |
+
+### Signals
+
+## org.freedesktop.DBus.Properties
+
+### Methods
+
+#### Get
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| **property_name** | *in* | *s* | |
+| \*\*\*\* | *out* | *v* | |
+
+#### Set
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| **property_name** | *in* | *s* | |
+| **value** | *in* | *v* | |
+
+#### GetAll
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| \*\*\*\* | *out* | *a{sv}* | |
+
+### Signals
+
+#### PropertiesChanged
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | \*\* | *s* | |
+| **changed_properties** | \*\* | *a{sv}* | |
+| **invalidated_properties** | \*\* | *as* | |
diff --git a/docs/dbus2markdown.xsl b/docs/dbus2markdown.xsl
new file mode 100644
index 00000000..884d99f4
--- /dev/null
+++ b/docs/dbus2markdown.xsl
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# DBus Interface API
+
+##
+
+
+### Properties
+
+| Name | Access | Type | Description |
+| --- | :---: | :---: | --- |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | **** | ** | ** | |
+
+### Methods
+
+
+
+
+
+
+
+
+####
+
+
+
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | **** | ** | ** | |
+
+
+
+
+### Signals
+
+
+
+
+
+
+
+
+####
+
+
+
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+
+
+
+
+
+
+
+
+ | **** | ** | ** | |
+
+
+
+
+
+
+
diff --git a/docs/keyboard.md b/docs/keyboard.md
new file mode 100644
index 00000000..1fa83498
--- /dev/null
+++ b/docs/keyboard.md
@@ -0,0 +1,97 @@
+# Keyboard DBus Interface API
+
+## org.freedesktop.DBus.Properties
+
+### Methods
+
+#### Get
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| **property_name** | *in* | *s* | |
+| \*\*\*\* | *out* | *v* | |
+
+#### Set
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| **property_name** | *in* | *s* | |
+| **value** | *in* | *v* | |
+
+#### GetAll
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| \*\*\*\* | *out* | *a{sv}* | |
+
+### Signals
+
+#### PropertiesChanged
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | \*\* | *s* | |
+| **changed_properties** | \*\* | *a{sv}* | |
+| **invalidated_properties** | \*\* | *as* | |
+
+## org.freedesktop.DBus.Introspectable
+
+### Methods
+
+#### Introspect
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| \*\*\*\* | *out* | *s* | |
+
+### Signals
+
+## org.shadowblip.Input.Keyboard
+
+### Properties
+
+| Name | Access | Type | Description |
+| --- | :---: | :---: | --- |
+| **Name** | *read* | *s* | |
+
+### Methods
+
+#### SendKey
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **key** | *in* | *s* | |
+| **value** | *in* | *b* | |
+
+### Signals
+
+## org.freedesktop.DBus.Peer
+
+### Methods
+
+#### Ping
+
+#### GetMachineId
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| \*\*\*\* | *out* | *s* | |
+
+### Signals
diff --git a/docs/manager.md b/docs/manager.md
new file mode 100644
index 00000000..e34dec02
--- /dev/null
+++ b/docs/manager.md
@@ -0,0 +1,97 @@
+# Manager DBus Interface API
+
+## org.freedesktop.DBus.Peer
+
+### Methods
+
+#### Ping
+
+#### GetMachineId
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| \*\*\*\* | *out* | *s* | |
+
+### Signals
+
+## org.freedesktop.DBus.Introspectable
+
+### Methods
+
+#### Introspect
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| \*\*\*\* | *out* | *s* | |
+
+### Signals
+
+## org.shadowblip.InputManager
+
+### Properties
+
+| Name | Access | Type | Description |
+| --- | :---: | :---: | --- |
+| **InterceptMode** | *read* | *s* | |
+
+### Methods
+
+#### CreateCompositeDevice
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **config_path** | *in* | *s* | |
+| \*\*\*\* | *out* | *s* | |
+
+### Signals
+
+## org.freedesktop.DBus.Properties
+
+### Methods
+
+#### Get
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| **property_name** | *in* | *s* | |
+| \*\*\*\* | *out* | *v* | |
+
+#### Set
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| **property_name** | *in* | *s* | |
+| **value** | *in* | *v* | |
+
+#### GetAll
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| \*\*\*\* | *out* | *a{sv}* | |
+
+### Signals
+
+#### PropertiesChanged
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | \*\* | *s* | |
+| **changed_properties** | \*\* | *a{sv}* | |
+| **invalidated_properties** | \*\* | *as* | |
diff --git a/docs/source_event_device.md b/docs/source_event_device.md
new file mode 100644
index 00000000..550f9e45
--- /dev/null
+++ b/docs/source_event_device.md
@@ -0,0 +1,93 @@
+# Source EventDevice DBus Interface API
+
+## org.freedesktop.DBus.Peer
+
+### Methods
+
+#### Ping
+
+#### GetMachineId
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| \*\*\*\* | *out* | *s* | |
+
+### Signals
+
+## org.freedesktop.DBus.Introspectable
+
+### Methods
+
+#### Introspect
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| \*\*\*\* | *out* | *s* | |
+
+### Signals
+
+## org.shadowblip.Input.Source.EventDevice
+
+### Properties
+
+| Name | Access | Type | Description |
+| --- | :---: | :---: | --- |
+| **DevicePath** | *read* | *s* | |
+| **Handlers** | *read* | *as* | |
+| **Name** | *read* | *s* | |
+| **PhysPath** | *read* | *s* | |
+| **SysfsPath** | *read* | *s* | |
+| **UniqueId** | *read* | *s* | |
+
+### Methods
+
+### Signals
+
+## org.freedesktop.DBus.Properties
+
+### Methods
+
+#### Get
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| **property_name** | *in* | *s* | |
+| \*\*\*\* | *out* | *v* | |
+
+#### Set
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| **property_name** | *in* | *s* | |
+| **value** | *in* | *v* | |
+
+#### GetAll
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| \*\*\*\* | *out* | *a{sv}* | |
+
+### Signals
+
+#### PropertiesChanged
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | \*\* | *s* | |
+| **changed_properties** | \*\* | *a{sv}* | |
+| **invalidated_properties** | \*\* | *as* | |
diff --git a/docs/source_hidraw_device.md b/docs/source_hidraw_device.md
new file mode 100644
index 00000000..dbf20f7b
--- /dev/null
+++ b/docs/source_hidraw_device.md
@@ -0,0 +1,95 @@
+# Source HIDRaw DBus Interface API
+
+## org.freedesktop.DBus.Properties
+
+### Methods
+
+#### Get
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| **property_name** | *in* | *s* | |
+| \*\*\*\* | *out* | *v* | |
+
+#### Set
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| **property_name** | *in* | *s* | |
+| **value** | *in* | *v* | |
+
+#### GetAll
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | *in* | *s* | |
+| \*\*\*\* | *out* | *a{sv}* | |
+
+### Signals
+
+#### PropertiesChanged
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| **interface_name** | \*\* | *s* | |
+| **changed_properties** | \*\* | *a{sv}* | |
+| **invalidated_properties** | \*\* | *as* | |
+
+## org.freedesktop.DBus.Introspectable
+
+### Methods
+
+#### Introspect
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| \*\*\*\* | *out* | *s* | |
+
+### Signals
+
+## org.shadowblip.Input.Source.HIDRawDevice
+
+### Properties
+
+| Name | Access | Type | Description |
+| --- | :---: | :---: | --- |
+| **InterfaceNumber** | *read* | *i* | |
+| **Manufacturer** | *read* | *s* | |
+| **Path** | *read* | *s* | |
+| **Product** | *read* | *s* | |
+| **ProductId** | *read* | *s* | |
+| **ReleaseNumber** | *read* | *s* | |
+| **SerialNumber** | *read* | *s* | |
+| **VendorId** | *read* | *s* | |
+
+### Methods
+
+### Signals
+
+## org.freedesktop.DBus.Peer
+
+### Methods
+
+#### Ping
+
+#### GetMachineId
+
+##### Arguments
+
+| Name | Direction | Type | Description |
+| --- | :---: | :---: | --- |
+| \*\*\*\* | *out* | *s* | |
+
+### Signals