11#include "../tmc51x0.hpp"
12#include "../tmc51x0_comm_interface.hpp"
158 if (num_onboard_devices == 0 || num_onboard_devices > MaxDevices) {
206 if (index >= MaxDevices) {
247 uint8_t num_devices = 0;
248 for (
size_t i = 0; i < MaxDevices; ++i) {
254 if (num_devices == 0) {
263 uint8_t device_index = 0;
264 for (
size_t i = 0; i < MaxDevices; ++i) {
271 uint8_t target_address = 254 - device_index;
276 if (!
drivers_[i]->uartConfig.ConfigureUartNodeAddress(target_address,
286 if (!
drivers_[i]->io.SetSdoCfg0Polarity(
false)) {
310 if (index >= MaxDevices || !
drivers_[index].has_value()) {
315 uint8_t target_address = 254 - index;
317 if (!
drivers_[index]->uartConfig.ConfigureUartNodeAddress(target_address,
323 if (!
drivers_[index]->io.SetSdoCfg0Polarity(
false)) {
347 if (index < num_onboard_devices_ || index >= MaxDevices) {
396 if (index >= MaxDevices) {
407 for (
size_t i = index + 1; i < MaxDevices; ++i) {
455 for (
size_t i = 0; i < MaxDevices; ++i) {
457 auto result =
drivers_[i]->Initialize(config);
458 if (!result && first_error) {
459 first_error = result;
471 std::array<std::optional<TMC51x0<CommType>>, MaxDevices>
Result type for operations that return a value.
Definition tmc51x0_result.hpp:90
Main class representing a TMC51x0 stepper motor driver (TMC5130 & TMC5160)
Definition tmc51x0.hpp:119
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:180
Result< void > ProgramSequentially(uint8_t send_delay=2) noexcept
Program all active devices sequentially using NAI/NAO addressing.
Definition tmc51x0_multi_node.hpp:245
Result< void > InitializeAll(const DriverConfig &config=DriverConfig()) noexcept
Initialize all active devices with the same configuration.
Definition tmc51x0_multi_node.hpp:453
const TMC51x0< CommType > & operator[](uint8_t index) const noexcept
Const access to individual TMC5160 driver by logical index.
Definition tmc51x0_multi_node.hpp:443
constexpr size_t GetMaxCapacity() const noexcept
Get the maximum capacity (onboard + extra devices)
Definition tmc51x0_multi_node.hpp:196
Result< void > AddDevice(uint8_t index) noexcept
Add an extra device at the specified logical index.
Definition tmc51x0_multi_node.hpp:345
uint8_t num_active_devices_
Total number of active devices (onboard + extra)
Definition tmc51x0_multi_node.hpp:470
CommType & comm_
Shared UART communication interface.
Definition tmc51x0_multi_node.hpp:467
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:152
std::array< std::optional< TMC51x0< CommType > >, MaxDevices > drivers_
TMC5160 driver instances (optional for dynamic devices)
Definition tmc51x0_multi_node.hpp:472
bool IsDeviceActive(uint8_t index) const noexcept
Check if a device slot is active (has a device instance)
Definition tmc51x0_multi_node.hpp:205
Result< void > RemoveDevice(uint8_t index) noexcept
Remove an extra device at the specified logical index.
Definition tmc51x0_multi_node.hpp:389
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:309
TMC51x0< CommType > & operator[](uint8_t index) noexcept
Access individual TMC5160 driver by logical index.
Definition tmc51x0_multi_node.hpp:433
uint8_t num_onboard_devices_
Number of onboard devices (fixed)
Definition tmc51x0_multi_node.hpp:468
uint8_t GetNumActiveDevices() const noexcept
Get the total number of active devices (onboard + extra)
Definition tmc51x0_multi_node.hpp:188
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.
@ COMM_ERROR
Communication interface error (SPI/UART)
Driver initialization configuration structure.
Definition tmc51x0_types.hpp:2870