Subversion Repositories HelenOS-historic

Rev

Rev 1649 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1649 Rev 1694
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
 
-
 
-
 
39
#include <kbd.h>
-
 
40
#include <keys.h>
40
 
41
 
41
#define MSIM_KEY_F1 0x504f1bL
42
#define MSIM_KEY_F1 0x504f1bL
42
#define MSIM_KEY_F2 0x514f1bL
43
#define MSIM_KEY_F2 0x514f1bL
43
#define MSIM_KEY_F3 0x524f1bL
44
#define MSIM_KEY_F3 0x524f1bL
44
#define MSIM_KEY_F4 0x534f1bL
45
#define MSIM_KEY_F4 0x534f1bL
45
#define MSIM_KEY_F5 0x35315b1bL
46
#define MSIM_KEY_F5 0x35315b1bL
46
#define MSIM_KEY_F6 0x37315b1bL
47
#define MSIM_KEY_F6 0x37315b1bL
47
#define MSIM_KEY_F7 0x38315b1bL
48
#define MSIM_KEY_F7 0x38315b1bL
48
#define MSIM_KEY_F8 0x39315b1bL
49
#define MSIM_KEY_F8 0x39315b1bL
49
#define MSIM_KEY_F9 0x30325b1bL
50
#define MSIM_KEY_F9 0x30325b1bL
50
#define MSIM_KEY_F10 0x31325b1bL
51
#define MSIM_KEY_F10 0x31325b1bL
51
#define MSIM_KEY_F11 0x33325b1bL
52
#define MSIM_KEY_F11 0x33325b1bL
52
#define MSIM_KEY_F12 0x34325b1bL
53
#define MSIM_KEY_F12 0x34325b1bL
53
 
54
 
54
 
55
 
55
#define GXEMUL_KEY_F1 0x504f5b1bL
56
#define GXEMUL_KEY_F1 0x504f5b1bL
56
#define GXEMUL_KEY_F2 0x514f5b1bL
57
#define GXEMUL_KEY_F2 0x514f5b1bL
57
#define GXEMUL_KEY_F3 0x524f5b1bL
58
#define GXEMUL_KEY_F3 0x524f5b1bL
58
#define GXEMUL_KEY_F4 0x534f5b1bL
59
#define GXEMUL_KEY_F4 0x534f5b1bL
59
#define GXEMUL_KEY_F5 0x35315b1bL
60
#define GXEMUL_KEY_F5 0x35315b1bL
60
#define GXEMUL_KEY_F6 0x37315b1bL
61
#define GXEMUL_KEY_F6 0x37315b1bL
61
#define GXEMUL_KEY_F7 0x38315b1bL
62
#define GXEMUL_KEY_F7 0x38315b1bL
62
#define GXEMUL_KEY_F8 0x39315b1bL
63
#define GXEMUL_KEY_F8 0x39315b1bL
63
#define GXEMUL_KEY_F9 0x38325b1bL
64
#define GXEMUL_KEY_F9 0x38325b1bL
64
#define GXEMUL_KEY_F10 0x39325b1bL
65
#define GXEMUL_KEY_F10 0x39325b1bL
65
#define GXEMUL_KEY_F11 0x33325b1bL
66
#define GXEMUL_KEY_F11 0x33325b1bL
66
#define GXEMUL_KEY_F12 0x34325b1bL
67
#define GXEMUL_KEY_F12 0x34325b1bL
67
 
68
 
68
 
69
 
69
#define FUNCTION_KEYS 0x100
70
#define FUNCTION_KEYS 0x100
70
 
71
 
71
 
72
 
72
irq_cmd_t msim_cmds[1] = {
73
irq_cmd_t msim_cmds[1] = {
73
    { CMD_MEM_READ_1, (void *)0xB0000000, 0 }
74
    { CMD_MEM_READ_1, (void *)0xB0000000, 0, 2 }
74
};
75
};
75
 
76
 
76
irq_code_t msim_kbd = {
77
irq_code_t msim_kbd = {
77
    1,
78
    1,
78
    msim_cmds
79
    msim_cmds
79
};
80
};
80
 
81
 
81
static int msim,gxemul;
82
static int msim,gxemul;
82
 
83
 
83
int kbd_arch_init(void)
84
int kbd_arch_init(void)
84
{
85
{
85
    ipc_register_irq(2, &msim_kbd);
86
    ipc_register_irq(2, &msim_kbd);
86
    msim=sysinfo_value("machine.msim");
87
    msim=sysinfo_value("machine.msim");
87
    gxemul=sysinfo_value("machine.lgxemul");
88
    gxemul=sysinfo_value("machine.lgxemul");
88
    return 1;
89
    return 0;
89
}
90
}
90
 
91
 
91
 
92
 
92
//*
93
//*
93
//*
94
//*
94
//* Please preserve this code (it can be used to determine scancodes)
95
//* Please preserve this code (it can be used to determine scancodes)
95
//*
96
//*
96
int to_hex(int v)
97
int to_hex(int v)
97
{
98
{
98
        return "0123456789ABCDEF"[v];
99
        return "0123456789ABCDEF"[v];
99
}
100
}
100
//*/
101
//*/
101
 
102
 
