x86: support both keyboard input and serial COM1 input
Signed-off-by: Parai Wang <parai@foxmail.com>
This commit is contained in:
parent
3416187ecf
commit
0cd49a20ad
|
@ -14,4 +14,4 @@ floppy.img:
|
|||
wget https://github.com/bajdcc/tinix/raw/master/floppy.img
|
||||
|
||||
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();
|
|||
extern void rt_keyboard_isr(void);
|
||||
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);
|
||||
|
||||
/**
|
||||
|
@ -126,7 +130,7 @@ static void rt_cga_putc(int c)
|
|||
static void rt_console_putc(int c)
|
||||
{
|
||||
rt_cga_putc(c);
|
||||
// rt_serial_putc(c);
|
||||
rt_serial_putc(c);
|
||||
}
|
||||
|
||||
/* RT-Thread Device Interface */
|
||||
|
@ -217,9 +221,18 @@ static void rt_console_isr(int vector, void* param)
|
|||
rt_bool_t ret;
|
||||
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)
|
||||
{
|
||||
/* do nothing */
|
||||
|
@ -275,12 +288,16 @@ static void rt_console_isr(int vector, void* param)
|
|||
void rt_hw_console_init(void)
|
||||
{
|
||||
rt_cga_init();
|
||||
rt_serial_init();
|
||||
init_keyboard();
|
||||
|
||||
/* install keyboard isr */
|
||||
rt_hw_interrupt_install(INTKEYBOARD, rt_console_isr, RT_NULL, "kbd");
|
||||
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.rx_indicate = RT_NULL;
|
||||
console_device.tx_complete = RT_NULL;
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#include <rthw.h>
|
||||
|
||||
#include <bsp.h>
|
||||
extern char rt_keyboard_getc(void);
|
||||
|
||||
/**
|
||||
* @addtogroup QEMU
|
||||
|
@ -45,13 +44,11 @@ void rt_serial_init(void)
|
|||
*/
|
||||
char rt_serial_getc(void)
|
||||
{
|
||||
return rt_keyboard_getc();
|
||||
|
||||
#if 0
|
||||
while(!(inb(COM1+COMSTATUS) & COMDATA));
|
||||
|
||||
return inb(COM1+COMREAD);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue