Subversion Repositories HelenOS

Rev

Rev 1787 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1787 Rev 1874
Line 50... Line 50...
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
Line 64... Line 63...
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 = {
Line 83... Line 80...
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
 
Line 102... Line 99...
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));
Line 116... Line 112...
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));
Line 267... Line 251...
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
*/