[gpm] RFC: new event protocol

Enrico Weigelt weigelt@metux.de
Fri Oct 9 04:01:38 CEST 2009

Hi folks,

as I already said, I'm going to make gpm a little 9P server,
which also provides some event file/stream sending the mouse
events in ascii text lines.

The protocol should not just handle mice, but quite any kind 
of positioning device (joysticks, touchpanel, gradometer, 
gps, velocitymeter, gyrometer, etc).

Here's little start for the proto spec:

* text-based pipe stream (readonly)
* one line per message, starting with msg class
* multiple mice/josticks/gyros/etc supported (ptr-id)
* protocol could be extended for keyboards later
* id's are C-alike identifiers or numbers
* message structure: <timestamp> <msg-class> <parameters...> 

Msg class: BUTTON - button pressed, etc

    BUTTON <ptr-id> <btn-id> [up|down|click] <modifier>

    * subsequent down+up (w/o intermediate movement) followed by click
      (application doesnt have to detect clicks on its own)
Msg class: MOVE

    MOVE <ptr-id> <axis-id> [linear|logarithmic|angle] <rel-pos> <abs-pos>

    * if the abs pos is unknown, an asterisk is sent
    * pure absolute pos.devs. calculate relpos on their own

Msg class: CONNECT

    CONNECT <ptr-id> <axis-id> [on|off]

    * only used if some axis or a whole pointer gets disconnected and
      tracked abspos might be lost
    * on "CONNECT on", an move with the assumed abs pos should be sent

Device class: Mouse

    * linear coords, positions are device/config dependent 
      (acc.factor, etc)
    * simple movement produces MOVE messages, buttons produce BUTTON messages
    * axis-ids: are X and Y, optional wheel for Z
    * CONNECT should not happen

Device class: Touchpad/Touchscreen/Lightpen (when not in mouse emulation)

    * has abs and rel coords
    * simple touch produces MOVE to the touched position
    * tapping produces MOVE and BUTTON click message
    * the first button (tapping) most likely has no up/down messages
    * additional send may produce BUTTON messages

Device class: Joystick (when not in mouse emulation)

    * has abs and rel coords (might be linear or angle)
    * MOVE messages are sent when stick position changes
    * BUTTON messages just like on mice
Device class: Radial field sensor (gravitometer, dradius, etc)
    * has 2 radial and 1 (or more) scalar cords, rel and/or abs
    * radial coords are floats in range [0..2pi]
    * multiple contacts (eg. different forces or sensed objects)
      are represented by different ptr-ids
    * contact found/lost notified via CONNECT

Device class: keyboard

    * no MOVE messages, only BUTTON (up/down/click)
    * simple keyb input just checks for BUTTON click

All these device classes (except keyboard) should be mappable to 
others , at least to some generic (mouse-alike) pointing device.

Well, should be enough for now. Comments/suggestions appreciated.

 Enrico Weigelt    ==   metux IT service - http://www.metux.de/
 Please visit the OpenSource QM Taskforce:
 Patches / Fixes for a lot dozens of packages in dozens of versions:

More information about the gpm mailing list