22/* *
33 * @file NoArduino.h
44 * @author Phil Schatzmann
5- * @brief If you want to use the framework w/o Arduino you need to provide the implementation
6- * of a couple of classes and methods!
5+ * @brief If you want to use the framework w/o Arduino you need to provide the
6+ * implementation of a couple of classes and methods!
77 * @version 0.1
88 * @date 2022-09-19
9- *
9+ *
1010 * @copyright Copyright (c) 2022
11- *
11+ *
1212 */
13+ #include < ctype.h>
1314#include < stdint.h>
14- #include < algorithm> // std::max
1515#include < stdio.h>
1616#include < stdlib.h>
17- #include < ctype.h>
1817#include < string.h>
18+
19+ #include < algorithm> // std::max
1920#include < chrono>
21+
2022#include " AudioConfig.h"
2123
2224#define IS_NOARDUINO
2325
2426#ifndef PSTR
25- # define PSTR (fmt ) fmt
27+ #define PSTR (fmt ) fmt
2628#endif
2729
2830#ifndef PI
29- # define PI 3 .14159265359f
31+ #define PI 3 .14159265359f
3032#endif
3133
3234#ifndef INPUT
33- # define INPUT 0x0
35+ #define INPUT 0x0
3436#endif
3537
3638#ifndef OUTPUT
37- # define OUTPUT 0x1
39+ #define OUTPUT 0x1
3840#endif
3941
4042#ifndef INPUT_PULLUP
41- # define INPUT_PULLUP 0x2
43+ #define INPUT_PULLUP 0x2
4244#endif
4345
4446#ifndef HIGH
4547#define HIGH 0x1
46- # endif
48+ #endif
4749#ifndef LOW
48- # define LOW 0x0
50+ #define LOW 0x0
4951#endif
5052
51-
5253using namespace std ;
5354
54- enum PrintCharFmt {DEC, HEX};
55+ enum PrintCharFmt { DEC, HEX };
5556
5657namespace audio_tools {
5758
5859class Print {
59- public:
60+ public:
6061#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);
62+ virtual size_t write (uint8_t ch) {
63+ // not implememnted: to be overritten
64+ return 0 ;
65+ }
66+
67+ virtual size_t write (const char *str) {
68+ return write ((const uint8_t *)str, strlen (str));
69+ }
70+
71+ virtual size_t write (const char *buffer, size_t size) {
72+ return write ((const uint8_t *)buffer, size);
73+ }
74+
75+ virtual int print (const char *msg) {
76+ int result = strlen (msg);
77+ return write (msg, result);
78+ }
79+
80+ virtual int println (const char *msg = " " ) {
81+ int result = print (msg);
82+ write (' \n ' );
83+ return result + 1 ;
84+ }
85+
86+ virtual int println (float number) {
87+ char buffer[120 ];
88+ snprintf (buffer, 120 , " %f" , number);
89+ return println (buffer);
90+ }
91+
92+ virtual int print (float number) {
93+ char buffer[120 ];
94+ snprintf (buffer, 120 , " %f" , number);
95+ return print (buffer);
96+ }
97+
98+ virtual int print (int number) {
99+ char buffer[80 ];
100+ snprintf (buffer, 80 , " %d" , number);
101+ return print (buffer);
102+ }
103+
104+ virtual int print (char c, PrintCharFmt spec) {
105+ char result[5 ];
106+ switch (spec) {
107+ case DEC:
108+ snprintf (result, 3 , " %c" , c);
109+ return print (result);
110+ case HEX:
111+ snprintf (result, 3 , " %x" , c);
112+ return print (result);
77113 }
114+ return -1 ;
115+ }
78116
79- virtual int println (const char * msg=" " ) {
80- int result = print (msg);
81- write (' \n ' );
82- return result+1 ;
83- }
84-
85- virtual int println (float number){
86- char buffer[120 ];
87- snprintf (buffer, 120 , " %f" , number);
88- return println (buffer);
89- }
90-
91- virtual int print (float number){
92- char buffer[120 ];
93- snprintf (buffer, 120 , " %f" , number);
94- return print (buffer);
95- }
96-
97- virtual int print (int number){
98- char buffer[80 ];
99- snprintf (buffer,80 ," %d" , number);
100- return print (buffer);
101- }
102-
103- virtual int print (char c, PrintCharFmt spec){
104- char result[5 ];
105- switch (spec){
106- case DEC:
107- snprintf (result, 3 ," %c" , c);
108- return print (result);
109- case HEX:
110- snprintf (result, 3 ," %x" , c);
111- return print (result);
112- }
113- return -1 ;
114- }
117+ int println (int value, PrintCharFmt fmt) {
118+ return print (value, fmt) + println ();
119+ }
115120
116121#endif
117122
118- virtual size_t write (const uint8_t *data, size_t len){
119- if (data == nullptr ) return 0 ;
120- for (size_t j=0 ;j<len;j++){
121- write (data[j]);
122- }
123- return len;
123+ virtual size_t write (const uint8_t *data, size_t len) {
124+ if (data == nullptr ) return 0 ;
125+ for (size_t j = 0 ; j < len; j++) {
126+ write (data[j]);
124127 }
128+ return len;
129+ }
125130
131+ virtual int availableForWrite () { return 1024 ; }
126132
127- virtual int availableForWrite () { return 1024 ; }
128-
129-
130- virtual void flush () { /* Empty implementation for backward compatibility */ }
131-
132- protected:
133- int _timeout = 10 ;
133+ virtual void flush () { /* Empty implementation for backward compatibility */ }
134134
135+ protected:
136+ int _timeout = 10 ;
135137};
136138
137139class Stream : public Print {
138- public:
139- virtual int available (){ return 0 ;}
140- virtual size_t readBytes (uint8_t * data, size_t len) {return 0 ;}
140+ public:
141+ virtual int available () { return 0 ; }
142+ virtual size_t readBytes (uint8_t * data, size_t len) { return 0 ; }
141143#ifndef DOXYGEN
142- virtual int read (){return -1 ;}
143- virtual int peek (){return -1 ;}
144- virtual void setTimeout (size_t t){}
145- #endif
146- operator bool (){
147- return true ;
144+ virtual int read () { return -1 ; }
145+ virtual int peek () { return -1 ; }
146+ virtual void setTimeout (size_t t) {}
147+ size_t readBytesUntil (char terminator, char *buffer, size_t length) {
148+ for (int j=0 ;j<length;j++){
149+ int val = read ();
150+ if (val == -1 ) return j-1 ;
151+ if (val == terminator) return j;
152+ buffer[j] = val;
148153 }
154+ return length;
155+ };
156+ size_t readBytesUntil (char terminator, uint8_t *buffer, size_t length) {
157+ return readBytesUntil (terminator, (char *)buffer, length);
158+ }
159+
160+ #endif
161+ operator bool () { return true ; }
149162};
150163
151164class Client : public Stream {
152- public:
153- void stop () {};
154- virtual int read (uint8_t * buffer, size_t len) { return 0 ;};
155- virtual int read () { return 0 ; };
156- bool connected () { return false ;};
157- bool connect (const char * ip, int port) {return false ;}
158- virtual operator bool () { return false ;}
165+ public:
166+ void stop () {};
167+ virtual int read (uint8_t * buffer, size_t len) { return 0 ; };
168+ virtual int read () { return 0 ; };
169+ bool connected () { return false ; };
170+ bool connect (const char * ip, int port) { return false ; }
171+ virtual operator bool () { return false ; }
159172};
160173
161174class HardwareSerial : public Stream {
162- public:
163- size_t write (uint8_t ch) override {
164- return putchar (ch);
165- }
166- virtual operator bool () {
167- return true ;
168- }
175+ public:
176+ size_t write (uint8_t ch) override { return putchar (ch); }
177+ virtual operator bool () { return true ; }
169178};
170179
171180static HardwareSerial Serial;
@@ -189,10 +198,10 @@ inline long map(long x, long in_min, long in_max, long out_min, long out_max) {
189198// /// Returns the milliseconds since the start
190199// extern uint32_t micros();
191200
192- // #else
201+ // #else
193202
194203// extern "C" {
195-
204+
196205// /// Waits for the indicated milliseconds
197206// extern void delay(uint32_t ms);
198207
@@ -207,45 +216,40 @@ inline long map(long x, long in_min, long in_max, long out_min, long out_max) {
207216
208217// }
209218
210- // #endif
219+ // #endif
211220
221+ } // namespace audio_tools
212222
213- } // namespace
214-
215- #if defined(ESP32)
223+ #if defined(ESP32)
216224#include " driver/gpio.h"
217225// / e.g. for AudioActions
218226static int digitalRead (int pin) {
219- printf (" digitalRead:%d\n " , pin);
220- return gpio_get_level ((gpio_num_t )pin);
227+ printf (" digitalRead:%d\n " , pin);
228+ return gpio_get_level ((gpio_num_t )pin);
221229}
222230
223231static void pinMode (int pin, int mode) {
224- gpio_num_t gpio_pin= (gpio_num_t )pin;
225- printf (" pinMode(%d,%d)\n " , pin, mode);
226-
227- gpio_reset_pin (gpio_pin);
228- switch (mode){
229- case INPUT:
230- gpio_set_direction (gpio_pin, GPIO_MODE_INPUT);
231- break ;
232- case OUTPUT:
233- gpio_set_direction (gpio_pin, GPIO_MODE_OUTPUT);
234- break ;
235- case INPUT_PULLUP:
236- gpio_set_direction (gpio_pin, GPIO_MODE_INPUT);
237- gpio_set_pull_mode (gpio_pin, GPIO_PULLUP_ONLY);
238- break ;
239- default :
240- gpio_set_direction (gpio_pin, GPIO_MODE_INPUT_OUTPUT);
241- break ;
242- }
232+ gpio_num_t gpio_pin = (gpio_num_t )pin;
233+ printf (" pinMode(%d,%d)\n " , pin, mode);
234+
235+ gpio_reset_pin (gpio_pin);
236+ switch (mode) {
237+ case INPUT:
238+ gpio_set_direction (gpio_pin, GPIO_MODE_INPUT);
239+ break ;
240+ case OUTPUT:
241+ gpio_set_direction (gpio_pin, GPIO_MODE_OUTPUT);
242+ break ;
243+ case INPUT_PULLUP:
244+ gpio_set_direction (gpio_pin, GPIO_MODE_INPUT);
245+ gpio_set_pull_mode (gpio_pin, GPIO_PULLUP_ONLY);
246+ break ;
247+ default :
248+ gpio_set_direction (gpio_pin, GPIO_MODE_INPUT_OUTPUT);
249+ break ;
250+ }
243251}
244252
245253#endif
246254
247- // using namespace audio_tools;
248-
249-
250-
251-
255+ // using namespace audio_tools;
0 commit comments