HardFOC Core
API reference
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | List of all members
DynamixelHandler Class Reference

HAL handler wrapping one Dynamixel servo on a BaseUart. More...

#include <DynamixelHandler.h>

Public Member Functions

 DynamixelHandler (BaseUart &uart, const DynamixelHandlerConfig &config=DynamixelHandlerConfig{}, RtosMutex *bus_mutex=nullptr) noexcept
 
 DynamixelHandler (const DynamixelHandler &)=delete
 
DynamixelHandler & operator= (const DynamixelHandler &)=delete
 
 DynamixelHandler (DynamixelHandler &&)=delete
 
DynamixelHandler & operator= (DynamixelHandler &&)=delete
 
bool EnsureInitialized () noexcept
 
bool IsPresent () const noexcept
 
const dynamixel::PingInfo & Identity () const noexcept
 
const dynamixel::ModelDescriptor * Model () const noexcept
 
void BindModel (const dynamixel::ModelDescriptor &desc) noexcept
 
void BindXSeriesFallback () noexcept
 
dynamixel::DriverResult< dynamixel::PingInfo > Ping () noexcept
 
dynamixel::DriverResult< uint8_t > Scan (uint8_t *out_ids, uint8_t max_ids, uint8_t first_id=dynamixel::kMinDeviceId, uint8_t last_id=dynamixel::kMaxDeviceId) noexcept
 Ping first_id..last_id; the default covers every Protocol 2.0 ID, 0 to 252.
 
dynamixel::DriverResult< void > Reboot () noexcept
 Reboot the servo (Protocol 2.0 Reboot, 0x08): clears a latched Hardware Error Status.
 
dynamixel::DriverResult< void > SetTorqueEnabled (bool enabled) noexcept
 
dynamixel::DriverResult< void > SetOperatingMode (dynamixel::OperatingMode mode) noexcept
 
dynamixel::DriverResult< void > SetMotionProfile (uint32_t profile_acceleration, uint32_t profile_velocity) noexcept
 
dynamixel::DriverResult< void > SetGoalPosition (int32_t ticks) noexcept
 
dynamixel::DriverResult< void > SetGoalVelocity (int32_t ticks_per_sec) noexcept
 
dynamixel::DriverResult< int32_t > ReadPosition () noexcept
 
dynamixel::DriverResult< dynamixel::Telemetry > ReadTelemetry () noexcept
 
dynamixel::Bus & bus () noexcept
 
dynamixel::Device & device () noexcept
 
template<typename Fn >
auto visitDevice (Fn &&fn) noexcept
 

Private Member Functions

bool EnsureInitializedLocked () noexcept
 

Private Attributes

DynamixelHandlerConfig config_
 
HalUartDynamixelComm comm_
 
dynamixel::Bus bus_
 
dynamixel::Device device_
 
dynamixel::PingInfo identity_ {}
 
std::atomic< bool > initialized_ {false}
 
RtosMutex private_mutex_
 
RtosMutex * bus_mutex_
 

Detailed Description

HAL handler wrapping one Dynamixel servo on a BaseUart.

Ownership: the host owns the UART. The handler owns the CRTP adapter, Bus, and Device. Share bus_mutex when another protocol uses the same UART (unusual for Dynamixel half-duplex).

Constructor & Destructor Documentation

◆ DynamixelHandler() [1/3]

DynamixelHandler::DynamixelHandler ( BaseUart &  uart,
const DynamixelHandlerConfig &  config = DynamixelHandlerConfig{},
RtosMutex *  bus_mutex = nullptr 
)
explicitnoexcept

◆ DynamixelHandler() [2/3]

DynamixelHandler::DynamixelHandler ( const DynamixelHandler &  )
delete

◆ DynamixelHandler() [3/3]

DynamixelHandler::DynamixelHandler ( DynamixelHandler &&  )
delete

Member Function Documentation

◆ BindModel()

void DynamixelHandler::BindModel ( const dynamixel::ModelDescriptor &  desc)
noexcept

