From b731ac8db8f7f14f43a056f07b75720e76c26ffe Mon Sep 17 00:00:00 2001 From: Stone Li Date: Fri, 10 Feb 2023 12:18:16 +0800 Subject: [PATCH] ENH: support load and edit with virtual tray Change-Id: I36cd8d9f6da719526c38b7479625ed0fa868f63b Signed-off-by: Stone Li --- resources/printers/vt_load.gcode | 0 src/slic3r/GUI/AMSMaterialsSetting.cpp | 17 ++- src/slic3r/GUI/DeviceManager.cpp | 166 ++++++++++++++++++++++--- src/slic3r/GUI/DeviceManager.hpp | 7 +- src/slic3r/GUI/StatusPanel.cpp | 42 +++++-- src/slic3r/GUI/StatusPanel.hpp | 3 +- src/slic3r/GUI/Widgets/AMSControl.cpp | 31 +++-- src/slic3r/GUI/Widgets/AMSControl.hpp | 4 +- 8 files changed, 226 insertions(+), 44 deletions(-) create mode 100644 resources/printers/vt_load.gcode diff --git a/resources/printers/vt_load.gcode b/resources/printers/vt_load.gcode new file mode 100644 index 000000000..e69de29bb diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 672ef6c08..ed1174b29 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -376,7 +376,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) wxString k_text = m_input_k_val->GetTextCtrl()->GetValue(); wxString n_text = m_input_n_val->GetTextCtrl()->GetValue(); - if (is_virtual_tray()) { + if (is_virtual_tray() && obj && !obj->is_support_filament_edit_virtual_tray) { if (!ExtrusionCalibration::check_k_validation(k_text)) { wxString k_tips = _L("Please input a valid value (K in 0~0.5)"); wxString kn_tips = _L("Please input a valid value (K in 0~0.5, N in 0.6~2.0)"); @@ -478,8 +478,12 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) } // set filament - if (!is_virtual_tray()) { - obj->command_ams_filament_settings(ams_id, tray_id, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); + if (obj->is_support_filament_edit_virtual_tray || !is_virtual_tray()) { + if (is_virtual_tray()) { + obj->command_ams_filament_settings(255, VIRTUAL_TRAY_ID, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); + } else { + obj->command_ams_filament_settings(ams_id, tray_id, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); + } } // set k / n value @@ -548,7 +552,10 @@ void AMSMaterialsSetting::update_widgets() { // virtual tray if (is_virtual_tray()) { - m_panel_normal->Hide(); + if (obj && obj->is_support_filament_edit_virtual_tray) + m_panel_normal->Show(); + else + m_panel_normal->Hide(); m_panel_kn->Show(); } else if (obj && obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { m_panel_normal->Show(); @@ -583,7 +590,7 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi m_input_k_val->GetTextCtrl()->SetValue(k); m_input_n_val->GetTextCtrl()->SetValue(n); - if (is_virtual_tray()) { + if (is_virtual_tray() && obj && !obj->is_support_filament_edit_virtual_tray) { m_button_confirm->Show(); update(); Layout(); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 8dde5e932..9392c0f82 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -136,6 +136,32 @@ wxColour AmsTray::get_color() return AmsTray::decode_color(color); } +void AmsTray::reset() +{ + tag_uid = ""; + setting_id = ""; + filament_setting_id = ""; + type = ""; + sub_brands = ""; + color = ""; + weight = ""; + diameter = ""; + temp = ""; + time = ""; + bed_temp_type = ""; + bed_temp = ""; + nozzle_temp_max = ""; + nozzle_temp_min = ""; + xcam_info = ""; + uuid = ""; + k = 0.0f; + n = 0.0f; + is_bbl = false; + hold_count = 0; + remain = 0; +} + + bool AmsTray::is_tray_info_ready() { if (color.empty()) @@ -523,6 +549,10 @@ Ams *MachineObject::get_curr_Ams() AmsTray *MachineObject::get_curr_tray() { + if (m_tray_now.compare(std::to_string(VIRTUAL_TRAY_ID)) == 0) { + return &vt_tray; + } + Ams* curr_ams = get_curr_Ams(); if (!curr_ams) return nullptr; @@ -1532,6 +1562,8 @@ int MachineObject::command_ams_switch(int tray_index, int old_temp, int new_temp std::string gcode = ""; if (tray_index == 255) { gcode = DeviceManager::load_gcode(printer_type, "ams_unload.gcode"); + } else if (tray_index == VIRTUAL_TRAY_ID) { + gcode = DeviceManager::load_gcode(printer_type, "vt_load.gcode"); } else { gcode = DeviceManager::load_gcode(printer_type, "ams_load.gcode"); boost::replace_all(gcode, "[next_extruder]", std::to_string(tray_index)); @@ -2044,6 +2076,8 @@ void MachineObject::reset() m_new_ver_list_exist = false; extruder_axis_status = LOAD; + vt_tray.reset(); + subtask_ = nullptr; } @@ -3140,6 +3174,89 @@ int MachineObject::parse_json(std::string payload) vt_tray.n = jj["vt_tray"]["n"].get(); } ams_support_virtual_tray = true; + + if (vt_tray.hold_count > 0) { + vt_tray.hold_count--; + } else { + if (jj["vt_tray"].contains("tag_uid")) + vt_tray.tag_uid = jj["vt_tray"]["tag_uid"].get(); + else + vt_tray.tag_uid = "0"; + if (jj["vt_tray"].contains("tray_info_idx") && jj["vt_tray"].contains("tray_type")) { + vt_tray.setting_id = jj["vt_tray"]["tray_info_idx"].get(); + std::string type = jj["vt_tray"]["tray_type"].get(); + if (vt_tray.setting_id == "GFS00") { + vt_tray.type = "PLA-S"; + } + else if (vt_tray.setting_id == "GFS01") { + vt_tray.type = "PA-S"; + } + else { + vt_tray.type = type; + } + } + else { + vt_tray.setting_id = ""; + vt_tray.type = ""; + } + if (jj["vt_tray"].contains("tray_sub_brands")) + vt_tray.sub_brands = jj["vt_tray"]["tray_sub_brands"].get(); + else + vt_tray.sub_brands = ""; + if (jj["vt_tray"].contains("tray_weight")) + vt_tray.weight = jj["vt_tray"]["tray_weight"].get(); + else + vt_tray.weight = ""; + if (jj["vt_tray"].contains("tray_diameter")) + vt_tray.diameter = jj["vt_tray"]["tray_diameter"].get(); + else + vt_tray.diameter = ""; + if (jj["vt_tray"].contains("tray_temp")) + vt_tray.temp = jj["vt_tray"]["tray_temp"].get(); + else + vt_tray.temp = ""; + if (jj["vt_tray"].contains("tray_time")) + vt_tray.time = jj["vt_tray"]["tray_time"].get(); + else + vt_tray.time = ""; + if (jj["vt_tray"].contains("bed_temp_type")) + vt_tray.bed_temp_type = jj["vt_tray"]["bed_temp_type"].get(); + else + vt_tray.bed_temp_type = ""; + if (jj["vt_tray"].contains("bed_temp")) + vt_tray.bed_temp = jj["vt_tray"]["bed_temp"].get(); + else + vt_tray.bed_temp = ""; + if (jj["vt_tray"].contains("nozzle_temp_max")) + vt_tray.nozzle_temp_max = jj["vt_tray"]["nozzle_temp_max"].get(); + else + vt_tray.nozzle_temp_max = ""; + if (jj["vt_tray"].contains("nozzle_temp_min")) + vt_tray.nozzle_temp_min = jj["vt_tray"]["nozzle_temp_min"].get(); + else + vt_tray.nozzle_temp_min = ""; + if (jj["vt_tray"].contains("xcam_info")) + vt_tray.xcam_info = jj["vt_tray"]["xcam_info"].get(); + else + vt_tray.xcam_info = ""; + if (jj["vt_tray"].contains("tray_uuid")) + vt_tray.uuid = jj["vt_tray"]["tray_uuid"].get(); + else + vt_tray.uuid = "0"; + if (jj["vt_tray"].contains("tray_color")) { + auto color = jj["vt_tray"]["tray_color"].get(); + vt_tray.update_color_from_str(color); + } + else { + vt_tray.color = ""; + } + if (jj["vt_tray"].contains("remain")) { + vt_tray.remain = jj["vt_tray"]["remain"].get(); + } + else { + vt_tray.remain = -1; + } + } } else { ams_support_virtual_tray = false; } @@ -3169,24 +3286,39 @@ int MachineObject::parse_json(std::string payload) if (jj["ams_id"].is_number()) { int ams_id = jj["ams_id"].get(); - auto ams_it = amsList.find(std::to_string(ams_id)); - if (ams_it != amsList.end()) { - int tray_id = jj["tray_id"].get(); - auto tray_it = ams_it->second->trayList.find(std::to_string(tray_id)); - if (tray_it != ams_it->second->trayList.end()) { - BOOST_LOG_TRIVIAL(trace) << "ams_filament_setting, parse tray info"; - tray_it->second->nozzle_temp_max = std::to_string(jj["nozzle_temp_max"].get()); - tray_it->second->nozzle_temp_min = std::to_string(jj["nozzle_temp_min"].get()); - tray_it->second->type = jj["tray_type"].get(); - tray_it->second->color = jj["tray_color"].get(); - tray_it->second->setting_id = jj["tray_info_idx"].get(); - // delay update - tray_it->second->set_hold_count(); - } else { - BOOST_LOG_TRIVIAL(warning) << "ams_filament_setting, can not find in trayList, tray_id=" << tray_id; - } + int tray_id = 0; + if (jj.contains("tray_id")) { + tray_id = jj["tray_id"].get(); + } + if (ams_id == 255 && tray_id == VIRTUAL_TRAY_ID) { + BOOST_LOG_TRIVIAL(trace) << "ams_filament_setting, parse tray info"; + vt_tray.nozzle_temp_max = std::to_string(jj["nozzle_temp_max"].get()); + vt_tray.nozzle_temp_min = std::to_string(jj["nozzle_temp_min"].get()); + vt_tray.type = jj["tray_type"].get(); + vt_tray.color = jj["tray_color"].get(); + vt_tray.setting_id = jj["tray_info_idx"].get(); + // delay update + vt_tray.set_hold_count(); } else { - BOOST_LOG_TRIVIAL(warning) << "ams_filament_setting, can not find in amsList, ams_id=" << ams_id; + auto ams_it = amsList.find(std::to_string(ams_id)); + if (ams_it != amsList.end()) { + tray_id = jj["tray_id"].get(); + auto tray_it = ams_it->second->trayList.find(std::to_string(tray_id)); + if (tray_it != ams_it->second->trayList.end()) { + BOOST_LOG_TRIVIAL(trace) << "ams_filament_setting, parse tray info"; + tray_it->second->nozzle_temp_max = std::to_string(jj["nozzle_temp_max"].get()); + tray_it->second->nozzle_temp_min = std::to_string(jj["nozzle_temp_min"].get()); + tray_it->second->type = jj["tray_type"].get(); + tray_it->second->color = jj["tray_color"].get(); + tray_it->second->setting_id = jj["tray_info_idx"].get(); + // delay update + tray_it->second->set_hold_count(); + } else { + BOOST_LOG_TRIVIAL(warning) << "ams_filament_setting, can not find in trayList, tray_id=" << tray_id; + } + } else { + BOOST_LOG_TRIVIAL(warning) << "ams_filament_setting, can not find in amsList, ams_id=" << ams_id; + } } } } else if (jj["command"].get() == "xcam_control_set") { diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 15021a160..a2e4ca8e0 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -178,6 +178,8 @@ public: if (digit1 == -1 || digit2 == -1) break; ret[j] = float(digit1 * 16 + digit2); } + } else { + return wxColour(255, 255, 255); } return wxColour(ret[0], ret[1], ret[2]); } @@ -216,6 +218,8 @@ public: void update_color_from_str(std::string color); wxColour get_color(); + void reset(); + bool is_tray_info_ready(); bool is_unset_third_filament(); std::string get_display_filament_type(); @@ -464,7 +468,7 @@ public: int ams_version = 0; std::string m_ams_id; // local ams : "0" ~ "3" std::string m_tray_id; // local tray id : "0" ~ "3" - std::string m_tray_now; // tray_now : "0" ~ "15" or "255" + std::string m_tray_now; // tray_now : "0" ~ "15" or "254", "255" std::string m_tray_tar; // tray_tar : "0" ~ "15" or "255" int extrusion_cali_hold_count = 0; @@ -634,6 +638,7 @@ public: bool is_support_1080dpi {false}; bool is_support_ai_monitoring {false}; bool is_support_ams_humidity {true}; + bool is_support_filament_edit_virtual_tray {true}; /* sdcard */ MachineObject::SdcardState sdcard_state { NO_SDCARD }; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index f4c976b84..e2ff3b4f5 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1096,12 +1096,11 @@ wxBoxSizer *StatusBasePanel::create_ams_group(wxWindow *parent) return sizer; } -void StatusBasePanel::show_ams_group(bool show, bool support_virtual_tray) +void StatusBasePanel::show_ams_group(bool show, bool support_virtual_tray, bool support_vt_load) { m_ams_control->Show(true); m_ams_control_box->Show(true); - m_ams_control->show_noams_mode(show, support_virtual_tray); - + m_ams_control->show_noams_mode(show, support_virtual_tray, support_vt_load); if (m_show_ams_group != show) { Fit(); } @@ -1908,7 +1907,7 @@ void StatusPanel::update_ams(MachineObject *obj) if (is_support_extrusion_cali) { m_ams_control->update_vams_kn_value(obj->vt_tray); } - show_ams_group(false, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)); + show_ams_group(false, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI), obj->is_support_filament_edit_virtual_tray); return; } @@ -1917,7 +1916,7 @@ void StatusPanel::update_ams(MachineObject *obj) m_ams_control->update_vams_kn_value(obj->vt_tray); } - show_ams_group(true, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)); + show_ams_group(true, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI), obj->is_support_filament_edit_virtual_tray); if (m_filament_setting_dlg) m_filament_setting_dlg->update(); std::vector ams_info; @@ -1953,7 +1952,10 @@ void StatusPanel::update_ams(MachineObject *obj) std::string curr_ams_id = m_ams_control->GetCurentAms(); std::string curr_can_id = m_ams_control->GetCurrentCan(curr_ams_id); - if (m_ams_control->GetCurentAms() != obj->m_ams_id) { + if (m_ams_control->GetCurentAms() == std::to_string(VIRTUAL_TRAY_ID)) { + m_ams_control->SetAmsStep(curr_ams_id, curr_can_id, AMSPassRoadType::AMS_ROAD_TYPE_NONE, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + } + else if (m_ams_control->GetCurentAms() != obj->m_ams_id) { m_ams_control->SetAmsStep(curr_ams_id, curr_can_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } else { if (obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE) { @@ -2498,6 +2500,33 @@ void StatusPanel::on_ams_load_curr() if (obj) { std::string curr_ams_id = m_ams_control->GetCurentAms(); std::string curr_can_id = m_ams_control->GetCurrentCan(curr_ams_id); + + //virtual tray + if (curr_ams_id.compare(std::to_string(VIRTUAL_TRAY_ID)) == 0) { + /*if (con_load_dlg == nullptr) { + con_load_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Confirm")); + con_load_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this](wxCommandEvent& e) {*/ + int old_temp = -1; + int new_temp = -1; + AmsTray* curr_tray = obj->get_curr_tray(); + try { + if (!curr_tray->nozzle_temp_max.empty() && !curr_tray->nozzle_temp_min.empty()) + old_temp = (atoi(curr_tray->nozzle_temp_min.c_str()) + atoi(curr_tray->nozzle_temp_max.c_str())) / 2; + if (!obj->vt_tray.nozzle_temp_max.empty() && !obj->vt_tray.nozzle_temp_min.empty()) + new_temp = (atoi(obj->vt_tray.nozzle_temp_min.c_str()) + atoi(obj->vt_tray.nozzle_temp_max.c_str())) / 2; + } + catch (...) { + ; + } + obj->command_ams_switch(VIRTUAL_TRAY_ID, old_temp, new_temp); + /*} + ); + } + con_load_dlg->update_text(_L("Please confirm the filament is ready?")); + con_load_dlg->on_show();*/ + return; + } + std::map::iterator it = obj->amsList.find(curr_ams_id); if (it == obj->amsList.end()) { BOOST_LOG_TRIVIAL(trace) << "ams: find " << curr_ams_id << " failed"; @@ -2508,7 +2537,6 @@ void StatusPanel::on_ams_load_curr() BOOST_LOG_TRIVIAL(trace) << "ams: find " << curr_can_id << " failed"; return; } - AmsTray* curr_tray = obj->get_curr_tray(); AmsTray* targ_tray = obj->get_ams_tray(curr_ams_id, curr_can_id); if (curr_tray && targ_tray) { diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 21b7c214e..ce7c2c1c3 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -253,7 +253,7 @@ public: wxBoxSizer *create_ams_group(wxWindow *parent); wxBoxSizer *create_settings_group(wxWindow *parent); - void show_ams_group(bool show = true, bool support_virtual_tray = true); + void show_ams_group(bool show = true, bool support_virtual_tray = true, bool support_vt_load = true); }; @@ -274,6 +274,7 @@ protected: SecondaryCheckDialog* m_print_error_dlg = nullptr; SecondaryCheckDialog* abort_dlg = nullptr; + SecondaryCheckDialog* con_load_dlg = nullptr; SecondaryCheckDialog* ctrl_e_hint_dlg = nullptr; SecondaryCheckDialog* sdcard_hint_dlg = nullptr; FanControlPopup* m_fan_control_popup{nullptr}; diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index d0f8c080b..af5ed753f 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -2047,14 +2047,14 @@ void AMSControl::SetActionState(AMSAction action, bool support_virtual_tray) m_button_extrusion_cali->Enable(); else m_button_extrusion_cali->Disable(); - m_button_extruder_feed->Disable(); - m_button_extruder_back->Disable(); + m_button_extruder_feed->Enable(); + m_button_extruder_back->Enable(); break; default: break; } } -void AMSControl::EnterNoneAMSMode() +void AMSControl::EnterNoneAMSMode(bool support_vt_load) { m_simplebook_amsitems->Hide(); m_panel_top->Hide(); @@ -2064,8 +2064,14 @@ void AMSControl::EnterNoneAMSMode() m_button_ams_setting->Hide(); m_button_guide->Hide(); m_button_retry->Hide(); - m_button_extruder_feed->Hide(); - m_button_extruder_back->Hide(); + if (support_vt_load) { + m_button_extruder_feed->Show(); + m_button_extruder_back->Show(); + } else { + m_button_extruder_feed->Hide(); + m_button_extruder_back->Hide(); + } + ShowFilamentTip(false); m_amswin->Layout(); m_amswin->Fit(); @@ -2205,7 +2211,7 @@ void AMSControl::Reset() m_current_senect = ""; } -void AMSControl::show_noams_mode(bool show, bool support_virtual_tray) +void AMSControl::show_noams_mode(bool show, bool support_virtual_tray, bool support_vt_load) { show_vams(support_virtual_tray); m_sizer_ams_tips->Show(support_virtual_tray); @@ -2215,7 +2221,7 @@ void AMSControl::show_noams_mode(bool show, bool support_virtual_tray) m_button_extrusion_cali->Show(); } - show?ExitNoneAMSMode() : EnterNoneAMSMode(); + show?ExitNoneAMSMode() : EnterNoneAMSMode(support_vt_load); } void AMSControl::show_vams(bool show) @@ -2245,6 +2251,10 @@ void AMSControl::update_vams_kn_value(AmsTray tray) m_vams_info.n = tray.n; m_vams_lib->m_info.k = tray.k; m_vams_lib->m_info.n = tray.n; + m_vams_info.material_name = tray.get_display_filament_type(); + m_vams_info.material_colour = tray.get_color(); + m_vams_lib->m_info.material_name = tray.get_display_filament_type(); + m_vams_lib->m_info.material_colour = tray.get_color(); m_vams_lib->Refresh(); } @@ -2481,7 +2491,6 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } - type = AMSPassRoadType::AMS_ROAD_TYPE_LOAD; if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) { if (ams_id == m_current_ams) { m_extruder->TurnOff(); } cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); @@ -2508,10 +2517,10 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy if (type == AMSPassRoadType::AMS_ROAD_TYPE_LOAD) { SetActionState(AMSAction::AMS_ACTION_LOAD); - } - - if (type == AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD) { + } else if (type == AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD) { SetActionState(AMSAction::AMS_ACTION_UNLOAD); + } else if (type == AMSPassRoadType::AMS_ROAD_TYPE_NONE) { + SetActionState(AMSAction::AMS_ACTION_NORMAL); } } diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index a2755485d..bf1c292c2 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -516,7 +516,7 @@ public: bool m_is_none_ams_mode{false}; void SetActionState(AMSAction action, bool support_virtual_tray = true); - void EnterNoneAMSMode(); + void EnterNoneAMSMode(bool support_vt_load = false); void ExitNoneAMSMode(); void EnterCalibrationMode(bool read_to_calibration); @@ -549,7 +549,7 @@ public: void on_clibration_cancel_click(wxMouseEvent &event); void Reset(); - void show_noams_mode(bool show, bool support_virtual_tray); + void show_noams_mode(bool show, bool support_virtual_tray, bool support_vt_load = false); void show_vams(bool show); void show_vams_kn_value(bool show); void update_vams_kn_value(AmsTray tray);