usb_init(OHCI0_REG_BASE);
/* internal ohci */
- usb_init(OHCI1_REG_BASE);
+ //usb_init(OHCI1_REG_BASE);
/* load HID keyboard driver */
usb_hidkb_init();
}
while(!usb_hidkb_inuse());
+ print_str("hello keyboard :)", 17);
+
#define FONT_WIDTH 13
#define FONT_HEIGHT 15
#define STDOUT_BORDER_LEFT 20
#define TABSIZE 4
/* you are welcome to make this nice :) */
char str[7];
- u16 i, j, y=STDOUT_BORDER_TOP, x=STDOUT_BORDER_LEFT;
+ u16 i, j, ret=0, y=STDOUT_BORDER_TOP, x=STDOUT_BORDER_LEFT;
u16 old_x, old_y;
- struct kbrep *k;
+ struct kbrep *k, *old=NULL;
while(1) {
memset(str, '\0', 7);
- j=0;
k = usb_hidkb_getChars();
+ j=0;
old_x = x; /* save actual x and y position for printing after the loop */
old_y = y;
for(i=0; k->keys[i]>0; i++) {
+
+ /* dropping char's if necessary */
+ if(old) {
+ for(j=0; j < 6; j++) {
+ if(old->keys[j] == k->keys[i]) {
+ ret = 1;
+ break;
+ }
+ }
+ }
+ if(ret) {
+ ret = 0;
+ continue;
+ }
+ j = 0;
+
unsigned char key = usb_hidkb_get_char_from_keycode(k->keys[i],
(k->mod & MOD_lshift) || (k->mod & MOD_rshift));
/* no key or key not relevant? next, please. */
if (key == '\n') {
x = STDOUT_BORDER_LEFT;
y += FONT_HEIGHT;
+ printf("\n");
/* TAB pressed? */
} else if (key == '\t') {
x += (TABSIZE*FONT_WIDTH);
+ printf("\t");
/* BACKSPACE pressed? */
} else if (key == '\r') {
y = STDOUT_BORDER_TOP;
}
}
+ if(old) {
+ free(old);
+ }
+ old = k;
if(j > 0) { /* when there was any printable stuff, show it */
print_str_noscroll(old_x, old_y, str);
- printf("y: %d\n", y);
+ printf("%s", str);
}
-
}
#if 0