The protocol is little endian. Each event is prefixed by 9 null bytes, and an event type, which is 1 byte. A key-press event would look like this: 0 0 0 0 0 0 0 0 0 1 5 * 9 padding nulls, 1 = event id (keyboard), 5 = button HEARTBEAT (1): * no data KEYBOARD (2): * uint8 pressed: If the button is pressed (1) or released (0) * uint8 keycode: The keycode of the button MOUSE_MOVE (3): * int32 x: Relative X movement (negative numbers move to the left) * int32 y: Relative Y movement (negative numbers move to the top) MOUSE_PRESS (4): * uint8 pressed: If the button is pressed (1) or released (0) * uint8 keycode: The keycode of the button MOUSE_WHEEL (5): * int32 x: Wheel X roll (negative numbers move to the left) * int32 y: Wheel Y roll (negative numbers move to the top)