From 2866e33304d81ac15912ccd94ea3d512a0a4be27 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Mon, 1 Aug 2022 15:59:15 +0800 Subject: [PATCH] ENH: refine new version protocol in upgrading Change-Id: I8c14dce6a20ca93cf42ff55b4610c397cdbf97e3 Signed-off-by: Stone Li --- src/slic3r/GUI/DeviceManager.cpp | 24 +++++++++++++++ src/slic3r/GUI/DeviceManager.hpp | 3 ++ src/slic3r/GUI/UpgradePanel.cpp | 50 +++++++++++++++++++++++--------- 3 files changed, 64 insertions(+), 13 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 467755c4e..67249ce20 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1617,6 +1617,7 @@ void MachineObject::reset() iot_print_status = ""; print_status = ""; last_mc_print_stage = -1; + m_new_ver_list_exist = false; subtask_ = nullptr; @@ -2069,6 +2070,29 @@ int MachineObject::parse_json(std::string payload) } } } + // new ver list + if (jj["upgrade_state"].contains("new_ver_list")) { + m_new_ver_list_exist = true; + new_ver_list.clear(); + for (auto ver_item = jj["upgrade_state"]["new_ver_list"].begin(); ver_item != jj["upgrade_state"]["new_ver_list"].end(); ver_item++) { + ModuleVersionInfo ver_info; + if (ver_item->contains("name")) + ver_info.name = (*ver_item)["name"].get(); + else + continue; + + if (ver_item->contains("cur_ver")) + ver_info.sw_ver = (*ver_item)["cur_ver"].get(); + if (ver_item->contains("new_ver")) + ver_info.sw_new_ver = (*ver_item)["new_ver"].get(); + + if (ver_info.name == "ota") { + ota_new_version_number = ver_info.sw_new_ver; + } + + new_ver_list.insert(std::make_pair(ver_info.name, ver_info)); + } + } } } catch (...) { diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 241e8424f..fd18c6057 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -296,6 +296,7 @@ public: std::string sn; std::string hw_ver; std::string sw_ver; + std::string sw_new_ver; }; /* static members and functions */ @@ -413,6 +414,8 @@ public: std::string ota_new_version_number; std::string ahb_new_version_number; std::map module_vers; + std::map new_ver_list; + bool m_new_ver_list_exist = false; int upgrade_err_code = 0; std::vector firmware_list; diff --git a/src/slic3r/GUI/UpgradePanel.cpp b/src/slic3r/GUI/UpgradePanel.cpp index 7d19dd934..5eeb33140 100644 --- a/src/slic3r/GUI/UpgradePanel.cpp +++ b/src/slic3r/GUI/UpgradePanel.cpp @@ -19,8 +19,6 @@ MachineInfoPanel::MachineInfoPanel(wxWindow* parent, wxWindowID id, const wxPoin init_bitmaps(); - - wxBoxSizer *m_top_sizer = new wxBoxSizer(wxVERTICAL); m_panel_caption = create_caption_panel(this); @@ -345,7 +343,7 @@ void MachineInfoPanel::update_version_text(MachineObject* obj) } else { if (it != obj->module_vers.end()) { - wxString ver_text = wxString::Format("%s(%s)", it->second.sw_ver, _L("Lastest version")); + wxString ver_text = wxString::Format("%s(%s)", it->second.sw_ver, _L("Latest version")); m_staticText_ver_val->SetLabelText(ver_text); } else { @@ -391,24 +389,50 @@ void MachineInfoPanel::update_ams(MachineObject *obj) // update ams img wxString ams_text = wxString::Format("AMS%s", std::to_string(ams_index + 1)); ams_name = ams_text; - if (obj->upgrade_new_version - && !obj->ams_new_version_number.empty() - && obj->ams_new_version_number.compare(it->second.sw_ver) != 0) { - amspanel->m_ams_new_version_img->Show(); - wxString ver_text = wxString::Format("%s->%s", it->second.sw_ver, obj->ams_new_version_number); - ams_ver = ver_text; + + std::string ams_id = "ams/" + std::to_string(ams_index); + auto ver_item = obj->new_ver_list.find(ams_id); + if (obj->new_ver_list.empty() && !obj->m_new_ver_list_exist) { + if (obj->upgrade_new_version + && obj->ams_new_version_number.compare(it->second.sw_ver) != 0) { + amspanel->m_ams_new_version_img->Show(); + wxString ver_text = wxString::Format("%s->%s", it->second.sw_ver, obj->ams_new_version_number); + ams_ver = ver_text; + } else { + amspanel->m_ams_new_version_img->Hide(); + if (obj->ams_new_version_number.empty()) { + wxString ver_text = wxString::Format("%s", it->second.sw_ver); + ams_ver = ver_text; + } else { + wxString ver_text = wxString::Format("%s(%s)", it->second.sw_ver, _L("Latest version")); + ams_ver = ver_text; + } + } } else { - amspanel->m_ams_new_version_img->Hide(); - wxString ver_text = wxString::Format("%s(%s)", it->second.sw_ver, _L("Lastest version")); - ams_ver = ver_text; + if (ver_item == obj->new_ver_list.end()) { + amspanel->m_ams_new_version_img->Hide(); + wxString ver_text = wxString::Format("%s(%s)", it->second.sw_ver, _L("Latest version")); + ams_ver = ver_text; + } else { + if (ver_item->second.sw_new_ver != ver_item->second.sw_ver) { + amspanel->m_ams_new_version_img->Show(); + wxString ver_text = wxString::Format("%s->%s", ver_item->second.sw_ver, ver_item->second.sw_new_ver); + ams_ver = ver_text; + } else { + amspanel->m_ams_new_version_img->Hide(); + wxString ver_text = wxString::Format("%s(%s)", ver_item->second.sw_ver, _L("Latest version")); + ams_ver = ver_text; + } + } } + // update ams sn if (it->second.sn.empty()) { ams_sn = "-"; } else { wxString sn_text = it->second.sn; ams_sn = sn_text.MakeUpper(); - } + } } amspanel->m_staticText_ams->SetLabelText(ams_name);