116,7 → 116,7 |
static void pl050_irq_handler(irq_t *irq, void *arg, ...) |
{ |
static int key_released_flag = 0; |
static uint8_t prev_char = 0xFF; |
static int caps_count = 0; |
|
if (irq->notif_cfg.notify && irq->notif_cfg.answerbox) |
ipc_irq_send_notif(irq); |
130,15 → 130,24 |
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 && prev_char == data) { |
prev_char = 0xFF; |
if (key_released_flag) { |
key_released(data); |
} else { |
key_pressed(data); |
prev_char = data; |
} |
key_released_flag = 0; |
} |
161,7 → 170,7 |
pl050_kbd_pbase = pbase; |
pl050_kbd_vbase = vbase; |
irq_register(&pl050_kbd_irq); |
val = PL050_CR_RXINTR | PL050_CR_INTR | PL050_CR_FKMIC; |
val = PL050_CR_RXINTR | PL050_CR_INTR; |
|
pl050_crwrite(val); |
|
190,7 → 199,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)) |
212,6 → 221,7 |
{ |
uint8_t x; |
|
printf("entering poll\n"); |
while (((x = pl050_statusread() & PL050_STAT_RXFULL))) { |
x = pl050_dataread(); |
if (x & KEY_RELEASE) |