Skip to content

KVM-Control Plus v0.1.0

Choose a tag to compare

@Alihkhawaher Alihkhawaher released this 10 Oct 20:19
· 5 commits to main since this release

First public release.

KVM-Control Plus turns your laptop into a KVM console for another machine:
view its screen through a USB HDMI capture dongle and drive its keyboard and
mouse over a CH9329 serial HID bridge.

Download

KVM-Control-Plus.exe — one file, Windows x64. No installer, no DLL folder,
no runtime to install, and no VC++ redistributable required: the C runtime is
linked statically, so the only libraries it imports are Windows system DLLs.

  • Size: 7.87 MB
  • SHA-256: 784e868d93ffb08c328d72505ac88e04df0e9b7e4887ecb0fdf476ff9453fffc

Run it with no arguments for the GUI. Every diagnostic below is also available
headless.

What's in it

  • Two dependencies, total — eframe (GUI) and windows (all platform
    plumbing). Serial I/O, video capture, settings, input hooks and USB link
    measurement are hand-rolled over Win32; no serialport, nokhwa, image, serde,
    anyhow or channel crate. Build dependencies hold to the same rule: the icon
    and version resources are compiled by driving the SDK's rc.exe directly
    instead of depending on winres.
  • A Devices tab that explains itself. It reports which USB mode the capture
    link negotiated — measured from the USB hub via
    IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX[_V2], not inferred — how much
    throughput that leaves, and every format the device offers marked with whether
    it physically fits. Uncompressed 1080p needs 155–207 MB/s against the ~40 MB/s
    a USB 2.0 link carries, so only MJPEG can work there; pick an uncompressed
    format and the device streams filler frames forever. The app says so.
  • CH9329 protocol layer that is pure and byte-exact tested, a hand-rolled
    serial port and SetupAPI enumeration, a VK→HID keymap with layout-aware
    translation, and an input thread with its own hidden window and Raw Input.
  • Headless diagnostics that found everything above: --list-devices,
    --list-formats, --probe, --usb, --snapshot, --raw-probe,
    --grab-native.

Known limitations

  • A live moving picture is not verified end-to-end. Everything up to and
    including "valid JPEG bytes arrive at the expected buffer size" is confirmed
    against real hardware; a moving image has not been observed in-app, because
    the HDMI source was asleep during every test session. See
    docs/CAPTURE_DIAGNOSIS.md.
  • The capture format must be chosen manually. On a USB 2.0 link the app warns
    loudly when an unfittable format is selected, but it does not yet refuse or
    auto-switch to MJPEG.
  • Mouse control is absolute-position only; relative (game) mode is not wired up.
  • Macros and clipboard/file transfer are not implemented.

Documentation

docs/CAPTURE_DIAGNOSIS.md — the full measured investigation into black
pictures (two independent causes, distinguished by evidence).
docs/CODE_MAP.md — every module and the rules that keep the project lean.
docs/TODO.md — what is done, verified, and next.

A Rust rewrite inspired by the C#/WinUI3 Control3.