37#include <electro/electro>
38#include <frequency/frequency>
113#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
160#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
205 explicit input(std::unique_ptr<state> s)
noexcept;
208 std::unique_ptr<state> _state;
242 std::vector<idfxx::gpio>
pins{};
274#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
319 [[nodiscard]] std::span<const idfxx::gpio>
pins() const noexcept;
344#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
389#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
423 template<
typename Rep,
typename Period>
424 [[nodiscard]]
size_t read(std::span<sample> out,
const std::chrono::duration<Rep, Period>&
timeout) {
465 template<
typename Rep,
typename Period>
466 [[nodiscard]]
size_t read(std::span<electro::millivolts> out,
const std::chrono::duration<Rep, Period>&
timeout) {
503 template<
typename Rep,
typename Period>
505 return _try_read(out, std::chrono::ceil<std::chrono::milliseconds>(
timeout));
527 return _read_voltage(out, std::nullopt);
547 template<
typename Rep,
typename Period>
549 try_read(std::span<electro::millivolts> out,
const std::chrono::duration<Rep, Period>&
timeout) {
550 return _read_voltage(out, std::chrono::ceil<std::chrono::milliseconds>(
timeout));
553#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
599 void to_voltage(std::span<const sample> in, std::span<electro::millivolts> out)
const {
649 explicit sampler(std::unique_ptr<state> s)
noexcept;
651 [[nodiscard]]
result<size_t> _try_read(std::span<sample> out, std::optional<std::chrono::milliseconds>
timeout);
653 _read_voltage(std::span<electro::millivolts> out, std::optional<std::chrono::milliseconds>
timeout);
656 std::unique_ptr<state> _state;
A continuous sampler over one or more analog pins.
result< size_t > try_read(std::span< sample > out, const std::chrono::duration< Rep, Period > &timeout)
Reads samples, blocking until at least one is available or the timeout expires.
size_t read(std::span< sample > out, const std::chrono::duration< Rep, Period > &timeout)
Reads samples, blocking until at least one is available or the timeout expires.
bool calibrated() const noexcept
Returns true when factory calibration is active for every configured pin.
result< size_t > try_read(std::span< electro::millivolts > out, const std::chrono::duration< Rep, Period > &timeout)
Reads samples as calibrated voltages, blocking until at least one is available or the timeout expires...
static result< sampler > make(config config)
Creates a continuous sampler.
void to_voltage(std::span< const sample > in, std::span< electro::millivolts > out) const
Converts a batch of samples to voltages using factory calibration.
bool running() const noexcept
Returns true while the sampler is started.
electro::millivolts to_voltage(int raw) const
Converts a raw conversion value from a single-pin sampler to a voltage.
freq::hertz sample_rate() const noexcept
Returns the configured total sample rate across all pins.
void start()
Starts continuous conversion.
result< void > try_stop()
Stops continuous conversion.
size_t overruns() const noexcept
Returns the number of dropped-data events since the last start.
~sampler()
Destroys the sampler, stopping conversion and releasing ADC1.
sampler(config config)
Constructs a continuous sampler.
std::span< const idfxx::gpio > pins() const noexcept
Returns the configured pins in conversion order.
size_t read(std::span< electro::millivolts > out)
Reads samples as calibrated voltages, blocking until at least one is available.
result< void > try_start()
Starts continuous conversion.
result< void > try_to_voltage(std::span< const sample > in, std::span< electro::millivolts > out) const
Converts a batch of samples to voltages using factory calibration.
sampler(const sampler &)=delete
sampler & operator=(sampler &&other) noexcept
sampler & operator=(const sampler &)=delete
result< electro::millivolts > try_to_voltage(int raw) const
Converts a raw conversion value from a single-pin sampler to a voltage.
sampler(sampler &&other) noexcept
size_t read(std::span< electro::millivolts > out, const std::chrono::duration< Rep, Period > &timeout)
Reads samples as calibrated voltages, blocking until at least one is available or the timeout expires...
result< size_t > try_read(std::span< electro::millivolts > out)
Reads samples as calibrated voltages, blocking until at least one is available.
electro::millivolts to_voltage(const sample &s) const
Converts a sample to a voltage using factory calibration.
result< electro::millivolts > try_to_voltage(const sample &s) const
Converts a sample to a voltage using factory calibration.
result< size_t > try_read(std::span< sample > out)
Reads samples, blocking until at least one is available.
size_t read(std::span< sample > out)
Reads samples, blocking until at least one is available.
void stop()
Stops continuous conversion.
static constexpr gpio nc()
Returns a GPIO representing "not connected".
attenuation
Input attenuation, which sets the measurable voltage range.
@ db_12
~0–3100 mV (full range).
@ db_0
No attenuation (~0–950 mV typical range).
ADC classes and utilities.
T unwrap(result< T > result)
Throws a std::system_error if the result is an error.
@ timeout
Operation timed out.
std::expected< T, std::error_code > result
result type wrapping a value or error code.
External voltage-divider ratio between a source and an ADC pin.
int num
Ratio numerator (source = pin × num / den); must be positive.
int den
Ratio denominator; must be positive.
constexpr bool operator==(const divider_ratio &) const noexcept=default
Compares two divider ratios for equality.
Configuration for a continuous sampler.
bool operator==(const config &) const noexcept=default
Compares two configurations for equality.
freq::hertz sample_rate
Total conversion rate across all pins; each pin samples at this rate divided by the pin count.
size_t frame_samples
Samples delivered per driver transfer — the read granularity.
size_t buffer_samples
Internal pool capacity in samples (at least frame_samples). Reads must drain the pool faster than it ...
std::vector< idfxx::gpio > pins
ADC1-capable GPIOs, converted round-robin in this order (required, no duplicates).
A single conversion result.
constexpr bool operator==(const sample &) const noexcept=default
Compares two conversion results for equality.
int raw
Raw conversion value (chip bit-width dependent).
idfxx::gpio pin
The pin this conversion was taken from.