2023-12-23 11:12:02 +01:00

53 lines
1.7 KiB
C++

#include "LogService.h"
#include "Static.h"
#include <ArduinoLog.h>
static const char* eventValue(const InputEvent& evt);
char LogService::s_valueBuf[255];
const char*
LogService::eventValue(const InputEvent& evt)
{
switch(evt.type) {
case InputEvent::Null:
snprintf(s_valueBuf, sizeof(s_valueBuf), "null");break;
case InputEvent::Integer:
snprintf(s_valueBuf, sizeof(s_valueBuf), "%d %02x", evt.asInt(), evt.asInt());break;
case InputEvent::String:
snprintf(s_valueBuf, sizeof(s_valueBuf), "\"%s\"", evt.asString());break;
case InputEvent::Color:
snprintf(s_valueBuf, sizeof(s_valueBuf), "[%d, %d, %d]", evt.asRGB().r, evt.asRGB().g, evt.asRGB().b);break;
case InputEvent::Pointer:
snprintf(s_valueBuf, sizeof(s_valueBuf), "*%p", evt.as<void*>());break;
default:
snprintf(s_valueBuf, sizeof(s_valueBuf), "CORRUPTED");break;
}
return s_valueBuf;
}
void
LogService::handleEvent(const InputEvent& evt) {
if (evt.intent != InputEvent::None) {
if (evt.intent != m_lastEvent.intent) {
if (m_duplicateEvents > 0) {
Log.trace("Suppressed reporting %d duplicate events.", m_duplicateEvents);
}
const char* sourceName = evt.name();
const char* valueBuf = eventValue(evt);
if (sourceName == 0) {
Log.trace("Event: intent: %d value: %s", evt.intent, valueBuf);
} else {
Log.trace("Event: intent: %s value: %s", sourceName, valueBuf);
}
m_duplicateEvents = 0;
m_lastEvent = evt;
} else {
m_duplicateEvents++;
}
}
}
STATIC_ALLOC(LogService);
STATIC_TASK(LogService);