update readme introduction part, add demo screen-shot
[lunaix-os.git] / lunaix-os / hal / char / lxconsole.c
index 63876707cfe4ff87dc9523dbc133b71b082ce493..1ac2d577aa4f8115c06b1d1b00a7d9f7a6981c6e 100644 (file)
@@ -27,6 +27,7 @@
 
 struct console
 {
+    struct termport_potens* tp_cap;
     struct lx_timer* flush_timer;
     struct fifo_buf output;
     struct fifo_buf input;
@@ -90,8 +91,10 @@ __lxconsole_listener(struct input_device* dev)
     }
 
     fifo_putone(&lx_console.input, ttychr);
-    pwake_all(&lx_reader);
 
+    term_notify_data_avaliable(lx_console.tp_cap);
+    
+    pwake_all(&lx_reader);
 done:
     return INPUT_EVT_NEXT;
 }
@@ -132,6 +135,14 @@ __tty_read(struct device* dev, void* buf, size_t offset, size_t len)
     return count + fifo_read(&console->input, buf + count, len - count);
 }
 
+int
+__tty_read_async(struct device* dev, void* buf, size_t offset, size_t len)
+{
+    struct console* console = (struct console*)dev->underlay;
+
+    return fifo_read(&console->input, buf, len);
+}
+
 size_t
 __find_next_line(size_t start)
 {
@@ -279,21 +290,22 @@ lxconsole_spawn_ttydev(struct device_def* devdef)
     tty_dev->ops.write_page = __tty_write_pg;
     tty_dev->ops.read = __tty_read;
     tty_dev->ops.read_page = __tty_read_pg;
+    tty_dev->ops.write_async = __tty_write;
+    tty_dev->ops.read_async = __tty_read_async;
 
     waitq_init(&lx_reader);
     input_add_listener(__lxconsole_listener);
 
     register_device(tty_dev, &devdef->class, "vcon");
 
-    term_create(tty_dev, "FB");
+    lx_console.tp_cap = term_attach_potens(tty_dev, NULL, "VCON");
 
     return 0;
 }
 
 static struct device_def lxconsole_def = {
-    .name = "Lunaix Virtual Console",
-    .class = DEVCLASS(DEVIF_NON, DEVFN_TTY, DEV_BUILTIN),
-    .init = lxconsole_spawn_ttydev
+    def_device_name("Lunaix Virtual Console"),
+    def_device_class(LUNAIX, TTY, VTERM),
+    def_on_load(lxconsole_spawn_ttydev)
 };
-// FIXME
 EXPORT_DEVICE(lxconsole, &lxconsole_def, load_onboot);
\ No newline at end of file