do not derive MessageOutput from Print

force us to use ESP_LOGx macros to log messages. print*() functions are
no longer available through MessageOutput.
This commit is contained in:
Bernhard Kirchen
2025-05-21 23:02:59 +02:00
committed by Thomas Basler
parent 466f584737
commit 5c89460e14
2 changed files with 4 additions and 24 deletions

View File

@@ -11,12 +11,11 @@
#include <queue> #include <queue>
#include <memory> #include <memory>
class MessageOutputClass : public Print { class MessageOutputClass {
public: public:
MessageOutputClass(); MessageOutputClass();
void init(Scheduler& scheduler); void init(Scheduler& scheduler);
size_t write(uint8_t c) override; size_t write(const uint8_t* buffer, size_t size);
size_t write(const uint8_t* buffer, size_t size) override;
void register_ws_output(AsyncWebSocket* output); void register_ws_output(AsyncWebSocket* output);
static int log_vprintf(const char *fmt, va_list arguments); static int log_vprintf(const char *fmt, va_list arguments);

View File

@@ -32,8 +32,8 @@ void MessageOutputClass::register_ws_output(AsyncWebSocket* output)
int MessageOutputClass::log_vprintf(const char* fmt, va_list arguments) int MessageOutputClass::log_vprintf(const char* fmt, va_list arguments)
{ {
char log_buffer[WS_CHUNK_SIZE_BYTES]; char log_buffer[WS_CHUNK_SIZE_BYTES];
vsnprintf(log_buffer, sizeof(log_buffer), fmt, arguments); auto written = vsnprintf(log_buffer, sizeof(log_buffer), fmt, arguments);
return MessageOutput.print(log_buffer); return MessageOutput.write(reinterpret_cast<uint8_t*>(log_buffer), written);
} }
void MessageOutputClass::serialWrite(MessageOutputClass::message_t const& m) void MessageOutputClass::serialWrite(MessageOutputClass::message_t const& m)
@@ -53,25 +53,6 @@ void MessageOutputClass::serialWrite(MessageOutputClass::message_t const& m)
Serial.flush(); Serial.flush();
} }
size_t MessageOutputClass::write(uint8_t c)
{
std::lock_guard<std::mutex> lock(_msgLock);
auto res = _task_messages.emplace(xTaskGetCurrentTaskHandle(), message_t());
auto iter = res.first;
auto& message = iter->second;
message.push_back(c);
if (c == '\n') {
serialWrite(message);
_lines.emplace(std::move(message));
_task_messages.erase(iter);
}
return 1;
}
size_t MessageOutputClass::write(const uint8_t* buffer, size_t size) size_t MessageOutputClass::write(const uint8_t* buffer, size_t size)
{ {
std::lock_guard<std::mutex> lock(_msgLock); std::lock_guard<std::mutex> lock(_msgLock);