21#ifndef COMPONENT_HANDLER_TLE92466ED_HANDLER_H_
22#define COMPONENT_HANDLER_TLE92466ED_HANDLER_H_
29#include "core/hf-core-drivers/external/hf-tle92466ed-driver/inc/tle92466ed.hpp"
30#include "core/hf-core-drivers/external/hf-tle92466ed-driver/inc/tle92466ed_spi_interface.hpp"
31#include "base/BaseSpi.h"
32#include "base/BaseGpio.h"
56 BaseGpio* faultn =
nullptr)
noexcept;
64 tle92466ed::CommResult<void>
Init()
noexcept;
65 tle92466ed::CommResult<void>
Deinit()
noexcept;
66 tle92466ed::CommResult<uint32_t>
Transfer32(uint32_t tx_data)
noexcept;
67 tle92466ed::CommResult<void>
TransferMulti(std::span<const uint32_t> tx_data,
68 std::span<uint32_t> rx_data)
noexcept;
69 tle92466ed::CommResult<void>
Delay(uint32_t microseconds)
noexcept;
70 tle92466ed::CommResult<void>
Configure(
const tle92466ed::SPIConfig& config)
noexcept;
71 [[nodiscard]]
bool IsReady()
const noexcept;
72 [[nodiscard]] tle92466ed::CommError
GetLastError()
const noexcept;
73 tle92466ed::CommResult<void>
ClearErrors()
noexcept;
74 tle92466ed::CommResult<void>
GpioSet(tle92466ed::CtrlPin pin,
75 tle92466ed::GpioSignal signal)
noexcept;
76 tle92466ed::CommResult<tle92466ed::GpioSignal>
GpioRead(tle92466ed::CtrlPin pin)
noexcept;
77 void Log(tle92466ed::LogLevel level,
const char* tag,
78 const char* format, va_list args)
noexcept;
88 tle92466ed::CommError
last_error_{tle92466ed::CommError::None};
128 BaseGpio* faultn =
nullptr) noexcept;
146 tle92466ed::DriverResult<
void>
Initialize() noexcept;
159 tle92466ed::DriverResult<
void>
Initialize(const tle92466ed::GlobalConfig& config) noexcept;
177 tle92466ed::DriverResult<void>
ConfigureChannel(uint8_t channel,
const tle92466ed::ChannelConfig& config)
noexcept;
180 tle92466ed::DriverResult<void>
EnableChannel(uint8_t channel)
noexcept;
183 tle92466ed::DriverResult<void>
DisableChannel(uint8_t channel)
noexcept;
196 tle92466ed::DriverResult<
void>
SetChannelCurrent(uint8_t channel, uint16_t current_ma) noexcept;
205 tle92466ed::DriverResult<
void>
ConfigurePwmRaw(uint8_t channel, uint8_t mantissa,
206 uint8_t exponent,
bool low_freq_range = false) noexcept;
229 tle92466ed::DriverResult<
void>
GetStatus(tle92466ed::DeviceStatus& status) noexcept;
236 tle92466ed::DriverResult<
void>
GetChannelDiagnostics(uint8_t channel, tle92466ed::ChannelDiagnostics& diag) noexcept;
242 tle92466ed::DriverResult<
void>
GetFaultReport(tle92466ed::FaultReport& report) noexcept;
245 tle92466ed::DriverResult<
void>
ClearFaults() noexcept;
258 tle92466ed::DriverResult<
void>
KickWatchdog(uint16_t reload_value = 1000) noexcept;
288 template <typename T>
290 template <
typename T>
300 template <
typename Fn>
302 using R = std::invoke_result_t<Fn, DriverType&>;
303 static_assert(!std::is_void_v<R>,
"withDriver requires non-void return");
304 MutexLockGuard lock(
mutex_);
307 return R{tle::unexpected(tle92466ed::DriverError::NotInitialized)};
316 std::unique_ptr<HalSpiTle92466edComm>
comm_;
CRTP SPI communication adapter for TLE92466ED using BaseSpi and BaseGpio.
Definition Tle92466edHandler.h:46
tle92466ed::CommResult< void > TransferMulti(std::span< const uint32_t > tx_data, std::span< uint32_t > rx_data) noexcept
Definition Tle92466edHandler.cpp:104
tle92466ed::CommResult< tle92466ed::GpioSignal > GpioRead(tle92466ed::CtrlPin pin) noexcept
Definition Tle92466edHandler.cpp:189
BaseGpio & resn_
Definition Tle92466edHandler.h:84
tle92466ed::CommError last_error_
Definition Tle92466edHandler.h:88
tle92466ed::CommResult< void > Deinit() noexcept
Definition Tle92466edHandler.cpp:71
tle92466ed::CommResult< void > Init() noexcept
Definition Tle92466edHandler.cpp:22
tle92466ed::CommResult< void > GpioSet(tle92466ed::CtrlPin pin, tle92466ed::GpioSignal signal) noexcept
Definition Tle92466edHandler.cpp:149
bool initialized_
Definition Tle92466edHandler.h:87
BaseGpio * faultn_
Definition Tle92466edHandler.h:86
tle92466ed::CommResult< uint32_t > Transfer32(uint32_t tx_data) noexcept
Definition Tle92466edHandler.cpp:76
tle92466ed::CommError GetLastError() const noexcept
Definition Tle92466edHandler.cpp:140
bool IsReady() const noexcept
Definition Tle92466edHandler.cpp:136
tle92466ed::CommResult< void > Configure(const tle92466ed::SPIConfig &config) noexcept
Definition Tle92466edHandler.cpp:130
tle92466ed::CommResult< void > Delay(uint32_t microseconds) noexcept
Definition Tle92466edHandler.cpp:125
BaseSpi & spi_
Definition Tle92466edHandler.h:83
BaseGpio & en_
Definition Tle92466edHandler.h:85
void Log(tle92466ed::LogLevel level, const char *tag, const char *format, va_list args) noexcept
Definition Tle92466edHandler.cpp:224
HalSpiTle92466edComm(BaseSpi &spi, BaseGpio &resn, BaseGpio &en, BaseGpio *faultn=nullptr) noexcept
Construct the SPI adapter.
Definition Tle92466edHandler.cpp:17
tle92466ed::CommResult< void > ClearErrors() noexcept
Definition Tle92466edHandler.cpp:144
Unified handler for TLE92466ED six-channel solenoid driver.
Definition Tle92466edHandler.h:109
tle92466ed::DriverResult< void > GetStatus(tle92466ed::DeviceStatus &status) noexcept
Get device status.
Definition Tle92466edHandler.cpp:417
std::unique_ptr< DriverType > driver_
Definition Tle92466edHandler.h:317
uint32_t GetIcVersion() noexcept
Get IC version (returns 0 on error).
Definition Tle92466edHandler.cpp:476
tle92466ed::DriverResult< void > EnterConfigMode() noexcept
Enter config mode (for register writes).
Definition Tle92466edHandler.cpp:405
bool EnsureInitialized() noexcept
Ensure driver is initialized (lazy init entrypoint).
Definition Tle92466edHandler.cpp:279
tle92466ed::DriverResult< void > KickWatchdog(uint16_t reload_value=1000) noexcept
Reload the SPI watchdog.
Definition Tle92466edHandler.cpp:461
tle92466ed::DriverResult< void > EnableAllChannels() noexcept
Enable all channels.
Definition Tle92466edHandler.cpp:369
tle92466ed::DriverResult< void > EnableChannel(uint8_t channel) noexcept
Enable a channel.
Definition Tle92466edHandler.cpp:353
tle92466ed::Driver< HalSpiTle92466edComm > DriverType
Driver type alias.
Definition Tle92466edHandler.h:112
tle92466ed::DriverResult< void > DisableChannel(uint8_t channel) noexcept
Disable a channel.
Definition Tle92466edHandler.cpp:361
tle92466ed::DriverResult< void > GetChannelDiagnostics(uint8_t channel, tle92466ed::ChannelDiagnostics &diag) noexcept
Get channel diagnostics.
Definition Tle92466edHandler.cpp:426
uint32_t GetChipId() noexcept
Get chip ID (returns 0 on error).
Definition Tle92466edHandler.cpp:467
tle92466ed::DriverResult< void > SetChannelCurrent(uint8_t channel, uint16_t current_ma) noexcept
Set channel current setpoint.
Definition Tle92466edHandler.cpp:381
bool EnsureInitializedLocked() noexcept
Definition Tle92466edHandler.cpp:319
bool IsMissionMode() noexcept
Check if in mission mode.
Definition Tle92466edHandler.cpp:411
bool initialized_
Definition Tle92466edHandler.h:314
std::unique_ptr< HalSpiTle92466edComm > comm_
Definition Tle92466edHandler.h:316
tle92466ed::DriverResult< void > Deinitialize() noexcept
Deinitialize — disable channels and shut down.
Definition Tle92466edHandler.cpp:330
Tle92466edHandler(BaseSpi &spi, BaseGpio &resn, BaseGpio &en, BaseGpio *faultn=nullptr) noexcept
Construct TLE92466ED handler.
Definition Tle92466edHandler.cpp:241
tle92466ed::DriverResult< void > ConfigurePwmRaw(uint8_t channel, uint8_t mantissa, uint8_t exponent, bool low_freq_range=false) noexcept
Configure raw PWM period for a channel.
Definition Tle92466edHandler.cpp:389
tle92466ed::DriverResult< void > ClearFaults() noexcept
Clear all fault flags.
Definition Tle92466edHandler.cpp:447
bool HasFault() noexcept
Check if any fault is present.
Definition Tle92466edHandler.cpp:453
tle92466ed::DriverResult< void > ConfigureChannel(uint8_t channel, const tle92466ed::ChannelConfig &config) noexcept
Configure a channel.
Definition Tle92466edHandler.cpp:344
tle92466ed::DriverResult< void > DisableAllChannels() noexcept
Disable all channels.
Definition Tle92466edHandler.cpp:375
tle92466ed::DriverResult< void > Initialize() noexcept
Initialize driver (hardware reset + SPI init + enter config mode).
Definition Tle92466edHandler.cpp:254
DriverType * GetDriver() noexcept
Get the underlying driver for advanced operations.
Definition Tle92466edHandler.cpp:484
static constexpr uint8_t kNumChannels
Definition Tle92466edHandler.h:114
bool IsInitialized() const noexcept
Check if initialized.
Definition Tle92466edHandler.h:166
tle92466ed::DriverResult< void > EnterMissionMode() noexcept
Enter mission mode (enable outputs after configuration).
Definition Tle92466edHandler.cpp:399
auto withDriver(Fn &&fn) noexcept
Execute a lambda with a locked, initialized driver.
Definition Tle92466edHandler.h:301
RtosMutex mutex_
Definition Tle92466edHandler.h:315
void DumpDiagnostics() noexcept
Dump diagnostics to logger.
Definition Tle92466edHandler.cpp:497
tle92466ed::DriverResult< void > GetFaultReport(tle92466ed::FaultReport &report) noexcept
Get comprehensive fault report.
Definition Tle92466edHandler.cpp:438
Type trait to detect tle92466ed::DriverResult<T> types.
Definition Tle92466edHandler.h:289