2121#include < stdio.h>
2222#include < string.h>
2323#include < math.h>
24+ #include < unistd.h>
2425
2526#include " Print.h"
27+ #include " uart.h"
28+ #if defined (VIRTIO_LOG)
29+ #include " virtio_log.h"
30+ #endif
2631
2732using namespace arduino ;
2833
@@ -130,6 +135,11 @@ size_t Print::print(unsigned long long n, int base)
130135 else return printULLNumber (n, base);
131136}
132137
138+ size_t Print::print (float n, int digits)
139+ {
140+ return printFloat (n, digits);
141+ }
142+
133143size_t Print::print (double n, int digits)
134144{
135145 return printFloat (n, digits);
@@ -222,6 +232,13 @@ size_t Print::println(unsigned long long num, int base)
222232 return n;
223233}
224234
235+ size_t Print::println (float num, int digits)
236+ {
237+ size_t n = print (num, digits);
238+ n += println ();
239+ return n;
240+ }
241+
225242size_t Print::println (double num, int digits)
226243{
227244 size_t n = print (num, digits);
@@ -236,6 +253,58 @@ size_t Print::println(const Printable& x)
236253 return n;
237254}
238255
256+ extern " C" {
257+ __attribute__ ((weak))
258+ int _write(int file, char *ptr, int len)
259+ {
260+ switch (file) {
261+ case STDOUT_FILENO:
262+ case STDERR_FILENO:
263+ /* Used for core_debug() */
264+ #if defined (VIRTIO_LOG)
265+ virtio_log ((uint8_t *)ptr, (uint32_t )len);
266+ #elif defined(HAL_UART_MODULE_ENABLED) && !defined(HAL_UART_MODULE_ONLY)
267+ uart_debug_write ((uint8_t *)ptr, (uint32_t )len);
268+ #endif
269+ break ;
270+ case STDIN_FILENO:
271+ break ;
272+ default :
273+ ((class Print *)file)->write ((uint8_t *)ptr, len);
274+ break ;
275+ }
276+ return len;
277+ }
278+ }
279+
280+ int Print::printf (const char *format, ...)
281+ {
282+ va_list ap;
283+ va_start (ap, format);
284+ int retval = vdprintf ((int )this , format, ap);
285+ va_end (ap);
286+ return retval;
287+ }
288+
289+ int Print::printf (const __FlashStringHelper *format, ...)
290+ {
291+ va_list ap;
292+ va_start (ap, format);
293+ int retval = vdprintf ((int )this , (const char *)format, ap);
294+ va_end (ap);
295+ return retval;
296+ }
297+
298+ int Print::vprintf (const char *format, va_list ap)
299+ {
300+ return vdprintf ((int )this , format, ap);
301+ }
302+
303+ int Print::vprintf (const __FlashStringHelper *format, va_list ap)
304+ {
305+ return vdprintf ((int )this , (const char *)format, ap);
306+ }
307+
239308// Private Methods /////////////////////////////////////////////////////////////
240309
241310size_t Print::printNumber (unsigned long n, uint8_t base)
0 commit comments