156 if (num_onboard_devices == 0 || num_onboard_devices > MaxDevices) {
204 if (index >= MaxDevices) {
245 uint8_t num_devices = 0;
246 for (
size_t i = 0; i < MaxDevices; ++i) {
252 if (num_devices == 0) {
261 uint8_t device_index = 0;
262 for (
size_t i = 0; i < MaxDevices; ++i) {
269 uint8_t target_address = 254 - device_index;
274 if (!
drivers_[i]->uartConfig.ConfigureUartNodeAddress(target_address,
281 drivers_[i]->SetUartNodeAddress(target_address);
307 if (index >= MaxDevices || !
drivers_[index].has_value()) {
312 uint8_t target_address = 254 - index;
314 if (!
drivers_[index]->uartConfig.ConfigureUartNodeAddress(target_address,
319 drivers_[index]->SetUartNodeAddress(target_address);
341 if (index < num_onboard_devices_ || index >= MaxDevices) {
363 std::make_optional<TMC51x0<CommType>>(
comm_,
f_clk_, 0, 0);
391 if (index >= MaxDevices) {
402 for (
size_t i = index + 1; i < MaxDevices; ++i) {
449 bool all_success =
true;
450 for (
size_t i = 0; i < MaxDevices; ++i) {
452 if (!
drivers_[i]->Initialize(config)) {
466 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 UART multi-node configuration.
Definition tmc51x0_multi_node.hpp:136
uint8_t GetNumOnboardDevices() const noexcept
Get the number of onboard devices (fixed at construction)
Definition tmc51x0_multi_node.hpp:178
Result< void > ProgramSequentially(uint8_t send_delay=2) noexcept
Program all active devices sequentially using NAI/NAO addressing.
Definition tmc51x0_multi_node.hpp:243
Result< void > InitializeAll(const DriverConfig &config=DriverConfig()) noexcept
Initialize all active devices with the same configuration.
Definition tmc51x0_multi_node.hpp:448
const TMC51x0< CommType > & operator[](uint8_t index) const noexcept
Const access to individual TMC5160 driver by logical index.
Definition tmc51x0_multi_node.hpp:438
constexpr size_t GetMaxCapacity() const noexcept
Get the maximum capacity (onboard + extra devices)
Definition tmc51x0_multi_node.hpp:194
Result< void > AddDevice(uint8_t index) noexcept
Add an extra device at the specified logical index.
Definition tmc51x0_multi_node.hpp:339
uint8_t num_active_devices_
Total number of active devices (onboard + extra)
Definition tmc51x0_multi_node.hpp:464
CommType & comm_
Shared UART communication interface.
Definition tmc51x0_multi_node.hpp:461
TMC51x0MultiNode(CommType &comm, uint8_t num_onboard_devices, uint32_t f_clk=ClockFreq::DEFAULT_F_CLK) noexcept
Construct a multi-node manager.
Definition tmc51x0_multi_node.hpp:151
std::array< std::optional< TMC51x0< CommType > >, MaxDevices > drivers_
TMC5160 driver instances (optional for dynamic devices)
Definition tmc51x0_multi_node.hpp:467
bool IsDeviceActive(uint8_t index) const noexcept
Check if a device slot is active (has a device instance)
Definition tmc51x0_multi_node.hpp:203
Result< void > RemoveDevice(uint8_t index) noexcept
Remove an extra device at the specified logical index.
Definition tmc51x0_multi_node.hpp:384
uint32_t f_clk_
TMC5160 clock frequency.
Definition tmc51x0_multi_node.hpp:465
Result< void > ProgramDevice(uint8_t index, uint8_t send_delay=2) noexcept
Program a single device at the specified logical index.
Definition tmc51x0_multi_node.hpp:306
TMC51x0< CommType > & operator[](uint8_t index) noexcept
Access individual TMC5160 driver by logical index.
Definition tmc51x0_multi_node.hpp:428
uint8_t num_onboard_devices_
Number of onboard devices (fixed)
Definition tmc51x0_multi_node.hpp:462
uint8_t GetNumActiveDevices() const noexcept
Get the total number of active devices (onboard + extra)
Definition tmc51x0_multi_node.hpp:186
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.
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.