On Sat, 9 Feb 2008 01:33:22 +0000 Samuel Thibault wrote: > Document the keyboard notifier. > > Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> > > --- /dev/null 2008-02-09 01:22:34.790011677 +0000 > +++ linux/Documentation/input/notifier.txt 2008-02-09 01:28:12.000000000 +0000 > @@ -0,0 +1,52 @@ > +Keyboard notifier > + > +One can use register_keyboard_notifier to get called back on keyboard > +events (see kbd_keycode() function for details). The passed structure is > +keyboard_notifier_param: > + > +- 'vc' always provide the VC for which the keyboard event applies ; > +- 'down' is 1 for a key press event, 0 for a key release ; > +- 'shift' is the current modifier state, mask bit indexes are KG_* ; No space before the ';' (3 times). > +- 'value' depends on the type of event. > + > +- KBD_KEYCODE events are always sent before other events, value is the keycode. > +- KBD_UNBOUND_KEYCODE events are sent if the keycode is not bound to a keysym. > + value is the keycode. > +- KBD_UNICODE events are sent if the keycode -> keysym translation produced a > + unicode character. value is the unicode value. > +- KBD_KEYSYM events are sent if the keycode -> keysym translation produced a > + non-unicode character. value is the keysym. > +- KBD_POST_KEYSYM events are sent after the treatment of non-unicode keysyms. > + That permits to inspect the resulting LEDs for instance. That permits (some object word here, like: you, one, code, etc.) to inspect ... > + > +For each kind of event but the last, the callback may return NOTIFY_STOP in > +order to "eat" the event: the notify loop is stopped and the keyboard event is > +dropped. > + > +I a rough C snippet, we have: In a rough (?) > + > +kbd_keycode(keycode) { > + ... > + params.value = keycode; > + if (notifier_call_chain(KBD_KEYCODE,¶ms) == NOTIFY_STOP) > + || !bound) { > + notifier_call_chain(KBD_UNBOUND_KEYCODE,¶ms); > + return; > + } > + > + if (unicode) { > + param.value = unicode; > + if (notifier_call_chain(KBD_UNICODE,¶ms) == NOTIFY_STOP) > + return; > + emit unicode; > + return; > + } > + > + params.value = keysym; > + if (notifier_call_chain(KBD_KEYSYM,¶ms) == NOTIFY_STOP) > + return; > + apply keysym; > + notifier_call_chain(KBD_POST_KEYSYM,¶ms); > +} > + > +NOTE: This notifier is usually called from interrupt context. > -- --- ~Randy - To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html