From 8aa2368a71438a8f5cd22673e2f6a37d1ff63a1e Mon Sep 17 00:00:00 2001 From: thisiskeithb <13375512+thisiskeithb@users.noreply.github.com> Date: Sun, 19 Apr 2020 18:33:18 -0700 Subject: [PATCH] Improve Cancel Gcode setting (#575) Improve Cancel Gcode setting Users can now enable/disable Cancel Gcode through the Feature menu. Disabled by default. --- TFT/src/User/API/flashStore.c | 45 +++++++++++------ TFT/src/User/Menu/FeatureSettings.c | 78 +++++++++++++++++------------ TFT/src/User/Menu/Printing.c | 16 +++--- TFT/src/User/Menu/Settings.c | 12 +++-- TFT/src/User/Menu/Settings.h | 14 ++++-- 5 files changed, 101 insertions(+), 64 deletions(-) diff --git a/TFT/src/User/API/flashStore.c b/TFT/src/User/API/flashStore.c index ac262dc40e..2dd663d5a5 100644 --- a/TFT/src/User/API/flashStore.c +++ b/TFT/src/User/API/flashStore.c @@ -1,9 +1,8 @@ #include "flashStore.h" #include "STM32_Flash.h" -#define PARA_SIZE 512 //bytes #define TSC_SIGN 0x20190827 // DO NOT MODIFY -#define PARA_SIGN 0x20200403 // (YYYMMDD) If a new setting parameter is added, modify here and initialize the initial value in the "infoSettingsReset()" function +#define PARA_SIGN 0x20200405 // (YYYMMDD) If a new setting parameter is added, modify here and initialize the initial value in the "infoSettingsReset()" function extern u32 TSC_Para[7]; // extern SETTINGS infoSettings; // @@ -60,12 +59,18 @@ bool readStoredPara(void) infoSettings.baudrate = byteToWord(data + (index += 4), 4); infoSettings.language = byteToWord(data + (index += 4), 4); infoSettings.mode = byteToWord(data + (index += 4), 4); + infoSettings.unified_menu = byteToWord(data + (index += 4), 4); infoSettings.rotate_ui = byteToWord(data + (index += 4), 4); + infoSettings.bg_color = byteToWord(data + (index += 4), 4); infoSettings.font_color = byteToWord(data + (index += 4), 4); infoSettings.title_bg_color = byteToWord(data + (index += 4), 4); infoSettings.reminder_color = byteToWord(data + (index += 4), 4); infoSettings.sd_reminder_color = byteToWord(data + (index += 4), 4); + infoSettings.status_xyz_bg_color = byteToWord(data + (index += 4), 4); + infoSettings.list_border_color = byteToWord(data + (index += 4), 4); + infoSettings.list_button_color = byteToWord(data + (index += 4), 4); + infoSettings.silent = byteToWord(data + (index += 4), 4); infoSettings.terminalACK = byteToWord(data + (index += 4), 4); infoSettings.move_speed = byteToWord(data + (index += 4), 4); @@ -84,6 +89,7 @@ bool readStoredPara(void) infoSettings.send_start_gcode = byteToWord(data + (index += 4), 4); infoSettings.send_end_gcode = byteToWord(data + (index += 4), 4); + infoSettings.send_cancel_gcode = byteToWord(data + (index += 4), 4); infoSettings.auto_off = byteToWord(data + (index += 4), 4); infoSettings.ps_active_high = byteToWord(data + (index += 4), 4); infoSettings.auto_off_temp = byteToWord(data + (index += 4), 4); @@ -108,7 +114,7 @@ bool readStoredPara(void) infoSettings.m27_refresh_time = byteToWord(data + (index += 4), 4); infoSettings.m27_active = byteToWord(data + (index += 4), 4); - for(int i = 0; i < HEATER_NUM; i++) + for(int i = 0; i < HEAT_NUM; i++) { infoSettings.max_temp[i] = byteToWord(data + (index += 4), 4); } @@ -178,12 +184,18 @@ void storePara(void) wordToByte(infoSettings.baudrate, data + (index += 4)); wordToByte(infoSettings.language, data + (index += 4)); wordToByte(infoSettings.mode, data + (index += 4)); + wordToByte(infoSettings.unified_menu, data + (index += 4)); wordToByte(infoSettings.rotate_ui, data + (index += 4)); + wordToByte(infoSettings.bg_color, data + (index += 4)); wordToByte(infoSettings.font_color, data + (index += 4)); wordToByte(infoSettings.title_bg_color, data + (index += 4)); wordToByte(infoSettings.reminder_color, data + (index += 4)); wordToByte(infoSettings.sd_reminder_color, data + (index += 4)); + wordToByte(infoSettings.status_xyz_bg_color, data + (index += 4)); + wordToByte(infoSettings.list_border_color, data + (index += 4)); + wordToByte(infoSettings.list_button_color, data + (index += 4)); + wordToByte(infoSettings.silent, data + (index += 4)); wordToByte(infoSettings.terminalACK, data + (index += 4)); wordToByte(infoSettings.move_speed, data + (index += 4)); @@ -202,6 +214,7 @@ void storePara(void) wordToByte(infoSettings.send_start_gcode, data + (index += 4)); wordToByte(infoSettings.send_end_gcode, data + (index += 4)); + wordToByte(infoSettings.send_cancel_gcode, data + (index += 4)); wordToByte(infoSettings.auto_off, data + (index += 4)); wordToByte(infoSettings.ps_active_high, data + (index += 4)); wordToByte(infoSettings.auto_off_temp, data + (index += 4)); @@ -226,32 +239,32 @@ void storePara(void) wordToByte(infoSettings.m27_refresh_time, data + (index += 4)); wordToByte(infoSettings.m27_active, data + (index += 4)); - for(int i = 0; i < HEATER_NUM; i++) + for(int i = 0; i < HEAT_NUM; i++) { - wordToByte(infoSettings.max_temp[i], data + (index += 4)); + wordToByte(infoSettings.max_temp[i], data + (index += 4)); } wordToByte(infoSettings.min_ext_temp, data + (index += 4)); for(int i = 0; i < MAX_TOOL_COUNT ;i++) { - wordToByte(infoSettings.fan_max[i], data + (index += 4)); + wordToByte(infoSettings.fan_max[i], data + (index += 4)); } - wordToByte(infoSettings.fan_percentage, data + (index += 4)); + wordToByte(infoSettings.fan_percentage, data + (index += 4)); for(int i = 0; i < AXIS_NUM ;i++) //x, y, z { - wordToByte(infoSettings.invert_axis[i], data + (index += 4)); - wordToByte(infoSettings.machine_size_min[i], data + (index += 4)); - wordToByte(infoSettings.machine_size_max[i], data + (index += 4)); - wordToByte(infoSettings.level_feedrate[i], data + (index += 4)); + wordToByte(infoSettings.invert_axis[i], data + (index += 4)); + wordToByte(infoSettings.machine_size_min[i], data + (index += 4)); + wordToByte(infoSettings.machine_size_max[i], data + (index += 4)); + wordToByte(infoSettings.level_feedrate[i], data + (index += 4)); } for(int i = 0; i < SPEED_COUNT ;i++) { - wordToByte(infoSettings.axis_speed[i], data + (index += 4)); - wordToByte(infoSettings.ext_speed[i], data + (index += 4)); + wordToByte(infoSettings.axis_speed[i], data + (index += 4)); + wordToByte(infoSettings.ext_speed[i], data + (index += 4)); } wordToByte(infoSettings.pause_retract_len, data + (index += 4)); @@ -264,7 +277,7 @@ void storePara(void) for(int i = 0; i < TOTAL_AXIS ;i++) { - wordToByte(infoSettings.pause_feedrate[i], data + (index += 4)); // X, Y, Z, E + wordToByte(infoSettings.pause_feedrate[i], data + (index += 4)); // X, Y, Z, E } wordToByte(infoSettings.level_edge, data + (index += 4)); @@ -273,8 +286,8 @@ void storePara(void) for (int i = 0; i < PREHEAT_COUNT; i++) { - wordToByte(infoSettings.preheat_temp[i], data + (index += 4)); - wordToByte(infoSettings.preheat_bed[i], data + (index += 4)); + wordToByte(infoSettings.preheat_temp[i], data + (index += 4)); + wordToByte(infoSettings.preheat_bed[i], data + (index += 4)); } diff --git a/TFT/src/User/Menu/FeatureSettings.c b/TFT/src/User/Menu/FeatureSettings.c index 68837c61bc..cb07f3fb72 100644 --- a/TFT/src/User/Menu/FeatureSettings.c +++ b/TFT/src/User/Menu/FeatureSettings.c @@ -42,13 +42,12 @@ const LABEL itemMoveSpeed[ITEM_SPEED_NUM] = { LABEL_FAST_SPEED }; - // //add key number index of the items // typedef enum { - SKEY_HIDEACK = 0, + SKEY_ACK = 0, SKEY_INVERT_X, SKEY_INVERT_Y, SKEY_INVERT_Z, @@ -106,9 +105,9 @@ LISTITEM settingPage[SKEY_COUNT] = { {ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_KNOB_LED, LABEL_OFF }, #endif #ifdef LCD_LED_PWM_CHANNEL - {ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_BRIGHTNESS, LABEL_100_PERCENT }, - {ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_BRIGHTNESS_DIM, LABEL_100_PERCENT }, - {ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_DIM_IDLE_TIMER, LABEL_60_SECONDS }, + {ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_BRIGHTNESS, LABEL_DYNAMIC }, + {ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_BRIGHTNESS_DIM, LABEL_DYNAMIC }, + {ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_DIM_IDLE_TIMER, LABEL_DYNAMIC }, #endif #ifdef ST7920_SPI {ICONCHAR_BLANK, LIST_TOGGLE, LABEL_ST7920_FULLSCREEN, LABEL_OFF }, @@ -148,7 +147,7 @@ void updateFeatureSettings(uint8_t key_val) uint8_t item_index = fe_cur_page*LISTITEM_PER_PAGE+ key_val; switch (item_index) { - case SKEY_HIDEACK: + case SKEY_ACK: infoSettings.terminalACK = (infoSettings.terminalACK + 1) % TOGGLE_NUM; settingPage[item_index].icon = toggleitem[infoSettings.terminalACK]; featureSettingsItems.items[key_val] = settingPage[item_index]; @@ -266,22 +265,27 @@ void updateFeatureSettings(uint8_t key_val) break; #ifdef LCD_LED_PWM_CHANNEL - case SKEY_LCD_BRIGHTNESS: - infoSettings.lcd_brightness = (infoSettings.lcd_brightness + 1) % ITEM_BRIGHTNESS_NUM; - settingPage[item_index].valueLabel = itemBrightness[infoSettings.lcd_brightness]; - featureSettingsItems.items[key_val] = settingPage[item_index]; - Set_LCD_Brightness(LCD_BRIGHTNESS[infoSettings.lcd_brightness]); + case SKEY_LCD_BRIGHTNESS: + { + infoSettings.lcd_brightness = (infoSettings.lcd_brightness + 1) % ITEM_BRIGHTNESS_NUM; + char tempstr[8]; + my_sprintf(tempstr,(char *)textSelect(LABEL_PERCENT_VALUE),infoSettings.lcd_idle_brightness); + setDynamicTextValue(key_val,tempstr); + Set_LCD_Brightness(LCD_BRIGHTNESS[infoSettings.lcd_brightness]); + menuDrawListItem(&featureSettingsItems.items[key_val], key_val); + } + break; - menuDrawListItem(&featureSettingsItems.items[key_val], key_val); - break; + case SKEY_LCD_BRIGTHNESS_DIM: + { + infoSettings.lcd_idle_brightness = (infoSettings.lcd_idle_brightness + 1) % ITEM_BRIGHTNESS_NUM; + char tempstr[8]; + my_sprintf(tempstr,(char *)textSelect(LABEL_PERCENT_VALUE),infoSettings.lcd_idle_brightness); + setDynamicTextValue(key_val,tempstr); - case SKEY_LCD_BRIGTHNESS_DIM: - infoSettings.lcd_idle_brightness = (infoSettings.lcd_idle_brightness + 1) % ITEM_BRIGHTNESS_NUM; - settingPage[item_index].valueLabel = itemBrightness[infoSettings.lcd_idle_brightness]; - featureSettingsItems.items[key_val] = settingPage[item_index]; - - menuDrawListItem(&featureSettingsItems.items[key_val], key_val); - break; + menuDrawListItem(&featureSettingsItems.items[key_val], key_val); + } + break; case SKEY_LCD_DIM_IDLE_TIMER: infoSettings.lcd_idle_timer = (infoSettings.lcd_idle_timer + 1) % ITEM_SECONDS_NUM; @@ -315,7 +319,7 @@ void loadFeatureSettings(){ uint8_t item_index = fe_cur_page*LISTITEM_PER_PAGE + i; switch (item_index) { - case SKEY_HIDEACK: + case SKEY_ACK: settingPage[item_index].icon = toggleitem[infoSettings.terminalACK]; featureSettingsItems.items[i] = settingPage[item_index]; break; @@ -388,19 +392,27 @@ void loadFeatureSettings(){ break; #endif #ifdef LCD_LED_PWM_CHANNEL - case SKEY_LCD_BRIGHTNESS: - settingPage[item_index].valueLabel = itemBrightness[infoSettings.lcd_brightness]; - featureSettingsItems.items[i] = settingPage[item_index]; - break; + case SKEY_LCD_BRIGHTNESS: + { + char tempstr[8]; + my_sprintf(tempstr,(char *)textSelect(LABEL_PERCENT_VALUE),infoSettings.lcd_idle_brightness); + setDynamicTextValue(i,tempstr); + featureSettingsItems.items[i] = settingPage[item_index]; + } + break; - case SKEY_LCD_BRIGTHNESS_DIM: - settingPage[item_index].valueLabel = itemBrightness[infoSettings.lcd_idle_brightness]; - featureSettingsItems.items[i] = settingPage[item_index]; - break; - case SKEY_LCD_DIM_IDLE_TIMER: - settingPage[item_index].valueLabel = itemDimTime[infoSettings.lcd_idle_timer]; - featureSettingsItems.items[i] = settingPage[item_index]; - break; + case SKEY_LCD_BRIGTHNESS_DIM: + { + char tempstr[8]; + my_sprintf(tempstr,(char *)textSelect(LABEL_PERCENT_VALUE),infoSettings.lcd_idle_brightness); + setDynamicTextValue(i,tempstr); + featureSettingsItems.items[i] = settingPage[item_index]; + break; + } + case SKEY_LCD_DIM_IDLE_TIMER: + settingPage[item_index].valueLabel = itemDimTime[infoSettings.lcd_idle_timer]; + featureSettingsItems.items[i] = settingPage[item_index]; + break; #endif //LCD_LED_PWM_CHANNEL #ifdef ST7920_SPI diff --git a/TFT/src/User/Menu/Printing.c b/TFT/src/User/Menu/Printing.c index a3110255f5..41a3b70dea 100644 --- a/TFT/src/User/Menu/Printing.c +++ b/TFT/src/User/Menu/Printing.c @@ -145,11 +145,11 @@ void printSetUpdateWaiting(bool isWaiting) void printerGotoIdle(void) { // disable all heater - for(TOOL i = BED; i < HEATER_NUM; i++) { + for(TOOL i = BED; i < (infoSettings.tool_count+1); i++) { mustStoreCmd("%s S0\n", heatCmd[i]); } // disable all fan - for(u8 i = 0; i < FAN_NUM; i++) { + for(u8 i = 0; i < (infoSettings.fan_count+1); i++) { mustStoreCmd("%s S0\n", fanCmd[i]); } // disable all stepper @@ -475,9 +475,9 @@ void toggleinfo(void) { if (OS_GetTimeMs() > nextTime) { - if (EXTRUDER_NUM > 1) + if (infoSettings.tool_count > 1) { - c_Ext = (TOOL)((c_Ext + 1) % HEATER_NUM); + c_Ext = (TOOL)((c_Ext + 1) % (infoSettings.tool_count+1)); if (c_Ext == 0) { c_Ext += 1; @@ -486,7 +486,7 @@ void toggleinfo(void) reValueNozzle(EXT_ICON_POS); } - if (FAN_NUM > 1) + if (infoSettings.fan_count > 1) { c_fan = (c_fan + 1) % FAN_NUM; rapid_serial_loop(); //perform backend printing loop before drawing to avoid printer idling @@ -711,10 +711,8 @@ void abortPrinting(void) } heatClearIsWaiting(); - - if(infoSettings.send_cancel_gcode == 1){ - mustStoreCmd(PRINT_CANCEL_GCODE); - } + if(infoSettings.send_cancel_gcode == 1) + mustStoreCmd(printcodes->cancel_gcode); endPrinting(); exitPrinting(); diff --git a/TFT/src/User/Menu/Settings.c b/TFT/src/User/Menu/Settings.c index 712f199cd8..24af55419c 100644 --- a/TFT/src/User/Menu/Settings.c +++ b/TFT/src/User/Menu/Settings.c @@ -1,6 +1,5 @@ #include "Settings.h" #include "includes.h" -#include "config_default.h" SETTINGS infoSettings; @@ -24,12 +23,18 @@ void infoSettingsReset(void) infoSettings.baudrate = BAUDRATE; infoSettings.language = DEFAULT_LANGUAGE; infoSettings.mode = DEFAULT_LCD_MODE; + infoSettings.unified_menu = UNIFIED_MENU; infoSettings.rotate_ui = 0; + infoSettings.bg_color = BACKGROUND_COLOR; infoSettings.font_color = FONT_COLOR; infoSettings.title_bg_color = TITLE_BACKGROUND_COLOR; infoSettings.reminder_color = REMINDER_FONT_COLOR; infoSettings.sd_reminder_color = VOLUME_REMINDER_FONT_COLOR; + infoSettings.status_xyz_bg_color = STATUS_XYZ_BG_COLOR; + infoSettings.list_border_color = LISTVIEW_BORDER_COLOR; + infoSettings.list_button_color = LISTVIEW_ICON_COLOR; + infoSettings.silent = 0; infoSettings.terminalACK = 0; infoSettings.move_speed = 1; @@ -51,6 +56,7 @@ void infoSettingsReset(void) infoSettings.send_start_gcode = 0; infoSettings.send_end_gcode = 0; + infoSettings.send_cancel_gcode = 1; infoSettings.auto_off = 0; infoSettings.ps_active_high = PS_ON_ACTIVE_HIGH; infoSettings.auto_off_temp = AUTO_SHUT_DOWN_MAXTEMP; @@ -84,7 +90,7 @@ void infoSettingsReset(void) for(int i = 0; i < MAX_TOOL_COUNT ;i++) { - infoSettings.fan_max[i] = default_max_temp[i]; + infoSettings.fan_max[i] = default_max_fanPWM[i]; } infoSettings.fan_percentage = 1; @@ -116,7 +122,7 @@ void infoSettingsReset(void) infoSettings.pause_feedrate[i] = default_pause_speed[i]; // X, Y, Z, E } - infoSettings.level_edge = 20; + infoSettings.level_edge = LEVELING_EDGE_DISTANCE; infoSettings.level_z_pos = LEVELING_POINT_Z; infoSettings.level_z_raise = LEVELING_POINT_MOVE_Z; diff --git a/TFT/src/User/Menu/Settings.h b/TFT/src/User/Menu/Settings.h index 93e2898eee..0d137407a0 100644 --- a/TFT/src/User/Menu/Settings.h +++ b/TFT/src/User/Menu/Settings.h @@ -19,6 +19,7 @@ #define CUSTOM_GCODES_COUNT 15 #define MAX_STRING_LENGTH 20 #define MAX_LABEL_LENGTH 7 +#define MAX_GCODE_NAME_LENGTH 24 #define MAX_GCODE_LENGTH 75 #define MIN_STRING_LENGTH 3 @@ -38,12 +39,18 @@ typedef struct uint32_t baudrate; uint8_t language; uint8_t mode; + uint8_t unified_menu; uint8_t rotate_ui; + uint8_t bg_color; uint8_t font_color; uint8_t title_bg_color; uint8_t reminder_color; uint8_t sd_reminder_color; + uint8_t status_xyz_bg_color; + uint8_t list_border_color; + uint8_t list_button_color; + uint8_t silent; uint8_t auto_off; uint8_t terminalACK; @@ -64,6 +71,7 @@ typedef struct uint8_t send_start_gcode; uint8_t send_end_gcode; + uint8_t send_cancel_gcode; uint8_t ps_active_high; uint8_t auto_off_temp; @@ -109,15 +117,15 @@ typedef struct }SETTINGS; typedef struct{ -char marlin_title[MAX_STRING_LENGTH+1]; -char preheat_name[PREHEAT_COUNT][MAX_LABEL_LENGTH+1]; +char marlin_title[MAX_GCODE_LENGTH+1]; +char preheat_name[PREHEAT_COUNT][MAX_GCODE_LENGTH+1]; }STRINGS_STORE; typedef struct { uint8_t count; -char name[CUSTOM_GCODES_COUNT][MAX_STRING_LENGTH+1]; +char name[CUSTOM_GCODES_COUNT][MAX_GCODE_LENGTH+1]; char gcode[CUSTOM_GCODES_COUNT][MAX_GCODE_LENGTH+1]; }CUSTOM_GCODES;