diff --git a/README.md b/README.md
index 8466f5cf..f2d361bb 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@ PiKVM supports several different hardware configurations, referred to as **platf
All of them uses our common open source software stack.
* **PiKVM V4** and **V3** are our own **plug-and-play, fully assembled, industrial grade, robust** devices.
- Supports **H.264 video & audio** transmission, **host power management**, **mass-storage emulation** and much more.
+ Supports **H.264 video & two-way audio with microphone** transmission, **host power management**, **mass-storage emulation** and much more.
They are really well-made, reliable things which you can use yourself or provide to your clients.
V4 and V3 also have more features than DIY builds.
@@ -101,6 +101,7 @@ All of them uses our common open source software stack.
| **HDMI 1920x1200@60Hz** support
for big displays | ✅ | ✅ | | ❌ | | ❌ | ❌ |
| **HDMI 1920x1080@60Hz** support
for better BIOS/UEFI compatibility | ✅ | ✅ | | ❌ | | ❌ | ❌ |
| **HDMI audio** capture | ✅ | ✅ | | ✅ | | ❌ | ❌ |
+| **Microphone emulation** for two-way audio | ✅ | ✅ | | ✅ | | ❌ | ❌ |
| **Super fast H.264 & MJPEG video:**
720p - 60fps, 1080p - 30fps for H.264 | ✅ | ✅ | | ✅ | | ✅ | ✅ |
||
||
diff --git a/docs/_usb_limits.md b/docs/_usb_limits.md
index 2267fee8..0c0ab18b 100644
--- a/docs/_usb_limits.md
+++ b/docs/_usb_limits.md
@@ -1,54 +1,7 @@
-??? warning "USB limitations"
- **TL;DR: By default, you can add only one additional device to choose from, such as USB Ethernet, or USB Serial, or an extra Mass Storage Drive.**
+!!! info "USB limitations"
- There is a hardware limit on the number of devices that can be emulated at the same time.
- Each USB device uses so-called endpoints to communicate with the host.
- Depending on the type, the device consumes a different number of endpoints,
- while their total number is limited by the capabilities of the chip, **for Raspberry Pi it is 8**.
+ Each emulated USB device consumes a limited hardware resource called **endpoints**.
- It is quite difficult to calculate the number of endpoints used, but in the case of PiKVM,
- you can focus on the following numbers:
+ Short info: by default, you can add only one additional USB device.
- | Device | Endpoints |
- |--------|-----------|
- | Keyboard, mouse | 1 for each |
- | Mass Storage Drive | 2 for each |
- | USB Ethernet, USB Serial | 3 for each |
-
- V2 and V3 emulates one mouse by default, V4 emulates two mouses. Thus, V2 and V3 use 4 endpoints, and V4 uses 5 by default.
-
- Creating an axtra Mass Storage Drive consumes additional endpoints, as well as USB Serial and USB Ethernet,
- so only a limited number of devices can be selected for the final configuration, for example, one USB Ethernet.
-
- If you need something more non-standard, you can [disable the regular Mass Storage Drive](msd.md#disable-msd)
- and the additional mouse (on V4) to free up some extra endpoints.
-
- The `kvmd-otg` service is responsible for setting up USB emulation. If the endpoint limit is exceeded,
- the service will not be able to start and no emulated USB device will work.
-
- In the log it looks something like this:
-
- ```
- # journalctl -u kvmd-otg
- ...
- kvmd-otg[382]: kvmd.apps.otg INFO --- ===== Preparing complete =====
- kvmd-otg[382]: kvmd.apps.otg INFO --- Enabling the gadget ...
- kvmd-otg[382]: kvmd.apps.otg INFO --- WRITE --- /sys/kernel/config/usb_gadget/kvmd/UDC
- kvmd-otg[382]: OSError: [Errno 524] Unknown error 524
- kvmd-otg[382]: During handling of the above exception, another exception occurred:
- kvmd-otg[382]: Traceback (most recent call last):
- kvmd-otg[382]: File "/usr/bin/kvmd-otg", line 9, in
- kvmd-otg[382]: main()
- kvmd-otg[382]: File "/usr/lib/python3.10/site-packages/kvmd/apps/otg/__init__.py", line 348, in main
- kvmd-otg[382]: options.cmd(config)
- kvmd-otg[382]: File "/usr/lib/python3.10/site-packages/kvmd/apps/otg/__init__.py", line 278, in _cmd_start
- kvmd-otg[382]: _write(join(gadget_path, "UDC"), udc)
- kvmd-otg[382]: File "/usr/lib/python3.10/site-packages/kvmd/apps/otg/__init__.py", line 83, in _write
- kvmd-otg[382]: with open(path, "w") as file:
- kvmd-otg[382]: OSError: [Errno 524] Unknown error 524
- systemd[1]: kvmd-otg.service: Main process exited, code=exited, status=1/FAILURE
- systemd[1]: kvmd-otg.service: Failed with result 'exit-code'.
- systemd[1]: Failed to start PiKVM - OTG setup.
- ```
-
- In this case, you need to disable some of the previously enabled devices and restart PiKVM.
+ To get more information about the endpoints, add more devices, and flexibly manage the configuration on the fly, see [here](usb.md).
diff --git a/docs/audio.md b/docs/audio.md
index dfe37b1e..8991dfb2 100644
--- a/docs/audio.md
+++ b/docs/audio.md
@@ -1,91 +1,125 @@
# PiKVM V3+ Audio
-Official PiKVM V3, V4 Mini and V4 Plus devices have an exclusive audio transmission feature.
-Audio is transmitted over an HDMI cable from the target host to PiKVM as if it were a regular monitor
-with speakers, and then from PiKVM to a web browser in [WebRTC video mode](webrtc.md).
-This brings the user experience of working with a remote host even closer to the local one.
+Official [PiKVM V3](v3.md) and [PiKVM V4](v4.md) devices have an exclusive audio transmission feature,
+including **two-way** communication with microphone directly in the browser.
+
+The incoming stream is captured from the target host via HDMI, the outgoing stream is transmitted to an emulated USB microphone.
+This brings the user experience of working with voice applications on the remote host even closer to the local one.
!!! note
- * This feature does not work with DIY devices, either CSI or USB video dongles.
+ * Audio does not work with DIY devices, either CSI or USB video dongles.
- * Reverse audio transmission, that is, from the browser towards PiKVM
- (for example, to emulate a microphone) is not yet supported.
-
- * [VNC](vnc.md) does not support audio, it only works in the Web UI.
+ * [VNC](vnc.md) does not support audio, it only works in the Web UI in [WebRTC](webrtc.md) mode.
-----
-## Preparing
+## Speakers (incoming audio)
-For PiKVM V4, this feature is enabled by default and no special preparations are required.
+* On [PiKVM V4](v4.md), this feature is enabled by default, unless you didn't disable it [with custom EDID](edid.md).
-For PiKVM V3, this feature is disabled by default for historical reasons so as not to break
-old user configurations that were created before audio support was added.
+* On [PiKVM V3](v3.md), this is disabled for historical reasons so as not to break old user's configurations
+ that was created before audio support was introduced.
-??? example "Enabling audio on PiKVM V3"
+ ??? example "Enabling audio on PiKVM V3"
- 1. Make sure that you have not removed the [audio jumpers (4)](v3.md#io-ports-and-jumpers)
- on the V3 HAT board and have not deleted or commented the `dtoverlay=tc358743-audio`
- line in `/boot/config.txt`. Return everything as it was, if you changed it.
+ 1. Make sure that you have not removed the [audio jumpers (4)](v3.md#io-ports-and-jumpers)
+ on the V3 HAT board and have not deleted or commented the `dtoverlay=tc358743-audio`
+ line in `/boot/config.txt`. Return everything as it was, if you changed it.
- 2. Update OS and reboot:
+ 2. Update OS and reboot:
+
+ {!_update_os.md!}
+
+ 3. Enable the Basic Audio support in the [EDID](edid.md) in the `/etc/kvmd/tc358743-edid.hex` and reboot the device again:
+
+ ```console
+ [root@pikvm ~]# rw
+ [root@pikvm ~]# kvmd-edidconf --set-audio=yes
+ [root@pikvm ~]# reboot
+ ```
+
+The target host determines whether it is possible to output audio via HDMI. Each OS does this in its own way.
+In general, make sure that the audio output is HDMI in the mixer.
+PiKVM supports stereo mode with any standard bits and frequencies like 32/44.1/48 kHz with 16/24 bit.
+
+* **Mac OS** usually understands the priority of HDMI for audio output on its own,
+ but you can specify this explicitly in the settings.
+
+* **Windows** requires explicit specifying of the audio output device.
+
+* In **Linux**, everything depends on the distribution you use. In ancient times, the audio required performing
+ a ritual dance under the full Moon. For now, a working Pipewire or Pulseaudio most likely be enough.
+ Just specify HDMI as the audio sink in the mixer.
+
+To receive audio in the PiKVM Web UI, go to the **System** menu and switch the video mode to `WebRTC`.
+If everything is in order, the volume slider will appear. Set the volume to a non-zero value.
+The video stream will restart and you should start hearing sounds from the target host.
+
+
+
+If the volume slider is set to zero, then PiKVM does not accept the audio stream to save traffic,
+while the target host will still assume that the audio output to HDMI is available.
+
+Besides, when the page is reloaded, the volume slider will be reset to zero.
+Saving this setting is not possible due to browser limitation that do not allow web pages to play audio
+immediately after opening without user activity to protect against annoying ads.
+
+
+-----
+## Microphone (outgoing audio)
+
+PiKVM is able to emulate a USB microphone on the target host to transmit your speech from the browser to the host.
+This feature is disabled by default for backward compatibility reasons.
+
+{!_usb_limits.md!}
+
+??? example "Enabling USB Microphone"
+
+ 1. Microphone requires speakers support so check the previous paragraph. Also perform OS updating and reboot if you didn't:
{!_update_os.md!}
- 3. Add the following lines to `/etc/kvmd/janus/janus.plugin.ustreamer.jcfg` if they missing:
-
- ```
- audio: {
- device = "hw:0,0"
- tc358743 = "/dev/kvmd-video"
- }
- ```
-
- 4. Enable the Basic Audio support in the [EDID](edid.md) in the `/etc/kvmd/tc358743-edid.hex`:
+ 2. Switch filesystem to RW-mode:
```console
- [root@pikvm ~]# kvmd-edidconf --set-audio=yes
+ [root@pikvm ~]# rw
```
- 5. Reboot the device:
+ 3. Add a config to `/etc/kvmd/override.yaml`:
+
+ ```yaml
+ otg:
+ devices:
+ audio:
+ enabled: true
+ ```
+
+ 4. Perform reboot:
```console
[root@pikvm ~]# reboot
```
+To receive and transmit audio in the PiKVM Web UI, go to the **System** menu and switch the video mode to `WebRTC`.
+If everything is in order, the volume slider will appear with additional Microphone switch.
+Set the volume to a non-zero value, next switch the mic switch.
+Your browser will ask for permission to use the microphone, allow it.
------
-## Usage
+
-The target host determines whether it is possible to output audio via HDMI. Each OS does this in its own way.
+The switch state will be saved in the browser's local settings.
+The microphone signal will not be transmitted if the volume level is zero.
-* Mac OS usually understands the priority of HDMI for audio output on its own,
- but you can specify this explicitly in the settings.
+!!! warning "USB compatibility"
-* Windows requires explicit specifying of the audio output device.
+ This feature is very new, so we don't know how much it affects the ability to interact with the BIOS and UEFI.
-* In Linux, everything depends on the distribution you use. In ancient times, audio required performing
- a ritual dance on a full moon. For now, a working Pipewire or Pulseaudio most likely be enough.
- Just specify HDMI as the audio sink in the mixer.
+ Please try this and [let us know](https://discord.gg/bpmXfz5) if you have lost the ability to access
+ the BIOS or boot OS from PiKVM Mass Storage after turning on the USB microphone.
-In general, make sure that the audio output is output via HDMI.
-PiKVM supports stereo mode with any standard bits and frequencies like 32/44.1/48 kHz with 16/24 bit.
-
-To receive audio in the PiKVM Web UI, go to the **System** menu and switch the video mode to `H.264 / WebRTC`.
-If everything is in order, the volume slider will appear. Set the volume to a non-zero value.
-The video stream will restart and you should start hearing sounds from the target host.
-
-
-
-!!! note
-
- If the volume slider is set to zero, then PiKVM does not accept the audio stream to save traffic,
- while the target host will still assume that the audio output to HDMI is available.
-
- Besides, when the page is reloaded, the volume slider will be reset to zero.
- Saving this setting is not possible due to browser limitation that do not allow web pages to play audio
- immediately after opening without user activity to protect against annoying ads.
+ But even if this happens, don't worry. You can use [the dynamic USB device control](usb.md)
+ to temporarily turn off the microphone emulation.
-----
diff --git a/docs/audio/menu_mic.png b/docs/audio/menu_mic.png
new file mode 100644
index 00000000..0c526b1d
Binary files /dev/null and b/docs/audio/menu_mic.png differ
diff --git a/docs/audio/menu.png b/docs/audio/menu_speakers.png
similarity index 100%
rename from docs/audio/menu.png
rename to docs/audio/menu_speakers.png
diff --git a/docs/usb.md b/docs/usb.md
new file mode 100644
index 00000000..f25ec8c8
--- /dev/null
+++ b/docs/usb.md
@@ -0,0 +1,193 @@
+# USB configuration
+
+PiKVM V2+ emulates a small set of USB devices to ensure normal operation: a keyboard, [mouse](mouse.md) and [mass storage drive](msd.md).
+However, the possibilities are not limited to this. Optionally, you can add a [USB ethernet](usb_ethernet.md),
+[serial port](usb_serial.md), or (exclusive to [PiKVM V3](v3.md) and [V4](v4.md)) [a microphone to support two-way audio](audio.md).
+
+In rare cases, the target host's BIOS/UEFI may not understand such a large number of emulated devices on single USB port,
+and some of them may need to be disabled.
+
+A complete USB configuration changing (adding or removing devices) requires a reboot, but it is possible
+to temporarily disable and then re-enable existing emulated devices in preset.
+
+
+-----
+## Basics
+
+Each emulated USB device consumes a limited hardware resource called **endpoints**.
+
+Depending on the device, the number of required endpoints varies:
+
+| Device | Endpoints |
+|--------|-----------|
+| Keyboard, mouse | 1 for each |
+| Mass Storage Drive | 2 for each |
+| USB Microphone | 2 |
+| USB Ethernet, USB Serial | 3 for each |
+
+**In total, PiKVM provides 9 endpoints for USB emulation**, some of which are used by default:
+
+* PiKVM V2-V3 emulates one absolute mouse and one mass storage and uses 4 of 9 endpoints.
+
+* PiKVM V4 also adds a relative mouse by default so it uses 5 of 9 endpoints.
+
+You can add other devices remaining endpoints, disable existing ones at all to free some endpoints, or do this only temporarily.
+
+Moreover, you can configure the preset with a large number of devices (more than PiKVM allows by endpoints),
+and then dynamically enable only the necessary ones.
+
+If you have configured too many devices that consume more than 9 endpoints in total,
+the least important of them will be inactive. You can enable them using dynamic configuration.
+
+To configure additional devices, please refer to the corresponding pages:
+
+* [USB Microphone](audio.md) - Two-way audio communication for voice applications on the target host.
+ Exclusive to [PiKVM V3](v3.md) and [V4](v4.md).
+
+* [Absolute and relative mouse](mouse.md) - The most convenient type of mouse is an absolute mouse,
+ but some BIOSes may not understand it. In this case, the relative one will help you.
+
+* [USB Ethernet](usb_ethernet.md) - A FTP or Samba server on PiKVM can be configured, and the target host
+ will see this over the network. It is also possible that PiKVM can work as a router to connect a host to a big network.
+
+* [USB Serial Port](usb_serial.md) - It can be used for terminal access from the target host to the PiKVM,
+ or for any other purpose that requires a serial connection.
+
+
+-----
+## Default preset
+
+Device setup includes two stages: adding to config and starting.
+
+When you add a device as described on the pages above, it automatically turns on after PiKVM reboot
+and becomes available on the target device. This behaviour can be changed: the device will be created,
+but not active until you turn it on dynamically.
+
+The `/etc/kvmd/override.yaml` file is used for such changes. In the following example,
+there are [USB Serial Port](usb_serial.md) and [Microphone](audio.md) enabled,
+but the serial port is not started by default:
+
+```yaml
+otg:
+ devices:
+ serial:
+ enabled: true
+ start: false
+ audio:
+ enabled: true
+```
+
+The `start` parameter is also available for all USB devices, see `kvmd -m` for the entire configuration tree.
+
+
+## Dynamic configuration
+
+
+### Command-line utility
+
+The `kvmd-otgconf` utility allows you to view and modify the USB configuration on the fly.
+
+It will also inform you about the number of endpoints used.
+
+Changing requires root permissions.
+
+View the config. Each line represents an emulated device.
+Plus or minus sign means the state (enabled or not), next it displays the device name,
+the number of required endpoints and its description.
+
+```console
+[root@pikvm ~]# kvmd-otgconf
+# Endpoints used: 7 of 9
+# Endpoints free: 2
+- acm.usb0 # [3] Serial Port
++ hid.usb0 # [1] Keyboard
++ hid.usb1 # [1] Absolute Mouse
++ hid.usb2 # [1] Relative Mouse
++ mass_storage.usb0 # [2] Mass Storage Drive
++ uac2.usb0 # [2] Microphone
+```
+
+Sometimes it happens that it is impossible to get into the UEFI/BIOS due to their bugs in USB support,
+and you need to boot from the PiKVM mass storage.
+
+In this case you can disable all devices except keyboard and relative mouse, and enter the BIOS:
+
+```console
+[root@pikvm ~]# kvmd-otgconf -d mass_storage.usb0 uac2.usb0 hid.usb1
+# Endpoints used: 2 of 9
+# Endpoints free: 7
+- acm.usb0 # [3] Serial Port
+- ecm.usb0 # [3] Ethernet
++ hid.usb0 # [1] Keyboard
+- hid.usb1 # [1] Absolute Mouse
++ hid.usb2 # [1] Relative Mouse
+- mass_storage.usb0 # [2] Mass Storage Drive
+- uac2.usb0 # [2] Microphone
+```
+
+Then change the boot order in the BIOS by setting the USB sticks as first priority.
+
+Exit the BIOS, and turn on mass storage again. Use it as usual to boot the image from PiKVM mass storage:
+
+```console
+[root@pikvm ~]# kvmd-otgconf -e mass_storage.usb0
+# Endpoints used: 4 of 9
+# Endpoints free: 5
+- acm.usb0 # [3] Serial Port
+- ecm.usb0 # [3] Ethernet
++ hid.usb0 # [1] Keyboard
+- hid.usb1 # [1] Absolute Mouse
++ hid.usb2 # [1] Relative Mouse
++ mass_storage.usb0 # [2] Mass Storage Drive
+- uac2.usb0 # [2] Microphone
+```
+
+You can also enable `uac2.usb0` and `hid.usb1` again.
+
+
+### Web UI Menu
+
+Using the pseudo-GPIO driver, you can USB control devices via the menu in the web interface.
+Read about GPIO basics [here](gpio.md).
+
+To setup the menu, use `kvmd-otgconf --make-gpio-config` to generate the configuration, and merge it
+with your existing one in `/etc/kvmd/override.yaml` in a usual way.
+
+??? example "The example of `kvmd-otgconf --make-gpio-config` output"
+ ```yaml
+ # kvmd-otgconf --make-gpio-config
+ kvmd:
+ gpio:
+ drivers:
+ otgconf:
+ type: otgconf
+ scheme:
+ hid.usb0:
+ driver: otgconf
+ mode: output
+ pin: hid.usb0
+ pulse: false
+ hid.usb1:
+ driver: otgconf
+ mode: output
+ pin: hid.usb1
+ pulse: false
+ hid.usb2:
+ driver: otgconf
+ mode: output
+ pin: hid.usb2
+ pulse: false
+ mass_storage.usb0:
+ driver: otgconf
+ mode: output
+ pin: mass_storage.usb0
+ pulse: false
+ view:
+ table:
+ - ["#Keyboard", "#hid.usb0", hid.usb0]
+ - ["#Absolute Mouse", "#hid.usb1", hid.usb1]
+ - ["#Relative Mouse", "#hid.usb2", hid.usb2]
+ - ["#Mass Storage Drive", "#mass_storage.usb0", mass_storage.usb0]
+ ```
+
+Please note that this menu is not dynamically generated, you need to update the configuration if you added or deleted devices.
diff --git a/docs/usb_dynamic.md b/docs/usb_dynamic.md
deleted file mode 100644
index c5d46481..00000000
--- a/docs/usb_dynamic.md
+++ /dev/null
@@ -1,98 +0,0 @@
-# Dynamic USB configuration
-
-PiKVM emulates a number of USB devices to ensure normal operation: keyboards, mouse and mass storage drive.
-Also an additional [relative mouse](mouse.md) may be present (like on PiKVM V4 by default),
-or a user configured [USB Ethernet](usb_ethernet.md) or [Serial port](usb_serial.md).
-
-In rare cases, the host BIOS/UEFI may not understand such a large number of emulated devices on single USB port,
-so some of them may need to be disabled. USB reconfiguration usually requires a reboot, but it is possible
-to temporarily disable already configured existing emulated devices.
-
-!!! warning
- This feature is experimental. Due to the imperfections of the kernel modules, rarely a dynamic configuration change
- can lead to a kernel panic and reboot.
-
- For PiKVM V3 and V4 this is considered more secure because they have two independent watchdog systems
- that can bring devices back to life after a timeout of a few minutes.
-
-
------
-## Command-line utility
-
-The `kvmd-otgconf` utility allows you to view and modify the USB configuration on the fly.
-It requires root permission and can be used for example from a web terminal.
-
-View the config:
-```
-# kvmd-otgconf
-+ hid.usb0 # Keyboard
-+ hid.usb1 # Absolute Mouse
-+ hid.usb2 # Relative Mouse
-+ mass_storage.usb0 # Mass Storage Drive
-```
-Each line represents a device (function). First comes plus or minus sign (the device on or off), then the name of the device and its description.
-
-Disabling the device:
-```
-[root@pikvm ~]# kvmd-otgconf --disable-function mass_storage.usb0
-+ hid.usb0 # Keyboard
-+ hid.usb1 # Absolute Mouse
-+ hid.usb2 # Relative Mouse
-- mass_storage.usb0 # Mass Storage Drive
-```
-
-Enabling the device:
-```
-[root@pikvm ~]# kvmd-otgconf --enable-function mass_storage.usb0
-+ hid.usb0 # Keyboard
-+ hid.usb1 # Absolute Mouse
-+ hid.usb2 # Relative Mouse
-+ mass_storage.usb0 # Mass Storage Drive
-```
-
-
------
-## Web UI menu
-
-Using the pseudo-GPIO driver, you can also control devices via the menu in the web interface.
-Read about GPIO basics [here](gpio.md).
-
-To setup the menu, use `kvmd-otgconf --make-gpio-config` to generate the configuration, and merge it
-with your existing one in `/etc/kvmd/override.yaml` in a usual way.
-
-??? example "The example of `kvmd-otgconf --make-gpio-config` output"
- ```yaml
- # kvmd-otgconf --make-gpio-config
- kvmd:
- gpio:
- drivers:
- otgconf:
- type: otgconf
- scheme:
- hid.usb0:
- driver: otgconf
- mode: output
- pin: hid.usb0
- pulse: false
- hid.usb1:
- driver: otgconf
- mode: output
- pin: hid.usb1
- pulse: false
- hid.usb2:
- driver: otgconf
- mode: output
- pin: hid.usb2
- pulse: false
- mass_storage.usb0:
- driver: otgconf
- mode: output
- pin: mass_storage.usb0
- pulse: false
- view:
- table:
- - ["#Keyboard", "#hid.usb0", hid.usb0]
- - ["#Absolute Mouse", "#hid.usb1", hid.usb1]
- - ["#Relative Mouse", "#hid.usb2", hid.usb2]
- - ["#Mass Storage Drive", "#mass_storage.usb0", mass_storage.usb0]
- ```
diff --git a/docs/usb_serial.md b/docs/usb_serial.md
index aa014bf8..a895003c 100644
--- a/docs/usb_serial.md
+++ b/docs/usb_serial.md
@@ -1,6 +1,6 @@
# Serial-over-USB connection
-Specifically to V2+. This can be used for terminal access from the managed server to the PiKVM, or for any other purpose that requires a serial connection. In the last case, you only need to perform step 1 and reboot.
+Specifically to V2+. This can be used for terminal access from the target host to the PiKVM, or for any other purpose that requires a serial connection. In the last case, you only need to perform step 1 and reboot.
{!_usb_limits.md!}
diff --git a/docs/v3.md b/docs/v3.md
index abaaf083..6c30d4b0 100644
--- a/docs/v3.md
+++ b/docs/v3.md
@@ -96,7 +96,7 @@ If you have a kit without a metal case, you can use our free 3D printing case dr
10. !!! warning "IO ports and other things"
**Before using GPIO** pins to control a relay, KVM switch, or anything else, be sure to [check the HAT pinout](#io-ports-and-jumpers). Many ports are busy with internal functions. Before using them for your own use, you must disable them, otherwise you may damage the device.
-11. Enable [audio forwarding](audio.md){target=_blank} if you want.
+11. Enable [audio speakers and microphone](audio.md){target=_blank} if you want.
12. Configure access to PiKVM from the Internet using [port forwarding](https://docs.pikvm.org/port_forwarding)
or [Tailscale VPN](https://docs.pikvm.org/tailscale), if you need it.
@@ -175,5 +175,5 @@ The standard Raspberry Pi HDMI output (marked as `VIDEO OUT` on the PiKVM case)
## Known issues and limitations
-* There may be **compatibility** issues with some motherboards (such as **HP** or **DELL**) which are the same as those that exist with PiKVM V2. Not everything is perfect, but if you have already used PiKVM V2 - our new V3 will work great and please you. If there is no image from the BIOS, you can fine-tune the HDMI settings, but it is possible that the Mass Storage devices will not be available in the BIOS.
+* There may be **compatibility** issues with some motherboards (such as **HP** or **DELL**) which are the same as those that exist with PiKVM V2. Not everything is perfect, but if you have already used PiKVM V2 - our new V3 will work great and please you. If there is no image from the BIOS, you can fine-tune the HDMI settings, but it is possible that the Mass Storage devices will not be available in the BIOS. In the last case, [USB dynamic configuration](usb.md) will solve the problem.
* Pre-release V3.2 board (NOT Kickstarter/Store edition) doesn't have HDMI backpowering workaround jumper.
diff --git a/docs/v4.md b/docs/v4.md
index 76ce8acd..437434d7 100644
--- a/docs/v4.md
+++ b/docs/v4.md
@@ -63,12 +63,14 @@
If something doesn't work, check out our [FAQ](faq.md) (it's really useful).
If nothing helped, you can get support in our [Discord chat](https://discord.gg/bpmXfz5).
-7. Configure access to PiKVM from the Internet using [port forwarding](https://docs.pikvm.org/port_forwarding)
+7. Enable [microphone for two-way audio](audio.md){target=_blank} if you want.
+
+8. Configure access to PiKVM from the Internet using [port forwarding](https://docs.pikvm.org/port_forwarding)
or [Tailscale VPN](https://docs.pikvm.org/tailscale), if you need it.
-8. **If you are using PiKVM V4 Plus, check out its new exclusive feature: [HDMI Passthrough](pass.md)!**
+9. **If you are using PiKVM V4 Plus, check out its new exclusive feature: [HDMI Passthrough](pass.md)!**
-9. Explore the features of PiKVM using the site's table of contents and have fun!
+10. Explore the features of PiKVM using the site's table of contents and have fun!
-----
@@ -141,5 +143,5 @@ To enable USB 3.0, it is required to flash the USB controller firmware. It's ver
-----
## Known issues and limitations
-* There may be **compatibility** issues with some motherboards (such as **HP** or **DELL**) which are the same as those that exist with PiKVM V2. Not everything is perfect, but if you have already used PiKVM V2 - our new V4 will work great and please you. If there is no image from the BIOS, you can fine-tune the HDMI settings, but it is possible that the Mass Storage devices will not be available in the BIOS.
+* There may be **compatibility** issues with some motherboards (such as **HP** or **DELL**) which are the same as those that exist with PiKVM V2. Not everything is perfect, but if you have already used PiKVM V2 - our new V4 will work great and please you. If there is no image from the BIOS, you can fine-tune the HDMI settings, but it is possible that the Mass Storage devices will not be available in the BIOS. In the last case, [USB dynamic configuration](usb.md) will solve the problem.
* While there is a Mini-PCIe slot in the V4 Plus, this was only designed with the LTE modem with USB lines in mind, therefore if you decide to get a NVME card, it will not work.
diff --git a/mkdocs.yml b/mkdocs.yml
index bc20943c..e97a920e 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -63,6 +63,7 @@ plugins:
"gsm.md": "modem.md"
"3g.md": "modem.md"
"4g.md": "modem.md"
+ "usb_dynamic.md": "usb.md"
nav:
- "Device guides":
@@ -90,8 +91,9 @@ nav:
- "HDMI passthrough": pass.md
- "H.264 / WebRTC": webrtc.md
- "Working with video": video.md
- - "HDMI audio": audio.md
- "Peripheral devices":
+ - "USB configuration": usb.md
+ - "Audio / microphone": audio.md
- "Keyboard & mouse":
- "Mouse modes": mouse.md
- "Mouse jiggler": mouse_jiggler.md
@@ -100,7 +102,6 @@ nav:
- "Mass Storage Drive": msd.md
- "Ethernet-over-USB": usb_ethernet.md
- "Serial-over-USB": usb_serial.md
- - "Dynamic USB configuration": usb_dynamic.md
- "GPIO (pins, relays, lamps, etc)": gpio.md
- "Advanced usage":
- "On-boot configuration": on_boot_config.md