Commit Graph

73 Commits

Author SHA1 Message Date
Noisyfox
246f2d32bf Merge branch 'main' into dev/ams-heat
# Conflicts:
#	src/libslic3r/Preset.cpp
#	src/libslic3r/PrintConfig.hpp
#	src/slic3r/GUI/DeviceCore/CMakeLists.txt
#	src/slic3r/GUI/DeviceCore/DevDefs.h
#	src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp
#	src/slic3r/GUI/DeviceCore/DevFilaSystem.h
#	src/slic3r/GUI/DeviceCore/DevUtilBackend.cpp
#	src/slic3r/GUI/DeviceCore/DevUtilBackend.h
#	src/slic3r/GUI/DeviceManager.cpp
#	src/slic3r/GUI/DeviceManager.hpp
#	src/slic3r/GUI/SelectMachine.cpp
#	src/slic3r/GUI/SelectMachine.hpp
2026-07-14 10:10:19 +08:00
SoftFever
2fecfc291f fix(gui): rack-aware pre-print nozzle checks in the send dialog
A print sliced for a nozzle that sits in the hotend rack (but is not
mounted) was blocked by the send dialog's mounted-nozzle diameter check,
even though the printer fetches the required nozzle itself (#14685).

Consolidate the three mounted-nozzle gates (_is_nozzle_data_valid,
is_nozzle_type_match, _is_same_nozzle_diameters) into a single
CheckErrorExtruderNozzleWithSlicing fed by s_get_slicing_extuder_nozzles,
which collects the plate's per-extruder nozzle requirements (hybrid
extruders contribute one entry per used sub-nozzle flow). The rack
extruder validates against its whole inventory (mounted + rack) with
guidance to calibrate the rack, refresh nozzle info, or re-slice, and
blocks when toolhead + rack are full (no free slot to stow a nozzle).
Other extruders keep the validity/flow/diameter checks against the
mounted nozzle.