102
static int kbd_arch_process_msim(keybuffer_t *keybuffer, int scan_code)
103
static int kbd_arch_process_msim(keybuffer_t *keybuffer, int scan_code)
103
{
104
{
104
 
105
 
105
    static unsigned long buf=0;
106
    static unsigned long buf=0;
106
    static int count=0;
107
    static int count=0;
107
 
108
 
108
 
109
 
109
    //* Please preserve this code (it can be used to determine scancodes)
110
    //* Please preserve this code (it can be used to determine scancodes)
110
    //*
111
    //*
111
    //keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
112
    //keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
112
    //keybuffer_push(keybuffer, to_hex(scan_code&0xf));
113
    //keybuffer_push(keybuffer, to_hex(scan_code&0xf));
113
    //keybuffer_push(keybuffer, ' ');
114
    //keybuffer_push(keybuffer, ' ');
114
    //keybuffer_push(keybuffer, ' ');
115
    //keybuffer_push(keybuffer, ' ');
115
    //*/
116
    //*/
116
    //return 1;
117
    //return 1;
117
   
118
   
118
   
119
   
119
    if(scan_code==0x7e)
120
    if(scan_code==0x7e)
120
    {
121
    {
121
        switch (buf){
122
        switch (buf){
122
            case MSIM_KEY_F5:
123
            case MSIM_KEY_F5:
123
                keybuffer_push(keybuffer,FUNCTION_KEYS | 5 );
124
                keybuffer_push(keybuffer,FUNCTION_KEYS | 5 );
124
                buf=count=0;
125
                buf=count=0;
125
                return 1;
126
                return 1;
126
            case MSIM_KEY_F6:
127
            case MSIM_KEY_F6:
127
                keybuffer_push(keybuffer,FUNCTION_KEYS | 6 );
128
                keybuffer_push(keybuffer,FUNCTION_KEYS | 6 );
128
                buf=count=0;
129
                buf=count=0;
129
                return 1;
130
                return 1;
130
            case MSIM_KEY_F7:
131
            case MSIM_KEY_F7:
131
                keybuffer_push(keybuffer,FUNCTION_KEYS | 7 );
132
                keybuffer_push(keybuffer,FUNCTION_KEYS | 7 );
132
                buf=count=0;
133
                buf=count=0;
133
                return 1;
134
                return 1;
134
            case MSIM_KEY_F8:
135
            case MSIM_KEY_F8:
135
                keybuffer_push(keybuffer,FUNCTION_KEYS | 8 );
136
                keybuffer_push(keybuffer,FUNCTION_KEYS | 8 );
136
                buf=count=0;
137
                buf=count=0;
137
                return 1;
138
                return 1;
138
 
139
 
139
            case MSIM_KEY_F9:
140
            case MSIM_KEY_F9:
140
                keybuffer_push(keybuffer,FUNCTION_KEYS | 9 );
141
                keybuffer_push(keybuffer,FUNCTION_KEYS | 9 );
141
                buf=count=0;
142
                buf=count=0;
142
                return 1;
143
                return 1;
143
            case MSIM_KEY_F10:
144
            case MSIM_KEY_F10:
144
                keybuffer_push(keybuffer,FUNCTION_KEYS | 10 );
145
                keybuffer_push(keybuffer,FUNCTION_KEYS | 10 );
145
                buf=count=0;
146
                buf=count=0;
146
                return 1;
147
                return 1;
147
 
148
 
148
            case MSIM_KEY_F11:
149
            case MSIM_KEY_F11:
149
                keybuffer_push(keybuffer,FUNCTION_KEYS | 11 );
150
                keybuffer_push(keybuffer,FUNCTION_KEYS | 11 );
150
                buf=count=0;
151
                buf=count=0;
151
                return 1;
152
                return 1;
152
            case MSIM_KEY_F12:
153
            case MSIM_KEY_F12:
153
                keybuffer_push(keybuffer,FUNCTION_KEYS | 12 );
154
                keybuffer_push(keybuffer,FUNCTION_KEYS | 12 );
154
                buf=count=0;
155
                buf=count=0;
155
                return 1;
156
                return 1;
156
            default:
157
            default:
157
                keybuffer_push(keybuffer, buf & 0xff );
158
                keybuffer_push(keybuffer, buf & 0xff );
158
                keybuffer_push(keybuffer, (buf >> 8) &0xff );
159
                keybuffer_push(keybuffer, (buf >> 8) &0xff );
159
                keybuffer_push(keybuffer, (buf >> 16) &0xff );
160
                keybuffer_push(keybuffer, (buf >> 16) &0xff );
160
                keybuffer_push(keybuffer, (buf >> 24) &0xff );
161
                keybuffer_push(keybuffer, (buf >> 24) &0xff );
161
                keybuffer_push(keybuffer, scan_code );
162
                keybuffer_push(keybuffer, scan_code );
162
                buf=count=0;
163
                buf=count=0;
163
                return 1;
164
                return 1;
164
   
165
   
165
        }
166
        }
166
    }
167
    }
167
 
168
 
168
    buf|=((unsigned long) scan_code)<<(8*(count++));
169
    buf|=((unsigned long) scan_code)<<(8*(count++));
169
   
170
   
170
   
171
   
171
    if((buf & 0xff)!= (MSIM_KEY_F1 & 0xff)) {
172
    if((buf & 0xff)!= (MSIM_KEY_F1 & 0xff)) {
172
 
173
 
173
        keybuffer_push(keybuffer,buf );
174
        keybuffer_push(keybuffer,buf );
174
        buf=count=0;
175
        buf=count=0;
175
        return 1;
176
        return 1;
176
    }
177
    }
177
 
178
 
178
    if ( count <= 1 )
179
    if ( count <= 1 )
179
        return 1;
180
        return 1;
180
 
181
 
181
    if(    (buf & 0xffff) != (MSIM_KEY_F1 & 0xffff)
182
    if(    (buf & 0xffff) != (MSIM_KEY_F1 & 0xffff)
182
        && (buf & 0xffff) != (MSIM_KEY_F5 & 0xffff) ) {
183
        && (buf & 0xffff) != (MSIM_KEY_F5 & 0xffff) ) {
183
 
184
 
184
        keybuffer_push(keybuffer, buf & 0xff );
185
        keybuffer_push(keybuffer, buf & 0xff );
185
        keybuffer_push(keybuffer, (buf >> 8) &0xff );
186
        keybuffer_push(keybuffer, (buf >> 8) &0xff );
186
        buf=count=0;
187
        buf=count=0;
187
        return 1;
188
        return 1;
188
    }
189
    }
189
 
190
 
190
    if ( count <= 2)
191
    if ( count <= 2)
191
        return 1;
192
        return 1;
192
 
193
 
193
    switch (buf){
194
    switch (buf){
194
        case MSIM_KEY_F1:
195
        case MSIM_KEY_F1:
195
            keybuffer_push(keybuffer,FUNCTION_KEYS | 1 );
196
            keybuffer_push(keybuffer,FUNCTION_KEYS | 1 );
196
            buf=count=0;
197
            buf=count=0;
197
            return 1;
198
            return 1;
198
        case MSIM_KEY_F2:
199
        case MSIM_KEY_F2:
199
            keybuffer_push(keybuffer,FUNCTION_KEYS | 2 );
200
            keybuffer_push(keybuffer,FUNCTION_KEYS | 2 );
200
            buf=count=0;
201
            buf=count=0;
201
            return 1;
202
            return 1;
202
        case MSIM_KEY_F3:
203
        case MSIM_KEY_F3:
203
            keybuffer_push(keybuffer,FUNCTION_KEYS | 3 );
204
            keybuffer_push(keybuffer,FUNCTION_KEYS | 3 );
204
            buf=count=0;
205
            buf=count=0;
205
            return 1;
206
            return 1;
206
        case MSIM_KEY_F4:
207
        case MSIM_KEY_F4:
207
            keybuffer_push(keybuffer,FUNCTION_KEYS | 4 );
208
            keybuffer_push(keybuffer,FUNCTION_KEYS | 4 );
208
            buf=count=0;
209
            buf=count=0;
209
            return 1;
210
            return 1;
210
    }
211
    }
211
 
212
 
212
 
213
 
213
    if(    (buf & 0xffffff) != (MSIM_KEY_F5 & 0xffffff)
214
    if(    (buf & 0xffffff) != (MSIM_KEY_F5 & 0xffffff)
214
        && (buf & 0xffffff) != (MSIM_KEY_F9 & 0xffffff) ) {
215
        && (buf & 0xffffff) != (MSIM_KEY_F9 & 0xffffff) ) {
215
 
216
 
216
        keybuffer_push(keybuffer, buf & 0xff );
217
        keybuffer_push(keybuffer, buf & 0xff );
217
        keybuffer_push(keybuffer, (buf >> 8) &0xff );
218
        keybuffer_push(keybuffer, (buf >> 8) &0xff );
218
        keybuffer_push(keybuffer, (buf >> 16) &0xff );
219
        keybuffer_push(keybuffer, (buf >> 16) &0xff );
219
        buf=count=0;
220
        buf=count=0;
220
        return 1;
221
        return 1;
221
    }
222
    }
222
 
223
 
223
    if ( count <= 3 )
224
    if ( count <= 3 )
224
        return 1;
225
        return 1;
225
   
226
   
226
 
227
 
227
   
228
   
228
   
229
   
229
    switch (buf){
230
    switch (buf){
230
        case MSIM_KEY_F5:
231
        case MSIM_KEY_F5:
231
        case MSIM_KEY_F6:
232
        case MSIM_KEY_F6:
232
        case MSIM_KEY_F7:
233
        case MSIM_KEY_F7:
233
        case MSIM_KEY_F8:
234
        case MSIM_KEY_F8:
234
        case MSIM_KEY_F9:
235
        case MSIM_KEY_F9:
235
        case MSIM_KEY_F10:
236
        case MSIM_KEY_F10:
236
        case MSIM_KEY_F11:
237
        case MSIM_KEY_F11:
237
        case MSIM_KEY_F12:
238
        case MSIM_KEY_F12:
238
            return 1;
239
            return 1;
239
        default:
240
        default:
240
            keybuffer_push(keybuffer, buf & 0xff );
241
            keybuffer_push(keybuffer, buf & 0xff );
241
            keybuffer_push(keybuffer, (buf >> 8) &0xff );
242
            keybuffer_push(keybuffer, (buf >> 8) &0xff );
242
            keybuffer_push(keybuffer, (buf >> 16) &0xff );
243
            keybuffer_push(keybuffer, (buf >> 16) &0xff );
243
            keybuffer_push(keybuffer, (buf >> 24) &0xff );
244
            keybuffer_push(keybuffer, (buf >> 24) &0xff );
244
            buf=count=0;
245
            buf=count=0;
245
            return 1;
246
            return 1;
246
       
247
       
247
        }
248
        }
248
    return 1;
249
    return 1;
249
}
250
}
250
 
