Skip to content

Add the Insta360 Link 2 Pro (2e1a:4c06) as its own model - #4

Merged
nahime0 merged 2 commits into
illegalstudio:mainfrom
nicolasfalesy:link2-pro-usb-id
Oct 7, 2026
Merged

nahime0 merged 2 commits into
illegalstudio:mainfrom
nicolasfalesy:link2-pro-usb-id

Conversation

@nicolasfalesy

@nicolasfalesy nicolasfalesy commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

The Link 2 Pro reports USB id 2e1a:4c06, so linkctl did not find it. This adds it as its own model, following the Link 2C shape: Model::Link2Pro with LINK2_PRO_PID = 0x4c06, name "Insta360 Link 2 Pro", serialised as "link2pro". It is included in has_gimbal() and supports_link2_protocol(), 4c06 is added to the udev rule, and it has its own README row. Rebased onto current main; the Link 2C arm, tests and README row are untouched.

Checked on a real Link 2 Pro (Arch, kernel 7.2.5):

  • linkctl devices lists it as "Insta360 Link 2 Pro".
  • linkctl status reads pan, tilt, zoom, focus, white balance and tracking.
  • linkctl tracking on / off switch AI tracking, and status reads the new state back each time.
  • With the camera streaming, pan 20 and tilt 10 moved the gimbal and read back as 20° and 10°.
  • cargo test --features hardware-tests -- --ignored passes (5/5, readonly and movement).

Because pan/tilt is now confirmed, is_tested() returns true for the Pro. Unit tests cover id, name, gimbal, protocol, is_tested and serde. cargo fmt --check and cargo clippy --all-targets --features hardware-tests -- -D warnings are clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_0147kQSBSeXsP4bzATy45baX

Copilot AI balanced review requested due to automatic review settings September 29, 2026 01:11

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@nahime0

nahime0 commented Oct 1, 2026

Copy link
Copy Markdown
Member

Thanks for checking this on a real Link 2 Pro. Detection plus tracking on/off with readback is useful, and 2e1a:4c06 is the id to add.

This needs a rebase onto current main: Link 2C support (#1) landed after this branch and both touch src/camera/model.rs and the README matrix. When resolving, keep the Link 2C arm, tests, and README row.

Please don't map 4c06 onto Model::Link2, which now means the fully validated Link 2 (name "Insta360 Link 2", model_id "link2", is_tested() true). Follow the Link 2C shape instead: Model::Link2Pro with LINK2_PRO_PID = 0x4c06, name "Insta360 Link 2 Pro", #[serde(rename = "link2pro")]; include it in has_gimbal() and supports_link2_protocol(); leave is_tested() false until a pan/tilt move is confirmed; add 4c06 to the udev rule; give it its own README row with the partial status; and add tests for id, name, gimbal, protocol, is_tested, and serde.

Follows the Link 2C shape: Model::Link2Pro with LINK2_PRO_PID = 0x4c06,
name "Insta360 Link 2 Pro", serialised as "link2pro". It has a gimbal and
speaks the Link 2 vendor protocol. Also adds 4c06 to the udev rule and a
README row, plus unit tests for id, name, gimbal, protocol, is_tested and
serde.

is_tested() is true because it was checked on a real Link 2 Pro: devices,
status, tracking on/off with readback, and pan/tilt moves read back at the
set angles. The opt-in hardware suite (readonly + movement) passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0147kQSBSeXsP4bzATy45baX
@nicolasfalesy nicolasfalesy changed the title Recognise the Insta360 Link 2 Pro (2e1a:4c06) Add the Insta360 Link 2 Pro (2e1a:4c06) as its own model Oct 1, 2026
@nicolasfalesy

Copy link
Copy Markdown
Contributor Author

Thanks for the clear notes. Done:

  • Rebased onto main, keeping the Link 2C arm, tests and README row.
  • 4c06 is now Model::Link2Pro (LINK2_PRO_PID, "Insta360 Link 2 Pro", #[serde(rename = "link2pro")]), in has_gimbal() and supports_link2_protocol(), added to the udev rule, with its own README row and unit tests for id, name, gimbal, protocol, is_tested and serde.
  • I then confirmed pan/tilt on the Link 2 Pro: pan 20 / tilt 10 move it and read back correctly, and the hardware suite (readonly + movement) passes 5/5. So is_tested() is true for the Pro and the README row says validated. If you'd rather keep it false for now, say so and I'll flip it back.

@nahime0 nahime0 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes per my comment above: rebase onto current main (keeping Link 2C), and add Link 2 Pro as its own Model::Link2Pro variant rather than aliasing Model::Link2.

@nicolasfalesy

Copy link
Copy Markdown
Contributor Author

Thanks! I think this crossed with the update. Commit a679e80 (pushed 13:04 UTC, before this review) already does both:

  • It's rebased onto current main (v0.1.2) with the Link 2C arm, tests and README row kept. The branch is 0 commits behind main.
  • 4c06 maps to its own Model::Link2Pro, not Model::Link2.

Could you take another look when you have a moment?

@nahime0
nahime0 merged commit 7e3b0ee into illegalstudio:main Oct 7, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants