/uspace/trunk/kbd/include/key_buffer.h |
---|
35,7 → 35,7 |
#define KEYBUFFER_SIZE 128 |
typedef struct { |
char fifo[KEYBUFFER_SIZE]; |
int fifo[KEYBUFFER_SIZE]; |
unsigned long head; |
unsigned long tail; |
unsigned long items; |
45,8 → 45,8 |
void keybuffer_init(keybuffer_t *keybuffer); |
int keybuffer_available(keybuffer_t *keybuffer); |
int keybuffer_empty(keybuffer_t *keybuffer); |
void keybuffer_push(keybuffer_t *keybuffer, char key); |
int keybuffer_pop(keybuffer_t *keybuffer, char *c); |
void keybuffer_push(keybuffer_t *keybuffer, int key); |
int keybuffer_pop(keybuffer_t *keybuffer, int *c); |
#endif |
/uspace/trunk/kbd/generic/kbd.c |
---|
91,17 → 91,22 |
case IPC_M_INTERRUPT: |
if (connected) { |
int chr; |
/* recode to ASCII - one interrupt can produce more than one code so result is stored in fifo */ |
kbd_arch_process(&keybuffer, IPC_GET_ARG2(call)); |
retval = 0; |
while (!keybuffer_empty(&keybuffer)) { |
if (!keybuffer_pop(&keybuffer, (char *)&arg1)) { |
if (!keybuffer_pop(&keybuffer, (int *)&chr)) { |
break; |
} |
{ |
arg1=chr; |
send_call(phoneid, KBD_PUSHCHAR, arg1); |
} |
} |
} |
break; |
/uspace/trunk/kbd/generic/key_buffer.c |
---|
72,7 → 72,7 |
* If buffer is full, character is ignored. |
* @param key code of stored key |
*/ |
void keybuffer_push(keybuffer_t *keybuffer, char key) |
void keybuffer_push(keybuffer_t *keybuffer, int key) |
{ |
futex_down(&keybuffer_futex); |
if (keybuffer->items < KEYBUFFER_SIZE) { |
87,12 → 87,12 |
* @param c pointer to space where to store character from buffer. |
* @return zero on empty buffer, nonzero else |
*/ |
int keybuffer_pop(keybuffer_t *keybuffer, char *c) |
int keybuffer_pop(keybuffer_t *keybuffer, int *c) |
{ |
futex_down(&keybuffer_futex); |
if (keybuffer->items > 0) { |
keybuffer->items--; |
*c = keybuffer->fifo[keybuffer->head]; |
*c = (keybuffer->fifo[keybuffer->head]) ; |
keybuffer->head = (keybuffer->head + 1) % KEYBUFFER_SIZE; |
futex_up(&keybuffer_futex); |
return 1; |
/uspace/trunk/kbd/arch/ia32/src/kbd.c |
---|
57,11 → 57,13 |
#define SC_HOME 0x47 |
#define SC_END 0x4f |
#define FUNCTION_KEYS 0x100 |
static volatile int keyflags; /**< Tracking of multiple keypresses. */ |
static volatile int lockflags; /**< Tracking of multiple keys lockings. */ |
/** Primary meaning of scancodes. */ |
static char sc_primary_map[] = { |
static int sc_primary_map[] = { |
SPECIAL, /* 0x00 */ |
SPECIAL, /* 0x01 - Esc */ |
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', |
78,16 → 80,16 |
SPECIAL, /* 0x38 - LAlt */ |
' ', |
SPECIAL, /* 0x3a - CapsLock */ |
SPECIAL, /* 0x3b - F1 */ |
SPECIAL, /* 0x3c - F2 */ |
SPECIAL, /* 0x3d - F3 */ |
SPECIAL, /* 0x3e - F4 */ |
SPECIAL, /* 0x3f - F5 */ |
SPECIAL, /* 0x40 - F6 */ |
SPECIAL, /* 0x41 - F7 */ |
SPECIAL, /* 0x42 - F8 */ |
SPECIAL, /* 0x43 - F9 */ |
SPECIAL, /* 0x44 - F10 */ |
(FUNCTION_KEYS | 1), /* 0x3b - F1 */ |
(FUNCTION_KEYS | 2), /* 0x3c - F2 */ |
(FUNCTION_KEYS | 3), /* 0x3d - F3 */ |
(FUNCTION_KEYS | 4), /* 0x3e - F4 */ |
(FUNCTION_KEYS | 5), /* 0x3f - F5 */ |
(FUNCTION_KEYS | 6), /* 0x40 - F6 */ |
(FUNCTION_KEYS | 7), /* 0x41 - F7 */ |
(FUNCTION_KEYS | 8), /* 0x42 - F8 */ |
(FUNCTION_KEYS | 9), /* 0x43 - F9 */ |
(FUNCTION_KEYS | 10), /* 0x44 - F10 */ |
SPECIAL, /* 0x45 - NumLock */ |
SPECIAL, /* 0x46 - ScrollLock */ |
'7', '8', '9', '-', |
97,8 → 99,8 |
SPECIAL, /* 0x54 - Alt-SysRq */ |
SPECIAL, /* 0x55 - F11/F12/PF1/FN */ |
SPECIAL, /* 0x56 - unlabelled key next to LAlt */ |
SPECIAL, /* 0x57 - F11 */ |
SPECIAL, /* 0x58 - F12 */ |
FUNCTION_KEYS | 11, /* 0x57 - F11 */ |
FUNCTION_KEYS | 12, /* 0x58 - F12 */ |
SPECIAL, /* 0x59 */ |
SPECIAL, /* 0x5a */ |
SPECIAL, /* 0x5b */ |
250,10 → 252,10 |
static int key_pressed(keybuffer_t *keybuffer, unsigned char key) |
{ |
char *map = sc_primary_map; |
char ascii = sc_primary_map[key]; |
char shift, capslock; |
char letter = 0; |
int *map = sc_primary_map; |
int ascii = sc_primary_map[key]; |
int shift, capslock; |
int letter = 0; |
switch (key) { |
case SC_LSHIFT: |
/uspace/trunk/console/console.c |
---|
284,7 → 284,7 |
ipc_callid_t callid; |
ipc_call_t call; |
int retval; |
char c; |
int c; |
connection_t *conn; |
/* Ignore parameters, the connection is alread opened */ |
304,11 → 304,11 |
conn = &connections[active_console]; |
// if ((c >= KBD_KEY_F1) && (c < KBD_KEY_F1 + CONSOLE_COUNT)) { |
if ((c >= '0') && (c < '0' + CONSOLE_COUNT)) { |
if (c == '0') |
if ((c >= 0x101) && (c < 0x101 + CONSOLE_COUNT)) { |
if (c == 0x112) |
change_console(KERNEL_CONSOLE); |
else |
change_console(c - '1'); |
change_console(c - 0x101); |
break; |
} |
/uspace/trunk/fb/main.c |
---|
56,6 → 56,7 |
ipcarg_t phonead; |
int initialized = 0; |
#ifdef ia32 |
if (sysinfo_value("fb.kind") == 1) { |
if (fb_init() == 0) |
initialized = 1; |
63,7 → 64,20 |
if (ega_init() == 0) |
initialized = 1; |
} |
#endif |
#ifdef amd64 |
if (sysinfo_value("fb.kind") == 1) { |
if (fb_init() == 0) |
initialized = 1; |
} else if (sysinfo_value("fb.kind") == 2) { |
if (ega_init() == 0) |
initialized = 1; |
} |
#endif |
if (!initialized) |
sysio_init(); |
/uspace/trunk/fb/Makefile |
---|
45,13 → 45,24 |
OUTPUT = fb |
SOURCES = \ |
fb.c \ |
font-8x16.c \ |
main.c \ |
sysio.c \ |
ega.c \ |
ppm.c |
ifeq ($(ARCH), ia32) |
SOURCES += fb.c \ |
font-8x16.c \ |
ega.c |
endif |
ifeq ($(ARCH), amd64) |
SORCES += fb.c \ |
font-8x16.c \ |
ega.c |
endif |
CFLAGS += -D$(ARCH) |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |
.PHONY: all clean depend disasm |