133 if (num_onboard_devices == 0 || num_onboard_devices > MaxDevices) {
185 if (index >= MaxDevices) {
210 if (position < num_onboard_devices_ || position >= MaxDevices) {
215 if (
drivers_[position].has_value()) {
231 std::make_optional<TMC51x0<CommType>>(
comm_,
f_clk_, position);
263 if (position >= MaxDevices) {
268 if (!
drivers_[position].has_value()) {
274 for (
size_t i = position + 1; i < MaxDevices; ++i) {
322 for (
size_t i = 0; i < MaxDevices; ++i) {
324 auto result =
drivers_[i]->Initialize(config);
343 uint8_t max_position = 0;
344 for (
size_t i = 0; i < MaxDevices; ++i) {
346 max_position =
static_cast<uint8_t
>(i);
351 uint8_t total_length = max_position + 1;
352 comm_.SetDaisyChainLength(total_length);
360 std::array<std::optional<TMC51x0<CommType>>, MaxDevices>
Result type for operations that return a value.
Definition tmc51x0_result.hpp:90
High-level manager for multiple TMC51x0 drivers in a daisy-chain configuration.
Definition tmc51x0_daisy_chain.hpp:115
std::array< std::optional< TMC51x0< CommType > >, MaxDevices > drivers_
TMC51x0 driver instances (optional for dynamic devices)
Definition tmc51x0_daisy_chain.hpp:361
Result< void > RemoveDevice(uint8_t position) noexcept
Remove an extra device at the specified position.
Definition tmc51x0_daisy_chain.hpp:256
uint8_t GetNumActiveDevices() const noexcept
Get the total number of active devices (onboard + extra)
Definition tmc51x0_daisy_chain.hpp:167
void UpdateChainLength() noexcept
Update the chain length on SpiCommInterface.
Definition tmc51x0_daisy_chain.hpp:341
uint8_t num_onboard_devices_
Number of onboard devices (fixed)
Definition tmc51x0_daisy_chain.hpp:356
uint8_t num_active_devices_
Total number of active devices (onboard + extra)
Definition tmc51x0_daisy_chain.hpp:358
const TMC51x0< CommType > & operator[](uint8_t index) const noexcept
Const access to individual TMC51x0 driver by index.
Definition tmc51x0_daisy_chain.hpp:311
Result< void > AddDevice(uint8_t position) noexcept
Add an extra device at the specified position.
Definition tmc51x0_daisy_chain.hpp:208
TMC51x0DaisyChain(CommType &comm, uint8_t num_onboard_devices, uint32_t f_clk=ClockFreq::DEFAULT_F_CLK) noexcept
Construct a daisy-chain manager.
Definition tmc51x0_daisy_chain.hpp:128
uint32_t f_clk_
TMC51x0 clock frequency.
Definition tmc51x0_daisy_chain.hpp:359
TMC51x0< CommType > & operator[](uint8_t index) noexcept
Access individual TMC51x0 driver by index.
Definition tmc51x0_daisy_chain.hpp:301
CommType & comm_
Shared SPI communication interface.
Definition tmc51x0_daisy_chain.hpp:355
bool IsDeviceActive(uint8_t index) const noexcept
Check if a device slot is active (has a device instance)
Definition tmc51x0_daisy_chain.hpp:184
uint8_t GetNumOnboardDevices() const noexcept
Get the number of onboard devices (fixed at construction)
Definition tmc51x0_daisy_chain.hpp:159
constexpr size_t GetMaxCapacity() const noexcept
Get the maximum capacity (onboard + extra devices)
Definition tmc51x0_daisy_chain.hpp:175
Result< void > InitializeAll(const DriverConfig &config=DriverConfig()) noexcept
Initialize all active devices with the same configuration.
Definition tmc51x0_daisy_chain.hpp:321
Main class representing a TMC51x0 stepper motor driver (TMC5130 & TMC5160)
Definition tmc51x0.hpp:119
constexpr uint32_t DEFAULT_F_CLK
Typical internal clock frequency in Hz (12 MHz)
Definition tmc51x0_types.hpp:16
Definition tmc51x0_register_defs.cpp:10
@ INVALID_STATE
Operation not valid in current state.
@ INVALID_VALUE
Invalid parameter value.
Driver initialization configuration structure.
Definition tmc51x0_types.hpp:2870
Main TMC51x0 stepper motor driver interface and subsystem classes.
Communication interfaces for TMC51x0 stepper motor driver using SPI and UART.