251
 
251
 
252
 
252
 
253
 
253
static int kbd_arch_process_gxemul(keybuffer_t *keybuffer, int scan_code)
254
static int kbd_arch_process_gxemul(keybuffer_t *keybuffer, int scan_code)
254
{
255
{
255
 
256
 
256
    static unsigned long buf=0;
257
    static unsigned long buf=0;
257
    static int count=0;
258
    static int count=0;
258
 
259
 
259
 
260
 
260
    //* Please preserve this code (it can be used to determine scancodes)
261
    //* Please preserve this code (it can be used to determine scancodes)
261
    //*
262
    //*
262
    //keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
263
    //keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
263
    //keybuffer_push(keybuffer, to_hex(scan_code&0xf));
264
    //keybuffer_push(keybuffer, to_hex(scan_code&0xf));
264
    //keybuffer_push(keybuffer, ' ');
265
    //keybuffer_push(keybuffer, ' ');
265
    //keybuffer_push(keybuffer, ' ');
266
    //keybuffer_push(keybuffer, ' ');
266
    //*/
267
    //*/
267
    //return 1;
268
    //return 1;
268
   
269
   
269
   
270
   
270
    if ( scan_code == '\r' )
271
    if ( scan_code == '\r' )
271
        scan_code = '\n' ;
272
        scan_code = '\n' ;
272
   
273
   
273
    buf|=((unsigned long) scan_code)<<(8*(count++));
274
    buf|=((unsigned long) scan_code)<<(8*(count++));
274
   
275
   
275
   
276
   
276
    if((buf & 0xff)!= (GXEMUL_KEY_F1 & 0xff)) {
277
    if((buf & 0xff)!= (GXEMUL_KEY_F1 & 0xff)) {
277
 
278
 
278
        keybuffer_push(keybuffer,buf );
279
        keybuffer_push(keybuffer,buf );
279
        buf=count=0;
280
        buf=count=0;
280
        return 1;
281
        return 1;
281
    }
282
    }
282
 
283
 
283
    if ( count <= 1 )
284
    if ( count <= 1 )
284
        return 1;
285
        return 1;
285
 
286
 
286
    if(    (buf & 0xffff) != (GXEMUL_KEY_F1 & 0xffff)  ) {
287
    if(    (buf & 0xffff) != (GXEMUL_KEY_F1 & 0xffff)  ) {
287
 
288
 
288
        keybuffer_push(keybuffer, buf & 0xff );
289
        keybuffer_push(keybuffer, buf & 0xff );
289
        keybuffer_push(keybuffer, (buf >> 8) &0xff );
290
        keybuffer_push(keybuffer, (buf >> 8) &0xff );
290
        buf=count=0;
291
        buf=count=0;
291
        return 1;
292
        return 1;
292
    }
293
    }
293
 
294
 
294
    if ( count <= 2)
295
    if ( count <= 2)
295
        return 1;
296
        return 1;
296
 
297
 
297
 
298
 
298
    if(    (buf & 0xffffff) != (GXEMUL_KEY_F1 & 0xffffff)
299
    if(    (buf & 0xffffff) != (GXEMUL_KEY_F1 & 0xffffff)
299
        && (buf & 0xffffff) != (GXEMUL_KEY_F5 & 0xffffff)
300
        && (buf & 0xffffff) != (GXEMUL_KEY_F5 & 0xffffff)
300
        && (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff) ) {
301
        && (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff) ) {
301
 
302
 
302
        keybuffer_push(keybuffer, buf & 0xff );
303
        keybuffer_push(keybuffer, buf & 0xff );
303
        keybuffer_push(keybuffer, (buf >> 8) &0xff );
304
        keybuffer_push(keybuffer, (buf >> 8) &0xff );
304
        keybuffer_push(keybuffer, (buf >> 16) &0xff );
305
        keybuffer_push(keybuffer, (buf >> 16) &0xff );
305
        buf=count=0;
306
        buf=count=0;
306
        return 1;
307
        return 1;
307
    }
308
    }
308
 
309
 
309
    if ( count <= 3 )
310
    if ( count <= 3 )
310
        return 1;
311
        return 1;
311
   
312
   
312
 
313
 
313
    switch (buf){
314
    switch (buf){
314
 
315
 
315
        case GXEMUL_KEY_F1:
316
        case GXEMUL_KEY_F1:
316
            keybuffer_push(keybuffer,FUNCTION_KEYS | 1 );
317
            keybuffer_push(keybuffer,FUNCTION_KEYS | 1 );
317
            buf=count=0;
318
            buf=count=0;
318
            return 1;
319
            return 1;
319
        case GXEMUL_KEY_F2:
320
        case GXEMUL_KEY_F2:
320
            keybuffer_push(keybuffer,FUNCTION_KEYS | 2 );
321
            keybuffer_push(keybuffer,FUNCTION_KEYS | 2 );
321
            buf=count=0;
322
            buf=count=0;
322
            return 1;
323
            return 1;
323
        case GXEMUL_KEY_F3:
324
        case GXEMUL_KEY_F3:
324
            keybuffer_push(keybuffer,FUNCTION_KEYS | 3 );
325
            keybuffer_push(keybuffer,FUNCTION_KEYS | 3 );
325
            buf=count=0;
326
            buf=count=0;
326
            return 1;
327
            return 1;
327
        case GXEMUL_KEY_F4:
328
        case GXEMUL_KEY_F4:
328
            keybuffer_push(keybuffer,FUNCTION_KEYS | 4 );
329
            keybuffer_push(keybuffer,FUNCTION_KEYS | 4 );
329
            buf=count=0;
330
            buf=count=0;
330
            return 1;
331
            return 1;
331
        case GXEMUL_KEY_F5:
332
        case GXEMUL_KEY_F5:
332
            keybuffer_push(keybuffer,FUNCTION_KEYS | 5 );
333
            keybuffer_push(keybuffer,FUNCTION_KEYS | 5 );
333
            buf=count=0;
334
            buf=count=0;
334
            return 1;
335
            return 1;
335
        case GXEMUL_KEY_F6:
336
        case GXEMUL_KEY_F6:
336
            keybuffer_push(keybuffer,FUNCTION_KEYS | 6 );
337
            keybuffer_push(keybuffer,FUNCTION_KEYS | 6 );
337
            buf=count=0;
338
            buf=count=0;
338
            return 1;
339
            return 1;
339
        case GXEMUL_KEY_F7:
340
        case GXEMUL_KEY_F7:
340
            keybuffer_push(keybuffer,FUNCTION_KEYS | 7 );
341
            keybuffer_push(keybuffer,FUNCTION_KEYS | 7 );
341
            buf=count=0;
342
            buf=count=0;
342
            return 1;
343
            return 1;
343
        case GXEMUL_KEY_F8:
344
        case GXEMUL_KEY_F8:
344
            keybuffer_push(keybuffer,FUNCTION_KEYS | 8 );
345
            keybuffer_push(keybuffer,FUNCTION_KEYS | 8 );
345
            buf=count=0;
346
            buf=count=0;
346
            return 1;
347
            return 1;
347
        case GXEMUL_KEY_F9:
348
        case GXEMUL_KEY_F9:
348
            keybuffer_push(keybuffer,FUNCTION_KEYS | 9 );
349
            keybuffer_push(keybuffer,FUNCTION_KEYS | 9 );
349
            buf=count=0;
350
            buf=count=0;
350
            return 1;
351
            return 1;
351
        case GXEMUL_KEY_F10:
352
        case GXEMUL_KEY_F10:
352
            keybuffer_push(keybuffer,FUNCTION_KEYS | 10 );
353
            keybuffer_push(keybuffer,FUNCTION_KEYS | 10 );
353
            buf=count=0;
354
            buf=count=0;
354
            return 1;
355
            return 1;
355
        case GXEMUL_KEY_F11:
356
        case GXEMUL_KEY_F11:
356
            keybuffer_push(keybuffer,FUNCTION_KEYS | 11 );
357
            keybuffer_push(keybuffer,FUNCTION_KEYS | 11 );
357
            buf=count=0;
358
            buf=count=0;
358
            return 1;
359
            return 1;
359
        case GXEMUL_KEY_F12:
360
        case GXEMUL_KEY_F12:
360
            keybuffer_push(keybuffer,FUNCTION_KEYS | 12 );
361
            keybuffer_push(keybuffer,FUNCTION_KEYS | 12 );
361
            buf=count=0;
362
            buf=count=0;
362
            return 1;
363
            return 1;
363
 
364
 
364
        default:
365
        default:
365
            keybuffer_push(keybuffer, buf & 0xff );
366
            keybuffer_push(keybuffer, buf & 0xff );
366
            keybuffer_push(keybuffer, (buf >> 8) &0xff );
367
            keybuffer_push(keybuffer, (buf >> 8) &0xff );
367
            keybuffer_push(keybuffer, (buf >> 16) &0xff );
368
            keybuffer_push(keybuffer, (buf >> 16) &0xff );
368
            keybuffer_push(keybuffer, (buf >> 24) &0xff );
369
            keybuffer_push(keybuffer, (buf >> 24) &0xff );
369
            buf=count=0;
370
            buf=count=0;
370
            return 1;
371
            return 1;
371
       
372
       
372
        }
373
        }
373
    return 1;
374
    return 1;
374
}
375
}
375
 
