Files
templates/tools/dsview/native/gate_summary.h

30 lines
939 B
C++

#pragma once
#include <atomic>
#include <cstdint>
// Annotation IDs are the public gate_driver_timing decoder contract.
// Independent of row visibility and text search; one summary per decode run.
class GateSummary {
public:
void reset() {
controls = 0; acknowledgments = 0; warnings = 0; faults = 0;
}
void observe(int annotation) {
switch (annotation) {
case 0: ++controls; break;
case 2: ++acknowledgments; break;
case 3: ++warnings; break;
case 4: case 5: ++faults; break;
}
}
// 0 = OK, 1 = WARNING / incomplete, 2 = FAULT.
int severity(bool complete) const {
if (faults.load()) return 2;
if (!complete || warnings.load() || !acknowledgments.load() ||
controls.load() != acknowledgments.load()) return 1;
return 0;
}
private:
std::atomic<uint64_t> controls{0}, acknowledgments{0}, warnings{0}, faults{0};
};