Changelog¶
What changed in each release of the driver.
Unreleased¶
- Documentation moved to the HardFOC MkDocs platform: rewritten pages, the code on the site compiled by the host
build from
tests/docs/, a layer figure drawn from the headers, the Doxygen reference underapi/. The Jekyll site and its files are gone. - README rewritten to the HardFOC README standard.
Added¶
Bus::Reboot(id)andDevice::Reboot(): the Protocol 2.0 Reboot instruction (0x08, e-Manual section 5.7), the software way to clear a latched Hardware Error Status. An Alert-only status reply counts as success; no reply isUncertainOutcome. NewkStatusAlertBitandkStatusErrorNumberMask(section 3.2).
Fixed¶
-
The installed CMake package exports the target as
hf::dynamixel, as documented; it washf::hf_dynamixel, sofind_package(hf_dynamixel)consumers could not link the documented name.hf::hf_dynamixelstays as a compatibility target. CI builds a consumer of the install. -
Device::ReadTelemetry()reads Present PWM (124) to Present Temperature (146), contiguous in the X-series RAM control table, in one Read instead of six, then Hardware Error Status (70): two packets instead of seven, same values. It falls back to per-register reads when the block does not fitmax_packet_bytesor the servo refuses the range. The returneddetailis now the block read's. -
TransportConfig::max_packet_bytesnow bounds packet sizes; before, nothing read it.ReadRegister(),WriteRegister(),SyncRead()andSyncWrite()returnBufferTooSmallwithout sending when the instruction or status packet (10 or 11 bytes plus parameters, e-Manual Protocol 2.0 section 2.4) would be longer.Bus::Open()returnsInvalidParameterbelowkMinPacketBytes(14) and caps the limit atkSdkMaxPacketBytes(1024, the SDK's buffers). NewInstructionPacketBytes()andStatusPacketBytes(). -
Device::SetGoalPwm()runs the same checks as the other goal setters: it needs a model whose descriptor supports PWM Control Mode (Operating Mode 16) as well as a cached mode of PWM, and refuses before sending. -
Device::Identify()no longer casts an Operating Mode register value without a typed mode (0, 5 or an undefined value; X-series e-Manual section 2.4, Operating Mode (11)) intoOperatingMode. It maps it to the newOperatingMode::Unknown, which every typed goal refuses. NewOperatingModeFromRaw(),Device::operating_mode()andDevice::operating_mode_raw();SetOperatingMode(Unknown)returnsInvalidParameter. -
Bus::Scan()accepts ID 0, and its default range now starts at 0: Protocol 2.0 device IDs are 0 to 252 (e-Manual, Protocol 2.0, section 2.3).ReadRegister()returnsInvalidId(wasInvalidParameter) for an ID above 252, andSyncRead()/SyncWrite()now reject such IDs withInvalidId. NewIsDeviceId()andkMinDeviceId.
Breaking changes¶
- With the default
max_packet_bytesof 256, a single read above 245 bytes, a write above 244 bytes or a sync write above 242 bytes of IDs and data now returnsBufferTooSmallinstead of being sent. Raisemax_packet_bytes(up to 1024) for longer transfers.Bus::Open()fails for amax_packet_bytesbelow 14. Bus::ReadRegister()returnsInvalidId(wasInvalidParameter) for an ID above 252;SyncRead()andSyncWrite()reject such IDs.Bus::Scan()with default arguments now pings ID 0 too (253 IDs instead of 252).
0.4.0¶
- X-series catalog (XC430, XL430, XM430, XH430) plus
BindModel/BindXSeriesFallbackfor a later larger servo. - ESP32-C6 and ESP32-S3 examples share one source tree: Kconfig pins,
sdkconfig.defaults.<target>,CONFIG_TARGET=esp32s3for the scripts. - Added
dynamixel_scan_example. Read-only and motion examples stream telemetry / bind fallback. - Jekyll + Doxygen GitHub Pages (
_config/,ci-docs-publish.yml). - hf-core aggregation:
HF_CORE_ENABLE_DYNAMIXELandDynamixelHandlerare documented here and implemented in hf-core.
0.3.0¶
- Pin DynamixelSDK 4.1.0 and wrap Protocol 2.0 through a private PortHandler adapter.
- Public CRTP transport, Bus/Device API, XC430-W150 descriptor, sync read/write.
- Host tests drive the real protocol engine through a scripted transport.
- ESP-IDF UART example adapter (C6 bring-up, S3 compile target).