Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4631 → Rev 4632

/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/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"
/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)
/branches/arm/kernel/arch/arm32/src/drivers/qemu.c
213,6 → 213,7
* 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/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/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,19 → 91,29
int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
{
static int key_released_flag = 0;
static uint8_t prev_char = 0xFF;
static int caps_count = 0;
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 && prev_char == scan_code) {
prev_char = 0xFF;
if (key_released_flag) {
key_released(keybuffer, scan_code);
} else {
key_pressed(keybuffer, scan_code);
prev_char = scan_code;
}
key_released_flag = 0;
}