15#error We should not get here!
30#define PI 3.14159265359f
42#define INPUT_PULLUP 0x2
59 virtual size_t write(uint8_t ch) {
64 virtual size_t write(
const char* str) {
65 return write((
const uint8_t*)str, strlen(str));
68 virtual size_t write(
const char* buffer,
size_t size) {
69 return write((
const uint8_t*)buffer, size);
72 virtual size_t print(
const char* msg) {
73 int result = strlen(msg);
74 return write(msg, result);
77 virtual size_t println(
const char* msg =
"") {
78 int result = print(msg);
83 virtual size_t println(
float number) {
85 snprintf(buffer, 120,
"%f", number);
86 return println(buffer);
89 virtual size_t print(
float number) {
91 snprintf(buffer, 120,
"%f", number);
95 virtual size_t print(
int number) {
97 snprintf(buffer, 80,
"%d", number);
105 snprintf(result, 3,
"%c", c);
106 return print(result);
108 snprintf(result, 3,
"%x", c);
109 return print(result);
115 return print(value, fmt) + println();
120 virtual size_t write(
const uint8_t* data,
size_t len) {
121 if (data ==
nullptr)
return 0;
122 for (
size_t j = 0; j < len; j++) {
140 virtual size_t readBytes(uint8_t* data,
size_t len) {
return 0; }
142 virtual int read() {
return -1; }
143 virtual int peek() {
return -1; }
144 virtual void setTimeout(
size_t timeoutMs) {}
145 size_t readBytesUntil(
char terminator,
char* buffer,
size_t length) {
146 for (
size_t j = 0; j < length; j++) {
148 if (val == -1)
return j - 1;
149 if (val == terminator)
return j;
154 size_t readBytesUntil(
char terminator, uint8_t* buffer,
size_t length) {
155 return readBytesUntil(terminator, (
char*)buffer, length);
159 operator bool() {
return true; }
165 virtual int read(uint8_t* buffer,
size_t len) {
return 0; };
166 virtual int read() {
return 0; };
168 bool connect(
const char* ip,
int port) {
return false; }
169 virtual operator bool() {
return false; }
174 size_t write(uint8_t ch)
override {
return putchar(ch); }
175 virtual operator bool() {
return true; }
176 bool begin(
long baudrate,
int config = 0) {
return true; }
182inline long map(
long x,
long in_min,
long in_max,
long out_min,
long out_max) {
183 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
186#if defined(ESP32_CMAKE)
188#include "driver/gpio.h"
189#include "freertos/FreeRTOS.h"
190#include "freertos/FreeRTOSConfig.h"
194#define IS_GPIO(pin) (pin >= 0)
195#define GPIO_TO_INT(pin) pin
196#define GPIO_TO_STR(pin) std::to_string(pin).c_str()
205 printf(
"digitalRead:%d\n", pin);
206 return gpio_get_level((gpio_num_t)pin);
210 gpio_set_level((gpio_num_t)pin, value);
213inline void pinMode(digital_pin_t pin,
int mode) {
214 gpio_num_t gpio_pin = (gpio_num_t)pin;
215 printf(
"pinMode(%d,%d)\n", pin, mode);
217 gpio_reset_pin(gpio_pin);
220 gpio_set_direction(gpio_pin, GPIO_MODE_INPUT);
223 gpio_set_direction(gpio_pin, GPIO_MODE_OUTPUT);
226 gpio_set_direction(gpio_pin, GPIO_MODE_INPUT);
227 gpio_set_pull_mode(gpio_pin, GPIO_PULLUP_ONLY);
230 gpio_set_direction(gpio_pin, GPIO_MODE_INPUT_OUTPUT);
235inline void delay(uint32_t ms) { vTaskDelay(ms / portTICK_PERIOD_MS); }
236inline void yield() { taskYIELD(); }
237inline uint32_t
millis() {
return (xTaskGetTickCount() * portTICK_PERIOD_MS); }
240 return xTaskGetTickCount() * portTICK_PERIOD_MS * 1000;
244#define DESKTOP_MILLIS_DEFINED
248#if defined(IS_ZEPHYR)
249#include <zephyr/drivers/gpio.h>
251#define DESKTOP_MILLIS_DEFINED
252#define IS_GPIO(pin) (pin.port != nullptr)
253#define GPIO_TO_INT(pin) pin.pin
254#define GPIO_TO_STR(pin) std::to_string(GPIO_TO_INT(pin)).c_str()
255#define ZLOGE(...) printk(__VA_ARGS__)
259inline void delay(uint32_t ms) { k_msleep(ms); }
260inline uint32_t
millis() {
return k_uptime_get_32(); }
265inline uint64_t
micros() {
return k_cyc_to_us_floor64(k_cycle_get_64()); }
277 return (a.port == b.port) && (a.pin == b.pin);
287 if (pin ==
GPIO_NONE || !gpio_is_ready_dt(&pin)) {
288 ZLOGE(
"GPIO pin not ready");
301 flags = GPIO_INPUT | GPIO_PULL_UP;
311 int rc = gpio_pin_configure_dt(&pin, flags);
313 ZLOGE(
"Failed to configure GPIO pin: %d", rc);
318 if (pin ==
GPIO_NONE || !gpio_is_ready_dt(&pin)) {
319 ZLOGE(
"GPIO pin not ready");
322 int rc = gpio_pin_set_dt(&pin, value ? 1 : 0);
324 ZLOGE(
"Failed to write GPIO pin: %d", rc);
329 if (pin ==
GPIO_NONE || !gpio_is_ready_dt(&pin)) {
330 ZLOGE(
"GPIO pin not ready");
334 int rc = gpio_pin_get_dt(&pin);
336 ZLOGE(
"Failed to read GPIO pin: %d", rc);
#define INPUT
Definition Arduino.h:34
#define OUTPUT
Definition Arduino.h:38
#define INPUT_PULLUP
Definition Arduino.h:42
static HardwareSerial Serial
Definition Arduino.h:179
long map(long x, long in_min, long in_max, long out_min, long out_max)
Maps input to output values.
Definition Arduino.h:182
PrintCharFmt
Definition Arduino.h:54
@ DEC
Definition Arduino.h:54
@ HEX
Definition Arduino.h:54
#define ZLOGE(...)
Definition Arduino.h:255
bool connect(const char *ip, int port)
Definition Arduino.h:168
bool connected()
Definition Arduino.h:167
virtual int read(uint8_t *buffer, size_t len)
Definition Arduino.h:165
void stop()
Definition Arduino.h:164
virtual int read()
Definition Arduino.h:166
size_t write(uint8_t ch) override
Definition Arduino.h:174
bool begin(long baudrate, int config=0)
Definition Arduino.h:176
virtual int availableForWrite()
Definition Arduino.h:128
virtual size_t write(const uint8_t *data, size_t len)
Definition Arduino.h:120
int _timeout
Definition Arduino.h:133
virtual void flush()
Definition Arduino.h:130
virtual size_t readBytes(uint8_t *data, size_t len)
Definition Arduino.h:140
virtual int available()
Definition Arduino.h:139
virtual ~Stream()=default