提交 0cd49a20 编写于 作者: P Parai Wang

x86: support both keyboard input and serial COM1 input

Signed-off-by: NParai Wang <parai@foxmail.com>
上级 3416187e
...@@ -14,4 +14,4 @@ floppy.img: ...@@ -14,4 +14,4 @@ floppy.img:
wget https://github.com/bajdcc/tinix/raw/master/floppy.img wget https://github.com/bajdcc/tinix/raw/master/floppy.img
run: run:
qemu-system-i386 -fda floppy.img -boot a -m 64M qemu-system-i386 -fda floppy.img -boot a -m 64M -serial stdio
...@@ -25,6 +25,10 @@ extern void init_keyboard(); ...@@ -25,6 +25,10 @@ extern void init_keyboard();
extern void rt_keyboard_isr(void); extern void rt_keyboard_isr(void);
extern rt_bool_t rt_keyboard_getc(char* c); extern rt_bool_t rt_keyboard_getc(char* c);
extern void rt_serial_init(void);
extern char rt_serial_getc(void);
extern void rt_serial_putc(const char c);
static void rt_console_putc(int c); static void rt_console_putc(int c);
/** /**
...@@ -126,7 +130,7 @@ static void rt_cga_putc(int c) ...@@ -126,7 +130,7 @@ static void rt_cga_putc(int c)
static void rt_console_putc(int c) static void rt_console_putc(int c)
{ {
rt_cga_putc(c); rt_cga_putc(c);
// rt_serial_putc(c); rt_serial_putc(c);
} }
/* RT-Thread Device Interface */ /* RT-Thread Device Interface */
...@@ -217,9 +221,18 @@ static void rt_console_isr(int vector, void* param) ...@@ -217,9 +221,18 @@ static void rt_console_isr(int vector, void* param)
rt_bool_t ret; rt_bool_t ret;
rt_base_t level; rt_base_t level;
rt_keyboard_isr(); if(INTUART0_RX == vector)
{
c = rt_serial_getc();
ret = RT_TRUE;
}
else
{
rt_keyboard_isr();
ret = rt_keyboard_getc(&c);
}
ret = rt_keyboard_getc(&c);
if(ret == RT_FALSE) if(ret == RT_FALSE)
{ {
/* do nothing */ /* do nothing */
...@@ -275,12 +288,16 @@ static void rt_console_isr(int vector, void* param) ...@@ -275,12 +288,16 @@ static void rt_console_isr(int vector, void* param)
void rt_hw_console_init(void) void rt_hw_console_init(void)
{ {
rt_cga_init(); rt_cga_init();
rt_serial_init();
init_keyboard(); init_keyboard();
/* install keyboard isr */ /* install keyboard isr */
rt_hw_interrupt_install(INTKEYBOARD, rt_console_isr, RT_NULL, "kbd"); rt_hw_interrupt_install(INTKEYBOARD, rt_console_isr, RT_NULL, "kbd");
rt_hw_interrupt_umask(INTKEYBOARD); rt_hw_interrupt_umask(INTKEYBOARD);
rt_hw_interrupt_install(INTUART0_RX, rt_console_isr, RT_NULL, "COM1");
rt_hw_interrupt_umask(INTUART0_RX);
console_device.type = RT_Device_Class_Char; console_device.type = RT_Device_Class_Char;
console_device.rx_indicate = RT_NULL; console_device.rx_indicate = RT_NULL;
console_device.tx_complete = RT_NULL; console_device.tx_complete = RT_NULL;
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <rthw.h> #include <rthw.h>
#include <bsp.h> #include <bsp.h>
extern char rt_keyboard_getc(void);
/** /**
* @addtogroup QEMU * @addtogroup QEMU
...@@ -45,13 +44,11 @@ void rt_serial_init(void) ...@@ -45,13 +44,11 @@ void rt_serial_init(void)
*/ */
char rt_serial_getc(void) char rt_serial_getc(void)
{ {
return rt_keyboard_getc();
#if 0
while(!(inb(COM1+COMSTATUS) & COMDATA)); while(!(inb(COM1+COMSTATUS) & COMDATA));
return inb(COM1+COMREAD); return inb(COM1+COMREAD);
#endif
} }
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册