static int kbd_cmd_read(int cmd) { if (kbd_write(I8042_CMD_REG, cmd)) return -1; return kbd_read(I8042_DATA_REG); }
void handle_interrupt() { uint8_t scan_code = kbd_read(); char character = kbd_scan_code_to_ascii(scan_code); char message2[2] = { character, '\0' }; write(message2); pic_acknowledge(); }
/* void test(void) { window win; char name[10]="window"; clearscreen(); win_init(&win,1,1,10,40,name,blightgray|fwhite,blightgray|fblack); win_create(&win); win_putchar(&win,'n'); win_putchar(&win,'\n'); int i; for(i=0;i<7;i++) win_putstring(&win,"testing win_putstring\n");/ for(i=0;i<4;i++)// win_putstring(&win,"new line\n"); } */ int main(struct multiboot *mboot_ptr) { welcome(); init_descriptor_tables(); asm volatile("sti"); init_timer(1); wait(1); win_clear(&win_boot); win_putstring(&win_boot,"\ninitializing timer...\t"); wait(1); win_putstring(&win_boot," done"); win_putstring(&win_boot,"\ninitializing keyboard...\t"); init_kbd(); wait(1); win_putstring(&win_boot," done"); win_putstring(&win_boot,"\npress any key to continue...\n"); u8int s,a; kbd_read(&s,&a); clearscreen(); terminal(); while(1); return 0; }
static int kbd_reset(int quirk) { int config; /* controller self test */ if (kbd_cmd_read(CMD_SELF_TEST) != KBC_TEST_OK) goto err; /* keyboard reset */ if (kbd_write(I8042_DATA_REG, CMD_RESET_KBD) || kbd_read(I8042_DATA_REG) != KBD_ACK || kbd_read(I8042_DATA_REG) != KBD_POR) goto err; if (kbd_write(I8042_DATA_REG, CMD_DRAIN_OUTPUT) || kbd_read(I8042_DATA_REG) != KBD_ACK) goto err; /* set AT translation and disable irq */ config = kbd_cmd_read(CMD_RD_CONFIG); if (config == -1) goto err; /* Sometimes get a second byte */ else if ((quirk & QUIRK_DUP_POR) && config == KBD_POR) config = kbd_cmd_read(CMD_RD_CONFIG); config |= CONFIG_AT_TRANS; config &= ~(CONFIG_KIRQ_EN | CONFIG_MIRQ_EN); if (kbd_cmd_write(CMD_WR_CONFIG, config)) goto err; /* enable keyboard */ if (kbd_write(I8042_CMD_REG, CMD_KBD_EN) || !kbd_input_empty()) goto err; return 0; err: debug("%s: Keyboard failure\n", __func__); return -1; }
void run_shell(void) { int cnt; while (1) { puts("eash$> "); while ((cnt = kbd_read(buff, 254)) <= 0) ; buff[--cnt] = 0; if (*buff) if (command_exec(buff) == -1) puts("Command not found.\n"); } }