Files
Amken USA 87c205fd65 Added TMC2209 support (#727)
TMC2209: Added TMC2209 support
2025-01-28 12:42:18 +01:00

57 lines
1.6 KiB
Go

//go:build tinygo
package tmc2209
import (
"log"
)
// TMC2209 represents a single TMC2209 stepper motor driver on the communication line.
type TMC2209 struct {
comm RegisterComm
address uint8
}
// NewTMC2209 creates a new instance of the TMC2209 driver for a specific address.
func NewTMC2209(comm RegisterComm, address uint8) *TMC2209 {
return &TMC2209{
comm: comm,
address: address,
}
}
// Setup initializes the communication interface with the TMC2209.
func (driver *TMC2209) Setup() error {
// Check if comm is of type *UARTComm
if uartComm, ok := driver.comm.(*UARTComm); ok {
// Call Setup only if comm is a *UARTComm
err := uartComm.Setup()
if err != nil {
return CustomError("Failed to setup UART communication: " + err.Error())
}
} else {
// If it's not a UARTComm, log that it's using a different communication method
log.Println("Using a non-UART communication method")
}
return nil
}
// WriteRegister sends a register write command to the TMC2209.
func (driver *TMC2209) WriteRegister(reg uint8, value uint32) error {
if driver.comm == nil {
return CustomError("communication interface not set")
}
// Use the communication interface (RegisterComm) to write the register
return driver.comm.WriteRegister(reg, value, driver.address)
}
// ReadRegister sends a register read command to the TMC2209 and returns the read value.
func (driver *TMC2209) ReadRegister(reg uint8) (uint32, error) {
if driver.comm == nil {
return 0, CustomError("communication interface not set")
}
// Use the communication interface (RegisterComm) to read the register
return driver.comm.ReadRegister(reg, driver.address)
}