32template <
size_t TBufferSize>
34 writeInternal(line->
buffer);
37template <
size_t TBufferSize>
39 writeInternal(logging->
buffer);
42template <
size_t TBufferSize>
44 return m_writePtr - m_buffer;
47template <
size_t TBufferSize>
49 m_writePtr = m_buffer;
53template <
size_t TBufferSize>
58template <
size_t TBufferSize>
60 size_t len = std::strlen(
buffer);
62 size_t available = TBufferSize - length() - 1;
65 len = minI(available, len);
67 *(m_writePtr + len) =
'\0';
68 memcpy(m_writePtr,
buffer, len);
75#if (EFI_PROD_CODE || EFI_SIMULATOR) && EFI_TEXT_LOGGING
107#if EFI_ENABLE_ASSERTS
111 if (*actualOutputBufferSize != expectedOutputSize) {
125static chibios_rt::Mailbox<LogLineBuffer*, lineBufferCount>
freeBuffers;
133 void ThreadTask()
override {
157static LoggingBufferFlusher
lbf;
171#if EFI_UNIT_TEST || EFI_SIMULATOR
178#if EFI_UNIT_TEST || EFI_SIMULATOR
182 va_start(ap, format);
188#if (EFI_PROD_CODE || EFI_SIMULATOR) && EFI_TEXT_LOGGING
194 chibios_rt::CriticalSectionLocker csl;
205 va_start(ap, format);
206 size_t len = chvsnprintf(lineBuffer->
buffer,
sizeof(lineBuffer->
buffer), format, ap);
210 lineBuffer->
buffer[
sizeof(lineBuffer->
buffer) - 1] = LOG_DELIMITER[0];
212 if (len >
sizeof(lineBuffer->
buffer) - 1)
213 len =
sizeof(lineBuffer->
buffer) - 1;
214 for (
size_t i = 0; i < len; i++) {
217 if (isprint(lineBuffer->
buffer[i]) == 0)
218 lineBuffer->
buffer[i] =
' ';
223 chibios_rt::CriticalSectionLocker csl;
238#if (EFI_PROD_CODE || EFI_SIMULATOR) && EFI_TEXT_LOGGING
void writeLine(LogLineBuffer *line)
void writeLogger(Logging *logging)
void writeInternal(const char *buffer)
A base class for a controller that requires its own thread.
efitimeus_t getTimeNowUs()
int time2print(int64_t time)
void firmwareError(ObdCode code, const char *fmt,...)
static chibios_rt::Mailbox< LogLineBuffer *, lineBufferCount > filledBuffers
void scheduleLogging(Logging *logging)
const char * swapOutputBuffers(size_t *actualOutputBufferSize)
static LogLineBuffer lineBuffers[lineBufferCount]
chibios_rt::Mutex logBufferMutex
void startLoggingProcessor()
constexpr size_t lineBufferCount
static LoggingBufferFlusher lbf
static chibios_rt::Mailbox< LogLineBuffer *, lineBufferCount > freeBuffers
void efiPrintfInternal(const char *format,...)
@ ERROR_LOGGING_SIZE_CALC
static BigBufferHandle buffer