1 #ifndef __LUNAIX_SERIAL_H
2 #define __LUNAIX_SERIAL_H
4 #include <lunaix/device.h>
5 #include <lunaix/ds/llist.h>
6 #include <lunaix/ds/mutex.h>
7 #include <lunaix/ds/waitq.h>
8 #include <lunaix/ds/rbuffer.h>
10 #include <usr/lunaix/serial.h>
12 #define SERIAL_RW_RX 0x0
13 #define SERIAL_RW_TX 0x1
14 #define io_dir(flags) ((flags) & SERIAL_RW_TX)
19 #define SERIAL_AGAIN 0x1
20 #define SERIAL_DONE 0x0
23 typedef int (*rxtx_cb)(struct serial_dev*);
27 struct llist_header sdev_list;
29 struct waitq wq_rxdone;
30 struct waitq wq_txdone;
36 struct capability_meta* tp_cap;
39 * @brief Write buffer to TX. The return code indicate
40 * the transaction is either done in synced mode (TX_DONE) or will be
41 * done asynchronously (TX_WAIT).
44 int (*write)(struct serial_dev* sdev, u8_t*, size_t);
45 int (*exec_cmd)(struct serial_dev* sdev, u32_t, va_list);
49 * @brief Create a serial device.
52 * @param if_ident a string that differentiate the underlying interface of
54 * @param with_tty whether a `/dev/tty*` will be automatically created and
56 * @return struct serial_dev*
59 serial_create(struct devclass* class, char* if_ident);
62 serial_readone(struct serial_dev* sdev, u8_t* val);
65 serial_readone_nowait(struct serial_dev* sdev, u8_t* val);
68 serial_readbuf(struct serial_dev* sdev, u8_t* buf, size_t len);
71 serial_readbuf_nowait(struct serial_dev* sdev, u8_t* buf, size_t len);
74 serial_writebuf(struct serial_dev* sdev, u8_t* buf, size_t len);
77 serial_writebuf_nowait(struct serial_dev* sdev, u8_t* buf, size_t len);
80 serial_get_avilable();
83 serial_accept_one(struct serial_dev* sdev, u8_t val);
86 serial_accept_buffer(struct serial_dev* sdev, void* val, size_t len);
89 serial_end_recv(struct serial_dev* sdev);
92 serial_end_xmit(struct serial_dev* sdev, size_t len);
94 #endif /* __LUNAIX_SERIAL_H */