39,7 → 39,7 |
*/ |
|
//#define __KEYB_DEBUG__ |
//#define KEYB_TASK |
#define KEYB_TASK |
|
#include <kernel/kern.h> |
#include <signal.h> |
56,10 → 56,9 |
extern int kbd_init(void); |
extern int kbd_exit(void); |
|
/* Functions */ |
extern int kbd_enable(void); |
extern int kbd_disable(void); |
|
/* Functions */ |
extern int kbd_get(unsigned int *data, BYTE access); |
extern void kbd_setleds(unsigned int led); |
extern int kbd_rate(unsigned int *delay, unsigned int *period); |
113,7 → 112,7 |
/* keyboard task PID */ |
static PID keybpid; |
#else |
void keyProc(void); |
static void keyProc(void); |
#endif |
|
/* |
330,7 → 329,7 |
#ifdef KEYB_TASK |
TASK keyProc(void) |
#else |
void keyProc(void) |
static void keyProc(void) |
#endif |
{ |
WORD code; |
360,14 → 359,18 |
#endif |
found = FALSE; |
for (i = 0; i < lastExc; i++) |
if ((keyExcTable[i].evt.scan == dt.scan) && (keyExcTable[i].evt.flag == dt.flag) && (keyExcTable[i].evt.status == dt.status)) { |
if ((keyExcTable[i].evt.scan == dt.scan) && |
(keyExcTable[i].evt.flag == dt.flag) && |
(keyExcTable[i].evt.status == dt.status)) { |
#ifdef __KEYB_DEBUG__ |
printk("shark_keyb.c: Key_Hook ( %2x - %2x - %1d) -> ( %2x - %2x - %1d)\n", dt.scan, dt.flag, dt.status, keyExcTable[i].evt.scan, keyExcTable[i].evt.flag, keyExcTable[i].evt.status); |
printk("shark_keyb.c: Key_Hook ( %2x - %2x - %1d) -> ( %2x - %2x - %1d)\n", |
dt.scan, dt.flag, dt.status, |
keyExcTable[i].evt.scan, keyExcTable[i].evt.flag, keyExcTable[i].evt.status); |
#endif |
keyExcTable[i].func(&dt); |
if (keyExcTable[i].lock == TRUE) |
found = TRUE; |
} |
} |
/* when the port is full, data is lost */ |
if (!found) |
port_send(pkeyPort, (BYTE *) (&dt), NON_BLOCK); |
383,9 → 386,8 |
void default_ctrlChandler(KEY_EVT * k) { |
set_active_page(0); |
set_visual_page(0); |
cputs("Ctrl-C pressed!\n"); |
//cputs("Ctrl-C pressed!\n"); |
sys_end(); |
//exit(1); |
} |
|
/**** Start User Functions ****/ |
393,13 → 395,19 |
/* Function that returns the ascii code */ |
BYTE keyb_getch(BYTE wait) |
{ |
KEY_EVT c; |
KEY_EVT ev; |
BYTE fl; |
|
fl = port_receive (ukeyPort, &c, wait); |
if (fl && !isScanCode(c) && !isReleased(c)) |
return (c.ascii); |
else |
fl = port_receive (ukeyPort, &ev, wait); |
if (fl) { |
#ifdef __KEYB_DEBUG__ |
printk("shark_keyb.c: GetChar ( %2x - %c - %2x - %1d)\n", ev.scan, ev.ascii, ev.flag, ev.status); |
#endif |
if (!isScanCode(ev) && !isReleased(ev)) |
return (ev.ascii); |
else |
return 0; |
} else |
return 0; |
} |
|
423,7 → 431,7 |
return; |
} |
|
/* MG: this function disable the keyboard */ |
/* This function disable the keyboard */ |
int keyb_disable(void) |
{ |
kbd_disable(); |
430,7 → 438,7 |
return 0; |
} |
|
/* MG: this function enable the keyboard */ |
/* This function enable the keyboard */ |
int keyb_enable(void) |
{ |
kbd_enable(); |
437,7 → 445,7 |
return 0; |
} |
|
/**** End Functions ****/ |
/**** End User Functions ****/ |
|
int KEYB26_init(KEYB_PARMS *s) |
{ |
466,11 → 474,10 |
if (s->keymap == (unsigned char)KEYB_DEFAULT) s->keymap = KEYMAP_US; |
keyb_set_map(s->keymap); |
|
/* MG: changed RECEIVE to STREAM port - added a failure test */ |
pkeyPort = port_create ("KeybPort", 3, 20, STREAM, WRITE); |
pkeyPort = port_create ("KeybPort", sizeof(KEY_EVT), 20, STREAM, WRITE); |
if (pkeyPort == -1) |
return -2; |
ukeyPort = port_connect ("KeybPort", 3, STREAM, READ); |
ukeyPort = port_connect ("KeybPort", sizeof(KEY_EVT), STREAM, READ); |
if (ukeyPort == -1) { |
port_delete (pkeyPort); |
return -3; |
484,11 → 491,12 |
s->ctrlcfunc = (void *) default_ctrlChandler; |
if (s->ctrlcfunc != NULL) { |
KEY_EVT emerg; |
emerg.ascii = 'c'; |
emerg.scan = KEY_C; |
emerg.flag = CNTL_BIT; |
emerg.ascii = 'c'; |
emerg.scan = KEY_C; |
emerg.status = KEY_PRESSED; |
emerg.flag = CNTL_BIT; |
keyb_hook (emerg, s->ctrlcfunc, TRUE); |
emerg.flag = CNTR_BIT; |
emerg.flag = CNTR_BIT; |
keyb_hook (emerg, s->ctrlcfunc, TRUE); |
} |
|
520,31 → 528,28 |
|
if (input_installed == FALSE) |
if (INPUT26_init()) { |
#ifdef __KEYB_DEBUG__ |
printk(KERN_ERR "shark_keyb.c: Unable to open Input SubSystem.\n"); |
#endif |
port_delete (pkeyPort); |
port_delete (ukeyPort); |
task_kill (keybpid); |
return -1; |
} |
|
status = atkbd_init(); |
if (status) { |
#ifdef __KEYB_DEBUG__ |
printk(KERN_ERR "shark_keyb.c: AtKbd_Init return: %d\n", status); |
#endif |
port_delete (pkeyPort); |
port_delete (ukeyPort); |
task_kill (keybpid); |
return -1; |
} |
|
status = kbd_init(); |
if (status) { |
#ifdef __KEYB_DEBUG__ |
printk(KERN_ERR "shark_keyb.c: Kbd_Init return: %d\n", status); |
#endif |
port_delete (pkeyPort); |
port_delete (ukeyPort); |
task_kill (keybpid); |
return -1; |
} |
|