376
 
376
int kbd_arch_process(keybuffer_t *keybuffer, int scan_code)
377
int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
377
{
378
{
378
 
-
 
-
 
379
    int scan_code = IPC_GET_ARG2(*call);
379
    static int esc_count=0;
380
    static int esc_count=0;
380
 
381
 
381
   
382
   
382
    if ( scan_code == 0x1b ) {
383
    if ( scan_code == 0x1b ) {
383
        esc_count++;
384
        esc_count++;
384
        if ( esc_count == 3 ) {
385
        if ( esc_count == 3 ) {
385
            __SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE);
386
            __SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE);
386
        }  
387
        }  
387
    } else {
388
    } else {
388
        esc_count=0;
389
        esc_count=0;
389
    }
390
    }
390
 
391
 
391
    if(msim) return kbd_arch_process_msim(keybuffer, scan_code);
392
    if(msim) return kbd_arch_process_msim(keybuffer, scan_code);
392
    if(gxemul) return kbd_arch_process_gxemul(keybuffer, scan_code);
393
    if(gxemul) return kbd_arch_process_gxemul(keybuffer, scan_code);
393
 
394
 
394
    return 0;
395
    return 0;
395
}
396
}
396
 
397
 
397
/**
398
/**
398
 * @}
399
 * @}
399
 */
400
 */
400
 
401