safer/clearer index management (#4543)
This commit is contained in:
parent
5be4586b95
commit
3112fc25de
|
@ -196,23 +196,27 @@ static void SetNextCompositeEntry(efitick_t timestamp) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
composite_logger_s* entry = &buffer->buffer[buffer->nextIdx];
|
size_t idx = buffer->nextIdx;
|
||||||
|
auto nextIdx = idx + 1;
|
||||||
|
buffer->nextIdx = nextIdx;
|
||||||
|
|
||||||
uint32_t nowUs = NT2US(timestamp);
|
if (idx < efi::size(buffer->buffer)) {
|
||||||
|
composite_logger_s* entry = &buffer->buffer[idx];
|
||||||
|
|
||||||
// TS uses big endian, grumble
|
uint32_t nowUs = NT2US(timestamp);
|
||||||
entry->timestamp = SWAP_UINT32(nowUs);
|
|
||||||
entry->priLevel = currentTrigger1;
|
|
||||||
entry->secLevel = currentTrigger2;
|
|
||||||
entry->trigger = currentTdc;
|
|
||||||
entry->sync = engine->triggerCentral.triggerState.getShaftSynchronized();
|
|
||||||
entry->coil = currentCoilState;
|
|
||||||
entry->injector = currentInjectorState;
|
|
||||||
|
|
||||||
buffer->nextIdx++;
|
// TS uses big endian, grumble
|
||||||
|
entry->timestamp = SWAP_UINT32(nowUs);
|
||||||
|
entry->priLevel = currentTrigger1;
|
||||||
|
entry->secLevel = currentTrigger2;
|
||||||
|
entry->trigger = currentTdc;
|
||||||
|
entry->sync = engine->triggerCentral.triggerState.getShaftSynchronized();
|
||||||
|
entry->coil = currentCoilState;
|
||||||
|
entry->injector = currentInjectorState;
|
||||||
|
}
|
||||||
|
|
||||||
// if the buffer is full...
|
// if the buffer is full...
|
||||||
bool bufferFull = buffer->nextIdx >= efi::size(buffer->buffer);
|
bool bufferFull = nextIdx >= efi::size(buffer->buffer);
|
||||||
// ... or it's been too long since the last flush
|
// ... or it's been too long since the last flush
|
||||||
bool bufferTimedOut = buffer->startTime.hasElapsedSec(5);
|
bool bufferTimedOut = buffer->startTime.hasElapsedSec(5);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue