/branches/arm/uspace/srv/kbd/arch/arm32/src/scanc.c |
---|
53,7 → 53,7 |
(FUNCTION_KEYS | 6), /* 0x0B - F6 */ |
(FUNCTION_KEYS | 4), /* 0x0C - F4 */ |
'\t', /* 0x0D - Tab */ |
'`', |
'~', |
SPECIAL, /* 0x0F */ |
SPECIAL, /* 0x10 */ |
SPECIAL, /* 0x11 - LAlt */ |
86,15 → 86,15 |
'.', '/', 'l', ';', 'p', '-', |
SPECIAL, /* 0x4F */ |
SPECIAL, /* 0x50 */ |
SPECIAL, /* 0x51 */ |
'\'', |
SPECIAL, /* 0x52 */ |
SPECIAL, /* 0x53 */ |
'[', '=', |
'{', '=', |
SPECIAL, /* 0x56 */ |
SPECIAL, /* 0x57 */ |
SPECIAL, /* 0x58 - Caps Lock */ |
SPECIAL, /* 0x59 - RShift */ |
'\n', ']', |
'\n', '}', |
SPECIAL, /* 0x5C */ |
'\\', |
SPECIAL, /* 0x5E */ |
182,8 → 182,8 |
'>', '?', 'L', ':', 'P', '_', |
SPECIAL, /* 0x4F */ |
SPECIAL, /* 0x50 */ |
SPECIAL, /* 0x51 */ |
'"', |
SPECIAL, /* 0x52 */ |
SPECIAL, /* 0x53 */ |
'{', '+', |
SPECIAL, /* 0x56 */ |
/branches/arm/uspace/srv/kbd/arch/arm32/src/kbd_icp.c |
---|
91,29 → 91,19 |
int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) |
{ |
static int key_released_flag = 0; |
static int caps_count = 0; |
static uint8_t prev_char = 0xFF; |
int scan_code = IPC_GET_ARG1(*call); |
if (scan_code == 0x58) { |
if (caps_count == 2) { |
caps_count = 0; |
return 1; |
} else if (key_released_flag && !caps_count) { |
key_released_flag = 0; |
return 1; |
} |
caps_count++; |
} |
if (scan_code == PL050_KEY_RELEASE) { |
key_released_flag = 1; |
} else { |
if (key_released_flag) { |
if (key_released_flag && prev_char == scan_code) { |
prev_char = 0xFF; |
key_released(keybuffer, scan_code); |
} else { |
key_pressed(keybuffer, scan_code); |
prev_char = scan_code; |
} |
key_released_flag = 0; |
} |
/branches/arm/uspace/srv/kbd/Makefile |
---|
72,13 → 72,13 |
genarch/src/kbd.c |
endif |
ifeq ($(ARCH), arm32) |
GENARCH_SOURCES = \ |
genarch/src/kbd.c |
ifeq ($(MACHINE), gxemul_testarm) |
ARCH_SOURCES += \ |
arch/$(ARCH)/src/kbd_gxemul.c |
endif |
ifeq ($(MACHINE), qemu_icp) |
GENARCH_SOURCES = \ |
genarch/src/kbd.c |
ARCH_SOURCES += \ |
arch/$(ARCH)/src/kbd_icp.c \ |
arch/$(ARCH)/src/scanc.c |
/branches/arm/kernel/genarch/src/kbd/scanc_pl050.c |
---|
53,7 → 53,7 |
SPECIAL, /* 0x0B - F10 */ |
SPECIAL, /* 0x0C - F4 */ |
'\t', /* 0x0D - Tab */ |
'`', |
'~', |
SPECIAL, /* 0x0F */ |
SPECIAL, /* 0x10 */ |
SPECIAL, /* 0x11 - LAlt */ |
86,15 → 86,15 |
'.', '/', 'l', ';', 'p', '-', |
SPECIAL, /* 0x4F */ |
SPECIAL, /* 0x50 */ |
SPECIAL, /* 0x51 */ |
'\'', |
SPECIAL, /* 0x52 */ |
SPECIAL, /* 0x53 */ |
'[', '=', |
'{', '=', |
SPECIAL, /* 0x56 */ |
SPECIAL, /* 0x57 */ |
SPECIAL, /* 0x58 - Caps Lock */ |
SPECIAL, /* 0x59 - RShift */ |
'\n', ']', |
'\n', '}', |
SPECIAL, /* 0x5C */ |
'\\', |
SPECIAL, /* 0x5E */ |
182,8 → 182,8 |
'>', '?', 'L', ':', 'P', '_', |
SPECIAL, /* 0x4F */ |
SPECIAL, /* 0x50 */ |
SPECIAL, /* 0x51 */ |
'"', |
SPECIAL, /* 0x52 */ |
SPECIAL, /* 0x53 */ |
'{', '+', |
SPECIAL, /* 0x56 */ |
/branches/arm/kernel/arch/arm32/src/drivers/pl050.c |
---|
116,7 → 116,7 |
static void pl050_irq_handler(irq_t *irq, void *arg, ...) |
{ |
static int key_released_flag = 0; |
static int caps_count = 0; |
static uint8_t prev_char = 0xFF; |
if (irq->notif_cfg.notify && irq->notif_cfg.answerbox) |
ipc_irq_send_notif(irq); |
129,25 → 129,16 |
if (data == PL050_ESC_KEY) |
return; |
if (data == 0x58) { |
if (caps_count == 2) { |
caps_count = 0; |
return; |
} else if (key_released_flag && !caps_count) { |
key_released_flag = 0; |
return; |
} |
caps_count++; |
} |
if (data == PL050_KEY_RELEASE) { |
key_released_flag = 1; |
} else { |
if (key_released_flag) { |
if (key_released_flag && prev_char == data) { |
prev_char = 0xFF; |
key_released(data); |
} else { |
key_pressed(data); |
prev_char = data; |
} |
key_released_flag = 0; |
} |
170,7 → 161,7 |
pl050_kbd_pbase = pbase; |
pl050_kbd_vbase = vbase; |
irq_register(&pl050_kbd_irq); |
val = PL050_CR_RXINTR | PL050_CR_INTR; |
val = PL050_CR_RXINTR | PL050_CR_INTR | PL050_CR_FKMIC; |
pl050_crwrite(val); |
199,7 → 190,7 |
char pl050_key_read(chardev_t *d) |
{ |
char ch; |
printf("entering key_read\n"); |
while(!(ch = active_read_buff_read())) { |
uint8_t x; |
while (!(pl050_statusread() & PL050_STAT_RXFULL)) |
221,7 → 212,6 |
{ |
uint8_t x; |
printf("entering poll\n"); |
while (((x = pl050_statusread() & PL050_STAT_RXFULL))) { |
x = pl050_dataread(); |
if (x & KEY_RELEASE) |
/branches/arm/kernel/arch/arm32/src/drivers/qemu.c |
---|
213,7 → 213,6 |
* We are holding a lock which prevents preemption. |
* Release the lock, call clock() and reacquire the lock again. |
*/ |
*((uint32_t*) qemu_icp_hw_map.rtc1_intrclr) = 1; |
spinlock_unlock(&irq->lock); |
clock(); |
/branches/arm/kernel/arch/arm32/src/exception.c |
---|
100,9 → 100,9 |
"mov r2, lr \n" |
"stmfd r13!, {r4-r12} \n" |
"mov r1, r13 \n" |
/* the following two lines are for debugging */ |
/* the following two lines are for debugging */ |
"mov sp, #0 \n" |
"mov lr, #0 \n" |
"mov lr, #0 \n" |
"msr cpsr_c, r0 \n" |
"ldmfd r13!, {r4, r5, r6, r7} \n" |