Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 522 → Rev 523

/shark/trunk/drivers/input/shark/shark_keyb.c
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;
}