33#ifndef COMPONENT_HANDLER_AS5047U_HANDLER_H_
34#define COMPONENT_HANDLER_AS5047U_HANDLER_H_
40#include "core/hf-core-drivers/external/hf-as5047u-driver/inc/as5047u.hpp"
41#include "base/BaseSpi.h"
74 bool transfer(
const uint8_t* tx, uint8_t* rx, std::size_t len)
noexcept;
239 template <typename Fn>
241 using ReturnType =
decltype(fn(std::declval<as5047u::AS5047U<As5047uSpiAdapter>&>()));
244 if constexpr (std::is_void_v<ReturnType>) {
363 BaseSpi& spi_interface,
std::unique_ptr< As5047uHandler > CreateAs5047uHandler(BaseSpi &spi_interface, const As5047uConfig &config=As5047uHandler::GetDefaultConfig()) noexcept
Create AS5047U handler instance.
Definition As5047uHandler.cpp:303
Unified handler for AS5047U magnetic rotary position sensor.
Definition As5047uHandler.h:149
bool EnsureInitializedLocked() noexcept
Ensure initialized while mutex is already held.
Definition As5047uHandler.cpp:229
bool initialized_
Initialization state.
Definition As5047uHandler.h:312
char description_[64]
Sensor description.
Definition As5047uHandler.h:315
bool ApplyConfiguration(const As5047uConfig &config) noexcept
Apply configuration to sensor.
Definition As5047uHandler.cpp:260
as5047u::AS5047U< As5047uSpiAdapter > * GetDriver() noexcept
Naming-consistent alias of GetSensor().
Definition As5047uHandler.cpp:169
bool ValidateSensor() noexcept
Validate sensor parameters.
Definition As5047uHandler.cpp:225
bool Initialize() noexcept
Initialize the AS5047U sensor (lazy initialization)
Definition As5047uHandler.cpp:67
std::unique_ptr< As5047uSpiAdapter > spi_adapter_
SPI CRTP adapter.
Definition As5047uHandler.h:308
void DumpDiagnostics() const noexcept
Dump comprehensive diagnostics and statistics to log as INFO level. Logs AS5047U sensor status,...
Definition As5047uHandler.cpp:307
AS5047U_Error GetLastError() const noexcept
Get last error code.
Definition As5047uHandler.cpp:202
As5047uDiagnostics diagnostics_
Cached diagnostics.
Definition As5047uHandler.h:314
static As5047uConfig GetDefaultConfig() noexcept
Get default sensor configuration.
Definition As5047uHandler.cpp:182
auto visitDriver(Fn &&fn) noexcept -> decltype(fn(std::declval< as5047u::AS5047U< As5047uSpiAdapter > & >()))
Visit the underlying AS5047U driver under handler mutex protection.
Definition As5047uHandler.h:240
bool RefreshDiagnostics() noexcept
Read ERRFL from the sensor and update the cached diagnostics.
Definition As5047uHandler.cpp:212
void UpdateDiagnostics() noexcept
Update cached diagnostics.
Definition As5047uHandler.cpp:252
RtosMutex handler_mutex_
Thread safety mutex.
Definition As5047uHandler.h:311
void HandleSensorErrors(uint16_t sensor_errors) noexcept
Handle sensor errors and update diagnostics.
Definition As5047uHandler.cpp:237
as5047u::AS5047U< As5047uSpiAdapter > * GetSensor() noexcept
Get pointer to AS5047U driver for advanced operations.
Definition As5047uHandler.cpp:157
bool Deinitialize() noexcept
Deinitialize the sensor and free resources.
Definition As5047uHandler.cpp:135
bool EnsureInitialized() noexcept
Ensure the handler is initialized (lazy init entrypoint).
Definition As5047uHandler.cpp:126
As5047uDiagnostics GetDiagnostics() const noexcept
Snapshot of the diagnostics cached at the last refresh.
Definition As5047uHandler.cpp:207
const char * GetDescription() const noexcept
Get sensor description string.
Definition As5047uHandler.cpp:198
AS5047U_Error last_error_
Last driver-reported error flags.
Definition As5047uHandler.h:313
bool IsInitialized() const noexcept
Check if sensor is initialized and ready.
Definition As5047uHandler.cpp:147
bool IsSensorReady() const noexcept
Check if sensor driver is ready (lazy initialization helper)
Definition As5047uHandler.cpp:152
std::unique_ptr< as5047u::AS5047U< As5047uSpiAdapter > > as5047u_sensor_
AS5047U driver instance.
Definition As5047uHandler.h:309
~As5047uHandler() noexcept=default
Destructor - automatically handles cleanup.
BaseSpi & spi_ref_
Reference to SPI interface.
Definition As5047uHandler.h:307
As5047uConfig config_
Sensor configuration.
Definition As5047uHandler.h:310
CRTP adapter connecting BaseSpi interface to AS5047U SpiInterface.
Definition As5047uHandler.h:58
BaseSpi & spi_interface_
Definition As5047uHandler.h:77
bool transfer(const uint8_t *tx, uint8_t *rx, std::size_t len) noexcept
Perform full-duplex SPI transfer (CRTP dispatch target)
Definition As5047uHandler.cpp:37
AS5047U configuration structure.
Definition As5047uHandler.h:117
uint8_t abi_resolution_bits
ABI resolution in bits (10-14)
Definition As5047uHandler.h:126
bool enable_pwm_output
Enable PWM output.
Definition As5047uHandler.h:125
uint16_t zero_position
Zero position offset (0-16383)
Definition As5047uHandler.h:122
bool enable_uvw_output
Enable UVW commutation output.
Definition As5047uHandler.h:124
uint8_t uvw_pole_pairs
UVW pole pairs (1-7)
Definition As5047uHandler.h:127
bool enable_abi_output
Enable ABI incremental output.
Definition As5047uHandler.h:123
bool enable_adaptive_filter
Enable adaptive filtering.
Definition As5047uHandler.h:121
bool high_temperature_mode
Enable 150°C operation mode.
Definition As5047uHandler.h:128
uint8_t crc_retries
Number of CRC error retries.
Definition As5047uHandler.h:119
bool enable_daec
Enable Dynamic Angle Error Compensation.
Definition As5047uHandler.h:120
FrameFormat frame_format
SPI frame format (16/24/32-bit)
Definition As5047uHandler.h:118
Sensor diagnostic information.
Definition As5047uHandler.h:103
uint32_t total_measurements
Total measurements taken.
Definition As5047uHandler.h:111
uint32_t communication_errors
Count of communication errors.
Definition As5047uHandler.h:110
bool cordic_overflow
CORDIC algorithm overflow.
Definition As5047uHandler.h:106
uint16_t last_error_flags
Last error flags read.
Definition As5047uHandler.h:109
bool agc_warning
AGC at minimum or maximum.
Definition As5047uHandler.h:105
bool magnetic_field_ok
Magnetic field strength is adequate.
Definition As5047uHandler.h:104
bool offset_compensation_ok
Offset compensation completed.
Definition As5047uHandler.h:107
bool communication_ok
SPI communication working.
Definition As5047uHandler.h:108
Complete sensor measurement data structure.
Definition As5047uHandler.h:87
int16_t velocity_raw
Raw velocity (signed 14-bit)
Definition As5047uHandler.h:90
uint16_t error_flags
Current error flags.
Definition As5047uHandler.h:96
float velocity_rad_per_sec
Velocity in radians per second.
Definition As5047uHandler.h:92
float velocity_rpm
Velocity in revolutions per minute.
Definition As5047uHandler.h:93
uint16_t magnitude
Magnetic field magnitude (0-16383)
Definition As5047uHandler.h:95
uint16_t angle_raw
Raw angle (0-16383 LSB)
Definition As5047uHandler.h:88
uint16_t angle_compensated
DAEC compensated angle (0-16383 LSB)
Definition As5047uHandler.h:89
bool valid
True if measurement is valid.
Definition As5047uHandler.h:97
uint8_t agc_value
Automatic Gain Control value (0-255)
Definition As5047uHandler.h:94
float velocity_deg_per_sec
Velocity in degrees per second.
Definition As5047uHandler.h:91