Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4631 → Rev 4632

/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 uint8_t prev_char = 0xFF;
static int caps_count = 0;
 
if (irq->notif_cfg.notify && irq->notif_cfg.answerbox)
ipc_irq_send_notif(irq);
129,16 → 129,25
 
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)