diff options
author | Jakob Odersky <jodersky@gmail.com> | 2014-01-25 14:47:07 +0100 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2014-01-25 14:47:07 +0100 |
commit | 7dd00b2267d991a102f18eacf3e2afacb570a299 (patch) | |
tree | 9138bc7ce4feba262a20063f94aceaba3ec30788 /kernel/serial/include/serial/serial.h | |
parent | 9453a44cfc475b57319d1051c74f72753ca4f64c (diff) | |
download | mux-7dd00b2267d991a102f18eacf3e2afacb570a299.tar.gz mux-7dd00b2267d991a102f18eacf3e2afacb570a299.tar.bz2 mux-7dd00b2267d991a102f18eacf3e2afacb570a299.zip |
implement serial
Diffstat (limited to 'kernel/serial/include/serial/serial.h')
-rw-r--r-- | kernel/serial/include/serial/serial.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/kernel/serial/include/serial/serial.h b/kernel/serial/include/serial/serial.h new file mode 100644 index 0000000..f6fcfc5 --- /dev/null +++ b/kernel/serial/include/serial/serial.h @@ -0,0 +1,42 @@ +#ifndef SERIAL_H +#define SERIAL_H + +#include <stddef.h> +#include "collection/rbuffer.h" +#include "collection/list.h" + +#define USARTS 1 +#define SERIAL_BUFFER_SIZE 64 + +struct serial_device_t { + volatile char __rx_buffer[SERIAL_BUFFER_SIZE]; + volatile char __tx_buffer[SERIAL_BUFFER_SIZE]; + + struct rbuffer_t rx_buffer; + struct rbuffer_t tx_buffer; + + struct list_head rx_q; + struct list_head tx_q; +}; + +#define SERIAL_DEVICE_INIT(name) \ + { \ + .rx_buffer = RBUFFER_ARRAY_INIT(name.__rx_buffer, SERIAL_BUFFER_SIZE), \ + .tx_buffer = RBUFFER_ARRAY_INIT(name.__tx_buffer, SERIAL_BUFFER_SIZE), \ + .rx_q = LIST_HEAD_INIT(name.rx_q), \ + .tx_q = LIST_HEAD_INIT(name.tx_q) \ + } + +void serial_init(unsigned long baud); + +size_t serial_read(char* const data, size_t size); + +size_t serial_write(const char* const data, size_t size); + +inline void serial_write_str(const char* const str) { + size_t length = 0; + for (length = 0; str[length] != 0; ++length){} + serial_write(str, length); +} + +#endif
\ No newline at end of file |