Skip to content

HID Mouse

A standard 5-button mouse with vertical and horizontal scroll wheels. Reports relative motion deltas.

Use mouse as the device type when adding a device via the API or client libraries.

Client Library Support

The wire protocol is abstracted by client libraries.
The Go client includes built-in types (/device/mouse), and generated client libraries provide equivalent structures with proper packing.

You don't need to manually construct packets, just use the provided types and send them via the device stream.

See: API Reference

(RAW) Streaming protocol

The device stream is a bidirectional, raw TCP connection with fixed-size packets.

Input State

  • 9-byte packets, little-endian layout:
    • Buttons: uint8 (1 byte, bitfield) — bits 0..4 for buttons 1..5
    • X delta: int16 (2 bytes), -32768 to +32767
    • Y delta: int16 (2 bytes), -32768 to +32767
    • Vertical wheel: int16 (2 bytes), positive = up
    • Horizontal wheel/pan: int16 (2 bytes), positive = right

Motion and wheel deltas are consumed after each report and reset; buttons persist until changed.

See /device/mouse/inputstate.go for details.

API

Function Description
CreateMouseDevice(serverHandle, &handle, busID, autoAttach, vid, pid) Create a virtual HID mouse
SetMouseDeviceState(handle, state) Push an input state to the device
RemoveMouseDevice(handle) Remove the device

Input state

typedef struct {
    uint8_t Buttons;
    int16_t DX;
    int16_t DY;
    int16_t Wheel;
    int16_t Pan;
} MouseDeviceState;

DX, DY, Wheel and Pan are relative values consumed once per poll cycle.

Button flags

Constant Value
MOUSE_BUTTON_LEFT 0x01
MOUSE_BUTTON_RIGHT 0x02
MOUSE_BUTTON_MIDDLE 0x04
MOUSE_BUTTON_4 0x08
MOUSE_BUTTON_5 0x10