source: mainline/uspace/srv/kbd/arch/ppc32/src/kbd.c@ 06b2b7f

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 06b2b7f was 00acd66, checked in by Jakub Jermar <jakub@…>, 18 years ago

New, better-structured, directory layout for uspace.

  • Property mode set to 100644
File size: 4.6 KB
Line 
1/*
2 * Copyright (c) 2006 Martin Decky
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup kbdppc32 ppc32
30 * @brief HelenOS ppc32 arch dependent parts of uspace keyboard handler.
31 * @ingroup kbd
32 * @{
33 */
34/** @file
35 */
36
37#include <arch/kbd.h>
38#include <ipc/ipc.h>
39#include <sysinfo.h>
40#include <kbd.h>
41#include <keys.h>
42
43irq_cmd_t cuda_cmds[1] = {
44 { CMD_PPC32_GETCHAR, 0, 0, 2 }
45};
46
47irq_code_t cuda_kbd = {
48 1,
49 cuda_cmds
50};
51
52
53#define SPECIAL 255
54#define FUNCTION_KEYS 0x100
55
56
57static int lchars[0x80] = {
58 'a',
59 's',
60 'd',
61 'f',
62 'h',
63 'g',
64 'z',
65 'x',
66 'c',
67 'v',
68 SPECIAL,
69 'b',
70 'q',
71 'w',
72 'e',
73 'r',
74 'y',
75 't',
76 '1',
77 '2',
78 '3',
79 '4',
80 '6',
81 '5',
82 '=',
83 '9',
84 '7',
85 '-',
86 '8',
87 '0',
88 ']',
89 'o',
90 'u',
91 '[',
92 'i',
93 'p',
94 '\n', /* Enter */
95 'l',
96 'j',
97 '\'',
98 'k',
99 ';',
100 '\\',
101 ',',
102 '/',
103 'n',
104 'm',
105 '.',
106 '\t', /* Tab */
107 ' ',
108 '`',
109 '\b', /* Backspace */
110 SPECIAL,
111 SPECIAL, /* Escape */
112 SPECIAL, /* Ctrl */
113 SPECIAL, /* Alt */
114 SPECIAL, /* Shift */
115 SPECIAL, /* Caps-Lock */
116 SPECIAL, /* RAlt */
117 SPECIAL, /* Left */
118 SPECIAL, /* Right */
119 SPECIAL, /* Down */
120 SPECIAL, /* Up */
121 SPECIAL,
122 SPECIAL,
123 '.', /* Keypad . */
124 SPECIAL,
125 '*', /* Keypad * */
126 SPECIAL,
127 '+', /* Keypad + */
128 SPECIAL,
129 SPECIAL, /* NumLock */
130 SPECIAL,
131 SPECIAL,
132 SPECIAL,
133 '/', /* Keypad / */
134 '\n', /* Keypad Enter */
135 SPECIAL,
136 '-', /* Keypad - */
137 SPECIAL,
138 SPECIAL,
139 SPECIAL,
140 '0', /* Keypad 0 */
141 '1', /* Keypad 1 */
142 '2', /* Keypad 2 */
143 '3', /* Keypad 3 */
144 '4', /* Keypad 4 */
145 '5', /* Keypad 5 */
146 '6', /* Keypad 6 */
147 '7', /* Keypad 7 */
148 SPECIAL,
149 '8', /* Keypad 8 */
150 '9', /* Keypad 9 */
151 SPECIAL,
152 SPECIAL,
153 SPECIAL,
154 (FUNCTION_KEYS | 5), /* F5 */
155 (FUNCTION_KEYS | 6), /* F6 */
156 (FUNCTION_KEYS | 7), /* F7 */
157 (FUNCTION_KEYS | 3), /* F3 */
158 (FUNCTION_KEYS | 8), /* F8 */
159 (FUNCTION_KEYS | 9), /* F9 */
160 SPECIAL,
161 (FUNCTION_KEYS | 11), /* F11 */
162 SPECIAL,
163 (FUNCTION_KEYS | 13), /* F13 */
164 SPECIAL,
165 SPECIAL, /* ScrollLock */
166 SPECIAL,
167 (FUNCTION_KEYS | 10), /* F10 */
168 SPECIAL,
169 (FUNCTION_KEYS | 12), /* F12 */
170 SPECIAL,
171 SPECIAL, /* Pause */
172 SPECIAL, /* Insert */
173 SPECIAL, /* Home */
174 SPECIAL, /* PageUp */
175 SPECIAL, /* Delete */
176 (FUNCTION_KEYS | 4), /* F4 */
177 SPECIAL, /* End */
178 (FUNCTION_KEYS | 2), /* F2 */
179 SPECIAL, /* PageDown */
180 (FUNCTION_KEYS | 1) /* F1 */
181};
182
183
184int kbd_arch_init(void)
185{
186 return ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &cuda_kbd);
187}
188
189
190int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
191{
192 int param = IPC_GET_ARG2(*call);
193
194 if (param != -1) {
195 uint8_t scancode = (uint8_t) param;
196
197 if ((scancode & 0x80) != 0x80) {
198 int key = lchars[scancode & 0x7f];
199
200 if (key != SPECIAL)
201 keybuffer_push(keybuffer, key);
202 }
203 }
204
205 return 1;
206}
207
208/** @}
209 */
Note: See TracBrowser for help on using the repository browser.