feat: Filament Track Switch (H2-series O2L-FTS) support

The Filament Track Switch (H2-series accessory, product code O2L-FTS) feeds
every AMS to both extruders through a two-track switch. Port full support
across the device layer, project config, and GUI.

Device / config:
- Model the switch-aware AMS binding (the set of extruders an AMS can feed
  and which input track A/B feeds it), switch readiness, the O2L-FTS firmware
  module, and the fun2 capability bit for checking a slice against installed
  hardware.
- Register has_filament_switcher and enable_filament_dynamic_map as project
  config that persists with the project and restores from a saved 3mf, and
  force both back to false on every project/printer/CLI load path. Live
  device sync is the only thing that sets them true.

GUI:
- Sidebar sync activates the switch from live device state, attributes each
  AMS to the extruder its input track feeds, shows a floating status icon
  (ready / not-calibrated), and surfaces a one-time tip / not-calibrated
  warning.
- Send dialog gains a non-blocking slice-vs-hardware mismatch warning and a
  blocking error when a slice needs dynamic nozzle mapping but the switch is
  missing or not set up.
- AMS load/unload guards, AMS-view routing glyph + un-calibrated banner +
  hidden external-spool road, and mapping-popup external-spool lockout.
- Filament pickers collapse the per-extruder split into a single deduplicated
  "AMS filaments" group with a smart-assign toggle when the switch is ready.
- Firmware-upgrade panel lists the O2L-FTS accessory and its version.
- Device-provided filament-change steps (ams.cfs) drive the change-step
  display when firmware sends them, including the three switch steps.
- "Load current filament" asks which extruder to feed via a
  FeedDirectionDialog when the switch is calibrated.

Inert without the accessory: every path is gated on the switch being
installed (MQTT aux bit 29, default off) or ready, both project flags default
false, and the per-extruder AMS attribution is byte-identical, so AMS state,
the send/load UI, and sliced g-code are unchanged for every printer that does
not report a Filament Track Switch.
This commit is contained in:
SoftFever
2026-07-09 18:57:05 +08:00
parent 26a0caff96
commit 0d31325df0
38 changed files with 1655 additions and 38 deletions

View File

@@ -18656,3 +18656,69 @@ msgstr ""
#, possible-c-format, possible-boost-format
msgid "The current nozzle mapping may produce an extra %0.2f g of waste."
msgstr ""
msgid ""
"Filament switcher detected. All AMS filaments are now available for both "
"extruders. The slicer will auto-assign for optimal printing. "
msgstr ""
msgid ""
"A filament switcher is detected but not calibrated and thus currently "
"unavailable. Please calibrate it on the printer and synchronize before use. "
msgstr ""
msgid ""
"The Filament Track Switch installed on the printer does not match the slicing "
"file. Please re-slice to avoid print quality issues."
msgstr ""
msgid "This print requires a Filament Track Switch. Please install it first."
msgstr ""
msgid "The Filament Track Switch has not been setup. Please setup it first."
msgstr ""
msgid "\"Load\" or \"Unload\" is not supported for external spool while using Filament Track Switch."
msgstr ""
msgid "The Filament Track Switch has not been setup. Please setup on printer."
msgstr ""
msgid "Load %s to "
msgstr ""
msgid "AMS filaments"
msgstr ""
msgid "Fila Saving"
msgstr ""
msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings"
msgstr ""
msgid "Filament Track Switch"
msgstr ""
msgid "AMS has not been initialized. Please initialize it before use."
msgstr ""
msgid "External spools is not supported since Filament Track Switch has been installed. If you want to use external spool, please uninstall it."
msgstr ""
msgid "Switch"
msgstr ""
msgid "hotend"
msgstr ""
msgid "Wait for AMS cooling"
msgstr ""
msgid "Switch current filament at Filament Track Switch"
msgstr ""
msgid "Pull back current filament at Filament Track Switch"
msgstr ""
msgid "Switch track at Filament Track Switch"
msgstr ""