Rev 1787 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1787 | Rev 1874 | ||
---|---|---|---|
1 | /* |
1 | /* |
2 | * Copyright (C) 2006 Josef Cejka |
2 | * Copyright (C) 2006 Josef Cejka |
3 | * All rights reserved. |
3 | * All rights reserved. |
4 | * |
4 | * |
5 | * Redistribution and use in source and binary forms, with or without |
5 | * Redistribution and use in source and binary forms, with or without |
6 | * modification, are permitted provided that the following conditions |
6 | * modification, are permitted provided that the following conditions |
7 | * are met: |
7 | * are met: |
8 | * |
8 | * |
9 | * - Redistributions of source code must retain the above copyright |
9 | * - Redistributions of source code must retain the above copyright |
10 | * notice, this list of conditions and the following disclaimer. |
10 | * notice, this list of conditions and the following disclaimer. |
11 | * - Redistributions in binary form must reproduce the above copyright |
11 | * - Redistributions in binary form must reproduce the above copyright |
12 | * notice, this list of conditions and the following disclaimer in the |
12 | * notice, this list of conditions and the following disclaimer in the |
13 | * documentation and/or other materials provided with the distribution. |
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 |
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. |
15 | * derived from this software without specific prior written permission. |
16 | * |
16 | * |
17 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
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 |
18 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
19 | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
19 | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
20 | * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
20 | * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
21 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
21 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
22 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
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 |
23 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
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 |
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. |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | */ |
27 | */ |
28 | 28 | ||
29 | /** @addtogroup kbdmips32 mips32 |
29 | /** @addtogroup kbdmips32 mips32 |
30 | * @brief HelenOS mips32 arch dependent parts of uspace keyboard handler. |
30 | * @brief HelenOS mips32 arch dependent parts of uspace keyboard handler. |
31 | * @ingroup kbd |
31 | * @ingroup kbd |
32 | * @{ |
32 | * @{ |
33 | */ |
33 | */ |
34 | /** @file |
34 | /** @file |
35 | */ |
35 | */ |
36 | #include <arch/kbd.h> |
36 | #include <arch/kbd.h> |
37 | #include <ipc/ipc.h> |
37 | #include <ipc/ipc.h> |
38 | #include <sysinfo.h> |
38 | #include <sysinfo.h> |
39 | #include <kbd.h> |
39 | #include <kbd.h> |
40 | #include <keys.h> |
40 | #include <keys.h> |
41 | 41 | ||
42 | #define MSIM_KEY_F1 0x504f1bL |
42 | #define MSIM_KEY_F1 0x504f1bL |
43 | #define MSIM_KEY_F2 0x514f1bL |
43 | #define MSIM_KEY_F2 0x514f1bL |
44 | #define MSIM_KEY_F3 0x524f1bL |
44 | #define MSIM_KEY_F3 0x524f1bL |
45 | #define MSIM_KEY_F4 0x534f1bL |
45 | #define MSIM_KEY_F4 0x534f1bL |
46 | #define MSIM_KEY_F5 0x35315b1bL |
46 | #define MSIM_KEY_F5 0x35315b1bL |
47 | #define MSIM_KEY_F6 0x37315b1bL |
47 | #define MSIM_KEY_F6 0x37315b1bL |
48 | #define MSIM_KEY_F7 0x38315b1bL |
48 | #define MSIM_KEY_F7 0x38315b1bL |
49 | #define MSIM_KEY_F8 0x39315b1bL |
49 | #define MSIM_KEY_F8 0x39315b1bL |
50 | #define MSIM_KEY_F9 0x30325b1bL |
50 | #define MSIM_KEY_F9 0x30325b1bL |
51 | #define MSIM_KEY_F10 0x31325b1bL |
51 | #define MSIM_KEY_F10 0x31325b1bL |
52 | #define MSIM_KEY_F11 0x33325b1bL |
52 | #define MSIM_KEY_F11 0x33325b1bL |
53 | #define MSIM_KEY_F12 0x34325b1bL |
53 | #define MSIM_KEY_F12 0x34325b1bL |
54 | 54 | ||
55 | - | ||
56 | #define GXEMUL_KEY_F1 0x504f5b1bL |
55 | #define GXEMUL_KEY_F1 0x504f5b1bL |
57 | #define GXEMUL_KEY_F2 0x514f5b1bL |
56 | #define GXEMUL_KEY_F2 0x514f5b1bL |
58 | #define GXEMUL_KEY_F3 0x524f5b1bL |
57 | #define GXEMUL_KEY_F3 0x524f5b1bL |
59 | #define GXEMUL_KEY_F4 0x534f5b1bL |
58 | #define GXEMUL_KEY_F4 0x534f5b1bL |
60 | #define GXEMUL_KEY_F5 0x35315b1bL |
59 | #define GXEMUL_KEY_F5 0x35315b1bL |
61 | #define GXEMUL_KEY_F6 0x37315b1bL |
60 | #define GXEMUL_KEY_F6 0x37315b1bL |
62 | #define GXEMUL_KEY_F7 0x38315b1bL |
61 | #define GXEMUL_KEY_F7 0x38315b1bL |
63 | #define GXEMUL_KEY_F8 0x39315b1bL |
62 | #define GXEMUL_KEY_F8 0x39315b1bL |
64 | #define GXEMUL_KEY_F9 0x38325b1bL |
63 | #define GXEMUL_KEY_F9 0x38325b1bL |
65 | #define GXEMUL_KEY_F10 0x39325b1bL |
64 | #define GXEMUL_KEY_F10 0x39325b1bL |
66 | #define GXEMUL_KEY_F11 0x33325b1bL |
65 | #define GXEMUL_KEY_F11 0x33325b1bL |
67 | #define GXEMUL_KEY_F12 0x34325b1bL |
66 | #define GXEMUL_KEY_F12 0x34325b1bL |
68 | 67 | ||
69 | - | ||
70 | #define FUNCTION_KEYS 0x100 |
68 | #define FUNCTION_KEYS 0x100 |
71 | 69 | ||
72 | - | ||
73 | irq_cmd_t msim_cmds[1] = { |
70 | irq_cmd_t msim_cmds[1] = { |
74 | { CMD_MEM_READ_1, (void *)0xB0000000, 0, 2 } |
71 | { CMD_MEM_READ_1, (void *)0xB0000000, 0, 2 } |
75 | }; |
72 | }; |
76 | 73 | ||
77 | irq_code_t msim_kbd = { |
74 | irq_code_t msim_kbd = { |
78 | 1, |
75 | 1, |
79 | msim_cmds |
76 | msim_cmds |
80 | }; |
77 | }; |
81 | 78 | ||
82 | static int msim,gxemul; |
79 | static int msim,gxemul; |
83 | static int fb_fb; |
80 | static int fb_fb; |
84 | 81 | ||
85 | 82 | ||
86 | int kbd_arch_init(void) |
83 | int kbd_arch_init(void) |
87 | { |
84 | { |
88 | fb_fb=sysinfo_value("fb.kind")==1; |
85 | fb_fb = (sysinfo_value("fb.kind") == 1); |
89 | ipc_register_irq(2, &msim_kbd); |
86 | ipc_register_irq(2, &msim_kbd); |
90 | return 0; |
87 | return 0; |
91 | } |
88 | } |
92 | 89 | ||
93 | 90 | ||
94 | /* |
91 | /* |
95 | //* |
92 | //* |
96 | //* Please preserve this code (it can be used to determine scancodes) |
93 | //* Please preserve this code (it can be used to determine scancodes) |
97 | //* |
94 | //* |
98 | int to_hex(int v) |
95 | int to_hex(int v) |
99 | { |
96 | { |
100 | return "0123456789ABCDEF"[v]; |
97 | return "0123456789ABCDEF"[v]; |
101 | } |
98 | } |
102 | */ |
99 | */ |
103 | 100 | ||
104 | static int kbd_arch_process_no_fb(keybuffer_t *keybuffer, int scan_code) |
101 | static int kbd_arch_process_no_fb(keybuffer_t *keybuffer, int scan_code) |
105 | { |
102 | { |
106 | 103 | ||
107 | static unsigned long buf=0; |
104 | static unsigned long buf = 0; |
108 | static int count=0; |
105 | static int count = 0; |
109 | - | ||
110 | 106 | ||
111 | /* Please preserve this code (it can be used to determine scancodes) |
107 | /* Please preserve this code (it can be used to determine scancodes) |
112 | |
108 | |
113 | keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf)); |
109 | keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf)); |
114 | keybuffer_push(keybuffer, to_hex(scan_code&0xf)); |
110 | keybuffer_push(keybuffer, to_hex(scan_code&0xf)); |
115 | keybuffer_push(keybuffer, ' '); |
111 | keybuffer_push(keybuffer, ' '); |
116 | keybuffer_push(keybuffer, ' '); |
112 | keybuffer_push(keybuffer, ' '); |
117 | |
113 | |
118 | return 1; |
114 | return 1; |
119 | */ |
115 | */ |
120 | 116 | ||
121 | if(scan_code==0x7e) |
117 | if(scan_code == 0x7e) { |
122 | { |
- | |
123 | switch (buf){ |
118 | switch (buf) { |
124 | case MSIM_KEY_F5: |
119 | case MSIM_KEY_F5: |
125 | keybuffer_push(keybuffer,FUNCTION_KEYS | 5 ); |
120 | keybuffer_push(keybuffer,FUNCTION_KEYS | 5); |
126 | buf=count=0; |
121 | buf = count = 0; |
127 | return 1; |
122 | return 1; |
128 | case MSIM_KEY_F6: |
123 | case MSIM_KEY_F6: |
129 | keybuffer_push(keybuffer,FUNCTION_KEYS | 6 ); |
124 | keybuffer_push(keybuffer,FUNCTION_KEYS | 6); |
130 | buf=count=0; |
125 | buf = count = 0; |
131 | return 1; |
126 | return 1; |
132 | case MSIM_KEY_F7: |
127 | case MSIM_KEY_F7: |
133 | keybuffer_push(keybuffer,FUNCTION_KEYS | 7 ); |
128 | keybuffer_push(keybuffer,FUNCTION_KEYS | 7); |
134 | buf=count=0; |
129 | buf = count = 0; |
135 | return 1; |
130 | return 1; |
136 | case MSIM_KEY_F8: |
131 | case MSIM_KEY_F8: |
137 | keybuffer_push(keybuffer,FUNCTION_KEYS | 8 ); |
132 | keybuffer_push(keybuffer,FUNCTION_KEYS | 8); |
138 | buf=count=0; |
133 | buf = count = 0; |
139 | return 1; |
134 | return 1; |
140 | - | ||
141 | case MSIM_KEY_F9: |
135 | case MSIM_KEY_F9: |
142 | keybuffer_push(keybuffer,FUNCTION_KEYS | 9 ); |
136 | keybuffer_push(keybuffer,FUNCTION_KEYS | 9); |
143 | buf=count=0; |
137 | buf = count = 0; |
144 | return 1; |
138 | return 1; |
145 | case MSIM_KEY_F10: |
139 | case MSIM_KEY_F10: |
146 | keybuffer_push(keybuffer,FUNCTION_KEYS | 10 ); |
140 | keybuffer_push(keybuffer,FUNCTION_KEYS | 10); |
147 | buf=count=0; |
141 | buf = count = 0; |
148 | return 1; |
142 | return 1; |
149 | - | ||
150 | case MSIM_KEY_F11: |
143 | case MSIM_KEY_F11: |
151 | keybuffer_push(keybuffer,FUNCTION_KEYS | 11 ); |
144 | keybuffer_push(keybuffer,FUNCTION_KEYS | 11); |
152 | buf=count=0; |
145 | buf = count = 0; |
153 | return 1; |
146 | return 1; |
154 | case MSIM_KEY_F12: |
147 | case MSIM_KEY_F12: |
155 | keybuffer_push(keybuffer,FUNCTION_KEYS | 12 ); |
148 | keybuffer_push(keybuffer,FUNCTION_KEYS | 12); |
156 | buf=count=0; |
149 | buf = count = 0; |
157 | return 1; |
150 | return 1; |
158 | default: |
151 | default: |
159 | keybuffer_push(keybuffer, buf & 0xff ); |
152 | keybuffer_push(keybuffer, buf & 0xff); |
160 | keybuffer_push(keybuffer, (buf >> 8) &0xff ); |
153 | keybuffer_push(keybuffer, (buf >> 8) &0xff); |
161 | keybuffer_push(keybuffer, (buf >> 16) &0xff ); |
154 | keybuffer_push(keybuffer, (buf >> 16) &0xff); |
162 | keybuffer_push(keybuffer, (buf >> 24) &0xff ); |
155 | keybuffer_push(keybuffer, (buf >> 24) &0xff); |
163 | keybuffer_push(keybuffer, scan_code ); |
156 | keybuffer_push(keybuffer, scan_code); |
164 | buf=count=0; |
157 | buf = count = 0; |
165 | return 1; |
158 | return 1; |
166 | - | ||
167 | } |
159 | } |
168 | } |
160 | } |
169 | 161 | ||
170 | buf|=((unsigned long) scan_code)<<(8*(count++)); |
162 | buf |= ((unsigned long) scan_code)<<(8*(count++)); |
171 | - | ||
172 | 163 | ||
173 | if((buf & 0xff)!= (MSIM_KEY_F1 & 0xff)) { |
164 | if((buf & 0xff) != (MSIM_KEY_F1 & 0xff)) { |
174 | - | ||
175 | keybuffer_push(keybuffer,buf ); |
165 | keybuffer_push(keybuffer, buf); |
176 | buf=count=0; |
166 | buf = count = 0; |
177 | return 1; |
167 | return 1; |
178 | } |
168 | } |
179 | 169 | ||
180 | if ( count <= 1 ) |
170 | if (count <= 1) |
181 | return 1; |
171 | return 1; |
182 | 172 | ||
183 | if( (buf & 0xffff) != (MSIM_KEY_F1 & 0xffff) |
173 | if ((buf & 0xffff) != (MSIM_KEY_F1 & 0xffff) |
184 | && (buf & 0xffff) != (MSIM_KEY_F5 & 0xffff) ) { |
174 | && (buf & 0xffff) != (MSIM_KEY_F5 & 0xffff) ) { |
185 | 175 | ||
186 | keybuffer_push(keybuffer, buf & 0xff ); |
176 | keybuffer_push(keybuffer, buf & 0xff); |
187 | keybuffer_push(keybuffer, (buf >> 8) &0xff ); |
177 | keybuffer_push(keybuffer, (buf >> 8) &0xff); |
188 | buf=count=0; |
178 | buf = count = 0; |
189 | return 1; |
179 | return 1; |
190 | } |
180 | } |
191 | 181 | ||
192 | if ( count <= 2) |
182 | if (count <= 2) |
193 | return 1; |
183 | return 1; |
194 | 184 | ||
195 | switch (buf){ |
185 | switch (buf) { |
196 | case MSIM_KEY_F1: |
186 | case MSIM_KEY_F1: |
197 | keybuffer_push(keybuffer,FUNCTION_KEYS | 1 ); |
187 | keybuffer_push(keybuffer,FUNCTION_KEYS | 1); |
198 | buf=count=0; |
188 | buf = count = 0; |
199 | return 1; |
189 | return 1; |
200 | case MSIM_KEY_F2: |
190 | case MSIM_KEY_F2: |
201 | keybuffer_push(keybuffer,FUNCTION_KEYS | 2 ); |
191 | keybuffer_push(keybuffer,FUNCTION_KEYS | 2); |
202 | buf=count=0; |
192 | buf = count = 0; |
203 | return 1; |
193 | return 1; |
204 | case MSIM_KEY_F3: |
194 | case MSIM_KEY_F3: |
205 | keybuffer_push(keybuffer,FUNCTION_KEYS | 3 ); |
195 | keybuffer_push(keybuffer,FUNCTION_KEYS | 3); |
206 | buf=count=0; |
196 | buf = count = 0; |
207 | return 1; |
197 | return 1; |
208 | case MSIM_KEY_F4: |
198 | case MSIM_KEY_F4: |
209 | keybuffer_push(keybuffer,FUNCTION_KEYS | 4 ); |
199 | keybuffer_push(keybuffer,FUNCTION_KEYS | 4); |
210 | buf=count=0; |
200 | buf = count = 0; |
211 | return 1; |
201 | return 1; |
212 | } |
202 | } |
213 | 203 | ||
214 | 204 | ||
215 | if( (buf & 0xffffff) != (MSIM_KEY_F5 & 0xffffff) |
205 | if((buf & 0xffffff) != (MSIM_KEY_F5 & 0xffffff) |
216 | && (buf & 0xffffff) != (MSIM_KEY_F9 & 0xffffff) ) { |
206 | && (buf & 0xffffff) != (MSIM_KEY_F9 & 0xffffff)) { |
217 | 207 | ||
218 | keybuffer_push(keybuffer, buf & 0xff ); |
208 | keybuffer_push(keybuffer, buf & 0xff); |
219 | keybuffer_push(keybuffer, (buf >> 8) &0xff ); |
209 | keybuffer_push(keybuffer, (buf >> 8) & 0xff); |
220 | keybuffer_push(keybuffer, (buf >> 16) &0xff ); |
210 | keybuffer_push(keybuffer, (buf >> 16) & 0xff); |
221 | buf=count=0; |
211 | buf=count=0; |
222 | return 1; |
212 | return 1; |
223 | } |
213 | } |
224 | 214 | ||
225 | if ( count <= 3 ) |
215 | if (count <= 3) |
226 | return 1; |
216 | return 1; |
227 | 217 | ||
228 | - | ||
229 | - | ||
230 | - | ||
231 | switch (buf){ |
218 | switch (buf) { |
232 | case MSIM_KEY_F5: |
219 | case MSIM_KEY_F5: |
233 | case MSIM_KEY_F6: |
220 | case MSIM_KEY_F6: |
234 | case MSIM_KEY_F7: |
221 | case MSIM_KEY_F7: |
235 | case MSIM_KEY_F8: |
222 | case MSIM_KEY_F8: |
236 | case MSIM_KEY_F9: |
223 | case MSIM_KEY_F9: |
237 | case MSIM_KEY_F10: |
224 | case MSIM_KEY_F10: |
238 | case MSIM_KEY_F11: |
225 | case MSIM_KEY_F11: |
239 | case MSIM_KEY_F12: |
226 | case MSIM_KEY_F12: |
240 | return 1; |
227 | return 1; |
241 | default: |
228 | default: |
242 | keybuffer_push(keybuffer, buf & 0xff ); |
229 | keybuffer_push(keybuffer, buf & 0xff); |
243 | keybuffer_push(keybuffer, (buf >> 8) &0xff ); |
230 | keybuffer_push(keybuffer, (buf >> 8) &0xff); |
244 | keybuffer_push(keybuffer, (buf >> 16) &0xff ); |
231 | keybuffer_push(keybuffer, (buf >> 16) &0xff); |
245 | keybuffer_push(keybuffer, (buf >> 24) &0xff ); |
232 | keybuffer_push(keybuffer, (buf >> 24) &0xff); |
246 | buf=count=0; |
233 | buf = count = 0; |
247 | return 1; |
234 | return 1; |
248 | - | ||
249 | } |
235 | } |
250 | return 1; |
236 | return 1; |
251 | } |
237 | } |
252 | 238 | ||
253 | 239 | ||
254 | 240 | ||
255 | static int kbd_arch_process_fb(keybuffer_t *keybuffer, int scan_code) |
241 | static int kbd_arch_process_fb(keybuffer_t *keybuffer, int scan_code) |
256 | { |
242 | { |
257 | - | ||
258 | static unsigned long buf=0; |
243 | static unsigned long buf = 0; |
259 | static int count=0; |
244 | static int count = 0; |
260 | - | ||
261 | 245 | ||
262 | /* Please preserve this code (it can be used to determine scancodes) |
246 | /* Please preserve this code (it can be used to determine scancodes) |
263 | |
247 | |
264 | keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf)); |
248 | keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf)); |
265 | keybuffer_push(keybuffer, to_hex(scan_code&0xf)); |
249 | keybuffer_push(keybuffer, to_hex(scan_code&0xf)); |
266 | keybuffer_push(keybuffer, ' '); |
250 | keybuffer_push(keybuffer, ' '); |
267 | keybuffer_push(keybuffer, ' '); |
251 | keybuffer_push(keybuffer, ' '); |
268 | |
252 | |
269 | return 1; |
253 | return 1; |
270 | */ |
254 | */ |
271 | 255 | ||
272 | if ( scan_code == '\r' ) |
256 | if (scan_code == '\r') |
273 | scan_code = '\n' ; |
257 | scan_code = '\n'; |
274 | 258 | ||
275 | buf|=((unsigned long) scan_code)<<(8*(count++)); |
259 | buf |= ((unsigned long) scan_code)<<(8*(count++)); |
276 | 260 | ||
277 | 261 | ||
278 | if((buf & 0xff)!= (GXEMUL_KEY_F1 & 0xff)) { |
262 | if ((buf & 0xff) != (GXEMUL_KEY_F1 & 0xff)) { |
279 | - | ||
280 | keybuffer_push(keybuffer,buf ); |
263 | keybuffer_push(keybuffer, buf); |
281 | buf=count=0; |
264 | buf = count = 0; |
282 | return 1; |
265 | return 1; |
283 | } |
266 | } |
284 | 267 | ||
285 | if ( count <= 1 ) |
268 | if (count <= 1) |
286 | return 1; |
269 | return 1; |
287 | 270 | ||
288 | if( (buf & 0xffff) != (GXEMUL_KEY_F1 & 0xffff) ) { |
271 | if ((buf & 0xffff) != (GXEMUL_KEY_F1 & 0xffff)) { |
289 | - | ||
290 | keybuffer_push(keybuffer, buf & 0xff ); |
272 | keybuffer_push(keybuffer, buf & 0xff); |
291 | keybuffer_push(keybuffer, (buf >> 8) &0xff ); |
273 | keybuffer_push(keybuffer, (buf >> 8) &0xff); |
292 | buf=count=0; |
274 | buf = count = 0; |
293 | return 1; |
275 | return 1; |
294 | } |
276 | } |
295 | 277 | ||
296 | if ( count <= 2) |
278 | if (count <= 2) |
297 | return 1; |
279 | return 1; |
298 | 280 | ||
299 | 281 | ||
300 | if( (buf & 0xffffff) != (GXEMUL_KEY_F1 & 0xffffff) |
282 | if ((buf & 0xffffff) != (GXEMUL_KEY_F1 & 0xffffff) |
301 | && (buf & 0xffffff) != (GXEMUL_KEY_F5 & 0xffffff) |
283 | && (buf & 0xffffff) != (GXEMUL_KEY_F5 & 0xffffff) |
302 | && (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff) ) { |
284 | && (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff)) { |
303 | 285 | ||
304 | keybuffer_push(keybuffer, buf & 0xff ); |
286 | keybuffer_push(keybuffer, buf & 0xff); |
305 | keybuffer_push(keybuffer, (buf >> 8) &0xff ); |
287 | keybuffer_push(keybuffer, (buf >> 8) & 0xff); |
306 | keybuffer_push(keybuffer, (buf >> 16) &0xff ); |
288 | keybuffer_push(keybuffer, (buf >> 16) & 0xff); |
307 | buf=count=0; |
289 | buf = count = 0; |
308 | return 1; |
290 | return 1; |
309 | } |
291 | } |
310 | 292 | ||
311 | if ( count <= 3 ) |
293 | if ( count <= 3 ) |
312 | return 1; |
294 | return 1; |
313 | 295 | ||
314 | 296 | ||
315 | switch (buf){ |
297 | switch (buf) { |
316 | - | ||
317 | case GXEMUL_KEY_F1: |
298 | case GXEMUL_KEY_F1: |
318 | keybuffer_push(keybuffer,FUNCTION_KEYS | 1 ); |
299 | keybuffer_push(keybuffer,FUNCTION_KEYS | 1 ); |
319 | buf=count=0; |
300 | buf=count=0; |
320 | return 1; |
301 | return 1; |
321 | case GXEMUL_KEY_F2: |
302 | case GXEMUL_KEY_F2: |
322 | keybuffer_push(keybuffer,FUNCTION_KEYS | 2 ); |
303 | keybuffer_push(keybuffer,FUNCTION_KEYS | 2 ); |
323 | buf=count=0; |
304 | buf=count=0; |
324 | return 1; |
305 | return 1; |
325 | case GXEMUL_KEY_F3: |
306 | case GXEMUL_KEY_F3: |
326 | keybuffer_push(keybuffer,FUNCTION_KEYS | 3 ); |
307 | keybuffer_push(keybuffer,FUNCTION_KEYS | 3 ); |
327 | buf=count=0; |
308 | buf=count=0; |
328 | return 1; |
309 | return 1; |
329 | case GXEMUL_KEY_F4: |
310 | case GXEMUL_KEY_F4: |
330 | keybuffer_push(keybuffer,FUNCTION_KEYS | 4 ); |
311 | keybuffer_push(keybuffer,FUNCTION_KEYS | 4 ); |
331 | buf=count=0; |
312 | buf=count=0; |
332 | return 1; |
313 | return 1; |
333 | case GXEMUL_KEY_F5: |
314 | case GXEMUL_KEY_F5: |
334 | keybuffer_push(keybuffer,FUNCTION_KEYS | 5 ); |
315 | keybuffer_push(keybuffer,FUNCTION_KEYS | 5 ); |
335 | buf=count=0; |
316 | buf=count=0; |
336 | return 1; |
317 | return 1; |
337 | case GXEMUL_KEY_F6: |
318 | case GXEMUL_KEY_F6: |
338 | keybuffer_push(keybuffer,FUNCTION_KEYS | 6 ); |
319 | keybuffer_push(keybuffer,FUNCTION_KEYS | 6 ); |
339 | buf=count=0; |
320 | buf=count=0; |
340 | return 1; |
321 | return 1; |
341 | case GXEMUL_KEY_F7: |
322 | case GXEMUL_KEY_F7: |
342 | keybuffer_push(keybuffer,FUNCTION_KEYS | 7 ); |
323 | keybuffer_push(keybuffer,FUNCTION_KEYS | 7 ); |
343 | buf=count=0; |
324 | buf=count=0; |
344 | return 1; |
325 | return 1; |
345 | case GXEMUL_KEY_F8: |
326 | case GXEMUL_KEY_F8: |
346 | keybuffer_push(keybuffer,FUNCTION_KEYS | 8 ); |
327 | keybuffer_push(keybuffer,FUNCTION_KEYS | 8 ); |
347 | buf=count=0; |
328 | buf=count=0; |
348 | return 1; |
329 | return 1; |
349 | case GXEMUL_KEY_F9: |
330 | case GXEMUL_KEY_F9: |
350 | keybuffer_push(keybuffer,FUNCTION_KEYS | 9 ); |
331 | keybuffer_push(keybuffer,FUNCTION_KEYS | 9 ); |
351 | buf=count=0; |
332 | buf=count=0; |
352 | return 1; |
333 | return 1; |
353 | case GXEMUL_KEY_F10: |
334 | case GXEMUL_KEY_F10: |
354 | keybuffer_push(keybuffer,FUNCTION_KEYS | 10 ); |
335 | keybuffer_push(keybuffer,FUNCTION_KEYS | 10 ); |
355 | buf=count=0; |
336 | buf=count=0; |
356 | return 1; |
337 | return 1; |
357 | case GXEMUL_KEY_F11: |
338 | case GXEMUL_KEY_F11: |
358 | keybuffer_push(keybuffer,FUNCTION_KEYS | 11 ); |
339 | keybuffer_push(keybuffer,FUNCTION_KEYS | 11 ); |
359 | buf=count=0; |
340 | buf=count=0; |
360 | return 1; |
341 | return 1; |
361 | case GXEMUL_KEY_F12: |
342 | case GXEMUL_KEY_F12: |
362 | keybuffer_push(keybuffer,FUNCTION_KEYS | 12 ); |
343 | keybuffer_push(keybuffer,FUNCTION_KEYS | 12 ); |
363 | buf=count=0; |
344 | buf=count=0; |
364 | return 1; |
345 | return 1; |
365 | - | ||
366 | default: |
346 | default: |
367 | keybuffer_push(keybuffer, buf & 0xff ); |
347 | keybuffer_push(keybuffer, buf & 0xff ); |
368 | keybuffer_push(keybuffer, (buf >> 8) &0xff ); |
348 | keybuffer_push(keybuffer, (buf >> 8) &0xff ); |
369 | keybuffer_push(keybuffer, (buf >> 16) &0xff ); |
349 | keybuffer_push(keybuffer, (buf >> 16) &0xff ); |
370 | keybuffer_push(keybuffer, (buf >> 24) &0xff ); |
350 | keybuffer_push(keybuffer, (buf >> 24) &0xff ); |
371 | buf=count=0; |
351 | buf=count=0; |
372 | return 1; |
352 | return 1; |
373 | - | ||
374 | } |
353 | } |
375 | return 1; |
354 | return 1; |
376 | } |
355 | } |
377 | 356 | ||
378 | int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) |
357 | int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) |
379 | { |
358 | { |
380 | int scan_code = IPC_GET_ARG2(*call); |
359 | int scan_code = IPC_GET_ARG2(*call); |
381 | static int esc_count=0; |
360 | static int esc_count=0; |
382 | 361 | ||
383 | - | ||
384 | if ( scan_code == 0x1b ) { |
362 | if (scan_code == 0x1b) { |
385 | esc_count++; |
363 | esc_count++; |
386 | if ( esc_count == 3 ) { |
364 | if (esc_count == 3) |
387 | __SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE); |
365 | __SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE); |
388 | } |
- | |
389 | } else { |
366 | } else { |
390 | esc_count=0; |
367 | esc_count=0; |
391 | } |
368 | } |
392 | 369 | ||
393 | if(fb_fb) return kbd_arch_process_fb(keybuffer, scan_code); |
370 | if (fb_fb) |
394 | return kbd_arch_process_no_fb(keybuffer, scan_code); |
371 | return kbd_arch_process_fb(keybuffer, scan_code); |
395 | 372 | ||
396 | return 0; |
373 | return kbd_arch_process_no_fb(keybuffer, scan_code); |
397 | } |
374 | } |
398 | /** @} |
375 | /** @} |
399 | */ |
376 | */ |
400 | 377 |