Skip to content

Commit aa937f2

Browse files
committed
Support for single byte writes
1 parent 074d10f commit aa937f2

File tree

3 files changed

+25
-13
lines changed

3 files changed

+25
-13
lines changed

src/AudioConfig.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@
115115
#define MAX_HTTP_HEADER_LINE_LENGTH 240
116116
#endif
117117

118+
#ifndef MAX_SINGLE_CHARS
119+
#define MAX_SINGLE_CHARS 8
120+
#endif
121+
118122
/**
119123
* -------------------------------------------------------------------------
120124
* @brief PWM

src/AudioTools/AudioPrint.h

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
#include "AudioTools/AudioStreams.h"
77
#include "AudioBasic/Int24.h"
88

9-
#define MAX_SINGLE_CHARS 8
10-
119
namespace audio_tools {
1210

1311
#if !defined(ARDUINO) || defined(IS_DESKTOP)
@@ -28,11 +26,10 @@ class AudioPrint : public Print, public AudioBaseInfoDependent, public AudioBase
2826
size_t write(const uint8_t *buffer, size_t size) override = 0;
2927

3028
virtual size_t write(uint8_t ch) override {
31-
tmp[tmpPos++] = ch;
32-
if (tmpPos>MAX_SINGLE_CHARS){
29+
if (tmp.isFull()){
3330
flush();
34-
}
35-
return 1;
31+
}
32+
return tmp.write(ch);
3633
}
3734

3835
virtual int availableForWrite() override {
@@ -41,8 +38,9 @@ class AudioPrint : public Print, public AudioBaseInfoDependent, public AudioBase
4138

4239
// removed override because some old implementation did not define this method as virtual
4340
virtual void flush() FLUSH_OVERRIDE {
44-
write((const uint8_t*)tmp, tmpPos-1);
45-
tmpPos=0;
41+
if (tmp.available()>0){
42+
write((const uint8_t*)tmp.address(), tmp.available());
43+
}
4644
}
4745

4846
// overwrite to do something useful
@@ -78,11 +76,10 @@ class AudioPrint : public Print, public AudioBaseInfoDependent, public AudioBase
7876
}
7977

8078
protected:
81-
uint8_t tmp[MAX_SINGLE_CHARS];
8279
int tmpPos=0;
8380
AudioBaseInfoDependent *p_notify=nullptr;
8481
AudioBaseInfo cfg;
85-
82+
SingleBuffer<uint8_t> tmp{MAX_SINGLE_CHARS};
8683
};
8784

8885

src/AudioTools/AudioStreams.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ class AudioStream : public Stream, public AudioBaseInfoDependent, public AudioBa
5959

6060
virtual size_t write(const uint8_t *buffer, size_t size) override = 0;
6161

62+
virtual size_t write(uint8_t ch) override {
63+
if (tmp.isFull()){
64+
flush();
65+
}
66+
return tmp.write(ch);
67+
}
68+
6269

6370
operator bool() { return available() > 0; }
6471

@@ -68,7 +75,11 @@ class AudioStream : public Stream, public AudioBaseInfoDependent, public AudioBa
6875

6976
virtual int availableForWrite() override { return DEFAULT_BUFFER_SIZE; }
7077

71-
virtual void flush() override {}
78+
virtual void flush() override {
79+
if (tmp.available()>0){
80+
write((const uint8_t*)tmp.address(), tmp.available());
81+
}
82+
}
7283

7384
/// Writes len bytes of silence (=0).
7485
/// @param len
@@ -86,13 +97,13 @@ class AudioStream : public Stream, public AudioBaseInfoDependent, public AudioBa
8697
return readBytes((uint8_t *)buffer, length);
8798
}
8899

89-
virtual size_t write(uint8_t) { return not_supported(0);};
90-
91100
#endif
92101

93102
protected:
94103
AudioBaseInfoDependent *p_notify=nullptr;
95104
AudioBaseInfo info;
105+
SingleBuffer<uint8_t> tmp{MAX_SINGLE_CHARS};
106+
96107

97108
virtual int not_supported(int out) {
98109
LOGE("AudioStreamX: unsupported operation!");

0 commit comments

Comments
 (0)