summaryrefslogtreecommitdiff
path: root/bsp/libwrap/sys/read.c
diff options
context:
space:
mode:
Diffstat (limited to 'bsp/libwrap/sys/read.c')
-rw-r--r--bsp/libwrap/sys/read.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/bsp/libwrap/sys/read.c b/bsp/libwrap/sys/read.c
new file mode 100644
index 0000000..4e57f08
--- /dev/null
+++ b/bsp/libwrap/sys/read.c
@@ -0,0 +1,30 @@
+/* See LICENSE of license details. */
+
+#include <stdint.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+#include "platform.h"
+#include "stub.h"
+
+ssize_t __wrap_read(int fd, void* ptr, size_t len)
+{
+ uint8_t * current = (uint8_t *)ptr;
+ volatile uint32_t * uart_rx = (uint32_t *)(UART0_BASE_ADDR + UART_REG_RXFIFO);
+ volatile uint8_t * uart_rx_cnt = (uint8_t *)(UART0_BASE_ADDR + UART_REG_RXCTRL + 2);
+
+ ssize_t result = 0;
+
+ if (isatty(fd)) {
+ for (current = (uint8_t *)ptr;
+ (current < ((uint8_t *)ptr) + len) && (*uart_rx_cnt > 0);
+ current ++) {
+ *current = *uart_rx;
+ result++;
+ }
+ return result;
+ }
+
+ return _stub(EBADF);
+}