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 |