rewrite the device subsystem interfaces (#48)
[lunaix-os.git] / lunaix-os / includes / hal / serial.h
index 8346fd0422dd5ba22008b1f1dcc44aad3515f09b..ba2185c96ef35a1349e47b1844ba199624566c8b 100644 (file)
@@ -2,10 +2,13 @@
 #define __LUNAIX_SERIAL_H
 
 #include <lunaix/device.h>
-#include <lunaix/ds/fifo.h>
 #include <lunaix/ds/llist.h>
 #include <lunaix/ds/mutex.h>
 #include <lunaix/ds/waitq.h>
+#include <lunaix/ds/rbuffer.h>
+#include <hal/term.h>
+
+#include <usr/lunaix/serial.h>
 
 #define SERIAL_RW_RX 0x0
 #define SERIAL_RW_TX 0x1
@@ -24,14 +27,15 @@ struct serial_dev
 {
     struct llist_header sdev_list;
     struct device* dev;
-    mutex_t lock;
     struct waitq wq_rxdone;
     struct waitq wq_txdone;
     void* backend;
 
-    struct fifo_buf rxbuf;
+    struct rbuffer rxbuf;
     int wr_len;
 
+    struct termport_potens* tp_cap;
+
     /**
      * @brief Write buffer to TX. The return code indicate
      * the transaction is either done in synced mode (TX_DONE) or will be
@@ -42,8 +46,18 @@ struct serial_dev
     int (*exec_cmd)(struct serial_dev* sdev, u32_t, va_list);
 };
 
+/**
+ * @brief Create a serial device.
+ *
+ *
+ * @param if_ident a string that differentiate the underlying interface of
+ * serial ports
+ * @param with_tty whether a `/dev/tty*` will be automatically created and
+ * attach to it.
+ * @return struct serial_dev*
+ */
 struct serial_dev*
-serial_create(struct devclass* class);
+serial_create(struct devclass* class, char* if_ident);
 
 void
 serial_readone(struct serial_dev* sdev, u8_t* val);