Network protocol used by GfxTablet



Version 2
---------

GfxTablet app sends UDP packets to port 40118 of the destination host.

Packet structure, uses network byte order (big endian):

  9  bytes             "GfxTablet"
  1  unsigned int16     version number
  1  byte             event type:
                        0: motion event (hovering)
                        1: button event (finger, pen etc. touches surface)

  1  unsigned int16     x (using full range: 0..65535)
  1  unsigned int16     y (using full range: 0..65535)
  1  unsigned int16     pressure (accepting full range 0..65535, but will clip to 32768 == pressure 1.0f on Android device)

  when type == button event:
  1  signed int8     button id:
                       -1: stylus in range pseudo-button
                        0: left click / stylus in contact / button 0
                        1: extra button 1
                        2: extra button 2
  1  byte             button status:
                        0 button is released ("up")
                        1 button is pressed ("down")

XInput will ignore BTN_TOUCH events if they are not preceeded by
a BTN_TOOL_PEN event -- this would never happen for a real stylus,
because it would imply the stylus is touching the pad, yet too far
away from the pad to be detected.

A GfxTablet client must therefore be careful to send a "Button -1
down" event before a "Button 0 down" event, to emulate this
behaviour. If they are faking these events, they'll probably want
to likewise send a "Button -1 up" event after a "Button 0 up" event.
