mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-13 01:37:53 -06:00
ENH: refine ams logic
update ams settings add rfid reading bits Change-Id: If46d2a3bf896e1279514aba94e5facdaee12014d Signed-off-by: Stone Li <stone.li@bambulab.com>
This commit is contained in:
parent
0ed5b956ae
commit
a688265bfd
7 changed files with 84 additions and 11 deletions
|
@ -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)
|
||||
|
|
|
@ -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<std::string>(), nullptr, 16);
|
||||
}
|
||||
if (jj["ams"].contains("tray_reading_bits")) {
|
||||
tray_reading_bits = stol(jj["ams"]["tray_reading_bits"].get<std::string>(), 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<std::string>(), 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<std::string>();
|
||||
}
|
||||
if (jj["ams"].contains("insert_flag")) {
|
||||
ams_insert_flag = jj["ams"]["insert_flag"].get<bool>();
|
||||
}
|
||||
if (jj["ams"].contains("ams_rfid_status"))
|
||||
ams_rfid_status = jj["ams"]["ams_rfid_status"].get<int>();
|
||||
|
||||
if (jj["ams"].contains("power_on_flag")) {
|
||||
ams_power_on_flag = jj["ams"]["power_on_flag"].get<bool>();
|
||||
}
|
||||
|
||||
if (ams_exist_bits != last_ams_exist_bits
|
||||
|| last_tray_exist_bits != last_tray_exist_bits
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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<wxSt
|
|||
update_print_status_msg(msg_text, true, true);
|
||||
Enable_Send_Button(false);
|
||||
Enable_Refresh_Button(true);
|
||||
} else if (status == PrintDialogStatus::PrintStatusDisableAms) {
|
||||
update_print_status_msg(wxEmptyString, false, false);
|
||||
Enable_Send_Button(false);
|
||||
Enable_Refresh_Button(true);
|
||||
} else if (status == PrintDialogStatus::PrintStatusNeedUpgradingAms) {
|
||||
wxString msg_text;
|
||||
if (params.size() > 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_);
|
||||
|
|
|
@ -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 };
|
||||
|
||||
|
|
|
@ -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,11 +1691,21 @@ 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->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 {
|
||||
// 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());
|
||||
|
|
|
@ -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<int> last_stage_list_info;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue