2 * \file api_drv_keyboard.h
\r
3 * \brief Keyboard Driver Interface Definitions
\r
4 * \author John Hodge (thePowersGang)
\r
6 * \section dirs VFS Layout
\r
7 * Keyboard drivers consist of only a single node, which is a normal file
\r
8 * node with a size of zero. All reads and writes to this node are ignored
\r
9 * (tVFS_Node.Read and tVFS_Node.Write are NULL)
\r
11 #ifndef _API_DRV_KEYBOARD_H
\r
12 #define _API_DRV_KEYBOARD_H
\r
14 #include <api_drv_common.h>
\r
17 * \enum eTplKeyboard_IOCtl
\r
18 * \brief Common Keyboard IOCtl Calls
\r
19 * \extends eTplDrv_IOCtl
\r
21 enum eTplKeyboard_IOCtl {
\r
23 * ioctl(..., int *Rate)
\r
24 * \brief Get/Set Repeat Rate
\r
25 * \param Rate New repeat rate (pointer)
\r
26 * \return Current/New Repeat rate
\r
28 * Gets/Set the repeat rate (actually the time in miliseconds between
\r
29 * repeats) of a held down key.
\r
30 * If the rate is set to zero, repeating will be disabled.
\r
32 KB_IOCTL_REPEATRATE = 4,
\r
35 * ioctl(..., int *Delay)
\r
36 * \brief Get/Set Repeat Delay
\r
37 * \param Delay New repeat delay (pointer)
\r
38 * \return Current/New repeat delay
\r
40 * Gets/Set the time in miliseconds before a key starts repeating
\r
41 * after a key is pressed.
\r
42 * Setting the delay to a negative number will cause the function to
\r
45 KB_IOCTL_REPEATDELAY,
\r
49 * ioctl(..., tKeybardCallback *Callback)
\r
50 * \brief Sets the callback
\r
51 * \note Can be called from kernel mode only
\r
53 * Sets the function to be called when a key event occurs (press, release
\r
54 * or repeat). This function pointer must be in kernel mode (although,
\r
55 * kernel->user or kernel->ring3driver abstraction functions can be used)
\r
57 KB_IOCTL_SETCALLBACK
\r
61 * \brief Symbolic names for Keyboard IOCtls
\r
63 #define DRV_KEYBAORD_IOCTLNAMES "getset_repeat_rate", "getset_repeat_delay", "set_callback"
\r
66 * \brief Callback type for KB_IOCTL_SETCALLBACK
\r
67 * \param Key Unicode character code for the pressed key (with bit 31
\r
68 * set if the key is released)
\r
70 typedef void (*tKeybardCallback)(Uint32 Key);
\r
73 * \brief Symbolic key codes
\r
75 * These key codes represent non-pritable characters and are placed above
\r
76 * the Unicode character space.
\r
77 * If the using driver recieves a key code with the 31st bit set, it means
\r
78 * that that key has been released.
\r
80 enum eTplKeyboard_KeyCodes {
\r
81 KEY_ESC = 0x1B, //!< Escape Character
\r
83 KEY_NP_MASK = 0x40000000, //! Mask for non-printable characters
\r
86 * \name Special Keys
\r
87 * \brief These keys are usually used on their own
\r
91 KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT,
\r
92 KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6,
\r
93 KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12,
\r
94 KEY_NUMLOCK, KEY_SCROLLLOCK,
\r
95 KEY_HOME, KEY_END, KEY_INS, KEY_DEL,
\r
96 KEY_PAUSE, KEY_BREAK,
\r
97 KEY_PGUP, KEY_PGDOWN,
\r
98 KEY_KPENTER, KEY_KPSLASH, KEY_KPMINUS, KEY_KPPLUS, KEY_KPSTAR,
\r
99 KEY_KPHOME, KEY_KPUP, KEY_KPPGUP, KEY_KPLEFT, KEY_KP5, KEY_KPRIGHT,
\r
100 KEY_KPEND, KEY_KPDOWN, KEY_KPPGDN, KEY_KPINS, KEY_KPDEL,
\r
109 * \brief These keye usually alter the character stream sent to the user
\r
112 KEY_MODIFIERS = 0x60000000,
\r
113 KEY_LCTRL, KEY_RCTRL,
\r
114 KEY_LALT, KEY_RALT,
\r
115 KEY_LSHIFT, KEY_RSHIFT,
\r