◆ BindXSeriesFallback()

void DynamixelHandler::BindXSeriesFallback ( )
noexcept

◆ bus()

dynamixel::Bus & DynamixelHandler::bus ( )
inlinenoexcept

◆ device()

dynamixel::Device & DynamixelHandler::device ( )
inlinenoexcept

◆ EnsureInitialized()

bool DynamixelHandler::EnsureInitialized ( )
noexcept

◆ EnsureInitializedLocked()

bool DynamixelHandler::EnsureInitializedLocked ( )
privatenoexcept

◆ Identity()

const dynamixel::PingInfo & DynamixelHandler::Identity ( ) const
inlinenoexcept

◆ IsPresent()

bool DynamixelHandler::IsPresent ( ) const
inlinenoexcept

◆ Model()

const dynamixel::ModelDescriptor * DynamixelHandler::Model ( ) const
inlinenoexcept

◆ operator=() [1/2]

DynamixelHandler & DynamixelHandler::operator= ( const DynamixelHandler &  )
delete

◆ operator=() [2/2]

DynamixelHandler & DynamixelHandler::operator= ( DynamixelHandler &&  )
delete

◆ Ping()

dynamixel::DriverResult< dynamixel::PingInfo > DynamixelHandler::Ping ( )
noexcept

◆ ReadPosition()

dynamixel::DriverResult< int32_t > DynamixelHandler::ReadPosition ( )
noexcept

◆ ReadTelemetry()

dynamixel::DriverResult< dynamixel::Telemetry > DynamixelHandler::ReadTelemetry ( )
noexcept

◆ Reboot()

dynamixel::DriverResult< void > DynamixelHandler::Reboot ( )
noexcept

Reboot the servo (Protocol 2.0 Reboot, 0x08): clears a latched Hardware Error Status.

◆ Scan()

dynamixel::DriverResult< uint8_t > DynamixelHandler::Scan ( uint8_t *  out_ids,
uint8_t  max_ids,
uint8_t  first_id = dynamixel::kMinDeviceId,
uint8_t  last_id = dynamixel::kMaxDeviceId 
)
noexcept

Ping first_id..last_id; the default covers every Protocol 2.0 ID, 0 to 252.

◆ SetGoalPosition()

dynamixel::DriverResult< void > DynamixelHandler::SetGoalPosition ( int32_t  ticks)
noexcept

◆ SetGoalVelocity()

dynamixel::DriverResult< void > DynamixelHandler::SetGoalVelocity ( int32_t  ticks_per_sec)
noexcept

◆ SetMotionProfile()

dynamixel::DriverResult< void > DynamixelHandler::SetMotionProfile ( uint32_t  profile_acceleration,
uint32_t  profile_velocity 
)
noexcept

◆ SetOperatingMode()

dynamixel::DriverResult< void > DynamixelHandler::SetOperatingMode ( dynamixel::OperatingMode  mode)
noexcept

◆ SetTorqueEnabled()

dynamixel::DriverResult< void > DynamixelHandler::SetTorqueEnabled ( bool  enabled)
noexcept

◆ visitDevice()

template<typename Fn >
auto DynamixelHandler::visitDevice ( Fn &&  fn)
inlinenoexcept

Member Data Documentation

◆ bus_

dynamixel::Bus DynamixelHandler::bus_
private

◆ bus_mutex_

RtosMutex* DynamixelHandler::bus_mutex_
private

◆ comm_

HalUartDynamixelComm DynamixelHandler::comm_
private

◆ config_

DynamixelHandlerConfig DynamixelHandler::config_
private

◆ device_

dynamixel::Device DynamixelHandler::device_
private

◆ identity_

dynamixel::PingInfo DynamixelHandler::identity_ {}
private

◆ initialized_

std::atomic<bool> DynamixelHandler::initialized_ {false}
private

◆ private_mutex_

RtosMutex DynamixelHandler::private_mutex_
private

The documentation for this class was generated from the following files: