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

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

Collaboration diagram for Slic3r::DevFilaSwitch:

Public Types

enum class  CaliStatus : int { CALI_IDLE = 0 , CALI_STEPING = 1 }
enum class  CaliStep : int {
  CALI_IDLE = 0 , CALI_SWITCHING = 1 , CALI_SWITCH_CHECK = 2 , CALI_FILA_CHECK = 3 ,
  CALI_FILA_TO_AMS = 4 , CALI_FILA_TO_SWITCH = 5 , CALI_FILA_BACK = 9 , CALI_FINISHED = 14
}
enum  SwitchPos : int { POS_IN_B = 0 , POS_IN_A = 1 }

Public Member Functions

 DevFilaSwitch (MachineObject *owner)
virtual ~DevFilaSwitch ()=default
bool IsInstalled () const
bool IsReady () const
std::optional< bool > IsInA_HasFilament () const
std::optional< bool > IsInB_HasFilament () const
std::optional< DevAmsTray > GetInA_Slot () const
std::optional< DevAmsTray > GetInB_Slot () const
std::optional< DevAmsSlotId > GetInA_SlotId () const
std::optional< DevAmsSlotId > GetInB_SlotId () const
std::optional< DevExtder > GetOutA_Extruder () const
std::optional< DevExtder > GetOutB_Extruder () const
std::optional< int > GetOutA_ExtruderId () const
std::optional< int > GetOutB_ExtruderId () const
CaliStatus GetCaliStatus () const
void Reset ()
void ParseFilaSwitchInfo (const nlohmann::json &print_jj)

Private Attributes

MachineObject * m_owner
bool m_is_installed = false
std::optional< bool > m_in_a_has_filament
std::optional< bool > m_in_b_has_filament
std::optional< DevAmsSlotId > m_in_a_slot
std::optional< DevAmsSlotId > m_in_b_slot
std::optional< int > m_out_a_extruder_id
std::optional< int > m_out_b_extruder_id
CaliStatus m_cali_status = CaliStatus::CALI_IDLE

Detailed Description

Member Enumeration Documentation

◆ CaliStatus

enum class Slic3r::DevFilaSwitch::CaliStatus : int
strong
Enumerator
CALI_IDLE 
CALI_STEPING 
16 {
17 CALI_IDLE = 0,
18 CALI_STEPING = 1,
19 };

◆ CaliStep

enum class Slic3r::DevFilaSwitch::CaliStep : int
strong
Enumerator
CALI_IDLE 
CALI_SWITCHING 
CALI_SWITCH_CHECK 
CALI_FILA_CHECK 
CALI_FILA_TO_AMS 
CALI_FILA_TO_SWITCH 
CALI_FILA_BACK 
CALI_FINISHED 
22 {
23 CALI_IDLE = 0,
24 CALI_SWITCHING = 1,
25 CALI_SWITCH_CHECK = 2,
26 CALI_FILA_CHECK = 3,
27 CALI_FILA_TO_AMS = 4,
28 CALI_FILA_TO_SWITCH = 5,
29 CALI_FILA_BACK = 9,
30 CALI_FINISHED = 14,
31 };

◆ SwitchPos

Enumerator
POS_IN_B 
POS_IN_A 
34 {
35 POS_IN_B = 0,
36 POS_IN_A = 1,
37 };
@ POS_IN_B
Definition DevFilaSwitch.h:35
@ POS_IN_A
Definition DevFilaSwitch.h:36

Constructor & Destructor Documentation

◆ DevFilaSwitch()

Slic3r::DevFilaSwitch::DevFilaSwitch ( MachineObject * owner)
16{ m_owner = owner; }
MachineObject * m_owner
Definition DevFilaSwitch.h:66

References m_owner.

◆ ~DevFilaSwitch()

virtual Slic3r::DevFilaSwitch::~DevFilaSwitch ( )
virtualdefault

Member Function Documentation

◆ GetCaliStatus()

CaliStatus Slic3r::DevFilaSwitch::GetCaliStatus ( ) const
inline
60{ return m_cali_status; };
CaliStatus m_cali_status
Definition DevFilaSwitch.h:79

References m_cali_status.

◆ GetInA_Slot()

std::optional< DevAmsTray > Slic3r::DevFilaSwitch::GetInA_Slot ( ) const
49{
50 auto ams_id_opt = GetInA_SlotId();
51 if (m_owner && ams_id_opt.has_value()) { return m_owner->get_tray(std::to_string(ams_id_opt->first), std::to_string(ams_id_opt->first)); }
52
53 return std::nullopt;
54}
std::optional< DevAmsSlotId > GetInA_SlotId() const
Definition DevFilaSwitch.h:52

References GetInA_SlotId(), and m_owner.

Here is the call graph for this function:

◆ GetInA_SlotId()

std::optional< DevAmsSlotId > Slic3r::DevFilaSwitch::GetInA_SlotId ( ) const
inline
52{ return m_in_a_slot; };
std::optional< DevAmsSlotId > m_in_a_slot
Definition DevFilaSwitch.h:73

References m_in_a_slot.

Referenced by GetInA_Slot().

