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);
|
setToothLogReady(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
CompositeBuffer* GetToothLoggerBuffer() {
|
static CompositeBuffer* GetToothLoggerBufferImpl(sysinterval_t timeout) {
|
||||||
CompositeBuffer* buffer;
|
CompositeBuffer* buffer;
|
||||||
msg_t msg = filledBuffers.fetch(&buffer, TIME_INFINITE);
|
msg_t msg = filledBuffers.fetch(&buffer, timeout);
|
||||||
|
|
||||||
if (msg == MSG_TIMEOUT) {
|
if (msg == MSG_TIMEOUT) {
|
||||||
setToothLogReady(false);
|
setToothLogReady(false);
|
||||||
|
@ -144,6 +144,14 @@ CompositeBuffer* GetToothLoggerBuffer() {
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CompositeBuffer* GetToothLoggerBufferNonblocking() {
|
||||||
|
return GetToothLoggerBufferImpl(TIME_IMMEDIATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
CompositeBuffer* GetToothLoggerBufferBlocking() {
|
||||||
|
return GetToothLoggerBufferImpl(TIME_INFINITE);
|
||||||
|
}
|
||||||
|
|
||||||
void ReturnToothLoggerBuffer(CompositeBuffer* buffer) {
|
void ReturnToothLoggerBuffer(CompositeBuffer* buffer) {
|
||||||
chibios_rt::CriticalSectionLocker csl;
|
chibios_rt::CriticalSectionLocker csl;
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,10 @@ struct CompositeBuffer {
|
||||||
|
|
||||||
// Get a reference to the buffer
|
// Get a reference to the buffer
|
||||||
// Returns nullptr if no buffer is available
|
// 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
|
// Return a buffer to the pool once its contents have been read
|
||||||
void ReturnToothLoggerBuffer(CompositeBuffer*);
|
void ReturnToothLoggerBuffer(CompositeBuffer*);
|
||||||
|
|
||||||
|
|
|
@ -749,7 +749,7 @@ int TunerStudio::handleCrcCommand(TsChannelBase* tsChannel, char *data, int inco
|
||||||
break;
|
break;
|
||||||
case TS_COMPOSITE_READ:
|
case TS_COMPOSITE_READ:
|
||||||
{
|
{
|
||||||
auto toothBuffer = GetToothLoggerBuffer();
|
auto toothBuffer = GetToothLoggerBufferNonblocking();
|
||||||
|
|
||||||
if (toothBuffer) {
|
if (toothBuffer) {
|
||||||
tsChannel->sendResponse(TS_CRC, reinterpret_cast<const uint8_t*>(toothBuffer->buffer), toothBuffer->nextIdx * sizeof(composite_logger_s), true);
|
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();
|
EnableToothLoggerIfNotEnabled();
|
||||||
|
|
||||||
auto toothBuffer = GetToothLoggerBuffer();
|
auto toothBuffer = GetToothLoggerBufferNonblocking();
|
||||||
|
|
||||||
if (toothBuffer) {
|
if (toothBuffer) {
|
||||||
tsChannel->sendResponse(TS_CRC, reinterpret_cast<const uint8_t*>(toothBuffer->buffer), toothBuffer->nextIdx * sizeof(composite_logger_s), true);
|
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();
|
EnableToothLogger();
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
auto buffer = GetToothLoggerBuffer();
|
auto buffer = GetToothLoggerBufferBlocking();
|
||||||
|
|
||||||
logBuffer.write(reinterpret_cast<const char*>(buffer->buffer), buffer->nextIdx * sizeof(composite_logger_s));
|
logBuffer.write(reinterpret_cast<const char*>(buffer->buffer), buffer->nextIdx * sizeof(composite_logger_s));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue