From 87b903a2e31ed28f495034f5d2a619b060c085f3 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 17 Dec 2022 17:01:15 -0800 Subject: [PATCH] nonblocking for TS, blocking for SD card (#4903) --- firmware/console/binary/tooth_logger.cpp | 12 ++++++++++-- firmware/console/binary/tooth_logger.h | 5 ++++- firmware/console/binary/tunerstudio.cpp | 4 ++-- firmware/hw_layer/mmc_card.cpp | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/firmware/console/binary/tooth_logger.cpp b/firmware/console/binary/tooth_logger.cpp index 3608841cc6..7c57a77db3 100644 --- a/firmware/console/binary/tooth_logger.cpp +++ b/firmware/console/binary/tooth_logger.cpp @@ -127,9 +127,9 @@ void DisableToothLogger() { setToothLogReady(false); } -CompositeBuffer* GetToothLoggerBuffer() { +static CompositeBuffer* GetToothLoggerBufferImpl(sysinterval_t timeout) { CompositeBuffer* buffer; - msg_t msg = filledBuffers.fetch(&buffer, TIME_INFINITE); + msg_t msg = filledBuffers.fetch(&buffer, timeout); if (msg == MSG_TIMEOUT) { setToothLogReady(false); @@ -144,6 +144,14 @@ CompositeBuffer* GetToothLoggerBuffer() { return buffer; } +CompositeBuffer* GetToothLoggerBufferNonblocking() { + return GetToothLoggerBufferImpl(TIME_IMMEDIATE); +} + +CompositeBuffer* GetToothLoggerBufferBlocking() { + return GetToothLoggerBufferImpl(TIME_INFINITE); +} + void ReturnToothLoggerBuffer(CompositeBuffer* buffer) { chibios_rt::CriticalSectionLocker csl; diff --git a/firmware/console/binary/tooth_logger.h b/firmware/console/binary/tooth_logger.h index 1a70210c7e..746fa92e33 100644 --- a/firmware/console/binary/tooth_logger.h +++ b/firmware/console/binary/tooth_logger.h @@ -55,7 +55,10 @@ struct CompositeBuffer { // Get a reference to the buffer // Returns nullptr if no buffer is available -CompositeBuffer* GetToothLoggerBuffer(); +CompositeBuffer* GetToothLoggerBufferNonblocking(); +// Blocks until a buffer is available +CompositeBuffer* GetToothLoggerBufferBlocking(); + // Return a buffer to the pool once its contents have been read void ReturnToothLoggerBuffer(CompositeBuffer*); diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index 28c06dbf7e..b9e17b3104 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -749,7 +749,7 @@ int TunerStudio::handleCrcCommand(TsChannelBase* tsChannel, char *data, int inco break; case TS_COMPOSITE_READ: { - auto toothBuffer = GetToothLoggerBuffer(); + auto toothBuffer = GetToothLoggerBufferNonblocking(); if (toothBuffer) { tsChannel->sendResponse(TS_CRC, reinterpret_cast(toothBuffer->buffer), toothBuffer->nextIdx * sizeof(composite_logger_s), true); @@ -793,7 +793,7 @@ int TunerStudio::handleCrcCommand(TsChannelBase* tsChannel, char *data, int inco { EnableToothLoggerIfNotEnabled(); - auto toothBuffer = GetToothLoggerBuffer(); + auto toothBuffer = GetToothLoggerBufferNonblocking(); if (toothBuffer) { tsChannel->sendResponse(TS_CRC, reinterpret_cast(toothBuffer->buffer), toothBuffer->nextIdx * sizeof(composite_logger_s), true); diff --git a/firmware/hw_layer/mmc_card.cpp b/firmware/hw_layer/mmc_card.cpp index 9b8b1a9f9a..699b7d643c 100644 --- a/firmware/hw_layer/mmc_card.cpp +++ b/firmware/hw_layer/mmc_card.cpp @@ -579,7 +579,7 @@ static void sdTriggerLogger() { EnableToothLogger(); while (true) { - auto buffer = GetToothLoggerBuffer(); + auto buffer = GetToothLoggerBufferBlocking(); logBuffer.write(reinterpret_cast(buffer->buffer), buffer->nextIdx * sizeof(composite_logger_s));