#include #include #include #include // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../include/KlippyGcodes.h" #include "../include/send_msg.h" #include "../include/event.h" #include "../include/mks_printer.h" #include "../include/mks_file.h" #include "../include/mks_update.h" #include "../include/mks_wpa_cli.h" #include "../include/mks_test.h" #include "../include/MakerbaseSerial.h" #include "../include/MakerbaseClient.h" #include "../include/MakerbaseShell.h" #include "../include/MakerbasePanel.h" #include "../include/MakerbaseParseIni.h" #include "../include/MakerbaseWiFi.h" #include "../include/MakerbaseNetwork.h" #include "../include/ui.h" #include "../include/send_jpg.h" #include #define DEFAULT_DIR "gcodes/" extern int tty_fd; extern MakerbaseClient *ep; extern bool gimage_is_showed; extern bool simage_is_showed; extern int current_page_id; // 当前页面的id号 extern int previous_page_id; // 上一页面的id号 extern int next_page_id; // 下一页面的id号 /* Printer Extern Varible*/ extern bool mks_led_status; extern bool mks_beep_status; extern bool mks_fila_status; extern int mks_language_status; extern int mks_extruder_target; extern int mks_heater_bed_target; extern int mks_hot_target; extern std::string mks_babystep_value; extern std::string mks_adxl_offset; extern std::string mks_version_soc; extern std::string mks_version_mcu; extern std::string mks_version_ui; extern std::string printer_webhooks_state; extern std::string printer_webhooks_state_message; extern std::string current_webhooks_state_message; extern float printer_gcode_move_speed_factor; float current_speed_factor = 0; extern float printer_gcode_move_speed; float current_extruder_factor = 0; extern float printer_gcode_move_extrude_factor; extern float printer_gcode_move_homing_origin[4]; // [X, Y, Z, E] - 返回应用于每个轴的“gcode 偏移”。例如,可以检查“Z”轴以确定通过“babystepping”应用了多少偏移量。 extern float printer_gcode_move_position[4]; extern float printer_gcode_move_gcode_position[4]; extern std::string printer_toolhead_homed_axes; extern float printer_toolhead_print_time; extern float printer_toolhead_extimated_print_time; extern double printer_toolhead_position[4]; extern double printer_toolhead_axis_minimum[4]; extern double printer_toolhead_axis_maximum[4]; extern double x_position; extern double y_position; extern double z_position; extern float e_position; extern double gcode_z_position; extern int printer_extruder_temperature; int current_extruder_temperature = 0; extern int printer_extruder_target; int current_extruder_target = 0; extern int printer_heater_bed_temperature; int current_heater_bed_temperature = 0; extern int printer_heater_bed_target; int current_heater_bed_target = 0; extern int printer_hot_temperature; int current_hot_temperature = 0; extern int printer_hot_target; int current_hot_target = 0; extern float printer_fan_speed; extern float printer_heater_fan_speed; extern float printer_heater_fan_my_nozzle_fan1_speed; extern float printer_out_pin_fan0_value; float current_out_pin_fan0_value = 0; extern float printer_out_pin_fan3_value; float current_out_pin_fan3_value =0; extern float printer_out_pin_fan2_value; float current_out_pin_fan2_value = 0; extern float printer_out_pin_beep_value; extern std::string printer_idle_timeout_state; extern float printer_printing_time; extern std::string printer_print_stats_filename; extern float printer_print_stats_total_duration; extern float printer_print_stats_print_duration; extern float printer_print_stats_filament_used; extern std::string printer_print_stats_state; // 这个状态很有用 extern std::string printer_print_stats_message; // error detected, error message extern std::string printer_display_status_message; extern int printer_display_status_progress; extern float auto_level_dist; extern bool auto_level_finished; extern bool auto_level_enabled; std::string str_manual_level_offset; extern float manual_level_dist; extern int manual_level_count; extern bool manual_level_finished; extern float printer_bed_mesh_mesh_min[2]; extern float printer_bed_mesh_mesh_max[2]; extern float printer_bed_mesh_profiles_mks_points[5][5]; extern float printer_bed_mesh_profiles_mks_mesh_params_tension; extern float printer_bed_mesh_profiles_mks_mesh_params_mesh_x_pps; extern std::string printer_bed_mesh_profiles_mks_mesh_params_algo; extern float printer_bed_mesh_profiles_mks_mesh_params_min_x; extern float printer_bed_mesh_profiles_mks_mesh_params_min_y; extern float printer_bed_mesh_profiles_mks_mesh_params_x_count; extern float printer_bed_mesh_profiles_mks_mesh_params_y_count; extern float printer_bed_mesh_profiles_mks_mesh_params_mesh_y_pps; extern float printer_bed_mesh_profiles_mks_mesh_params_max_x; extern float printer_bed_mesh_profiles_mks_mesh_params_max_y; extern float page_set_zoffset_x_y_position[16][2]; extern float page_set_zoffset_z_position[16]; extern bool fresh_page_set_zoffset_data; extern bool refresh_page_auto_finish_data; extern int page_set_zoffset_index; // filament switch sensor fila extern bool filament_switch_sensor_fila_filament_detected; extern bool filament_switch_sensor_fila_enabled; extern float printer_caselight_value; extern int printer_pause_taget; extern bool printer_pause_resume_is_paused; extern float printer_set_offset; extern float printer_z_offset; extern float printer_intern_z_offset; extern float printer_extern_z_offset; extern float printer_move_dist; extern int printer_filament_extruder_target; extern int printer_filament_extruedr_dist; // probe extern float printer_probe_x_zoffset; extern float printer_probe_y_zoffset; extern float printer_probe_z_zoffset; // printer info software version extern std::string printer_info_software_version; /* wifi */ extern std::string page_wifi_ssid_list[5]; extern int page_wifi_current_pages; extern int page_wifi_ssid_list_pages; extern std::string get_wifi_name; /* 文件列表处理相关变量 */ // extern std::set page_files_dirname_filename_list; extern bool filelist_changed; extern int page_files_pages; extern int page_files_current_pages; extern int page_files_folder_layers; extern std::string page_files_previous_path; extern std::string page_files_root_path; extern std::string page_files_path; extern std::string page_files_list_name[9]; // 文件列表显示文件名称 extern std::string page_files_list_show_name[9]; // 文件列表名称 extern std::string page_files_list_show_type[9]; // 文件类型: [f]或者[d],或者[n] extern std::stack page_files_path_stack; // 路径栈 extern std::string page_files_root_path; // Klippy根目录 extern std::string page_files_previous_path; // 之前的路径 extern std::string page_files_path; // 文件所在路径 extern std::string page_files_print_files_path; // 要打印的文件路径 extern int file_metadata_estimated_time; extern std::string file_metadata_filename; extern float file_metadata_filament_total; extern int file_metadata_object_height; extern std::string file_metadata_filament_name; extern std::string file_metadata_filament_type; extern float file_metadata_filament_weight_total; extern std::string file_metadata_gimage; extern std::string file_metadata_simage; extern int level_mode; extern bool printing_keyboard_enabled; // extern bool filament_keyboard_enabled; extern bool auto_level_button_enabled; extern bool manual_level_button_enabled; extern bool show_preview_complete; extern bool show_preview_gimage_completed; /* 补偿值 */ float page_set_zoffset_number; /* 共振补偿值 */ std::string page_syntony_shaper_freq_x = ""; std::string page_syntony_shaper_freq_y = ""; bool page_syntony_finished = false; /* PID调节 */ bool page_pid_finished = false; /* wifi */ extern struct mks_wifi_status_result_t status_result; extern struct mks_wifi_status_t wpa_status; std::string wifi_ip_address; /* 打完关机 */ bool page_printing_shutdown_enable = false; /* wifi键盘打开判断 */ extern bool printing_wifi_keyboard_enabled; /* refresh about success*/ bool page_about_successed = false; extern bool is_download_to_screen; // main.cpp 里面的变量 /* update page */ extern int filesize; /* server history totals */ extern int total_jobs; extern double total_time; extern double total_print_time; extern double total_filament_used; /* 800个小时 */ int mks_total_printed_minutes; /* 设置打印调平的目标温度 */ extern int level_mode_printing_extruder_target; extern int level_mode_printing_heater_bed_target; extern bool level_mode_printing_is_printing_level; /* wifi 相关 */ std::string current_connected_ssid_name = ""; extern bool page_wifi_list_ssid_button_enabled[5]; // page print filament extern bool page_print_filament_extrude_restract_button; extern bool page_filament_extrude_button; // oobe开箱引导 bool mks_oobe_enabled = false; bool current_mks_oobe_enabled = false; // 调平 bool start_pre_auto_level = false; bool start_pre_manual_level = false; bool all_level_saving = false; extern bool mks_file_parse_finished; // reset // extern bool page_reset_to_about; // 正在保存页面 bool is_refresh_page_saving = false; std::string temp_idle_state = ""; // oobe extern float oobe_printer_set_offset; //extern std::string printed_file_path; bool jump_to_print = false; int printer_auto_level_heater_bed_target; extern std::string filament_message; bool printer_ready = false; extern bool page_filament_unload_button; extern bool printer_bed_leveling; //4.4.1 CLL 耗材确认弹窗新增不再提示按钮 extern bool preview_pop_1_on; extern bool preview_pop_2_on; //4.4.1 CLL 修复断料检测与退料冲突bug bool previous_filament_sensor_state = false; //4.4.1 CLL 修改调平 std::string previous_zoffset; //4.4.2 CLL 新增息屏功能 extern bool previous_caselight_value; //4.4.2 CLL 修改调平不再需要设置zoffset值 bool step_1 = false; bool step_2 = false; bool step_3 = false; bool step_4 = false; //4.4.2 CLL 适配mates和霍尔耗材宽度探测器 bool filament_detected = true; //4.4.2 CLL 文件列表新增本地、U盘切换按钮 extern std::string file_mode; extern int manual_count; float bed_offset; extern std::string adjust_mode; extern std::string set_mode; extern bool move_fan_setting; extern std::string thumbnail_path; extern bool cache_clicked; // CLL 以下变量用于修复gcode响应函数和refresh函数之间的冲突(gcode响应函数需设置变量在refresh_page_show中统一改变页面,否则会产生冲突) bool jump_to_move_pop_1 = false; bool jump_to_move_pop_2 = false; bool jump_to_detect_error = false; bool jump_to_level_error = false; bool jump_to_filament_pop_1 = false; bool jump_to_print_low_temp = false; bool jump_to_memory_warning = false; bool jump_to_resume_print = false; std::string error_message; bool main_picture_detected = false; // CLL 此变量用于检测cache中图片是否存在 bool main_picture_refreshed = false; // CLL 此变量用于标记主页面图片是否已经刷新过,防止反复刷新 extern int load_target; int connection_method; // CLL 此变量用于记录二维码是否是局域网刷新 0为局域网连接,1为互联网连接 std::map serverConfigs; std::string selected_server; int current_server_page; int total_server_count; std::string target_soc_version; bool open_qr_refreshed = false; // CLL 第一次开机刷新时不使用脚本重新生成二维码图片 extern bool qr_refreshed; bool open_reprint_asked = false; // CLL 开机后进入主页面发出检测断电续打指令 int mks_ethernet; /* 更新页面处理 */ void refresh_page_show() { // CLL 以下if检测函数为无条件跳转,其在改变为true之前已经经过函数判断(跳转页面前需将对应变量置为false,否则会陷入死循环) if (jump_to_move_pop_1 == true) { jump_to_move_pop_1 = false; page_to(TJC_PAGE_MOVE_POP_1); } if (jump_to_move_pop_2 == true) { jump_to_move_pop_2 = false; page_to(TJC_PAGE_MOVE_POP_2); } if (jump_to_detect_error == true) { jump_to_detect_error = false; page_to(TJC_PAGE_DETECT_ERROR); send_cmd_txt(tty_fd, "t0", error_message); } if (jump_to_level_error == true) { jump_to_level_error = false; page_to(TJC_PAGE_LEVEL_ERROR); } if (jump_to_filament_pop_1 == true) { jump_to_filament_pop_1 = false; page_to(TJC_PAGE_FILAMENT_POP_1); } if (jump_to_print_low_temp == true) { jump_to_print_low_temp = false; page_to(TJC_PAGE_PRINT_LOW_TEMP); } if (jump_to_resume_print == true) { jump_to_resume_print = false; page_to(TJC_PAGE_RESUME_PRINT); } if (jump_to_memory_warning == true) { jump_to_memory_warning = false; page_to(TJC_PAGE_MEMORY_WARNING); } if (current_page_id != TJC_PAGE_PRINTING) { switch (current_page_id) { case TJC_PAGE_PRINT_ZOFFSET: break; case TJC_PAGE_PRINT_FILAMENT: break; case TJC_PAGE_PRINT_STOP: case TJC_PAGE_PRINT_NO_FILAMENT: case TJC_PAGE_PRINT_NO_FILAMENT_2: case TJC_PAGE_SHUTDOWN: case TJC_PAGE_PRINT_STOPPING: case TJC_PAGE_MOVE_POP_1: case TJC_PAGE_GCODE_ERROR: case TJC_PAGE_DETECT_ERROR: case TJC_PAGE_RESET: case TJC_PAGE_PREVIEW: case TJC_PAGE_PREVIEW_POP_1: case TJC_PAGE_PREVIEW_POP_2: case TJC_PAGE_PRINTING_2: case TJC_PAGE_FILAMENT_POP_2: case TJC_PAGE_FILAMENT_POP_3: break; default: if (printer_print_stats_state == "printing") { if (printer_print_stats_filename != "") { main_picture_detected = false; main_picture_refreshed = false; MKSLOG_BLUE("跳入到打印函数\n"); sleep(1); get_file_estimated_time(printer_print_stats_filename); sleep(1); //4.4.2 CLL 新增息屏功能 if (previous_caselight_value == true) { led_on_off(); previous_caselight_value = false; } jump_to_print = true; printer_ready = false; page_to(TJC_PAGE_PREVIEW); break; } } break; } } if (current_page_id != TJC_PAGE_RESET) { switch (current_page_id) { case TJC_PAGE_GCODE_ERROR: case TJC_PAGE_DETECT_ERROR: case TJC_PAGE_LEVEL_ERROR: case TJC_PAGE_SHUTDOWN: case TJC_PAGE_SERVICE: case TJC_PAGE_LANGUAGE: case TJC_PAGE_COMMON_SETTING: case TJC_PAGE_SLEEP_MODE: case TJC_PAGE_INTERNET: case TJC_PAGE_WIFI_LIST: case TJC_PAGE_WIFI_KB: case TJC_PAGE_WIFI_CONNECT: case TJC_PAGE_WIFI_FAILED: case TJC_PAGE_WIFI_SUCCESS: case TJC_PAGE_WIFI_SAVING: case TJC_PAGE_UPDATE_FOUND: case TJC_PAGE_UPDATE_NOT_FOUND: case TJC_PAGE_UPDATING: case TJC_PAGE_UPDATE_FINISH: case TJC_PAGE_RESTORE_CONFIG: case TJC_PAGE_SHOW_QR: case TJC_PAGE_SERVER_SET: case TJC_PAGE_UPDATE_MODE: case TJC_PAGE_ONLINE_UPDATE: case TJC_PAGE_SEARCH_SERVER: break; default: // 喷头板断开的情况下跳到重启页面 if (printer_webhooks_state == "shutdown" || printer_webhooks_state == "error") { if (printer_webhooks_state == "shutdown" && (current_page_id == TJC_PAGE_AUTO_MOVING || current_page_id == TJC_PAGE_OPEN_CALIBRATE)) { break; } if (previous_caselight_value == true) { led_on_off(); previous_caselight_value = false; } page_to(TJC_PAGE_RESET); std::cout << "重启页面" << std::endl; if (current_webhooks_state_message != printer_webhooks_state_message) { current_webhooks_state_message = printer_webhooks_state_message; std::string temp = printer_webhooks_state_message; replace(temp.begin(), temp.end(), '\n', '.'); replace(temp.begin(), temp.end(), '\'', ' '); replace(temp.begin(), temp.end(), '\"', ' '); send_cmd_txt(tty_fd, "t0", temp); } } break; } } else if (current_page_id == TJC_PAGE_RESET) { if (printer_webhooks_state == "shutdown" || printer_webhooks_state == "error") { if (current_webhooks_state_message != printer_webhooks_state_message) { current_webhooks_state_message = printer_webhooks_state_message; std::string temp = printer_webhooks_state_message; replace(temp.begin(), temp.end(), '\n', '.'); replace(temp.begin(), temp.end(), '\'', ' '); replace(temp.begin(), temp.end(), '\"', ' '); send_cmd_txt(tty_fd, "t0", temp); } } if (printer_webhooks_state == "ready") { page_to(TJC_PAGE_SYS_OK); } } switch (current_page_id) { case TJC_PAGE_MAIN: refresh_page_main(); break; case TJC_PAGE_PREVIEW: refresh_page_preview(); break; case TJC_PAGE_PRINTING: case TJC_PAGE_PRINTING_2: refresh_page_printing(); break; case TJC_PAGE_PRINT_FILAMENT: refresh_page_print_filament(); break; case TJC_PAGE_MOVE: refresh_page_move(); break; case TJC_PAGE_PRINT_ZOFFSET: refresh_page_printing_zoffset(); break; case TJC_PAGE_AUTO_MOVING: refresh_page_auto_moving(); break; case TJC_PAGE_AUTO_FINISH: refresh_page_auto_finish(); break; case TJC_PAGE_SYNTONY_MOVE: refresh_page_syntony_move(); break; case TJC_PAGE_SYNTONY_FINISH: // refresh_page_syntony_finish(); break; case TJC_PAGE_PRINT_STOPPING: refresh_page_stopping(); break; case TJC_PAGE_PRE_BED_CALIBRATION: refresh_page_auto_level(); break; case TJC_PAGE_WIFI_LIST: refresh_page_wifi_list_2(); break; case TJC_PAGE_OPEN_FILAMENTVIDEO_2: refresh_page_open_filament_video_2(); break; case TJC_PAGE_ZOFFSET: refresh_page_zoffset(); break; case TJC_PAGE_AUTO_HEATERBED: refresh_page_auto_heaterbed(); break; case TJC_PAGE_OPEN_HEATERBED: refresh_page_open_heaterbed(); break; case TJC_PAGE_FILAMENT_POP_2: case TJC_PAGE_FILAMENT_POP_3: refresh_page_filament_pop(); break; case TJC_PAGE_PREVIEW_POP_1: case TJC_PAGE_PREVIEW_POP_2: refresh_page_preview_pop(); break; //4.4.2 CLL 文件列表新增本地、U盘切换按钮 case TJC_PAGE_FILE_LIST: // refresh_page_files_list_2(); break; case TJC_PAGE_BED_MOVING: refresh_page_bed_moving(); break; case TJC_PAGE_OPEN_CALIBRATE: refresh_page_open_calibrate(); break; case TJC_PAGE_COMMON_SETTING: refresh_page_common_setting(); break; case TJC_PAGE_FILAMENT_SET_FAN: refresh_page_filament_set_fan(); break; case TJC_PAGE_WIFI_KB: refresh_page_wifi_keyboard(); break; case TJC_PAGE_FILAMENT: refresh_page_filament(); break; case TJC_PAGE_SHOW_QR: refresh_page_show_qr(); break; case TJC_PAGE_SERVER_SET: refresh_page_server_set(); break; case TJC_PAGE_AUTO_UNLOAD: refresh_page_auto_unload(); break; default: break; } } void refresh_page_open_filament_video_2() { if (printer_extruder_target == 0) { send_cmd_pco(tty_fd, "t0", "65535"); send_cmd_pco(tty_fd, "n0", "65535"); send_cmd_picc(tty_fd, "b3", "9"); send_cmd_picc2(tty_fd, "b3", "25"); } else { send_cmd_pco(tty_fd, "t0", "63488"); send_cmd_pco(tty_fd, "n0", "63488"); send_cmd_picc(tty_fd, "b3", "10"); send_cmd_picc2(tty_fd, "b3", "24"); } send_cmd_txt(tty_fd, "t0", std::to_string(printer_extruder_temperature) + "/"); send_cmd_val(tty_fd, "n0", std::to_string(printer_extruder_target)); } void refresh_page_wifi_keyboard() { if (printing_wifi_keyboard_enabled == true) { send_cmd_txt(tty_fd, "t0", get_wifi_name); } } void refresh_page_syntony_finish() { MKSLOG_BLUE("Printer ide_timeout state: %s", printer_idle_timeout_state.c_str()); MKSLOG_BLUE("Printer webhooks state: %s", printer_webhooks_state.c_str()); if (page_syntony_finished == false) { page_syntony_finished = true; all_level_saving = false; } if (printer_idle_timeout_state == "Ready" && printer_webhooks_state == "ready") { MKSLOG_BLUE("Printer webhooks state: %s", printer_webhooks_state.c_str()); sleep(10); system("sync"); // 保存好配置文件 all_level_saving = false; init_mks_status(); // 重启后初始化之前保存的参数 sub_object_status(); get_object_status(); sleep(10); page_to(TJC_PAGE_LEVEL_MODE); MKSLOG_RED("从739行跳出去"); } } void refresh_page_auto_level() { if (auto_level_dist == (float)0.01) { send_cmd_picc(tty_fd, "b0", "113"); send_cmd_picc(tty_fd, "b1", "114"); send_cmd_picc(tty_fd, "b2", "114"); send_cmd_picc(tty_fd, "b3", "114"); send_cmd_picc2(tty_fd, "b0", "116"); send_cmd_picc2(tty_fd, "b1", "115"); send_cmd_picc2(tty_fd, "b2", "115"); send_cmd_picc2(tty_fd, "b3", "115"); } else if (auto_level_dist == (float)0.05) { send_cmd_picc(tty_fd, "b0", "114"); send_cmd_picc(tty_fd, "b1", "113"); send_cmd_picc(tty_fd, "b2", "114"); send_cmd_picc(tty_fd, "b3", "114"); send_cmd_picc2(tty_fd, "b0", "115"); send_cmd_picc2(tty_fd, "b1", "116"); send_cmd_picc2(tty_fd, "b2", "115"); send_cmd_picc2(tty_fd, "b3", "115"); } else if (auto_level_dist == (float)0.1) { send_cmd_picc(tty_fd, "b0", "114"); send_cmd_picc(tty_fd, "b1", "114"); send_cmd_picc(tty_fd, "b2", "113"); send_cmd_picc(tty_fd, "b3", "114"); send_cmd_picc2(tty_fd, "b0", "115"); send_cmd_picc2(tty_fd, "b1", "115"); send_cmd_picc2(tty_fd, "b2", "116"); send_cmd_picc2(tty_fd, "b3", "115"); } else if (auto_level_dist == (float)0.5) { send_cmd_picc(tty_fd, "b0", "114"); send_cmd_picc(tty_fd, "b1", "114"); send_cmd_picc(tty_fd, "b2", "114"); send_cmd_picc(tty_fd, "b3", "113"); send_cmd_picc2(tty_fd, "b0", "115"); send_cmd_picc2(tty_fd, "b1", "115"); send_cmd_picc2(tty_fd, "b2", "115"); send_cmd_picc2(tty_fd, "b3", "116"); } } void refresh_page_stopping() { MKSLOG_BLUE("Printer ide_timeout state: %s", printer_idle_timeout_state.c_str()); MKSLOG_BLUE("Printer webhooks state: %s", printer_webhooks_state.c_str()); if (printer_idle_timeout_state == "Ready") { clear_previous_data(); sleep(5); save_current_zoffset(); page_to(TJC_PAGE_MAIN); } } void refresh_page_syntony_move() { if (temp_idle_state != printer_idle_timeout_state) { temp_idle_state = printer_idle_timeout_state; MKSLOG_BLUE("Printer ide_timeout state: %s", printer_idle_timeout_state.c_str()); MKSLOG_BLUE("Printer webhooks state: %s", printer_webhooks_state.c_str()); } if (step_1 == true) { sleep(15); page_to(TJC_PAGE_SYNTONY_FINISH); step_1 = false; } } void refresh_page_print_filament() { send_cmd_txt(tty_fd, "t5", printer_print_stats_filename.substr(printer_print_stats_filename.rfind("/") +1 )); if (printer_extruder_target == 0) { send_cmd_pco(tty_fd, "t2", "65535"); send_cmd_picc(tty_fd, "b0", "63"); send_cmd_picc2(tty_fd, "b0", "64"); } else { send_cmd_pco(tty_fd, "t2", "63488"); send_cmd_picc(tty_fd, "b0", "62"); send_cmd_picc2(tty_fd, "b0", "65"); } send_cmd_val(tty_fd, "j0", std::to_string(printer_display_status_progress)); send_cmd_val(tty_fd, "n7", std::to_string(printer_display_status_progress)); send_cmd_txt(tty_fd, "t2", std::to_string(printer_extruder_temperature)); send_cmd_txt(tty_fd, "t3", std::to_string(printer_extruder_target)); send_cmd_txt(tty_fd, "t0", show_time((int)(printer_print_stats_print_duration))); send_cmd_txt(tty_fd, "t1", show_time(get_cal_printing_time((int)(printer_print_stats_print_duration), file_metadata_estimated_time, printer_display_status_progress))); if (printer_print_stats_state == "paused") { printer_ready = true; } //4.4.2 CLL 适配mates和霍尔耗材宽度检测器 if (filament_detected == false) { sleep(1); printer_ready = false; set_print_pause(); page_to(TJC_PAGE_PRINT_NO_FILAMENT); } if (printer_print_stats_state == "printing") { if (printer_ready == true) { printer_ready = false; page_to(TJC_PAGE_PRINTING); } } if (printer_print_stats_state == "standby") { page_to(TJC_PAGE_PRINT_STOPPING); } if (printer_print_stats_state == "error") { page_to(TJC_PAGE_GCODE_ERROR); cancel_print(); clear_previous_data(); send_cmd_txt(tty_fd, "t0", "gcode error:" + error_message); } //4.4.2 CLL 长时间暂停使打印停止后会跳转页面 if (printer_idle_timeout_state == "Idle") { ep->Send(json_run_a_gcode("G28\n")); cancel_print(); } } void refresh_page_auto_finish() { if ( printer_idle_timeout_state == "Idle" && printer_webhooks_state == "ready" ) { auto_level_finished = true; } } void refresh_page_auto_moving() { if (step_1 == true) { send_cmd_picc(tty_fd, "q0", "109"); send_cmd_pco(tty_fd, "t1", "65535"); send_cmd_pco(tty_fd, "t0", "38066"); send_cmd_vis(tty_fd, "gm1", "0"); send_cmd_vis(tty_fd, "gm2", "1"); step_1 = false; } if (step_2 == true) { send_cmd_picc(tty_fd, "q0", "110"); send_cmd_pco(tty_fd, "t2", "65535"); send_cmd_pco(tty_fd, "t1", "38066"); send_cmd_vis(tty_fd, "gm2", "0"); send_cmd_vis(tty_fd, "gm3", "1"); step_2 = false; } if (step_3 == true) { send_cmd_picc(tty_fd, "q0", "111"); send_cmd_pco(tty_fd, "t3", "65535"); send_cmd_pco(tty_fd, "t2", "38066"); send_cmd_vis(tty_fd, "gm3", "0"); send_cmd_vis(tty_fd, "gm4", "1"); step_3 = false; printer_idle_timeout_state = "Printing"; get_mks_heater_bed_target(); set_heater_bed_target(mks_heater_bed_target); ep->Send(json_run_a_gcode("M190 S" + std::to_string(mks_heater_bed_target) + "\n")); sleep(1); ep->Send(json_run_a_gcode("M4027\n")); } if (step_4 == true) { sleep(15); page_to(TJC_PAGE_AUTO_FINISH); step_4 = false; } } void refresh_page_move() { std::string x_pos = std::to_string(x_position); x_pos = x_pos.substr(0, x_pos.find(".") + 2); std::string y_pos = std::to_string(y_position); y_pos = y_pos.substr(0, y_pos.find(".") + 2); std::string z_pos = std::to_string(z_position); z_pos = z_pos.substr(0, z_pos.find(".") + 2); send_cmd_txt(tty_fd, "t0", x_pos); send_cmd_txt(tty_fd, "t1", y_pos); send_cmd_txt(tty_fd, "t2", z_pos); // CLL 刷新所选择距离 if (printer_move_dist == (float)0.1) { send_cmd_picc(tty_fd, "b0", "77"); send_cmd_picc2(tty_fd, "b0", "74"); send_cmd_picc(tty_fd, "b1", "76"); send_cmd_picc2(tty_fd, "b1", "75"); send_cmd_picc(tty_fd, "b2", "76"); send_cmd_picc2(tty_fd, "b2", "75"); } else if (printer_move_dist == (float)1.0) { send_cmd_picc(tty_fd, "b0", "76"); send_cmd_picc2(tty_fd, "b0", "75"); send_cmd_picc(tty_fd, "b1", "77"); send_cmd_picc2(tty_fd, "b1", "74"); send_cmd_picc(tty_fd, "b2", "76"); send_cmd_picc2(tty_fd, "b2", "75"); } else if (printer_move_dist == (float)10) { send_cmd_picc(tty_fd, "b0", "76"); send_cmd_picc2(tty_fd, "b0", "75"); send_cmd_picc(tty_fd, "b1", "76"); send_cmd_picc2(tty_fd, "b1", "75"); send_cmd_picc(tty_fd, "b2", "77"); send_cmd_picc2(tty_fd, "b2", "74"); } } void refresh_page_offset(float intern_zoffset) { printer_intern_z_offset = intern_zoffset; printer_z_offset = printer_intern_z_offset + printer_extern_z_offset; } void refresh_page_printing_zoffset() { std::string z_offset = std::to_string(printer_gcode_move_homing_origin[2]); std::string show_gcode_z = std::to_string(gcode_z_position); z_offset = z_offset.substr(0, z_offset.find(".") + 4); show_gcode_z = show_gcode_z.substr(0, show_gcode_z.find(".") + 4); send_cmd_txt(tty_fd, "t4", printer_print_stats_filename.substr(printer_print_stats_filename.rfind("/") +1 )); if (z_offset != mks_babystep_value) { mks_babystep_value = z_offset; set_mks_babystep(mks_babystep_value); } send_cmd_txt(tty_fd, "t2", show_gcode_z); send_cmd_txt(tty_fd, "t3", z_offset); send_cmd_txt(tty_fd, "t0", show_time((int)(printer_print_stats_print_duration))); send_cmd_val(tty_fd, "n7", std::to_string(printer_display_status_progress)); send_cmd_txt(tty_fd, "t1", show_time(get_cal_printing_time((int)(printer_print_stats_print_duration), file_metadata_estimated_time, printer_display_status_progress))); send_cmd_val(tty_fd, "j0", std::to_string(printer_display_status_progress)); if (printer_set_offset == (float)0.01) { send_cmd_picc(tty_fd, "b1", std::to_string(57)); send_cmd_picc2(tty_fd, "b1", std::to_string(60)); send_cmd_picc(tty_fd, "b2", std::to_string(58)); send_cmd_picc2(tty_fd, "b2", std::to_string(59)); send_cmd_picc(tty_fd, "b3", std::to_string(58)); send_cmd_picc2(tty_fd, "b3", std::to_string(59)); send_cmd_picc(tty_fd, "b4", std::to_string(58)); send_cmd_picc2(tty_fd, "b4", std::to_string(59)); } else if (printer_set_offset == (float)0.05) { send_cmd_picc(tty_fd, "b1", std::to_string(58)); send_cmd_picc2(tty_fd, "b1", std::to_string(59)); send_cmd_picc(tty_fd, "b2", std::to_string(57)); send_cmd_picc2(tty_fd, "b2", std::to_string(60)); send_cmd_picc(tty_fd, "b3", std::to_string(58)); send_cmd_picc2(tty_fd, "b3", std::to_string(59)); send_cmd_picc(tty_fd, "b4", std::to_string(58)); send_cmd_picc2(tty_fd, "b4", std::to_string(59)); } else if (printer_set_offset == (float)0.1) { send_cmd_picc(tty_fd, "b1", std::to_string(58)); send_cmd_picc2(tty_fd, "b1", std::to_string(59)); send_cmd_picc(tty_fd, "b2", std::to_string(58)); send_cmd_picc2(tty_fd, "b2", std::to_string(59)); send_cmd_picc(tty_fd, "b3", std::to_string(57)); send_cmd_picc2(tty_fd, "b3", std::to_string(60)); send_cmd_picc(tty_fd, "b4", std::to_string(58)); send_cmd_picc2(tty_fd, "b4", std::to_string(59)); } else if (printer_set_offset == (float)0.5) { send_cmd_picc(tty_fd, "b1", std::to_string(58)); send_cmd_picc2(tty_fd, "b1", std::to_string(59)); send_cmd_picc(tty_fd, "b2", std::to_string(58)); send_cmd_picc2(tty_fd, "b2", std::to_string(59)); send_cmd_picc(tty_fd, "b3", std::to_string(58)); send_cmd_picc2(tty_fd, "b3", std::to_string(59)); send_cmd_picc(tty_fd, "b4", std::to_string(57)); send_cmd_picc2(tty_fd, "b4", std::to_string(60)); } if (printer_print_stats_state == "printing") { printer_ready = true; } if (filament_switch_sensor_fila_enabled == true) { if (filament_switch_sensor_fila_filament_detected == false) { printer_ready = false; set_print_pause(); page_to(TJC_PAGE_PRINT_NO_FILAMENT_2); } } //4.4.2 CLL 适配mates与霍尔耗材宽度检测器 if (filament_detected == false) { sleep(1); printer_ready = false; set_print_pause(); page_to(TJC_PAGE_PRINT_NO_FILAMENT); } if (printer_print_stats_state == "standby") { page_to(TJC_PAGE_PRINT_STOPPING); } if (printer_print_stats_state == "paused") { if (printer_ready == true) { printer_ready = false; page_to(TJC_PAGE_PRINT_FILAMENT); } } if (printer_print_stats_state == "complete") { std::string time_duration = show_time((int)(printer_print_stats_print_duration)); complete_print(); clear_previous_data(); sleep(5); save_current_zoffset(); page_to(TJC_PAGE_PRINT_FINISH); send_cmd_txt(tty_fd, "t1", time_duration); } if (printer_print_stats_state == "error") { page_to(TJC_PAGE_GCODE_ERROR); cancel_print(); clear_previous_data(); send_cmd_txt(tty_fd , "t0", "gcode error:" + error_message); } } void refresh_page_printing() { std::string z_offset = std::to_string(printer_gcode_move_homing_origin[2]); z_offset = z_offset.substr(0, z_offset.find(".") + 4); send_cmd_val(tty_fd, "j0", std::to_string(printer_display_status_progress)); send_cmd_val(tty_fd, "n7", std::to_string(printer_display_status_progress)); send_cmd_txt(tty_fd, "t2", show_time((int)(printer_print_stats_print_duration))); send_cmd_txt(tty_fd, "t3", show_time(get_cal_printing_time((int)(printer_print_stats_print_duration), file_metadata_estimated_time, printer_display_status_progress))); send_cmd_txt(tty_fd, "t4", printer_print_stats_filename.substr(printer_print_stats_filename.rfind("/") +1 )); if (printing_keyboard_enabled == false) { // CLL 当未进入键盘时重复执行刷新函数 if (current_page_id == TJC_PAGE_PRINTING) { // CLL 刷新风扇速率 send_cmd_val(tty_fd, "n4", std::to_string((int)(printer_out_pin_fan0_value * 100))); send_cmd_val(tty_fd, "n5", std::to_string((int)(printer_out_pin_fan2_value * 100))); send_cmd_val(tty_fd, "n6", std::to_string((int)(printer_out_pin_fan3_value * 100))); send_cmd_txt(tty_fd, "t0", std::to_string(printer_extruder_temperature)); send_cmd_val(tty_fd, "n0", std::to_string(printer_extruder_target)); if (printer_extruder_target == 0) { // CLL 根据喷头是否加热改变按钮和数字颜色 send_cmd_pco(tty_fd, "t0", "65535"); send_cmd_picc(tty_fd, "b0", "53"); send_cmd_picc2(tty_fd, "b0", "51"); } else { send_cmd_pco(tty_fd, "t0", "63488"); send_cmd_picc(tty_fd, "b0", "54"); send_cmd_picc2(tty_fd, "b0", "52"); } send_cmd_txt(tty_fd, "t1", std::to_string(printer_heater_bed_temperature)); send_cmd_val(tty_fd, "n1", std::to_string(printer_heater_bed_target)); if (printer_heater_bed_target == 0) { // CLL 根据热床是否加热改变按钮和数字颜色 send_cmd_pco(tty_fd, "t1", "65535"); send_cmd_picc(tty_fd, "b1", "53"); send_cmd_picc2(tty_fd, "b1", "51"); } else { send_cmd_pco(tty_fd, "t1", "63488"); send_cmd_picc(tty_fd, "b1", "54"); send_cmd_picc2(tty_fd, "b1", "52"); } if (printer_caselight_value == 0) { // CLL 判断当前LED状态 send_cmd_picc(tty_fd, "b3", "53"); send_cmd_picc2(tty_fd, "b3", "52"); } else { send_cmd_picc(tty_fd, "b3", "54"); send_cmd_picc2(tty_fd, "b3", "51"); } send_cmd_val(tty_fd, "n2", std::to_string(printer_hot_target)); // CLL 获取热腔温度 send_cmd_txt(tty_fd, "t5", std::to_string(printer_hot_temperature)); if (printer_hot_target == 0) { // CLL 根据热床是否加热改变按钮和数字颜色 send_cmd_pco(tty_fd, "t5", "65535"); send_cmd_picc(tty_fd, "b7", "53"); send_cmd_picc2(tty_fd, "b7", "51"); } else { send_cmd_pco(tty_fd, "t5", "63488"); send_cmd_picc(tty_fd, "b7", "54"); send_cmd_picc2(tty_fd, "b7", "52"); } if (show_preview_gimage_completed == true) { send_cmd_vis(tty_fd, "cp0", "1"); send_cmd_val(tty_fd, "v999", "1"); } else { send_cmd_vis(tty_fd, "cp0", "0"); send_cmd_val(tty_fd, "v999", "0"); } } else if (current_page_id == TJC_PAGE_PRINTING_2) { send_cmd_txt(tty_fd, "t1", z_offset); //刷新zoffset值 if (current_speed_factor != printer_gcode_move_speed_factor) { // CLL 刷新移动速率 current_speed_factor = printer_gcode_move_speed_factor; send_cmd_val(tty_fd, "n2", std::to_string((int)(round(printer_gcode_move_speed_factor * 100)))); } if (current_extruder_factor != printer_gcode_move_extrude_factor) { // CLL 刷新挤出速率 current_extruder_factor = printer_gcode_move_extrude_factor; send_cmd_val(tty_fd, "n3", std::to_string((int)(round(printer_gcode_move_extrude_factor * 100)))); } } } if (printer_print_stats_state == "printing") { printer_ready = true; } if (filament_switch_sensor_fila_enabled == true) { if (filament_switch_sensor_fila_filament_detected == false) { printer_ready = false; set_print_pause(); page_to(TJC_PAGE_PRINT_NO_FILAMENT_2); } } if (filament_detected == false) { sleep(1); printer_ready = false; set_print_pause(); page_to(TJC_PAGE_PRINT_NO_FILAMENT); } if (printer_print_stats_state == "complete") { std::string time_duration = show_time((int)(printer_print_stats_print_duration)); complete_print(); clear_previous_data(); sleep(5); save_current_zoffset(); page_to(TJC_PAGE_PRINT_FINISH); send_cmd_txt(tty_fd, "t1", time_duration); } if (printer_print_stats_state == "paused") { if (printer_ready == true) { printer_ready = false; page_to(TJC_PAGE_PRINT_FILAMENT); } } if (printer_print_stats_state == "standby") { page_to(TJC_PAGE_PRINT_STOPPING); } if (printer_print_stats_state == "error") { page_to(TJC_PAGE_GCODE_ERROR); cancel_print(); clear_previous_data(); send_cmd_txt(tty_fd, "t0", "gcode error:" + error_message); } } void clear_page_printing_arg() { current_extruder_temperature = 0; current_extruder_target = 0; current_heater_bed_target = 0; current_heater_bed_temperature = 0; current_hot_target = 0; current_hot_temperature = 0; current_out_pin_fan0_value = 0; current_out_pin_fan2_value = 0; current_out_pin_fan3_value = 0; current_speed_factor = 0; current_extruder_factor = 0; } void refresh_page_preview() { if (printer_bed_leveling == true) { send_cmd_picc(tty_fd, "b2", "45"); send_cmd_picc2(tty_fd, "b2", "45"); }else { send_cmd_picc(tty_fd, "b2", "46"); send_cmd_picc2(tty_fd, "b2", "46"); } if (mks_file_parse_finished == true) { if (show_preview_complete == false) { //4.4.2 CLL 修改当前在预览图界面仅能看到文件名称 send_cmd_txt(tty_fd, "t0", file_metadata_filename.substr(file_metadata_filename.rfind("/") + 1)); if (file_metadata_estimated_time) { send_cmd_txt(tty_fd, "t1", show_time(file_metadata_estimated_time)); } else { send_cmd_txt(tty_fd, "t1", "-"); } if (file_metadata_filament_weight_total) { std::string temp = std::to_string(file_metadata_filament_weight_total); send_cmd_txt(tty_fd, "t2", temp.substr(0, temp.find(".") + 2) + "g"); } else { send_cmd_txt(tty_fd, "t2", "-"); } if (file_metadata_filament_total) { std::string temp = std::to_string(file_metadata_filament_total / 1000); send_cmd_txt(tty_fd, "t3", temp.substr(0, temp.find(".") + 2) + "m"); } else { send_cmd_txt(tty_fd, "t3", "-"); } if (file_metadata_filament_type != "") { send_cmd_txt(tty_fd, "t4", file_metadata_filament_type); } else if (file_metadata_filament_name != ""){ send_cmd_txt(tty_fd, "t4", file_metadata_filament_name); } else { send_cmd_txt(tty_fd, "t4", "-"); } bool path_found = false; std::string picture_path; if (jump_to_print == true) { picture_path = "/.cache/.thumbs/" + printer_print_stats_filename.substr(printer_print_stats_filename.rfind("/") + 1, printer_print_stats_filename.rfind(".") - (printer_print_stats_filename.rfind("/") + 1)); } else if (cache_clicked == true) { picture_path = page_files_path_stack.top() + "/.cache/.thumbs/" + file_metadata_filename.substr(file_metadata_filename.rfind("/") + 1, file_metadata_filename.rfind(".") - (file_metadata_filename.rfind("/") + 1)); cache_clicked = false; } else { picture_path = page_files_path_stack.top() + "/.thumbs/" + file_metadata_filename.substr(file_metadata_filename.rfind("/") + 1, file_metadata_filename.rfind(".") - (file_metadata_filename.rfind("/") + 1)); } if (path_found == false) { picture_path = picture_path.substr(1); MKSLOG_RED("picture_path:%s", picture_path.c_str()); char relative_path[1024]; sprintf(relative_path, "/home/mks/gcode_files/%s-160x160.png", picture_path.c_str()); // CLL 先在目录下寻找168x168像素图片 MKSLOG("relative_path:%s", relative_path); if (access(relative_path, F_OK) == 0) { path_found = true; picture_path = picture_path + "-160x160.png"; } else { sprintf(relative_path, "/home/mks/gcode_files/%s-160x160.jpg",picture_path.c_str()); // CLL 再在目录下寻找32x32像素图片 if (access(relative_path, F_OK) == 0) { path_found = true; picture_path = picture_path + "-160x160.jpg"; } } } MKSLOG_BLUE("图片路径:%s", picture_path.c_str()); if (picture_path == "") { path_found = false; } if (path_found == true) { // 刷小图 if (show_preview_gimage_completed == false) { output_imgdata(picture_path, 160); std::ifstream simage_infile("/home/mks/tjc"); if (!simage_infile) { std::cerr << "无法打开文件 " << "/home/mks/tjc" << std::endl; show_preview_complete = true; return; } std::stringstream simage_buffer; simage_buffer << simage_infile.rdbuf(); file_metadata_simage = simage_buffer.str(); simage_infile.close(); send_cmd_txt(tty_fd, "preview.cp0_text", ""); send_cmd_txt(tty_fd, "preview.add", ""); if (file_metadata_simage != "") { send_cmd_baud(tty_fd, 921600); usleep(50000); set_option(tty_fd, 921600, 8, 'N', 1); std::cout << "刷小图" << std::endl; int num = 2048; int len = file_metadata_simage.length(); int end = num; std::string s; for (int start = 0; start < len;) { if (end > len) { s = file_metadata_simage.substr(start, len - start); send_cmd_txt(tty_fd, "add", s); tcdrain(tty_fd); send_cmd_txt_plus(tty_fd, "cp0_text", "cp0_text", "add"); tcdrain(tty_fd); break; } s = file_metadata_simage.substr(start, num); start = end; end = end + num; send_cmd_txt(tty_fd, "add", s); tcdrain(tty_fd); send_cmd_txt_plus(tty_fd, "cp0_text", "cp0_text", "add"); tcdrain(tty_fd); // usleep(50000); } send_cmd_baud(tty_fd, 115200); usleep(50000); set_option(tty_fd, 115200, 8, 'N', 1); } // 刷大图 if (jump_to_print == false) { // output_imgdata(thumbnail_path, 168); std::ifstream infile("/home/mks/tjc"); // 打开文件 if (!infile) { std::cerr << "无法打开文件 " << "/home/mks/tjc" << std::endl; show_preview_complete = true; return; } std::stringstream buffer; buffer << infile.rdbuf(); file_metadata_gimage = buffer.str(); infile.close(); send_cmd_baud(tty_fd, 921600); usleep(50000); set_option(tty_fd, 921600, 8, 'N', 1); send_cmd_cp_close(tty_fd, "preview.cp0"); if (file_metadata_gimage != "") { std::cout << "刷大图" << std::endl; // std::cout << "图片字符串的大小为: " << file_metadata_gimage.length() << std::endl; // std::cout << "图片的字节大小为:" << file_metadata_gimage.size() << std::endl; int num = 2048; int len = file_metadata_gimage.length(); int end = num; std::string g; // int i = 0; for (int start = 0; start < len;) { if (end > len) { g = file_metadata_gimage.substr(start, len - start); // std::cout << "字串" << i << ":" << s << std::endl; tcdrain(tty_fd); send_cmd_cp_image(tty_fd, "cp0", g); break; } g = file_metadata_gimage.substr(start, num); start = end; end = end + num; // std::cout << "字串" << i << ":" << s << std::endl; // i++; tcdrain(tty_fd); send_cmd_cp_image(tty_fd, "cp0", g); // usleep(50000); } } send_cmd_baud(tty_fd, 115200); usleep(50000); set_option(tty_fd, 115200, 8, 'N', 1); bed_leveling_switch(true); } show_preview_gimage_completed = true; } } if (show_preview_gimage_completed == true) { send_cmd_vis(tty_fd, "cp0", "1"); } else { send_cmd_vis(tty_fd, "cp0", "0"); } show_preview_complete = true; if (jump_to_print == true) { //printed_file_path = "/" + printer_print_stats_filename; check_filament_type(); jump_to_print = false; } } } } void refresh_page_main() { send_cmd_val(tty_fd, "n0", std::to_string(printer_extruder_temperature)); send_cmd_val(tty_fd, "n1", std::to_string(printer_heater_bed_temperature)); send_cmd_val(tty_fd, "n2", std::to_string(printer_hot_temperature)); if (detect_disk() == 0) { // CLL 是否已插入U盘 send_cmd_picc(tty_fd, "q1", "32"); } else { send_cmd_picc(tty_fd, "q1", "33"); } if (strcmp(status_result.wpa_state, "COMPLETED") == 0) { // CLL 是否已连接wifi send_cmd_picc(tty_fd, "q0", "32"); } else { send_cmd_picc(tty_fd, "q0", "33"); } if (printer_caselight_value == 0) { // LED灯的logo send_cmd_picc(tty_fd, "b0", "32"); send_cmd_picc2(tty_fd, "b0", "30"); } else { send_cmd_picc(tty_fd, "b0", "33"); send_cmd_picc2(tty_fd, "b0", "31"); } if (printer_out_pin_beep_value == 0) { send_cmd_picc(tty_fd, "b1", "32"); send_cmd_picc2(tty_fd, "b1", "30"); } else { send_cmd_picc(tty_fd, "b1", "33"); send_cmd_picc2(tty_fd, "b1", "31"); } if (printer_extruder_target == 0) { // CLL 主页喷嘴是否加热刷新 send_cmd_pco(tty_fd, "n0", "65535"); send_cmd_picc(tty_fd, "b3", "32"); send_cmd_picc2(tty_fd, "b3", "30"); } else { send_cmd_pco(tty_fd, "n0", "63488"); send_cmd_picc(tty_fd, "b3", "33"); send_cmd_picc2(tty_fd, "b3", "31"); } if (printer_heater_bed_target == 0) { // CLL 主页热床按钮是否加热刷新 send_cmd_pco(tty_fd, "n1", "65535"); send_cmd_picc(tty_fd, "b4", "32"); send_cmd_picc2(tty_fd, "b4", "30"); } else { send_cmd_pco(tty_fd, "n1", "63488"); send_cmd_picc(tty_fd, "b4", "33"); send_cmd_picc2(tty_fd, "b4", "31"); } if (printer_hot_target == 0) { // CLL 主页热腔按钮是否加热刷新 send_cmd_pco(tty_fd, "n2", "65535"); send_cmd_picc(tty_fd, "b5", "32"); send_cmd_picc2(tty_fd, "b5", "30"); } else { send_cmd_pco(tty_fd, "n2", "63488"); send_cmd_picc(tty_fd, "b5", "33"); send_cmd_picc2(tty_fd, "b5", "31"); } // CLL 每次开机或打印后执行图片刷新 if (main_picture_refreshed == false) { // CLL 获取文件信息 page_files_pages = 0; page_files_current_pages = 0; page_files_folder_layers = 0; page_files_previous_path = ""; page_files_root_path = DEFAULT_DIR; page_files_path = ""; refresh_page_files(page_files_current_pages); if (page_files_list_show_type[0] == "[c]") { send_cmd_txt(tty_fd, "t0", page_files_list_show_name[0]); std::string picture_path = page_files_path + "/.cache/.thumbs/" + page_files_list_show_name[0].substr(0, page_files_list_show_name[0].rfind(".")); picture_path = picture_path.substr(1); MKSLOG_RED("图片路径:%s", picture_path.c_str()); char relative_path[1024]; sprintf(relative_path, "/home/mks/gcode_files/%s-160x160.png", picture_path.c_str()); if (access(relative_path, F_OK) == 0) { MKSLOG_RED("找到png图片"); send_cmd_pic(tty_fd, "b[0]", "29"); send_cmd_picc(tty_fd, "b6", "29"); send_cmd_picc2(tty_fd, "b6", "30"); send_cmd_vis(tty_fd, "cp0", "1"); refresh_files_list_picture(picture_path + "-160x160.png", 160, 0); main_picture_detected = true; } else { sprintf(relative_path, "/home/mks/gcode_files/%s-160x160.jpg", picture_path.c_str()); if (access(relative_path, F_OK) == 0) { MKSLOG_RED("找到jpg图片"); send_cmd_pic(tty_fd, "b[0]", "29"); send_cmd_picc(tty_fd, "b6", "29"); send_cmd_picc2(tty_fd, "b6", "30"); refresh_files_list_picture(picture_path + "-160x160.jpg", 160, 0); main_picture_detected = true; } else { send_cmd_pic(tty_fd, "b[0]", "26"); send_cmd_picc(tty_fd, "b6", "26"); send_cmd_picc2(tty_fd, "b6", "31"); send_cmd_vis(tty_fd, "cp0", "0"); } } } else { send_cmd_pic(tty_fd, "b[0]", "26"); send_cmd_picc(tty_fd, "b6", "26"); send_cmd_picc2(tty_fd, "b6", "31"); send_cmd_txt(tty_fd, "t0", ""); send_cmd_vis(tty_fd, "cp0", "0"); } main_picture_refreshed = true; } // CLL 每次开机发送断电续打 if (open_reprint_asked == false) { ep->Send(json_run_a_gcode("KINEMATIC_POSITION\n")); open_reprint_asked = true; } } void refresh_page_files_list() { send_cmd_vis(tty_fd, "q0", "0"); for (int i = 0; i < 4; i++) { send_cmd_txt(tty_fd, "t" + std::to_string(i + 1), page_files_list_show_name[i]); send_cmd_vis(tty_fd, "cp" + std::to_string(i), "0"); if (page_files_list_show_type[i] =="[c]") { send_cmd_picc(tty_fd, "b" + std::to_string(i+1), "40"); send_cmd_picc2(tty_fd, "b" + std::to_string(i+1), "37"); send_cmd_vis(tty_fd, "q0", "1"); } else if (page_files_list_show_type[i] == "[d]") { send_cmd_picc(tty_fd, "b" + std::to_string(i + 1), "41"); send_cmd_picc2(tty_fd, "b" + std::to_string(i + 1), "39"); } else if (page_files_list_show_type[i] == "[f]") { send_cmd_picc(tty_fd, "b" + std::to_string(i + 1), "40"); send_cmd_picc2(tty_fd, "b" + std::to_string(i + 1), "37"); } else if (page_files_list_show_type[i] == "[n]") { send_cmd_picc(tty_fd, "b" + std::to_string(i + 1), "34"); send_cmd_picc2(tty_fd, "b" + std::to_string(i + 1), "34"); } } //4.4.2 CLL 文件列表界面新增本地、U盘文件按钮 if (file_mode == "Local") { send_cmd_picc(tty_fd, "b12", "35"); send_cmd_picc2(tty_fd, "b12", "37"); send_cmd_picc(tty_fd, "b13", "35"); send_cmd_picc2(tty_fd, "b13", "37"); } else if (file_mode == "USB") { send_cmd_picc(tty_fd, "b12", "34"); send_cmd_picc2(tty_fd, "b12", "36"); send_cmd_picc(tty_fd, "b13", "34"); send_cmd_picc2(tty_fd, "b13", "36"); if (detect_disk() == -1) { send_cmd_vis(tty_fd, "t0", "1"); } } /* else if (file_mode == "NULL") { send_cmd_picc(tty_fd, "b12", "34"); send_cmd_picc2(tty_fd, "b12", "36"); send_cmd_picc(tty_fd, "b13", "34"); send_cmd_picc2(tty_fd, "b13", "36"); send_cmd_vis(tty_fd, "t0", "1"); } */ if (page_files_current_pages == 0) { send_cmd_picc(tty_fd, "b10", std::to_string(40)); send_cmd_picc2(tty_fd, "b10", std::to_string(39)); } else { send_cmd_picc(tty_fd, "b10", std::to_string(41)); send_cmd_picc2(tty_fd, "b10", std::to_string(37)); } if (page_files_current_pages == page_files_pages) { send_cmd_picc(tty_fd, "b11", std::to_string(40)); send_cmd_picc2(tty_fd, "b11", std::to_string(39)); } else { send_cmd_picc(tty_fd, "b11", std::to_string(41)); send_cmd_picc2(tty_fd, "b11", std::to_string(37)); } if (page_files_folder_layers == 0 || (page_files_folder_layers == 1 && file_mode != "Local")) { send_cmd_picc(tty_fd, "b0", std::to_string(40)); send_cmd_picc2(tty_fd, "b0", std::to_string(39)); } else { send_cmd_picc(tty_fd, "b0", std::to_string(41)); send_cmd_picc2(tty_fd, "b0", std::to_string(37)); } delete_small_jpg(); std::string picture_path; for (int i = 0; i < 4; i++) { // CLL 其他控件刷新完后统一刷新图片 have_64_jpg[i] = false; have_64_png_path[i].clear(); if (page_files_list_show_type[i] =="[c]" || page_files_list_show_type[i] == "[f]") { if (page_files_list_show_type[i]== "[c]") { picture_path = page_files_path + "/.cache/.thumbs/" + page_files_list_show_name[i].substr(0, page_files_list_show_name[i].rfind(".")); } else { picture_path = page_files_path + "/.thumbs/" + page_files_list_show_name[i].substr(0, page_files_list_show_name[i].rfind(".")); } picture_path = picture_path.substr(1); MKSLOG_RED("图片路径:%s", picture_path.c_str()); char relative_path[1024]; sprintf(relative_path, "/home/mks/gcode_files/%s-112x112_QD.jpg", picture_path.c_str()); if (access(relative_path, F_OK) == 0) { have_64_jpg[i] = true; have_64_png_path[i] = picture_path + "-112x112_QD.jpg"; refresh_files_list_picture_2(picture_path + "-112x112_QD.jpg", 112, i); } /* else { sprintf(relative_path, "/home/mks/gcode_files/%s-32x32.png", picture_path.c_str()); if (access(relative_path, F_OK) == 0) { have_64_jpg[i] = true; have_64_png_path[i] = picture_path + "-32x32.png"; refresh_files_list_picture_2(picture_path + "-32x32.png", 112, i); } } */ } } } void refresh_page_files(int pages) { get_page_files_filelist(page_files_root_path + page_files_path); set_page_files_show_list(pages); } /* 订阅内容处理 */ void sub_object_status() { ep->Send(json_subscribe_to_printer_object_status(subscribe_objects_status())); } void get_object_status() { ep->Send(json_query_printer_object_status(subscribe_objects_status())); } void get_file_estimated_time(std::string filename) { ep->Send(json_get_gcode_metadata(filename)); } void delete_file(std::string filepath) { filelist_changed = false; ep->Send(json_file_delete(filepath)); while (!filelist_changed); } void start_printing(std::string filepath) { ep->Send(json_print_a_file(filepath)); } void set_target(std::string heater, int target) { ep->Send(json_run_a_gcode(set_heater_temp(heater, target))); } void set_extruder_target(int target) { set_target("extruder", target); } void set_heater_bed_target(int target) { set_target("heater_bed", target); } void set_hot_target(int target) { ep->Send(json_run_a_gcode("M141 S" + std::to_string(target))); } void set_fan(int speed) { ep->Send(json_run_a_gcode(set_fan_speed(speed))); } void set_fan0(int speed) { ep->Send(json_run_a_gcode(set_fan0_speed(speed))); } void set_fan2(int speed) { ep->Send(json_run_a_gcode(set_fan2_speed(speed))); } void set_fan3(int speed) { ep->Send(json_run_a_gcode(set_fan3_speed(speed))); } void set_intern_zoffset(float offset) { printer_set_offset = offset; } void set_zoffset(bool positive) { // std::string command; // if (positive) { // command = "curl -s -X POST http://127.0.0.1:7125/printer/modifybabystep?ADJUST=" + std::to_string(printer_set_offset); // } else { // command = "curl -s -X POST http://127.0.0.1:7125/printer/modifybabystep?ADJUST=-" + std::to_string(printer_set_offset); // } // system(command.c_str()); if (positive == true) { ep->Send(json_run_a_gcode("SET_GCODE_OFFSET Z_ADJUST=+" + std::to_string(printer_set_offset) + " MOVE=1")); } else { ep->Send(json_run_a_gcode("SET_GCODE_OFFSET Z_ADJUST=-" + std::to_string(printer_set_offset) + " MOVE=1")); } } void set_move_dist(float dist) { printer_move_dist = dist; } void set_printer_speed(int speed) { std::cout << "Rate = " << std::to_string(speed) << std::endl; ep->Send(json_run_a_gcode(set_speed_rate(std::to_string(speed)))); } void set_printer_flow(int rate) { ep->Send(json_run_a_gcode("M221 S" + (std::to_string(rate)))); } std::string show_time(int seconds) { return std::to_string((int)(seconds/3600)) + "h" + std::to_string((int)((seconds % 3600) / 60)) + "m"; } void move_home() { ep->Send(json_run_a_gcode("G28\n")); } void move_x_decrease() { ep->Send(move(AXIS_X, "-" + std::to_string(printer_move_dist), 130)); } void move_x_increase() { ep->Send(move(AXIS_X, "+" + std::to_string(printer_move_dist), 130)); } void move_y_decrease() { ep->Send(move(AXIS_Y, "-" + std::to_string(printer_move_dist), 130)); } void move_y_increase() { ep->Send(move(AXIS_Y, "+" + std::to_string(printer_move_dist), 130)); } void move_z_decrease() { ep->Send(move(AXIS_Z, "-" + std::to_string(printer_move_dist), 10)); } void move_z_increase() { ep->Send(move(AXIS_Z, "+" + std::to_string(printer_move_dist), 10)); } bool get_filament_detected() { return filament_switch_sensor_fila_filament_detected; } bool get_filament_detected_enable() { return filament_switch_sensor_fila_enabled; } bool get_print_pause_resume() { return printer_pause_resume_is_paused; } void set_print_pause_resume() { if (printer_pause_resume_is_paused == false) { ep->Send(json_run_a_gcode("PAUSE")); } else { ep->Send(json_run_a_gcode("RESUME")); } } void set_print_pause() { ep->Send(json_run_a_gcode("PAUSE")); } void set_print_resume() { ep->Send(json_run_a_gcode("RESUME")); } void cancel_print() { printer_print_stats_filename = ""; system("curl -X POST http://127.0.0.1:7125/printer/breakmacro"); system("curl -X POST http://127.0.0.1:7125/printer/breakheater"); ep->Send(json_run_a_gcode("CANCEL_PRINT")); int printed_minutes = get_cal_printed_time((int)(printer_print_stats_print_duration)); get_mks_total_printed_time(); mks_total_printed_minutes = mks_total_printed_minutes + printed_minutes; std::cout << "@@@@@@ " << printed_minutes << std::endl; set_mks_total_printed_time(mks_total_printed_minutes); usleep(10000); sdcard_reset_file(); } void sdcard_reset_file() { ep->Send(json_run_a_gcode("SDCARD_RESET_FILE")); } void set_auto_level_dist(float dist) { MKSLOG_BLUE("SET"); auto_level_dist = dist; } void start_auto_level() { step_1 = false; step_2 = false; step_3 = false; step_4 = false; if (start_pre_auto_level == false) { printer_idle_timeout_state = "Printing"; } page_to(TJC_PAGE_AUTO_MOVING); set_heater_bed_target(mks_heater_bed_target); ep->Send(json_run_a_gcode("M4029")); } //4.4.1 CLL 修改调平 void start_auto_level_dist(bool positive) { if (positive == true) { //ep->Send(json_run_a_gcode("TESTZ Z=" + std::to_string(auto_level_dist))); ep->Send(json_run_a_gcode("SET_GCODE_OFFSET Z_ADJUST=" + std::to_string(auto_level_dist) + " MOVE=1")); } else { //ep->Send(json_run_a_gcode("TESTZ Z=-" + std::to_string(auto_level_dist))); ep->Send(json_run_a_gcode("SET_GCODE_OFFSET Z_ADJUST=-" + std::to_string(auto_level_dist) + " MOVE=1")); } } void set_filament_extruder_target(bool positive) { get_mks_extruder_target(); printer_filament_extruder_target = mks_extruder_target; if (positive == true) { printer_filament_extruder_target += 3; } else { printer_filament_extruder_target -= 3; } if (printer_filament_extruder_target >= 350) { printer_filament_extruder_target = 350; } if (printer_filament_extruder_target < 0) { printer_filament_extruder_target = 0; set_extruder_target(0); set_mks_extruder_target(0); } else { set_extruder_target(printer_filament_extruder_target); set_mks_extruder_target(printer_filament_extruder_target); } } void set_print_filament_dist(float dist) { printer_filament_extruedr_dist = dist; } void start_retract() { ep->Send(json_run_a_gcode("M83\nG1 E-" + std::to_string(printer_filament_extruedr_dist) + " F300\n")); } void start_extrude() { ep->Send(json_run_a_gcode("M83\nG1 E" + std::to_string(printer_filament_extruedr_dist) + " F300\n")); } std::string get_ip(std::string net) { char result[MAX_FILE_LEN] = {0}; std::string cmd = "ifconfig " + net + " | awk 'NR==2{print $2}' | tr -d '\n\r'"; execute_cmd(cmd.data(), result); return result; } void move_home_tips() { jump_to_move_pop_2 = true; } void filament_tips() { switch (current_page_id) { case TJC_PAGE_OPEN_FILAMENTVIDEO_3: break; case TJC_PAGE_PRINT_FILAMENT: jump_to_print_low_temp = true; break; default: jump_to_filament_pop_1 = true; break; } } void move_tips() { jump_to_move_pop_1 = true; if (current_page_id == TJC_PAGE_PRINTING || current_page_id == TJC_PAGE_PRINT_ZOFFSET || current_page_id == TJC_PAGE_PRINT_FILAMENT || current_page_id == TJC_PAGE_PRINTING_2) { cancel_print(); } } void reset_klipper() { ep->Send(json_run_a_gcode("RESTART\n")); } void reset_firmware() { ep->Send(json_run_a_gcode("FIRMWARE_RESTART\n")); } void finish_print() { sdcard_reset_file(); clear_cp0_image(); clear_page_preview(); show_preview_complete = false; page_to(TJC_PAGE_MAIN); } void set_filament_sensor() { std::cout << "filament_switch_sensor fila = " << filament_switch_sensor_fila_enabled << std::endl; if (filament_switch_sensor_fila_enabled == 0) { ep->Send(json_run_a_gcode("SET_FILAMENT_SENSOR SENSOR=fila ENABLE=1\n")); mks_fila_status = true; set_mks_fila_status(); } else { ep->Send(json_run_a_gcode("SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0\n")); mks_fila_status = false; set_mks_fila_status(); } } void motors_off() { // ep->Send(json_run_a_gcode("M84\n")); ep->Send(json_emergency_stop()); sleep(1); ep->Send(json_run_a_gcode("FIRMWARE_RESTART\n")); // 电机解锁改为急停 } void beep_on_off() { if (printer_out_pin_beep_value == 0) { ep->Send(json_run_a_gcode("beep_on")); mks_beep_status = true; set_mks_beep_status(); } else { ep->Send(json_run_a_gcode("beep_off")); mks_beep_status = false; set_mks_beep_status(); } } void led_on_off() { if (printer_caselight_value == 0) { ep->Send(json_run_a_gcode("SET_PIN PIN=caselight VALUE=1")); if (current_page_id != TJC_PAGE_SCREEN_SLEEP) { mks_led_status = true; set_mks_led_status(); } } else { ep->Send(json_run_a_gcode("SET_PIN PIN=caselight VALUE=0")); if (current_page_id != TJC_PAGE_SCREEN_SLEEP){ mks_led_status = false; set_mks_led_status(); } } } void shutdown_mcu() { system("echo \"SET_PIN PIN=pwc VALUE=0\" > /root/mcu_shutdown.txt"); ep->Send(json_run_a_gcode("SET_PIN PIN=pwc VALUE=0")); } void firmware_reset() { ep->Send(json_run_a_gcode("FIRMWARE_RESTART\n")); } void go_to_page_power_off() { page_to(TJC_PAGE_SHUTDOWN); } int get_mks_led_status() { mksini_load(); mks_led_status = mksini_getboolean("led", "enable", 0); mksini_free(); return mks_led_status; } void set_mks_led_status() { mksini_load(); mksini_set("led", "enable", std::to_string(mks_led_status)); mksini_save(); mksini_free(); } int get_mks_beep_status() { mksini_load(); mks_beep_status = mksini_getboolean("beep", "enable", 0); mksini_free(); return mks_beep_status; } void set_mks_beep_status() { mksini_load(); mksini_set("beep", "enable", std::to_string(mks_beep_status)); mksini_save(); mksini_free(); system("sync"); } void get_mks_language_status() { mksini_load(); mks_language_status = mksini_getint("system", "language", 0); mksini_free(); } void set_mks_language_status() { mksini_load(); mksini_set("system", "language", std::to_string(mks_language_status)); mksini_save(); mksini_free(); } void get_mks_extruder_target() { mksini_load(); mks_extruder_target = mksini_getint("target", "extruder", 200); mksini_free(); } void set_mks_extruder_target(int target) { if (target != 0) { mksini_load(); mksini_set("target", "extruder", std::to_string(target)); mksini_save(); mksini_free(); system("sync"); } } void get_mks_heater_bed_target() { mksini_load(); mks_heater_bed_target = mksini_getint("target", "heaterbed", 40); mksini_free(); } void set_mks_heater_bed_target(int target) { if (target != 0) { mksini_load(); std::cout << "######## " << target << std::endl; mksini_set("target", "heaterbed", std::to_string(target)); mksini_save(); mksini_free(); system("sync"); } } void get_mks_hot_target() { mksini_load(); mks_hot_target = mksini_getint("target", "hot", 40); mksini_free(); } void set_mks_hot_target(int target) { mksini_load(); std::cout << "######## " << target << std::endl; mksini_set("target", "hot", std::to_string(target)); mksini_save(); mksini_free(); system("sync"); } void filament_extruder_target() { get_mks_extruder_target(); if (printer_extruder_target == 0) { set_extruder_target(mks_extruder_target); } else { set_extruder_target(0); } } void filament_heater_bed_target() { get_mks_heater_bed_target(); if (0 == printer_heater_bed_target) { set_heater_bed_target(mks_heater_bed_target); } else { set_heater_bed_target(0); } } void filament_hot_target() { get_mks_hot_target(); if (0 == printer_hot_target) { set_hot_target(mks_hot_target); } else { set_hot_target(0); } } void filament_fan0() { if (printer_out_pin_fan0_value == 0) { set_fan0(100); } else { set_fan0(0); } } void filament_fan2() { if (printer_out_pin_fan2_value == 0) { set_fan2(100); } else { set_fan2(0); } } void filament_fan3() { if (printer_out_pin_fan3_value == 0) { set_fan3(100); } else { set_fan3(0); } } void go_to_reset() { if (printer_webhooks_state == "shutdown") { page_to(TJC_PAGE_RESET); } else { std::ifstream infile("/dev_info.txt"); if (!infile) { std::cerr << "无法打开文件 " << "/dev_info.txt" << std::endl; return; } std::stringstream buffer; buffer << infile.rdbuf(); std::string machine_type = buffer.str(); infile.close(); machine_type = machine_type.substr(machine_type.find("@") + 1); page_to(TJC_PAGE_SYS_OK); std::cout << "machine_type:" << machine_type << std::endl; send_cmd_txt(tty_fd, "t2", machine_type); } } void go_to_network() { if (detected_wlan0()) { mks_wpa_cli_open_connection(); page_wifi_list_ssid_button_enabled[0] = false; page_wifi_list_ssid_button_enabled[1] = false; page_wifi_list_ssid_button_enabled[2] = false; page_wifi_list_ssid_button_enabled[3] = false; page_wifi_list_ssid_button_enabled[4] = false; page_wifi_ssid_list_pages = 0; page_wifi_current_pages = 0; page_to(TJC_PAGE_WIFI_LIST); //4.4.1 CLL 修复WiFi刷新 scan_ssid_and_show(); get_wlan0_status(); if (strcmp(status_result.wpa_state, "COMPLETED") == 0) { current_connected_ssid_name = status_result.ssid; // 如果已经连接wifi,获取wifi的名字 } else if (strcmp(status_result.wpa_state, "INACTIVE")) { current_connected_ssid_name.clear(); // 如果没连接wifi,清除掉当前已连接wifi的名字 } } else { page_to(TJC_PAGE_INTERNET); } } void scan_ssid_and_show() { if (access("/var/run/wpa_supplicant/wlan0", F_OK) == 0){ get_wlan0_status(); mks_wpa_scan_scanresults(); get_ssid_list_pages(); page_wifi_current_pages = 0; set_page_wifi_ssid_list(page_wifi_current_pages); refresh_page_wifi_list(); } else { page_to(TJC_PAGE_INTERNET); } } void refresh_page_wifi_list() { for (int i = 0; i < 5; i++) { std::cout << "刷新的wifi: " << page_wifi_ssid_list[i] << std::endl; if (0 == page_wifi_current_pages) { if (0 == i) { if (strcmp(status_result.wpa_state, "COMPLETED") == 0) { send_cmd_txt(tty_fd, "t" + std::to_string(i+1), status_result.ssid); } else { send_cmd_txt(tty_fd, "t" + std::to_string(i+1), page_wifi_ssid_list[i]); } } else { send_cmd_txt(tty_fd, "t" + std::to_string(i+1), page_wifi_ssid_list[i]); } } else { send_cmd_txt(tty_fd, "t" + std::to_string(i+1), page_wifi_ssid_list[i]); } MKSLOG_BLUE("%d/%d", page_wifi_current_pages + 1, page_wifi_ssid_list_pages); if (page_wifi_current_pages == 0) { if (strcmp(status_result.wpa_state, "COMPLETED") == 0) { send_cmd_picc(tty_fd, "wifi1", "126"); send_cmd_picc2(tty_fd, "wifi1", "124"); page_wifi_list_ssid_button_enabled[0] = false; } else { send_cmd_picc(tty_fd, "wifi1", "125"); send_cmd_picc2(tty_fd, "wifi1", "123"); page_wifi_list_ssid_button_enabled[0] = true; } } else { send_cmd_picc(tty_fd, "wifi1", "125"); send_cmd_picc2(tty_fd, "wifi1", "123"); page_wifi_list_ssid_button_enabled[0] = true; } if (page_wifi_ssid_list[i] == "") { std::cout << "刷新为没有锁的图片" << std::endl; send_cmd_picc(tty_fd, "wifi" + std::to_string(i + 1), "122"); send_cmd_picc2(tty_fd, "wifi" + std::to_string(i + 1), "122"); page_wifi_list_ssid_button_enabled[i] = false; } else { std::cout << "刷新为有锁的图片" << std::endl; send_cmd_picc(tty_fd, "wifi" + std::to_string(i + 1), "125"); send_cmd_picc2(tty_fd, "wifi" + std::to_string(i + 1), "123"); page_wifi_list_ssid_button_enabled[i] = true; } if (page_wifi_ssid_list_pages == 0) { send_cmd_picc(tty_fd, "b1", "126"); send_cmd_picc2(tty_fd, "b1", "123"); send_cmd_picc(tty_fd, "b2", "126"); send_cmd_picc2(tty_fd, "b2", "123"); } else { if (page_wifi_current_pages == 0) { send_cmd_picc(tty_fd, "b1", "126"); send_cmd_picc2(tty_fd, "b1", "123"); } else { send_cmd_picc(tty_fd, "b1", "125"); send_cmd_picc2(tty_fd, "b1", "124"); } if (page_wifi_current_pages == page_wifi_ssid_list_pages - 1) { send_cmd_picc(tty_fd, "b2", "126"); send_cmd_picc2(tty_fd, "b2", "123"); } else { send_cmd_picc(tty_fd, "b2", "125"); send_cmd_picc2(tty_fd, "b2", "124"); } } } } void refresh_page_wifi_list_2() { send_cmd_txt(tty_fd, "t0", status_result.ip_address); if (strcmp(status_result.wpa_state, "COMPLETED") == 0) { } else if (strcmp(status_result.wpa_state, "INACTIVE")) { } } void get_wifi_list_ssid(int index) { get_wifi_name.clear(); get_wifi_name = page_wifi_ssid_list[index]; } void set_print_filament_target() { if (0 == printer_extruder_target) { get_mks_extruder_target(); set_extruder_target(mks_extruder_target); } else { set_extruder_target(0); } } void complete_print() { if (page_printing_shutdown_enable == false) { ep->Send(json_run_a_gcode("PRINT_END")); } else { ep->Send(json_run_a_gcode("PRINT_END_POWEROFF")); } int printed_minutes = get_cal_printed_time((int)(printer_print_stats_print_duration)); get_mks_total_printed_time(); mks_total_printed_minutes = mks_total_printed_minutes + printed_minutes; std::cout << "@@@@@@ " << printed_minutes << std::endl; set_mks_total_printed_time(mks_total_printed_minutes); } void back_to_main() { clear_previous_data(); page_to(TJC_PAGE_MAIN); } void go_to_syntony_move() { step_1 = false; page_syntony_finished = false; printer_idle_timeout_state = "Printing"; page_to(TJC_PAGE_SYNTONY_MOVE); ep->Send(json_run_a_gcode("M901\n")); } void print_ssid_psk(char *psk) { MKSLOG_RED("SSID is %s", get_wifi_name.c_str()); MKSLOG_RED("PSK is %s", psk); mks_set_ssid(const_cast(get_wifi_name.c_str())); mks_set_psk(psk); } void clear_page_preview() { file_metadata_filename = ""; file_metadata_estimated_time = 0; file_metadata_filament_weight_total = 0; file_metadata_filament_name = ""; file_metadata_filament_type = ""; file_metadata_simage = ""; file_metadata_gimage = ""; } void set_mks_babystep(std::string value) { mksini_load(); mksini_set("babystep", "value", value); mksini_save(); mksini_free(); system("sync"); } void get_mks_babystep() { mksini_load(); mks_babystep_value = mksini_getstring("babystep", "value", "0.000"); mks_adxl_offset = mksini_getstring("babystep", "adxl_offset", "0.000"); mksini_free(); } void clear_cp0_image() { send_cmd_cp_close(tty_fd, "preview.cp0"); send_cmd_txt(tty_fd, "preview.cp0_text", ""); send_cmd_txt(tty_fd, "preview.add", ""); show_preview_gimage_completed = false; mks_file_parse_finished = false; file_metadata_simage.clear(); file_metadata_gimage.clear(); } void printer_set_babystep() { get_mks_babystep(); ep->Send(json_run_a_gcode("SET_GCODE_OFFSET Z=" + mks_babystep_value + " MOVE=0")); } int get_mks_fila_status() { mksini_load(); mks_fila_status = mksini_getboolean("fila", "enable", 0); mksini_free(); return mks_fila_status; } void set_mks_fila_status() { mksini_load(); mksini_set("fila", "enable", std::to_string(mks_fila_status)); mksini_save(); mksini_free(); system("sync"); } void init_mks_status() { get_mks_total_printed_time(); get_mks_babystep(); get_mks_connection_method(); get_mks_ethernet(); // 不再使用xindi获取zoffset // printer_set_babystep(); /* if (get_mks_beep_status() == 0) { MKSLOG_RED("关闭蜂鸣器"); if (get_mks_led_status() == 0) { MKSLOG_BLUE("关掉LED灯"); ep->Send(json_run_a_gcode("beep_off\nSET_PIN PIN=caselight VALUE=0\n")); if (get_mks_fila_status() == 0) { MKSLOG_BLUE("关掉断料检测"); ep->Send(json_run_a_gcode("beep_off\nSET_PIN PIN=caselight VALUE=0\nSET_FILAMENT_SENSOR SENSOR=fila ENABLE=0\n")); } else { MKSLOG_BLUE("打开断料检测"); ep->Send(json_run_a_gcode("beep_off\nSET_PIN PIN=caselight VALUE=0\nSET_FILAMENT_SENSOR SENSOR=fila ENABLE=1\n")); } } else { MKSLOG_BLUE("打开LED灯"); ep->Send(json_run_a_gcode("beep_off\nSET_PIN PIN=caselight VALUE=1\n")); if (get_mks_fila_status() == 0) { MKSLOG_BLUE("关掉断料检测"); ep->Send(json_run_a_gcode("beep_off\nSET_PIN PIN=caselight VALUE=1\nSET_FILAMENT_SENSOR SENSOR=fila ENABLE=0\n")); } else { MKSLOG_BLUE("打开断料检测"); ep->Send(json_run_a_gcode("beep_off\nSET_PIN PIN=caselight VALUE=1\nSET_FILAMENT_SENSOR SENSOR=fila ENABLE=1\n")); } } } else { MKSLOG_RED("打开蜂鸣器"); if (get_mks_led_status() == 0) { MKSLOG_BLUE("关掉LED灯"); ep->Send(json_run_a_gcode("beep_on\nSET_PIN PIN=caselight VALUE=0\n")); if (get_mks_fila_status() == 0) { MKSLOG_BLUE("关掉断料检测"); ep->Send(json_run_a_gcode("beep_on\nSET_PIN PIN=caselight VALUE=0\nSET_FILAMENT_SENSOR SENSOR=fila ENABLE=0\n")); } else { MKSLOG_BLUE("打开断料检测"); ep->Send(json_run_a_gcode("beep_on\nSET_PIN PIN=caselight VALUE=0\nSET_FILAMENT_SENSOR SENSOR=fila ENABLE=1\n")); } } else { MKSLOG_BLUE("打开LED灯"); ep->Send(json_run_a_gcode("beep_on\nSET_PIN PIN=caselight VALUE=1\n")); if (get_mks_fila_status() == 0) { MKSLOG_BLUE("关掉断料检测"); ep->Send(json_run_a_gcode("beep_on\nSET_PIN PIN=caselight VALUE=1\nSET_FILAMENT_SENSOR SENSOR=fila ENABLE=0\n")); } else { MKSLOG_BLUE("打开断料检测"); ep->Send(json_run_a_gcode("beep_on\nSET_PIN PIN=caselight VALUE=1\nSET_FILAMENT_SENSOR SENSOR=fila ENABLE=1\n")); } } } */ } int detect_disk() { if (access("/dev/sda", F_OK) == 0) { if (access("/dev/sda1", F_OK) == 0) { if (access("/home/mks/gcode_files/sda1", F_OK) != 0) { system("/usr/bin/systemctl --no-block restart makerbase-automount@sda1.service"); sleep(1); } } return 0; } else { return -1; } } void set_printing_shutdown() { if (page_printing_shutdown_enable == false) { page_printing_shutdown_enable = true; } else { page_printing_shutdown_enable = false; } } void mks_get_version() { mksversion_load(); mks_version_soc = mksversion_soc("V1.1.1"); mks_version_mcu = mksversion_mcu("V0.10.0"); mks_version_ui = mksversion_ui("V1.1.1"); mksversion_free(); } void wifi_save_config() { page_to(TJC_PAGE_WIFI_SAVING); mks_save_config(); sleep(2); get_wlan0_status(); } void disable_page_about_successed() { page_about_successed = true; } void finish_tjc_update() { if (access("/root/800_480.tft", F_OK) == 0) { system("mv /root/800_480.tft /root/800_480.tft.bak; sync"); } } void filament_load() { send_cmd_vis(tty_fd, "b2", "0"); send_cmd_vis(tty_fd, "t4", "1"); send_cmd_vis(tty_fd, "b3", "0"); send_cmd_picc(tty_fd, "q0", "194"); send_cmd_pco(tty_fd, "t0", "65535"); send_cmd_pco(tty_fd, "t3", "38066"); send_cmd_vis(tty_fd, "gm1", "0"); send_cmd_vis(tty_fd, "gm2", "1"); printer_idle_timeout_state = "Printing"; ep->Send(json_run_a_gcode("M109 S" + std::to_string(load_target) + "\n")); ep->Send(json_run_a_gcode("M604\n")); } void filament_unload() { // send_cmd_vis(tty_fd, "b2", "0"); // send_cmd_vis(tty_fd, "t4", "1"); // send_cmd_vis(tty_fd, "b3", "0"); // send_cmd_picc(tty_fd, "q0", "194"); // send_cmd_pco(tty_fd, "t0", "65535"); // send_cmd_pco(tty_fd, "t3", "38066"); // send_cmd_vis(tty_fd, "gm1", "0"); // send_cmd_vis(tty_fd, "gm2", "1"); printer_idle_timeout_state = "Printing"; ep->Send(json_run_a_gcode("M109 S" + std::to_string(load_target) + "\n")); ep->Send(json_run_a_gcode("M603\n")); } int get_cal_printed_time(int print_time) { int printed_time = 0; printed_time = print_time / 60; return printed_time; } int get_mks_total_printed_time() { mksini_load(); mks_total_printed_minutes = mksini_getint("total", "time", 0); mksini_free(); return mks_total_printed_minutes; } void set_mks_total_printed_time(int printed_time) { mksini_load(); std::cout << "######## " << printed_time << std::endl; mksini_set("total", "time", std::to_string(printed_time)); mksini_save(); mksini_free(); system("sync"); } void get_total_time() { ep->Send(json_get_job_totals()); } void do_not_x_clear() { set_mks_total_printed_time(36000); } void do_x_clear() { set_mks_total_printed_time(0); } void level_mode_printing_set_target() { set_heater_bed_target(level_mode_printing_heater_bed_target); ep->Send(json_run_a_gcode("M190 S" + std::to_string(level_mode_printing_heater_bed_target))); set_extruder_target(level_mode_printing_extruder_target); ep->Send(json_run_a_gcode("M109 S" + std::to_string(level_mode_printing_extruder_target))); } void level_mode_printing_print_file() { start_printing("LEVEL_PRINTING.gcode"); } void update_finished_tips() { page_to(TJC_PAGE_UPDATE_FINISH); } bool get_mks_oobe_enabled() { mksini_load(); mks_oobe_enabled = mksini_getboolean("oobe", "enable", 0); mksini_free(); return mks_oobe_enabled; } void set_mks_oobe_enabled(bool enable) { mksini_load(); mksini_set("oobe", "enable", std::to_string(enable)); mksini_save(); mksini_free(); system("sync"); } void move_motors_off() { ep->Send(json_run_a_gcode("M84\n")); } void open_more_level_finish() { init_mks_status(); // ep->Send(json_run_a_gcode("G28\n")); set_mks_oobe_enabled(false); // 完成关闭OOBE的操作 get_object_status(); page_to(TJC_PAGE_MAIN); } void open_move_tip() { ep->Send(json_run_a_gcode("G91\nG1 Z-100 F600\nG1 X-100 Y-100 F1200\nG90")); } void open_set_print_filament_target() { if (0 == printer_extruder_target) { get_mks_extruder_target(); set_extruder_target(mks_extruder_target); } else { set_extruder_target(0); } } void open_start_extrude() { ep->Send(json_run_a_gcode("M83\nG1 E20 F300\n")); } void open_calibrate_start() { step_1 = false; // CLL 当该值为true表示打印机已完成平台和喷嘴位置初始化 step_2 = false; // CLL 当该值为true表示打印机已完成采集补偿值 step_3 = false; // CLL 当该值为true表示打印机已完成共振补偿 printer_idle_timeout_state = "Printing"; page_to(TJC_PAGE_OPEN_CALIBRATE); ep->Send(json_run_a_gcode("M4028")); // printer.cfg中文件自定义gcode "M4028" } void close_mcu_port() { ep->Send(json_run_a_gcode("CLOSE_MCU_PORT\n")); } void oobe_set_intern_zoffset(float offset) { oobe_printer_set_offset = offset; } void oobe_set_zoffset(bool positive) { if (positive == true) { ep->Send(json_run_a_gcode("SET_GCODE_OFFSET Z_ADJUST=+" + std::to_string(oobe_printer_set_offset) + " MOVE=1")); } else { ep->Send(json_run_a_gcode("SET_GCODE_OFFSET Z_ADJUST=-" + std::to_string(oobe_printer_set_offset) + " MOVE=1")); } } void refresh_page_zoffset() { std::string temp[5][5]; for (int i = 0; i < printer_bed_mesh_profiles_mks_mesh_params_y_count; i++) { if (i == 5) { break; } for (int j = 0; j < printer_bed_mesh_profiles_mks_mesh_params_x_count; j++) { if (j == 5) { break; } temp[i][j] = std::to_string(printer_bed_mesh_profiles_mks_points[i][j]); temp[i][j] = temp[i][j].substr(0, temp[i][j].find(".") + 3); send_cmd_txt(tty_fd, "t" + std::to_string(5 * i + j), temp[i][j]); } } } void refresh_page_auto_heaterbed() { send_cmd_txt(tty_fd, "t0", std::to_string(printer_heater_bed_temperature) + "/"); send_cmd_val(tty_fd, "n0", std::to_string(printer_heater_bed_target)); if (printer_heater_bed_target > 0) { send_cmd_picc(tty_fd, "b2", "106"); send_cmd_picc2(tty_fd, "b2", "105"); send_cmd_pco(tty_fd, "t0", "63488"); send_cmd_pco(tty_fd, "n0", "63488"); } else { send_cmd_picc(tty_fd, "b2", "107"); send_cmd_picc2(tty_fd, "b2", "104"); send_cmd_pco(tty_fd, "t0", "65535"); send_cmd_pco(tty_fd, "n0", "65535"); } } void set_auto_level_heater_bed_target(bool positive) { get_mks_heater_bed_target(); printer_auto_level_heater_bed_target = mks_heater_bed_target; if (positive == true) { printer_auto_level_heater_bed_target += 3; }else { printer_auto_level_heater_bed_target -= 3; } if (printer_auto_level_heater_bed_target >120) { printer_auto_level_heater_bed_target =120; } if (printer_auto_level_heater_bed_target < 0) { printer_auto_level_heater_bed_target = 0; } set_heater_bed_target(printer_auto_level_heater_bed_target); set_mks_heater_bed_target(printer_auto_level_heater_bed_target); } void detect_error() { switch (current_page_id) { case TJC_PAGE_PRINTING: case TJC_PAGE_PRINT_ZOFFSET: case TJC_PAGE_PRINT_FILAMENT: case TJC_PAGE_PRINTING_2: case TJC_PAGE_GCODE_ERROR: case TJC_PAGE_LEVEL_ERROR: case TJC_PAGE_DETECT_ERROR: case TJC_PAGE_UPDATING: break; case TJC_PAGE_OPEN_CALIBRATE: case TJC_PAGE_AUTO_MOVING: ep->Send(json_run_a_gcode("RESTART")); jump_to_level_error = true; break; default: if (printer_webhooks_state != "shutdown" && printer_webhooks_state != "error") { //4.1.5 新增息屏功能 if (previous_caselight_value == true) { led_on_off(); previous_caselight_value = false; } jump_to_detect_error = true; } break; } } void clear_previous_data() { sdcard_reset_file(); clear_cp0_image(); clear_page_preview(); show_preview_complete = false; printing_keyboard_enabled = false; } void print_start() { if (printer_bed_leveling == true) { ep->Send(json_run_a_gcode("G31\n")); } else { ep->Send(json_run_a_gcode("G32\n")); } } void open_heater_bed_up() { page_to(TJC_PAGE_OPEN_FILAMENTVIDEO_1); ep->Send(json_run_a_gcode("SET_KINEMATIC_POSITION Z=150\nSET_KINEMATIC_POSITION X=150\nSET_KINEMATIC_POSITION Y=150\n")); ep->Send(json_run_a_gcode("G91\nG1 Z-30 F600\nG1 X-30 Y-30 F1200\nG90\nM84\n")); } void refresh_page_open_heaterbed() { send_cmd_txt(tty_fd, "t0", std::to_string(printer_heater_bed_temperature) + "/"); send_cmd_val(tty_fd, "n0", std::to_string(printer_heater_bed_target)); if (printer_heater_bed_target > 0) { send_cmd_picc(tty_fd, "b0", "18"); send_cmd_picc2(tty_fd, "b0", "14"); send_cmd_pco(tty_fd, "t0", "63488"); send_cmd_pco(tty_fd, "n0", "63488"); } else { send_cmd_picc(tty_fd, "b0", "15"); send_cmd_picc2(tty_fd, "b0", "13"); send_cmd_pco(tty_fd, "t0", "65535"); send_cmd_pco(tty_fd, "n0", "65535"); } } void bed_leveling_switch(bool positive) { if (positive == true) { ep->Send(json_run_a_gcode("G31")); printer_bed_leveling = true; } if (positive == false) { ep->Send(json_run_a_gcode("G32")); printer_bed_leveling = false; } } void save_current_zoffset() { std::string z_offset = std::to_string(printer_gcode_move_homing_origin[2]); z_offset = z_offset.substr(0, z_offset.find(".") + 4); switch (current_page_id) { case TJC_PAGE_AUTO_MOVING: case TJC_PAGE_OPEN_CALIBRATE: printer_idle_timeout_state = "Printing"; float z; get_mks_babystep(); z = std::stof(mks_babystep_value) + std::stof(mks_adxl_offset); if (z > -5 && z < 5) { // CLL 仅保存-5~5的zoffset值 mks_babystep_value = std::to_string(z); set_mks_babystep(mks_babystep_value); MKSLOG_RED("当前zoffset值保存为%s",mks_babystep_value.c_str()); } break; default: if (z_offset != mks_babystep_value && z_offset.find("0.000") != -1) { if (std::stof(z_offset) > -5 && std::stof(z_offset) < 5) { mks_babystep_value = z_offset; set_mks_babystep(mks_babystep_value); MKSLOG_RED("当前zoffset值保存为:%s",mks_babystep_value.c_str()); } } break; } } void refresh_page_filament_pop() { send_cmd_txt(tty_fd, "t4", "(" + std::to_string(printer_extruder_temperature) + "/" + std::to_string(printer_extruder_target) + "℃)"); if (step_1 == true) { step_1 = false; send_cmd_picc(tty_fd, "q0", "195"); send_cmd_pco(tty_fd, "t1", "65535"); send_cmd_pco(tty_fd, "t0", "38066"); send_cmd_pco(tty_fd, "t4", "38066"); send_cmd_vis(tty_fd, "gm2", "0"); send_cmd_vis(tty_fd, "gm3", "1"); } if (step_2 == true && printer_idle_timeout_state == "Ready") { step_2 = false; send_cmd_picc(tty_fd, "q0", "197"); send_cmd_pco(tty_fd, "t2", "65535"); send_cmd_pco(tty_fd, "t1", "38066"); send_cmd_vis(tty_fd, "b0", "1"); send_cmd_vis(tty_fd, "b1", "1"); send_cmd_vis(tty_fd, "gm3", "0"); } } void check_filament_type() { std::string filament_type; if (file_metadata_filament_type != "") { filament_type = file_metadata_filament_type; } else { filament_type = file_metadata_filament_name; } std::transform(filament_type.begin(), filament_type.end(), filament_type.begin(), tolower); MKSLOG_YELLOW("filament_type : %s",filament_type.c_str()); //4.4.1 CLL 耗材确认弹窗新增不再提示按钮 if ((filament_type.find("pla") != -1 || filament_type.find("petg") != -1) && preview_pop_1_on == true) { page_to(TJC_PAGE_PREVIEW_POP_1); }else if (filament_type.find("abs") != -1 && preview_pop_2_on == true) { page_to(TJC_PAGE_PREVIEW_POP_2); }else { page_to(TJC_PAGE_PRINTING); } } void refresh_page_preview_pop() { //4.4.2 使mates与霍尔耗材宽度探测器适配 if (filament_detected == false) { sleep(1); set_print_pause(); page_to(TJC_PAGE_PRINT_NO_FILAMENT); } if (printer_print_stats_state == "standby") { page_to(TJC_PAGE_PRINT_STOPPING); } if (printer_print_stats_state == "error") { page_to(TJC_PAGE_GCODE_ERROR); cancel_print(); clear_previous_data(); send_cmd_txt(tty_fd, "t0", "gcode error:" + error_message); } } std::string replaceCharacters(const std::string& path, const std::string& searchChars, const std::string& replacement) { std::string result = path; for (char c : searchChars) { std::size_t found = result.find(c); while (found != std::string::npos) { result.replace(found, 1, replacement); found = result.find(c, found + replacement.length()); } } return result; } //4.4.2 使mates适配霍尔宽度检测器 void check_filament_width() { if (filament_message.find("// Filament dia (measured mm):") != -1) { float filament_width = std::stof(filament_message.substr(31)); MKSLOG("耗材宽度:%f",filament_width); if (filament_width < 0.3){ filament_detected = false; } else { filament_detected = true; } } else if (filament_message.find("// Filament NOT present") != -1 || filament_message.find("echo: Filament run out") != -1) { filament_detected = false; } } //4.4.2 CLL 新增刷新文件列表函数 void refresh_page_files_list_2() { if (file_mode == "USB") { if (detect_disk() == -1) { file_mode = "NULL"; page_to(TJC_PAGE_FILE_LIST); page_files_pages = 0; page_files_current_pages = 0; page_files_folder_layers = 1; page_files_previous_path = ""; page_files_root_path = "gcodes/"; page_files_path = "/sda1"; refresh_page_files(page_files_current_pages); refresh_page_files_list(); get_object_status(); } } else if (file_mode == "NULL") { if (detect_disk() == 0) { sleep(1); file_mode ="USB"; page_to(TJC_PAGE_FILE_LIST); page_files_pages = 0; page_files_current_pages = 0; page_files_folder_layers = 1; page_files_previous_path = ""; page_files_root_path = "gcodes/"; page_files_path = "/sda1"; refresh_page_files(page_files_current_pages); refresh_page_files_list(); get_object_status(); } } } void go_to_update() { get_mks_connection_method(); page_to(TJC_PAGE_UPDATE_MODE); send_cmd_txt(tty_fd, "t1", mks_version_soc); if (connection_method == 0) send_cmd_vis(tty_fd, "b2", "0"); } void restore_config() { system("rm /home/mks/gcode_files/.cache/*"); main_picture_refreshed = false; system("curl -X POST http://127.0.0.1:7125/server/history/reset_totals"); system("curl -X DELETE 'http://127.0.0.1:7125/server/history/job?all=true'"); system("cp /root/config.mksini /home/mks/klipper_config/config.mksini"); system("cp /home/mks/klipper_config/saved_variables.cfg.bak /home/mks/klipper_config/saved_variables.cfg"); ep->Send(json_run_a_gcode("SAVE_VARIABLE VARIABLE=z_offset VALUE=0")); page_to(TJC_PAGE_MAIN); } void refresh_page_bed_moving() { if (printer_idle_timeout_state == "Ready") { if (manual_count == 3) { page_to(TJC_PAGE_PRE_BED_CALIBRATION); } else if (manual_count == -2) { page_to(TJC_PAGE_BED_FINISH); } else { page_to(TJC_PAGE_BED_CALIBRATION); } } } void bed_calibrate() { if (manual_count == 4) { bed_offset = 0; printer_idle_timeout_state = "Printing"; ep->Send(json_run_a_gcode("M4030")); page_to(TJC_PAGE_BED_MOVING); }else if (manual_count == 3) { printer_idle_timeout_state = "Printing"; ep->Send(json_run_a_gcode("G1 Z10 F600")); ep->Send(json_run_a_gcode("BED_SCREWS_ADJUST\n")); ep->Send(json_run_a_gcode("G1 Z" + std::to_string(bed_offset) + " F600\n")); MKSLOG_BLUE("当前bed_offset:%f", bed_offset); page_to(TJC_PAGE_BED_MOVING); } else if (manual_count > 0) { printer_idle_timeout_state = "Printing"; ep->Send(json_run_a_gcode("ACCEPT\n")); ep->Send(json_run_a_gcode("G1 Z" + std::to_string(bed_offset) + " F600\n")); page_to(TJC_PAGE_BED_MOVING); } else if (manual_count == 0) { ep->Send(json_run_a_gcode("ACCEPT\n")); ep->Send(json_run_a_gcode("G1 Z10 F600\nG1 X0 Y0 F9000\n")); init_mks_status(); page_to(TJC_PAGE_BED_FINISH); } else { ep->Send(json_run_a_gcode("G1 Z10 F600\n")); page_to(TJC_PAGE_BED_FINISH); } manual_count--; } void bed_adjust(bool status) { if (status == true) { ep->Send(json_run_a_gcode("G91\nG1 Z" + std::to_string(-auto_level_dist) + " F600\nG90\n")); bed_offset = bed_offset - auto_level_dist; MKSLOG_BLUE("当前bed_offset:%f", bed_offset); } else if (status == false) { ep->Send(json_run_a_gcode("G91\nG1 Z" + std::to_string(auto_level_dist) + " F600\nG90\n")); bed_offset = bed_offset + auto_level_dist; MKSLOG_BLUE("当前bed_offset:%f", bed_offset); } } void go_to_file_list() { if (file_mode == "Local") { page_to(TJC_PAGE_FILE_LIST); page_files_pages = 0; page_files_current_pages = 0; page_files_folder_layers = 0; page_files_previous_path = ""; page_files_root_path = DEFAULT_DIR; page_files_path = ""; refresh_page_files(page_files_current_pages); refresh_page_files_list(); get_object_status(); } else { page_to(TJC_PAGE_FILE_LIST); page_files_pages = 0; page_files_current_pages = 0; page_files_folder_layers = 1; page_files_previous_path = ""; page_files_root_path = DEFAULT_DIR; page_files_path = "/sda1"; refresh_page_files(page_files_current_pages); refresh_page_files_list(); get_object_status(); } } void send_gcode(std::string command) { ep->Send(json_run_a_gcode(command)); } void refresh_page_open_calibrate() { if (step_3 == true) { step_3 = false; system("sync"); // CLL 保存系统信息后跳转至装料页面 sleep(10); get_object_status(); sub_object_status(); page_to(TJC_PAGE_OPEN_FILAMENTVIDEO_0); } if (step_2 == true && printer_webhooks_state == "ready") { step_2 = false; send_cmd_picc(tty_fd, "q0", "21"); send_cmd_pco(tty_fd, "t3", "65535"); sleep(5); ep->Send(json_run_a_gcode("M901")); // CLL 平台调平完成后进行共振补偿 } if (step_1 == true && printer_idle_timeout_state == "Ready") { step_1 = false; send_cmd_picc(tty_fd, "q0", "20"); send_cmd_pco(tty_fd, "t2", "65535"); get_mks_heater_bed_target(); set_heater_bed_target(mks_heater_bed_target); ep->Send(json_run_a_gcode("M190 S" + std::to_string(mks_heater_bed_target) + "\n")); sleep(5); ep->Send(json_run_a_gcode("M4027")); // CLL 平台和喷嘴位置初始化完成后进行调平 } } void refresh_page_filament_set_fan() { if (move_fan_setting == false) { // CLL 当检测到风扇滑块未被按下时执行刷新函数 send_cmd_val(tty_fd, "h0", std::to_string((int)(printer_out_pin_fan0_value * 100))); send_cmd_val(tty_fd, "n0", std::to_string((int)(printer_out_pin_fan0_value * 100))); send_cmd_val(tty_fd, "h1", std::to_string((int)(printer_out_pin_fan2_value * 100))); send_cmd_val(tty_fd, "n1", std::to_string((int)(printer_out_pin_fan2_value * 100))); send_cmd_val(tty_fd, "h2", std::to_string((int)(printer_out_pin_fan3_value * 100))); send_cmd_val(tty_fd, "n2", std::to_string((int)(printer_out_pin_fan3_value * 100))); if (printer_out_pin_fan0_value == 0) { send_cmd_picc(tty_fd, "b0", "201"); send_cmd_picc2(tty_fd, "b0", "199"); } else { send_cmd_picc(tty_fd, "b0", "202"); send_cmd_picc2(tty_fd, "b0", "200"); } if (printer_out_pin_fan2_value == 0) { send_cmd_picc(tty_fd, "b1", "201"); send_cmd_picc2(tty_fd, "b1", "199"); } else { send_cmd_picc(tty_fd, "b1", "202"); send_cmd_picc2(tty_fd, "b1", "200"); } if (printer_out_pin_fan3_value == 0) { send_cmd_picc(tty_fd, "b2", "201"); send_cmd_picc2(tty_fd, "b2", "199"); } else { send_cmd_picc(tty_fd, "b2", "202"); send_cmd_picc2(tty_fd, "b2", "200"); } } } // CLL 记住上次进入调整页面时的选择 void go_to_adjust() { if (adjust_mode == "Filament") { page_to(TJC_PAGE_FILAMENT); } else { page_to(TJC_PAGE_MOVE); } } void go_to_setting() { if (set_mode == "Level_mode") { page_to(TJC_PAGE_LEVEL_MODE); } else { page_to(TJC_PAGE_COMMON_SETTING); } } void refresh_page_common_setting() { current_mks_oobe_enabled = get_mks_oobe_enabled(); send_cmd_txt(tty_fd, "t7", mks_version_soc); if (current_mks_oobe_enabled == false) { send_cmd_picc(tty_fd, "b6", "137"); send_cmd_picc2(tty_fd, "b6", "135"); } else { send_cmd_picc(tty_fd, "b6", "138"); send_cmd_picc2(tty_fd, "b6", "136"); send_cmd_txt(tty_fd, "t6", "开机引导"); } } // CLL 该函数用于执行导出日志操作 void print_log() { if (detect_disk() == -1) { page_to(TJC_PAGE_PRINT_LOG_F); // CLL 若U盘未插入,提示导出失败,请客户检查U盘插入 } else { system("mkdir /home/mks/gcode_files/sda1/QD_Log"); system("bash -c 'cp /home/mks/klipper_logs/klippy.log* /home/mks/gcode_files/sda1/QD_Log/'"); system("bash -c 'cp /home/mks/klipper_logs/moonraker.log* /home/mks/gcode_files/sda1/QD_Log/'"); system("bash -c 'cp /home/mks/klipper_logs/auto_update.log* /home/mks/gcode_files/sda1/QD_Log/'"); system("bash -c 'cp /root/frp/frpc.log* /home/mks/gcode_files/sda1/QD_Log/'"); system("bash -c 'cp /root/frp/frpc.*.log /home/mks/gcode_files/sda1/QD_Log/'"); system("cp /root/frp/frpc.toml /home/mks/gcode_files/sda1/QD_Log/frpc.toml"); page_to(TJC_PAGE_PRINT_LOG_S); } } void refresh_files_list_picture(std::string path, int pixel, int i) { file_metadata_simage.clear(); file_metadata_gimage.clear(); mks_file_parse_finished = false; output_imgdata(path, pixel); std::ifstream infile("/home/mks/tjc"); // 打开文件 if (!infile) { std::cerr << "无法打开文件 " << "/home/mks/tjc" << std::endl; show_preview_complete = true; return; } std::stringstream buffer; buffer << infile.rdbuf(); file_metadata_gimage = buffer.str(); infile.close(); send_cmd_baud(tty_fd, 921600); //usleep(50000); usleep(10000); set_option(tty_fd, 921600, 8, 'N', 1); send_cmd_cp_close(tty_fd, "cp"+std::to_string(i)); if (file_metadata_gimage != "") { std::cout << "刷文件图" << std::endl; int num = 2048; int len = file_metadata_gimage.length(); int end = num; std::string g; for (int start = 0; start < len;) { if (end > len) { g = file_metadata_gimage.substr(start, len - start); tcdrain(tty_fd); send_cmd_cp_image(tty_fd, "cp" + std::to_string(i), g); break; } g = file_metadata_gimage.substr(start, num); start = end; end = end + num; tcdrain(tty_fd); send_cmd_cp_image(tty_fd, "cp" + std::to_string(i), g); } } send_cmd_baud(tty_fd, 115200); //usleep(50000); usleep(10000); set_option(tty_fd, 115200, 8, 'N', 1); send_cmd_vis(tty_fd, "cp" + std::to_string(i), "1"); } std::string input_path; int input_size; bool start_path = false; void refresh_files_list_picture_2(std::string path, int size, int i) { input_path = path; input_size = size; begin_show_64_jpg = true; } int refresh_files_list_picture_3(const char *inputPath, int size, int i) { return 0; } void refresh_page_filament() { send_cmd_txt(tty_fd, "t0", std::to_string(printer_extruder_temperature)); send_cmd_val(tty_fd, "n0", std::to_string(printer_extruder_target)); send_cmd_txt(tty_fd, "t1", std::to_string(printer_heater_bed_temperature)); send_cmd_val(tty_fd, "n1", std::to_string(printer_heater_bed_target)); send_cmd_txt(tty_fd, "t2", std::to_string(printer_hot_temperature)); send_cmd_val(tty_fd, "n2", std::to_string(printer_hot_target)); if (printer_extruder_target > 0) {// CLL 根据喷头是否加热改变按钮显示状态 send_cmd_picc(tty_fd, "b2", "177"); send_cmd_picc2(tty_fd, "b2", "174"); send_cmd_picc(tty_fd, "b0", "177"); send_cmd_picc2(tty_fd, "b0", "174"); send_cmd_pco(tty_fd, "t0", "63488"); } else { send_cmd_picc(tty_fd, "b2", "176"); send_cmd_picc2(tty_fd, "b2", "175"); send_cmd_picc(tty_fd, "b0", "176"); send_cmd_picc2(tty_fd, "b0", "175"); send_cmd_pco(tty_fd, "t0", "65535"); } if (printer_heater_bed_target > 0) { // CLL 根据热床是否加热改变按钮显示状态 send_cmd_picc(tty_fd, "b3", "177"); send_cmd_picc2(tty_fd, "b3", "174"); send_cmd_picc(tty_fd, "b1", "177"); send_cmd_picc2(tty_fd, "b1", "174"); send_cmd_pco(tty_fd, "t1", "63488"); } else { send_cmd_picc(tty_fd, "b3", "176"); send_cmd_picc2(tty_fd, "b3", "175"); send_cmd_picc(tty_fd, "b1", "176"); send_cmd_picc2(tty_fd, "b1", "175"); send_cmd_pco(tty_fd, "t1", "65535"); } if (printer_hot_target > 0) { send_cmd_picc(tty_fd, "b12", "177"); send_cmd_picc2(tty_fd, "b12", "174"); send_cmd_picc(tty_fd, "b13", "177"); send_cmd_picc2(tty_fd, "b13", "174"); send_cmd_pco(tty_fd, "t2", "63488"); } else { send_cmd_picc(tty_fd, "b12", "176"); send_cmd_picc2(tty_fd, "b12", "175"); send_cmd_picc(tty_fd, "b13", "176"); send_cmd_picc2(tty_fd, "b13", "175"); send_cmd_pco(tty_fd, "t2", "65535"); } if (printer_filament_extruedr_dist == 10) { send_cmd_picc(tty_fd, "b9", "177"); send_cmd_picc2(tty_fd, "b9", "174"); send_cmd_picc(tty_fd, "b10", "176"); send_cmd_picc2(tty_fd, "b10", "175"); send_cmd_picc(tty_fd, "b11", "176"); send_cmd_picc2(tty_fd, "b11", "175"); } else if (printer_filament_extruedr_dist == 50) { send_cmd_picc(tty_fd, "b9", "176"); send_cmd_picc2(tty_fd, "b9", "175"); send_cmd_picc(tty_fd, "b10", "177"); send_cmd_picc2(tty_fd, "b10", "174"); send_cmd_picc(tty_fd, "b11", "176"); send_cmd_picc2(tty_fd, "b11", "175"); } else if (printer_filament_extruedr_dist == 100) { send_cmd_picc(tty_fd, "b9", "176"); send_cmd_picc2(tty_fd, "b9", "175"); send_cmd_picc(tty_fd, "b10", "176"); send_cmd_picc2(tty_fd, "b10", "175"); send_cmd_picc(tty_fd, "b11", "177"); send_cmd_picc2(tty_fd, "b11", "174"); } } void get_mks_connection_method() { mksini_load(); connection_method = mksini_getint("app_connection", "method", 0); mksini_free(); } void set_mks_connection_method(int target) { qr_refreshed = false; mksini_load(); std::cout << "######## " << target << std::endl; mksini_set("app_connection", "method", std::to_string(target)); mksini_save(); mksini_free(); system("sync"); } void refresh_page_show_qr() { if (mks_ethernet == 0) { send_cmd_txt(tty_fd, "t0", status_result.ip_address); send_cmd_picc(tty_fd, "b4", "268"); send_cmd_picc2(tty_fd, "b4", "214"); } else { std::string local_ip = get_eth0_ip(); send_cmd_txt(tty_fd, "t0", local_ip); send_cmd_picc(tty_fd, "b4", "269"); send_cmd_picc2(tty_fd, "b4", "215"); } } void go_to_showqr() { std::string qrmessage; get_mks_connection_method(); page_to(TJC_PAGE_SHOW_QR); if (strcmp(status_result.wpa_state, "COMPLETED") == 0 || mks_ethernet) { if (qr_refreshed == false) { if (open_qr_refreshed == true || access("/home/mks/qrcode/qrcode.jpg", F_OK) == -1) qrmessage = run_python_code("python3 /home/mks/qrcode/qrcode_QD.py 176\n"); std::cout << "qrmessage:" << qrmessage << std::endl; if (qrmessage.find("Missing or invalid") != -1) { send_cmd_txt(tty_fd, "t4", qrmessage); send_cmd_vis(tty_fd, "t4", "1"); send_cmd_cp_close(tty_fd, "cp0"); } else if (qrmessage.find("No") != -1) { send_cmd_vis(tty_fd, "t4", "1"); send_cmd_cp_close(tty_fd, "cp0"); } else { open_qr_refreshed = true; refresh_files_list_picture("/home/mks/qrcode/qrcode.jpg", 176, 0); qr_refreshed = true; } } } else { send_cmd_vis(tty_fd, "t4", "1"); send_cmd_cp_close(tty_fd, "cp0"); } } void get_mks_selected_server() { mksini_load(); selected_server = mksini_getstring("app_server", "name", ""); mksini_free(); std::cout << selected_server << std::endl; } void go_to_server_set(int n) { current_server_page = n; total_server_count = 0; serverConfigs.clear(); if (connection_method == 1 && strcmp(status_result.wpa_state, "COMPLETED") == 0) { page_to(TJC_PAGE_SEARCH_SERVER); update_server(0); get_mks_selected_server(); get_mks_connection_method(); } page_to(TJC_PAGE_SERVER_SET); } void updateServerConfig(std::vector &lines, const Server_config &config) { for (size_t i = 0; i < lines.size(); ++i) { if (lines[i] == "[app_server]") { // 检查是否已经到达文件末尾 if (i + 1 < lines.size()) { // 直接更新下一行,无需考虑空格数量 lines[i + 1] = "name = " + config.name; return; } } } // 如果没有找到[app_server]节,就在文件末尾添加 lines.push_back("[app_server]"); lines.push_back("name = " + config.name); } void update_server(int choice) { // CLL 连接服务器获取json文件 if (choice == 0) { system("curl -s -S -L -o /root/frp/server_list.json http://www.aws.qidi3dprinter.com:5050/downloads/server_list.json"); } else { qr_refreshed = false; // CLL 当choice不为0时,该函数用于切换服务器,需要重新刷新二维码 } total_server_count = 0; const std::string FRPC_CONFIG_PATH = "/root/frp/frpc.toml"; const std::string MKSCONFIG_PATH = "/home/mks/klipper_config/config.mksini"; const std::string SERVER_LIST_PATH = "/root/frp/server_list.json"; // JSON 文件路径 try { // 读取 JSON 文件并解析为服务器配置 std::ifstream jsonFile(SERVER_LIST_PATH); nlohmann::json serverList; jsonFile >> serverList; jsonFile.close(); for (const auto& item : serverList.items()) { const std::string &key = item.key(); const auto &value = item.value(); int id = std::stoi(key); Server_config config = {value["address"], value["name"]}; std::cout << id << ":" << config.name << std::endl; serverConfigs[id] = config; total_server_count++; } } catch(const std::exception& e) { std::cerr << "fail_to_read:" << e.what() << '\n'; } if (choice != 0) { if (serverConfigs.find(choice) == serverConfigs.end()) { std::cout << "Invalid choice. Please enter a valid option.\n"; return; } Server_config config = serverConfigs[choice]; // 停止frpc.service std::cout << "Stopping frpc.service...\n"; system("sudo systemctl stop frpc.service"); // 更新frpc.toml std::ifstream frpcIn(FRPC_CONFIG_PATH); std::stringstream buffer; buffer << frpcIn.rdbuf(); std::string content = buffer.str(); frpcIn.close(); size_t pos = content.find("serverAddr = "); if (pos != std::string::npos) { size_t endPos = content.find('\n', pos); content.replace(pos, endPos - pos, "serverAddr = \"" + config.address + "\""); } std::ofstream frpcOut(FRPC_CONFIG_PATH); frpcOut << content; frpcOut.close(); // 读取config.mksini到vector中 std::vector lines; std::ifstream mksIn(MKSCONFIG_PATH); std::string line; while (getline(mksIn, line)) { lines.push_back(line); } mksIn.close(); // 更新app_server配置 updateServerConfig(lines, config); // 将更新后的内容写回config.mksini std::ofstream mksOut(MKSCONFIG_PATH); for (const auto &outputLine : lines) { mksOut << outputLine << std::endl; } mksOut.close(); // 重启frpc.service std::cout << "Starting frpc.service...\n"; system("sudo systemctl start frpc.service"); std::cout << "Configuration updated to " << config.name << " successfully.\n"; get_mks_selected_server(); } } void refresh_page_server_set() { if (connection_method == 0 || strcmp(status_result.wpa_state, "COMPLETED") != 0) { send_cmd_picc(tty_fd, "b2", "217"); send_cmd_picc2(tty_fd, "b2", "220"); send_cmd_vis(tty_fd, "t3", "1"); send_cmd_vis(tty_fd, "t0", "0"); send_cmd_vis(tty_fd, "b3", "0"); send_cmd_vis(tty_fd, "b4", "0"); send_cmd_vis(tty_fd, "b0", "0"); } else { send_cmd_picc(tty_fd, "b2", "218"); send_cmd_picc2(tty_fd, "b2", "219"); send_cmd_vis(tty_fd, "t3", "0"); send_cmd_vis(tty_fd, "t0", "1"); send_cmd_vis(tty_fd, "b3", "1"); send_cmd_vis(tty_fd, "b4", "1"); send_cmd_vis(tty_fd, "b0", "1"); } if (current_server_page == 0) { send_cmd_picc(tty_fd, "b3", "218"); send_cmd_picc2(tty_fd, "b3", "219"); } else { send_cmd_picc(tty_fd, "b3", "217"); send_cmd_picc2(tty_fd, "b3", "220"); } if ((current_server_page + 1) * 4 >= total_server_count) { send_cmd_picc(tty_fd, "b4", "218"); send_cmd_picc2(tty_fd, "b4", "219"); } else { send_cmd_picc(tty_fd, "b4", "217"); send_cmd_picc2(tty_fd, "b4", "220"); } for (int i = 0; i < 4; i++) { if (i + current_server_page * 4 + 1 > total_server_count) break; send_cmd_txt(tty_fd, "t" + std::to_string(i + 5), serverConfigs[1 + i + current_server_page * 4].name); if (selected_server == serverConfigs[1 + i + current_server_page * 4].name) { std::cout << "selected_server:" << serverConfigs[i + 1 + current_server_page * 4].name << std::endl; send_cmd_picc(tty_fd, "b" + std::to_string(i + 5), "217"); send_cmd_picc2(tty_fd, "b" + std::to_string(i + 5), "219"); } else { std::cout << "unselected_server:" << serverConfigs[i + 1 + current_server_page * 4].name << std::endl; send_cmd_picc(tty_fd, "b" + std::to_string(i + 5), "218"); send_cmd_picc2(tty_fd, "b" + std::to_string(i + 5), "220"); } } } void local_update () { ep->Send(json_get_klippy_host_information()); if (detect_update()) { page_to(TJC_PAGE_UPDATE_FOUND); } else { page_to(TJC_PAGE_UPDATE_NOT_FOUND); } } // CLL 此函数用于调用系统函数后接收返回值 std::string run_python_code(const char* cmd) { std::array buffer; std::string result; std::unique_ptr pipe(popen(cmd, "r"), pclose); if (!pipe) { throw std::runtime_error("popen() failed!"); } while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) { result += buffer.data(); } return result; } void check_online_version() { page_to(TJC_PAGE_SEARCH_SERVER); if (connection_method == 0) return; target_soc_version = run_python_code("python3 /root/auto_update/version_check_Q1.py"); std::cout << "服务器版本:" << target_soc_version << std::endl; if (target_soc_version.find("0") == 0) { page_to(TJC_PAGE_UPDATE_MODE); send_cmd_vis(tty_fd, "t2", "1"); send_cmd_vis(tty_fd, "t3", "0"); } else if (target_soc_version.find("-1") == 0) { page_to(TJC_PAGE_UPDATE_MODE); send_cmd_vis(tty_fd, "t3", "1"); send_cmd_vis(tty_fd, "t2", "0"); } else { page_to(TJC_PAGE_ONLINE_UPDATE); send_cmd_txt(tty_fd, "t1", mks_version_soc); send_cmd_txt(tty_fd, "t2", target_soc_version); updateini_load(); std::string cn_info = mksini_getstring("cn", "content", "NULL"); // CLL 获取中文更新说明 std::string ru_info = mksini_getstring("ru", "content", "NULL"); // CLL 获取俄语更新说明 std::string en_info = mksini_getstring("en", "content", "NULL"); // CLL 获取英语更新说明 std::string jp_info = mksini_getstring("jp", "content", "NULL"); // CLL 获取日语更新说明 std::string fr_info = mksini_getstring("fr", "content", "NULL"); // CLL 获取法语更新说明 std::string gr_info = mksini_getstring("gr", "content", "NULL"); // CLL 获取德语更新说明 std::string it_info = mksini_getstring("it", "content", "NULL"); // CLL 获取意大利语更新说明 std::string sp_info = mksini_getstring("sp", "content", "NULL"); // CLL 获取西班牙语更新说明 std::string kr_info = mksini_getstring("kr", "content", "NULL"); // CLL 获取韩语更新说明 std::string pr_info = mksini_getstring("pr", "content", "NULL"); // CLL 获取葡萄牙语更新说明 std::string ar_info = mksini_getstring("ar", "content", "NULL"); // CLL 获取阿拉伯语更新说明 std::string tr_info = mksini_getstring("tr", "content", "NULL"); // CLL 获取土耳其语更新说明 std::string hb_info = mksini_getstring("hb", "content", "NULL"); // CLL 获取希伯来语更新说明 send_cmd_txt(tty_fd, "t_cn", cn_info); send_cmd_txt(tty_fd, "t_ru", ru_info); send_cmd_txt(tty_fd, "t_en", en_info); send_cmd_txt(tty_fd, "t_jp", jp_info); send_cmd_txt(tty_fd, "t_fr", fr_info); send_cmd_txt(tty_fd, "t_gr", gr_info); send_cmd_txt(tty_fd, "t_it", it_info); send_cmd_txt(tty_fd, "t_sp", sp_info); send_cmd_txt(tty_fd, "t_kr", kr_info); send_cmd_txt(tty_fd, "t_pr", pr_info); send_cmd_txt(tty_fd, "t_ar", ar_info); send_cmd_txt(tty_fd, "t_tr", tr_info); send_cmd_txt(tty_fd, "t_hb", hb_info); mksini_free(); } } void online_update() { page_to(TJC_PAGE_UPDATING); send_cmd_vis(tty_fd, "j0", "1"); send_cmd_vis(tty_fd, "t1", "1"); pthread_t recevice_progress_pthread; pthread_create(&recevice_progress_pthread, NULL, recevice_progress_handle, NULL); system("rm /home/mks/gcode_files/.cache/*\n"); system("python3 /root/auto_update/download_update_Q1.py\n"); // page_to(TJC_PAGE_UPDATE_FINISH); system("sync\n"); system("systemctl restart makerbase-client\n"); } // CLL 创建线程用于接收在线更新进度 void *recevice_progress_handle(void *arg) { while(1) { if (current_page_id == TJC_PAGE_UPDATING) { progressini_load(); int update_progress = mksini_getint("progress", "value", update_progress); std::string progress_name = mksini_getstring("filename", "name", progress_name); mksini_free(); if (progress_name.find("Installing") == -1) { send_cmd_txt(tty_fd, "t2", progress_name); send_cmd_val(tty_fd, "j0", std::to_string(update_progress)); send_cmd_txt(tty_fd, "t1", std::to_string(update_progress) + "%"); } else { page_to(TJC_PAGE_INSTALLING); break; } } } return NULL; } void refresh_page_auto_unload() { send_cmd_txt(tty_fd, "t4", "(" + std::to_string(printer_extruder_temperature) + "/" + std::to_string(printer_extruder_target) + "℃)"); if (step_1 == true) { step_1 = false; send_cmd_vis(tty_fd, "gm1", "0"); send_cmd_vis(tty_fd, "gm2", "1"); send_cmd_picc(tty_fd, "q0", "231"); send_cmd_pco(tty_fd, "t1", "65535"); send_cmd_pco(tty_fd, "t0", "38066"); } if (step_2 == true) { step_2 = false; send_cmd_vis(tty_fd, "gm2", "0"); send_cmd_picc(tty_fd, "q0", "232"); send_cmd_pco(tty_fd, "t2", "65535"); send_cmd_pco(tty_fd, "t1", "38066"); send_cmd_vis(tty_fd, "b0", "1"); send_cmd_vis(tty_fd, "b1", "1"); } } int get_mks_ethernet() { mksini_load(); mks_ethernet = mksini_getboolean("mks_ethernet", "enable", 0); mksini_free(); return mks_ethernet; } void set_mks_ethernet(int target) { std::cout << "设置以太网:" << target << std::endl; mksini_load(); mksini_set("mks_ethernet", "enable", std::to_string(target)); mksini_save(); mksini_free(); mks_ethernet = target; }