-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
Samuel Thibault
authored and
Dmitry Torokhov
committed
Mar 14, 2008
1 parent
05be5fc
commit e32f7ee
Showing
1 changed file
with
52 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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_*; | ||
- '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 one to inspect the resulting LEDs for instance. | ||
|
||
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. | ||
|
||
In a rough C snippet, we have: | ||
|
||
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. |