rp2040/component/printf/printf.c
2025-03-19 17:00:31 +08:00

73 lines
1.2 KiB
C

#include "stdint.h"
#include "stdarg.h"
#include "string.h"
#include "uart.h"
uint8_t console = UART_ID_0;
extern void uart_write_block(uint8_t uart_id, uint8_t *data, uint32_t length);
int putchar(int c)
{
uart_write_block(console, (uint8_t *)c, 1);
return c;
}
int puts(const char *c)
{
int len;
len = strlen(c);
uart_write_block(console, (uint8_t *)c, len);
return len;
}
int putstring(const char *c)
{
int len;
if (c == NULL) {
return 0;
}
len = strlen(c);
uart_write_block(console, (uint8_t *)c, len);
return len;
}
#if defined(CONFIG_VSNPRINTF_NANO) && CONFIG_VSNPRINTF_NANO
int printf(const char *fmt, ...)
{
char print_buf[512];
int len;
va_list ap;
va_start(ap, fmt);
len = vsnprintf(print_buf, sizeof(print_buf), fmt, ap);
va_end(ap);
len = (len > sizeof(print_buf)) ? sizeof(print_buf) : len;
uart_write_block(console, (uint8_t *)print_buf, len);
return len;
}
#else
extern int console_vsnprintf(const char *fmt, va_list args);
int printf(const char *fmt, ...)
{
int len;
va_list ap;
va_start(ap, fmt);
len = console_vsnprintf(fmt, ap);
va_end(ap);
return len;
}
#endif