Open protocol
SuperKVM USB KVM open protocol—CH9329-compatible HID framing plus extension commands for OTA, U-disk switching, and settings.
SuperKVM USB KVM Open Protocol Answer first: SuperKVM USB KVM keyboard/mouse control is CH9329 compatible so existing open source clients can often be adapted quickly. Separate SuperKVM extension commands cover OTA, U disk switching, device info, and toggles. The host exposes a USB virtual CDC serial port; prefer a high baud rate such as 2M. Our USB KVM open protocol has two parts The first part covers the generic keyboard and mouse protocol. To make it easier for third party developers to reuse and extend this stack, we follow the CH9329 framing so existing open source CH9329 control code can often be adapted quickly for our KVM products The second part is our KVM extension protocol. It covers everything beyond keyboard and mouse traffic, such as OTA, USB disk switching, device information reads, and assorted toggle settings UART baud rate Because the SuperKVM USB KVM host side exposes a USB virtual CDC serial port , baud rates from 9600 through 6M are supported. We recommend 2M baud or the highest rate your toolchain tolerates CH9329 framing Field layout Offset Field Length Notes 0 HEAD1 1 Fixed 0x57 1 HEAD2 1 Fixed 0xAB 2 ADDR 1 Device address, default 0x00 in firmware 3 CMD 1 Command byte (see the detailed protocol PDF) 4 LEN 1 Number of DATA bytes that follow 5 DATA LEN Payload semantics per the detailed protocol PDF 5+LEN SUM 1 Checksum: byte wise sum from HEAD1 through the last DATA byte, then & 0xFF Only three commands are implemented today: Keyboard (CMD= 0x02 ) Absolute mouse (CMD= 0x04 ) Relative mouse (CMD= 0x05 ) The MCU handles those three control frames but does not emit responses for UART efficiency. Reach out to technical support if you need acknowledgement semantics Full CH9329 documentation: CH9329 protocol PDF SuperKVM extension frames For consistency, extensions reuse the CH9329 style header while redefining the trailing fields Field layout Wire order ( HEAD appears as bytes 57 AB , i.e. big endian 0x57AB ; later numeric fields are mostly little endian ): Offset Field Length Endianness Notes 0 head 2 literal bytes 0x57 , 0xAB When interpreted as uint16 under little endian memory layout the value reads 0xAB57 , but logically this remains an extension frame (see §3.3) 2 channel 1 — Mirrors the ADDR slot from CH9329 framing 3 sn 4 LE Sequence number 7 total len 4 LE TLV length : type(2) + len(4) + payload , i.e. 6 + payload bytes ( create protocol packet ) 11 type 2 LE Sub command 13 len 4 LE Payload length ( total len = 6 + len ) 17 payload len — Application data 17+len CRC 4 LE See CRC algorithm below The third byte carries the channel ID : 0 selects the CH9329 compatible path, any other value selects the extension stack CRC algorithm JavaScript style pseudocode C implementation channel ( CH ID ) values Value (hex) Macro Meaning Typical usage 00 CH ID CH9329 CH9329 lane Keyboard/mouse compatibility 01 CH ID DEVICE Device info & control Firmware version, USB disk switching, etc. 02 CH ID OTA OTA Bootloader and application upgrades 03 CH ID EXT PERIPHERAL Peripheral expansion Hardware control for external modules 04 CH ID SHELL Shell passthrough Bidirectional shell traffic when the device exposes a shell 05 CH ID LOG Logs Stream KVM runtime logs to the web UI Sub protocols per channel Still being documented. Contact technical support if you need urgent detail
Canonical: https://wiki.superkvm.com/en-US/open/protocol · Marketing: https://www.superkvm.com · GitHub: https://github.com/superkvm