OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::DevFilaSystem Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/DeviceCore/DevFilaSystem.h>

Collaboration diagram for Slic3r::DevFilaSystem:

Public Member Functions

 DevFilaSystem (MachineObject *owner)
 ~DevFilaSystem ()
MachineObject * GetOwner () const
bool HasAms () const
bool IsAmsSettingUp () const
DevAms * GetAmsById (const std::string &ams_id) const
std::map< std::string, DevAms *, NumericStrCompare > & GetAmsList ()
int GetAmsCount () const
DevAmsTray * GetAmsTray (const std::string &ams_id, const std::string &tray_id) const
void CollectAmsColors (std::vector< wxColour > &ams_colors) const
std::map< int, DevAmsSlotId > GetTrayIndexMap ()
int GetExtruderIdByAmsId (const std::string &ams_id) const
std::string GetNozzleFlowStringByAmsId (const std::string &ams_id) const
DevAmsSystemSetting & GetAmsSystemSetting ()
std::optional< bool > IsDetectOnInsertEnabled () const
bool IsDetectOnPowerupEnabled () const
bool IsDetectRemainEnabled () const
bool IsAutoRefillEnabled () const
std::weak_ptr< DevAmsSystemFirmwareSwitch > GetAmsFirmwareSwitch () const
const std::vector< DevFilamentStep > & GetFilamentChangeSteps () const
int CtrlAmsReset () const
int CtrlAmsStartDryingHour (int ams_id, std::string filament_type, int tag_temp, int tag_duration_hour, bool rotate_tray, int cooling_temp, bool close_power_conflict=false) const
int CtrlAmsStopDrying (int ams_id) const

Static Public Member Functions

static bool IsBBL_Filament (std::string tag_uid)

Private Attributes

MachineObject * m_owner
int m_ams_cali_stat = 0
std::vector< DevFilamentStep > m_filament_change_steps
std::map< std::string, DevAms *, NumericStrCompare > amsList
DevAmsSystemSetting m_ams_system_setting { this }
std::shared_ptr< DevAmsSystemFirmwareSwitch > m_ams_firmware_switch = DevAmsSystemFirmwareSwitch::Create(this)

Friends

class DevFilaSystemParser

Detailed Description

DevFilaSystem - Central manager for all AMS-related data on a printer.

This class owns and manages the hierarchy of AMS units (DevAms) and their trays (DevAmsTray). It provides the primary interface for querying filament/AMS state used by the GUI.

Data Flow Architecture:

Printer Device (sends status via MQTT/LAN) ↓ NetworkAgent (receives JSON, invokes registered callbacks) ↓ MachineObject::parse_json() (delegates to DevFilaSystemParser) ↓ DevFilaSystemParser::ParseV1_0() (populates this DevFilaSystem instance) ↓ GUI functions like build_filament_ams_list() read from here

Key Methods:

  • GetAmsList(): Returns map of all AMS units (ams_id -> DevAms*)
  • GetAmsTray(): Retrieves specific tray by AMS ID and tray ID
  • HasAms(): Checks if any AMS units are connected

Ownership:

Note: This class does NOT directly communicate with NetworkAgent. It is a passive data store populated by the parsing layer.

Constructor & Destructor Documentation

◆ DevFilaSystem()

Slic3r::DevFilaSystem::DevFilaSystem ( MachineObject * owner)
inline
333{ m_owner = owner;};
MachineObject * m_owner
Definition DevFilaSystem.h:387

References m_owner.

◆ ~DevFilaSystem()

Slic3r::DevFilaSystem::~DevFilaSystem ( )
250{
251 for (auto it = amsList.begin(); it != amsList.end(); it++)
252 {
253 if (it->second)
254 {
255 delete it->second;
256 it->second = nullptr;
257 }
258 }
259 amsList.clear();
260}
std::map< std::string, DevAms *, NumericStrCompare > amsList
Definition DevFilaSystem.h:395

References amsList.

Member Function Documentation

◆ CollectAmsColors()

void Slic3r::DevFilaSystem::CollectAmsColors ( std::vector< wxColour > & ams_colors) const
282{
283 ams_colors.clear();
284 ams_colors.reserve(amsList.size());
285 for (auto ams = amsList.begin(); ams != amsList.end(); ams++)
286 {
287 for (auto tray = ams->second->GetTrays().begin(); tray != ams->second->GetTrays().end(); tray++)
288 {
289 if (tray->second->is_tray_info_ready())
290 {
291 auto ams_color = DevAmsTray::decode_color(tray->second->color);
292 ams_colors.emplace_back(ams_color);
293 }
294 }
295 }
296}
static wxColour decode_color(const std::string &color)
Definition DevFilaSystem.cpp:38

