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