z7 uart0 buffered read

This commit is contained in:
2024-07-23 17:08:11 +02:00
parent cbe8184fab
commit 926ef26000
10 changed files with 214 additions and 72 deletions

View File

@ -5,6 +5,7 @@
#include "interface_access.h"
#include "interface_fds.h"
#include "uart.h"
int compare_string_chars(const char *c_string, const char *chars,
size_t chars_len) {
@ -19,8 +20,10 @@ int compare_string_chars(const char *c_string, const char *chars,
return 1;
}
//TODO no dual open
int hw_device_open(const char *path, size_t path_len) {
if (compare_string_chars("uart0", path, path_len) == 1) {
uart0_enable_receiver();
return UART_0;
}
if (compare_string_chars("uart1", path, path_len) == 1) {
@ -38,7 +41,7 @@ ssize_t hw_device_transfer(int fd, void *sendbuffer, void *receivebuffer,
// we could implement interrupt based nonblocking sending using a queue
// like we do receiving (where we need it for the small hw buffer)
// but in the end, we do not want too many interrupts, so we do it blocking
void send_uart(uint32_t BaseAddress, const char *data, int data_len) {
void uart_send(uint32_t BaseAddress, const char *data, int data_len) {
int todo;
for (todo = 0; todo < data_len; todo++) {
XUartPs_SendByte(BaseAddress, *data++);
@ -49,10 +52,10 @@ int hw_interface_write(int fd, const char *ptr, int len) {
enum InterfaceFileDescriptors fd_enum = fd;
switch (fd) {
case UART_0:
send_uart(XPS_UART0_BASEADDR, ptr, len);
uart_send(XPS_UART0_BASEADDR, ptr, len);
return len;
case UART_1:
send_uart(XPS_UART1_BASEADDR, ptr, len);
uart_send(XPS_UART1_BASEADDR, ptr, len);
return len;
}
return -1;
@ -62,7 +65,7 @@ int hw_interface_read(int fd, char *ptr, int len) {
enum InterfaceFileDescriptors fd_enum = fd;
switch (fd) {
case UART_0:
return 0;
return uart0_read(ptr,len);
case UART_1:
return 0;
}