25#ifndef COMPONENT_HANDLER_ADS9324_HANDLER_H_
26#define COMPONENT_HANDLER_ADS9324_HANDLER_H_
32#include "core/hf-core-drivers/external/hf-ads9324-driver/inc/ads9324.hpp"
33#include "base/BaseSpi.h"
34#include "base/BaseAdc.h"
35#include "base/BaseGpio.h"
54 public ads9324::HostInterface<Ads9324SpiHostAdapter> {
71 bool transfer(
const uint8_t* tx, uint8_t* rx, std::size_t len)
noexcept;
95 void DelayUs(uint32_t us)
noexcept;
101 void DelayMs(uint32_t ms)
noexcept;
118 ads9324::DataFormat
format = ads9324::DataFormat::TwosComplement;
129 cfg.default_channel.range = ads9324::InputRange::PlusMinus5V;
130 cfg.default_channel.bandwidth = ads9324::PgaBandwidth::Low;
169 Ads9324Handler(BaseSpi& spi, BaseGpio* convst, BaseGpio* drdy =
nullptr,
213 hf_adc_err_t
ReadChannelV(hf_channel_id_t channel,
float& voltage, hf_u8_t samples = 1,
214 hf_time_t timeout_ms = 0) noexcept override;
223 hf_adc_err_t
ReadChannelCount(hf_channel_id_t channel, hf_u32_t& count, hf_u8_t samples = 1,
224 hf_time_t timeout_ms = 0) noexcept override;
240 hf_adc_err_t
ReadChannel(hf_channel_id_t channel, hf_u32_t& count,
float& voltage,
241 hf_u8_t samples = 1, hf_time_t timeout_ms = 0) noexcept override;
251 hf_u32_t* counts,
float* voltages) noexcept override;
259 bool ConfigureChannel(uint8_t channel, const ads9324::ChannelConfig& cfg) noexcept;
301 template <typename Fn>
304 using ReturnType =
decltype(fn(
305 std::declval<ads9324::ADS9324<Ads9324SpiHostAdapter, Ads9324SpiHostAdapter>&>()));
308 if constexpr (std::is_void_v<ReturnType>) {
342 std::unique_ptr<ads9324::ADS9324<Ads9324SpiHostAdapter, Ads9324SpiHostAdapter>>
adc_driver_;
366 BaseSpi& spi, BaseGpio* convst, BaseGpio* drdy =
nullptr,
Ads9324HandlerConfig GetDefaultAds9324Config() noexcept
Default handler config: differential ±5 V, low PGA bandwidth, two's-complement.
Definition Ads9324Handler.h:126
std::unique_ptr< Ads9324Handler > CreateAds9324Handler(BaseSpi &spi, BaseGpio *convst, BaseGpio *drdy=nullptr, const Ads9324HandlerConfig &config=GetDefaultAds9324Config()) noexcept
Factory: construct an Ads9324Handler on the heap.
Definition Ads9324Handler.cpp:318
Thread-safe BaseAdc handler for one ADS9324 on a SPI bus.
Definition Ads9324Handler.h:160
uint32_t error_count_
Failures.
Definition Ads9324Handler.h:347
RtosMutex handler_mutex_
Serializes all driver access except GetDriver().
Definition Ads9324Handler.h:344
bool IsChannelAvailable(hf_channel_id_t channel) const noexcept override
Whether channel is in [0, 15] (API 0 = AIN1).
Definition Ads9324Handler.cpp:151
bool ConfigureChannel(uint8_t channel, const ads9324::ChannelConfig &cfg) noexcept
Program one channel PGA (mutex-protected).
Definition Ads9324Handler.cpp:232
BaseGpio * drdy_
Optional DRDY.
Definition Ads9324Handler.h:340
hf_adc_err_t ReadChannelV(hf_channel_id_t channel, float &voltage, hf_u8_t samples=1, hf_time_t timeout_ms=0) noexcept override
Read voltage (averaged). Internally a full simultaneous snapshot per sample.
Definition Ads9324Handler.cpp:187
BaseGpio * convst_
Required CONVST.
Definition Ads9324Handler.h:339
void DumpDiagnostics() const noexcept
Log CONVST/DRDY presence, DEVICE_ID, and read/error counts.
Definition Ads9324Handler.cpp:292
hf_adc_err_t ReadChannel(hf_channel_id_t channel, hf_u32_t &count, float &voltage, hf_u8_t samples=1, hf_time_t timeout_ms=0) noexcept override
Read count and voltage (averaged).
Definition Ads9324Handler.cpp:155
hf_adc_err_t ReadChannelCount(hf_channel_id_t channel, hf_u32_t &count, hf_u8_t samples=1, hf_time_t timeout_ms=0) noexcept override
Read raw count (averaged). See ReadChannel for signed-code caveat.
Definition Ads9324Handler.cpp:193
bool GetHandlerDiagnostics(Ads9324Diagnostics &diag) const noexcept
Copy diagnostics under the handler mutex.
Definition Ads9324Handler.cpp:281
uint32_t total_reads_
Successful operations.
Definition Ads9324Handler.h:346
std::unique_ptr< Ads9324SpiHostAdapter > adapter_
CRTP bridge.
Definition Ads9324Handler.h:341
hf_adc_err_t ReadMultipleChannels(const hf_channel_id_t *channels, hf_u8_t num_channels, hf_u32_t *counts, float *voltages) noexcept override
One snapshot, then index the requested channels.
Definition Ads9324Handler.cpp:199
bool EnsureInitializedLocked() noexcept
Initialize if needed while handler_mutex_ is already held.
Definition Ads9324Handler.cpp:85
uint8_t GetDeviceIndex() const noexcept
Logical device index from config.
Definition Ads9324Handler.h:335
bool SetChannelGain(uint8_t channel, int16_t gan_14bit) noexcept
Program GAN_AINx (14-bit two's complement). Correction = GAN / 65536.
Definition Ads9324Handler.cpp:248
bool Deinitialize() noexcept override
Destroy driver and adapter; leave GPIOs as-is.
Definition Ads9324Handler.cpp:141
~Ads9324Handler() noexcept override=default
Releases driver/adapter unique_ptrs.
auto visitDriver(Fn &&fn) noexcept -> decltype(fn(std::declval< ads9324::ADS9324< Ads9324SpiHostAdapter, Ads9324SpiHostAdapter > & >()))
Invoke fn with the driver while holding the handler mutex.
Definition Ads9324Handler.h:302
hf_u8_t GetMaxChannels() const noexcept override
Channel count for BaseAdc.
Definition Ads9324Handler.cpp:149
BaseSpi & spi_ref_
SPI device.
Definition Ads9324Handler.h:338
ads9324::ADS9324< Ads9324SpiHostAdapter, Ads9324SpiHostAdapter > * GetDriver() noexcept
Raw driver pointer.
Definition Ads9324Handler.cpp:270
uint16_t device_id_
Cached DEVICE_ID.
Definition Ads9324Handler.h:348
Ads9324HandlerConfig config_
Init defaults.
Definition Ads9324Handler.h:343
char description_[64]
GetDescription buffer.
Definition Ads9324Handler.h:345
bool Initialize() noexcept override
Create adapter + driver, 1-lane SDOUT bring-up, DEVICE_ID, default PGA.
Definition Ads9324Handler.cpp:92
bool ReadSnapshot(ads9324::Snapshot &snap) noexcept
Simultaneous capture of all enabled channels.
Definition Ads9324Handler.cpp:256
std::unique_ptr< ads9324::ADS9324< Ads9324SpiHostAdapter, Ads9324SpiHostAdapter > > adc_driver_
Definition Ads9324Handler.h:342
const char * GetDescription() const noexcept
Human-readable instance tag (ADS9324_Handler_SPI_DevN).
Definition Ads9324Handler.cpp:279
bool SetChannelOffset(uint8_t channel, int16_t ofs_10bit) noexcept
Program OFS_AINx (10-bit two's-complement).
Definition Ads9324Handler.cpp:240
CRTP adapter connecting BaseSpi + CONVST/DRDY GPIO to the ADS9324 driver.
Definition Ads9324Handler.h:54
bool transfer(const uint8_t *tx, uint8_t *rx, std::size_t len) noexcept
Full-duplex SPI transfer (CRTP dispatch target).
Definition Ads9324Handler.cpp:25
void DelayUs(uint32_t us) noexcept
Busy-wait microseconds (nested volatile loop).
Definition Ads9324Handler.cpp:57
void DelayMs(uint32_t ms) noexcept
Sleep milliseconds via os_delay_msec (chunked at 65535 ms).
Definition Ads9324Handler.cpp:67
bool HasDrdy() const noexcept
Whether a DRDY GPIO was supplied.
Definition Ads9324Handler.cpp:55
void ConvstWrite(bool high) noexcept
Drive CONVST.
Definition Ads9324Handler.cpp:35
bool DrdyRead() noexcept
Sample DRDY.
Definition Ads9324Handler.cpp:46
BaseGpio * drdy_
Optional DRDY; nullptr = timed wait.
Definition Ads9324Handler.h:106
BaseSpi & spi_
SPI device.
Definition Ads9324Handler.h:104
BaseGpio * convst_
CONVST (required at handler Initialize).
Definition Ads9324Handler.h:105
Diagnostic snapshot for one ADS9324 handler instance.
Definition Ads9324Handler.h:141
uint32_t error_count
Failed reads / snapshots.
Definition Ads9324Handler.h:146
bool initialized
BaseAdc initialized flag.
Definition Ads9324Handler.h:142
bool driver_ready
Driver unique_ptr is non-null.
Definition Ads9324Handler.h:143
uint16_t device_id
DEVICE_ID read at init (expect 0x0004).
Definition Ads9324Handler.h:144
uint8_t device_index
Copy of Ads9324HandlerConfig::device_index.
Definition Ads9324Handler.h:147
uint32_t total_reads
Successful BaseAdc / snapshot operations.
Definition Ads9324Handler.h:145
Configuration applied at Ads9324Handler::Initialize.
Definition Ads9324Handler.h:116
ads9324::DataFormat format
GEN_CFG3 coding.
Definition Ads9324Handler.h:118
ads9324::ChannelConfig default_channel
PGA applied to all 16 channels at init.
Definition Ads9324Handler.h:117
uint8_t device_index
Logical index for logs / multi-CS maps.
Definition Ads9324Handler.h:119