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 * This function is called when a key is pressed, repeated or released.
\r
58 * If the raw scancode is to be included with the key event, it should precede
\r
61 KB_IOCTL_SETCALLBACK
\r
65 * \brief Symbolic names for Keyboard IOCtls
\r
67 #define DRV_KEYBAORD_IOCTLNAMES "getset_repeat_rate", "getset_repeat_delay", "set_callback"
\r
70 * \brief Callback type for KB_IOCTL_SETCALLBACK
\r
71 * \param Key Key symbol (Unicode or eTplKeyboard_KeyCodes)
\r
73 typedef void (*tKeybardCallback)(Uint32 Key);
\r
76 * \name Callback key flags
\r
77 * \brief Flags for values passed to the callback
\r
80 #define KEY_CODEPOINT_MASK 0x3FFFFFFF
\r
81 #define KEY_ACTION_MASK 0xC0000000
\r
82 #define KEY_ACTION_PRESS 0x00000000 //!< Key pressed
\r
83 #define KEY_ACTION_RELEASE 0x40000000 //!< Key released
\r
84 #define KEY_ACTION_REFIRE 0x80000000 //!< Repeated key
\r
85 #define KEY_ACTION_RAWSYM 0xC0000000 //!< Raw key symbol (comes before a press/repeat/release)
\r
91 * \brief Symbolic key codes
\r
93 * These key codes represent non-pritable characters and are placed above
\r
94 * the Unicode character space.
\r
95 * If the using driver recieves a key code with the 31st bit set, it means
\r
96 * that that key has been released.
\r
98 enum eTplKeyboard_KeyCodes {
\r
99 KEY_ESC = 0x1B, //!< Escape Character
\r
101 KEY_NP_MASK = 0x20000000, //! Mask for non-printable characters
\r
104 * \name Special Keys
\r
105 * \brief These keys are usually used on their own
\r
109 KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT,
\r
110 KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6,
\r
111 KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12,
\r
112 KEY_NUMLOCK, KEY_SCROLLLOCK,
\r
113 KEY_HOME, KEY_END, KEY_INS, KEY_DEL,
\r
114 KEY_PAUSE, KEY_BREAK,
\r
115 KEY_PGUP, KEY_PGDOWN,
\r
116 KEY_KPENTER, KEY_KPSLASH, KEY_KPMINUS, KEY_KPPLUS, KEY_KPSTAR,
\r
117 KEY_KPHOME, KEY_KPUP, KEY_KPPGUP, KEY_KPLEFT, KEY_KP5, KEY_KPRIGHT,
\r
118 KEY_KPEND, KEY_KPDOWN, KEY_KPPGDN, KEY_KPINS, KEY_KPDEL,
\r
119 KEY_LWIN, KEY_RWIN,
\r
128 * \brief These keye usually alter the character stream sent to the user
\r
131 KEY_MODIFIERS = 0x30000000,
\r
132 KEY_LCTRL, KEY_RCTRL,
\r
133 KEY_LALT, KEY_RALT,
\r
134 KEY_LSHIFT, KEY_RSHIFT,
\r