arduino-audio-tools
Loading...
Searching...
No Matches
NoArduino.h
Go to the documentation of this file.
1#pragma once
13#include "AudioToolsConfig.h"
14#ifdef IS_DESKTOP
15# error We should not get here!
16#endif
17#include <ctype.h>
18#include <stdint.h>
19#include <stdio.h>
20#include <stdlib.h>
21#include <string.h>
22
23#include <algorithm> // std::max
24#include <chrono>
25
26
27#define IS_NOARDUINO
28
29#ifndef PSTR
30#define PSTR(fmt) fmt
31#endif
32
33#ifndef PI
34#define PI 3.14159265359f
35#endif
36
37#ifndef INPUT
38#define INPUT 0x0
39#endif
40
41#ifndef OUTPUT
42#define OUTPUT 0x1
43#endif
44
45#ifndef INPUT_PULLUP
46#define INPUT_PULLUP 0x2
47#endif
48
49#ifndef HIGH
50#define HIGH 0x1
51#endif
52#ifndef LOW
53#define LOW 0x0
54#endif
55
56using namespace std;
57
58enum PrintCharFmt { DEC=10, HEX=16 };
59
60namespace audio_tools {
61
62class Print {
63 public:
64#ifndef DOXYGEN
65 virtual size_t write(uint8_t ch) {
66 // not implememnted: to be overritten
67 return 0;
68 }
69
70 virtual size_t write(const char *str) {
71 return write((const uint8_t *)str, strlen(str));
72 }
73
74 virtual size_t write(const char *buffer, size_t size) {
75 return write((const uint8_t *)buffer, size);
76 }
77
78 virtual int print(const char *msg) {
79 int result = strlen(msg);
80 return write(msg, result);
81 }
82
83 virtual int println(const char *msg = "") {
84 int result = print(msg);
85 write('\n');
86 return result + 1;
87 }
88
89 virtual int println(float number) {
90 char buffer[120];
91 snprintf(buffer, 120, "%f", number);
92 return println(buffer);
93 }
94
95 virtual int print(float number) {
96 char buffer[120];
97 snprintf(buffer, 120, "%f", number);
98 return print(buffer);
99 }
100
101 virtual int print(int number) {
102 char buffer[80];
103 snprintf(buffer, 80, "%d", number);
104 return print(buffer);
105 }
106
107 virtual int print(char c, PrintCharFmt spec) {
108 char result[5];
109 switch (spec) {
110 case DEC:
111 snprintf(result, 3, "%c", c);
112 return print(result);
113 case HEX:
114 snprintf(result, 3, "%x", c);
115 return print(result);
116 }
117 return -1;
118 }
119
120 int println(int value, PrintCharFmt fmt) {
121 return print(value, fmt) + println();
122 }
123
124#endif
125
126 virtual size_t write(const uint8_t *data, size_t len) {
127 if (data == nullptr) return 0;
128 for (size_t j = 0; j < len; j++) {
129 write(data[j]);
130 }
131 return len;
132 }
133
134 virtual int availableForWrite() { return 1024; }
135
136 virtual void flush() { /* Empty implementation for backward compatibility */ }
137
138 protected:
139 int _timeout = 10;
140};
141
142class Stream : public Print {
143
144 public:
145 virtual ~Stream() = default;
146 virtual int available() { return 0; }
147 virtual size_t readBytes(uint8_t *data, size_t len) { return 0; }
148#ifndef DOXYGEN
149 virtual int read() { return -1; }
150 virtual int peek() { return -1; }
151 virtual void setTimeout(size_t timeoutMs) {}
152 size_t readBytesUntil(char terminator, char *buffer, size_t length) {
153 for (int j=0;j<length;j++){
154 int val = read();
155 if (val == -1) return j-1;
156 if (val == terminator) return j;
157 buffer[j] = val;
158 }
159 return length;
160 };
161 size_t readBytesUntil(char terminator, uint8_t *buffer, size_t length) {
162 return readBytesUntil(terminator, (char *)buffer, length);
163 }
164
165#endif
166 operator bool() { return true; }
167};
168
169class Client : public Stream {
170 public:
171 void stop() {};
172 virtual int read(uint8_t *buffer, size_t len) { return 0; };
173 virtual int read() { return 0; };
174 bool connected() { return false; };
175 bool connect(const char *ip, int port) { return false; }
176 virtual operator bool() { return false; }
177};
178
179class HardwareSerial : public Stream {
180 public:
181 size_t write(uint8_t ch) override { return putchar(ch); }
182 virtual operator bool() { return true; }
183 bool begin(long baudrate, int config=0) { return true; }
184};
185
186static HardwareSerial Serial;
187
189inline long map(long x, long in_min, long in_max, long out_min, long out_max) {
190 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
191}
192
193} // namespace audio_tools
194
195#if defined(ESP32)
196#include "driver/gpio.h"
197#include "freertos/FreeRTOS.h" // needed for ESP Arduino < 2.0
198#include "freertos/FreeRTOSConfig.h"
199
201inline int digitalRead(int pin) {
202 printf("digitalRead:%d\n", pin);
203 return gpio_get_level((gpio_num_t)pin);
204}
205
206inline void digitalWrite(int pin, int value) {
207 gpio_set_level((gpio_num_t)pin, value);
208}
209
210inline void pinMode(int pin, int mode) {
211 gpio_num_t gpio_pin = (gpio_num_t)pin;
212 printf("pinMode(%d,%d)\n", pin, mode);
213
214 gpio_reset_pin(gpio_pin);
215 switch (mode) {
216 case INPUT:
217 gpio_set_direction(gpio_pin, GPIO_MODE_INPUT);
218 break;
219 case OUTPUT:
220 gpio_set_direction(gpio_pin, GPIO_MODE_OUTPUT);
221 break;
222 case INPUT_PULLUP:
223 gpio_set_direction(gpio_pin, GPIO_MODE_INPUT);
224 gpio_set_pull_mode(gpio_pin, GPIO_PULLUP_ONLY);
225 break;
226 default:
227 gpio_set_direction(gpio_pin, GPIO_MODE_INPUT_OUTPUT);
228 break;
229 }
230}
231
232inline void delay(uint32_t ms){ vTaskDelay(ms / portTICK_PERIOD_MS);}
233inline uint32_t millis() {return (xTaskGetTickCount() * portTICK_PERIOD_MS);}
234inline void delayMicroseconds(uint32_t ms) {esp_rom_delay_us(ms);}
235inline uint64_t micros() { return xTaskGetTickCount() * portTICK_PERIOD_MS * 1000;}
236
237// delay and millis has been defined
238#define DESKTOP_MILLIS_DEFINED
239
240#endif
int digitalRead(int pin)
e.g. for AudioActions
Definition NoArduino.h:201
Definition NoArduino.h:169
Definition NoArduino.h:179
Definition NoArduino.h:62
Definition NoArduino.h:142
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
long map(long x, long in_min, long in_max, long out_min, long out_max)
Maps input to output values.
Definition NoArduino.h:189