nonblocking for TS, blocking for SD card (#4903)

This commit is contained in:
Matthew Kennedy 2022-12-17 17:01:15 -08:00 committed by GitHub
parent 9186a2e0a8
commit aadb09233b
4 changed files with 17 additions and 6 deletions

View File

@ -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;

View File

@ -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*);

View File

@ -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<const uint8_t*>(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<const uint8_t*>(toothBuffer->buffer), toothBuffer->nextIdx * sizeof(composite_logger_s), true);

View File

@ -579,7 +579,7 @@ static void sdTriggerLogger() {
EnableToothLogger();
while (true) {
auto buffer = GetToothLoggerBuffer();
auto buffer = GetToothLoggerBufferBlocking();
logBuffer.write(reinterpret_cast<const char*>(buffer->buffer), buffer->nextIdx * sizeof(composite_logger_s));