diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 2dbffa04f..5f1d7db8c 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1542,7 +1542,11 @@ void MachineObject::parse_status(int flag) } camera_recording = ((flag >> 5) & 0x1) != 0; - ams_calibrate_remain_flag = ((flag >> 7) & 0x1) != 0; + + if (time(nullptr) - ams_user_setting_start > HOLD_COUNT_MAX) + { + ams_calibrate_remain_flag = ((flag >> 7) & 0x1) != 0; + } sdcard_state = MachineObject::SdcardState(get_flag_bits(flag, 8, 2)); @@ -2123,7 +2127,7 @@ int MachineObject::command_ams_user_settings(int ams_id, bool start_read_opt, bo ams_insert_flag = tray_read_opt; ams_power_on_flag = start_read_opt; ams_calibrate_remain_flag = remain_flag; - ams_user_setting_hold_count = HOLD_COUNT_MAX; + ams_user_setting_start = time(nullptr); return this->publish_json(j.dump()); } @@ -4330,9 +4334,8 @@ int MachineObject::parse_json(std::string payload, bool key_field_only) if (jj["ams"].contains("insert_flag") || jj["ams"].contains("power_on_flag") || jj["ams"].contains("calibrate_remain_flag")) { - if (ams_user_setting_hold_count > 0) { - ams_user_setting_hold_count--; - } else { + if (time(nullptr) - ams_user_setting_start > HOLD_TIME_MAX) + { if (jj["ams"].contains("insert_flag")) { ams_insert_flag = jj["ams"]["insert_flag"].get(); } @@ -5791,7 +5794,6 @@ void MachineObject::parse_new_info(json print) BOOST_LOG_TRIVIAL(info) << "new print data cfg = " << cfg; if(!cfg.empty()){ - if (ams_user_setting_hold_count > 0) ams_user_setting_hold_count--; if (camera_recording_hold_count > 0) camera_recording_hold_count--; if (camera_resolution_hold_count > 0) camera_resolution_hold_count--; if (camera_timelapse_hold_count > 0) camera_timelapse_hold_count--; @@ -5805,9 +5807,12 @@ void MachineObject::parse_new_info(json print) if (nozzle_setting_hold_count > 0)nozzle_setting_hold_count--; + if (time(nullptr) - ams_user_setting_start > HOLD_COUNT_MAX) + { + ams_insert_flag = get_flag_bits(cfg, 0); + ams_power_on_flag = get_flag_bits(cfg, 1); + } - ams_insert_flag = get_flag_bits(cfg, 0); - ams_power_on_flag = get_flag_bits(cfg, 1); upgrade_force_upgrade = get_flag_bits(cfg, 2); camera_recording_when_printing = get_flag_bits(cfg, 3); camera_resolution = get_flag_bits(cfg, 4) == 0 ? "720p" : "1080p"; @@ -5837,7 +5842,12 @@ void MachineObject::parse_new_info(json print) xcam_ai_monitoring = get_flag_bits(cfg, 15); xcam_auto_recovery_step_loss = get_flag_bits(cfg, 16); - ams_calibrate_remain_flag = get_flag_bits(cfg, 17); + + if (time(nullptr) - ams_user_setting_start > HOLD_COUNT_MAX) + { + ams_calibrate_remain_flag = get_flag_bits(cfg, 17); + } + ams_auto_switch_filament_flag = get_flag_bits(cfg, 18); xcam_allow_prompt_sound = get_flag_bits(cfg, 22); xcam_filament_tangle_detect = get_flag_bits(cfg, 23); diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 59cf41592..1435a0998 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -35,6 +35,8 @@ #define HOLD_COUNT_MAX 3 #define HOLD_COUNT_CAMERA 6 +#define HOLD_TIME_MAX 3 // 3 seconds + #define GET_VERSION_RETRYS 10 #define RETRY_INTERNAL 2000 @@ -676,7 +678,7 @@ public: bool ams_air_print_status { false }; bool ams_support_virtual_tray { true }; int ams_humidity; - int ams_user_setting_hold_count = 0; + time_t ams_user_setting_start = 0; AmsStatusMain ams_status_main; int ams_status_sub; int ams_version = 0;