11#include "../tmc51x0.hpp"
12#include "../tmc51x0_comm_interface.hpp"
135 if (num_onboard_devices == 0 || num_onboard_devices > MaxDevices) {
187 if (index >= MaxDevices) {
212 if (position < num_onboard_devices_ || position >= MaxDevices) {
217 if (
drivers_[position].has_value()) {
264 if (position >= MaxDevices) {
269 if (!
drivers_[position].has_value()) {
275 for (
size_t i = position + 1; i < MaxDevices; ++i) {
323 for (
size_t i = 0; i < MaxDevices; ++i) {
325 auto result =
drivers_[i]->Initialize(config);
344 uint8_t max_position = 0;
345 for (
size_t i = 0; i < MaxDevices; ++i) {
347 max_position =
static_cast<uint8_t
>(i);
352 uint8_t total_length = max_position + 1;
353 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:257
uint8_t GetNumActiveDevices() const noexcept
Get the total number of active devices (onboard + extra)
Definition tmc51x0_daisy_chain.hpp:169
void UpdateChainLength() noexcept
Update the chain length on SpiCommInterface.
Definition tmc51x0_daisy_chain.hpp:342
uint8_t num_onboard_devices_
Number of onboard devices (fixed)
Definition tmc51x0_daisy_chain.hpp:357
uint8_t num_active_devices_
Total number of active devices (onboard + extra)
Definition tmc51x0_daisy_chain.hpp:359
const TMC51x0< CommType > & operator[](uint8_t index) const noexcept
Const access to individual TMC51x0 driver by index.
Definition tmc51x0_daisy_chain.hpp:312
Result< void > AddDevice(uint8_t position) noexcept
Add an extra device at the specified position.
Definition tmc51x0_daisy_chain.hpp:210
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:129
TMC51x0< CommType > & operator[](uint8_t index) noexcept
Access individual TMC51x0 driver by index.
Definition tmc51x0_daisy_chain.hpp:302
CommType & comm_
Shared SPI communication interface.
Definition tmc51x0_daisy_chain.hpp:356
bool IsDeviceActive(uint8_t index) const noexcept
Check if a device slot is active (has a device instance)
Definition tmc51x0_daisy_chain.hpp:186
uint8_t GetNumOnboardDevices() const noexcept
Get the number of onboard devices (fixed at construction)
Definition tmc51x0_daisy_chain.hpp:161
constexpr size_t GetMaxCapacity() const noexcept
Get the maximum capacity (onboard + extra devices)
Definition tmc51x0_daisy_chain.hpp:177
Result< void > InitializeAll(const DriverConfig &config=DriverConfig()) noexcept
Initialize all active devices with the same configuration.
Definition tmc51x0_daisy_chain.hpp:322
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_config_builder.hpp:75
@ INVALID_STATE
Operation not valid in current state.
@ INVALID_VALUE
Invalid parameter value.
Driver initialization configuration structure.
Definition tmc51x0_types.hpp:2870