2121#include < stdio.h>
2222#include < string.h>
2323#include < math.h>
24+ #include < unistd.h>
2425
26+ #include " uart.h"
2527#include " Print.h"
2628
2729using namespace arduino ;
2830
31+ #if defined (VIRTIO_LOG)
32+ #include " virtio_log.h"
33+ #endif
34+
2935// Public Methods //////////////////////////////////////////////////////////////
3036
3137/* default implementation: may be overridden */
@@ -130,6 +136,11 @@ size_t Print::print(unsigned long long n, int base)
130136 else return printULLNumber (n, base);
131137}
132138
139+ size_t Print::print (float n, int digits)
140+ {
141+ return printFloat (n, digits);
142+ }
143+
133144size_t Print::print (double n, int digits)
134145{
135146 return printFloat (n, digits);
@@ -222,6 +233,13 @@ size_t Print::println(unsigned long long num, int base)
222233 return n;
223234}
224235
236+ size_t Print::println (float num, int digits)
237+ {
238+ size_t n = print (num, digits);
239+ n += println ();
240+ return n;
241+ }
242+
225243size_t Print::println (double num, int digits)
226244{
227245 size_t n = print (num, digits);
@@ -236,6 +254,58 @@ size_t Print::println(const Printable& x)
236254 return n;
237255}
238256
257+ extern " C" {
258+ __attribute__ ((weak))
259+ int _write(int file, char *ptr, int len)
260+ {
261+ switch (file) {
262+ case STDOUT_FILENO:
263+ case STDERR_FILENO:
264+ /* Used for core_debug() */
265+ #if defined (VIRTIO_LOG)
266+ virtio_log ((uint8_t *)ptr, (uint32_t )len);
267+ #elif defined(HAL_UART_MODULE_ENABLED) && !defined(HAL_UART_MODULE_ONLY)
268+ uart_debug_write ((uint8_t *)ptr, (uint32_t )len);
269+ #endif
270+ break ;
271+ case STDIN_FILENO:
272+ break ;
273+ default :
274+ ((class Print *)file)->write ((uint8_t *)ptr, len);
275+ break ;
276+ }
277+ return len;
278+ }
279+ }
280+
281+ int Print::printf (const char *format, ...)
282+ {
283+ va_list ap;
284+ va_start (ap, format);
285+ int retval = vdprintf ((int )this , format, ap);
286+ va_end (ap);
287+ return retval;
288+ }
289+
290+ int Print::printf (const __FlashStringHelper *format, ...)
291+ {
292+ va_list ap;
293+ va_start (ap, format);
294+ int retval = vdprintf ((int )this , (const char *)format, ap);
295+ va_end (ap);
296+ return retval;
297+ }
298+
299+ int Print::vprintf (const char *format, va_list ap)
300+ {
301+ return vdprintf ((int )this , format, ap);
302+ }
303+
304+ int Print::vprintf (const __FlashStringHelper *format, va_list ap)
305+ {
306+ return vdprintf ((int )this , (const char *)format, ap);
307+ }
308+
239309// Private Methods /////////////////////////////////////////////////////////////
240310
241311size_t Print::printNumber (unsigned long n, uint8_t base)
0 commit comments