57ca247e257d190c523c8ac90701e0b7f9413c8f
[tpg/acess2.git] / KernelLand / Kernel / include / api_drv_keyboard.h
1 /**\r
2  * \file api_drv_keyboard.h\r
3  * \brief Keyboard Driver Interface Definitions\r
4  * \author John Hodge (thePowersGang)\r
5  * \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
10  */\r
11 #ifndef _API_DRV_KEYBOARD_H\r
12 #define _API_DRV_KEYBOARD_H\r
13 \r
14 #include <api_drv_common.h>\r
15 \r
16 /**\r
17  * \enum eTplKeyboard_IOCtl\r
18  * \brief Common Keyboard IOCtl Calls\r
19  * \extends eTplDrv_IOCtl\r
20  */\r
21 enum eTplKeyboard_IOCtl {\r
22         /**\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
27          * \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
31          */\r
32         KB_IOCTL_REPEATRATE = 4,\r
33         \r
34         /**\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
39          * \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
43          * return -1\r
44          */\r
45         KB_IOCTL_REPEATDELAY,\r
46         \r
47         \r
48         /**\r
49          * ioctl(..., tKeybardCallback *Callback)\r
50          * \brief Sets the callback\r
51          * \note Can be called from kernel mode only\r
52          * \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
56          *\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
59          * the event.\r
60          */\r
61         KB_IOCTL_SETCALLBACK\r
62 };\r
63 \r
64 /**\r
65  * \brief Symbolic names for Keyboard IOCtls\r
66  */\r
67 #define DRV_KEYBAORD_IOCTLNAMES "getset_repeat_rate", "getset_repeat_delay", "set_callback"\r
68 \r
69 /**\r
70  * \brief Callback type for KB_IOCTL_SETCALLBACK\r
71  * \param Key   Key symbol (Unicode or eTplKeyboard_KeyCodes)\r
72  */\r
73 typedef void (*tKeybardCallback)(Uint32 Key);\r
74 \r
75 /**\r
76  * \name Callback key flags\r
77  * \brief Flags for values passed to the callback\r
78  * \{\r
79  */\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
86 /**\r
87  * \}\r
88  */\r
89 \r
90 /**\r
91  * \brief Symbolic key codes\r
92  * \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
97  */\r
98 enum eTplKeyboard_KeyCodes {\r
99         KEY_ESC = 0x1B, //!< Escape Character\r
100         \r
101         KEY_NP_MASK = 0x20000000,       //! Mask for non-printable characters\r
102         \r
103         /**\r
104          * \name Special Keys\r
105          * \brief These keys are usually used on their own\r
106          * \{\r
107          */\r
108         KEY_CAPSLOCK,\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
120         KEY_MENU,\r
121         /**\r
122          * \}\r
123          */\r
124         \r
125         // Modifiers\r
126         /**\r
127          * \name Modifiers\r
128          * \brief These keye usually alter the character stream sent to the user\r
129          * \{\r
130          */\r
131         KEY_MODIFIERS = 0x30000000,\r
132         KEY_LCTRL, KEY_RCTRL,\r
133         KEY_LALT, KEY_RALT,\r
134         KEY_LSHIFT, KEY_RSHIFT,\r
135         /**\r
136          * \}\r
137          */\r
138 };\r
139 \r
140 \r
141 #endif\r

UCC git Repository :: git.ucc.asn.au