nonblocking for TS, blocking for SD card (#4903)
This commit is contained in:
parent
9186a2e0a8
commit
aadb09233b
|
@ -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;
|
||||
|
||||
|
|
|
@ -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*);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
Loading…
Reference in New Issue