Skip to content

fix(rp): select exact W/non-W runtime board profile #1332

Description

@zackees

Context

FastLED/FastLED#3836 requires RP2040/RP2350/Pico W USB identity and port selection to live exclusively in fbuild/FastLED/boards. fbuild 2.5.18 consumes the registry, but its Raspberry Pi deploy special case selects by generation only:

let expected_generation = rp_generation_for(board);
partition_rp_candidates(devices, |vid, pid| {
    rp_profiles_match_generation(&profiles_for(vid, pid), expected_generation)
})

This treats Pico 2 (rpipico2, runtime 2E8A:000F) and Pico 2 W (rpipico2w, runtime 2E8A:F00F) as equivalent RP2350 candidates. With one of each connected, fbuild fails ambiguous instead of selecting the requested board profile; with only the wrong variant connected, it can select that wrong board. The same problem exists for Pico vs Pico W in the RP2040 generation.

The generic non-RP path already has board_runtime_identity_matches(board_id, vid, pid), backed by the published board profile, but the RP special case bypasses it.

FastLED currently compensates with a duplicate literal table in ci/util/port_utils.py. Removing that table safely requires fbuild to honor the exact requested RP board profile.

Acceptance criteria

  • RED: focused unit tests connect both non-W and W runtime CDC identities and show the requested rpipico/rpipicow/rpipico2/rpipico2w board selects only its exact runtime profile.
  • RED: with only the wrong W/non-W variant connected, selection returns no port; it must never fall back to generation-only matching when an exact board profile exists.
  • GREEN: use the requested FastLED/boards BoardUsbProfile.identities.runtime for RP application CDC selection.
  • Preserve the generation fallback only when no exact board profile is available and keep it registry-backed; do not add VID/PID literals.
  • Preserve explicit -p/--port, known-unhealthy exclusion, BOOTSEL-with-no-CDC deployment, and fail-closed multiple-exact-device ambiguity.
  • Run focused daemon tests, broader affected-crate tests, clippy/rustfmt, and pre-push review.
  • Coordinate the consumer cleanup PR that deletes FastLED's RP literals and lets fbuild deploy return the healthy application port.

Decisions

  • Board-exact runtime selection is distinct from generation matching used for shared ROM BOOTSEL/recovery classification.
  • No FastLED-local USB catalogue or text parsing of fbuild port scan should be introduced.

Coordinated with FastLED/FastLED#3836.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status
    Triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions