2424
2525#include " Print.h"
2626
27+ #ifdef ARDUINO_ARCH_STM32
28+ #include < unistd.h>
29+ #include " uart.h"
30+ #if defined (VIRTIO_LOG)
31+ #include " virtio_log.h"
32+ #endif
33+ #endif
34+
2735using namespace arduino ;
2836
2937// Public Methods //////////////////////////////////////////////////////////////
@@ -130,6 +138,11 @@ size_t Print::print(unsigned long long n, int base)
130138 else return printULLNumber (n, base);
131139}
132140
141+ size_t Print::print (float n, int digits)
142+ {
143+ return printFloat (n, digits);
144+ }
145+
133146size_t Print::print (double n, int digits)
134147{
135148 return printFloat (n, digits);
@@ -222,6 +235,13 @@ size_t Print::println(unsigned long long num, int base)
222235 return n;
223236}
224237
238+ size_t Print::println (float num, int digits)
239+ {
240+ size_t n = print (num, digits);
241+ n += println ();
242+ return n;
243+ }
244+
225245size_t Print::println (double num, int digits)
226246{
227247 size_t n = print (num, digits);
@@ -236,6 +256,60 @@ size_t Print::println(const Printable& x)
236256 return n;
237257}
238258
259+ #ifdef ARDUINO_ARCH_STM32
260+ extern " C" {
261+ __attribute__ ((weak))
262+ int _write(int file, char *ptr, int len)
263+ {
264+ switch (file) {
265+ case STDOUT_FILENO:
266+ case STDERR_FILENO:
267+ /* Used for core_debug() */
268+ #if defined (VIRTIO_LOG)
269+ virtio_log ((uint8_t *)ptr, (uint32_t )len);
270+ #elif defined(HAL_UART_MODULE_ENABLED) && !defined(HAL_UART_MODULE_ONLY)
271+ uart_debug_write ((uint8_t *)ptr, (uint32_t )len);
272+ #endif
273+ break ;
274+ case STDIN_FILENO:
275+ break ;
276+ default :
277+ ((class Print *)file)->write ((uint8_t *)ptr, len);
278+ break ;
279+ }
280+ return len;
281+ }
282+ }
283+ #endif
284+
285+ int Print::printf (const char *format, ...)
286+ {
287+ va_list ap;
288+ va_start (ap, format);
289+ int retval = vdprintf ((int )this , format, ap);
290+ va_end (ap);
291+ return retval;
292+ }
293+
294+ int Print::printf (const __FlashStringHelper *format, ...)
295+ {
296+ va_list ap;
297+ va_start (ap, format);
298+ int retval = vdprintf ((int )this , (const char *)format, ap);
299+ va_end (ap);
300+ return retval;
301+ }
302+
303+ int Print::vprintf (const char *format, va_list ap)
304+ {
305+ return vdprintf ((int )this , format, ap);
306+ }
307+
308+ int Print::vprintf (const __FlashStringHelper *format, va_list ap)
309+ {
310+ return vdprintf ((int )this , (const char *)format, ap);
311+ }
312+
239313// Private Methods /////////////////////////////////////////////////////////////
240314
241315size_t Print::printNumber (unsigned long n, uint8_t base)
0 commit comments