diff --git a/src/slic3r/GUI/AMSSetting.cpp b/src/slic3r/GUI/AMSSetting.cpp index 15d8deefd7..28f7624e60 100644 --- a/src/slic3r/GUI/AMSSetting.cpp +++ b/src/slic3r/GUI/AMSSetting.cpp @@ -188,10 +188,6 @@ void AMSSetting::create() m_sizer_main->Fit(this); this->Centre(wxBOTH); - - // set mode - update_insert_material_read_mode(true); - update_starting_read_mode(false); } void AMSSetting::update_insert_material_read_mode(bool selected) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 5f19d39c06..18d23148f8 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -328,7 +328,11 @@ MachineObject::MachineObject(NetworkAgent* agent, std::string name, std::string ams_exist_bits = 0; tray_exist_bits = 0; tray_is_bbl_bits = 0; + ams_rfid_status = 0; is_ams_need_update = false; + ams_insert_flag = false; + ams_power_on_flag = false; + ams_support_use_ams = false; /* signals */ wifi_signal = ""; @@ -2240,6 +2244,10 @@ int MachineObject::parse_json(std::string payload) if (jj["ams"].contains("tray_read_done_bits")) { tray_read_done_bits = stol(jj["ams"]["tray_read_done_bits"].get(), nullptr, 16); } + if (jj["ams"].contains("tray_reading_bits")) { + tray_reading_bits = stol(jj["ams"]["tray_reading_bits"].get(), nullptr, 16); + ams_support_use_ams = true; + } if (jj["ams"].contains("tray_is_bbl_bits")) { tray_is_bbl_bits = stol(jj["ams"]["tray_is_bbl_bits"].get(), nullptr, 16); } @@ -2253,6 +2261,15 @@ int MachineObject::parse_json(std::string payload) if (jj["ams"].contains("tray_tar")) { m_tray_tar = jj["ams"]["tray_tar"].get(); } + if (jj["ams"].contains("insert_flag")) { + ams_insert_flag = jj["ams"]["insert_flag"].get(); + } + if (jj["ams"].contains("ams_rfid_status")) + ams_rfid_status = jj["ams"]["ams_rfid_status"].get(); + + if (jj["ams"].contains("power_on_flag")) { + ams_power_on_flag = jj["ams"]["power_on_flag"].get(); + } if (ams_exist_bits != last_ams_exist_bits || last_tray_exist_bits != last_tray_exist_bits diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index a78f7a1895..8b769791c2 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -111,6 +111,16 @@ enum AmsStatusMain { AMS_STATUS_MAIN_UNKNOWN = 0xFF, }; +enum AmsRfidStatus { + AMS_RFID_IDLE = 0, + AMS_RFID_READING = 1, + AMS_RFID_GCODE_TRANS = 2, + AMS_RFID_GCODE_RUNNING = 3, + AMS_RFID_ASSITANT = 4, + AMS_RFID_SWITCH_FILAMENT= 5, + AMS_RFID_HAS_FILAMENT = 6 +}; + class AmsTray { public: AmsTray(std::string tray_id) { @@ -349,6 +359,11 @@ public: long tray_exist_bits = 0; long tray_is_bbl_bits = 0; long tray_read_done_bits = 0; + long tray_reading_bits = 0; + int ams_rfid_status = 0; + bool ams_insert_flag { false }; + bool ams_power_on_flag { false }; + bool ams_support_use_ams { false }; AmsStatusMain ams_status_main; int ams_status_sub; int ams_version = 0; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 2147574215..74fe8d383e 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1091,7 +1091,9 @@ wxWindow *SelectMachineDialog::create_ams_checkbox(wxString title, wxWindow *par checkbox->SetToolTip(tooltip); text->SetToolTip(tooltip); - text->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &) { ams_check->SetValue(ams_check->GetValue() ? false : true); }); + text->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &) { + ams_check->SetValue(ams_check->GetValue() ? false : true); + }); return checkbox; } @@ -1454,6 +1456,10 @@ void SelectMachineDialog::show_status(PrintDialogStatus status, std::vector 0) @@ -1895,6 +1901,15 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event) update_show_status(); } +void SelectMachineDialog::update_ams_check(MachineObject* obj) +{ + if (obj && obj->ams_support_use_ams) { + ams_check->Show(); + } else { + ams_check->Hide(); + } +} + void SelectMachineDialog::update_show_status() { // refreshing return @@ -1948,6 +1963,7 @@ void SelectMachineDialog::update_show_status() } reset_timeout(); + update_ams_check(obj_); // reading done if (obj_->is_in_upgrading()) { @@ -1977,6 +1993,14 @@ void SelectMachineDialog::update_show_status() return; } + if (obj_->ams_support_use_ams) { + if (!ams_check->GetValue()) { + m_ams_mapping_result.clear(); + show_status(PrintDialogStatus::PrintStatusDisableAms); + return; + } + } + // do ams mapping if no ams result if (m_ams_mapping_result.empty()) { do_ams_mapping(obj_); diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 7d4a649c2f..154e442fb6 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -239,6 +239,7 @@ enum PrintDialogStatus { PrintStatusNeedUpgradingAms, PrintStatusInSystemPrinting, PrintStatusInPrinting, + PrintStatusDisableAms, PrintStatusAmsMappingSuccess, PrintStatusAmsMappingInvalid, PrintStatusAmsMappingU0Invalid, @@ -373,6 +374,7 @@ protected: void update_user_printer(); void reset_ams_material(); void update_show_status(); + void update_ams_check(MachineObject* obj); wxTimer *m_refresh_timer { nullptr }; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index cb09b321b0..90cec3b30b 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1532,7 +1532,13 @@ void StatusPanel::update_misc_ctrl(MachineObject *obj) void StatusPanel::update_ams(MachineObject *obj) { // update obj in sub dlg - if (m_ams_setting_dlg) { m_ams_setting_dlg->obj = obj; } + if (m_ams_setting_dlg) { + m_ams_setting_dlg->obj = obj; + if (obj && m_ams_setting_dlg->IsShown()) { + m_ams_setting_dlg->update_insert_material_read_mode(obj->ams_insert_flag); + m_ams_setting_dlg->update_starting_read_mode(obj->ams_power_on_flag); + } + } if (m_filament_setting_dlg) { m_filament_setting_dlg->obj = obj; } if (!obj || !obj->is_connected()) { @@ -1540,6 +1546,7 @@ void StatusPanel::update_ams(MachineObject *obj) last_ams_exist_bits = -1; last_tray_is_bbl_bits = -1; last_read_done_bits = -1; + last_reading_bits = -1; last_ams_version = -1; m_ams_control->EnterNoneAMSMode(); show_ams_group(false); @@ -1583,6 +1590,7 @@ void StatusPanel::update_ams(MachineObject *obj) last_ams_exist_bits = obj->ams_exist_bits; last_tray_is_bbl_bits = obj->tray_is_bbl_bits; last_read_done_bits = obj->tray_read_done_bits; + last_reading_bits = obj->tray_reading_bits; last_ams_version = obj->ams_version; } @@ -1683,10 +1691,20 @@ void StatusPanel::update_ams(MachineObject *obj) for (auto tray_it = ams_it->second->trayList.begin(); tray_it != ams_it->second->trayList.end(); tray_it++) { std::string tray_id = tray_it->first; int tray_id_int = atoi(tray_id.c_str()); - if ((obj->tray_read_done_bits & (1 << (ams_id_int * 4 + tray_id_int))) == 0) { - m_ams_control->PlayRridLoading(ams_id, tray_id); + if (obj->ams_insert_flag < 0) { + // old protocol + if ((obj->tray_read_done_bits & (1 << (ams_id_int * 4 + tray_id_int))) == 0) { + m_ams_control->PlayRridLoading(ams_id, tray_id); + } else { + m_ams_control->StopRridLoading(ams_id, tray_id); + } } else { - m_ams_control->StopRridLoading(ams_id, tray_id); + // new protocol + if ((obj->tray_reading_bits & (1 << (ams_id_int * 4 + tray_id_int))) != 0) { + m_ams_control->PlayRridLoading(ams_id, tray_id); + } else { + m_ams_control->StopRridLoading(ams_id, tray_id); + } } } } catch (...) {} @@ -2028,8 +2046,8 @@ void StatusPanel::on_ams_setting_click(SimpleEvent &event) { if (!m_ams_setting_dlg) m_ams_setting_dlg = new AMSSetting((wxWindow *) this, wxID_ANY); if (obj) { - m_ams_setting_dlg->update_insert_material_read_mode(true); - m_ams_setting_dlg->update_starting_read_mode(true); + m_ams_setting_dlg->update_insert_material_read_mode(obj->ams_insert_flag); + m_ams_setting_dlg->update_starting_read_mode(obj->ams_power_on_flag); std::string ams_id = m_ams_control->GetCurentAms(); try { int ams_id_int = atoi(ams_id.c_str()); diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 23f53915ef..39d1efea5f 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -357,6 +357,7 @@ public: long last_ams_exist_bits { -1 }; long last_tray_is_bbl_bits{ -1 }; long last_read_done_bits{ -1 }; + long last_reading_bits { -1 }; long last_ams_version { -1 }; std::vector last_stage_list_info;