Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: add keyboard notifier documentation

Document the keyboard notifier.

Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
SIgned-off-by: Dmitry Torokhov <dtor@mail.ru>

authored by

Samuel Thibault and committed by
Dmitry Torokhov
e32f7ee8 05be5fc4

+52
+52
Documentation/input/notifier.txt
··· 1 + Keyboard notifier 2 + 3 + One can use register_keyboard_notifier to get called back on keyboard 4 + events (see kbd_keycode() function for details). The passed structure is 5 + keyboard_notifier_param: 6 + 7 + - 'vc' always provide the VC for which the keyboard event applies; 8 + - 'down' is 1 for a key press event, 0 for a key release; 9 + - 'shift' is the current modifier state, mask bit indexes are KG_*; 10 + - 'value' depends on the type of event. 11 + 12 + - KBD_KEYCODE events are always sent before other events, value is the keycode. 13 + - KBD_UNBOUND_KEYCODE events are sent if the keycode is not bound to a keysym. 14 + value is the keycode. 15 + - KBD_UNICODE events are sent if the keycode -> keysym translation produced a 16 + unicode character. value is the unicode value. 17 + - KBD_KEYSYM events are sent if the keycode -> keysym translation produced a 18 + non-unicode character. value is the keysym. 19 + - KBD_POST_KEYSYM events are sent after the treatment of non-unicode keysyms. 20 + That permits one to inspect the resulting LEDs for instance. 21 + 22 + For each kind of event but the last, the callback may return NOTIFY_STOP in 23 + order to "eat" the event: the notify loop is stopped and the keyboard event is 24 + dropped. 25 + 26 + In a rough C snippet, we have: 27 + 28 + kbd_keycode(keycode) { 29 + ... 30 + params.value = keycode; 31 + if (notifier_call_chain(KBD_KEYCODE,&params) == NOTIFY_STOP) 32 + || !bound) { 33 + notifier_call_chain(KBD_UNBOUND_KEYCODE,&params); 34 + return; 35 + } 36 + 37 + if (unicode) { 38 + param.value = unicode; 39 + if (notifier_call_chain(KBD_UNICODE,&params) == NOTIFY_STOP) 40 + return; 41 + emit unicode; 42 + return; 43 + } 44 + 45 + params.value = keysym; 46 + if (notifier_call_chain(KBD_KEYSYM,&params) == NOTIFY_STOP) 47 + return; 48 + apply keysym; 49 + notifier_call_chain(KBD_POST_KEYSYM,&params); 50 + } 51 + 52 + NOTE: This notifier is usually called from interrupt context.