Here is the caller graph for this function:

◆ GetInB_Slot()

std::optional< DevAmsTray > Slic3r::DevFilaSwitch::GetInB_Slot ( ) const
57{
58 auto ams_id_opt = GetInB_SlotId();
59 if (m_owner && ams_id_opt.has_value()) { return m_owner->get_tray(std::to_string(ams_id_opt->first), std::to_string(ams_id_opt->first)); }
60
61 return std::nullopt;
62}
std::optional< DevAmsSlotId > GetInB_SlotId() const
Definition DevFilaSwitch.h:53

References GetInB_SlotId(), and m_owner.

Here is the call graph for this function:

◆ GetInB_SlotId()

std::optional< DevAmsSlotId > Slic3r::DevFilaSwitch::GetInB_SlotId ( ) const
inline
53{ return m_in_b_slot; };
std::optional< DevAmsSlotId > m_in_b_slot
Definition DevFilaSwitch.h:74

References m_in_b_slot.

Referenced by GetInB_Slot().

Here is the caller graph for this function:

◆ GetOutA_Extruder()

std::optional< DevExtder > Slic3r::DevFilaSwitch::GetOutA_Extruder ( ) const
65{
66 auto ext_id_opt = GetOutA_ExtruderId();
67 if (m_owner && ext_id_opt.has_value()) { return m_owner->GetExtderSystem()->GetExtderById(ext_id_opt.value()); }
68
69 return std::nullopt;
70}
std::optional< int > GetOutA_ExtruderId() const
Definition DevFilaSwitch.h:57

References GetOutA_ExtruderId(), and m_owner.

Here is the call graph for this function:

◆ GetOutA_ExtruderId()

std::optional< int > Slic3r::DevFilaSwitch::GetOutA_ExtruderId ( ) const
inline
57{ return m_out_a_extruder_id; };
std::optional< int > m_out_a_extruder_id
Definition DevFilaSwitch.h:76

References m_out_a_extruder_id.

Referenced by GetOutA_Extruder().

Here is the caller graph for this function:

◆ GetOutB_Extruder()

std::optional< DevExtder > Slic3r::DevFilaSwitch::GetOutB_Extruder ( ) const
73{
74 auto ext_id_opt = GetOutB_ExtruderId();
75 if (m_owner && ext_id_opt.has_value()) { return m_owner->GetExtderSystem()->GetExtderById(ext_id_opt.value()); }
76
77 return std::nullopt;
78}
std::optional< int > GetOutB_ExtruderId() const
Definition DevFilaSwitch.h:58

References GetOutB_ExtruderId(), and m_owner.

Here is the call graph for this function:

◆ GetOutB_ExtruderId()

std::optional< int > Slic3r::DevFilaSwitch::GetOutB_ExtruderId ( ) const
inline
58{ return m_out_b_extruder_id; };
std::optional< int > m_out_b_extruder_id
Definition DevFilaSwitch.h:77

References m_out_b_extruder_id.

Referenced by GetOutB_Extruder().

Here is the caller graph for this function:

◆ IsInA_HasFilament()

std::optional< bool > Slic3r::DevFilaSwitch::IsInA_HasFilament ( ) const
inline
47{ return m_in_a_has_filament; };
std::optional< bool > m_in_a_has_filament
Definition DevFilaSwitch.h:70

References m_in_a_has_filament.

◆ IsInB_HasFilament()

std::optional< bool > Slic3r::DevFilaSwitch::IsInB_HasFilament ( ) const
inline
48{ return m_in_b_has_filament; };
std::optional< bool > m_in_b_has_filament
Definition DevFilaSwitch.h:71

References m_in_b_has_filament.

◆ IsInstalled()

◆ IsReady()

bool Slic3r::DevFilaSwitch::IsReady ( ) const
31{
32 if (!m_is_installed) {
33 BOOST_LOG_TRIVIAL(debug) << "[FilaSwitch] IsReady: not installed";
34 return false;
35 }
36
37 const auto& ams_list = m_owner->GetFilaSystem()->GetAmsList();
38 for (const auto& ams_item : ams_list) {
39 if (ams_item.second->GetBindedExtruderSet().size() == 0) { return false; }
40 if (!ams_item.second->GetSwitcherPos().has_value()) {
41 return false;
42 }
43 }
44
45 return true;
46}

References m_is_installed, and m_owner.

Referenced by Slic3r::GUI::SelectMachineDialog::CheckErrorDynamicSwitchNozzle(), Slic3r::GUI::SyncAmsInfoDialog::has_selector(), Slic3r::GUI::AMSControl::isFilaSwitchReady(), and Slic3r::GUI::AmsReplaceMaterialDialog::update_machine_obj().

Here is the caller graph for this function:

◆ ParseFilaSwitchInfo()

