arduino-audio-tools
NoArduino.h
Go to the documentation of this file.
1 #pragma once
14 #include <stdint.h>
15 #include <algorithm> // std::max
16 #include <stdio.h>
17 #include <stdlib.h>
18 #include <ctype.h>
19 #include <string.h>
20 #include <chrono>
21 
22 #define IS_NOARDUINO
23 
24 #ifndef PSTR
25 # define PSTR(fmt) fmt
26 #endif
27 
28 #ifndef PI
29 # define PI 3.14159265359f
30 #endif
31 
32 #ifndef INPUT
33 # define INPUT 0x0
34 #endif
35 
36 #ifndef OUTPUT
37 # define OUTPUT 0x1
38 #endif
39 
40 #ifndef INPUT_PULLUP
41 # define INPUT_PULLUP 0x2
42 #endif
43 
44 #ifndef HIGH
45 #define HIGH 0x1
46 # endif
47 #ifndef LOW
48 # define LOW 0x0
49 #endif
50 
51 
52 using namespace std;
53 
54 enum PrintCharFmt {DEC, HEX};
55 
56 namespace audio_tools {
57 
58 class Print {
59 public:
60 #ifndef DOXYGEN
61  virtual size_t write(uint8_t ch){
62  // not implememnted: to be overritten
63  return 0;
64  }
65 
66  virtual size_t write(const char *str) {
67  return write((const uint8_t *)str, strlen(str));
68  }
69 
70  virtual size_t write(const char *buffer, size_t size) {
71  return write((const uint8_t *)buffer, size);
72  }
73 
74  virtual int print(const char* msg){
75  int result = strlen(msg);
76  return write(msg, result);
77  }
78 
79  virtual int println(const char* msg="") {
80  int result = print(msg);
81  write('\n');
82  return result+1;
83  }
84 
85  virtual int print(int number){
86  char buffer[80];
87  snprintf(buffer,80,"%d", number);
88  return print(buffer);
89  }
90 
91  virtual int print(char c, PrintCharFmt spec){
92  char result[5];
93  switch(spec){
94  case DEC:
95  snprintf(result, 3,"%c", c);
96  return print(result);
97  case HEX:
98  snprintf(result, 3,"%x", c);
99  return print(result);
100  }
101  return -1;
102  }
103 
104 #endif
105 
106  virtual size_t write(const uint8_t *buffer, size_t size){
107  if (buffer == nullptr) return 0;
108  for (size_t j=0;j<size;j++){
109  write(buffer[j]);
110  }
111  return size;
112  }
113 
114 
115  virtual int availableForWrite() { return 1024; }
116 
117 
118  virtual void flush() { /* Empty implementation for backward compatibility */ }
119 
120  protected:
121  int _timeout = 10;
122 
123 };
124 
125 class Stream : public Print {
126 public:
127  virtual int available(){return 0;}
128  virtual size_t readBytes(uint8_t* buffer, size_t len) {return 0;}
129 #ifndef DOXYGEN
130  virtual int read(){return -1;}
131  virtual int peek(){return -1;}
132  virtual void setTimeout(size_t t){}
133 #endif
134  operator bool(){
135  return true;
136  }
137 };
138 class Client : public Stream {
139 public:
140  void stop();
141  virtual int read(uint8_t* buffer, size_t len);
142  virtual int read();
143  bool connected();
144  bool connect(const char* ip, int port);
145  virtual operator bool();
146 };
147 
148 class HardwareSerial : public Stream {
149 public:
150  size_t write(uint8_t ch) override {
151  return putchar(ch);
152  }
153  virtual operator bool() {
154  return true;
155  }
156 };
157 
158 static HardwareSerial Serial;
159 
161 inline long map(long x, long in_min, long in_max, long out_min, long out_max) {
162  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
163 }
164 
165 #ifndef DESKTOP_MILLIS_DEFINED
166 
168 extern void delay(uint32_t ms);
169 
171 extern uint32_t millis();
172 
174 extern void delayMicroseconds(uint32_t ms);
175 
177 extern uint32_t micros();
178 
179 #else
180 
181 extern "C" {
182 
184 extern void delay(uint32_t ms);
185 
187 extern uint32_t millis();
188 
190 extern void delayMicroseconds(uint32_t ms);
191 
193 extern uint32_t micros();
194 
195 }
196 
197 #endif
198 
199 
200 } // namespace
201 
202 #if defined(ESP32)
203 #include "driver/gpio.h"
205 int digitalRead(int pin) {
206  printf("digitalRead:%d\n", pin);
207  return gpio_get_level((gpio_num_t)pin);
208 }
209 
210 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 
232 #endif
233 
234 using namespace audio_tools;
235 
236 
237 
238 
int digitalRead(int pin)
e.g. for AudioActions
Definition: NoArduino.h:205
Definition: NoArduino.h:138
Definition: NoArduino.h:148
Definition: NoArduino.h:58
Definition: NoArduino.h:125
void stop()
Public generic methods.
Definition: AudioRuntime.h:12
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition: AnalogAudio.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:161
void delayMicroseconds(uint32_t ms)
Waits for the indicated milliseconds.
void delay(uint32_t ms)
Waits for the indicated milliseconds.
Definition: Millis.h:11
uint32_t micros()
Returns the milliseconds since the start.
uint32_t millis()
Returns the milliseconds since the start.
Definition: Millis.h:18