Skip to content

Commit dd8cef7

Browse files
committed
Add single byte prebuffer
1 parent 4e662d5 commit dd8cef7

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

src/ArduinoSimpleLogging.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ size_t ArduinoSimpleLogging::LogTarget::write(const uint8_t *buffer,
2020

2121
size_t ArduinoSimpleLogging::log(ArduinoSimpleLogging::Level level,
2222
const uint8_t *buffer, size_t size) {
23+
if (prebuffer_pos > 0) {
24+
flush_prebuffer();
25+
}
2326
for (auto &handler : handlers) {
2427
if ((handler.mask & level) != 0) {
2528
handler.stream.write(buffer, size);
@@ -28,14 +31,22 @@ size_t ArduinoSimpleLogging::log(ArduinoSimpleLogging::Level level,
2831
return size;
2932
}
3033

34+
void ArduinoSimpleLogging::flush_prebuffer() {
35+
size_t pos = prebuffer_pos;
36+
prebuffer_pos = 0;
37+
log(prebuffer_level, prebuffer, pos);
38+
}
39+
3140
size_t ArduinoSimpleLogging::log(ArduinoSimpleLogging::Level level,
3241
uint8_t byte) {
33-
for (auto &handler : handlers) {
34-
if ((handler.mask & level) != 0) {
35-
handler.stream.write(byte);
36-
}
42+
if (prebuffer_level != level && prebuffer_pos > 0) {
43+
flush_prebuffer();
44+
}
45+
prebuffer_level = level;
46+
prebuffer[prebuffer_pos++] = byte;
47+
if (prebuffer_pos == prebuffer_length || byte == '\n') {
48+
flush_prebuffer();
3749
}
38-
3950
return 1;
4051
}
4152

src/ArduinoSimpleLogging.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ class ArduinoSimpleLogging {
4141
static LogTarget warning;
4242
static LogTarget error;
4343

44+
ArduinoSimpleLogging() : prebuffer_pos(0) {}
45+
4446
size_t log(Level level, const uint8_t *buffer, size_t size);
4547
size_t log(Level level, uint8_t);
4648

@@ -60,6 +62,12 @@ class ArduinoSimpleLogging {
6062
: mask(makeMask(level)), stream(stream) {}
6163
};
6264

65+
void flush_prebuffer();
66+
static const size_t prebuffer_length = 16;
67+
uint8_t prebuffer[prebuffer_length];
68+
size_t prebuffer_pos;
69+
Level prebuffer_level;
70+
6371
std::forward_list<LogHandler> handlers;
6472
};
6573

0 commit comments

Comments
 (0)