18#ifndef COMPONENT_HANDLER_DYNAMIXEL_HANDLER_H_
19#define COMPONENT_HANDLER_DYNAMIXEL_HANDLER_H_
26#include "base/BaseUart.h"
28#include "dynamixel.hpp"
44 dynamixel::DriverError
open(
const dynamixel::TransportConfig&)
noexcept;
45 void close() noexcept;
46 dynamixel::DriverError
set_baud_rate(std::uint32_t baud) noexcept;
47 dynamixel::TransportIo
write_some(const std::uint8_t* data, std::
size_t length) noexcept;
49 dynamixel::TransportIo
read_some(std::uint8_t* out, std::
size_t max) noexcept;
51 std::uint64_t
now_us() noexcept;
63 std::uint8_t servo_id{1};
64 dynamixel::TransportConfig transport{};
65 bool bind_xseries_fallback{
true};
66 std::uint8_t device_index{0};
84 RtosMutex* bus_mutex =
nullptr)
noexcept;
91 bool EnsureInitialized() noexcept;
93 [[nodiscard]]
bool IsPresent() const noexcept {
94 return initialized_.load(std::memory_order_acquire);
97 [[nodiscard]]
const dynamixel::PingInfo&
Identity() const noexcept {
101 [[nodiscard]]
const dynamixel::ModelDescriptor*
Model() const noexcept {
102 return device_.model();
105 void BindModel(
const dynamixel::ModelDescriptor& desc)
noexcept;
106 void BindXSeriesFallback() noexcept;
108 dynamixel::DriverResult<dynamixel::PingInfo> Ping() noexcept;
110 dynamixel::DriverResult<uint8_t> Scan(uint8_t* out_ids, uint8_t max_ids,
111 uint8_t first_id = dynamixel::kMinDeviceId,
112 uint8_t last_id = dynamixel::kMaxDeviceId) noexcept;
115 dynamixel::DriverResult<
void> Reboot() noexcept;
117 dynamixel::DriverResult<
void> SetTorqueEnabled(
bool enabled) noexcept;
118 dynamixel::DriverResult<
void> SetOperatingMode(dynamixel::OperatingMode mode) noexcept;
119 dynamixel::DriverResult<
void> SetMotionProfile(uint32_t profile_acceleration,
120 uint32_t profile_velocity) noexcept;
121 dynamixel::DriverResult<
void> SetGoalPosition(int32_t ticks) noexcept;
122 dynamixel::DriverResult<
void> SetGoalVelocity(int32_t ticks_per_sec) noexcept;
124 dynamixel::DriverResult<int32_t> ReadPosition() noexcept;
125 dynamixel::DriverResult<dynamixel::Telemetry> ReadTelemetry() noexcept;
127 dynamixel::Bus& bus() noexcept {
return bus_; }
128 dynamixel::Device&
device() noexcept {
return device_; }
130 template <
typename Fn>
132 MutexLockGuard lock(*bus_mutex_);
137 bool EnsureInitializedLocked() noexcept;
142 dynamixel::Device device_;
143 dynamixel::PingInfo identity_{};
144 std::atomic<bool> initialized_{
false};
HAL handler wrapping one Dynamixel servo on a BaseUart.
Definition DynamixelHandler.h:80
dynamixel::Device & device() noexcept
Definition DynamixelHandler.h:128
RtosMutex * bus_mutex_
Definition DynamixelHandler.h:146
auto visitDevice(Fn &&fn) noexcept
Definition DynamixelHandler.h:131
const dynamixel::PingInfo & Identity() const noexcept
Definition DynamixelHandler.h:97
DynamixelHandler(DynamixelHandler &&)=delete
DynamixelHandler & operator=(DynamixelHandler &&)=delete
DynamixelHandler(const DynamixelHandler &)=delete
RtosMutex private_mutex_
Definition DynamixelHandler.h:145
const dynamixel::ModelDescriptor * Model() const noexcept
Definition DynamixelHandler.h:101
DynamixelHandler & operator=(const DynamixelHandler &)=delete
CRTP adapter that turns a BaseUart& into dynamixel::Transport.
Definition DynamixelHandler.h:40
dynamixel::TransportIo write_some(const std::uint8_t *data, std::size_t length) noexcept
Definition DynamixelHandler.cpp:28
BaseUart & uart_
Definition DynamixelHandler.h:55
void delay_ms_impl(std::uint32_t ms) noexcept
Definition DynamixelHandler.cpp:70
void close() noexcept
Definition DynamixelHandler.cpp:21
dynamixel::DriverError finish_transmit() noexcept
Definition DynamixelHandler.cpp:40
dynamixel::DriverError open(const dynamixel::TransportConfig &) noexcept
Definition DynamixelHandler.cpp:16
HalUartDynamixelComm(BaseUart &uart) noexcept
Definition DynamixelHandler.h:42
dynamixel::TransportIo read_some(std::uint8_t *out, std::size_t max) noexcept
Definition DynamixelHandler.cpp:46
void discard_stale_input() noexcept
Definition DynamixelHandler.cpp:62
std::uint64_t now_us() noexcept
Definition DynamixelHandler.cpp:66
dynamixel::DriverError set_baud_rate(std::uint32_t baud) noexcept
Definition DynamixelHandler.cpp:23
Definition DynamixelHandler.h:62