22#ifndef COMPONENT_HANDLER_MAX22200_HANDLER_H_
23#define COMPONENT_HANDLER_MAX22200_HANDLER_H_
28#include "core/hf-core-drivers/external/hf-max22200-driver/inc/max22200.hpp"
29#include "core/hf-core-drivers/external/hf-max22200-driver/inc/max22200_spi_interface.hpp"
30#include "core/hf-core-drivers/external/hf-max22200-driver/inc/max22200_types.hpp"
31#include "base/BaseSpi.h"
32#include "base/BaseGpio.h"
57 BaseGpio* fault =
nullptr)
noexcept;
63 bool Transfer(
const uint8_t* tx_data, uint8_t* rx_data,
size_t length)
noexcept;
65 bool Configure(uint32_t speed_hz, uint8_t mode,
bool msb_first =
true)
noexcept;
66 [[nodiscard]]
bool IsReady()
const noexcept;
67 void DelayUs(uint32_t us)
noexcept;
68 void GpioSet(max22200::CtrlPin pin, max22200::GpioSignal signal)
noexcept;
69 bool GpioRead(max22200::CtrlPin pin, max22200::GpioSignal& signal)
noexcept;
120 BaseGpio* fault =
nullptr) noexcept;
153 max22200::DriverStatus
Initialize(const max22200::BoardConfig& board_config) noexcept;
171 max22200::DriverStatus
ConfigureChannel(uint8_t channel,
const max22200::ChannelConfig& config)
noexcept;
181 max22200::DriverStatus
SetupCdrChannel(uint8_t channel, uint16_t hit_ma,
182 uint16_t hold_ma,
float hit_time_ms)
noexcept;
192 max22200::DriverStatus
SetupVdrChannel(uint8_t channel,
float hit_duty_pct,
193 float hold_duty_pct,
float hit_time_ms)
noexcept;
200 max22200::DriverStatus
EnableChannel(uint8_t channel)
noexcept;
229 max22200::DriverStatus
GetStatus(max22200::StatusConfig& status) noexcept;
237 max22200::DriverStatus
GetChannelFaults(uint8_t channel, max22200::FaultStatus& faults) noexcept;
254 max22200::DriverStatus
ReadFaultRegister(max22200::FaultStatus& faults) noexcept;
279 template <typename Fn>
281 using R = std::invoke_result_t<Fn, DriverType&>;
282 static_assert(!std::is_void_v<R>,
"withDriver requires non-void return");
283 MutexLockGuard lock(
mutex_);
285 if constexpr (std::is_same_v<R, max22200::DriverStatus>)
286 return max22200::DriverStatus::INITIALIZATION_ERROR;
295 std::unique_ptr<HalSpiMax22200Comm>
comm_;
CRTP SPI communication adapter for MAX22200 using BaseSpi and BaseGpio.
Definition Max22200Handler.h:47
bool initialized_
Definition Max22200Handler.h:78
BaseGpio * fault_
Definition Max22200Handler.h:77
void DelayUs(uint32_t us) noexcept
Definition Max22200Handler.cpp:95
BaseGpio & enable_
Definition Max22200Handler.h:75
BaseGpio & cmd_
Definition Max22200Handler.h:76
bool SetChipSelect(bool state) noexcept
Definition Max22200Handler.cpp:77
bool IsReady() const noexcept
Definition Max22200Handler.cpp:87
bool GpioRead(max22200::CtrlPin pin, max22200::GpioSignal &signal) noexcept
Definition Max22200Handler.cpp:126
HalSpiMax22200Comm(BaseSpi &spi, BaseGpio &enable, BaseGpio &cmd, BaseGpio *fault=nullptr) noexcept
Construct the SPI adapter.
Definition Max22200Handler.cpp:17
bool Configure(uint32_t speed_hz, uint8_t mode, bool msb_first=true) noexcept
Definition Max22200Handler.cpp:82
bool Transfer(const uint8_t *tx_data, uint8_t *rx_data, size_t length) noexcept
Definition Max22200Handler.cpp:69
BaseSpi & spi_
Definition Max22200Handler.h:74
bool Initialize() noexcept
Definition Max22200Handler.cpp:22
void GpioSet(max22200::CtrlPin pin, max22200::GpioSignal signal) noexcept
Definition Max22200Handler.cpp:99
Unified handler for MAX22200 octal solenoid/motor driver.
Definition Max22200Handler.h:101
DriverType * GetDriver() noexcept
Get the underlying driver for advanced operations.
Definition Max22200Handler.cpp:358
bool IsChannelEnabled(uint8_t channel) noexcept
Check if a channel is enabled.
Definition Max22200Handler.cpp:308
RtosMutex mutex_
Definition Max22200Handler.h:294
max22200::DriverStatus Initialize() noexcept
Initialize driver (ENABLE HIGH, read/clear STATUS, set ACTIVE).
Definition Max22200Handler.cpp:166
std::unique_ptr< HalSpiMax22200Comm > comm_
Definition Max22200Handler.h:295
max22200::DriverStatus DisableChannel(uint8_t channel) noexcept
Disable a channel.
Definition Max22200Handler.cpp:289
max22200::DriverStatus SetChannelsMask(uint8_t mask) noexcept
Set channels enabled by bitmask.
Definition Max22200Handler.cpp:317
max22200::DriverStatus GetStatus(max22200::StatusConfig &status) noexcept
Read the STATUS register.
Definition Max22200Handler.cpp:323
max22200::DriverStatus SetupVdrChannel(uint8_t channel, float hit_duty_pct, float hold_duty_pct, float hit_time_ms) noexcept
Quick VDR setup with duty cycle percentages.
Definition Max22200Handler.cpp:270
std::unique_ptr< DriverType > driver_
Definition Max22200Handler.h:296
bool initialized_
Definition Max22200Handler.h:293
max22200::DriverStatus ConfigureChannel(uint8_t channel, const max22200::ChannelConfig &config) noexcept
Configure a channel completely.
Definition Max22200Handler.cpp:250
max22200::DriverStatus EnableChannel(uint8_t channel) noexcept
Enable a channel.
Definition Max22200Handler.cpp:282
bool EnsureInitialized() noexcept
Ensure driver is initialized (lazy init entrypoint).
Definition Max22200Handler.cpp:191
bool IsInitialized() const noexcept
Check if initialized.
Definition Max22200Handler.h:159
static constexpr uint8_t kNumChannels
Definition Max22200Handler.h:106
max22200::DriverStatus Deinitialize() noexcept
Deinitialize — disable all channels, ACTIVE=0, ENABLE LOW.
Definition Max22200Handler.cpp:237
max22200::DriverStatus ClearFaults() noexcept
Clear all fault flags.
Definition Max22200Handler.cpp:346
Max22200Handler(BaseSpi &spi, BaseGpio &enable, BaseGpio &cmd, BaseGpio *fault=nullptr) noexcept
Construct MAX22200 handler.
Definition Max22200Handler.cpp:153
max22200::DriverStatus ReadFaultRegister(max22200::FaultStatus &faults) noexcept
Read fault register into status.
Definition Max22200Handler.cpp:352
max22200::MAX22200< HalSpiMax22200Comm > DriverType
Driver type alias.
Definition Max22200Handler.h:104
max22200::DriverStatus DisableAllChannels() noexcept
Disable all channels.
Definition Max22200Handler.cpp:302
bool EnsureInitializedLocked() noexcept
Definition Max22200Handler.cpp:226
auto withDriver(Fn &&fn) noexcept
Execute a lambda with a locked, initialized driver.
Definition Max22200Handler.h:280
max22200::DriverStatus GetChannelFaults(uint8_t channel, max22200::FaultStatus &faults) noexcept
Read fault flags for a channel.
Definition Max22200Handler.cpp:329
bool HasFault() noexcept
Check if any fault is present.
Definition Max22200Handler.cpp:338
max22200::DriverStatus SetupCdrChannel(uint8_t channel, uint16_t hit_ma, uint16_t hold_ma, float hit_time_ms) noexcept
Quick CDR setup with milliamp values.
Definition Max22200Handler.cpp:258
max22200::DriverStatus EnableAllChannels() noexcept
Enable all channels.
Definition Max22200Handler.cpp:296
void DumpDiagnostics() noexcept
Dump diagnostics to logger.
Definition Max22200Handler.cpp:371