summaryrefslogtreecommitdiff
path: root/bsp
diff options
context:
space:
mode:
authorParai Wang <[email protected]>2017-08-18 12:02:43 +0800
committerParai Wang <[email protected]>2017-08-18 12:02:43 +0800
commit0cd49a20ad0c8cbb40e200d25595e345e56ce735 (patch)
tree0186fd36d9d5db5757ede545540b89826f54f59d /bsp
parent3416187ecf81db137a303ae39103eae0d7d42d9d (diff)
x86: support both keyboard input and serial COM1 input
Signed-off-by: Parai Wang <[email protected]>
Diffstat (limited to 'bsp')
-rw-r--r--bsp/x86/Makefile2
-rw-r--r--bsp/x86/drivers/console.c23
-rw-r--r--bsp/x86/drivers/serial.c5
3 files changed, 22 insertions, 8 deletions
diff --git a/bsp/x86/Makefile b/bsp/x86/Makefile
index 7719a12b7d..1befec1368 100644
--- a/bsp/x86/Makefile
+++ b/bsp/x86/Makefile
@@ -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
diff --git a/bsp/x86/drivers/console.c b/bsp/x86/drivers/console.c
index a73838ff4c..6ffe9a7994 100644
--- a/bsp/x86/drivers/console.c
+++ b/bsp/x86/drivers/console.c
@@ -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;
diff --git a/bsp/x86/drivers/serial.c b/bsp/x86/drivers/serial.c
index e2796aa063..51b7a0d96d 100644
--- a/bsp/x86/drivers/serial.c
+++ b/bsp/x86/drivers/serial.c
@@ -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
+
}
/**