TinyRobotics
Loading...
Searching...
No Matches
Print.h
1#pragma once
2#include <cstdint>
3#include <cstddef>
4
5namespace tinyrobotics_arduino {
6
7/**
8 * @brief Arduino-compatible Print base class stub for native builds.
9 *
10 * This class provides a minimal interface compatible with the Arduino Print class,
11 * allowing code that uses Print (and derived classes like Serial, Stream, etc.)
12 * to compile and run on non-Arduino (desktop/native) platforms.
13 *
14 * Methods such as write(), print(), and println() mimic the Arduino API, enabling
15 * easy porting and testing of Arduino libraries and sketches in a standard C++ environment.
16 *
17 * To use, derive from Print and implement the write(uint8_t) method to define how
18 * output is handled (e.g., to std::cout, a file, or a buffer).
19 */
20
21class Print {
22 public:
23 virtual ~Print() = default;
24 virtual size_t write(uint8_t) = 0;
25 virtual size_t write(uint8_t* buf, size_t, size_t len) {
26 size_t total = 0;
27 for (size_t i = 0; i < len; ++i) {
28 total += write(buf[i]);
29 }
30 return total;
31 }
32 virtual size_t write(const uint8_t* buf, size_t len) {
33 return write((uint8_t*)buf, 0, len);
34 }
35
36 size_t print(const char* str) {
37 size_t len = 0;
38 while (str[len] != '\0') {
39 write(str[len]);
40 len++;
41 }
42 return len;
43 }
44 size_t println(const char* str) {
45 size_t len = print(str);
46 write('\n');
47 return len + 1;
48 }
49 size_t print(float number, int precision = 2) {
50 char buffer[32];
51 snprintf(buffer, sizeof(buffer), "%.*f", precision, number);
52 return print(buffer);
53 }
54 size_t println(int value) {
55 char buf[16];
56 snprintf(buf, sizeof(buf), "%d", value);
57 return println(buf);
58 }
59 size_t println(float value) {
60 char buf[32];
61 snprintf(buf, sizeof(buf), "%f", value);
62 return println(buf);
63 }
64 size_t print(int value) {
65 char buf[16];
66 snprintf(buf, sizeof(buf), "%d", value);
67 return print(buf);
68 }
69 void flush() {}
70 int availableForWrie() { return 256; }
71};
72
73} // namespace tinyrobotics_arduino
74
75#ifdef USE_TR_ARDUINO_EMULATION
76using namespace tinyrobotics_arduino;
77#endif
Arduino-compatible Print base class stub for native builds.
Definition: Print.h:21