17#ifndef FLUX_ADC_MANAGER_H_
18#define FLUX_ADC_MANAGER_H_
26#include "core/hf-core-drivers/internal/hf-internal-interface-wrap/inc/base/BaseAdc.h"
29#include "handlers/ads7952/Ads7952Handler.h"
30#include "core/hf-core-drivers/internal/hf-pincfg/src/hf_functional_pin_config_flux_v1.hpp"
127 [[nodiscard]]
bool IsAds7952Ready(uint8_t device_index)
const noexcept;
144 [[nodiscard]] BaseAdc*
Get(std::string_view name) noexcept;
151 [[nodiscard]] BaseAdc*
Get(HfFunctionalAdcChannel channel) noexcept;
158 [[nodiscard]]
bool Contains(std::string_view name) const noexcept;
164 [[nodiscard]]
size_t Size() const noexcept;
178 [[nodiscard]] hf_adc_err_t
ReadVoltage(std::string_view name,
float& voltage,
180 uint16_t timeBetweenSamples = 0) noexcept;
190 [[nodiscard]] hf_adc_err_t
ReadVoltage(HfFunctionalAdcChannel channel,
float& voltage,
192 uint16_t timeBetweenSamples = 0) noexcept;
202 [[nodiscard]] hf_adc_err_t
ReadRaw(std::string_view name, uint32_t& raw_count,
204 uint16_t timeBetweenSamples = 0) noexcept;
214 [[nodiscard]] hf_adc_err_t
ReadRaw(HfFunctionalAdcChannel channel, uint32_t& raw_count,
216 uint16_t timeBetweenSamples = 0) noexcept;
248 [[nodiscard]]
size_t FindByName(std::string_view name) const noexcept;
251 [[nodiscard]]
size_t FindByEnum(HfFunctionalAdcChannel channel) const noexcept;
254 [[nodiscard]] hf_adc_err_t
ReadVoltageByIndex(
size_t idx,
float& voltage, uint8_t samples, uint16_t timeBetweenSamples) noexcept;
255 [[nodiscard]] hf_adc_err_t
ReadRawByIndex(
size_t idx, uint32_t& raw_count, uint8_t samples, uint16_t timeBetweenSamples) noexcept;
263 static_cast<
size_t>(HfFunctionalAdcChannel::HF_FUNCTIONAL_ADC_COUNT);
AdcManager & GetAdcManager() noexcept
Convenience accessor — equivalent to AdcManager::GetInstance().
Definition AdcManager.h:296
Singleton manager for all analogue-to-digital channels on Flux V1.
Definition AdcManager.h:87
RtosMutex mutex_
Definition AdcManager.h:285
static constexpr size_t kInvalidIndex
Definition AdcManager.h:264
static constexpr size_t kMaxAds7952Devices
Definition AdcManager.h:278
bool IsInternalAdcReady() const noexcept
The MCU ADC unit came up during the last bring-up attempt.
Definition AdcManager.h:121
bool IsInitialized() const noexcept
Check whether the ADC subsystem has been initialised.
Definition AdcManager.h:110
size_t ads7952_device_count_
Definition AdcManager.h:280
size_t FindByEnum(HfFunctionalAdcChannel channel) const noexcept
Find entry index by functional enum. Returns kInvalidIndex if not found. O(1) direct index.
Definition AdcManager.cpp:277
BaseAdc * internal_adc_
Definition AdcManager.h:272
bool Initialize() noexcept
Definition AdcManager.cpp:72
void DumpStatistics() const noexcept
Log ADC channel statistics and health info to the console.
Definition AdcManager.cpp:429
AdcManager & operator=(AdcManager &&)=delete
size_t FindByName(std::string_view name) const noexcept
Find entry index by string name. Returns kInvalidIndex if not found. O(N) linear scan.
Definition AdcManager.cpp:270
hf_adc_err_t ReadRaw(std::string_view name, uint32_t &raw_count, uint8_t samples=1, uint16_t timeBetweenSamples=0) noexcept
Read raw ADC count from a channel by name.
Definition AdcManager.cpp:372
std::array< size_t, kMaxChannels > enum_to_index_
O(1) enum → entries index lookup.
Definition AdcManager.h:267
AdcManager(AdcManager &&)=delete
std::array< std::optional< Ads7952Handler >, kMaxAds7952Devices > ads7952_handlers_
Definition AdcManager.h:279
hf_adc_err_t GetLastError() const noexcept
Get the most recent error code.
Definition AdcManager.h:226
std::array< AdcEntry, kMaxChannels > entries_
Definition AdcManager.h:266
uint64_t init_time_ms_
Timestamp (ms) when Initialize() completed.
Definition AdcManager.h:269
bool EnsureInitialized() noexcept
Initialise the ADC subsystem if not already initialised.
Definition AdcManager.cpp:35
bool IsAds7952Ready(uint8_t device_index) const noexcept
ADS7952 device device_index came up during the last bring-up attempt.
Definition AdcManager.cpp:49
std::atomic< hf_adc_err_t > last_error_
Definition AdcManager.h:284
size_t registered_count_
Definition AdcManager.h:268
bool Deinitialize() noexcept
Release all ADC resources and reset to uninitialized state.
Definition AdcManager.cpp:449
flux::hal::ManagerError GetManagerError() const noexcept
Lifecycle / bind error of the last EnsureInitialized() (shared catalog).
Definition AdcManager.h:116
BaseAdc * Get(std::string_view name) noexcept
Get the BaseAdc driver for a named channel.
Definition AdcManager.cpp:283
size_t Size() const noexcept
Get the number of registered ADC channels.
Definition AdcManager.cpp:304
hf_adc_err_t ReadVoltageByIndex(size_t idx, float &voltage, uint8_t samples, uint16_t timeBetweenSamples) noexcept
Read from an entry by index — shared implementation for both name and enum overloads.
Definition AdcManager.cpp:312
AdcManager(const AdcManager &)=delete
void ReleaseLocked() noexcept
Release the MCU ADC, every ADS7952 handler and the registry (mutex held).
Definition AdcManager.cpp:53
hf_adc_err_t ReadRawByIndex(size_t idx, uint32_t &raw_count, uint8_t samples, uint16_t timeBetweenSamples) noexcept
Definition AdcManager.cpp:328
static constexpr size_t kMaxChannels
Definition AdcManager.h:262
std::atomic< flux::hal::ManagerError > manager_error_
Definition AdcManager.h:283
bool Contains(std::string_view name) const noexcept
Check whether a named ADC channel is registered.
Definition AdcManager.cpp:299
static AdcManager & GetInstance() noexcept
Return the singleton AdcManager instance.
Definition AdcManager.cpp:26
AdcManager & operator=(const AdcManager &)=delete
hf_adc_err_t GetSystemDiagnostics(AdcSystemDiagnostics &diag) const noexcept
Populate an AdcSystemDiagnostics snapshot.
Definition AdcManager.cpp:406
hf_adc_err_t ReadVoltage(std::string_view name, float &voltage, uint8_t samples=1, uint16_t timeBetweenSamples=0) noexcept
Read voltage from a channel by name (already divided if divider > 1).
Definition AdcManager.cpp:342
std::atomic< bool > initialized_
Definition AdcManager.h:282
Shared HAL types for Flux V1: the manager error catalog and the facade result.
ManagerError
Lifecycle / bind failure catalog shared by every manager (GetManagerError()).
Definition flux_hal_types.hpp:37
@ NotInitialized
Manager not initialised (or shut down)
A single ADC channel entry in the fixed-size registry.
Definition AdcManager.h:41
float voltage_divider
Divider ratio for scaled readings.
Definition AdcManager.h:47
uint8_t adc_unit
ADC unit (0 = ADC1, 1 = ADC2)
Definition AdcManager.h:45
uint8_t hw_channel
Hardware channel within the unit.
Definition AdcManager.h:46
bool registered
Whether this entry is active.
Definition AdcManager.h:48
BaseAdc * driver
ADC driver (MCU ADC in the binding, or an ADS7952 handler)
Definition AdcManager.h:44
uint32_t error_count
Total failed read operations on this channel.
Definition AdcManager.h:52
std::string_view name
Human-readable name from pincfg.
Definition AdcManager.h:43
uint32_t access_count
Total successful read operations on this channel.
Definition AdcManager.h:51
HfFunctionalAdcChannel functional_channel
Functional enum for this channel.
Definition AdcManager.h:42
ADC system diagnostics (cross-HAL compatible format).
Definition AdcManager.h:58
bool system_healthy
True when all registered channels are operational.
Definition AdcManager.h:59
uint32_t hardware_errors
Errors attributed to hardware faults.
Definition AdcManager.h:66
uint64_t system_uptime_ms
Milliseconds since ADC subsystem initialisation.
Definition AdcManager.h:67
uint32_t total_operations
Cumulative read attempts across all channels.
Definition AdcManager.h:62
uint32_t total_channels_registered
Number of channels currently registered.
Definition AdcManager.h:60
uint32_t channels_by_chip[2]
[0]=ESP32 internal, [1]=external (ADS7952 etc.)
Definition AdcManager.h:61
hf_adc_err_t last_error
Most recent error code from any operation.
Definition AdcManager.h:68
uint32_t failed_operations
Cumulative failed reads.
Definition AdcManager.h:64
uint32_t communication_errors
Errors attributed to bus communication failures.
Definition AdcManager.h:65
uint32_t successful_operations
Cumulative successful reads.
Definition AdcManager.h:63