Marlin 2.0 for Flying Bear 4S/5
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

550 lines
15 KiB

/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include <lvgl.h>
#include <stdint.h>
#include <string.h>
// the colors of the last MKS Ui
#undef LV_COLOR_BACKGROUND
#define LV_COLOR_BACKGROUND LV_COLOR_MAKE(0x1A, 0x1A, 0x1A)
#define TFT_LV_PARA_BACK_BODY_COLOR LV_COLOR_MAKE(0x4A, 0x52, 0xFF)
#include "tft_lvgl_configuration.h"
#include "tft_multi_language.h"
#include "pic_manager.h"
#include "draw_ready_print.h"
#include "draw_language.h"
#include "draw_set.h"
#include "draw_tool.h"
#include "draw_print_file.h"
#include "draw_dialog.h"
#include "draw_printing.h"
#include "draw_operation.h"
#include "draw_preHeat.h"
#include "draw_extrusion.h"
#include "draw_home.h"
#include "draw_gcode.h"
#include "draw_more.h"
#include "draw_move_motor.h"
#include "draw_fan.h"
#include "draw_about.h"
#include "draw_change_speed.h"
#include "draw_manuaLevel.h"
#include "draw_error_message.h"
#include "printer_operation.h"
#include "draw_machine_para.h"
#include "draw_machine_settings.h"
#include "draw_motor_settings.h"
#include "draw_advance_settings.h"
#include "draw_acceleration_settings.h"
#include "draw_number_key.h"
#include "draw_jerk_settings.h"
#include "draw_pause_position.h"
#include "draw_step_settings.h"
#include "draw_tmc_current_settings.h"
#include "draw_eeprom_settings.h"
#include "draw_max_feedrate_settings.h"
#include "draw_tmc_step_mode_settings.h"
#include "draw_level_settings.h"
#include "draw_tramming_pos_settings.h"
#include "draw_auto_level_offset_settings.h"
#include "draw_filament_change.h"
#include "draw_filament_settings.h"
#include "draw_homing_sensitivity_settings.h"
#include "draw_baby_stepping.h"
#include "draw_keyboard.h"
#include "draw_media_select.h"
#include "draw_encoder_settings.h"
#include "../../../inc/MarlinConfigPre.h"
#if ENABLED(MKS_WIFI_MODULE)
#include "wifiSerial.h"
#include "wifi_module.h"
#include "wifi_upload.h"
#include "draw_wifi_settings.h"
#include "draw_wifi.h"
#include "draw_wifi_list.h"
#include "draw_wifi_tips.h"
#include "draw_cloud_bind.h"
#endif
#define ESP_WIFI 0x02
#define AP_MODEL 0x01
#define STA_MODEL 0x02
#define FILE_SYS_USB 0
#define FILE_SYS_SD 1
#define TICK_CYCLE 1
#define PARA_SEL_ICON_TEXT_COLOR LV_COLOR_MAKE(0x4A, 0x52, 0xFF);
#define TFT35
#ifdef TFT35
#define TFT_WIDTH 480
#define TFT_HEIGHT 320
#define titleHeight 36 // TFT_screen.title_high
#define INTERVAL_H 2 // TFT_screen.gap_h // 2
#define INTERVAL_V 2 // TFT_screen.gap_v // 2
#define BTN_X_PIXEL 117 // TFT_screen.btn_x_pixel
#define BTN_Y_PIXEL 140 // TFT_screen.btn_y_pixel
#define SIMPLE_FIRST_PAGE_GRAP 30
#define BUTTON_TEXT_Y_OFFSET -20
#define TITLE_XPOS 3 // TFT_screen.title_xpos
#define TITLE_YPOS 5 // TFT_screen.title_ypos
#define FILE_BTN_CNT 6
#define OTHER_BTN_XPIEL 117
#define OTHER_BTN_YPIEL 92
#define FILE_PRE_PIC_X_OFFSET 8
#define FILE_PRE_PIC_Y_OFFSET 0
#define PREVIEW_LITTLE_PIC_SIZE 40910 // 400*100+9*101+1
#define PREVIEW_SIZE 202720 // (PREVIEW_LITTLE_PIC_SIZE+800*200+201*9+1)
// machine parameter ui
#define PARA_UI_POS_X 10
#define PARA_UI_POS_Y 50
#define PARA_UI_SIZE_X 450
#define PARA_UI_SIZE_Y 40
#define PARA_UI_ARROW_V 12
#define PARA_UI_BACK_POS_X 400
#define PARA_UI_BACK_POS_Y 270
#define PARA_UI_TURN_PAGE_POS_X 320
#define PARA_UI_TURN_PAGE_POS_Y 270
#define PARA_UI_VALUE_SIZE_X 370
#define PARA_UI_VALUE_POS_X 400
#define PARA_UI_VALUE_V 5
#define PARA_UI_STATE_POS_X 380
#define PARA_UI_STATE_V 2
#define PARA_UI_VALUE_SIZE_X_2 200
#define PARA_UI_VALUE_POS_X_2 320
#define PARA_UI_VALUE_V_2 5
#define PARA_UI_VALUE_BTN_X_SIZE 70
#define PARA_UI_VALUE_BTN_Y_SIZE 28
#define PARA_UI_BACK_BTN_X_SIZE 70
#define PARA_UI_BACK_BTN_Y_SIZE 40
#define QRCODE_X 20
#define QRCODE_Y 40
#define QRCODE_WIDTH 160
#else // ifdef TFT35
#define TFT_WIDTH 320
#define TFT_HEIGHT 240
#endif // ifdef TFT35
#ifdef __cplusplus
extern "C" {
#endif
extern char public_buf_m[100];
extern char public_buf_l[30];
typedef struct {
uint32_t spi_flash_flag;
uint8_t disp_rotation_180;
bool multiple_language;
uint8_t language;
uint8_t leveling_mode;
bool from_flash_pic;
bool finish_power_off;
bool pause_reprint;
uint8_t wifi_mode_sel;
uint8_t fileSysType;
uint8_t wifi_type;
bool cloud_enable,
encoder_enable;
xy_int_t trammingPos[5];
int filamentchange_load_length,
filamentchange_load_speed,
filamentchange_unload_length,
filamentchange_unload_speed;
celsius_t filament_limit_temp;
float pausePosX, pausePosY, pausePosZ;
uint32_t curFilesize;
} CFG_ITMES;
typedef struct UI_Config_Struct {
uint8_t curTempType:1,
extruderIndex:3,
stepHeat:4,
extruderIndexBak:4;
bool leveling_first_time:1,
para_ui_page:1,
configWifi:1,
command_send:1,
filament_load_heat_flg:1,
filament_heat_completed_load:1,
filament_unload_heat_flg:1,
filament_heat_completed_unload:1,
filament_loading_completed:1,
filament_unloading_completed:1,
filament_loading_time_flg:1,
filament_unloading_time_flg:1;
uint8_t wifi_name[32];
uint8_t wifi_key[64];
uint8_t cloud_hostUrl[96];
// Extruder Steps distances (mm)
uint8_t extruStep;
static constexpr uint8_t eStepMin = 1,
eStepMed = 5,
eStepMax = 10;
// Extruder speed (mm/s)
uint8_t extruSpeed;
static constexpr uint8_t eSpeedH = 1,
eSpeedN = 10,
eSpeedL = 20;
uint8_t print_state;
uint8_t stepPrintSpeed;
uint8_t waitEndMoves;
uint8_t dialogType;
uint8_t F[4];
uint8_t filament_rate;
uint16_t moveSpeed;
uint16_t cloud_port;
uint16_t moveSpeed_bak;
uint32_t totalSend;
uint32_t filament_loading_time,
filament_unloading_time,
filament_loading_time_cnt,
filament_unloading_time_cnt;
float move_dist;
celsius_t hotendTargetTempBak;
float current_x_position_bak,
current_y_position_bak,
current_z_position_bak,
current_e_position_bak;
} UI_CFG;
typedef enum {
MAIN_UI,
PRINT_READY_UI,
PRINT_FILE_UI,
PRINTING_UI,
MOVE_MOTOR_UI,
OPERATE_UI,
PAUSE_UI,
EXTRUSION_UI,
FAN_UI,
PREHEAT_UI,
CHANGE_SPEED_UI,
TEMP_UI,
SET_UI,
ZERO_UI,
SPRAYER_UI,
MACHINE_UI,
LANGUAGE_UI,
ABOUT_UI,
LOG_UI,
DISK_UI,
CALIBRATE_UI,
DIALOG_UI,
WIFI_UI,
MORE_UI,
FILETRANSFER_UI,
FILETRANSFERSTATE_UI,
PRINT_MORE_UI,
FILAMENTCHANGE_UI,
LEVELING_UI,
MESHLEVELING_UI,
BIND_UI,
#if HAS_BED_PROBE
NOZZLE_PROBE_OFFSET_UI,
#endif
TOOL_UI,
HARDWARE_TEST_UI,
WIFI_LIST_UI,
KEYBOARD_UI,
WIFI_TIPS_UI,
MACHINE_PARA_UI,
MACHINE_SETTINGS_UI,
TEMPERATURE_SETTINGS_UI,
MOTOR_SETTINGS_UI,
MACHINE_TYPE_UI,
STROKE_UI,
HOME_DIR_UI,
ENDSTOP_TYPE_UI,
FILAMENT_SETTINGS_UI,
LEVELING_PARA_UI,
DELTA_LEVELING_PARA_UI,
MANUAL_LEVELING_POSITION_UI,
MAXFEEDRATE_UI,
STEPS_UI,
ACCELERATION_UI,
JERK_UI,
MOTORDIR_UI,
HOMESPEED_UI,
NOZZLE_CONFIG_UI,
HOTBED_CONFIG_UI,
ADVANCED_UI,
DOUBLE_Z_UI,
ENABLE_INVERT_UI,
NUMBER_KEY_UI,
BABYSTEP_UI,
ERROR_MESSAGE_UI,
PAUSE_POS_UI,
TMC_CURRENT_UI,
TMC_MODE_UI,
EEPROM_SETTINGS_UI,
WIFI_SETTINGS_UI,
HOMING_SENSITIVITY_UI,
ENCODER_SETTINGS_UI,
TOUCH_CALIBRATION_UI,
GCODE_UI,
MEDIA_SELECT_UI
} DISP_STATE;
typedef struct {
DISP_STATE _disp_state[100];
int _disp_index;
} DISP_STATE_STACK;
typedef struct {
int16_t days;
uint16_t hours;
uint8_t minutes;
volatile int8_t seconds;
int8_t ms_10;
int8_t start;
} PRINT_TIME;
extern PRINT_TIME print_time;
typedef enum {
PrintAcceleration,
RetractAcceleration,
TravelAcceleration,
XAcceleration,
YAcceleration,
ZAcceleration,
E0Acceleration,
E1Acceleration,
XMaxFeedRate,
YMaxFeedRate,
ZMaxFeedRate,
E0MaxFeedRate,
E1MaxFeedRate,
XJerk,
YJerk,
ZJerk,
EJerk,
Xstep,
Ystep,
Zstep,
E0step,
E1step,
Xcurrent,
Ycurrent,
Zcurrent,
E0current,
E1current,
pause_pos_x,
pause_pos_y,
pause_pos_z,
level_pos_x1,
level_pos_y1,
level_pos_x2,
level_pos_y2,
level_pos_x3,
level_pos_y3,
level_pos_x4,
level_pos_y4,
level_pos_x5,
level_pos_y5,
#if HAS_BED_PROBE
x_offset,
y_offset,
z_offset,
#endif
load_length,
load_speed,
unload_length,
unload_speed,
filament_temp,
x_sensitivity,
y_sensitivity,
z_sensitivity,
z2_sensitivity
} num_key_value_state;
extern num_key_value_state value;
typedef enum {
wifiName,
wifiPassWord,
wifiConfig,
autoLevelGcodeCommand,
GCodeCommand,
} keyboard_value_state;
extern keyboard_value_state keyboard_value;
extern CFG_ITMES gCfgItems;
extern UI_CFG uiCfg;
extern DISP_STATE disp_state;
extern DISP_STATE last_disp_state;
extern DISP_STATE_STACK disp_state_stack;
extern lv_style_t tft_style_scr;
extern lv_style_t tft_style_label_pre;
extern lv_style_t tft_style_label_rel;
extern lv_style_t style_line;
extern lv_style_t style_para_value_pre;
extern lv_style_t style_para_value_rel;
extern lv_style_t style_num_key_pre;
extern lv_style_t style_num_key_rel;
extern lv_style_t style_num_text;
extern lv_style_t style_sel_text;
extern lv_style_t style_para_value;
extern lv_style_t style_para_back;
extern lv_style_t lv_bar_style_indic;
extern lv_style_t style_btn_pr;
extern lv_style_t style_btn_rel;
extern lv_point_t line_points[4][2];
void gCfgItems_init();
void ui_cfg_init();
void tft_style_init();
extern char *creat_title_text();
void preview_gcode_prehandle(char *path);
void update_spi_flash();
void update_gcode_command(int addr, uint8_t *s);
void get_gcode_command(int addr, uint8_t *d);
void lv_serial_capt_hook(void *, uint8_t);
void lv_eom_hook(void *);
#if HAS_GCODE_PREVIEW
void disp_pre_gcode(int xpos_pixel, int ypos_pixel);
#endif
void GUI_RefreshPage();
void clear_cur_ui();
void draw_return_ui();
void goto_previous_ui();
void sd_detection();
void gCfg_to_spiFlah();
void print_time_count();
void LV_TASK_HANDLER();
void lv_ex_line(lv_obj_t *line, lv_point_t *points);
#ifdef __cplusplus
} /* C-declarations for C++ */
#endif
// Set the same image for both Released and Pressed
void lv_imgbtn_set_src_both(lv_obj_t *imgbtn, const void *src);
// Set label styles for Released and Pressed
void lv_imgbtn_use_label_style(lv_obj_t *imgbtn);
// Set label styles for Released and Pressed
void lv_btn_use_label_style(lv_obj_t *btn);
// Set the same style for both Released and Pressed
void lv_btn_set_style_both(lv_obj_t *btn, lv_style_t *style);
// Create a screen
lv_obj_t* lv_screen_create(DISP_STATE newScreenType, const char *title = nullptr);
// Create an empty label
lv_obj_t* lv_label_create_empty(lv_obj_t *par);
// Create a label with style and text
lv_obj_t* lv_label_create(lv_obj_t *par, const char *text);
// Create a label with style, position, and text
lv_obj_t* lv_label_create(lv_obj_t *par, lv_coord_t x, lv_coord_t y, const char *text);
// Create a button with callback, ID, and Style.
lv_obj_t* lv_btn_create(lv_obj_t *par, lv_event_cb_t cb, const int id, lv_style_t *style=&style_para_value);
// Create a button with callback and ID, with label style.
lv_obj_t* lv_label_btn_create(lv_obj_t *par, lv_event_cb_t cb, const int id=0);
// Create a button with callback and ID, with button style.
lv_obj_t* lv_button_btn_create(lv_obj_t *par, lv_event_cb_t cb, const int id=0);
// Create a button with position, size, callback, ID, and style.
lv_obj_t* lv_btn_create(lv_obj_t *par, lv_coord_t x, lv_coord_t y, lv_coord_t w, lv_coord_t h, lv_event_cb_t cb, const int id, lv_style_t *style);
// Create a button with position, size, callback, and ID. Style set to style_para_value.
lv_obj_t* lv_btn_create(lv_obj_t *par, lv_coord_t x, lv_coord_t y, lv_coord_t w, lv_coord_t h, lv_event_cb_t cb, const int id=0);
// Create a button with position, size, callback, and ID, with label style.
lv_obj_t* lv_label_btn_create(lv_obj_t *par, lv_coord_t x, lv_coord_t y, lv_coord_t w, lv_coord_t h, lv_event_cb_t cb, const int id=0);
// Create a button with position, size, callback, and ID, with button style.
lv_obj_t* lv_button_btn_create(lv_obj_t *par, lv_coord_t x, lv_coord_t y, lv_coord_t w, lv_coord_t h, lv_event_cb_t cb, const int id=0);
// Create a button with callback and ID. Style set to style_para_back.
lv_obj_t* lv_btn_create_back(lv_obj_t *par, lv_event_cb_t cb, const int id=0);
// Create a button with position, size, callback, and ID. Style set to style_para_back.
lv_obj_t* lv_btn_create_back(lv_obj_t *par, lv_coord_t x, lv_coord_t y, lv_coord_t w, lv_coord_t h, lv_event_cb_t cb, const int id=0);
// Create an image button with image, callback, and ID. Use label style.
lv_obj_t* lv_imgbtn_create(lv_obj_t *par, const char *img, lv_event_cb_t cb, const int id=0);
// Create an image button with image, position, callback, and ID. Use label style.
lv_obj_t* lv_imgbtn_create(lv_obj_t *par, const char *img, lv_coord_t x, lv_coord_t y, lv_event_cb_t cb, const int id=0);
// Create a big image button with a label, follow the LVGL UI standard.
lv_obj_t* lv_big_button_create(lv_obj_t *par, const char *img, const char *text, lv_coord_t x, lv_coord_t y, lv_event_cb_t cb, const int id, bool centerLabel = false);
// Create a menu item, follow the LVGL UI standard.
lv_obj_t* lv_screen_menu_item(lv_obj_t *par, const char *text, lv_coord_t x, lv_coord_t y, lv_event_cb_t cb, const int id, const int index, bool drawArrow = true);
lv_obj_t* lv_screen_menu_item_1_edit(lv_obj_t *par, const char *text, lv_coord_t x, lv_coord_t y, lv_event_cb_t cb, const int id, const int index, const char *editValue);
lv_obj_t* lv_screen_menu_item_2_edit(lv_obj_t *par, const char *text, lv_coord_t x, lv_coord_t y, lv_event_cb_t cb, const int id, const int index, const char *editValue, const int idEdit2, const char *editValue2);
lv_obj_t* lv_screen_menu_item_onoff(lv_obj_t *par, const char *text, lv_coord_t x, lv_coord_t y, lv_event_cb_t cb, const int id, const int index, const bool curValue);
void lv_screen_menu_item_onoff_update(lv_obj_t *btn, const bool curValue);
#define _DIA_1(T) (uiCfg.dialogType == DIALOG_##T)
#define DIALOG_IS(V...) DO(DIA,||,V)