#include "epicardium.h" #include <stdarg.h> #include <stdio.h> #include "py/mpprint.h" #include "py/mphal.h" #include <string.h> int printf(const char *fmt, ...) { va_list ap; va_start(ap, fmt); int ret = mp_vprintf(MP_PYTHON_PRINTER, fmt, ap); va_end(ap); return ret; } #ifdef putc #undef putc #endif /* putc */ int putc(int c, FILE *f) { char chr = (char)c; mp_hal_stdout_tx_strn_cooked(&chr, 1); return c; } #ifdef putchar #undef putchar #endif /* putchar */ int putchar(int c) { char chr = (char)c; mp_hal_stdout_tx_strn_cooked(&chr, 1); return c; } int puts(const char *s) { int length = strlen(s); if (length) { mp_hal_stdout_tx_strn_cooked(s, length); } return length; } /* Used by mp_hal_move_cursor_back() */ int snprintf(char *str, size_t size, const char *format, ...) { /* * There is one known place where snprintf is used: The * mp_hal_move_cursor_back() function from mp-readline. * This stub implementation just implements printf for * that one case. */ if (format[0] != '\x1B' || size != 6) { return -EIO; } va_list ap; va_start(ap, format); printf("\x1B[%uD", va_arg(ap, unsigned int)); va_end(ap); return -1; } /* Use by assert() */ int fiprintf(FILE *f, const char *fmt, ...) { /* TODO: Maybe printing everything to UART isn't the correct thing? */ va_list ap; va_start(ap, fmt); int ret = mp_vprintf(MP_PYTHON_PRINTER, fmt, ap); va_end(ap); return ret; } int raise(int sig) { /* Ignore signals */ return 0; }