diff --git a/src/usart.cpp b/src/usart.cpp index 4758601..5b230c3 100644 --- a/src/usart.cpp +++ b/src/usart.cpp @@ -3,14 +3,8 @@ #include "usart.h" namespace usart -{ - namespace { - static FILE mystdout; - } - +{ void init( unsigned long baud) { - fdev_setup_stream(&mystdout, put_printf, NULL, _FDEV_SETUP_WRITE); - stdout = &mystdout; const unsigned int ubrr = F_CPU/8/baud-1; /*Set baud rate */ @@ -34,6 +28,15 @@ namespace usart //UCSRB |= (1<< RXCIE)|(1<>8); + UBRRL = (unsigned char)ubrr; + UCSRA |= (1< 0); + + if (sign < 0) { + s[i++] = '-'; + } + + s[i] = '\0'; + + // Reverse the string + for (int j = 0, k = i - 1; j < k; j++, k--) { + char temp = s[j]; + s[j] = s[k]; + s[k] = temp; + } } + + void printf(const char *fmt, ...) { + va_list args; + va_start(args, fmt); + + for (const char *p = fmt; *p != '\0'; p++) { + if (*p == '%') { + switch (*(++p)) { + case 's': { + const char *s = va_arg(args, const char *); + for (; *s; s++) put(*s); + break; + } + case 'd': + case 'i': { + char buf[10]; + itoa(va_arg(args, int), buf, 10); + for (char *s = buf; *s; s++) put(*s); + break; + } + case 'c': + put(va_arg(args, int)); + break; + case 'x': { + char buf[10]; + itoa(va_arg(args, int), buf, 16); + for (char *s = buf; *s; s++) put(*s); + break; + } + } + } else { + put(*p); + } + } + va_end(args); + } + + } // namespace usart diff --git a/src/usart.h b/src/usart.h index ffad848..ba5ba00 100644 --- a/src/usart.h +++ b/src/usart.h @@ -8,6 +8,7 @@ namespace usart void put(char data ); char get(); int put_printf(char var, FILE *stream); + void printf(const char *var, ...); } // namespace usart