References amsList, and Slic3r::DevAmsTray::decode_color().

Here is the call graph for this function:

◆ CtrlAmsReset()

int Slic3r::DevFilaSystem::CtrlAmsReset ( ) const
12{
13 json jj_command;
14 jj_command["print"]["command"] = "ams_reset";
15 jj_command["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
16 return m_owner->publish_json(jj_command);
17}
static int m_sequence_id
Definition DeviceManager.hpp:197
nlohmann::json json
Definition AssembleList.cpp:42

References m_owner, and Slic3r::MachineObject::m_sequence_id.

◆ CtrlAmsStartDryingHour()

int Slic3r::DevFilaSystem::CtrlAmsStartDryingHour ( int ams_id,
std::string filament_type,
int tag_temp,
int tag_duration_hour,
bool rotate_tray,
int cooling_temp,
bool close_power_conflict = false ) const
26{
27 json jj_command;
28 jj_command["print"]["command"] = "ams_filament_drying";
29 jj_command["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
30 jj_command["print"]["ams_id"] = ams_id;
31 jj_command["print"]["mode"] = static_cast<int>(DevAms::DryCtrlMode::OnTime); // Orca: cast scoped enum for json
32 jj_command["print"]["filament"] = filament_type; // Orca: fix comma-operator typo
33 jj_command["print"]["temp"] = tag_temp;
34 jj_command["print"]["duration"] = tag_duration_hour;
35 jj_command["print"]["humidity"] = 0;
36 jj_command["print"]["rotate_tray"] = rotate_tray;
37 jj_command["print"]["cooling_temp"] = cooling_temp;
38 jj_command["print"]["close_power_conflict"] = close_power_conflict;
39 return m_owner->publish_json(jj_command);
40}
@ OnTime
Definition DevFilaSystem.h:155
zaa_minimize_perimeter_height filament_type((ConfigOptionBools, filament_soluble))((ConfigOptionStrings

References Slic3r::filament_type(), m_owner, Slic3r::MachineObject::m_sequence_id, and Slic3r::DevAms::OnTime.

Here is the call graph for this function:

◆ CtrlAmsStopDrying()

int Slic3r::DevFilaSystem::CtrlAmsStopDrying ( int ams_id) const
43{
44 json jj_command;
45 jj_command["print"]["command"] = "ams_filament_drying";
46 jj_command["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
47 jj_command["print"]["ams_id"] = ams_id;
48 jj_command["print"]["mode"] = static_cast<int>(DevAms::DryCtrlMode::Off); // Orca: cast scoped enum for json
49 jj_command["print"]["filament"] = ""; // Orca: fix comma-operator typo
50 jj_command["print"]["temp"] = 0;
51 jj_command["print"]["duration"] = 0;
52 jj_command["print"]["humidity"] = 0;
53 jj_command["print"]["rotate_tray"] = false;
54 jj_command["print"]["cooling_temp"] = 0;
55 jj_command["print"]["close_power_conflict"] = false;
56 return m_owner->publish_json(jj_command);
57}
@ Off
Definition DevFilaSystem.h:154

References m_owner, Slic3r::MachineObject::m_sequence_id, and Slic3r::DevAms::Off.

◆ GetAmsById()

DevAms * Slic3r::DevFilaSystem::GetAmsById ( const std::string & ams_id) const
263{
264 auto it = amsList.find(ams_id);
265 if (it != amsList.end())
266 {
267 return it->second;
268 }
269
270 return nullptr;
271}

References amsList.

◆ GetAmsCount()

int Slic3r::DevFilaSystem::GetAmsCount ( ) const
inline
345{ return amsList.size(); }

References amsList.

◆ GetAmsFirmwareSwitch()

std::weak_ptr< DevAmsSystemFirmwareSwitch > Slic3r::DevFilaSystem::GetAmsFirmwareSwitch ( ) const
inline
368{ return m_ams_firmware_switch;}
std::shared_ptr< DevAmsSystemFirmwareSwitch > m_ams_firmware_switch
Definition DevFilaSystem.h:398

References m_ams_firmware_switch.

◆ GetAmsList()

std::map< std::string, DevAms *, NumericStrCompare > & Slic3r::DevFilaSystem::GetAmsList ( )
inline
344{ return amsList; }

References amsList.

Referenced by Slic3r::GUI::collect_ams_color_items(), and GetTrayIndexMap().

Here is the caller graph for this function:

◆ GetAmsSystemSetting()

DevAmsSystemSetting & Slic3r::DevFilaSystem::GetAmsSystemSetting ( )
inline
362{ return m_ams_system_setting; }
DevAmsSystemSetting m_ams_system_setting
Definition DevFilaSystem.h:397

References m_ams_system_setting.

◆ GetAmsTray()

DevAmsTray * Slic3r::DevFilaSystem::GetAmsTray ( const std::string & ams_id,
const std::string & tray_id ) const
274{
275 auto it = amsList.find(ams_id);
276 if (it == amsList.end()) return nullptr;
277 if (!it->second) return nullptr;
278 return it->second->GetTray(tray_id);;
279}

References amsList.

◆ GetExtruderIdByAmsId()

int Slic3r::DevFilaSystem::GetExtruderIdByAmsId ( const std::string & ams_id) const
299{
300 auto it = amsList.find(ams_id);
301 if (it != amsList.end())
302 {
303 return it->second->GetExtruderId();
304 }
305 else if (stoi(ams_id) == VIRTUAL_TRAY_MAIN_ID)
306 {
307 return MAIN_EXTRUDER_ID;
308 }
309 else if (stoi(ams_id) == VIRTUAL_TRAY_DEPUTY_ID)
310 {
311 return DEPUTY_EXTRUDER_ID;
312 }
313
314 assert(false && __FUNCTION__);
315 return 0; // not found
316}
#define DEPUTY_EXTRUDER_ID
Definition DevDefs.h:102
#define VIRTUAL_TRAY_DEPUTY_ID
Definition DevDefs.h:90
#define VIRTUAL_TRAY_MAIN_ID
Definition DevDefs.h:89
#define MAIN_EXTRUDER_ID
Definition DevDefs.h:101

References amsList, DEPUTY_EXTRUDER_ID, MAIN_EXTRUDER_ID, VIRTUAL_TRAY_DEPUTY_ID, and VIRTUAL_TRAY_MAIN_ID.

Referenced by GetNozzleFlowStringByAmsId().

Here is the caller graph for this function:

◆ GetFilamentChangeSteps()

const std::vector< DevFilamentStep > & Slic3r::DevFilaSystem::GetFilamentChangeSteps ( ) const
inline
373{ return m_filament_change_steps; }
std::vector< DevFilamentStep > m_filament_change_steps
Definition DevFilaSystem.h:393

References m_filament_change_steps.

◆ GetNozzleFlowStringByAmsId()

std::string Slic3r::DevFilaSystem::GetNozzleFlowStringByAmsId ( const std::string & ams_id) const
319{
320 auto extruder_id = GetExtruderIdByAmsId(ams_id);
321 auto nozzle = GetOwner()->GetNozzleSystem()->GetExtNozzle(extruder_id);
322 return DevNozzle::GetNozzleFlowTypeString(nozzle.GetNozzleFlowType());
323}
int GetExtruderIdByAmsId(const std::string &ams_id) const
Definition DevFilaSystem.cpp:298
MachineObject * GetOwner() const
Definition DevFilaSystem.h:337
DevNozzle GetExtNozzle(int id) const
Definition DevNozzleSystem.cpp:240
DevNozzleSystem * GetNozzleSystem() const
Definition DeviceManager.hpp:382
static std::string GetNozzleFlowTypeString(NozzleFlowType type)
Definition DevNozzleSystem.cpp:81

References Slic3r::DevNozzleSystem::GetExtNozzle(), GetExtruderIdByAmsId(), Slic3r::DevNozzle::GetNozzleFlowTypeString(), Slic3r::MachineObject::GetNozzleSystem(), and GetOwner().

Here is the call graph for this function:

◆ GetOwner()

MachineObject * Slic3r::DevFilaSystem::GetOwner ( ) const
inline
337{ return m_owner; }

References m_owner.

Referenced by GetNozzleFlowStringByAmsId().

Here is the caller graph for this function:

◆ GetTrayIndexMap()

std::map< int, DevAmsSlotId > Slic3r::DevFilaSystem::GetTrayIndexMap ( )
326{
327 std::map<int, DevAmsSlotId> tray_id_map;
330
331 for (auto& [ams_id, ams_item] : GetAmsList()) {
332 for (auto &[slot_id, slot_item] : ams_item->GetTrays()) {
333 if (ams_item && slot_item) {
334 try {
335 int ams_id_int = stoi(ams_id);
336 int slot_id_int = stoi(slot_id);
337 int tray_index = -1;
338 if (ams_item->GetAmsType() == DevAms::N3S) {
339 tray_index = ams_id_int;
340 } else if(ams_item->GetAmsType() == DevAms::AMS_LITE && ams_item->IsAmsLiteMixed()) {
341 tray_index = 24 + slot_id_int;
342 } else {
343 tray_index = (ams_id_int * 4 + slot_id_int);
344 }
345 tray_id_map[tray_index] = {ams_id_int, slot_id_int};
346 } catch(...) {
347 BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << "invalid ams id: " << ams_id << " or slot id: " << slot_id;
348 }
349 }
350 }
351 }
352
353 return tray_id_map;
354}
static constexpr AmsType AMS_LITE
Definition DevFilaSystem.h:145
static constexpr AmsType N3S
Definition DevFilaSystem.h:147
std::map< std::string, DevAms *, NumericStrCompare > & GetAmsList()
Definition DevFilaSystem.h:344
std::pair< int, int > DevAmsSlotId
Definition DevDefs.h:112

References Slic3r::DevAms::AMS_LITE, GetAmsList(), Slic3r::DevAms::N3S, VIRTUAL_TRAY_DEPUTY_ID, and VIRTUAL_TRAY_MAIN_ID.

Here is the call graph for this function:

◆ HasAms()

bool Slic3r::DevFilaSystem::HasAms ( ) const
inline
339{ return !amsList.empty(); }

References amsList.

◆ IsAmsSettingUp()

bool Slic3r::DevFilaSystem::IsAmsSettingUp ( ) const
357{
358 int setting_up_stat = DevUtil::get_flag_bits(m_ams_cali_stat, 0, 8);
359 if (setting_up_stat == 0x01 || setting_up_stat == 0x02 || setting_up_stat == 0x03 || setting_up_stat == 0x04)
360 {
361 return true;
362 }
363
364 return false;
365}
int m_ams_cali_stat
Definition DevFilaSystem.h:390
static int get_flag_bits(std::string str, int start, int count=1)
Definition DevUtil.cpp:18

References Slic3r::DevUtil::get_flag_bits(), and m_ams_cali_stat.

Here is the call graph for this function:

◆ IsAutoRefillEnabled()

bool Slic3r::DevFilaSystem::IsAutoRefillEnabled ( ) const
inline
366{ return m_ams_system_setting.IsAutoRefillEnabled(); }

References m_ams_system_setting.

◆ IsBBL_Filament()

bool Slic3r::DevFilaSystem::IsBBL_Filament ( std::string tag_uid)
static
368{
369 if (tag_uid.empty())
370 {
371 return false;
372 }
373
374 for (int i = 0; i < tag_uid.length(); i++)
375 {
376 if (tag_uid[i] != '0') { return true; }
377 }
378
379 return false;
380}

Referenced by Slic3r::GUI::FilamentComboBox::load_tray_from_ams(), Slic3r::GUI::StatusPanel::on_ext_spool_edit(), Slic3r::GUI::StatusPanel::on_filament_edit(), Slic3r::GUI::StatusPanel::on_filament_extrusion_cali(), and Slic3r::GUI::AMSinfo::parse_ams_info().

Here is the caller graph for this function:

◆ IsDetectOnInsertEnabled()

std::optional< bool > Slic3r::DevFilaSystem::IsDetectOnInsertEnabled ( ) const
inline
363{ return m_ams_system_setting.IsDetectOnInsertEnabled(); };

References m_ams_system_setting.

◆ IsDetectOnPowerupEnabled()

bool Slic3r::DevFilaSystem::IsDetectOnPowerupEnabled ( ) const
inline
364{ return m_ams_system_setting.IsDetectOnPowerupEnabled(); }

References m_ams_system_setting.

◆ IsDetectRemainEnabled()

bool Slic3r::DevFilaSystem::IsDetectRemainEnabled ( ) const
inline
365{ return m_ams_system_setting.IsDetectRemainEnabled(); }

References m_ams_system_setting.

◆ DevFilaSystemParser

friend class DevFilaSystemParser
friend

References DevFilaSystemParser.

Referenced by DevFilaSystemParser.

Member Data Documentation

◆ amsList

◆ m_ams_cali_stat

int Slic3r::DevFilaSystem::m_ams_cali_stat = 0
private

◆ m_ams_firmware_switch

std::shared_ptr<DevAmsSystemFirmwareSwitch> Slic3r::DevFilaSystem::m_ams_firmware_switch = DevAmsSystemFirmwareSwitch::Create(this)
private

Referenced by GetAmsFirmwareSwitch().

◆ m_ams_system_setting

◆ m_filament_change_steps

std::vector<DevFilamentStep> Slic3r::DevFilaSystem::m_filament_change_steps
private

◆ m_owner

MachineObject* Slic3r::DevFilaSystem::m_owner
private

The documentation for this class was generated from the following files: