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. cu -- --------------------------------------------------------------------- Enrico Weigelt == metux IT service - http://www.metux.de/ --------------------------------------------------------------------- Please visit the OpenSource QM Taskforce: http://wiki.metux.de/public/OpenSource_QM_Taskforce Patches / Fixes for a lot dozens of packages in dozens of versions: http://patches.metux.de/ --------------------------------------------------------------------- _______________________________________________ gpm mailing list gpm@xxxxxxxxxxxxxx http://lists.linux.it/listinfo/gpm