void Slic3r::DevFilaSwitch::ParseFilaSwitchInfo ( const nlohmann::json & print_jj)
81{
82 if (print_jj.contains("aux")) {
83 const auto &info_bits = DevJsonValParser::GetVal<std::string>(print_jj, "aux");
84 if (m_is_installed != (DevUtil::get_flag_bits(info_bits, 29, 1) == 1)) {
85 m_is_installed = (DevUtil::get_flag_bits(info_bits, 29, 1) == 1);
86 if (!m_is_installed) { Reset(); }
87 };
88 }
89
90 if (print_jj.contains("device") && print_jj["device"].contains("fila_switch")) {
91 const auto &fila_switch_jj = print_jj["device"]["fila_switch"];
92 if (fila_switch_jj.contains("in")) {
93 const auto &in_vec = DevJsonValParser::GetVal<std::vector<int>>(fila_switch_jj, "in");
94 if (in_vec.size() == 2) {
95 if (in_vec[0] != -1) {
96 DevAmsSlotId slot_id;
97 slot_id.first = DevUtil::get_flag_bits(in_vec[0], 8, 8);
98 slot_id.second = DevUtil::get_flag_bits(in_vec[0], 0, 8);
99 m_in_b_slot = slot_id;
100 } else {
101 m_in_b_slot = std::nullopt;
102 };
103
104 if (in_vec[1] != -1) {
105 DevAmsSlotId slot_id;
106 slot_id.first = DevUtil::get_flag_bits(in_vec[1], 8, 8);
107 slot_id.second = DevUtil::get_flag_bits(in_vec[1], 0, 8);
108 m_in_a_slot = slot_id;
109 } else {
110 m_in_a_slot.reset();
111 };
112 }
113 }
114
115 if (fila_switch_jj.contains("out")) {
116 const auto &out_vec = DevJsonValParser::GetVal<std::vector<int>>(fila_switch_jj, "out");
117 if (out_vec.size() == 2) {
118 if (out_vec[0] != 0xE) {
119 m_out_b_extruder_id = out_vec[0];
120 } else {
121 m_out_b_extruder_id.reset();
122 }
123
124 if (out_vec[1] != 0xE) {
125 m_out_a_extruder_id = out_vec[1];
126 } else {
127 m_out_a_extruder_id.reset();
128 }
129 }
130 }
131
132 if (fila_switch_jj.contains("stat")) { m_cali_status = DevJsonValParser::GetVal<CaliStatus>(fila_switch_jj, "stat"); }
133
134 if (fila_switch_jj.contains("info")) {
135 const auto &info_bits = DevJsonValParser::GetVal<int>(fila_switch_jj, "info");
138 }
139 }
140}
void Reset()
Definition DevFilaSwitch.cpp:18
static T GetVal(const nlohmann::json &j, const std::string &key, const T &default_val=T())
Definition DevUtil.h:60
static int get_flag_bits(std::string str, int start, int count=1)
Definition DevUtil.cpp:18
std::pair< int, int > DevAmsSlotId
Definition DevDefs.h:112

References Slic3r::DevUtil::get_flag_bits(), Slic3r::DevJsonValParser::GetVal(), m_cali_status, m_in_a_has_filament, m_in_a_slot, m_in_b_has_filament, m_in_b_slot, m_is_installed, m_out_a_extruder_id, m_out_b_extruder_id, and Reset().

Here is the call graph for this function:

◆ Reset()

void Slic3r::DevFilaSwitch::Reset ( )
19{
20 m_is_installed = false;
21 m_in_a_has_filament.reset();
22 m_in_b_has_filament.reset();
23 m_in_a_slot.reset();
24 m_in_b_slot.reset();
25 m_out_a_extruder_id.reset();
26 m_out_b_extruder_id.reset();
28}
@ CALI_IDLE
Definition DevFilaSwitch.h:17

References CALI_IDLE, m_cali_status, m_in_a_has_filament, m_in_a_slot, m_in_b_has_filament, m_in_b_slot, m_is_installed, m_out_a_extruder_id, and m_out_b_extruder_id.

Referenced by ParseFilaSwitchInfo().

Here is the caller graph for this function:

Member Data Documentation

◆ m_cali_status

CaliStatus Slic3r::DevFilaSwitch::m_cali_status = CaliStatus::CALI_IDLE
private

◆ m_in_a_has_filament

std::optional<bool> Slic3r::DevFilaSwitch::m_in_a_has_filament
private

◆ m_in_a_slot

std::optional<DevAmsSlotId> Slic3r::DevFilaSwitch::m_in_a_slot
private

◆ m_in_b_has_filament

std::optional<bool> Slic3r::DevFilaSwitch::m_in_b_has_filament
private

◆ m_in_b_slot

std::optional<DevAmsSlotId> Slic3r::DevFilaSwitch::m_in_b_slot
private

◆ m_is_installed

bool Slic3r::DevFilaSwitch::m_is_installed = false
private

◆ m_out_a_extruder_id

std::optional<int> Slic3r::DevFilaSwitch::m_out_a_extruder_id
private

◆ m_out_b_extruder_id

std::optional<int> Slic3r::DevFilaSwitch::m_out_b_extruder_id
private

◆ m_owner

MachineObject* Slic3r::DevFilaSwitch::m_owner
private

The documentation for this class was generated from the following files:
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/DeviceCore/DevFilaSwitch.h
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/DeviceCore/DevFilaSwitch.cpp