Skip to content
This repository was archived by the owner on Jul 2, 2026. It is now read-only.

feat(ddsm115)!: migrate the driver to the new framework (phoxal 0.15)#7

Merged
jBernavaPrah merged 1 commit into
mainfrom
feat/ddsm115-0.15
Jun 28, 2026
Merged

feat(ddsm115)!: migrate the driver to the new framework (phoxal 0.15)#7
jBernavaPrah merged 1 commit into
mainfrom
feat/ddsm115-0.15

Conversation

@jBernavaPrah

Copy link
Copy Markdown
Contributor

What

Migrates the ddsm115 wheel-motor driver from phoxal 0.9 to the new framework
authoring surface (phoxal 0.15): a single #[derive(phoxal::Runtime)] +
#[phoxal(id = "ddsm115", api = y2026_1)] driver with #[setup]/#[step]/#[shutdown]
and phoxal::run::<Ddsm115>(). It reads its instance via ctx.component() (D47/D53) and
binds the dynamic motor_command (subscribe) / encoder_sample (publish) per-component
topics (D17/D38).

Why

Part of relocating component drivers to where they belong (phoxal/components, built
from git source — confirmed by REPOSITORIES.md:18) and off the framework. ddsm115 is
the first of the five catalog drivers to move to the new framework.

How

  • Replace src/{main,runtime}.rs with one main.rs; drop async-trait/clap/tokio/
    tracing (the runner owns the process) → deps are phoxal + anyhow (+ serde_json
    dev-dep).
  • Pin phoxal = "0.15" directly (not the workspace's 0.9) so this crate builds on
    0.15 while the other four drivers stay on 0.9 until they migrate — cargo keeps both in
    the lock. component.yaml/URDF/simulation.yaml unchanged.

Tests

cargo check --workspace (0.9 + 0.15 coexisting), cargo test -p phoxal-component-ddsm115
(3 tests incl. emit-apis), clippy -D warnings, fmt — all green.

The remaining four drivers (bno085, oak_d_lite, vl53l1x, zed_f9p) need new component
contracts (IMU/camera/range/GNSS) in the framework api tree before they migrate.

🤖 Generated with Claude Code

Port the ddsm115 wheel-motor driver from the old phoxal 0.9 authoring surface to the
new one: a single `#[derive(phoxal::Runtime)]` + `#[phoxal(id = "ddsm115", api =
y2026_1)]` driver with `#[setup]`/`#[step]`/`#[shutdown]` and a blocking
`phoxal::run::<Ddsm115>()`. It reads its per-instance binding via `ctx.component()`
(D47/D53) and binds the dynamic per-component `motor_command` (subscribe) /
`encoder_sample` (publish) topics (D17/D38) — the framework's typed contracts, no
hand-rolled bus code.

- Replace `src/{main,runtime}.rs` (old split + old `RuntimeProcess`/`clap`) with one
  `main.rs`; drop the `async-trait`/`clap`/`tokio`/`tracing` deps (the runner owns the
  process now) — deps are just `phoxal` + `anyhow` (+ `serde_json` dev-dep for the
  emit-apis test).
- Pin `phoxal = "0.15"` directly (not the workspace's 0.9): cargo keeps both in the
  lock, so this driver builds on 0.15 while the other four catalog drivers stay on 0.9
  until they migrate. `component.yaml` / URDF / simulation.yaml are unchanged (the
  component grammar is separate).

This is the first driver on the new framework — it also confirms component drivers
live here and are built from git source (not framework images), per REPOSITORIES.md.

`cargo check --workspace` (0.9 + 0.15 coexisting), `cargo test -p
phoxal-component-ddsm115` (3 tests), clippy, fmt all green.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
@jBernavaPrah
jBernavaPrah merged commit 8cbe934 into main Jun 28, 2026
3 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant