Files
QIDI_Q1_Pro/src/event.cpp

3672 lines
126 KiB
C++
Raw Normal View History

2024-03-19 15:48:17 +08:00
#include <iostream>
#include <set>
#include <stack>
#include <algorithm>
// #include <boost/algorithm/string.hpp>
#include <cstdio>
#include <memory>
#include <stdexcept>
#include <array>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <fstream>
#include <string>
#include <sstream>
#include <map>
#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"
2024-04-09 15:18:07 +08:00
#include "../include/MakerbaseNetwork.h"
2024-03-19 15:48:17 +08:00
#include "../include/ui.h"
#include "../include/send_jpg.h"
#include <nlohmann/json.hpp>
#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<std::string> 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<std::string> 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;
2024-05-03 09:57:27 +08:00
int unhomed_move_mode = 0; // CLL 用于保存上次按下的移动按钮,当触发需先归位操作时进行移动, 1(x up),2(x down),3(y up),4(y down),5(z up),6(z down)
2024-03-19 15:48:17 +08:00
// 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<int, Server_config> 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 开机后进入主页面发出检测断电续打指令
2024-04-09 15:18:07 +08:00
int mks_ethernet;
2024-03-19 15:48:17 +08:00
/* 更新页面处理 */
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) {
2024-05-03 09:57:27 +08:00
switch (unhomed_move_mode)
{
case 1: // X_UP
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 X10 F3000\nG90\nM84\n"));
break;
case 2: // X_DOWN
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 X-10 F3000\nG90\nM84\n"));
break;
case 3: // Y_UP
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 Y10 F3000\nG90\nM84\n"));
break;
case 4: // Y_DOWN
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 Y-10 F3000\nG90\nM84\n"));
break;
case 5: // Z_UP
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-10 F600\nG90\nM84\n"));
break;
case 6: // Z_DOWN
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 Z10 F600\nG90\nM84\n"));
break;
default:
break;
}
unhomed_move_mode = 0;
2024-03-19 15:48:17 +08:00
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");
2024-04-09 15:18:07 +08:00
} else if (auto_level_dist == (float)0.5) {
2024-03-19 15:48:17 +08:00
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);
2024-04-09 15:18:07 +08:00
step_1 = false;
2024-03-19 15:48:17 +08:00
}
}
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() {
2024-05-03 09:57:27 +08:00
send_cmd_txt(tty_fd, "t5", "(" + std::to_string(printer_heater_bed_temperature) + "/" + std::to_string(printer_heater_bed_target) + ")");
2024-03-19 15:48:17 +08:00
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));
2024-04-09 15:18:07 +08:00
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));
}
2024-03-19 15:48:17 +08:00
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) {
2024-05-03 09:57:27 +08:00
check_print_interrupted();
2024-03-19 15:48:17 +08:00
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) {
2024-04-09 15:18:07 +08:00
ep->Send(json_run_a_gcode("M141 S" + std::to_string(target)));
2024-03-19 15:48:17 +08:00
}
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) {
2024-04-09 15:18:07 +08:00
// 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());
2024-03-19 15:48:17 +08:00
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));
2024-05-03 09:57:27 +08:00
unhomed_move_mode = 2;
2024-03-19 15:48:17 +08:00
}
void move_x_increase() {
ep->Send(move(AXIS_X, "+" + std::to_string(printer_move_dist), 130));
2024-05-03 09:57:27 +08:00
unhomed_move_mode = 1;
2024-03-19 15:48:17 +08:00
}
void move_y_decrease() {
ep->Send(move(AXIS_Y, "-" + std::to_string(printer_move_dist), 130));
2024-05-03 09:57:27 +08:00
unhomed_move_mode = 4;
2024-03-19 15:48:17 +08:00
}
void move_y_increase() {
ep->Send(move(AXIS_Y, "+" + std::to_string(printer_move_dist), 130));
2024-05-03 09:57:27 +08:00
unhomed_move_mode = 3;
2024-03-19 15:48:17 +08:00
}
void move_z_decrease() {
ep->Send(move(AXIS_Z, "-" + std::to_string(printer_move_dist), 10));
2024-05-03 09:57:27 +08:00
unhomed_move_mode = 5;
2024-03-19 15:48:17 +08:00
}
void move_z_increase() {
ep->Send(move(AXIS_Z, "+" + std::to_string(printer_move_dist), 10));
2024-05-03 09:57:27 +08:00
unhomed_move_mode = 6;
2024-03-19 15:48:17 +08:00
}
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 = "";
2024-04-09 15:18:07 +08:00
system("curl -X POST http://127.0.0.1:7125/printer/breakmacro");
system("curl -X POST http://127.0.0.1:7125/printer/breakheater");
2024-03-19 15:48:17 +08:00
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() {
2024-04-09 15:18:07 +08:00
switch (current_page_id)
{
case TJC_PAGE_OPEN_FILAMENTVIDEO_3:
break;
case TJC_PAGE_PRINT_FILAMENT:
2024-03-19 15:48:17 +08:00
jump_to_print_low_temp = true;
2024-04-09 15:18:07 +08:00
break;
default:
2024-03-19 15:48:17 +08:00
jump_to_filament_pop_1 = true;
2024-04-09 15:18:07 +08:00
break;
2024-03-19 15:48:17 +08:00
}
}
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 {
2024-04-09 15:18:07 +08:00
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);
2024-03-19 15:48:17 +08:00
page_to(TJC_PAGE_SYS_OK);
2024-04-09 15:18:07 +08:00
std::cout << "machine_type:" << machine_type << std::endl;
send_cmd_txt(tty_fd, "t2", machine_type);
2024-03-19 15:48:17 +08:00
}
}
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) {
2024-05-03 09:57:27 +08:00
current_connected_ssid_name = hex_to_utf8(status_result.ssid); // 如果已经连接wifi获取wifi的名字
2024-03-19 15:48:17 +08:00
} 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() {
2024-04-09 15:18:07 +08:00
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);
}
2024-03-19 15:48:17 +08:00
}
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) {
2024-05-03 09:57:27 +08:00
send_cmd_txt(tty_fd, "t" + std::to_string(i+1), hex_to_utf8(status_result.ssid));
2024-03-19 15:48:17 +08:00
} 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<char*>(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();
2024-04-09 15:18:07 +08:00
get_mks_ethernet();
2024-03-19 15:48:17 +08:00
// 不再使用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() {
2024-05-03 09:57:27 +08:00
// page_to(TJC_PAGE_UPDATE_FINISH);
sleep(5);
system("sync");
system("systemctl restart makerbase-client.service");
2024-03-19 15:48:17 +08:00
}
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";
2024-05-03 09:57:27 +08:00
ep->Send(json_run_a_gcode("ABORT\n"));
2024-03-19 15:48:17 +08:00
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");
2024-04-09 15:18:07 +08:00
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/'");
2024-05-03 09:57:27 +08:00
system("cp /root/frp/frpc.toml /home/mks/gcode_files/sda1/QD_Log/server.cfg");
2024-03-19 15:48:17 +08:00
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() {
2024-04-09 15:18:07 +08:00
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");
}
2024-03-19 15:48:17 +08:00
}
void go_to_showqr() {
2024-04-09 15:18:07 +08:00
std::string qrmessage;
2024-03-19 15:48:17 +08:00
get_mks_connection_method();
page_to(TJC_PAGE_SHOW_QR);
2024-04-09 15:18:07 +08:00
if (strcmp(status_result.wpa_state, "COMPLETED") == 0 || mks_ethernet) {
2024-03-19 15:48:17 +08:00
if (qr_refreshed == false) {
2024-05-03 09:57:27 +08:00
send_cmd_cp_close(tty_fd, "cp0");
2024-03-19 15:48:17 +08:00
if (open_qr_refreshed == true || access("/home/mks/qrcode/qrcode.jpg", F_OK) == -1)
2024-04-09 15:18:07 +08:00
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");
} else if (qrmessage.find("No") != -1) {
send_cmd_vis(tty_fd, "t4", "1");
} else {
open_qr_refreshed = true;
refresh_files_list_picture("/home/mks/qrcode/qrcode.jpg", 176, 0);
qr_refreshed = true;
}
2024-03-19 15:48:17 +08:00
}
} 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();
2024-04-09 15:18:07 +08:00
if (connection_method == 1 && strcmp(status_result.wpa_state, "COMPLETED") == 0) {
2024-03-19 15:48:17 +08:00
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<std::string> &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) {
2024-05-03 09:57:27 +08:00
// system("curl -s -S -L -o /root/frp/server_list.json http://www.aws.qidi3dprinter.com:5050/downloads/server_list.json");
get_mks_selected_server();
std::string server_for_command = selected_server.empty() ? "aws" : selected_server;
std::string command = "curl -s -S -L -o /root/frp/server_list.json http://www." + server_for_command + ".qidi3dprinter.com:5050/downloads/server_list.json";
std::cout << "Executing command: " << command << std::endl;
system(command.c_str());
2024-03-19 15:48:17 +08:00
} 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<std::string> 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() {
2024-04-09 15:18:07 +08:00
if (connection_method == 0 || strcmp(status_result.wpa_state, "COMPLETED") != 0) {
2024-03-19 15:48:17 +08:00
send_cmd_picc(tty_fd, "b2", "217");
send_cmd_picc2(tty_fd, "b2", "220");
2024-04-09 15:18:07 +08:00
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");
2024-03-19 15:48:17 +08:00
} else {
send_cmd_picc(tty_fd, "b2", "218");
send_cmd_picc2(tty_fd, "b2", "219");
2024-04-09 15:18:07 +08:00
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");
2024-03-19 15:48:17 +08:00
}
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<char, 128> buffer;
std::string result;
std::unique_ptr<FILE, decltype(&pclose)> 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;
2024-05-03 09:57:27 +08:00
target_soc_version = run_python_code("python3 /root/auto_update/version_check.py");
2024-03-19 15:48:17 +08:00
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");
2024-05-03 09:57:27 +08:00
system("python3 /root/auto_update/download_update.py\n");
2024-03-19 15:48:17 +08:00
// 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");
}
2024-04-09 15:18:07 +08:00
}
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;
2024-05-03 09:57:27 +08:00
}
std::string hex_to_utf8(const std::string& hex) {
std::ostringstream utf8;
size_t i = 0;
while (i < hex.size()) {
if (i + 3 < hex.size() && hex[i] == '\\' && hex[i + 1] == 'x') {
std::string hex_byte = hex.substr(i + 2, 2);
int value;
std::istringstream(hex_byte) >> std::hex >> value;
utf8 << static_cast<char>(value);
i += 4;
} else {
utf8 << hex[i++];
}
}
return utf8.str();
}
void check_print_interrupted() {
std::ifstream infile("/home/mks/klipper_config/saved_variables.cfg");
if (!infile) {
std::cerr << "无法打开文件 " << "/home/mks/klipper_config/saved_variables.cfg" << std::endl;
return;
}
std::stringstream buffer;
buffer << infile.rdbuf();
std::string printer_variables = buffer.str();
infile.close();
std::string print_interrupted_status = printer_variables.substr(printer_variables.find("was_interrupted =") + 18, 5);
if (print_interrupted_status != "False") {
ep->Send(json_run_a_gcode("DETECT_INTERRUPTION\n"));
jump_to_resume_print = true;
}
2024-03-19 15:48:17 +08:00
}