Fixed-capacity streaming oscilloscope trigger and capture. More...
#include <algorithm>#include <array>#include <cmath>#include <cstddef>#include <cstdint>#include <limits>#include <span>#include <type_traits>Go to the source code of this file.
Classes | |
| struct | pulp::signal::ScopeCaptureConfig |
| struct | pulp::signal::ScopeCaptureFrameT< SampleType, MaxSamples > |
| class | pulp::signal::ScopeCaptureT< SampleType, MaxSamples > |
Namespaces | |
| namespace | pulp |
| namespace | pulp::signal |
Typedefs | |
| using | pulp::signal::ScopeCapture = ScopeCaptureT<float> |
| using | pulp::signal::ScopeCapture64 = ScopeCaptureT<double> |
Enumerations | |
| enum class | pulp::signal::ScopeTriggerMode : std::uint8_t { pulp::signal::immediate , pulp::signal::rising_edge , pulp::signal::falling_edge , pulp::signal::either_edge } |
Fixed-capacity streaming oscilloscope trigger and capture.
Capture windows contain pretrigger_samples samples before the trigger, followed by the trigger sample and the configured post-trigger tail. Edge modes use a level plus hysteresis and can run once or continuously with an exact sample-count holdoff. Continuous acquisition keeps the most recently completed frame published while the next frame is in progress. Processing is allocation-free, lock-free, and independent of caller block partitioning. capture_completion_latency_samples() is acquisition readiness after the trigger sample, not signal-processing or host-compensation latency. capture() exposes same-thread state only; callers must provide their own synchronized snapshot/mailbox when publishing frames across threads.