/* See LICENSE of license details. */ #include #include #include #include #include "../../include/tgc-vp/devices/uart.h" #include "../../env/tgc-vp/platform.h" #include "platform.h" #include "stub.h" #include "weak_under_alias.h" #include "semihosting.h" ssize_t __wrap_write(int fd, const void* ptr, size_t len) { const uint8_t * current = (const uint8_t *)ptr; #if defined(SEMIHOSTING) if(isatty(fd)) { for (size_t jj = 0; jj < len; jj++) { sh_writec(current[jj]); } return len; } else { sh_write(current, fd); return len; } //return len; #endif if (isatty(fd)) { for (size_t jj = 0; jj < len; jj++) { #if defined(BOARD_ehrenberg) || defined(BOARD_tgc_vp) while (get_uart_rx_tx_reg_tx_free(uart) == 0) ; uart_write(uart, current[jj]); if (current[jj] == '\n') { while (get_uart_rx_tx_reg_tx_free(uart) == 0) ; uart_write(uart, '\r'); } #elif defined(BOARD_iss) *((uint32_t *)0xFFFF0000) = current[jj]; #elif defined(BOARD_TGCP) // TODO: implement #else while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; UART0_REG(UART_REG_TXFIFO) = current[jj]; if (current[jj] == '\n') { while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; UART0_REG(UART_REG_TXFIFO) = '\r'; } #endif } return len; } return _stub(EBADF); } weak_under_alias(write);