arduino-audio-tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Modules Pages
NoArduino.h
Go to the documentation of this file.
1#pragma once
13#include "AudioConfig.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 public:
144 virtual int available() { return 0; }
145 virtual size_t readBytes(uint8_t *data, size_t len) { return 0; }
146#ifndef DOXYGEN
147 virtual int read() { return -1; }
148 virtual int peek() { return -1; }
149 virtual void setTimeout(size_t t) {}
150 size_t readBytesUntil(char terminator, char *buffer, size_t length) {
151 for (int j=0;j<length;j++){
152 int val = read();
153 if (val == -1) return j-1;
154 if (val == terminator) return j;
155 buffer[j] = val;
156 }
157 return length;
158 };
159 size_t readBytesUntil(char terminator, uint8_t *buffer, size_t length) {
160 return readBytesUntil(terminator, (char *)buffer, length);
161 }
162
163#endif
164 operator bool() { return true; }
165};
166
167class Client : public Stream {
168 public:
169 void stop() {};
170 virtual int read(uint8_t *buffer, size_t len) { return 0; };
171 virtual int read() { return 0; };
172 bool connected() { return false; };
173 bool connect(const char *ip, int port) { return false; }
174 virtual operator bool() { return false; }
175};
176
177class HardwareSerial : public Stream {
178 public:
179 size_t write(uint8_t ch) override { return putchar(ch); }
180 virtual operator bool() { return true; }
181};
182
183static HardwareSerial Serial;
184
186inline long map(long x, long in_min, long in_max, long out_min, long out_max) {
187 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
188}
189
190} // namespace audio_tools
191
192#if defined(ESP32)
193#include "driver/gpio.h"
194
196extern "C" int digitalRead(int pin) {
197 printf("digitalRead:%d\n", pin);
198 return gpio_get_level((gpio_num_t)pin);
199}
200
201extern "C" void digitalWrite(int pin, int value) {
202 gpio_set_level((gpio_num_t)pin, value);
203}
204
205extern "C" void pinMode(int pin, int mode) {
206 gpio_num_t gpio_pin = (gpio_num_t)pin;
207 printf("pinMode(%d,%d)\n", pin, mode);
208
209 gpio_reset_pin(gpio_pin);
210 switch (mode) {
211 case INPUT:
212 gpio_set_direction(gpio_pin, GPIO_MODE_INPUT);
213 break;
214 case OUTPUT:
215 gpio_set_direction(gpio_pin, GPIO_MODE_OUTPUT);
216 break;
217 case INPUT_PULLUP:
218 gpio_set_direction(gpio_pin, GPIO_MODE_INPUT);
219 gpio_set_pull_mode(gpio_pin, GPIO_PULLUP_ONLY);
220 break;
221 default:
222 gpio_set_direction(gpio_pin, GPIO_MODE_INPUT_OUTPUT);
223 break;
224 }
225}
226
227#endif
int digitalRead(int pin)
e.g. for AudioActions
Definition NoArduino.h:196
Definition NoArduino.h:167
Definition NoArduino.h:177
Definition NoArduino.h:62
Definition NoArduino.h:142
Vector implementation which provides the most important methods as defined by std::vector....
Definition Vector.h:21
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioConfig.h:885
long map(long x, long in_min, long in_max, long out_min, long out_max)
Maps input to output values.
Definition NoArduino.h:186