Also add CheckErrorRackStatus, which holds Send while the printer is
still reading the rack hotend information, and judge material hardness
for the rack extruder per dispatch-mapped nozzle as a non-blocking
caution (mounted nozzles keep the blocking gate).
2026-07-13 00:55:16 +08:00
SoftFever
0d31325df0 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.
2026-07-09 18:57:05 +08:00
SoftFever
a098b483f6 feat(device): H2C/A2L device layer
Nozzle rack data model and device-tab panel, multi-nozzle sync, per-nozzle filament blacklist, and print-dispatch nozzle mapping (DevNozzleMappingCtrl V0/V1).
2026-07-09 01:16:25 +08:00
Noisyfox
f713c7ae49 Make sure codes uses same structure/naming/position as BambuStudio
for easier code comparasion & porting in the future
2026-07-07 17:07:40 +08:00
Noisyfox
22d9765348 feat: add CtrlAmsStartDryingHour and CtrlAmsStopDrying commands
Publish 'ams_filament_drying' JSON commands via MQTT for
starting and stopping AMS filament drying.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-07 13:19:11 +08:00
Noisyfox
dd5b755f60 feat: add drying status JSON parsing and DevAms helper methods
Parse dry_status, dry_sub_status, dry_fan statuses,
dry_settings, and dry_cannot_reasons from printer JSON.
Implement IsSupportRemoteDry, AmsIsDrying, get_ams_drying_preset.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-07 13:09:32 +08:00
Noisyfox
9ee7e9aba4 feat: add DevUtilBackend with GetFilamentDryingPreset
Reads filament_dev_ams_drying_* config keys from filament presets
and returns structured DevFilamentDryingPreset data.
2026-07-07 12:51:12 +08:00
Noisyfox
1adfb5f242 feat: add DevFilamentDryingPreset, ctrl method declarations, tray preset getter 2026-07-07 12:13:26 +08:00
Noisyfox
c88535ce9e feat: add drying enums, structs, getters to DevAms
Adds DryCtrlMode, DryStatus, DrySubStatus, DryFanStatus,
CannotDryReason enums and DrySettings struct for AMS drying control.
2026-07-07 12:00:53 +08:00
Noisyfox
272e88a337 refactor: promote DevAmsType to global enum, rename DUMMY to EXT_SPOOL
Matches BambuStudio's DevAmsType naming convention.
2026-07-07 11:49:55 +08:00
SoftFever
6f6fc6ddfe Fixes a possible null dereference in DeviceManager::check_pushing() when the selected machine is missing or stale during timer refresh. (#13802)
* Fix selected-machine null deref in device pushing check
2026-05-22 23:52:00 +08:00
Kevin J. Lynagh
8dd1dd8921 Fix filament syncing by fixing nozzle diameter guards (#13330)
* Remove unused `get_printer_preset` calls.

* `Plater::check_printer_initialized` should skip nozzle flow type checks if nozzle is unknown.

Also remove unnecessary `is_multi_extruders` check.

* Remove unused `CalibUtils::is_same_nozzle_diameters()` fn.

* Simplify `CalibUtils::check_printable_status_before_cali`.

The single-arity can delegate to the vectorized arity.

* Add `DevExtruderSystem::NozzleDiameterMatchesOrUnknown` to simply checks.

* Update `CalibrationPresetPage::update_sync_button_status()` to use `NozzleDiameterMatchesOrUnknown`.

Simplify logic by iterating over each extruder and checking for diameter and volume type match.

The previous code had several mistakes (from what I could tell):

- `curr_obj->is_multi_extruders()` doesn't imply exactly 2 extruders
- the single/multi branch served no purpose
- the single branch failed to check the volume type

* Specify `std::fabs` and add explicit import.

Ref: https://github.com/OrcaSlicer/OrcaSlicer/pull/13330#discussion_r3133613736

Not sure how idiomatic this is in C++ / OrcaSlicer codebase, but CoPilot suggested it and it seems reasonable.

---------

Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-05-16 19:13:40 +08:00
glowstab
9956ad5b48 X2D Support (#13388)
# Description

Adresses #13294 

- Adds the X2D printer definition, machine presets, process presets,
filament presets, BBL profile index entries, CLI config entries,
filament blacklist updates, and printer/load/calibration/cover assets.
- Updates dual-nozzle handling to use configured toolhead labels and
match Bambu X2D hotend placeholders.
- Adds X2D-specific wipe tower cooling placeholder support and 3MF
filament/nozzle change sequence metadata import/export plumbing.

# Note

I own a P2S and an X2D. That's all. I frankly have no idea if my changes
cause regression on other printers, and have no capability to test. I
know that for my X2D, which runs an AMS, .2mm nozzles, SuperTack, and in
LAN mode, this has been working without issue.

# Screenshots/Recordings/Graphs

<img width="606" height="380" alt="Dual nozzle control"
src="https://github.com/user-attachments/assets/0d1c1063-4621-4097-b97c-d739557bf18c"
/>

*Dual nozzle control*

<img width="726" height="260" alt="image"
src="https://github.com/user-attachments/assets/270355b7-ca67-4ca3-ad19-582b8f11411b"
/>

*Multi nozzle filament override*

<img width="416" height="202" alt="X2D Machine config and dual nozzle
support"
src="https://github.com/user-attachments/assets/6a5c07b2-0d20-4819-8f42-d60731313249"
/>

*X2D Machine config and dual nozzle support*

<img width="397" height="142" alt="Filament for Supports test prints"
src="https://github.com/user-attachments/assets/3c7546bd-0e27-4d56-89b7-d9ca18c976f9"
/>

*Filament for Supports has been used in over 20 hours of test prints*

<img width="210" height="263" alt="Left vs Right filament distinction"
src="https://github.com/user-attachments/assets/03322268-b669-4f14-8d77-c4d96843d219"
/>

*Left vs Right filament distinction*

<img width="557" height="327" alt="Custom filament mapping"
src="https://github.com/user-attachments/assets/c1c4396f-7359-474e-80bd-78fec22f9c82"
/>

*Custom filament mapping*

<img width="556" height="314" alt="Auto map"
src="https://github.com/user-attachments/assets/d83e3217-edce-4340-886e-043962003a30"
/>

*Auto map*

<img width="689" height="664" alt="LAN mode send print with X2D preview
and no errors"
src="https://github.com/user-attachments/assets/76009bbf-31d3-4a6c-979c-8643b487c824"
/>

*LAN mode send print with X2D preview and no errors, dual nozzle
selection*


## Tests

- 20 hours of dual-nozzle printing.
- 100% CTest tests passed
- Validated 208 changed JSON files.

<!--
> A guide for users on how to download the artifacts from this PR.
-->

[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
Fix #13294
2026-05-10 02:21:13 +08:00
Noisyfox
fb1f4a7d24 Automatically select external spool if it's the only installed filament (#13356)
* Clean up code

* Filament mapping select ext slot automatically when no AMS filament inserted (OrcaSlicer/OrcaSlicer#13103)

* Show warning if external filament type does not match the one in sliced file
2026-05-09 13:14:27 +08:00
SoftFever
84d896bbd3 fixes an issue that devmgr ping cloud server every second
Co-authored-by: Copilot <copilot@github.com>
2026-05-03 16:59:30 +08:00
SoftFever
c04be9ab37 Introducing Orca Cloud: https://cloud.orcaslicer.com (#13414)
* Add OrcaCloud sync platform and preset bundle sharing system

  Introduce OrcaCloud, a cloud sync platform for user presets, alongside
  a preset bundle system that enables sharing printer/filament/process
  profiles as local exportable bundles or subscribed cloud bundles.

  OrcaCloud platform:
  - Auth to Orca Cloud
  - Encrypted token storage (file-based or system keychain)
  - User preset sync with
  - Profile migration from default/bambu folders on first login
  - Homepage integration with entrance to cloud.orcaslicer.com

  Preset bundles:
  - Local bundle import/export with bundle_structure.json metadata
  - Subscribed cloud bundles with version-based update checking
  - Thread-safe concurrent bundle access with read-write mutex
  - Canonical bundle preset naming (_local/<id>/... and _subscribed/<id>/...)
  - Bundle presets are read-only; grouped under subheaders in combo boxes
  - PresetBundleDialog with auto-sync toggle, refresh, update notifications
  - Hyperlinked bundle names to cloud bundle pages

  Co-authored-by: Sabriel Koh <sabrielkcr@gmail.com>
  Co-authored-by: Derrick <derrick992110@gmail.com>
  Co-authored-by: Mykola Nahirnyi <mnahirnyi@amcbridge.com>
  Co-authored-by: Ian Chua <iancrb00@gmail.com>
  Co-authored-by: Draginraptor <draginraptor@gmail.com>
  Co-authored-by: ExPikaPaka <112851715+ExPikaPaka@users.noreply.github.com>
  Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
  Co-authored-by: Ocraftyone <Ocraftyone@users.noreply.github.com>
  Co-authored-by: yw4z <ywsyildiz@gmail.com>
  Co-authored-by: peterm-m <101202951+peterm-m@users.noreply.github.com>

* Fixed an issue on Windows it failed to login Orca Cloud with Google account
2026-05-01 18:01:29 +08:00
Kevin Lynagh
5ba71e1198 Allow printing even if nozzle info isn't reported by firmware. (#12814)
* Don't assume 0.4mm nozzle; format as "unknown" if not defined.

* Skip nozzle diameter and hardness checks if nozzle info unknown.

---------

Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-04-06 12:40:36 +08:00
SoftFever
431943408b fix UI block issues 2026-02-02 18:12:19 +08:00
SoftFever
8d22fad30b badge support 2026-01-31 01:04:21 +08:00
SoftFever
978e3b79b5 refactor 2026-01-26 19:34:14 +08:00
Maciej Wilczyński
a4d4bfff27 Allow selecting specific network plugin versions 2025-12-14 14:26:16 +01:00
xin.zhang
dd7d12ed8b FIX: only A series with old protocol display as AMS_LITE
JIRA: [STUDIO-15101]
Change-Id: I340c14e88c57ca81c0bfb2f3087a46ee88ab4f31
(cherry picked from commit fa9181386b0e973785900b21962b40217e9585bd)
2025-10-30 14:39:57 +08:00
Noisyfox
ab7e782809 set_user_selected_machine no longer works for local machines 2025-10-29 21:51:01 +08:00
Bastien Nocera
69ecdeba71 FIX: Fix missing std::optional declaration
/run/build/BambuStudio/src/slic3r/GUI/DeviceCore/DevFilaAmsSetting.h:16:10: error: ‘optional’ in namespace ‘std’ does not name a template type
   16 |     std::optional<bool> IsDetectOnInsertEnabled() const { return m_enable_detect_on_insert; };
      |          ^~~~~~~~
/run/build/BambuStudio/src/slic3r/GUI/DeviceCore/DevFilaAmsSetting.h:4:1: note: ‘std::optional’ is defined in header ‘<optional>’; this is probably fixable by adding ‘#include <optional>’
    3 | #include "DevCtrl.h"
  +++ |+#include <optional>
    4 |

/run/build/BambuStudio/src/slic3r/GUI/DeviceCore/DevFilaSystem.h:174:10: error: ‘optional’ in namespace ‘std’ does not name a template type
  174 |     std::optional<bool>  IsDetectOnInsertEnabled() const { return m_ams_system_setting.IsDetectOnInsertEnabled(); };
      |          ^~~~~~~~
/run/build/BambuStudio/src/slic3r/GUI/DeviceCore/DevFilaSystem.h:13:1: note: ‘std::optional’ is defined in header ‘<optional>’; this is probably fixable by adding ‘#include <optional>’
   12 | #include <wx/colour.h>
  +++ |+#include <optional>
   13 |

(cherry picked from commit fa482b1c0dc7faa2ad87c37eb7f1ea2ce87a5084)
2025-10-28 15:30:05 +08:00
hemai
967b7a5050 ENH: support nozzle refresh for H2D Pro
Jira: [STUDIO-13185]
Change-Id: Ib8b5905c32f83b1f849ad4ed327c9d77826d6a18
(cherry picked from commit c603e0f88be71a301ed2fc7f6fff2a34398b6708)
2025-10-28 15:30:04 +08:00
hemai
104cbb7b9b ENH: support E3D print parts display
Jira: [STUDIO-14908]
Change-Id: Ie8273eb6f74a3e7508f440d2092bb48f2e1dbb10
(cherry picked from commit a4218e991e6367e3f1ee3802e785802df2ad6d41)
2025-10-28 15:30:00 +08:00
xin.zhang
c382a8a9c3 ENH: support_clump_position_calibration
jira: [STUDIO-14896]
Change-Id: I2913a1e4022686889aaa94ee31b787930200d02d
(cherry picked from commit 14370c8910878c2182189b42e013c1323615c310)
2025-10-28 15:30:00 +08:00
xin.zhang
8d3da67254 FIX: the sorting of AMS list
JIRA: [STUDIO-14738] [STUDIO-14651]
Change-Id: I6d4b89edc77383be8afacf9823567bc756c8e2ed
(cherry picked from commit 8defa1f50b4b556c6ebaf2ad533ba09ad3f23e38)
2025-10-28 15:29:58 +08:00
xin.zhang
2234b227c4 ENH: the old protocol only support AMS_LITE
JIRA: [STUDIO-14841]
Change-Id: I6040d54490a79b323fcd7000a638e5fc4b45b0b4
(cherry picked from commit b6274332d7dc8077b2612ef4518a9cbaf12123d9)
2025-10-28 15:29:58 +08:00
xin.zhang
fabc681442 ENH: update how to load_ams_list
JIRA: [STUDIO-14255]
Change-Id: I204f881b72185ee16f8ff204feb6469504f9f86b
(cherry picked from commit 4150ff5c178de02dfa67e6bd90765e35c6a64e99)
2025-10-28 15:29:56 +08:00
xin.zhang
491100a9d2 ENH: support AMS switching for A series; clean class AMSSetting
jira: [STUDIO-14068] [STUDIO-14330]
Change-Id: I6281fbf56f3bf406ef28103998790a2a98c3f5c0
(cherry picked from commit 8ee02ec73076691c482ea6d089a49ea1c99ad10c)
2025-10-28 15:29:55 +08:00
hemai
c6db0f0f85 ENH: limit chamber temperature setting in cooling filt mode
Jira: [STUDIO-14035]
Change-Id: I894ecc3f1628bbdaa86fcfd8a4420e59111af7bb
(cherry picked from commit 5e95c6bcc8aa0b89661f27a4f123442857f7fec7)
2025-10-28 15:29:55 +08:00
xin.zhang
ada573a1fd ENH: update fan control mode sequence
jira: [STUDIO-14589]
Change-Id: I40f71ffe0ec65d7ebb945a06753b03c93135fa55
(cherry picked from commit c2d2bdc9349692a12b7cb0198864b6f6c7e88205)
2025-10-28 15:29:54 +08:00
milk
7608195e17 FIX:add idel heating protection
jira:[STUDIO-14359][STUDIO-14431]

Change-Id: I2ecb6c78c4b28d6f14c45dbb1f905b95a9d8c4ab
(cherry picked from commit f6eee61915b47321c1cb44e3ff2306875c32466b)
2025-10-28 15:29:54 +08:00
hemai
833de25b29 FIX: update dev_name when connect mode switch
Jira: [STUDIO-13463]
Change-Id: I3e90d31660ff0d24439584a1e00c15449c425548
(cherry picked from commit 4f4689d7fde21afcf667d35fa62e9f444afed436)
2025-10-28 15:29:53 +08:00
xin.zhang
8863631c92 FIX: filament loading steps
jira: [STUDIO-14428]
Change-Id: I68612346ef9cb50e302323daa47421c22a87be97
(cherry picked from commit 9fb4b9b6a3a16b08d9dc52a4d6dbc15044275dcf)
2025-10-28 15:29:51 +08:00
xin.zhang
55ed67ef23 ENH: support extension fan check
jira: [STUDIO-14122]
Change-Id: I67c2dff7853fb9f8d1098364f2ecec6dee1a18f1
(cherry picked from commit 022fb9d2e27402c51529b477c75af417c43ead17)
2025-10-28 15:29:50 +08:00
milk
299c7c0bac NEW:Add safety button
jira: [STUDIO-14064]

Change-Id: I6a9be69033ea80c2242561c4e1b0ca5626bc7a51
(cherry picked from commit ac4af3aa1de453330fbf2d58988a6e1ea8d5d445)
2025-10-28 15:29:50 +08:00
xin.zhang
299b821c5f ENH: support mix mapping
jira: [STUDIO-13673]
Change-Id: Ic1c89457f5154c108dbab41850ed49561aa34fde
(cherry picked from commit 12942e0545424e2528cc3f3c9aa6947b76469b3d)
2025-10-28 15:29:50 +08:00
xin.zhang
964a35e9b0 ENH: update filaments_blacklist.json
jira: [STUDIO-14159]
Change-Id: Idde4d1c366024b49d474d8802d9f912711ea3991
(cherry picked from commit 5bdf315e6f68e2e27036e348e70402df38f4c49f)
2025-10-28 15:29:50 +08:00
haolin.tian
e6d8339406 FIX: Improve device switching logic for disconnect and reconnect
jira: none
Change-Id: If9b4081581da7bb7c9cdcc44adcb1b9f490afb3f
(cherry picked from commit 725799eec1aad721e74ec956d14b30369d75446a)
2025-10-28 15:29:48 +08:00
xin.zhang
84dd0449b7 ENH: support cold pull for TPU
jira: [STUDIO-13529]
Change-Id: I6a44da3b2774305db179cfed0781d67e9b5a7e2e
(cherry picked from commit 0225c329c8eb8fee332d2cf9732b83ccd0c1dbb3)
2025-10-28 15:29:47 +08:00
xin.zhang
fedcfc4ea5 ENH: support extension tool; support check extension tool
JIRA: [STUDIO-14122] [STUDIO-14162]
Change-Id: I147d335420fcc7c9a190f570863e38e138cdadcf
(cherry picked from commit db83b9fb6c6399d917b27b74cc573d668737c705)
2025-10-28 15:29:47 +08:00
hemai
a397a7378a ENH: refresh nozzle info from studio
Jira: [STUDIO-13650]
Change-Id: I12dc26d5730c761ccc91d3a4a5f120d422d8a0ff
(cherry picked from commit 2bd7cd9a6a4d9c3370491fb4323a1aabe9a45578)
2025-10-28 15:29:47 +08:00
xin.zhang
1494731eab FIX: check with internal filament type
jira: [STUDIO-14216]
Change-Id: I89e0d62b572872d7e2ea8e6e57ac662b64baf92b
(cherry picked from commit 6767c2334bbfcffa41d4d020ee4f2e183a327cee)
2025-10-28 15:29:47 +08:00
xin.zhang
2626a6bc3b FIX: check close chamber temperature
JIRA: [STUDIO-13676]
Change-Id: I5c2712ade24d20d361d00a0b763dd16479aa5fb1
(cherry picked from commit 7ac3c82fbaf0337351d41f5d65c2ae088f755744)
2025-10-28 15:29:47 +08:00
Noisyfox
4ee98b1807 Fix crash due to modify same collection concurrently 2025-10-07 09:56:39 +08:00
noisyfox
551be1c18b Fix build issue with PCH off 2025-10-05 22:53:58 +08:00
xin.zhang
eac358046c FIX: update the implementation of model series
JIRA: [STUDIO-13728]
Change-Id: Ib9091a0b2b253fa4bdad11e07f8910f6045594ad
(cherry picked from commit b250f817f80ea17e7c1cc37e6c98810e8cfc6cd8)
(cherry picked from commit 4d00f9e32541df9817ef131dc2eb7225675e102f)
2025-10-05 00:10:01 +08:00