X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=main.c;h=6c30ab6cbdee73d17f98ecfe64b38f49cc25cb23;hb=32c659c8a7c88ec21c878c4778a1f2e1dca49b5f;hp=430db727015172e65c3a6d1eaaa9c321c47b79b9;hpb=1f2f56aa83e0076f34c78b5fb8e45e8f2a9426b3;p=ppcskel.git diff --git a/main.c b/main.c index 430db72..6c30ab6 100644 --- a/main.c +++ b/main.c @@ -123,48 +123,78 @@ int main(void) usb_init(OHCI0_REG_BASE); /* internal ohci */ - //usb_init(OHCI1_REG_BASE); + usb_init(OHCI1_REG_BASE); /* load HID keyboard driver */ usb_hidkb_init(); + /* wait for usb keyboard plugged in */ + if(!usb_hidkb_inuse()) { + print_str("plug in an usb keyboard", 23); + } + while(!usb_hidkb_inuse()); + +#define FONT_WIDTH 13 +#define FONT_HEIGHT 15 +#define STDOUT_BORDER_LEFT 20 +#define STDOUT_BORDER_RIGHT 650 +#define STDOUT_BORDER_TOP 20 +#define STDOUT_BORDER_BOTTOM 550 +#define TABSIZE 4 /* you are welcome to make this nice :) */ char str[7]; - u16 i, j, y=20, x=20; + u16 i, j, y=STDOUT_BORDER_TOP, x=STDOUT_BORDER_LEFT; + u16 old_x, old_y; struct kbrep *k; while(1) { - memset(str, '\0', 8); + memset(str, '\0', 7); j=0; k = usb_hidkb_getChars(); + 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++) { - if(x>650) { - x = 20; - y += 15; - } - if(y>440) { - y=20; + 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 == 0) + continue; + + /* RETURN pressed? */ + if (key == '\n') { + x = STDOUT_BORDER_LEFT; + y += FONT_HEIGHT; + /* TAB pressed? */ + } else if (key == '\t') { + x += (TABSIZE*FONT_WIDTH); + + /* BACKSPACE pressed? */ + } else if (key == '\r') { + /* TODO */ + + /* now we have only printable characters left */ + } else { + x += FONT_WIDTH; + str[j] = key; + j++; } - if((k->keys[i] >= 4) && k->keys[i] <= 4+'z'-'a') { - str[j] = k->keys[i] - 4 + (k->mod & MOD_lshift || k->mod & MOD_rshift ? 'A' : 'a'); - } else if ((k->keys[i] >= 0x1e) && (k->keys[i] <= 0x26)) { - str[j] = k->keys[i] - 0x1e + '1'; - } else if (k->keys[i] == 0x27) { - str[j] = '0'; + + /* line full? break! */ + if(x > (STDOUT_BORDER_RIGHT-FONT_WIDTH)) { + x = STDOUT_BORDER_LEFT; + y += FONT_HEIGHT; } - else if (k->keys[i] == 0x28) { - y += 15; - x = 20; + /* screen full? start again at top */ + if(y > (STDOUT_BORDER_BOTTOM-FONT_HEIGHT)) { + y = STDOUT_BORDER_TOP; } - j++; } - if(j > 0) { - print_str_noscroll(x, y, str); + free(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); } - while(j--) { - x += 13; - } + } #if 0