From 0f89ae5b3882af8ef6ac6165f3a48418c40370a7 Mon Sep 17 00:00:00 2001 From: Antonino Di Guardo <64427768+digant73@users.noreply.github.com> Date: Thu, 9 Sep 2021 06:02:07 +0200 Subject: [PATCH] Optimized parsing in interfaceCmd.c and parseACK.c + configurable M109/M190 (#2156) --- .../config.ini | 67 ++-- .../config_rrf.ini | 70 ++-- TFT/src/User/API/FlashStore.c | 2 +- TFT/src/User/API/Gcode/gcode.c | 4 +- TFT/src/User/API/Gcode/mygcodefs.c | 2 +- TFT/src/User/API/HW_Init.c | 8 +- TFT/src/User/API/LCD_Dimming.c | 14 +- TFT/src/User/API/Language/Language.inc | 5 +- TFT/src/User/API/Language/language_am.h | 5 +- TFT/src/User/API/Language/language_ca.h | 5 +- TFT/src/User/API/Language/language_cn.h | 5 +- TFT/src/User/API/Language/language_cz.h | 5 +- TFT/src/User/API/Language/language_de.h | 5 +- TFT/src/User/API/Language/language_en.h | 5 +- TFT/src/User/API/Language/language_es.h | 5 +- TFT/src/User/API/Language/language_fr.h | 5 +- TFT/src/User/API/Language/language_gr.h | 5 +- TFT/src/User/API/Language/language_hu.h | 5 +- TFT/src/User/API/Language/language_it.h | 5 +- TFT/src/User/API/Language/language_jp.h | 5 +- TFT/src/User/API/Language/language_keywords.h | 5 +- TFT/src/User/API/Language/language_nl.h | 5 +- TFT/src/User/API/Language/language_pl.h | 5 +- TFT/src/User/API/Language/language_pt.h | 5 +- TFT/src/User/API/Language/language_ru.h | 5 +- TFT/src/User/API/Language/language_sk.h | 5 +- TFT/src/User/API/Language/language_sl.h | 5 +- TFT/src/User/API/Language/language_tc.h | 5 +- TFT/src/User/API/Language/language_tr.h | 5 +- TFT/src/User/API/Language/language_uk.h | 5 +- TFT/src/User/API/LevelingControl.c | 19 +- TFT/src/User/API/LevelingControl.h | 22 +- TFT/src/User/API/PowerFailed.c | 2 +- TFT/src/User/API/Printing.c | 23 +- TFT/src/User/API/ProbeOffsetControl.c | 2 +- TFT/src/User/API/RRFStatusControl.c | 2 +- TFT/src/User/API/SerialConnection.c | 12 +- TFT/src/User/API/SerialConnection.h | 4 +- TFT/src/User/API/Settings.c | 15 +- TFT/src/User/API/Settings.h | 114 ++++--- TFT/src/User/API/UI/ListManager.c | 23 +- TFT/src/User/API/UI/ui_draw.h | 6 +- TFT/src/User/API/boot.c | 2 +- TFT/src/User/API/config.c | 17 +- TFT/src/User/API/config.h | 5 +- TFT/src/User/API/config.inc | 5 +- TFT/src/User/API/interfaceCmd.c | 316 ++++++++++-------- TFT/src/User/API/interfaceCmd.h | 43 +-- TFT/src/User/API/menu.c | 12 +- TFT/src/User/API/parseACK.c | 276 ++++++++------- TFT/src/User/API/parseACK.h | 14 +- TFT/src/User/Configuration.h | 74 ++-- TFT/src/User/Hal/LCD_Encoder.c | 18 +- TFT/src/User/Hal/LCD_Encoder.h | 5 +- TFT/src/User/Hal/stm32f10x/Serial.c | 2 +- TFT/src/User/Hal/stm32f2_f4xx/Serial.c | 2 +- TFT/src/User/Menu/ConnectionSettings.c | 8 +- TFT/src/User/Menu/FeatureSettings.c | 8 +- TFT/src/User/Menu/LevelCorner.c | 9 +- TFT/src/User/Menu/Print.c | 38 ++- TFT/src/User/Menu/PrintingMenu.c | 4 +- TFT/src/User/Menu/ScreenSettings.c | 14 +- TFT/src/User/Menu/Terminal.c | 41 +-- TFT/src/User/Menu/Terminal.h | 8 +- TFT/src/User/SanityCheck.h | 43 +-- TFT/src/User/Variants/pin_MKS_TFT32_V1_4.h | 2 +- TFT/src/User/config.ini | 67 ++-- 67 files changed, 875 insertions(+), 684 deletions(-) diff --git a/Copy to SD Card root directory to update/config.ini b/Copy to SD Card root directory to update/config.ini index 561989329d..2f707ce989 100644 --- a/Copy to SD Card root directory to update/config.ini +++ b/Copy to SD Card root directory to update/config.ini @@ -97,23 +97,34 @@ serial_port:P1:6 P2:0 P3:0 P4:0 # The TFT intercepts the M600 gcode (filament change) and emulates the handling logic # otherwise provided by Marlin firmware. # -# NOTE: Enable it, in case Marlin firmware does not properly support M600 on the mainboard. +# NOTE: Enable it in case Marlin firmware does not properly support M600 on the mainboard. # # Options: [disable: 0, enable: 1] emulated_m600:1 +#### Emulated M109 And M190 +# The TFT intercepts the blocking M109 and M190 gcodes (set target hotend and bed temperatures) +# and converts them to the non blocking M104 and M140 gcodes respectively. +# +# NOTE: Enable it so the TFT can still communicate with Marlin firmware even if the target +# temperature is not reached yet. Otherwise the communication (TFT<->Marlin) will be +# frozen until desired/set temperatures are obtained. +# +# Options: [disable: 0, enable: 1] +emulated_m109_m190:1 + #-------------------------------------------------------------------- # UI Settings #-------------------------------------------------------------------- -#### Rotate UI +#### Rotated UI # Rotate UI by 180 degrees. # Options: [disable: 0, enable: 1] -rotate_ui:0 +rotated_ui:0 -#### Default Touch Mode Language -# Select the language to display on the LCD while in Touch Mode. +#### Touch Mode Language +# Select the language to use on the LCD while in Touch Mode. # # NOTE: To add/flash a second language copy the required "language_xx.ini" file from # "Language Packs" folder to the SD root folder. @@ -133,7 +144,7 @@ language:0 # Options: [disable: 0, enable: 1] status_screen:1 -#### Default Touch Mode Colors +#### Touch Mode Colors # Set colors used in Touch Mode. # # NOTE: Select an option from the provided list or set the color (RGB888 format) hex value directly @@ -285,7 +296,7 @@ default_mode:1 # Options: [disable: 0, enable: 1] serial_always_on:0 -#### Default Marlin Mode Background & Font Colors +#### Marlin Mode Background & Font Colors # Set colors used in Marlin Mode. # # NOTE: Select an option from the provided list or set the color (RGB888 format) hex value directly @@ -385,21 +396,21 @@ fan_max:F0:255 F1:255 F2:255 F3:255 F4:255 F5:255 CtL:255 CtI:255 size_min:X0 Y0 Z0 size_max:X235 Y235 Z250 -#### Default X & Y Move Speeds/Feedrates +#### X & Y Move Speeds/Feedrates # Move speeds used in Move menu to move X and Y axes. # Format: [move_speed: S N F] # Unit: [feedrate in mm/min] # Value range: [min: 10, max: 12000] xy_speed:S1000 N3000 F5000 -#### Default Z Speeds/Feedrates +#### Z Speeds/Feedrates # Move speeds used in Move menu to move Z axis. # Format: [move_speed: S N F] # Unit: [feedrate in mm/min] # Value range: [min: 10, max: 12000] z_speed:S500 N1000 F2000 -#### Default Extruder Speeds/Feedrates +#### Extruder Speeds/Feedrates # Speed settings used to extrude/retract. # Format: [ext_speed: S N F] # Unit: [feedrate in mm/min] @@ -593,7 +604,7 @@ preheat_temp_6:T250 B90 # Options: [disable: 0, enable: 1] ps_active_high:1 -#### Default Power Supply Auto Shutdown Mode +#### Power Supply Auto Shutdown Mode # Used in case it is supported by the TFT. # Enable power supply auto shutdown after a print is finished when hotend temperature drops below target value. # Options: [disable: 0, enable: 1, auto-detect: 2] @@ -618,7 +629,7 @@ ps_auto_shutdown_temp:50 # 2) Configure the sensor in the firmware of your mainboard. # 3) Add M75 to "start_gcode" and M77 to "end_gcode" of the TFT (or your slicer). -#### Default Filament Runout Sensor +#### Filament Runout Sensor # Select the type of filament runout sensor and its default enabled/disabled state. # # Options: [Normal Disabled: 0, Normal Enabled: 1, Smart Disabled: 2, Smart Enabled: 3] @@ -652,7 +663,7 @@ fil_runout_distance:7 # Power Loss Recovery & BTT UPS Settings #-------------------------------------------------------------------- -#### Default Power Loss Recovery Mode +#### Power Loss Recovery Mode # Enable power loss recovery. # Disable to reduce the loss of SD card or U disk. # Options: [disable: 0, enable: 1] @@ -698,40 +709,40 @@ toast_sound:1 alert_sound:1 heater_sound:1 -#### Default LCD Brightness Levels (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) -# Default brightness values for LCD. +#### LCD Brightness Levels (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) +# Brightness levels for LCD. # Options: [OFF: 0, 5%: 1, 10%: 2, 20%: 3, 30%: 4, 40%: 5, 50%: 6, 60%: 7, 70%: 8, 80%: 9, 90%: 10, 100%: 11] -## Default display brightness +## LCD brightness level lcd_brightness:11 -## Display brightness when device is idle +## LCD brightness level when device is idle lcd_idle_brightness:5 -#### Default LCD Idle Time (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) +#### LCD Idle Time (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) # The LCD screen will dim to idle brightness, if the display is not touched for the # period of the LCD idle time. # Options: [OFF: 0, 5sec: 1, 10sec: 2, 30sec: 3, 1min: 4, 2min: 5, 5min: 6, 10min: 7] lcd_idle_time:4 -#### Block Touch On Idle (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) -# If enabled, when the LCD is on idle (dimmed) then the first touch on the display will +#### LCD Lock On Idle (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) +# If enabled, when the LCD is idle (dimmed) then the first touch on the display will # simply restore the normal LCD brightness. The touch is then skipped, preventing to # trigger any undesired action due to the dimmed display. # -# NOTE: The block is always avoided if the LCD brightness is restored by the use of -# rotary encoder instead of pressing on the display. +# NOTE: The lock is always avoided if the LCD brightness is restored by the use of +# rotary encoder instead of touching the display. # # Options: [disable: 0, enable: 1] -block_touch_on_idle:0 +lcd_lock_on_idle:0 #### Knob LED Color (only for TFT28/TFT35_E3/TFT43/TFT50/TFT70 V3.0) # Knob LED color at startup. # Options: [OFF: 0, WHITE: 1, RED: 2, ORANGE: 3, YELLOW: 4, GREEN: 5, BLUE: 6, INDIGO: 7, VIOLET: 8] knob_led_color:0 -#### Knob Idle State (only for TFT28/TFT35_E3/TFT43/TFT50/TFT70 V3.0) -# If enabled, when the LCD is on idle (dimmed) then the knob LED will be also switched off. +#### Knob LED Idle State (only for TFT28/TFT35_E3/TFT43/TFT50/TFT70 V3.0) +# If enabled, when the LCD is idle (dimmed) then the knob LED will be also switched off. # Options: [disable: 0, enable: 1] knob_led_idle:1 @@ -800,15 +811,15 @@ custom_gcode_7:M502\n # - start_gcode: M75\n # - end_gcode: M77\n -#### Default Start Gcode Status +#### Start Gcode Status # Options: [disable: 0, enable: 1] start_gcode_enabled:0 -#### Default End Gcode Status +#### End Gcode Status # Options: [disable: 0, enable: 1] end_gcode_enabled:0 -#### Default Cancel Gcode Status +#### Cancel Gcode Status # Options: [disable: 0, enable: 1] cancel_gcode_enabled:0 diff --git a/Copy to SD Card root directory to update/config_rrf.ini b/Copy to SD Card root directory to update/config_rrf.ini index 94aa312f16..733b9cab4a 100644 --- a/Copy to SD Card root directory to update/config_rrf.ini +++ b/Copy to SD Card root directory to update/config_rrf.ini @@ -55,8 +55,9 @@ #Add the following line in your cancel.g file to allow the screen to know when a job has been cancelled. # #M118 P2 S"//action::prompt_begin Resuming" +# +#In case you need help, please visit: https://discord.com/invite/uS97Qs7 or https://teamgloomy.github.io/ -In case you need help, please visit: https://discord.com/invite/uS97Qs7 or https://teamgloomy.github.io/ #-------------------------------------------------------------------- # General Settings @@ -91,23 +92,34 @@ serial_port:P1:5 P2:0 P3:0 P4:0 # The TFT intercepts the M600 gcode (filament change) and emulates the handling logic # otherwise provided by Marlin firmware. # -# NOTE: Enable it, in case Marlin firmware does not properly support M600 on the mainboard. +# NOTE: Enable it in case Marlin firmware does not properly support M600 on the mainboard. # # Options: [disable: 0, enable: 1] emulated_m600:1 +#### Emulated M109 And M190 +# The TFT intercepts the blocking M109 and M190 gcodes (set target hotend and bed temperatures) +# and converts them to the non blocking M104 and M140 gcodes respectively. +# +# NOTE: Enable it so the TFT can still communicate with Marlin firmware even if the target +# temperature is not reached yet. Otherwise the communication (TFT<->Marlin) will be +# frozen until desired/set temperatures are obtained. +# +# Options: [disable: 0, enable: 1] +emulated_m109_m190:1 + #-------------------------------------------------------------------- # UI Settings #-------------------------------------------------------------------- -#### Rotate UI +#### Rotated UI # Rotate UI by 180 degrees. # Options: [disable: 0, enable: 1] -rotate_ui:0 +rotated_ui:0 -#### Default Touch Mode Language -# Select the language to display on the LCD while in Touch Mode. +#### Touch Mode Language +# Select the language to use on the LCD while in Touch Mode. # # NOTE: To add/flash a second language copy the required "language_xx.ini" file from # "Language Packs" folder to the SD root folder. @@ -127,7 +139,7 @@ language:0 # Options: [disable: 0, enable: 1] status_screen:1 -#### Default Touch Mode Colors +#### Touch Mode Colors # Set colors used in Touch Mode. # # NOTE: Select an option from the provided list or set the color (RGB888 format) hex value directly @@ -279,7 +291,7 @@ default_mode:1 # Options: [disable: 0, enable: 1] serial_always_on:1 -#### Default Marlin Mode Background & Font Colors +#### Marlin Mode Background & Font Colors # Set colors used in Marlin Mode. # # NOTE: Select an option from the provided list or set the color (RGB888 format) hex value directly @@ -379,21 +391,21 @@ fan_max:F0:255 F1:255 F2:255 F3:255 F4:255 F5:255 CtL:255 CtI:255 size_min:X0 Y0 Z0 size_max:X235 Y235 Z250 -#### Default X & Y Move Speeds/Feedrates +#### X & Y Move Speeds/Feedrates # Move speeds used in Move menu to move X and Y axes. # Format: [move_speed: S N F] # Unit: [feedrate in mm/min] # Value range: [min: 10, max: 12000] xy_speed:S1000 N3000 F5000 -#### Default Z Speeds/Feedrates +#### Z Speeds/Feedrates # Move speeds used in Move menu to move Z axis. # Format: [move_speed: S N F] # Unit: [feedrate in mm/min] # Value range: [min: 10, max: 12000] z_speed:S500 N1000 F2000 -#### Default Extruder Speeds/Feedrates +#### Extruder Speeds/Feedrates # Speed settings used to extrude/retract. # Format: [ext_speed: S N F] # Unit: [feedrate in mm/min] @@ -587,7 +599,7 @@ preheat_temp_6:T250 B90 # Options: [disable: 0, enable: 1] ps_active_high:1 -#### Default Power Supply Auto Shutdown Mode +#### Power Supply Auto Shutdown Mode # Used in case it is supported by the TFT. # Enable power supply auto shutdown after a print is finished when hotend temperature drops below target value. # Options: [disable: 0, enable: 1, auto-detect: 2] @@ -612,7 +624,7 @@ ps_auto_shutdown_temp:50 # 2) Configure the sensor in the firmware of your mainboard. # 3) Add M75 to "start_gcode" and M77 to "end_gcode" of the TFT (or your slicer). -#### Default Filament Runout Sensor +#### Filament Runout Sensor # Select the type of filament runout sensor and its default enabled/disabled state. # # Options: [Normal Disabled: 0, Normal Enabled: 1, Smart Disabled: 2, Smart Enabled: 3] @@ -646,7 +658,7 @@ fil_runout_distance:7 # Power Loss Recovery & BTT UPS Settings #-------------------------------------------------------------------- -#### Default Power Loss Recovery Mode +#### Power Loss Recovery Mode # Enable power loss recovery. # Disable to reduce the loss of SD card or U disk. # Options: [disable: 0, enable: 1] @@ -692,40 +704,40 @@ toast_sound:1 alert_sound:1 heater_sound:1 -#### Default LCD Brightness Levels (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) -# Default brightness values for LCD. +#### LCD Brightness Levels (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) +# Brightness levels for LCD. # Options: [OFF: 0, 5%: 1, 10%: 2, 20%: 3, 30%: 4, 40%: 5, 50%: 6, 60%: 7, 70%: 8, 80%: 9, 90%: 10, 100%: 11] -## Default display brightness +## LCD brightness level lcd_brightness:11 -## Display brightness when device is idle +## LCD brightness level when device is idle lcd_idle_brightness:5 -#### Default LCD Idle Time (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) +#### LCD Idle Time (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) # The LCD screen will dim to idle brightness, if the display is not touched for the # period of the LCD idle time. # Options: [OFF: 0, 5sec: 1, 10sec: 2, 30sec: 3, 1min: 4, 2min: 5, 5min: 6, 10min: 7] lcd_idle_time:4 -#### Block Touch On Idle (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) -# If enabled, when the LCD is on idle (dimmed) then the first touch on the display will +#### LCD Lock On Idle (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) +# If enabled, when the LCD is idle (dimmed) then the first touch on the display will # simply restore the normal LCD brightness. The touch is then skipped, preventing to # trigger any undesired action due to the dimmed display. # -# NOTE: The block is always avoided if the LCD brightness is restored by the use of -# rotary encoder instead of pressing on the display. +# NOTE: The lock is always avoided if the LCD brightness is restored by the use of +# rotary encoder instead of touching the display. # # Options: [disable: 0, enable: 1] -block_touch_on_idle:0 +lcd_lock_on_idle:0 #### Knob LED Color (only for TFT28/TFT35_E3/TFT43/TFT50/TFT70 V3.0) # Knob LED color at startup. # Options: [OFF: 0, WHITE: 1, RED: 2, ORANGE: 3, YELLOW: 4, GREEN: 5, BLUE: 6, INDIGO: 7, VIOLET: 8] knob_led_color:0 -#### Knob Idle State (only for TFT28/TFT35_E3/TFT43/TFT50/TFT70 V3.0) -# If enabled, when the LCD is on idle (dimmed) then the knob LED will be also switched off. +#### Knob LED Idle State (only for TFT28/TFT35_E3/TFT43/TFT50/TFT70 V3.0) +# If enabled, when the LCD is idle (dimmed) then the knob LED will be also switched off. # Options: [disable: 0, enable: 1] knob_led_idle:1 @@ -794,15 +806,15 @@ custom_gcode_7:M502\n # - start_gcode: M75\n # - end_gcode: M77\n -#### Default Start Gcode Status +#### Start Gcode Status # Options: [disable: 0, enable: 1] start_gcode_enabled:0 -#### Default End Gcode Status +#### End Gcode Status # Options: [disable: 0, enable: 1] end_gcode_enabled:0 -#### Default Cancel Gcode Status +#### Cancel Gcode Status # Options: [disable: 0, enable: 1] cancel_gcode_enabled:0 diff --git a/TFT/src/User/API/FlashStore.c b/TFT/src/User/API/FlashStore.c index 7379c67921..119db8aaad 100644 --- a/TFT/src/User/API/FlashStore.c +++ b/TFT/src/User/API/FlashStore.c @@ -68,7 +68,7 @@ void readStoredPara(void) else { memcpy(&infoSettings, data + (index += 4), sizeof(SETTINGS)); - if ((paraStatus & PARA_TSC_EXIST) == 0) infoSettings.rotate_ui = DISABLED; + if ((paraStatus & PARA_TSC_EXIST) == 0) infoSettings.rotated_ui = DISABLED; } } diff --git a/TFT/src/User/API/Gcode/gcode.c b/TFT/src/User/API/Gcode/gcode.c index 642c3bc9e8..e6d5a14ae9 100644 --- a/TFT/src/User/API/Gcode/gcode.c +++ b/TFT/src/User/API/Gcode/gcode.c @@ -246,8 +246,8 @@ void request_M0(void) void request_M98(char *filename) { - char command[CMD_MAX_CHAR]; - snprintf(command, CMD_MAX_CHAR, "M98 P/%s\n", filename); + CMD command; + snprintf(command, CMD_MAX_SIZE, "M98 P/%s\n", filename); rrfStatusSetMacroBusy(); mustStoreCmd(command); // prevent a race condition when rrfStatusQuery returns !busy before executing the macro diff --git a/TFT/src/User/API/Gcode/mygcodefs.c b/TFT/src/User/API/Gcode/mygcodefs.c index d168e9217d..2e06a2446c 100644 --- a/TFT/src/User/API/Gcode/mygcodefs.c +++ b/TFT/src/User/API/Gcode/mygcodefs.c @@ -70,7 +70,7 @@ bool scanPrintFilesGcodeFs(void) if (infoFile.fileCount >= FILE_NUM) continue; // Gcode max number is FILE_NUM - if (infoMachineSettings.long_filename_support == ENABLED) + if (infoMachineSettings.longFilename == ENABLED) { char *Pstr_tmp = strrchr(line, ' '); if (Pstr_tmp != NULL) diff --git a/TFT/src/User/API/HW_Init.c b/TFT/src/User/API/HW_Init.c index 9a210acd45..b3ce634be0 100644 --- a/TFT/src/User/API/HW_Init.c +++ b/TFT/src/User/API/HW_Init.c @@ -48,10 +48,10 @@ void HW_Init(void) Serial_Init(ALL_PORTS); // Initialize serial ports first if debugging is enabled #endif - LCD_RefreshDirection(infoSettings.rotate_ui); // refresh display direction after reading settings - scanUpdates(); // scan icon, fonts and config files - checkflashSign(); // check font/icon/config signature in SPI flash for update - initMachineSetting(); // load default machine settings + LCD_RefreshDirection(infoSettings.rotated_ui); // refresh display direction after reading settings + scanUpdates(); // scan icon, fonts and config files + checkflashSign(); // check font/icon/config signature in SPI flash for update + initMachineSetting(); // load default machine settings #ifdef LED_COLOR_PIN knob_LED_Init(); diff --git a/TFT/src/User/API/LCD_Dimming.c b/TFT/src/User/API/LCD_Dimming.c index ba182281b9..51d59d97a0 100644 --- a/TFT/src/User/API/LCD_Dimming.c +++ b/TFT/src/User/API/LCD_Dimming.c @@ -45,17 +45,17 @@ typedef struct { uint32_t idle_ms; bool dimmed; - bool blocked; + bool locked; } LCD_AUTO_DIM; LCD_AUTO_DIM lcd_dim = {0, false, false}; bool LCD_IsBlocked(void) { - if (!lcd_dim.blocked) + if (!lcd_dim.locked) return false; - lcd_dim.blocked = false; + lcd_dim.locked = false; return true; } @@ -67,7 +67,7 @@ void LCD_Wake(void) // the LCD dim function is activated. First check if it's dimmed if (lcd_dim.dimmed) { - lcd_dim.blocked = false; + lcd_dim.locked = false; lcd_dim.dimmed = false; LCD_SET_BRIGHTNESS(lcd_brightness[infoSettings.lcd_brightness]); @@ -97,8 +97,8 @@ void LCD_CheckDimming(void) { if (lcd_dim.dimmed) { - if (infoSettings.block_touch_on_idle && isPress()) // if touch is blocked on idle and pressing on the LCD (not on the encoder), - lcd_dim.blocked = true; // the first touch will be skipped preventing to trigger any undesired action + if (infoSettings.lcd_lock_on_idle && isPress()) // if touch is blocked on idle and pressing on the LCD (not on the encoder), + lcd_dim.locked = true; // the first touch will be skipped preventing to trigger any undesired action lcd_dim.dimmed = false; LCD_SET_BRIGHTNESS(lcd_brightness[infoSettings.lcd_brightness]); @@ -120,7 +120,7 @@ void LCD_CheckDimming(void) if (!lcd_dim.dimmed) { - lcd_dim.blocked = false; + lcd_dim.locked = false; lcd_dim.dimmed = true; LCD_SET_BRIGHTNESS(lcd_brightness[infoSettings.lcd_idle_brightness]); diff --git a/TFT/src/User/API/Language/Language.inc b/TFT/src/User/API/Language/Language.inc index d5699738f3..c601c3fbf5 100644 --- a/TFT/src/User/API/Language/Language.inc +++ b/TFT/src/User/API/Language/Language.inc @@ -1,6 +1,7 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings X_WORD (EMULATED_M600) -X_WORD (ROTATE_UI) +X_WORD (EMULATED_M109_M190) +X_WORD (ROTATED_UI) X_WORD (LANGUAGE) X_WORD (ACK_NOTIFICATION) X_WORD (FILES_SORT_BY) @@ -28,7 +29,7 @@ X_WORD (HEATER_SOUND) X_WORD (LCD_BRIGHTNESS) X_WORD (LCD_IDLE_BRIGHTNESS) X_WORD (LCD_IDLE_TIME) -X_WORD (BLOCK_TOUCH_ON_IDLE) +X_WORD (LCD_LOCK_ON_IDLE) X_WORD (KNOB_LED_COLOR) X_WORD (KNOB_LED_IDLE) X_WORD (START_GCODE_ENABLED) diff --git a/TFT/src/User/API/Language/language_am.h b/TFT/src/User/API/Language/language_am.h index f6c7170fe6..840a66e061 100644 --- a/TFT/src/User/API/Language/language_am.h +++ b/TFT/src/User/API/Language/language_am.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "Rotate UI" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Rotate UI" #define STRING_LANGUAGE "Հայերեն" #define STRING_ACK_NOTIFICATION "ACK notification style" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Brightness" #define STRING_LCD_IDLE_BRIGHTNESS "Idle brightness" #define STRING_LCD_IDLE_TIME "Idle timeout" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "Rotary Knob LED" #define STRING_KNOB_LED_IDLE "Rotary Knob LED idle" #define STRING_START_GCODE_ENABLED "Start Gcode before print" diff --git a/TFT/src/User/API/Language/language_ca.h b/TFT/src/User/API/Language/language_ca.h index cd70e879ed..7fb5e3dd7e 100644 --- a/TFT/src/User/API/Language/language_ca.h +++ b/TFT/src/User/API/Language/language_ca.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "Rotar" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Rotar" #define STRING_LANGUAGE "Català" #define STRING_ACK_NOTIFICATION "ACK notification style" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Lluminositat" #define STRING_LCD_IDLE_BRIGHTNESS "Dim Lluminositat LCD" #define STRING_LCD_IDLE_TIME "Temporitzador inactiu LCD" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "Perilla rotativa LED" #define STRING_KNOB_LED_IDLE "Rotary Knob LED idle" #define STRING_START_GCODE_ENABLED "Enviar Gcode inicial" diff --git a/TFT/src/User/API/Language/language_cn.h b/TFT/src/User/API/Language/language_cn.h index 928b7677e7..8a67d70eda 100644 --- a/TFT/src/User/API/Language/language_cn.h +++ b/TFT/src/User/API/Language/language_cn.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "模拟M600" - #define STRING_ROTATE_UI "旋转界面" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "旋转界面" #define STRING_LANGUAGE "简体中文" #define STRING_ACK_NOTIFICATION "ACK 弹窗类型" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "LCD背光亮度" #define STRING_LCD_IDLE_BRIGHTNESS "LCD睡眠背光亮度" #define STRING_LCD_IDLE_TIME "LCD自动睡眠时间" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "旋钮LED颜色" #define STRING_KNOB_LED_IDLE "旋钮LED自动睡眠" #define STRING_START_GCODE_ENABLED "执行打印前起始Gcode" diff --git a/TFT/src/User/API/Language/language_cz.h b/TFT/src/User/API/Language/language_cz.h index 89f6f73a07..e3af6daa0f 100644 --- a/TFT/src/User/API/Language/language_cz.h +++ b/TFT/src/User/API/Language/language_cz.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulace M600" - #define STRING_ROTATE_UI "Otočit UI" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Otočit UI" #define STRING_LANGUAGE "Čeština" #define STRING_ACK_NOTIFICATION "Styl oznámení ACK" #define STRING_FILES_SORT_BY "Řazení souborů" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "LCD jas" #define STRING_LCD_IDLE_BRIGHTNESS "LCD snížení jasu" #define STRING_LCD_IDLE_TIME "LCD snížení jasu po" - #define STRING_BLOCK_TOUCH_ON_IDLE "Blok. dotek při zatmavení" + #define STRING_LCD_LOCK_ON_IDLE "Blok. dotek při zatmavení" #define STRING_KNOB_LED_COLOR "Rotační knob LED" #define STRING_KNOB_LED_IDLE "Rotační knob LED idle" #define STRING_START_GCODE_ENABLED "Spustit Gcode před tiskem" diff --git a/TFT/src/User/API/Language/language_de.h b/TFT/src/User/API/Language/language_de.h index 1b217c16d5..2353d232d2 100644 --- a/TFT/src/User/API/Language/language_de.h +++ b/TFT/src/User/API/Language/language_de.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emuliere M600" - #define STRING_ROTATE_UI "UI drehen" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "UI drehen" #define STRING_LANGUAGE "Deutsch" #define STRING_ACK_NOTIFICATION "ACK - Stil" #define STRING_FILES_SORT_BY "Sortiere Dateien nach" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "LCD-Helligkeit" #define STRING_LCD_IDLE_BRIGHTNESS "LCD-Timeout-Helligkeit" #define STRING_LCD_IDLE_TIME "LCD-Timeout" - #define STRING_BLOCK_TOUCH_ON_IDLE "Kein Touch im Standby" + #define STRING_LCD_LOCK_ON_IDLE "Kein Touch im Standby" #define STRING_KNOB_LED_COLOR "Drehknopf LED Farbe" #define STRING_KNOB_LED_IDLE "Drehknopf LED idle Farbe" #define STRING_START_GCODE_ENABLED "Gcode vor Druck" diff --git a/TFT/src/User/API/Language/language_en.h b/TFT/src/User/API/Language/language_en.h index 80434b7204..62b26aabf8 100644 --- a/TFT/src/User/API/Language/language_en.h +++ b/TFT/src/User/API/Language/language_en.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "Rotate UI" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Rotate UI" #define STRING_LANGUAGE "English" #define STRING_ACK_NOTIFICATION "ACK notification style" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Brightness" #define STRING_LCD_IDLE_BRIGHTNESS "Idle brightness" #define STRING_LCD_IDLE_TIME "Idle timeout" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "Rotary Knob LED" #define STRING_KNOB_LED_IDLE "Rotary Knob LED idle" #define STRING_START_GCODE_ENABLED "Start Gcode before print" diff --git a/TFT/src/User/API/Language/language_es.h b/TFT/src/User/API/Language/language_es.h index cc393395f9..c7cd6da5b0 100644 --- a/TFT/src/User/API/Language/language_es.h +++ b/TFT/src/User/API/Language/language_es.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "Rotar" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Rotar" #define STRING_LANGUAGE "Español" #define STRING_ACK_NOTIFICATION "ACK notification style" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Brightness" #define STRING_LCD_IDLE_BRIGHTNESS "Idle brightness" #define STRING_LCD_IDLE_TIME "Idle timeout" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "Rotary Knob LED" #define STRING_KNOB_LED_IDLE "Rotary Knob LED idle" #define STRING_START_GCODE_ENABLED "Start Gcode before print" diff --git a/TFT/src/User/API/Language/language_fr.h b/TFT/src/User/API/Language/language_fr.h index eec40e3c8e..8326f8fa01 100644 --- a/TFT/src/User/API/Language/language_fr.h +++ b/TFT/src/User/API/Language/language_fr.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emuler M600" - #define STRING_ROTATE_UI "Rotation" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Rotation" #define STRING_LANGUAGE "Français" #define STRING_ACK_NOTIFICATION "Style de notification ACK" #define STRING_FILES_SORT_BY "Trier les fichiers par" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Luminosité" #define STRING_LCD_IDLE_BRIGHTNESS "Diminution luminosité" #define STRING_LCD_IDLE_TIME "Durée avant diminution" - #define STRING_BLOCK_TOUCH_ON_IDLE "Bloquer touches en veille" + #define STRING_LCD_LOCK_ON_IDLE "Bloquer touches en veille" #define STRING_KNOB_LED_COLOR "LED du bouton rotatif" #define STRING_KNOB_LED_IDLE "Veille du bouton rotatif" #define STRING_START_GCODE_ENABLED "Gcode avant l'impression" diff --git a/TFT/src/User/API/Language/language_gr.h b/TFT/src/User/API/Language/language_gr.h index d6bd0afbd5..50fad8ab61 100644 --- a/TFT/src/User/API/Language/language_gr.h +++ b/TFT/src/User/API/Language/language_gr.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "Περιστροφή UI" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Περιστροφή UI" #define STRING_LANGUAGE "Ελληνικά" #define STRING_ACK_NOTIFICATION "ACK notification style" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Φωτεινότητα" #define STRING_LCD_IDLE_BRIGHTNESS "Φωτεινότητα LCD σκοτεινή" #define STRING_LCD_IDLE_TIME "Xρονομετρητής αδράνειας οθόνης" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "LED περιστροφικού κουμπιού" #define STRING_KNOB_LED_IDLE "Rotary Knob LED idle" #define STRING_START_GCODE_ENABLED "Αρχικό Gcode προ εκτύπωσης" diff --git a/TFT/src/User/API/Language/language_hu.h b/TFT/src/User/API/Language/language_hu.h index 3110ac4163..5725643aa6 100644 --- a/TFT/src/User/API/Language/language_hu.h +++ b/TFT/src/User/API/Language/language_hu.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulált M600" - #define STRING_ROTATE_UI "Forgatás" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Forgatás" #define STRING_LANGUAGE "Magyar" #define STRING_ACK_NOTIFICATION "ACK Értesítési stílus" #define STRING_FILES_SORT_BY "Fájlok rendezése" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Fényerősség" #define STRING_LCD_IDLE_BRIGHTNESS "LCD Halványítás" #define STRING_LCD_IDLE_TIME "LCD Halványítási idő" - #define STRING_BLOCK_TOUCH_ON_IDLE "Érintés tiltás alapjáraton" + #define STRING_LCD_LOCK_ON_IDLE "Érintés tiltás alapjáraton" #define STRING_KNOB_LED_COLOR "Forgatógomb LED" #define STRING_KNOB_LED_IDLE "Forgatógomb tétlen" #define STRING_START_GCODE_ENABLED "Kezdő G-Kód" diff --git a/TFT/src/User/API/Language/language_it.h b/TFT/src/User/API/Language/language_it.h index c45959f031..4975d1bf99 100644 --- a/TFT/src/User/API/Language/language_it.h +++ b/TFT/src/User/API/Language/language_it.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "M600 emulato" - #define STRING_ROTATE_UI "Ruota" + #define STRING_EMULATED_M109_M190 "M109 / M190 emulati" + #define STRING_ROTATED_UI "Ruota" #define STRING_LANGUAGE "Italiano" #define STRING_ACK_NOTIFICATION "Tipo di popup" #define STRING_FILES_SORT_BY "Ordina file per" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Luminosità" #define STRING_LCD_IDLE_BRIGHTNESS "Luminosità in idle" #define STRING_LCD_IDLE_TIME "Timer luminosità" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "Blocco LCD in idle" #define STRING_KNOB_LED_COLOR "LED manopola " #define STRING_KNOB_LED_IDLE "LED manopola spento" #define STRING_START_GCODE_ENABLED "Inserisci start gcode" diff --git a/TFT/src/User/API/Language/language_jp.h b/TFT/src/User/API/Language/language_jp.h index 2b7aec7415..eec7434e44 100644 --- a/TFT/src/User/API/Language/language_jp.h +++ b/TFT/src/User/API/Language/language_jp.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "回転UI" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "回転UI" #define STRING_LANGUAGE "日本語" #define STRING_ACK_NOTIFICATION "ACK notification style" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "LCD明るさ" #define STRING_LCD_IDLE_BRIGHTNESS "LCDの輝度が薄暗い" #define STRING_LCD_IDLE_TIME "LCD調光アイドルタイマー" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "回転ノブLED" #define STRING_KNOB_LED_IDLE "Rotary Knob LED idle" #define STRING_START_GCODE_ENABLED "印刷前にGコードを開始する" diff --git a/TFT/src/User/API/Language/language_keywords.h b/TFT/src/User/API/Language/language_keywords.h index fd7f67ef56..6466505309 100644 --- a/TFT/src/User/API/Language/language_keywords.h +++ b/TFT/src/User/API/Language/language_keywords.h @@ -10,7 +10,8 @@ extern "C" { // config.ini Parameter Settings - Screen Settings and Feature Settings #define LANG_KEY_EMULATED_M600 "label_emulated_m600:" -#define LANG_KEY_ROTATE_UI "label_rotate_ui:" +#define LANG_KEY_EMULATED_M109_M190 "label_emulated_m109_m190:" +#define LANG_KEY_ROTATED_UI "label_rotated_ui:" #define LANG_KEY_LANGUAGE "label_language:" #define LANG_KEY_ACK_NOTIFICATION "label_ack_notification:" #define LANG_KEY_FILES_SORT_BY "label_files_sort_by:" @@ -38,7 +39,7 @@ extern "C" { #define LANG_KEY_LCD_BRIGHTNESS "label_lcd_brightness:" #define LANG_KEY_LCD_IDLE_BRIGHTNESS "label_lcd_idle_brightness:" #define LANG_KEY_LCD_IDLE_TIME "label_lcd_idle_time:" -#define LANG_KEY_BLOCK_TOUCH_ON_IDLE "label_block_touch_on_idle:" +#define LANG_KEY_LCD_LOCK_ON_IDLE "label_lcd_lock_on_idle:" #define LANG_KEY_KNOB_LED_COLOR "label_knob_led_color:" #define LANG_KEY_KNOB_LED_IDLE "label_knob_led_idle:" #define LANG_KEY_START_GCODE_ENABLED "label_start_gcode_enabled:" diff --git a/TFT/src/User/API/Language/language_nl.h b/TFT/src/User/API/Language/language_nl.h index 306e572b82..1753c9f320 100644 --- a/TFT/src/User/API/Language/language_nl.h +++ b/TFT/src/User/API/Language/language_nl.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "Draai UI" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Draai UI" #define STRING_LANGUAGE "Dutch" #define STRING_ACK_NOTIFICATION "ACK notification style" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Brightness" #define STRING_LCD_IDLE_BRIGHTNESS "Idle brightness" #define STRING_LCD_IDLE_TIME "Idle timeout" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "Draaiknop LED" #define STRING_KNOB_LED_IDLE "Draaiknop LED inactief" #define STRING_START_GCODE_ENABLED "Start Gcode before print" diff --git a/TFT/src/User/API/Language/language_pl.h b/TFT/src/User/API/Language/language_pl.h index 14f60453e3..44ecf9bab8 100644 --- a/TFT/src/User/API/Language/language_pl.h +++ b/TFT/src/User/API/Language/language_pl.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "Obrót" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Obrót" #define STRING_LANGUAGE "Polski" #define STRING_ACK_NOTIFICATION "ACK notification style" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Brightness" #define STRING_LCD_IDLE_BRIGHTNESS "Idle brightness" #define STRING_LCD_IDLE_TIME "Idle timeout" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "Rotary Knob LED" #define STRING_KNOB_LED_IDLE "Rotary Knob LED idle" #define STRING_START_GCODE_ENABLED "Start Gcode before print" diff --git a/TFT/src/User/API/Language/language_pt.h b/TFT/src/User/API/Language/language_pt.h index 6769127688..7d26107ef3 100644 --- a/TFT/src/User/API/Language/language_pt.h +++ b/TFT/src/User/API/Language/language_pt.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "Rodar" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Rodar" #define STRING_LANGUAGE "Portugues" #define STRING_ACK_NOTIFICATION "ACK notification style" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Brightness" #define STRING_LCD_IDLE_BRIGHTNESS "Idle brightness" #define STRING_LCD_IDLE_TIME "Idle timeout" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "Rotary Knob LED" #define STRING_KNOB_LED_IDLE "Rotary Knob LED idle" #define STRING_START_GCODE_ENABLED "Start Gcode before print" diff --git a/TFT/src/User/API/Language/language_ru.h b/TFT/src/User/API/Language/language_ru.h index 8cf92d7a42..49ac7aec90 100644 --- a/TFT/src/User/API/Language/language_ru.h +++ b/TFT/src/User/API/Language/language_ru.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Эмуляция M600" - #define STRING_ROTATE_UI "Переворот" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Переворот" #define STRING_LANGUAGE "Русский" #define STRING_ACK_NOTIFICATION "ACK стиль уведомления" #define STRING_FILES_SORT_BY "Сортировать по" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Яркость" #define STRING_LCD_IDLE_BRIGHTNESS "Регулировка яркости LCD" #define STRING_LCD_IDLE_TIME "Время до гашения LCD" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "Подсветка энкодера" #define STRING_KNOB_LED_IDLE "Простой подсветки энкодера" #define STRING_START_GCODE_ENABLED "G-код перед печатью" diff --git a/TFT/src/User/API/Language/language_sk.h b/TFT/src/User/API/Language/language_sk.h index ae93aa26a4..d2e561146f 100644 --- a/TFT/src/User/API/Language/language_sk.h +++ b/TFT/src/User/API/Language/language_sk.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "Otočiť" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Otočiť" #define STRING_LANGUAGE "Slovensky" #define STRING_ACK_NOTIFICATION "ACK notification style" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Jas LCD" #define STRING_LCD_IDLE_BRIGHTNESS "Zníženie jasu LCD" #define STRING_LCD_IDLE_TIME "Zníženie jasu LCD po" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "LED otočného tlačidla" #define STRING_KNOB_LED_IDLE "Rotary Knob LED idle" #define STRING_START_GCODE_ENABLED "Začiatočný Gcode" diff --git a/TFT/src/User/API/Language/language_sl.h b/TFT/src/User/API/Language/language_sl.h index 48724a2023..1af5af1af5 100644 --- a/TFT/src/User/API/Language/language_sl.h +++ b/TFT/src/User/API/Language/language_sl.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "Obrni UI" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Obrni UI" #define STRING_LANGUAGE "Slovenski" #define STRING_ACK_NOTIFICATION "ACK notification style" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Svetilnost" #define STRING_LCD_IDLE_BRIGHTNESS "Zatemnitev LCD" #define STRING_LCD_IDLE_TIME "Zatemnitev po času" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "LED enkoder gumba" #define STRING_KNOB_LED_IDLE "Rotary Knob LED idle" #define STRING_START_GCODE_ENABLED "Zaženi startno G-kodo" diff --git a/TFT/src/User/API/Language/language_tc.h b/TFT/src/User/API/Language/language_tc.h index 969192eb15..dd33d5b807 100644 --- a/TFT/src/User/API/Language/language_tc.h +++ b/TFT/src/User/API/Language/language_tc.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "顯示方向" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "顯示方向" #define STRING_LANGUAGE "正體中文" #define STRING_ACK_NOTIFICATION "ACK 弹窗类型" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "螢幕亮度" #define STRING_LCD_IDLE_BRIGHTNESS "睡眠狀態螢幕亮度" #define STRING_LCD_IDLE_TIME "螢幕進入睡眠時間" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "旋鈕LED顏色" #define STRING_KNOB_LED_IDLE "旋鈕LED自動睡眠" #define STRING_START_GCODE_ENABLED "執行起始G-code" diff --git a/TFT/src/User/API/Language/language_tr.h b/TFT/src/User/API/Language/language_tr.h index f2a3f413b8..9cb7f42788 100644 --- a/TFT/src/User/API/Language/language_tr.h +++ b/TFT/src/User/API/Language/language_tr.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "Döndür" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Döndür" #define STRING_LANGUAGE "Türkçe" #define STRING_ACK_NOTIFICATION "Onay mesajı stili" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Parlaklık" #define STRING_LCD_IDLE_BRIGHTNESS "Parlaklık Kısılma Oranı" #define STRING_LCD_IDLE_TIME "Parlaklık Kısılma Süresi" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "Döner Düğme LED" #define STRING_KNOB_LED_IDLE "Düğme LED bekleme" #define STRING_START_GCODE_ENABLED "Başlangıç gcodeu kullan" diff --git a/TFT/src/User/API/Language/language_uk.h b/TFT/src/User/API/Language/language_uk.h index 2c5040179e..250bb6e485 100644 --- a/TFT/src/User/API/Language/language_uk.h +++ b/TFT/src/User/API/Language/language_uk.h @@ -3,7 +3,8 @@ // config.ini Parameter Settings - Screen Settings and Feature Settings #define STRING_EMULATED_M600 "Emulated M600" - #define STRING_ROTATE_UI "Повернути інтерфейс" + #define STRING_EMULATED_M109_M190 "Emulated M109 / M190" + #define STRING_ROTATED_UI "Повернути інтерфейс" #define STRING_LANGUAGE "Українська" #define STRING_ACK_NOTIFICATION "ACK стиль повідомлення" #define STRING_FILES_SORT_BY "Sort files by" @@ -31,7 +32,7 @@ #define STRING_LCD_BRIGHTNESS "Яскравість" #define STRING_LCD_IDLE_BRIGHTNESS "Регулювання яскравості LCD" #define STRING_LCD_IDLE_TIME "Час до загасання LCD" - #define STRING_BLOCK_TOUCH_ON_IDLE "Block touch on idle" + #define STRING_LCD_LOCK_ON_IDLE "LCD lock on idle" #define STRING_KNOB_LED_COLOR "Підсвічування енкодера" #define STRING_KNOB_LED_IDLE "Простій підсвічування енкодера" #define STRING_START_GCODE_ENABLED "Розпочати G-код перед друком" diff --git a/TFT/src/User/API/LevelingControl.c b/TFT/src/User/API/LevelingControl.c index acae155a5f..2f5a6f5271 100644 --- a/TFT/src/User/API/LevelingControl.c +++ b/TFT/src/User/API/LevelingControl.c @@ -1,8 +1,8 @@ #include "LevelingControl.h" #include "includes.h" -LEVELING_POINT probedPoint = LEVEL_NO_POINT; -float probedZ = 0.0f; +LEVELING_POINT probedPoint = LEVEL_NO_POINT; // last probed point or LEVEL_NO_POINT in case of no new updates +float probedZ = 0.0f; // last Z offset measured by probe void levelingGetPointCoords(LEVELING_POINT_COORDS coords) { @@ -98,3 +98,18 @@ void levelingSetProbedPoint(int16_t x, int16_t y, float z) probedPoint = levelingGetPoint(x, y); probedZ = z; } + +LEVELING_POINT levelingGetProbedPoint(void) +{ + return probedPoint; +}; + +void levelingResetProbedPoint(void) +{ + probedPoint = LEVEL_NO_POINT; +}; + +float levelingGetProbedZ(void) +{ + return probedZ; +}; diff --git a/TFT/src/User/API/LevelingControl.h b/TFT/src/User/API/LevelingControl.h index 356d4fcff1..031561b340 100644 --- a/TFT/src/User/API/LevelingControl.h +++ b/TFT/src/User/API/LevelingControl.h @@ -13,30 +13,24 @@ extern "C" { typedef enum { LEVEL_NO_POINT = -1, - LEVEL_BOTTOM_LEFT, // bottom left bed corner - LEVEL_BOTTOM_RIGHT, // bottom right bed corner - LEVEL_TOP_RIGHT, // top right bed corner - LEVEL_TOP_LEFT, // top left bed corner - LEVEL_CENTER, // center bed point + LEVEL_BOTTOM_LEFT = 0, // bottom left bed corner + LEVEL_BOTTOM_RIGHT, // bottom right bed corner + LEVEL_TOP_RIGHT, // top right bed corner + LEVEL_TOP_LEFT, // top left bed corner + LEVEL_CENTER, // center bed point LEVELING_POINT_COUNT } LEVELING_POINT; typedef int16_t LEVELING_POINT_COORDS[LEVELING_POINT_COUNT][2]; // [][0] X coord, [][1] Y coord -extern LEVELING_POINT probedPoint; // last probed point or LEVEL_NO_POINT in case of no new updates -extern float probedZ; // last Z offset measured by probe - void levelingGetPointCoords(LEVELING_POINT_COORDS coords); // get all point coords LEVELING_POINT levelingGetPoint(int16_t x, int16_t y); // get point matching XY coords or LEVEL_CENTER in case of no match void levelingMoveToPoint(LEVELING_POINT point); // move to point void levelingProbePoint(LEVELING_POINT point); // probe point void levelingSetProbedPoint(int16_t x, int16_t y, float z); // set probed point and Z offset for point matching XY coords -inline LEVELING_POINT levelingGetProbedPoint(void) - {return probedPoint;}; // get probed point or LEVEL_NO_POINT in case of no new updates -inline void levelingResetProbedPoint(void) - {probedPoint = LEVEL_NO_POINT;}; // reset probed point to LEVEL_NO_POINT to check for new updates -inline float levelingGetProbedZ(void) - {return probedZ;}; // get probed Z offset +LEVELING_POINT levelingGetProbedPoint(void); // get probed point or LEVEL_NO_POINT in case of no new updates +void levelingResetProbedPoint(void); // reset probed point to LEVEL_NO_POINT to check for new updates +float levelingGetProbedZ(void); // get probed Z offset #ifdef __cplusplus } diff --git a/TFT/src/User/API/PowerFailed.c b/TFT/src/User/API/PowerFailed.c index 48e4364e59..b3ea4acada 100644 --- a/TFT/src/User/API/PowerFailed.c +++ b/TFT/src/User/API/PowerFailed.c @@ -72,7 +72,7 @@ void powerFailedCache(uint32_t offset) if (infoBreakPoint.axis[Z_AXIS] == coordinateGetAxisTarget(Z_AXIS)) return; // Z axis no changed. if (create_ok == false) return; - if (infoCacheCmd.count != 0) return; + if (isNotEmptyCmdQueue()) return; if (!isPaused()) { // not paused, update printing progress status. infoBreakPoint.offset = offset; diff --git a/TFT/src/User/API/Printing.c b/TFT/src/User/API/Printing.c index 991ce9c263..951a134839 100644 --- a/TFT/src/User/API/Printing.c +++ b/TFT/src/User/API/Printing.c @@ -238,7 +238,7 @@ void initPrintSummary(void) void preparePrintSummary(void) { - if (infoMachineSettings.long_filename_support == ENABLED && infoFile.source == BOARD_SD) + if (infoMachineSettings.longFilename == ENABLED && infoFile.source == BOARD_SD) sprintf(infoPrintSummary.name,"%." STRINGIFY(SUMMARY_NAME_LEN) "s", infoFile.Longfile[infoFile.fileIndex]); else sprintf(infoPrintSummary.name,"%." STRINGIFY(SUMMARY_NAME_LEN) "s", getPrintName(infoFile.title)); @@ -645,11 +645,12 @@ void loopPrintFromTFT(void) bool read_comment = false; bool read_leading_space = true; char read_char; + CMD gcode; uint8_t gCode_count = 0; uint8_t comment_count = 0; UINT br = 0; - if (heatHasWaiting() || infoCmd.count || infoPrinting.pause) return; + if (heatHasWaiting() || isNotEmptyCmdQueue() || infoPrinting.pause) return; if (moveCacheToCmd() == true) return; @@ -668,11 +669,9 @@ void loopPrintFromTFT(void) { if (gCode_count != 0) { - infoCmd.queue[infoCmd.index_w].gcode[gCode_count++] = '\n'; - infoCmd.queue[infoCmd.index_w].gcode[gCode_count] = 0; // terminate string - infoCmd.queue[infoCmd.index_w].port_index = PORT_1; // port index for SERIAL_PORT - infoCmd.index_w = (infoCmd.index_w + 1) % CMD_MAX_LIST; - infoCmd.count++; + gcode[gCode_count++] = '\n'; + gcode[gCode_count] = 0; // terminate string + storeCmdFromUART(PORT_1, gcode); } if (comment_count != 0) @@ -690,9 +689,9 @@ void loopPrintFromTFT(void) read_comment = false; read_leading_space = true; } - else if (!read_comment && gCode_count >= CMD_MAX_CHAR - 2) + else if (!read_comment && gCode_count >= CMD_MAX_SIZE - 2) {} // if command length is beyond the maximum, ignore the following bytes - else if (read_comment && comment_count >= CMD_MAX_CHAR - 2) + else if (read_comment && comment_count >= CMD_MAX_SIZE - 2) {} // if comment length is beyond the maximum, ignore the following bytes else { @@ -711,11 +710,11 @@ void loopPrintFromTFT(void) if (!read_leading_space && read_char != '\r') { - if (!read_comment) // normal gcode + if (!read_comment) // normal gcode { - infoCmd.queue[infoCmd.index_w].gcode[gCode_count++] = read_char; + gcode[gCode_count++] = read_char; } - else // comment + else // comment { gCode_comment.content[comment_count++] = read_char; } diff --git a/TFT/src/User/API/ProbeOffsetControl.c b/TFT/src/User/API/ProbeOffsetControl.c index 993db68bcb..f4554509b3 100644 --- a/TFT/src/User/API/ProbeOffsetControl.c +++ b/TFT/src/User/API/ProbeOffsetControl.c @@ -29,7 +29,7 @@ void probeOffsetEnable(float shim) } probedZ = levelingGetProbedZ(); - levelingResetProbedPoint(); + levelingResetProbedPoint(); // reset to check for new updates } probeHeightRelative(); // set relative position mode diff --git a/TFT/src/User/API/RRFStatusControl.c b/TFT/src/User/API/RRFStatusControl.c index bcbcbed17d..e7704ed302 100644 --- a/TFT/src/User/API/RRFStatusControl.c +++ b/TFT/src/User/API/RRFStatusControl.c @@ -24,7 +24,7 @@ void rrfStatusSet(char status) { case 'D': case 'A': - hostDialog = false; + setHostDialog(false); setPrintResume(true); break; case 'I': diff --git a/TFT/src/User/API/SerialConnection.c b/TFT/src/User/API/SerialConnection.c index e532a2353c..6f51d7426d 100644 --- a/TFT/src/User/API/SerialConnection.c +++ b/TFT/src/User/API/SerialConnection.c @@ -36,16 +36,16 @@ static inline void Serial_DeInitPrimary(void) Serial_DeConfig(serialPort[PORT_1].port); } -void Serial_Init(int8_t port) +void Serial_Init(SERIAL_PORT_INDEX port) { if (port <= PORT_1) // if primary or all serial ports { Serial_InitPrimary(); #ifdef SERIAL_PORT_2 - if (port == ALL_PORTS) // if < 0, initialize also all the supplementary serial ports + if (port == ALL_PORTS) // if ALL_PORTS, initialize also all the supplementary serial ports { - for (uint8_t i = PORT_2; i < SERIAL_PORT_COUNT; i++) + for (SERIAL_PORT_INDEX i = PORT_2; i < SERIAL_PORT_COUNT; i++) { // the supplementary serial ports should be enabled according to config.ini. // Disable the serial port when it is not in use and/or not connected to a device (floating) to @@ -67,16 +67,16 @@ void Serial_Init(int8_t port) #endif } -void Serial_DeInit(int8_t port) +void Serial_DeInit(SERIAL_PORT_INDEX port) { if (port <= PORT_1) // if primary or all serial ports { Serial_DeInitPrimary(); #ifdef SERIAL_PORT_2 - if (port == ALL_PORTS) // if < 0, deinitialize also all the supplementary serial ports + if (port == ALL_PORTS) // if ALL_PORTS, deinitialize also all the supplementary serial ports { - for (uint8_t i = PORT_2; i < SERIAL_PORT_COUNT; i++) + for (SERIAL_PORT_INDEX i = PORT_2; i < SERIAL_PORT_COUNT; i++) { Serial_DeConfig(serialPort[i].port); } diff --git a/TFT/src/User/API/SerialConnection.h b/TFT/src/User/API/SerialConnection.h index d16b06bf49..4390b43af9 100644 --- a/TFT/src/User/API/SerialConnection.h +++ b/TFT/src/User/API/SerialConnection.h @@ -40,8 +40,8 @@ extern const SERIAL_PORT_INFO serialPort[SERIAL_PORT_COUNT]; // serial port (in extern const uint32_t baudrateValues[BAUDRATE_COUNT]; // baudrate values extern const char * const baudrateNames[BAUDRATE_COUNT]; // baudrate names -void Serial_Init(int8_t port); // -1 to apply to all serial ports (primary and supplementary) -void Serial_DeInit(int8_t port); // -1 to apply to all serial ports (primary and supplementary) +void Serial_Init(SERIAL_PORT_INDEX port); // index ALL_PORTS to apply to all serial ports (primary and supplementary) +void Serial_DeInit(SERIAL_PORT_INDEX port); // index ALL_PORTS to apply to all serial ports (primary and supplementary) #ifdef __cplusplus } diff --git a/TFT/src/User/API/Settings.c b/TFT/src/User/API/Settings.c index 402478829e..694de4c98c 100644 --- a/TFT/src/User/API/Settings.c +++ b/TFT/src/User/API/Settings.c @@ -4,6 +4,7 @@ SETTINGS infoSettings; MACHINESETTINGS infoMachineSettings; +const uint8_t default_general_settings = 0b00000011; // emulated M600 / M109 / M190 enabled const uint16_t default_max_temp[] = HEAT_MAX_TEMP; const uint16_t default_max_fanPWM[] = FAN_MAX_PWM; const uint16_t default_size_min[] = {X_MIN_POS, Y_MIN_POS, Z_MIN_POS}; @@ -24,10 +25,10 @@ void infoSettingsReset(void) { // General Settings infoSettings.serial_port[0] = PRIMARY_BAUDRATE; // primary serial port - infoSettings.emulated_m600 = EMULATED_M600; + infoSettings.general_settings = default_general_settings; // UI Settings - infoSettings.rotate_ui = DISABLED; + infoSettings.rotated_ui = DISABLED; infoSettings.language = LANG_DEFAULT; infoSettings.status_screen = STATUS_SCREEN; infoSettings.title_bg_color = lcd_colors[TITLE_BACKGROUND_COLOR]; @@ -115,7 +116,7 @@ void infoSettingsReset(void) infoSettings.lcd_brightness = LCD_BRIGHTNESS; infoSettings.lcd_idle_brightness = LCD_IDLE_BRIGHTNESS; infoSettings.lcd_idle_time = LCD_IDLE_TIME; - infoSettings.block_touch_on_idle = DISABLED; + infoSettings.lcd_lock_on_idle = DISABLED; infoSettings.knob_led_color = KNOB_LED_COLOR; infoSettings.knob_led_idle = ENABLED; #ifdef NEOPIXEL_PIXELS @@ -185,9 +186,9 @@ void initMachineSetting(void) infoMachineSettings.caseLightsBrightness = DISABLED; infoMachineSettings.emergencyParser = DISABLED; infoMachineSettings.promptSupport = DISABLED; - infoMachineSettings.onboard_sd_support = DISABLED; + infoMachineSettings.onboardSD = DISABLED; infoMachineSettings.autoReportSDStatus = DISABLED; - infoMachineSettings.long_filename_support = DISABLED; + infoMachineSettings.longFilename = DISABLED; infoMachineSettings.babyStepping = DISABLED; infoMachineSettings.buildPercent = DISABLED; infoMachineSettings.softwareEndstops = ENABLED; @@ -229,10 +230,10 @@ void setupMachine(void) infoMachineSettings.autoReportSDStatus = DISABLED; } if (infoSettings.onboard_sd != AUTO) - infoMachineSettings.onboard_sd_support = infoSettings.onboard_sd; + infoMachineSettings.onboardSD = infoSettings.onboard_sd; if (infoSettings.long_filename != AUTO) - infoMachineSettings.long_filename_support = infoSettings.long_filename; + infoMachineSettings.longFilename = infoSettings.long_filename; mustStoreCmd("M503 S0\n"); diff --git a/TFT/src/User/API/Settings.h b/TFT/src/User/API/Settings.h index 83cb54813c..b36829e7a6 100644 --- a/TFT/src/User/API/Settings.h +++ b/TFT/src/User/API/Settings.h @@ -13,11 +13,11 @@ extern "C" { // Config version support // change if new elements/keywords are added/removed/changed in the configuration.h Format YYYYMMDD // this number should match CONFIG_VERSION in configuration.h -#define CONFIG_SUPPPORT 20210829 +#define CONFIG_SUPPPORT 20210903 #define FONT_FLASH_SIGN 20210522 // (YYYYMMDD) change if fonts require updating -#define CONFIG_FLASH_SIGN 20210829 // (YYYYMMDD) change if any keyword(s) in config.ini is added or removed -#define LANGUAGE_FLASH_SIGN 20210829 // (YYYYMMDD) change if any keyword(s) in language pack is added or removed +#define CONFIG_FLASH_SIGN 20210903 // (YYYYMMDD) change if any keyword(s) in config.ini is added or removed +#define LANGUAGE_FLASH_SIGN 20210903 // (YYYYMMDD) change if any keyword(s) in language pack is added or removed #define ICON_FLASH_SIGN 20210711 // (YYYYMMDD) change if any icon(s) is added or removed #define FONT_CHECK_SIGN (FONT_FLASH_SIGN + WORD_UNICODE + FLASH_SIGN_ADDR) @@ -63,6 +63,44 @@ enum sign_count }; +// General Settings + +typedef enum +{ + EMULATED_M600 = 0, + EMULATED_M109_M190 +} GENERAL_SETTINGS; + +// UI Settings + +typedef enum +{ + SORT_DATE_NEW_FIRST = 0, + SORT_DATE_OLD_FIRST, + SORT_NAME_ASCENDING, + SORT_NAME_DESCENDING, + SORT_BY_COUNT +} SORT_BY; + +typedef enum +{ + PERCENTAGE_ELAPSED = 0, + PERCENTAGE_REMAINING, + ELAPSED_REMAINING +} PROGRESS_DISPLAY; + +typedef enum +{ + SHOW_LAYER_HEIGHT, + CLEAN_LAYER_HEIGHT, + SHOW_LAYER_NUMBER, + CLEAN_LAYER_NUMBER, + SHOW_LAYER_BOTH, + CLEAN_LAYER_BOTH +} LAYER_TYPE; + +// Marlin Mode Settings (only for TFT24 V1.1 & TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) + typedef enum { MODE_MARLIN = 0, @@ -80,14 +118,27 @@ typedef enum MODE_TYPE_COUNT } MARLIN_MODE_TYPE; +// Printer / Machine Settings + typedef enum { - SORT_DATE_NEW_FIRST = 0, - SORT_DATE_OLD_FIRST, - SORT_NAME_ASCENDING, - SORT_NAME_DESCENDING, - SORT_BY_COUNT -} SORT_BY; + FEEDRATE_XY = 0, + FEEDRATE_Z, + FEEDRATE_E, + FEEDRATE_COUNT +} FEEDRATE_INDEX; + +// Filament Runout Settings (only if connected to TFT controller) + +typedef enum +{ + RUNOUT_ENABLED = 0, + RUNOUT_SENSOR_TYPE, + RUNOUT_INVERTED, + RUNOUT_NO_NC +} RUNOUT_SETTINGS; + +// Other Device-Specific Settings typedef enum { @@ -98,55 +149,24 @@ typedef enum SOUND_TYPE_COUNT } SOUND_TYPE; -typedef enum -{ - RUNOUT_ENABLED = 0, - RUNOUT_SENSOR_TYPE, - RUNOUT_INVERTED, - RUNOUT_NO_NC, -} RUNOUT_SETTINGS; +// Start, End & Cancel Gcode Commands typedef enum { SEND_GCODES_START_PRINT = 0, SEND_GCODES_END_PRINT, SEND_GCODES_CANCEL_PRINT, - SEND_GCODES_COUNT, + SEND_GCODES_COUNT } SEND_GCODES_TYPE; -typedef enum -{ - PERCENTAGE_ELAPSED = 0, - PERCENTAGE_REMAINING, - ELAPSED_REMAINING, -} PROGRESS_DISPLAY; - -typedef enum -{ - SHOW_LAYER_HEIGHT, - CLEAN_LAYER_HEIGHT, - SHOW_LAYER_NUMBER, - CLEAN_LAYER_NUMBER, - SHOW_LAYER_BOTH, - CLEAN_LAYER_BOTH, -} LAYER_TYPE; - -typedef enum -{ - FEEDRATE_XY = 0, - FEEDRATE_Z, - FEEDRATE_E, - FEEDRATE_COUNT, -} FEEDRATE_INDEX; - typedef struct { // General Settings uint8_t serial_port[MAX_SERIAL_PORT_COUNT]; - uint8_t emulated_m600; + uint8_t general_settings; // emulated M600 / M109 / M190 toggles (Bit Values) // UI Settings - uint8_t rotate_ui; + uint8_t rotated_ui; uint8_t language; uint8_t status_screen; uint16_t title_bg_color; @@ -240,7 +260,7 @@ typedef struct uint8_t lcd_brightness; uint8_t lcd_idle_brightness; uint8_t lcd_idle_time; - uint8_t block_touch_on_idle; + uint8_t lcd_lock_on_idle; uint8_t knob_led_color; uint8_t knob_led_idle; uint8_t neopixel_pixels; @@ -314,9 +334,9 @@ typedef struct uint8_t caseLightsBrightness; uint8_t emergencyParser; uint8_t promptSupport; - uint8_t onboard_sd_support; + uint8_t onboardSD; uint8_t autoReportSDStatus; - uint8_t long_filename_support; + uint8_t longFilename; uint8_t babyStepping; uint8_t buildPercent; uint8_t softwareEndstops; diff --git a/TFT/src/User/API/UI/ListManager.c b/TFT/src/User/API/UI/ListManager.c index 5e1ef8da2f..a480baca1d 100644 --- a/TFT/src/User/API/UI/ListManager.c +++ b/TFT/src/User/API/UI/ListManager.c @@ -48,6 +48,10 @@ void listViewCreate(LABEL title, LISTITEM * items, uint16_t maxItems, uint16_t * listViewSetCurPage(curPageIndex); menuDrawListPage(&listItems); + + #if LCD_ENCODER_SUPPORT + encoderPosition = 0; + #endif } // Set/Update List view title @@ -207,6 +211,23 @@ uint16_t listViewGetSelectedIndex(void) return KEY_BACK; default: - return KEY_IDLE; + #if LCD_ENCODER_SUPPORT + if (encoderPosition) // if a page scrolling is requested + { + if (encoderPosition < 0) // if page up + { + encoderPosition = 0; + listViewPreviousPage(); + return KEY_PAGEUP; + } + else // if page down + { + encoderPosition = 0; + listViewNextPage(); + return KEY_PAGEDOWN; + } + } + #endif + return KEY_IDLE; // if no key is pressed and no page scrolling is requested } } diff --git a/TFT/src/User/API/UI/ui_draw.h b/TFT/src/User/API/UI/ui_draw.h index 860da2fc2e..4aff6811b9 100644 --- a/TFT/src/User/API/UI/ui_draw.h +++ b/TFT/src/User/API/UI/ui_draw.h @@ -22,9 +22,9 @@ extern "C" { #define text_startx (LCD_WIDTH / 2) // thumbnail parser options -#define PARSER_CLASSIC 0 -#define PARSER_RGB565 1 -#define PARSER_BASE64PNG 2 +#define PARSER_CLASSIC 0 +#define PARSER_RGB565 1 +#define PARSER_BASE64PNG 2 void LOGO_ReadDisplay(void); void ICON_PartialReadDisplay(uint16_t sx, uint16_t sy, int16_t width, int16_t height, uint8_t icon, uint16_t isx, uint16_t isy); diff --git a/TFT/src/User/API/boot.c b/TFT/src/User/API/boot.c index b2b551a4d5..1db17c313a 100644 --- a/TFT/src/User/API/boot.c +++ b/TFT/src/User/API/boot.c @@ -285,7 +285,7 @@ static inline void scanResetDir(void) } infoSettingsReset(); - LCD_RefreshDirection(infoSettings.rotate_ui); + LCD_RefreshDirection(infoSettings.rotated_ui); TSC_Calibration(); storePara(); f_rename(TFT_RESET_FILE, renamedReset); diff --git a/TFT/src/User/API/config.c b/TFT/src/User/API/config.c index 90233e18c6..fb88555fa1 100644 --- a/TFT/src/User/API/config.c +++ b/TFT/src/User/API/config.c @@ -74,7 +74,7 @@ bool getConfigFromFile(void) PRINTDEBUG(configCustomGcodes->gcode[1]); if (scheduleRotate) { - LCD_RefreshDirection(infoSettings.rotate_ui); + LCD_RefreshDirection(infoSettings.rotated_ui); TSC_Calibration(); } storePara(); @@ -458,7 +458,7 @@ void resetConfig(void) tempCG.count = n; // restore strings store - strcpy(tempST.marlin_title, MARLIN_BANNER_TEXT); + strcpy(tempST.marlin_title, MARLIN_TITLE); for (int i = 0; i < PREHEAT_COUNT; i++) { @@ -555,16 +555,17 @@ void parseConfigKey(uint16_t index) break; case C_INDEX_EMULATED_M600: - infoSettings.emulated_m600 = getOnOff(); + case C_INDEX_EMULATED_M109_M190: + SET_BIT_VALUE(infoSettings.general_settings, (index - C_INDEX_EMULATED_M600), getOnOff()); break; //----------------------------UI Settings - case C_INDEX_ROTATE_UI: - if (infoSettings.rotate_ui != getOnOff()) + case C_INDEX_ROTATED_UI: + if (infoSettings.rotated_ui != getOnOff()) { scheduleRotate = true; - infoSettings.rotate_ui = getOnOff(); + infoSettings.rotated_ui = getOnOff(); } break; @@ -978,8 +979,8 @@ void parseConfigKey(uint16_t index) SET_VALID_INT_VALUE(infoSettings.lcd_idle_time, 0, LCD_IDLE_TIME_COUNT - 1); break; - case C_INDEX_BLOCK_TOUCH_ON_IDLE: - infoSettings.block_touch_on_idle = getOnOff(); + case C_INDEX_LCD_LOCK_ON_IDLE: + infoSettings.lcd_lock_on_idle = getOnOff(); break; #endif diff --git a/TFT/src/User/API/config.h b/TFT/src/User/API/config.h index 5488e7eeaa..7637bb527b 100644 --- a/TFT/src/User/API/config.h +++ b/TFT/src/User/API/config.h @@ -17,9 +17,10 @@ extern "C" { //-----------------------------General Settings #define CONFIG_SERIAL_PORT "serial_port:" #define CONFIG_EMULATED_M600 "emulated_m600:" +#define CONFIG_EMULATED_M109_M190 "emulated_m109_m190:" //-----------------------------UI Settings -#define CONFIG_ROTATE_UI "rotate_ui:" +#define CONFIG_ROTATED_UI "rotated_ui:" #define CONFIG_LANGUAGE "language:" #define CONFIG_STATUS_SCREEN "status_screen:" #define CONFIG_TITLE_BG_COLOR "title_background_color:" @@ -120,7 +121,7 @@ extern "C" { #define CONFIG_LCD_BRIGHTNESS "lcd_brightness:" #define CONFIG_LCD_IDLE_BRIGHTNESS "lcd_idle_brightness:" #define CONFIG_LCD_IDLE_TIME "lcd_idle_time:" -#define CONFIG_BLOCK_TOUCH_ON_IDLE "block_touch_on_idle:" +#define CONFIG_LCD_LOCK_ON_IDLE "lcd_lock_on_idle:" #define CONFIG_KNOB_LED_COLOR "knob_led_color:" #define CONFIG_KNOB_LED_IDLE "knob_led_idle:" #define CONFIG_NEOPIXEL_PIXELS "neopixel_pixels:" diff --git a/TFT/src/User/API/config.inc b/TFT/src/User/API/config.inc index 9444197e97..67f72f70ef 100644 --- a/TFT/src/User/API/config.inc +++ b/TFT/src/User/API/config.inc @@ -10,8 +10,9 @@ //-----------------------------General Settings X_CONFIG(SERIAL_PORT) X_CONFIG(EMULATED_M600) +X_CONFIG(EMULATED_M109_M190) //-----------------------------UI Settings -X_CONFIG(ROTATE_UI) +X_CONFIG(ROTATED_UI) X_CONFIG(LANGUAGE) X_CONFIG(STATUS_SCREEN) X_CONFIG(TITLE_BG_COLOR) @@ -112,7 +113,7 @@ X_CONFIG(HEATER_SOUND) X_CONFIG(LCD_BRIGHTNESS) X_CONFIG(LCD_IDLE_BRIGHTNESS) X_CONFIG(LCD_IDLE_TIME) -X_CONFIG(BLOCK_TOUCH_ON_IDLE) +X_CONFIG(LCD_LOCK_ON_IDLE) X_CONFIG(KNOB_LED_COLOR) X_CONFIG(KNOB_LED_IDLE) X_CONFIG(NEOPIXEL_PIXELS) diff --git a/TFT/src/User/API/interfaceCmd.c b/TFT/src/User/API/interfaceCmd.c index 9c09f4fc46..c116ebdb55 100644 --- a/TFT/src/User/API/interfaceCmd.c +++ b/TFT/src/User/API/interfaceCmd.c @@ -1,83 +1,70 @@ #include "interfaceCmd.h" #include "includes.h" +#define CMD_QUEUE_SIZE 20 + +typedef struct +{ + CMD gcode; + SERIAL_PORT_INDEX port_index; // 0: for SERIAL_PORT, 1: for SERIAL_PORT_2 etc... +} GCODE_INFO; + +typedef struct +{ + GCODE_INFO queue[CMD_QUEUE_SIZE]; + uint8_t index_r; // Ring buffer read position + uint8_t index_w; // Ring buffer write position + uint8_t count; // Count of commands in the queue +} GCODE_QUEUE; + GCODE_QUEUE infoCmd; GCODE_QUEUE infoCacheCmd; // Only when heatHasWaiting() is false the cmd in this cache will move to infoCmd queue. -static uint8_t cmd_index = 0; -static bool ispolling = true; +char * cmd_ptr; +uint8_t cmd_len; +uint8_t cmd_index; +SERIAL_PORT_INDEX cmd_port_index; // index of serial port originating the gcode +bool isPolling = true; bool isFullCmdQueue(void) { - return (infoCmd.count >= CMD_MAX_LIST); + return (infoCmd.count >= CMD_QUEUE_SIZE); } bool isNotEmptyCmdQueue(void) { - return (infoCmd.count || infoHost.wait); + return (infoCmd.count != 0 || infoHost.wait == true); } -bool isEnqueued(const char *cmd) +bool isEnqueued(const CMD cmd) { bool found = false; for (int i = 0; i < infoCmd.count && !found; ++i) { - found = strcmp(cmd, infoCmd.queue[(infoCmd.index_r + i) % CMD_MAX_LIST].gcode) == 0; + found = strcmp(cmd, infoCmd.queue[(infoCmd.index_r + i) % CMD_QUEUE_SIZE].gcode) == 0; } return found; } -// Check the presence of the specified 'code' character in the current gcode command. -static bool cmd_seen(char code) -{ - for (cmd_index = 0; cmd_index < CMD_MAX_CHAR && infoCmd.queue[infoCmd.index_r].gcode[cmd_index] != 0; cmd_index++) - { - if (infoCmd.queue[infoCmd.index_r].gcode[cmd_index] == code) - { - cmd_index += 1; - return true; - } - } - return false; -} - -// Get the int after 'code'. Call after cmd_seen('code'). -static int32_t cmd_value(void) -{ - return (strtol(&infoCmd.queue[infoCmd.index_r].gcode[cmd_index], NULL, 10)); -} - -// Get the float after 'code'. Call after cmd_seen('code'). -static float cmd_float(void) -{ - return (strtod(&infoCmd.queue[infoCmd.index_r].gcode[cmd_index], NULL)); -} - -// Check if 'string' starts with 'search'. -static bool startsWith(TCHAR *search, TCHAR *string) -{ - return (strstr(string, search) - string == cmd_index) ? true : false; -} - // Common store cmd. -void commonStoreCmd(GCODE_QUEUE *pQueue, const char* format, va_list va) +void commonStoreCmd(GCODE_QUEUE * pQueue, const char * format, va_list va) { - vsnprintf(pQueue->queue[pQueue->index_w].gcode, CMD_MAX_CHAR, format, va); + vsnprintf(pQueue->queue[pQueue->index_w].gcode, CMD_MAX_SIZE, format, va); pQueue->queue[pQueue->index_w].port_index = PORT_1; // port index for SERIAL_PORT - pQueue->index_w = (pQueue->index_w + 1) % CMD_MAX_LIST; + pQueue->index_w = (pQueue->index_w + 1) % CMD_QUEUE_SIZE; pQueue->count++; } // Store gcode cmd to infoCmd queue. // This command will be sent to the printer by sendQueueCmd(). // If the infoCmd queue is full, a reminder message is displayed and the command is discarded. -bool storeCmd(const char * format,...) +bool storeCmd(const char * format, ...) { if (strlen(format) == 0) return false; - GCODE_QUEUE *pQueue = &infoCmd; + GCODE_QUEUE * pQueue = &infoCmd; - if (pQueue->count >= CMD_MAX_LIST) + if (pQueue->count >= CMD_QUEUE_SIZE) { reminderMessage(LABEL_BUSY, STATUS_BUSY); return false; @@ -95,13 +82,13 @@ bool storeCmd(const char * format,...) // This command will be sent to the printer by sendQueueCmd(). // If the infoCmd queue is full, a reminder message is displayed and it will wait the queue // is available to store the command. -void mustStoreCmd(const char * format,...) +void mustStoreCmd(const char * format, ...) { if (strlen(format) == 0) return; - GCODE_QUEUE *pQueue = &infoCmd; + GCODE_QUEUE * pQueue = &infoCmd; - if (pQueue->count >= CMD_MAX_LIST) + if (pQueue->count >= CMD_QUEUE_SIZE) { reminderMessage(LABEL_BUSY, STATUS_BUSY); @@ -116,7 +103,7 @@ void mustStoreCmd(const char * format,...) // Store Script cmd to infoCmd queue. // For example: "M502\nM500\n" will be split into two commands "M502\n", "M500\n" -void mustStoreScript(const char * format,...) +void mustStoreScript(const char * format, ...) { if (strlen(format) == 0) return; @@ -126,9 +113,9 @@ void mustStoreScript(const char * format,...) vsnprintf(script, 256, format, va); va_end(va); - char *p = script; + char * p = script; uint16_t i = 0; - char cmd[CMD_MAX_CHAR]; + CMD cmd; for (;;) { char c = *p++; @@ -147,22 +134,22 @@ void mustStoreScript(const char * format,...) // Store gcode cmd received from UART (e.g. ESP3D, OctoPrint, other TouchScreen etc...) to infoCmd queue. // This command will be sent to the printer by sendQueueCmd(). // If the infoCmd queue is full, a reminder message is displayed and the command is discarded. -bool storeCmdFromUART(uint8_t portIndex, const char * gcode) +bool storeCmdFromUART(SERIAL_PORT_INDEX portIndex, const CMD cmd) { - if (strlen(gcode) == 0) return false; + if (strlen(cmd) == 0) return false; - GCODE_QUEUE *pQueue = &infoCmd; + GCODE_QUEUE * pQueue = &infoCmd; - if (pQueue->count >= CMD_MAX_LIST) + if (pQueue->count >= CMD_QUEUE_SIZE) { reminderMessage(LABEL_BUSY, STATUS_BUSY); return false; } - strncpy(pQueue->queue[pQueue->index_w].gcode, gcode, CMD_MAX_CHAR); + strncpy(pQueue->queue[pQueue->index_w].gcode, cmd, CMD_MAX_SIZE); pQueue->queue[pQueue->index_w].port_index = portIndex; - pQueue->index_w = (pQueue->index_w + 1) % CMD_MAX_LIST; + pQueue->index_w = (pQueue->index_w + 1) % CMD_QUEUE_SIZE; pQueue->count++; return true; @@ -171,11 +158,11 @@ bool storeCmdFromUART(uint8_t portIndex, const char * gcode) // Store gcode cmd to infoCacheCmd queue. // This command will be moved to infoCmd queue by loopPrintFromTFT() -> moveCacheToCmd(). // This function is used only to restore the printing status after a power failed. -void mustStoreCacheCmd(const char * format,...) +void mustStoreCacheCmd(const char * format, ...) { - GCODE_QUEUE *pQueue = &infoCacheCmd; + GCODE_QUEUE * pQueue = &infoCacheCmd; - if (pQueue->count >= CMD_MAX_LIST) + if (pQueue->count >= CMD_QUEUE_SIZE) { reminderMessage(LABEL_BUSY, STATUS_BUSY); @@ -191,12 +178,12 @@ void mustStoreCacheCmd(const char * format,...) // Move gcode cmd from infoCacheCmd to infoCmd queue. bool moveCacheToCmd(void) { - if (infoCmd.count >= CMD_MAX_LIST) return false; + if (infoCmd.count >= CMD_QUEUE_SIZE) return false; if (infoCacheCmd.count == 0) return false; storeCmd("%s", infoCacheCmd.queue[infoCacheCmd.index_r].gcode); infoCacheCmd.count--; - infoCacheCmd.index_r = (infoCacheCmd.index_r + 1) % CMD_MAX_LIST; + infoCacheCmd.index_r = (infoCacheCmd.index_r + 1) % CMD_QUEUE_SIZE; return true; } @@ -209,29 +196,76 @@ void clearCmdQueue(void) printSetUpdateWaiting(false); } -// Remove last gcode cmd from infoCmd queue. -void purgeLastCmd(bool purged, bool avoidTerminal) +static inline bool getCmd(void) +{ + cmd_ptr = &infoCmd.queue[infoCmd.index_r].gcode[0]; // gcode + cmd_len = strlen(cmd_ptr); // length of gcode + cmd_port_index = infoCmd.queue[infoCmd.index_r].port_index; // index of serial port originating the gcode + + return (cmd_port_index == PORT_1); // if gcode is originated by TFT (SERIAL_PORT), return true +} + +void updateCmd(const char * buf) +{ + strcat(cmd_ptr, buf); // append buf to gcode + cmd_len = strlen(cmd_ptr); // new length of gcode +} + +// Remove leading gcode cmd from infoCmd queue. +void purgeCmd(bool purged, bool avoidTerminal) { char * purgeStr = "[Purged] "; if (!avoidTerminal) { if (purged) - terminalCache(purgeStr, TERMINAL_GCODE); - terminalCache(infoCmd.queue[infoCmd.index_r].gcode, TERMINAL_GCODE); + terminalCache(purgeStr, strlen(purgeStr), cmd_port_index, TERMINAL_GCODE); + terminalCache(cmd_ptr, cmd_len, cmd_port_index, TERMINAL_GCODE); } #if defined(SERIAL_DEBUG_PORT) && defined(DEBUG_SERIAL_COMM) // dump serial data sent to debug port - Serial_Puts(SERIAL_DEBUG_PORT, serialPort[infoCmd.queue[infoCmd.index_r].port_index].id); // serial port ID (e.g. "2" for SERIAL_PORT_2) + Serial_Puts(SERIAL_DEBUG_PORT, serialPort[cmd_port_index].id); // serial port ID (e.g. "2" for SERIAL_PORT_2) Serial_Puts(SERIAL_DEBUG_PORT, ">>"); if (purged) Serial_Puts(SERIAL_DEBUG_PORT, purgeStr); - Serial_Puts(SERIAL_DEBUG_PORT, infoCmd.queue[infoCmd.index_r].gcode); + Serial_Puts(SERIAL_DEBUG_PORT, cmd_ptr); #endif infoCmd.count--; - infoCmd.index_r = (infoCmd.index_r + 1) % CMD_MAX_LIST; + infoCmd.index_r = (infoCmd.index_r + 1) % CMD_QUEUE_SIZE; +} + +// Check if 'cmd' starts with 'key'. +static bool cmd_start_with(const CMD cmd, const char * key) +{ + return (strstr(cmd, key) - cmd == cmd_index) ? true : false; +} + +// Check the presence of the specified 'code' character in the current gcode command. +static bool cmd_seen(char code) +{ + for (cmd_index = 0; cmd_index < cmd_len; cmd_index++) + { + if (cmd_ptr[cmd_index] == code) + { + cmd_index += 1; + return true; + } + } + return false; +} + +// Get the int after 'code'. Call after cmd_seen('code'). +static int32_t cmd_value(void) +{ + return (strtol(&cmd_ptr[cmd_index], NULL, 10)); +} + +// Get the float after 'code'. Call after cmd_seen('code'). +static float cmd_float(void) +{ + return (strtod(&cmd_ptr[cmd_index], NULL)); } // Parse and send gcode cmd in infoCmd queue. @@ -241,28 +275,28 @@ void sendQueueCmd(void) if (infoCmd.count == 0) return; bool avoid_terminal = false; - uint16_t cmd = 0; + uint16_t cmd = 0; cmd_index = 0; // check if cmd is from TFT or other host - bool fromTFT = (infoCmd.queue[infoCmd.index_r].port_index == PORT_1); // port index for SERIAL_PORT + bool fromTFT = getCmd(); // retrieve leading gcode in the queue - if (!ispolling && fromTFT) + if (!isPolling && fromTFT) { // ignore any query from TFT - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); return; } // Skip line number from stored gcode for internal parsing purpose - if (infoCmd.queue[infoCmd.index_r].gcode[0] == 'N') + if (cmd_ptr[0] == 'N') { - cmd_index = strcspn(infoCmd.queue[infoCmd.index_r].gcode, " ") + 1; + cmd_index = strcspn(cmd_ptr, " ") + 1; } - switch (infoCmd.queue[infoCmd.index_r].gcode[cmd_index]) + switch (cmd_ptr[cmd_index]) { // parse M-codes case 'M': - cmd = strtol(&infoCmd.queue[infoCmd.index_r].gcode[cmd_index + 1], NULL, 10); + cmd = strtol(&cmd_ptr[cmd_index + 1], NULL, 10); switch (cmd) { case 0: @@ -272,7 +306,7 @@ void sendQueueCmd(void) // pause if printing from TFT and purge M0/M1 command. if (infoFile.source < BOARD_SD ) { - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); printPause(true, PAUSE_M0); return; } @@ -294,15 +328,15 @@ void sendQueueCmd(void) case 20: // M20 if (!fromTFT) { - if (startsWith("M20 SD:", infoCmd.queue[infoCmd.index_r].gcode) || - startsWith("M20 U:", infoCmd.queue[infoCmd.index_r].gcode)) + if (cmd_start_with(cmd_ptr, "M20 SD:") || + cmd_start_with(cmd_ptr, "M20 U:")) { - if (startsWith("M20 SD:", infoCmd.queue[infoCmd.index_r].gcode)) + if (cmd_start_with(cmd_ptr, "M20 SD:")) infoFile.source = TFT_SD; else infoFile.source = TFT_UDISK; - strncpy(infoFile.title, &infoCmd.queue[infoCmd.index_r].gcode[cmd_index + 4], MAX_PATH_LEN); + strncpy(infoFile.title, &cmd_ptr[cmd_index + 4], MAX_PATH_LEN); // strip out any checksum that might be in the string for (int i = 0; i < MAX_PATH_LEN && infoFile.title[i] != 0; i++) { @@ -328,7 +362,7 @@ void sendQueueCmd(void) } } Serial_Puts(SERIAL_PORT_2, "End file list\nok\n"); - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); return; } } @@ -337,16 +371,16 @@ void sendQueueCmd(void) case 23: // M23 if (!fromTFT) { - if (startsWith("M23 SD:", infoCmd.queue[infoCmd.index_r].gcode) || - startsWith("M23 U:", infoCmd.queue[infoCmd.index_r].gcode)) + if (cmd_start_with(cmd_ptr, "M23 SD:") || + cmd_start_with(cmd_ptr, "M23 U:")) { - if (startsWith("M23 SD:", infoCmd.queue[infoCmd.index_r].gcode)) + if (cmd_start_with(cmd_ptr, "M23 SD:")) infoFile.source = TFT_SD; else infoFile.source = TFT_UDISK; resetInfoFile(); - strncpy(infoFile.title, &infoCmd.queue[infoCmd.index_r].gcode[cmd_index + 4], MAX_PATH_LEN); + strncpy(infoFile.title, &cmd_ptr[cmd_index + 4], MAX_PATH_LEN); // strip out any checksum that might be in the string for (int i = 0; i < MAX_PATH_LEN && infoFile.title[i] != 0 ; i++) { @@ -380,7 +414,7 @@ void sendQueueCmd(void) Serial_Puts(SERIAL_PORT_2, "\n"); } Serial_Puts(SERIAL_PORT_2, "ok\n"); - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); return; } } @@ -393,7 +427,7 @@ void sendQueueCmd(void) { // firstly purge the gcode to avoid a possible reprocessing or infinite nested loop in // case the function loopProcess() is invoked by the following function printPause() - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); Serial_Puts(SERIAL_PORT_2, "ok\n"); if (!isPrinting()) // if not printing, start a new print @@ -418,7 +452,7 @@ void sendQueueCmd(void) // firstly purge the gcode to avoid a possible reprocessing or infinite nested loop in // case the function loopProcess() is invoked by the following function printPause() Serial_Puts(SERIAL_PORT_2, "ok\n"); - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); printPause(true, PAUSE_NORMAL); return; } @@ -428,7 +462,7 @@ void sendQueueCmd(void) case 27: // M27 if (rrfStatusIsMacroBusy()) { - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); return; } if (!fromTFT) @@ -445,7 +479,7 @@ void sendQueueCmd(void) sprintf(buf, "%s printing byte %d/%d\n", (infoFile.source == TFT_SD) ? "TFT SD" : "TFT USB", getPrintCur(), getPrintSize()); Serial_Puts(SERIAL_PORT_2, buf); Serial_Puts(SERIAL_PORT_2, "ok\n"); - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); return; } } @@ -457,19 +491,19 @@ void sendQueueCmd(void) case 28: // M28 if (!fromTFT) - ispolling = false; + isPolling = false; break; case 29: // M29 if (!fromTFT) { // force send M29 directly and purge to avoid any loopback - Serial_Puts(SERIAL_PORT, infoCmd.queue[infoCmd.index_r].gcode); - purgeLastCmd(true, avoid_terminal); + Serial_Puts(SERIAL_PORT, cmd_ptr); + purgeCmd(true, avoid_terminal); mustStoreScript("M105\nM114\nM220\n"); storeCmd("M221 D%d\n", heatGetCurrentTool()); - ispolling = true; + isPolling = true; return; } break; @@ -477,15 +511,15 @@ void sendQueueCmd(void) case 30: // M30 if (!fromTFT) { - if (startsWith("M30 SD:", infoCmd.queue[infoCmd.index_r].gcode) || - startsWith("M30 U:", infoCmd.queue[infoCmd.index_r].gcode)) + if (cmd_start_with(cmd_ptr, "M30 SD:") || + cmd_start_with(cmd_ptr, "M30 U:")) { - if (startsWith("M30 SD:", infoCmd.queue[infoCmd.index_r].gcode)) + if (cmd_start_with(cmd_ptr, "M30 SD:")) infoFile.source = TFT_SD; else infoFile.source = TFT_UDISK; TCHAR filepath[MAX_PATH_LEN]; - strncpy(filepath, &infoCmd.queue[infoCmd.index_r].gcode[cmd_index + 4], MAX_PATH_LEN); + strncpy(filepath, &cmd_ptr[cmd_index + 4], MAX_PATH_LEN); // strip out any checksum that might be in the string for (int i = 0; i < MAX_PATH_LEN && filepath[i] != 0 ; i++) { @@ -507,20 +541,20 @@ void sendQueueCmd(void) Serial_Puts(SERIAL_PORT_2, filepath); Serial_Puts(SERIAL_PORT_2, ".\nok\n"); } - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); return; } } break; case 98: // RRF macro execution, do not wait for it to complete - Serial_Puts(SERIAL_PORT, infoCmd.queue[infoCmd.index_r].gcode); + Serial_Puts(SERIAL_PORT, cmd_ptr); infoHost.wait = false; - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); return; case 115: // M115 TFT - if (!fromTFT && startsWith("M115 TFT", infoCmd.queue[infoCmd.index_r].gcode)) + if (!fromTFT && cmd_start_with(cmd_ptr, "M115 TFT")) { char buf[50]; Serial_Puts(SERIAL_PORT_2, @@ -535,7 +569,7 @@ void sendQueueCmd(void) sprintf(buf, "Cap:FAN_CTRL_NUM:%d\n", infoSettings.ctrl_fan_en ? MAX_CRTL_FAN_COUNT : 0); Serial_Puts(SERIAL_PORT_2, buf); Serial_Puts(SERIAL_PORT_2, "ok\n"); - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); return; } break; @@ -548,7 +582,7 @@ void sendQueueCmd(void) // firstly purge the gcode to avoid a possible reprocessing or infinite nested loop in // case the function loopProcess() is invoked by the following function printPause() Serial_Puts(SERIAL_PORT_2, "ok\n"); - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); printPause(true, PAUSE_NORMAL); return; } @@ -563,7 +597,7 @@ void sendQueueCmd(void) // firstly purge the gcode to avoid a possible reprocessing or infinite nested loop in // case the function loopProcess() is invoked by the following function printAbort() Serial_Puts(SERIAL_PORT_2, "ok\n"); - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); printAbort(); return; } @@ -590,7 +624,7 @@ void sendQueueCmd(void) if (!infoMachineSettings.buildPercent) // if M73 is not supported by Marlin, skip it { - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); return; } break; @@ -629,7 +663,7 @@ void sendQueueCmd(void) case 105: // M105 if (rrfStatusIsMacroBusy()) { - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); return; } if (fromTFT) @@ -642,7 +676,7 @@ void sendQueueCmd(void) case 155: // M155 if (rrfStatusIsMacroBusy()) { - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); return; } if (fromTFT) @@ -656,7 +690,7 @@ void sendQueueCmd(void) { char buf[12]; sprintf(buf, "S%u\n", heatGetUpdateSeconds()); - strcat(infoCmd.queue[infoCmd.index_r].gcode, (const char*)buf); + updateCmd(buf); } } break; @@ -678,11 +712,14 @@ void sendQueueCmd(void) case 109: // M109 if (fromTFT) { - infoCmd.queue[infoCmd.index_r].gcode[cmd_index + 3] = '4'; // Avoid send M109 to Marlin + if (GET_BIT(infoSettings.general_settings, EMULATED_M109_M190) == 0) // if emulated M109 / M190 is disabled + break; + + cmd_ptr[cmd_index + 3] = '4'; // Avoid send M109 to Marlin uint8_t i = cmd_seen('T') ? cmd_value() : heatGetCurrentHotend(); if (cmd_seen('R')) { - infoCmd.queue[infoCmd.index_r].gcode[cmd_index - 1] = 'S'; + cmd_ptr[cmd_index - 1] = 'S'; heatSetIsWaiting(i, WAIT_COOLING_HEATING); } else @@ -703,7 +740,7 @@ void sendQueueCmd(void) { char buf[12]; sprintf(buf, "S%u\n", heatGetTargetTemp(i)); - strcat(infoCmd.queue[infoCmd.index_r].gcode,(const char*)buf); + updateCmd(buf); heatSetSendWaiting(i, false); } } @@ -717,17 +754,17 @@ void sendQueueCmd(void) break; case 117: // M117 - if (startsWith("Time Left", &infoCmd.queue[infoCmd.index_r].gcode[cmd_index + 5])) + if (cmd_start_with(&cmd_ptr[cmd_index + 5], "Time Left")) { - parsePrintRemainingTime(&infoCmd.queue[infoCmd.index_r].gcode[cmd_index + 14]); + parsePrintRemainingTime(&cmd_ptr[cmd_index + 14]); } else { - char message[CMD_MAX_CHAR]; + CMD message; - strncpy(message, &infoCmd.queue[infoCmd.index_r].gcode[cmd_index + 4], CMD_MAX_CHAR); + strncpy(message, &cmd_ptr[cmd_index + 4], CMD_MAX_SIZE); // strip out any checksum that might be in the string - for (int i = 0; i < CMD_MAX_CHAR && message[i] != 0; i++) + for (int i = 0; i < CMD_MAX_SIZE && message[i] != 0; i++) { if (message[i] == '*') { @@ -748,10 +785,13 @@ void sendQueueCmd(void) case 190: // M190 if (fromTFT) { - infoCmd.queue[infoCmd.index_r].gcode[cmd_index + 2] = '4'; // Avoid send M190 to Marlin + if (GET_BIT(infoSettings.general_settings, EMULATED_M109_M190) == 0) // if emulated M109 / M190 is disabled + break; + + cmd_ptr[cmd_index + 2] = '4'; // Avoid send M190 to Marlin if (cmd_seen('R')) { - infoCmd.queue[infoCmd.index_r].gcode[cmd_index - 1] = 'S'; + cmd_ptr[cmd_index - 1] = 'S'; heatSetIsWaiting(BED, WAIT_COOLING_HEATING); } else @@ -771,7 +811,7 @@ void sendQueueCmd(void) { char buf[12]; sprintf(buf, "S%u\n", heatGetTargetTemp(BED)); - strcat(infoCmd.queue[infoCmd.index_r].gcode, (const char *)buf); + updateCmd(buf); heatSetSendWaiting(BED, false); } } @@ -780,10 +820,10 @@ void sendQueueCmd(void) case 191: // M191 if (fromTFT) { - infoCmd.queue[infoCmd.index_r].gcode[cmd_index + 2] = '4'; // Avoid send M191 to Marlin + cmd_ptr[cmd_index + 2] = '4'; // Avoid send M191 to Marlin if (cmd_seen('R')) { - infoCmd.queue[infoCmd.index_r].gcode[cmd_index - 1] = 'S'; + cmd_ptr[cmd_index - 1] = 'S'; heatSetIsWaiting(CHAMBER, WAIT_COOLING_HEATING); } else @@ -803,7 +843,7 @@ void sendQueueCmd(void) { char buf[12]; sprintf(buf, "S%u\n", heatGetTargetTemp(CHAMBER)); - strcat(infoCmd.queue[infoCmd.index_r].gcode, (const char *)buf); + updateCmd(buf); heatSetSendWaiting(CHAMBER, false); } } @@ -910,9 +950,9 @@ void sendQueueCmd(void) { uint16_t ms = cmd_value(); Buzzer_TurnOn(hz, ms); - if (!fromTFT && startsWith("M300 TFT", infoCmd.queue[infoCmd.index_r].gcode)) + if (!fromTFT && cmd_start_with(cmd_ptr, "M300 TFT")) { - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); return; } } @@ -939,9 +979,9 @@ void sendQueueCmd(void) // RRF does not send 'ok' while executing M98 if (rrfStatusIsMacroBusy()) { - Serial_Puts(SERIAL_PORT, infoCmd.queue[infoCmd.index_r].gcode); + Serial_Puts(SERIAL_PORT, cmd_ptr); infoHost.wait = false; - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); return; } break; @@ -970,9 +1010,9 @@ void sendQueueCmd(void) { // purge and pause only if emulated M600 is enabled. // if emulated M600 is disabled then let the printer pause the print to avoid premature pause - if (infoSettings.emulated_m600 == 1) + if (GET_BIT(infoSettings.general_settings, EMULATED_M600) == 1) { - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); printPause(true, PAUSE_NORMAL); return; } @@ -985,9 +1025,9 @@ void sendQueueCmd(void) { // purge and pause only if emulated M600 is enabled. // if emulated M600 is disabled then let the printer pause the print to avoid premature pause - if (infoSettings.emulated_m600 == 1) + if (GET_BIT(infoSettings.general_settings, EMULATED_M600) == 1) { - purgeLastCmd(true, avoid_terminal); + purgeCmd(true, avoid_terminal); printPause(true, PAUSE_NORMAL); return; } @@ -1081,7 +1121,7 @@ void sendQueueCmd(void) break; // end parsing M-codes case 'G': - cmd = strtol(&infoCmd.queue[infoCmd.index_r].gcode[cmd_index + 1], NULL, 10); + cmd = strtol(&cmd_ptr[cmd_index + 1], NULL, 10); switch (cmd) { case 0: // G0 @@ -1126,7 +1166,7 @@ void sendQueueCmd(void) storeCmd("M117 UBL inactive\n"); } } - else + else // if RRF { if (cmd_seen('S')) { @@ -1183,7 +1223,7 @@ void sendQueueCmd(void) break; // end parsing G-codes case 'T': - cmd = strtol(&infoCmd.queue[infoCmd.index_r].gcode[cmd_index + 1], NULL, 10); + cmd = strtol(&cmd_ptr[cmd_index + 1], NULL, 10); heatSetCurrentTool(cmd); break; @@ -1191,7 +1231,7 @@ void sendQueueCmd(void) infoHost.wait = infoHost.connected; - setCurrentAckSrc(infoCmd.queue[infoCmd.index_r].port_index); - Serial_Puts(SERIAL_PORT, infoCmd.queue[infoCmd.index_r].gcode); - purgeLastCmd(false, avoid_terminal); + setCurrentAckSrc(cmd_port_index); + Serial_Puts(SERIAL_PORT, cmd_ptr); + purgeCmd(false, avoid_terminal); } // sendQueueCmd diff --git a/TFT/src/User/API/interfaceCmd.h b/TFT/src/User/API/interfaceCmd.h index 53081dc617..43938c493c 100644 --- a/TFT/src/User/API/interfaceCmd.h +++ b/TFT/src/User/API/interfaceCmd.h @@ -7,36 +7,21 @@ extern "C" { #include #include +#include "SerialConnection.h" -#define CMD_MAX_LIST 20 -#define CMD_MAX_CHAR 100 - -typedef struct -{ - char gcode[CMD_MAX_CHAR]; - uint8_t port_index; // 0: for SERIAL_PORT, 1: for SERIAL_PORT_2 etc... -} GCODE; - -typedef struct -{ - GCODE queue[CMD_MAX_LIST]; - uint8_t index_r; // Ring buffer read position - uint8_t index_w; // Ring buffer write position - uint8_t count; // Count of commands in the queue -} GCODE_QUEUE; - -extern GCODE_QUEUE infoCmd; -extern GCODE_QUEUE infoCacheCmd; - -bool isFullCmdQueue(void); // condition callback for loopProcessToCondition() -bool isNotEmptyCmdQueue(void); // condition callback for loopProcessToCondition() -bool isEnqueued(const char *cmd); - -bool storeCmd(const char * format,...); -void mustStoreCmd(const char * format,...); -void mustStoreScript(const char * format,...); -bool storeCmdFromUART(uint8_t portIndex, const char * gcode); -void mustStoreCacheCmd(const char * format,...); +#define CMD_MAX_SIZE 100 + +typedef char CMD[CMD_MAX_SIZE]; + +bool isFullCmdQueue(void); // also usable as condition callback for loopProcessToCondition() +bool isNotEmptyCmdQueue(void); // also usable as condition callback for loopProcessToCondition() +bool isEnqueued(const CMD cmd); + +bool storeCmd(const char * format, ...); +void mustStoreCmd(const char * format, ...); +void mustStoreScript(const char * format, ...); +bool storeCmdFromUART(SERIAL_PORT_INDEX portIndex, const CMD cmd); +void mustStoreCacheCmd(const char * format, ...); bool moveCacheToCmd(void); void clearCmdQueue(void); void sendQueueCmd(void); diff --git a/TFT/src/User/API/menu.c b/TFT/src/User/API/menu.c index 72241e52a2..71473a54a4 100644 --- a/TFT/src/User/API/menu.c +++ b/TFT/src/User/API/menu.c @@ -464,7 +464,7 @@ void loopReminderClear(void) return; case STATUS_BUSY: - if (infoCmd.count == CMD_MAX_LIST) + if (isFullCmdQueue()) return; break; @@ -950,8 +950,12 @@ void loopBackEnd(void) parseACK(); // Parse comment from gCode file parseComment(); - // Parse the received Gcode from other UART, such as: ESP3D, etc... - parseRcvGcode(); + + #ifdef SERIAL_PORT_2 + // Parse the received Gcode from other UART, such as: ESP3D, etc... + parseRcvGcode(); + #endif + // Temperature monitor loopCheckHeater(); // Fan speed monitor @@ -964,7 +968,7 @@ void loopBackEnd(void) loopBuzzer(); #endif - if (infoMachineSettings.onboard_sd_support == ENABLED) + if (infoMachineSettings.onboardSD == ENABLED) { loopPrintFromHost(); // handle a print from onboard SD or remote host, if any } diff --git a/TFT/src/User/API/parseACK.c b/TFT/src/User/API/parseACK.c index 4666a3d9b3..0cd8660ee1 100644 --- a/TFT/src/User/API/parseACK.c +++ b/TFT/src/User/API/parseACK.c @@ -2,29 +2,6 @@ #include "includes.h" #include "RRFParseACK.hpp" -#define L2_CACHE_SIZE 512 // including ending character '\0' - -char dmaL2Cache[L2_CACHE_SIZE]; -static uint16_t ack_index = 0; -static uint8_t ack_src_port_index = PORT_1; // port index for SERIAL_PORT; - -static const char errormagic[] = "Error:"; -static const char echomagic[] = "echo:"; -static const char warningmagic[] = "Warning:"; // RRF warning -static const char messagemagic[] = "message"; // RRF message in Json format -static const char errorZProbe[] = "ZProbe triggered before move"; // smoothieware message - -bool hostDialog = false; - -struct HOST_ACTION -{ - char prompt_begin[30]; - char prompt_button1[20]; - char prompt_button2[20]; - bool prompt_show; // Show popup reminder or not - uint8_t button; // Number of buttons -} hostAction; - typedef enum // popup message types available to display an echo message { ECHO_NOTIFY_NONE = 0, // ignore the echo message @@ -34,7 +11,7 @@ typedef enum // popup message types available to display an echo message typedef struct { - ECHO_NOTIFY_TYPE notifyType; + ECHO_NOTIFY_TYPE notifyType; const char * const msg; } ECHO; @@ -59,26 +36,110 @@ const ECHO knownEcho[] = { {ECHO_NOTIFY_NONE, "Unknown command: \"M150"}, // M150 }; -//uint8_t forceIgnore[ECHO_ID_COUNT] = {0}; +const char magic_error[] = "Error:"; +const char magic_echo[] = "echo:"; +const char magic_warning[] = "Warning:"; // RRF warning +const char magic_message[] = "message"; // RRF message in Json format + +#define L2_CACHE_SIZE 512 // including ending character '\0' + +char dmaL2Cache[L2_CACHE_SIZE]; +uint16_t dmaL2Cache_len; // length of data currently present in dmaL2Cache +uint16_t ack_index; +SERIAL_PORT_INDEX ack_port_index = PORT_1; // index of target serial port for the ACK message (related to originating gcode) +bool hostDialog = false; + +struct HOST_ACTION +{ + char prompt_begin[30]; + char prompt_button1[20]; + char prompt_button2[20]; + bool prompt_show; // Show popup reminder or not + uint8_t button; // Number of buttons +} hostAction; //void setIgnoreEcho(ECHO_ID msgId, bool state) //{ +// static uint8_t forceIgnore[ECHO_ID_COUNT] = {0}; +// // forceIgnore[msgId] = state; //} -void setCurrentAckSrc(uint8_t portIndex) +void setHostDialog(bool isHostDialog) { - ack_src_port_index = portIndex; + hostDialog = isHostDialog; +} + +bool getHostDialog(void) +{ + return hostDialog; +} + +void setCurrentAckSrc(SERIAL_PORT_INDEX portIndex) +{ + ack_port_index = portIndex; +} + +bool syncL2CacheFromL1(uint8_t port) +{ + if (infoHost.rx_ok[port] != true) // if no data to read from L1 cache + return false; + + DMA_CIRCULAR_BUFFER * dmaL1Data_ptr = &dmaL1Data[port]; // make access to most used variables/attributes faster reducing also the code + uint16_t * rIndex_ptr = &dmaL1Data_ptr->rIndex; // make access to most used variables/attributes faster reducing also the code + + if (*rIndex_ptr == dmaL1Data_ptr->wIndex) // if L1 cache is empty + { + infoHost.rx_ok[port] = false; // mark the port as containing no more data + + return false; + } + + uint16_t i = 0; + + while (i < (L2_CACHE_SIZE - 1) && *rIndex_ptr != dmaL1Data_ptr->wIndex) // retrieve data at most until L2 cache is full or L1 cache is empty + { + dmaL2Cache[i] = dmaL1Data_ptr->cache[*rIndex_ptr]; + *rIndex_ptr = (*rIndex_ptr + 1) % dmaL1Data_ptr->cacheSize; + + if (dmaL2Cache[i++] == '\n') // if data end marker is found, exit from the loop + break; + } + + dmaL2Cache_len = i; // length of data in the cache + dmaL2Cache[i] = 0; // end character + + return true; +} + +static bool ack_cmp(const char * str) +{ + uint16_t i; + for (i = 0; i < dmaL2Cache_len && str[i] != 0; i++) + { + if (str[i] != dmaL2Cache[i]) + return false; + } + if (str[i] != 0) + return false; + return true; } static bool ack_seen(const char * str) { + int16_t str_len = strlen(str); + int16_t max_len = dmaL2Cache_len - str_len; + + if (max_len < 0) // if str is longer than data present in cache, no match can be found + return false; + uint16_t i; - for (ack_index = 0; ack_index < L2_CACHE_SIZE && dmaL2Cache[ack_index] != 0; ack_index++) + + for (ack_index = 0; ack_index <= max_len; ack_index++) { - for (i = 0; (ack_index + i) < L2_CACHE_SIZE && str[i] != 0 && dmaL2Cache[ack_index + i] == str[i]; i++) + for (i = 0; i < str_len && str[i] == dmaL2Cache[ack_index + i]; i++) {} - if (str[i] == 0) + if (i == str_len) // if end of str is reached, a match was found { ack_index += i; return true; @@ -89,35 +150,29 @@ static bool ack_seen(const char * str) static bool ack_continue_seen(const char * str) { // unlike "ack_seen()", this retains "ack_index" if the searched string is not found + int16_t str_len = strlen(str); + int16_t max_len = dmaL2Cache_len - str_len; + + if (max_len < 0) // if str is longer than data present in cache, no match can be found + return false; + + uint16_t ack_index_orig = ack_index; uint16_t i; - uint16_t indexBackup = ack_index; - for (; ack_index < L2_CACHE_SIZE && dmaL2Cache[ack_index] != 0; ack_index++) + + for (; ack_index <= max_len; ack_index++) { - for (i = 0; (ack_index + i) < L2_CACHE_SIZE && str[i] != 0 && dmaL2Cache[ack_index + i] == str[i]; i++) + for (i = 0; i < str_len && str[i] == dmaL2Cache[ack_index + i]; i++) {} - if (str[i] == 0) + if (i == str_len) // if end of str is reached, a match was found { ack_index += i; return true; } } - ack_index = indexBackup; + ack_index = ack_index_orig; return false; } -static bool ack_cmp(const char * str) -{ - uint16_t i; - for (i = 0; i < L2_CACHE_SIZE && dmaL2Cache[i] != 0 && str[i] != 0; i++) - { - if (str[i] != dmaL2Cache[i]) - return false; - } - if (dmaL2Cache[i] != 0) - return false; - return true; -} - static float ack_value() { return (strtod(&dmaL2Cache[ack_index], NULL)); @@ -137,7 +192,7 @@ static float ack_second_value() } } -void ack_values_sum(float *data) +void ack_values_sum(float * data) { while (((dmaL2Cache[ack_index] < '0') || (dmaL2Cache[ack_index] > '9')) && dmaL2Cache[ack_index] != '\n') ack_index++; @@ -153,17 +208,17 @@ void ackPopupInfo(const char * info) { bool show_dialog = true; if (infoMenu.menu[infoMenu.cur] == menuTerminal || - (infoMenu.menu[infoMenu.cur] == menuStatus && info == echomagic)) + (infoMenu.menu[infoMenu.cur] == menuStatus && info == magic_echo)) show_dialog = false; // play notification sound if buzzer for ACK is enabled - if (info == errormagic) + if (info == magic_error) BUZZER_PLAY(SOUND_ERROR); - else if (info == echomagic && infoSettings.ack_notification == 1) + else if (info == magic_echo && infoSettings.ack_notification == 1) BUZZER_PLAY(SOUND_NOTIFY); // set echo message in status screen - if (info == echomagic || info == messagemagic) + if (info == magic_echo || info == magic_message) { // ignore all messages if parameter settings is open if (infoMenu.menu[infoMenu.cur] == menuParameterSettings) @@ -215,37 +270,13 @@ bool processKnownEcho(void) else if (knownEcho[i].notifyType == ECHO_NOTIFY_DIALOG) { BUZZER_PLAY(SOUND_NOTIFY); - addNotification(DIALOG_TYPE_INFO, (char *)echomagic, (char *)dmaL2Cache + ack_index, true); + addNotification(DIALOG_TYPE_INFO, (char *)magic_echo, (char *)dmaL2Cache + ack_index, true); } //} } return isKnown; } -bool syncL2CacheFromL1(uint8_t port) -{ - DMA_CIRCULAR_BUFFER * dmaL1Data_ptr = &dmaL1Data[port]; // make access to most used variables/attributes faster reducing also the code - uint16_t * rIndex_ptr = &dmaL1Data_ptr->rIndex; // make access to most used variables/attributes faster reducing also the code - - if (*rIndex_ptr == dmaL1Data_ptr->wIndex) // if L1 cache is empty - return false; - - uint16_t i = 0; - - while (i < (L2_CACHE_SIZE - 1) && *rIndex_ptr != dmaL1Data_ptr->wIndex) // retrieve data until L2 cache is full or L1 cache is empty - { - dmaL2Cache[i] = dmaL1Data_ptr->cache[*rIndex_ptr]; - *rIndex_ptr = (*rIndex_ptr + 1) % dmaL1Data_ptr->cacheSize; - - if (dmaL2Cache[i++] == '\n') - break; - } - - dmaL2Cache[i] = 0; // end character - - return true; -} - void hostActionCommands(void) { char * find = strchr(dmaL2Cache + ack_index, '\n'); @@ -261,7 +292,7 @@ void hostActionCommands(void) } else { - statusScreen_setMsg((uint8_t *)echomagic, (uint8_t *)dmaL2Cache + index); // always display the notification on status screen + statusScreen_setMsg((uint8_t *)magic_echo, (uint8_t *)dmaL2Cache + index); // always display the notification on status screen if (!ack_seen("Ready.")) // avoid to display unneeded/frequent useless notifications (e.g. "My printer Ready.") { @@ -269,7 +300,7 @@ void hostActionCommands(void) addToast(DIALOG_TYPE_INFO, dmaL2Cache + index); if (infoSettings.notification_m117 == ENABLED) - addNotification(DIALOG_TYPE_INFO, (char *)echomagic, (char *)dmaL2Cache + index, false); + addNotification(DIALOG_TYPE_INFO, (char *)magic_echo, (char *)dmaL2Cache + index, false); } } } @@ -376,12 +407,9 @@ void hostActionCommands(void) void parseACK(void) { - if (infoHost.rx_ok[SERIAL_PORT] != true) return; // not get response data - while (syncL2CacheFromL1(SERIAL_PORT)) // if some data are retrieved from L1 to L2 cache { bool avoid_terminal = false; - infoHost.rx_ok[SERIAL_PORT] = false; #if defined(SERIAL_DEBUG_PORT) && defined(DEBUG_SERIAL_COMM) // dump raw serial data received to debug port @@ -392,7 +420,7 @@ void parseACK(void) if (infoHost.connected == false) // Not connected to printer { // parse error information even though not connected to printer - if (ack_seen(errormagic)) ackPopupInfo(errormagic); + if (ack_seen(magic_error)) ackPopupInfo(magic_error); // the first response should be such as "T:25/50\n" if (!(ack_seen("@") && ack_seen("T:")) && !ack_seen("T0:")) goto parse_end; @@ -488,7 +516,7 @@ void parseACK(void) { requestCommandInfo.done = true; requestCommandInfo.inResponse = false; - ackPopupInfo(errormagic); + ackPopupInfo(magic_error); } infoHost.wait = false; requestCommandInfo.inJson = false; @@ -609,7 +637,7 @@ void parseACK(void) // parse pause message else if (!infoMachineSettings.promptSupport && ack_seen("paused for user")) { - setDialogText((uint8_t*)"Printer is Paused", (uint8_t*)"Paused for user\ncontinue?", LABEL_CONFIRM, LABEL_BACKGROUND); + setDialogText((uint8_t *)"Printer is Paused", (uint8_t *)"Paused for user\ncontinue?", LABEL_CONFIRM, LABEL_BACKGROUND); showDialog(DIALOG_TYPE_QUESTION, breakAndContinue, NULL, NULL); } // parse host action commands. Required "HOST_ACTION_COMMANDS" and other settings in Marlin @@ -634,7 +662,7 @@ void parseACK(void) } hasFilamentData = true; } - else if (infoMachineSettings.onboard_sd_support == ENABLED && + else if (infoMachineSettings.onboardSD == ENABLED && ack_seen(infoMachineSettings.firmwareType != FW_REPRAPFW ? "File opened:" : "job.file.fileName")) { char * fileEndString; @@ -659,13 +687,13 @@ void parseACK(void) setPrintHost(true); } - else if (infoMachineSettings.onboard_sd_support == ENABLED && + else if (infoMachineSettings.onboardSD == ENABLED && infoFile.source >= BOARD_SD && ack_seen("Not SD printing")) { setPrintPause(true, PAUSE_EXTERNAL); } - else if (infoMachineSettings.onboard_sd_support == ENABLED && + else if (infoMachineSettings.onboardSD == ENABLED && infoFile.source >= BOARD_SD && ack_seen("SD printing byte")) { @@ -677,7 +705,7 @@ void parseACK(void) setPrintProgress(ack_value(), ack_second_value()); //powerFailedCache(position); } - else if (infoMachineSettings.onboard_sd_support == ENABLED && + else if (infoMachineSettings.onboardSD == ENABLED && infoFile.source >= BOARD_SD && ack_seen(infoMachineSettings.firmwareType != FW_REPRAPFW ? "Done printing file" : "Finished printing file")) { @@ -723,7 +751,7 @@ void parseACK(void) { sprintf (&tmpMsg[strlen(tmpMsg)], "\nRange: %0.5f", ack_value()); } - setDialogText((uint8_t* )"Repeatability Test", (uint8_t *)tmpMsg, LABEL_CONFIRM, LABEL_BACKGROUND); + setDialogText((uint8_t *)"Repeatability Test", (uint8_t *)tmpMsg, LABEL_CONFIRM, LABEL_BACKGROUND); showDialog(DIALOG_TYPE_INFO, NULL, NULL, NULL); } // parse M48, Standard Deviation @@ -736,7 +764,7 @@ void parseACK(void) { levelingSetProbedPoint(-1, -1, ack_value()); // save probed Z value sprintf(tmpMsg, "%s\nStandard Deviation: %0.5f", (char *)getDialogMsgStr(), ack_value()); - setDialogText((uint8_t* )"Repeatability Test", (uint8_t *)tmpMsg, LABEL_CONFIRM, LABEL_BACKGROUND); + setDialogText((uint8_t *)"Repeatability Test", (uint8_t *)tmpMsg, LABEL_CONFIRM, LABEL_BACKGROUND); showDialog(DIALOG_TYPE_INFO, NULL, NULL, NULL); } } @@ -1085,7 +1113,7 @@ void parseACK(void) // parse M115 capability report else if (ack_seen("FIRMWARE_NAME:")) { - uint8_t *string = (uint8_t *)&dmaL2Cache[ack_index]; + uint8_t * string = (uint8_t *)&dmaL2Cache[ack_index]; uint16_t string_start = ack_index; uint16_t string_end = string_start; @@ -1182,7 +1210,7 @@ void parseACK(void) } else if (ack_seen("Cap:SDCARD:") && infoSettings.onboard_sd == AUTO) { - infoMachineSettings.onboard_sd_support = ack_value(); + infoMachineSettings.onboardSD = ack_value(); } else if (ack_seen("Cap:AUTOREPORT_SD_STATUS:")) { @@ -1190,7 +1218,7 @@ void parseACK(void) } else if (ack_seen("Cap:LONG_FILENAME:") && infoSettings.long_filename == AUTO) { - infoMachineSettings.long_filename_support = ack_value(); + infoMachineSettings.longFilename = ack_value(); } else if (ack_seen("Cap:BABYSTEPPING:")) { @@ -1211,33 +1239,33 @@ void parseACK(void) //---------------------------------------- // parse error messages - else if (ack_seen(errormagic)) + else if (ack_seen(magic_error)) { - ackPopupInfo(errormagic); + ackPopupInfo(magic_error); } // parse echo messages - else if (ack_seen(echomagic)) + else if (ack_seen(magic_echo)) { if (!processKnownEcho()) // if no known echo was found and processed, then popup the echo message { - ackPopupInfo(echomagic); + ackPopupInfo(magic_echo); } } // keep it here and parse it the latest else if (infoMachineSettings.firmwareType == FW_REPRAPFW) { - if (ack_seen(warningmagic)) + if (ack_seen(magic_warning)) { - ackPopupInfo(warningmagic); + ackPopupInfo(magic_warning); } - else if (ack_seen(messagemagic)) + else if (ack_seen(magic_message)) { - ackPopupInfo(messagemagic); + ackPopupInfo(magic_message); } else if (ack_seen("access point ")) { - uint8_t *string = (uint8_t *)&dmaL2Cache[ack_index]; + uint8_t * string = (uint8_t *)&dmaL2Cache[ack_index]; uint16_t string_start = ack_index; uint16_t string_end = string_start; if (ack_seen(",")) @@ -1257,7 +1285,7 @@ void parseACK(void) } else if (infoMachineSettings.firmwareType == FW_SMOOTHIEWARE) { - if (ack_seen(errorZProbe)) // smoothieboard ZProbe triggered before move, aborting command. + if (ack_seen("ZProbe triggered before move")) // smoothieboard ZProbe triggered before move, aborting command. { ackPopupInfo("ZProbe triggered before move.\nAborting Print!"); } @@ -1280,15 +1308,15 @@ void parseACK(void) } parse_end: - if (ack_src_port_index != PORT_1) // if the ACK message is related to a gcode originated by a supplementary serial port, - { // forward the message to the supplementary serial port - Serial_Puts(serialPort[ack_src_port_index].port, dmaL2Cache); + if (ack_port_index != PORT_1) // if the ACK message is related to a gcode originated by a supplementary serial port, + { // forward the message to the supplementary serial port + Serial_Puts(serialPort[ack_port_index].port, dmaL2Cache); } #ifdef SERIAL_PORT_2 else if (!ack_seen("ok") || ack_seen("T:") || ack_seen("T0:")) // if a spontaneous ACK message { // pass on the spontaneous ACK message to all the supplementary serial ports (since these messages come unrequested) - for (uint8_t i = PORT_2; i < SERIAL_PORT_COUNT; i++) + for (SERIAL_PORT_INDEX i = PORT_2; i < SERIAL_PORT_COUNT; i++) { if (infoSettings.serial_port[i] > 0) // if serial port is enabled { @@ -1300,33 +1328,25 @@ void parseACK(void) if (avoid_terminal != true) { - terminalCache(dmaL2Cache, TERMINAL_ACK); + terminalCache(dmaL2Cache, dmaL2Cache_len, ack_port_index, TERMINAL_ACK); } } } +#ifdef SERIAL_PORT_2 + void parseRcvGcode(void) { - #ifdef SERIAL_PORT_2 - uint8_t port; - - // scan all the supplementary serial ports - for (uint8_t i = PORT_2; i < SERIAL_PORT_COUNT; i++) + for (SERIAL_PORT_INDEX i = PORT_2; i < SERIAL_PORT_COUNT; i++) // scan all the supplementary serial ports + { + if (infoSettings.serial_port[i] > 0) // if serial port is enabled { - if (infoSettings.serial_port[i] > 0) // if serial port is enabled + while (syncL2CacheFromL1(serialPort[i].port)) // if some data are retrieved from L1 to L2 cache { - port = serialPort[i].port; - - if (infoHost.rx_ok[port] == true) - { - infoHost.rx_ok[port] = false; - - while (syncL2CacheFromL1(port)) // if some data are retrieved from L1 to L2 cache - { - storeCmdFromUART(i, dmaL2Cache); - } - } + storeCmdFromUART(i, dmaL2Cache); } } - #endif + } } + +#endif diff --git a/TFT/src/User/API/parseACK.h b/TFT/src/User/API/parseACK.h index c937ac617d..191b2c155f 100644 --- a/TFT/src/User/API/parseACK.h +++ b/TFT/src/User/API/parseACK.h @@ -7,8 +7,7 @@ extern "C" { #include #include - -extern bool hostDialog; +#include "SerialConnection.h" // append at the end of this list the id of any new echo message for // which a specific popup message type must be used to notify the user @@ -34,12 +33,15 @@ typedef enum ECHO_ID_COUNT, } ECHO_ID; -inline bool isHostDialog() {return hostDialog;} - //void setIgnoreEcho(ECHO_ID msgId, bool state); -void setCurrentAckSrc(uint8_t portIndex); +void setHostDialog(bool isHostDialog); +bool getHostDialog(void); +void setCurrentAckSrc(SERIAL_PORT_INDEX portIndex); void parseACK(void); -void parseRcvGcode(void); + +#ifdef SERIAL_PORT_2 + void parseRcvGcode(void); +#endif #ifdef __cplusplus } diff --git a/TFT/src/User/Configuration.h b/TFT/src/User/Configuration.h index a551299da3..b76997c7db 100644 --- a/TFT/src/User/Configuration.h +++ b/TFT/src/User/Configuration.h @@ -1,7 +1,7 @@ #ifndef _CONFIGURATION_H_ #define _CONFIGURATION_H_ -#define CONFIG_VERSION 20210829 +#define CONFIG_VERSION 20210903 //==================================================================================================== //=============================== Settings Configurable On config.ini ================================ @@ -38,17 +38,6 @@ */ #define PRIMARY_BAUDRATE 6 // Default: 6 -/** - * Emulated M600 - * The TFT intercepts the M600 gcode (filament change) and emulates the handling logic - * otherwise provided by Marlin firmware. - * - * NOTE: Enable it, in case Marlin firmware does not properly support M600 on the mainboard. - * - * Options: [disable: 0, enable: 1] - */ -#define EMULATED_M600 1 // Default: 1 - //================================================================================ //================================= UI Settings ================================== //================================================================================ @@ -67,7 +56,7 @@ #define STATUS_SCREEN 1 // Default: 1 /** - * Default Touch Mode Colors + * Touch Mode Colors * Set colors used in Touch Mode. * * Options: [ WHITE: 0, BLACK: 1, RED: 2, GREEN: 3, BLUE: 4, CYAN: 5, MAGENTA: 6, YELLOW: 7, @@ -150,7 +139,7 @@ #define SERIAL_ALWAYS_ON 0 // Default: 0 /** - * Default Marlin Mode Background & Font Colors + * Marlin Mode Background & Font Colors * Set colors used in Marlin Mode. * * Options: [ WHITE: 0, BLACK: 1, RED: 2, GREEN: 3, BLUE: 4, CYAN: 5, MAGENTA: 6, YELLOW: 7, @@ -246,12 +235,12 @@ #define AXIS_DISPLAY_ID {"X", "Y", "Z", "E0", "E1"} // (X, Y, Z, E0, E1) #define STEPPER_DISPLAY_ID {"X", "X2", "Y", "Y2", "Z", "Z2", "E0", "E1"} // (X, X2, Y, Y2, Z, Z2, E0, E1) -// Default X & Y speed (mm/min) +// X & Y speed (mm/min) #define SPEED_XY_SLOW 1000 #define SPEED_XY_NORMAL 3000 #define SPEED_XY_FAST 5000 -// Default Z speed (mm/min) +// Z speed (mm/min) #define SPEED_Z_SLOW 500 #define SPEED_Z_NORMAL 1000 #define SPEED_Z_FAST 2000 @@ -383,7 +372,7 @@ */ /** - * Default Filament Runout Sensor + * Filament Runout Sensor * Select the type of filament runout sensor and its default enabled/disabled state. * * Options: [Normal Disabled: 0, Normal Enabled: 1, Smart Disabled: 2, Smart Enabled: 3] @@ -449,16 +438,16 @@ //================================================================================ /** - * Default LCD Brightness Levels (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) - * Default brightness values for LCD. + * LCD Brightness Levels (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) + * Brightness levels for LCD. * * Options: [OFF: 0, 5%: 1, 10%: 2, 20%: 3, 30%: 4, 40%: 5, 50%: 6, 60%: 7, 70%: 8, 80%: 9, 90%: 10, 100%: 11] */ -#define LCD_BRIGHTNESS 11 // Default display brightness (Default: 11) -#define LCD_IDLE_BRIGHTNESS 3 // Display brightness when device is idle (Default: 3) +#define LCD_BRIGHTNESS 11 // LCD brightness level (Default: 11) +#define LCD_IDLE_BRIGHTNESS 3 // LCD brightness level when device is idle (Default: 3) /** - * Default LCD Idle Time (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) + * LCD Idle Time (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) * The LCD screen will dim to idle brightness, if the display is not touched for the * period of the LCD idle time. * @@ -535,7 +524,7 @@ /** * Start/End/Cancel Gcode * Gcode that runs after a print starts, ends, or canceled. - * Enable Start/End/Cancel gcode in SETTINGS -> FEATURE menu. + * Enable Start/End/Cancel gcode in Settings -> Feature menu. * * NOTES for users having a filament sensor connected to the mainboard: * 1) Enable the start/end gcode. @@ -589,11 +578,11 @@ * If one of the DEBUG_x below is defined the SERIAL_DEBUG_PORT defined in board specific Pin_xx.h file * will be used for debugging purposes. DON'T enable one of the DEBUG_x below for normal printing. * - * Warning: SERIAL_DEBUG_PORT needs to be activated specifically. Please consider settings MULTI_SERIAL > 0 - * in the Configuration.h or set e.g. "multi_serial: 2" in the config.ini. - * If the TFT is only showing the boot logo and is not responding anymore, check the MULTI_SERIAL setting. - * If you update the config.ini you need to reset the TFT *twice* (first reset to update the config, second - * reset to enable the SERIAL_DEBUG_PORT due to the changed firmware config). + * WARNINGS: + * - SERIAL_DEBUG_PORT needs to be activated specifically. Please consider SERIAL_PORT setting in the config.ini. + * - If the TFT is only showing the boot logo and is not responding anymore, check the SERIAL_PORT setting. + * - If you update the config.ini you need to reset the TFT *twice* (first reset to update the config, second + * reset to enable the SERIAL_DEBUG_PORT due to the changed firmware config). */ /** @@ -679,8 +668,8 @@ //================================================================================ /** - * Default Primary Language (for Touch-Mode only) - * Select the language to display on the LCD while in Touch Mode. + * Primary Language (for Touch-Mode only) + * Select the language to use on the LCD while in Touch Mode. * * NOTE: To add/flash a second language copy the required "language_xx.ini" file from * "Language Packs" folder to the SD root folder. @@ -703,23 +692,25 @@ #define RAPID_SERIAL_COMM // Default: uncommented (enabled) /** - * LCD/Touch Encoder - * In case LCD/Touch Encoder's sliding buttons (pin LCD_ENCA_PIN and LCD_ENCB_PIN) - * don't produce any movement on menu, try to increase the delay in ms (e.g. 64). + * LCD Encoder Settings (HW Rotary Encoder) + * In case LCD Encoder's sliding buttons (pin LCD_ENCA_PIN and LCD_ENCB_PIN) don't produce + * any movement on menu, try to increase the delay (in MilliSeconds) (e.g. 64). */ -#define LCD_ENCODER_DELAY 8 // Default: 8 (ms) (1 ms = 0.000001 seconds) +#define LCD_ENC_DELAY 8 // in ms. Default: 8 +#define LCD_ENC_PULSES_PER_STEP 4 // Default: 4 +#define LCD_ENC_BUTTON_INTERVAL 20 // in ms. Default: 20 /** * Buzzer Settings * The duration and frequency for the UI feedback sound. * Set these to 0 to disable audio feedback in the LCD menus. - * Only valid for SERIAL_TSC LCD MODE and if BUZZER_PIN is set or available. + * Only valid for Touch Mode and if BUZZER_PIN is set or available. * * NOTE: Test audio output with the G-Code: * M300 S P */ -#define BUZZER_FREQUENCY_DURATION_MS 20 // (MilliSeconds) Default: 20 -#define BUZZER_FREQUENCY_HZ 10000 // (Hz) Default: 10000 (20Hz to 60000Hz) +#define BUZZER_FREQUENCY_DURATION_MS 20 // in ms. Default: 20 +#define BUZZER_FREQUENCY_HZ 10000 // in Hz (20Hz to 60000Hz). Default: 10000 /** * Buzzer Stop Level @@ -758,9 +749,10 @@ /** * Quick EEPROM Menu - * Enable EEPROM menu (save/load/reset buttons) in Settings > Machine Menu. + * Enable EEPROM menu (save/load/reset buttons) in Settings -> Machine menu. * - * NOTE: If disabled, EEPROM operations can also be accessed in the (settings > machine > parameters) menu. + * NOTE: If disabled, EEPROM operations can also be accessed in + * Settings -> Machine -> Parameter Settings menu. */ #define QUICK_EEPROM_BUTTON // Default: uncommented (enabled) @@ -768,10 +760,10 @@ * Toast Notification Duration (in MilliSeconds) * Set the duration for displaying toast notification on top of the screen. */ -#define TOAST_DURATION (3 * 1000) // (MilliSeconds) 1000 MilliSeconds = 1 Second +#define TOAST_DURATION (3 * 1000) // in ms. Default: 3 * 1000 /** - * Keyboard On Left Side (Mesh Editor, RGB Settings Custom) + * Keyboard On Left Side (Mesh Editor, LED Color Custom) * By default the keyboard is drawn on right side of the screen. * Enable KEYBOARD_ON_LEFT to draw the keyboard on left side of the screen. */ diff --git a/TFT/src/User/Hal/LCD_Encoder.c b/TFT/src/User/Hal/LCD_Encoder.c index 141d5348a8..10e850f367 100644 --- a/TFT/src/User/Hal/LCD_Encoder.c +++ b/TFT/src/User/Hal/LCD_Encoder.c @@ -100,23 +100,23 @@ void LCD_Enc_SendPulse(uint8_t num) case 1: GPIO_SetLevel(LCD_BTN_PIN, 0); - Delay_us(LCD_ENCODER_DELAY); + Delay_us(LCD_ENC_DELAY); GPIO_SetLevel(LCD_BTN_PIN, 1); break; case 2: GPIO_SetLevel(LCD_ENCA_PIN, 1); GPIO_SetLevel(LCD_ENCB_PIN, 1); - Delay_us(LCD_ENCODER_DELAY); + Delay_us(LCD_ENC_DELAY); GPIO_SetLevel(LCD_ENCA_PIN, 0); GPIO_SetLevel(LCD_ENCB_PIN, 1); - Delay_us(LCD_ENCODER_DELAY); + Delay_us(LCD_ENC_DELAY); GPIO_SetLevel(LCD_ENCA_PIN, 0); GPIO_SetLevel(LCD_ENCB_PIN, 0); - Delay_us(LCD_ENCODER_DELAY); + Delay_us(LCD_ENC_DELAY); GPIO_SetLevel(LCD_ENCA_PIN, 1); GPIO_SetLevel(LCD_ENCB_PIN, 0); - Delay_us(LCD_ENCODER_DELAY); + Delay_us(LCD_ENC_DELAY); GPIO_SetLevel(LCD_ENCA_PIN, 1); GPIO_SetLevel(LCD_ENCB_PIN, 1); break; @@ -124,16 +124,16 @@ void LCD_Enc_SendPulse(uint8_t num) case 3: GPIO_SetLevel(LCD_ENCA_PIN, 1); GPIO_SetLevel(LCD_ENCB_PIN, 1); - Delay_us(LCD_ENCODER_DELAY); + Delay_us(LCD_ENC_DELAY); GPIO_SetLevel(LCD_ENCA_PIN, 1); GPIO_SetLevel(LCD_ENCB_PIN, 0); - Delay_us(LCD_ENCODER_DELAY); + Delay_us(LCD_ENC_DELAY); GPIO_SetLevel(LCD_ENCA_PIN, 0); GPIO_SetLevel(LCD_ENCB_PIN, 0); - Delay_us(LCD_ENCODER_DELAY); + Delay_us(LCD_ENC_DELAY); GPIO_SetLevel(LCD_ENCA_PIN, 0); GPIO_SetLevel(LCD_ENCB_PIN, 1); - Delay_us(LCD_ENCODER_DELAY); + Delay_us(LCD_ENC_DELAY); GPIO_SetLevel(LCD_ENCA_PIN, 1); GPIO_SetLevel(LCD_ENCB_PIN, 1); break; diff --git a/TFT/src/User/Hal/LCD_Encoder.h b/TFT/src/User/Hal/LCD_Encoder.h index e47bf786f6..0e8e03bcf5 100644 --- a/TFT/src/User/Hal/LCD_Encoder.h +++ b/TFT/src/User/Hal/LCD_Encoder.h @@ -15,10 +15,7 @@ extern "C" { #endif #if LCD_ENCODER_SUPPORT - #define LCD_ENC_PULSES_PER_STEP 4 - #define LCD_ENC_BUTTON_INTERVAL 20 // 20ms - - extern int16_t encoderPosition; + extern int16_t encoderPosition; // make it available for reading the current rotation value void LCD_Enc_Init(void); bool LCD_Enc_ReadBtn(uint16_t interval); // return the button press state. Interval is in milli seconds diff --git a/TFT/src/User/Hal/stm32f10x/Serial.c b/TFT/src/User/Hal/stm32f10x/Serial.c index c9ef4401ae..268dce90e6 100644 --- a/TFT/src/User/Hal/stm32f10x/Serial.c +++ b/TFT/src/User/Hal/stm32f10x/Serial.c @@ -81,7 +81,7 @@ void USART_IRQHandler(uint8_t port) dmaL1Data[port].wIndex = dmaL1Data[port].cacheSize - Serial[port].dma_chanel->CNDTR; uint16_t wIndex = (dmaL1Data[port].wIndex == 0) ? dmaL1Data[port].cacheSize : dmaL1Data[port].wIndex; - if (dmaL1Data[port].cache[wIndex-1] == '\n') // Receive completed + if (dmaL1Data[port].cache[wIndex - 1] == '\n') // Receive completed { infoHost.rx_ok[port] = true; } diff --git a/TFT/src/User/Hal/stm32f2_f4xx/Serial.c b/TFT/src/User/Hal/stm32f2_f4xx/Serial.c index a0d209988a..d1f0f616cf 100644 --- a/TFT/src/User/Hal/stm32f2_f4xx/Serial.c +++ b/TFT/src/User/Hal/stm32f2_f4xx/Serial.c @@ -111,7 +111,7 @@ void USART_IRQHandler(uint8_t port) dmaL1Data[port].wIndex = dmaL1Data[port].cacheSize - Serial[port].dma_stream->NDTR; uint16_t wIndex = (dmaL1Data[port].wIndex == 0) ? dmaL1Data[port].cacheSize : dmaL1Data[port].wIndex; - if (dmaL1Data[port].cache[wIndex-1] == '\n') // Receive completed + if (dmaL1Data[port].cache[wIndex - 1] == '\n') // Receive completed { infoHost.rx_ok[port] = true; } diff --git a/TFT/src/User/Menu/ConnectionSettings.c b/TFT/src/User/Menu/ConnectionSettings.c index ee9aa04694..64d3cff194 100644 --- a/TFT/src/User/Menu/ConnectionSettings.c +++ b/TFT/src/User/Menu/ConnectionSettings.c @@ -17,7 +17,7 @@ const MENUITEMS connectionSettingsItems = { } }; -uint8_t portIndex = 0; // index on serialPort array +SERIAL_PORT_INDEX portIndex = 0; // index on serialPort array // Set uart pins to input, free uart void menuDisconnect(void) @@ -47,7 +47,7 @@ void menuDisconnect(void) void menuBaudrate(void) { LABEL title = {LABEL_BAUDRATE}; - uint8_t minIndex = portIndex == 0 ? 1 : 0; // if primary serial port, set minIndex to 1 (value OFF is skipped) + uint8_t minIndex = portIndex == PORT_1 ? 1 : 0; // if primary serial port, set minIndex to 1 (value OFF is skipped) uint8_t size = BAUDRATE_COUNT - minIndex; LISTITEM totalItems[size]; KEY_VALUES curIndex = KEY_IDLE; @@ -107,7 +107,7 @@ void menuSerialPorts(void) LISTITEM totalItems[SERIAL_PORT_COUNT]; KEY_VALUES curIndex = KEY_IDLE; - for (uint8_t i = PORT_1; i < SERIAL_PORT_COUNT; i++) + for (SERIAL_PORT_INDEX i = PORT_1; i < SERIAL_PORT_COUNT; i++) { totalItems[i].icon = CHARICON_EDIT; totalItems[i].itemType = LIST_CUSTOMVALUE; @@ -124,7 +124,7 @@ void menuSerialPorts(void) if (curIndex < (KEY_VALUES)SERIAL_PORT_COUNT) { - portIndex = curIndex; + portIndex = (SERIAL_PORT_INDEX)curIndex; infoMenu.menu[++infoMenu.cur] = menuBaudrate; } diff --git a/TFT/src/User/Menu/FeatureSettings.c b/TFT/src/User/Menu/FeatureSettings.c index bff6629710..fe0e0f39e4 100644 --- a/TFT/src/User/Menu/FeatureSettings.c +++ b/TFT/src/User/Menu/FeatureSettings.c @@ -24,6 +24,7 @@ const LABEL itemToggleSmart[ITEM_TOGGLE_SMART_NUM] = typedef enum { SKEY_EMULATED_M600 = 0, + SKEY_EMULATED_M109_M190, SKEY_SERIAL_ALWAYS_ON, SKEY_SPEED, SKEY_AUTO_LOAD_LEVELING, @@ -54,7 +55,8 @@ void updateFeatureSettings(uint8_t item_index) switch (item_index) { case SKEY_EMULATED_M600: - infoSettings.emulated_m600 = (infoSettings.emulated_m600 + 1) % ITEM_TOGGLE_NUM; + case SKEY_EMULATED_M109_M190: + TOGGLE_BIT(infoSettings.general_settings, (item_index - SKEY_EMULATED_M600)); break; case SKEY_SERIAL_ALWAYS_ON: @@ -125,7 +127,8 @@ void loadFeatureSettings(LISTITEM * item, uint16_t item_index, uint8_t itemPos) switch (item_index) { case SKEY_EMULATED_M600: - item->icon = iconToggle[infoSettings.emulated_m600]; + case SKEY_EMULATED_M109_M190: + item->icon = iconToggle[GET_BIT(infoSettings.general_settings, (item_index - SKEY_EMULATED_M600))]; break; case SKEY_SERIAL_ALWAYS_ON: @@ -204,6 +207,7 @@ void menuFeatureSettings(void) // set item types LISTITEM settingPage[SKEY_COUNT] = { {CHARICON_TOGGLE_ON, LIST_TOGGLE, LABEL_EMULATED_M600, LABEL_BACKGROUND}, + {CHARICON_TOGGLE_ON, LIST_TOGGLE, LABEL_EMULATED_M109_M190, LABEL_BACKGROUND}, {CHARICON_TOGGLE_ON, LIST_TOGGLE, LABEL_SERIAL_ALWAYS_ON, LABEL_BACKGROUND}, {CHARICON_BLANK, LIST_CUSTOMVALUE, LABEL_MOVE_SPEED, LABEL_NORMAL}, {CHARICON_TOGGLE_ON, LIST_TOGGLE, LABEL_AUTO_LOAD_LEVELING, LABEL_BACKGROUND}, diff --git a/TFT/src/User/Menu/LevelCorner.c b/TFT/src/User/Menu/LevelCorner.c index 8e5ec54fee..26c64b52fc 100644 --- a/TFT/src/User/Menu/LevelCorner.c +++ b/TFT/src/User/Menu/LevelCorner.c @@ -69,6 +69,7 @@ void menuLevelCorner(void) KEY_VALUES key_num = KEY_IDLE; char iconText[LEVELING_POINT_COUNT][15]; + LEVELING_POINT levelingPoint; if (coordinateIsKnown() == false) probeHeightHomeAndRaise(); // home and raise nozzle @@ -146,10 +147,12 @@ void menuLevelCorner(void) break; } - if (levelingGetProbedPoint() != LEVEL_NO_POINT) + levelingPoint = levelingGetProbedPoint(); + + if (levelingPoint != LEVEL_NO_POINT) { - levelCornerPosition[levelingGetProbedPoint()] = levelingGetProbedZ(); - refreshValue(&levelCornerItems, levelingGetProbedPoint()); + levelCornerPosition[levelingPoint] = levelingGetProbedZ(); + refreshValue(&levelCornerItems, levelingPoint); levelingResetProbedPoint(); // reset to check for new updates } diff --git a/TFT/src/User/Menu/Print.c b/TFT/src/User/Menu/Print.c index ed52a07b8f..93e180032c 100644 --- a/TFT/src/User/Menu/Print.c +++ b/TFT/src/User/Menu/Print.c @@ -90,7 +90,7 @@ void gocdeListDraw(LISTITEM * item, uint16_t index, uint8_t itemPos) item->icon = CHARICON_FILE; item->itemType = LIST_LABEL; item->titlelabel.index = LABEL_DYNAMIC; - if (infoMachineSettings.long_filename_support == ENABLED && infoFile.source == BOARD_SD) + if (infoMachineSettings.longFilename == ENABLED && infoFile.source == BOARD_SD) setDynamicLabel(itemPos, infoFile.Longfile[index - infoFile.folderCount]); else setDynamicLabel(itemPos, infoFile.file[index - infoFile.folderCount]); @@ -134,7 +134,7 @@ bool printPageItemSelected(uint16_t index) char temp_info[FILE_NUM + 50]; sprintf(temp_info, (char *)textSelect(LABEL_START_PRINT), - (uint8_t *)((infoMachineSettings.long_filename_support == ENABLED && infoFile.source == BOARD_SD) ? + (uint8_t *)((infoMachineSettings.longFilename == ENABLED && infoFile.source == BOARD_SD) ? infoFile.Longfile[infoFile.fileIndex] : infoFile.file[infoFile.fileIndex])); // confirm file selction @@ -193,9 +193,12 @@ void menuPrintFromSource(void) infoMenu.cur--; } + #if LCD_ENCODER_SUPPORT + encoderPosition = 0; + #endif + while (infoMenu.menu[infoMenu.cur] == menuPrintFromSource) { - if (list_mode != true) // select item from icon view { key_num = menuKeyGetValue(); @@ -235,6 +238,29 @@ void menuPrintFromSource(void) break; case KEY_IDLE: + #if LCD_ENCODER_SUPPORT + if (encoderPosition) // if a page scrolling is requested + { + if (encoderPosition < 0) // if page up + { + if (infoFile.cur_page > 0) + { + infoFile.cur_page--; + update = 1; + } + } + else // if page down + { + if (infoFile.cur_page + 1 < (infoFile.folderCount + infoFile.fileCount + (NUM_PER_PAGE - 1)) / NUM_PER_PAGE) + { + infoFile.cur_page++; + update = 1; + } + } + + encoderPosition = 0; + } + #endif break; default: @@ -346,8 +372,8 @@ void menuPrint(void) KEY_VALUES key_num = KEY_IDLE; - sourceSelItems.items[ONBOARD_SD_INDEX].icon = (infoMachineSettings.onboard_sd_support == ENABLED) ? ICON_ONBOARD_SD : ICON_BACKGROUND; - sourceSelItems.items[ONBOARD_SD_INDEX].label.index = (infoMachineSettings.onboard_sd_support == ENABLED) ? LABEL_ONBOARDSD : LABEL_BACKGROUND; + sourceSelItems.items[ONBOARD_SD_INDEX].icon = (infoMachineSettings.onboardSD == ENABLED) ? ICON_ONBOARD_SD : ICON_BACKGROUND; + sourceSelItems.items[ONBOARD_SD_INDEX].label.index = (infoMachineSettings.onboardSD == ENABLED) ? LABEL_ONBOARDSD : LABEL_BACKGROUND; menuDrawPage(&sourceSelItems); @@ -374,7 +400,7 @@ void menuPrint(void) #else case KEY_ICON_1: #endif - if (infoMachineSettings.onboard_sd_support == ENABLED) + if (infoMachineSettings.onboardSD == ENABLED) { list_mode = true; // force list mode in Onboard sd card infoFile.source = BOARD_SD; diff --git a/TFT/src/User/Menu/PrintingMenu.c b/TFT/src/User/Menu/PrintingMenu.c index 89b2b55f2a..9333685624 100644 --- a/TFT/src/User/Menu/PrintingMenu.c +++ b/TFT/src/User/Menu/PrintingMenu.c @@ -580,7 +580,7 @@ void menuPrinting(void) if (lastPrinting == true) { - if (infoMachineSettings.long_filename_support == ENABLED && infoFile.source == BOARD_SD) + if (infoMachineSettings.longFilename == ENABLED && infoFile.source == BOARD_SD) printingItems.title.address = (uint8_t *) infoFile.Longfile[infoFile.fileIndex]; else printingItems.title.address = getPrintName(infoFile.title); @@ -777,7 +777,7 @@ void menuPrinting(void) case PS_KEY_6: if (isPrinting()) { - if (isHostDialog()) + if (getHostDialog()) addToast(DIALOG_TYPE_ERROR, (char *)textSelect(LABEL_BUSY)); else if (getPrintRunout()) addToast(DIALOG_TYPE_ERROR, (char *)textSelect(LABEL_FILAMENT_RUNOUT)); diff --git a/TFT/src/User/Menu/ScreenSettings.c b/TFT/src/User/Menu/ScreenSettings.c index 275e9c90b1..ce5a28bae1 100644 --- a/TFT/src/User/Menu/ScreenSettings.c +++ b/TFT/src/User/Menu/ScreenSettings.c @@ -446,7 +446,7 @@ void menuBrightnessSettings(void) {CHARICON_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_BRIGHTNESS, LABEL_DYNAMIC}, {CHARICON_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_IDLE_BRIGHTNESS, LABEL_DYNAMIC}, {CHARICON_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_IDLE_TIME, LABEL_DYNAMIC}, - {CHARICON_TOGGLE_ON, LIST_TOGGLE, LABEL_BLOCK_TOUCH_ON_IDLE, LABEL_BACKGROUND}, + {CHARICON_TOGGLE_ON, LIST_TOGGLE, LABEL_LCD_LOCK_ON_IDLE, LABEL_BACKGROUND}, }; uint16_t curIndex = KEY_IDLE; @@ -460,7 +460,7 @@ void menuBrightnessSettings(void) setDynamicTextValue(1, tempstr); brightnessitems[2].valueLabel = lcd_idle_time_names[infoSettings.lcd_idle_time]; - brightnessitems[3].icon = iconToggle[infoSettings.block_touch_on_idle]; + brightnessitems[3].icon = iconToggle[infoSettings.lcd_lock_on_idle]; listViewCreate(title, brightnessitems, COUNT(brightnessitems), NULL, true, NULL, NULL); @@ -492,8 +492,8 @@ void menuBrightnessSettings(void) break; case 3: - infoSettings.block_touch_on_idle = (infoSettings.block_touch_on_idle + 1) % 2; - brightnessitems[curIndex].icon = iconToggle[infoSettings.block_touch_on_idle]; + infoSettings.lcd_lock_on_idle = (infoSettings.lcd_lock_on_idle + 1) % 2; + brightnessitems[curIndex].icon = iconToggle[infoSettings.lcd_lock_on_idle]; break; default: @@ -521,7 +521,7 @@ void menuScreenSettings(void) LABEL_SCREEN_SETTINGS, // icon label { - {ICON_ROTATE_UI, LABEL_ROTATE_UI}, + {ICON_ROTATE_UI, LABEL_ROTATED_UI}, {ICON_TOUCHSCREEN_ADJUST, LABEL_TOUCHSCREEN_ADJUST}, {ICON_LANGUAGE, LABEL_LANGUAGE}, {ICON_FEATURE_SETTINGS, LABEL_UI_SETTINGS}, @@ -560,8 +560,8 @@ void menuScreenSettings(void) switch (curIndex) { case KEY_ICON_0: - infoSettings.rotate_ui = !infoSettings.rotate_ui; - LCD_RefreshDirection(infoSettings.rotate_ui); + infoSettings.rotated_ui = !infoSettings.rotated_ui; + LCD_RefreshDirection(infoSettings.rotated_ui); TSC_Calibration(); menuDrawPage(&screenSettingsItems); break; diff --git a/TFT/src/User/Menu/Terminal.c b/TFT/src/User/Menu/Terminal.c index 2ba1689400..f8c27df355 100644 --- a/TFT/src/User/Menu/Terminal.c +++ b/TFT/src/User/Menu/Terminal.c @@ -413,7 +413,7 @@ static inline void keyboardDrawButton(uint8_t index, uint8_t isPressed) #endif // KEYBOARD_MATERIAL_THEME } -static inline void drawGcodeText(char *gcode) +static inline void drawGcodeText(char * gcode) { drawStandardValue(&textBoxRect, VALUE_STRING, gcode, FONT_SIZE_NORMAL, TEXTBOX_FONT_COLOR, TEXTBOX_BG_COLOR, 1, true); } @@ -476,7 +476,7 @@ static inline void keyboardDrawMenu(void) static inline void menuKeyboardView(void) { KEY_VALUES key_num = KEY_IDLE; - char gcodeBuf[CMD_MAX_CHAR] = {0}; + CMD gcodeBuf = {0}; uint8_t nowIndex = 0; uint8_t lastIndex = 0; @@ -520,7 +520,7 @@ static inline void menuKeyboardView(void) break; case GKEY_SPACE: - if (nowIndex < CMD_MAX_CHAR - 1 && nowIndex > 0) + if (nowIndex < CMD_MAX_SIZE - 1 && nowIndex > 0) { gcodeBuf[nowIndex++] = ' '; gcodeBuf[nowIndex] = 0; @@ -528,7 +528,7 @@ static inline void menuKeyboardView(void) break; default: - if (nowIndex < CMD_MAX_CHAR - 1) + if (nowIndex < CMD_MAX_SIZE - 1) { gcodeBuf[nowIndex++] = (numpad) ? gcodeKey123[key_num][0] : gcodeKeyABC[key_num][0]; gcodeBuf[nowIndex] = 0; @@ -549,47 +549,50 @@ static inline void menuKeyboardView(void) GUI_RestoreColorDefault(); } -static inline void saveGcodeTerminalCache(const char *str) +static inline void saveGcodeTerminalCache(const char * str, uint16_t strLen) { uint16_t len = 0; - uint16_t sign_len = strlen(str); - if ((terminalData->terminalBufTail + sign_len) < terminalData->buffSize) + + if ((terminalData->terminalBufTail + strLen) < terminalData->buffSize) { - memcpy(terminalBuf + terminalData->terminalBufTail, str, sign_len); - terminalData->terminalBufTail += sign_len; + memcpy(terminalBuf + terminalData->terminalBufTail, str, strLen); + terminalData->terminalBufTail += strLen; } else { - len = (terminalData->terminalBufTail + sign_len) - terminalData->buffSize; - memcpy(terminalBuf + terminalData->terminalBufTail, str, (sign_len - len)); + len = (terminalData->terminalBufTail + strLen) - terminalData->buffSize; + memcpy(terminalBuf + terminalData->terminalBufTail, str, (strLen - len)); terminalData->terminalBufTail = 0; - memcpy(terminalBuf + terminalData->terminalBufTail, str + (sign_len - len), len); + memcpy(terminalBuf + terminalData->terminalBufTail, str + (strLen - len), len); terminalData->terminalBufTail += len; terminalData->bufferFull = 1; terminalData->pageHead++; } } -void terminalCache(char *stream, TERMINAL_SRC src) +void terminalCache(const char * stream, uint16_t streamLen, SERIAL_PORT_INDEX portIndex, TERMINAL_SRC src) { - if (infoMenu.menu[infoMenu.cur] != menuTerminal) return; + if (infoMenu.menu[infoMenu.cur] != menuTerminal) + return; - char * srcID[] = {"\5", "\6"}; + char * srcID[TERMINAL_COUNT] = {"\5", "\6"}; // copy string source identifier if (terminalData->lastSrc != src) { - saveGcodeTerminalCache(srcID[src]); + saveGcodeTerminalCache(srcID[src], 1); terminalData->lastSrc = src; } if (src == TERMINAL_GCODE) { - saveGcodeTerminalCache(serialPort[infoCmd.queue[infoCmd.index_r].port_index].id); // serial port ID (e.g. "2" for SERIAL_PORT_2) - saveGcodeTerminalCache(">>"); + if (serialPort[portIndex].id[0] != 0) // if not empty string + saveGcodeTerminalCache(serialPort[portIndex].id, 1); // serial port ID (e.g. "2" for SERIAL_PORT_2) + + saveGcodeTerminalCache(">>", 2); } - saveGcodeTerminalCache(stream); + saveGcodeTerminalCache(stream, streamLen); } // reverse lookup for source identifier diff --git a/TFT/src/User/Menu/Terminal.h b/TFT/src/User/Menu/Terminal.h index 2fb9cc22f4..d2695d226f 100644 --- a/TFT/src/User/Menu/Terminal.h +++ b/TFT/src/User/Menu/Terminal.h @@ -5,14 +5,18 @@ extern "C" { #endif +#include +#include "SerialConnection.h" + typedef enum { - TERMINAL_GCODE, + TERMINAL_GCODE = 0, TERMINAL_ACK, + TERMINAL_COUNT } TERMINAL_SRC; void menuTerminal(void); -void terminalCache(char *stream, TERMINAL_SRC src); +void terminalCache(const char * stream, uint16_t streamLen, SERIAL_PORT_INDEX portIndex, TERMINAL_SRC src); #ifdef __cplusplus } diff --git a/TFT/src/User/SanityCheck.h b/TFT/src/User/SanityCheck.h index d7dbf7bdc5..b7c2459ec3 100644 --- a/TFT/src/User/SanityCheck.h +++ b/TFT/src/User/SanityCheck.h @@ -10,6 +10,7 @@ extern "C" { #include "FlashStore.h" #include "SerialConnection.h" #include "Settings.h" +#include "ui_draw.h" // check size of settings against max allocated size at compile time #define SIZE_CHECK(object) ((void)sizeof(char[1 - 2*!!(object)])) @@ -22,22 +23,22 @@ extern "C" { //=============================== Settings Configurable On config.ini ================================ //==================================================================================================== -#if BAUDRATE < 0 || BAUDRATE >= BAUDRATE_COUNT - #error "invalid Baudrate index. Pleas select a value only from options provided in configuration.h" +#if PRIMARY_BAUDRATE < 0 || PRIMARY_BAUDRATE >= BAUDRATE_COUNT + #error "invalid PRIMARY_BAUDRATE index. Pleas select a value only from options provided in configuration.h" #endif #ifndef ST7920_EMULATOR #if defined(_PIN_TFT35_V2_0_H_) || defined(_PIN_TFT35_V1_0_H_) - #ifdef DEFAULT_LCD_MODE - #undef DEFAULT_LCD_MODE + #ifdef DEFAULT_MODE + #undef DEFAULT_MODE #endif - #define DEFAULT_LCD_MODE MODE_SERIAL_TSC // Just set hardcoded here. - //#warning "DEFAULT_LCD_MODE supports only SERIAL_TSC. Please update/check your configuration." + #define DEFAULT_MODE 1 // Just set hardcoded here. + //#warning "DEFAULT_MODE supports only Touch Mode. Please update/check your configuration." #endif #endif -#ifndef MARLIN_BANNER_TEXT - #define MARLIN_BANNER_TEXT "Marlin Mode" +#ifndef MARLIN_TITLE + #define MARLIN_TITLE "Marlin Mode" #endif #if HOTEND_NUM > MAX_HOTEND_COUNT @@ -52,30 +53,30 @@ extern "C" { #error "FAN_NUM can not be more than 6" #endif -#if FIL_SENSOR_TYPE > 3 || FIL_SENSOR_TYPE < 0 - #error "FIL_SENSOR_TYPE cannot be greater than 3 or less than 0" +#if FIL_RUNOUT < 0 || FIL_RUNOUT > 3 + #error "FIL_RUNOUT cannot be less than 0 or greater than 3" #endif #ifdef LED_COLOR_PIN - #ifdef STARTUP_KNOB_LED_COLOR - #if STARTUP_KNOB_LED_COLOR < 0 - #error "STARTUP_KNOB_LED_COLOR cannot be less than 1" + #ifdef KNOB_LED_COLOR + #if KNOB_LED_COLOR < 0 + #error "KNOB_LED_COLOR cannot be less than 1" #endif - #if STARTUP_KNOB_LED_COLOR > 8 - #error "STARTUP_KNOB_LED_COLOR cannot be greater than 9" + #if KNOB_LED_COLOR > 8 + #error "KNOB_LED_COLOR cannot be greater than 9" #endif #else - #define STARTUP_KNOB_LED_COLOR 0 + #define KNOB_LED_COLOR 0 #endif #else - #ifdef STARTUP_KNOB_LED_COLOR - #if STARTUP_KNOB_LED_COLOR > 0 - //#warning "STARTUP_KNOB_LED_COLOR is not supported on this target and must be set to 0" - #undef STARTUP_KNOB_LED_COLOR + #ifdef KNOB_LED_COLOR + #if KNOB_LED_COLOR > 0 + //#warning "KNOB_LED_COLOR is not supported on this target and must be set to 0" + #undef KNOB_LED_COLOR #endif #endif - #define STARTUP_KNOB_LED_COLOR 0 + #define KNOB_LED_COLOR 0 #endif #ifdef CUSTOM_LABEL_0 diff --git a/TFT/src/User/Variants/pin_MKS_TFT32_V1_4.h b/TFT/src/User/Variants/pin_MKS_TFT32_V1_4.h index b53f751442..e313067e75 100644 --- a/TFT/src/User/Variants/pin_MKS_TFT32_V1_4.h +++ b/TFT/src/User/Variants/pin_MKS_TFT32_V1_4.h @@ -119,7 +119,7 @@ // 3) To reduce the effect of EMI, it is strongly suggested to use single cables (possibly shielded) for all the SPI pins // (SPI3_SCK, SPI3_MOSI_PIN and SPI3_CS_PIN). For the encoder pins, a flat cable can be used. // 4) In case LCD Encoder's sliding buttons (pin LCD_ENCA_PIN and LCD_ENCB_PIN) don't produce any movement on menu, -// try to increase the delay LCD_ENCODER_DELAY in Configuration.h (e.g. 64). +// try to increase the delay LCD_ENC_DELAY in Configuration.h (e.g. 64). // // // ------------------------------------ diff --git a/TFT/src/User/config.ini b/TFT/src/User/config.ini index 561989329d..2f707ce989 100644 --- a/TFT/src/User/config.ini +++ b/TFT/src/User/config.ini @@ -97,23 +97,34 @@ serial_port:P1:6 P2:0 P3:0 P4:0 # The TFT intercepts the M600 gcode (filament change) and emulates the handling logic # otherwise provided by Marlin firmware. # -# NOTE: Enable it, in case Marlin firmware does not properly support M600 on the mainboard. +# NOTE: Enable it in case Marlin firmware does not properly support M600 on the mainboard. # # Options: [disable: 0, enable: 1] emulated_m600:1 +#### Emulated M109 And M190 +# The TFT intercepts the blocking M109 and M190 gcodes (set target hotend and bed temperatures) +# and converts them to the non blocking M104 and M140 gcodes respectively. +# +# NOTE: Enable it so the TFT can still communicate with Marlin firmware even if the target +# temperature is not reached yet. Otherwise the communication (TFT<->Marlin) will be +# frozen until desired/set temperatures are obtained. +# +# Options: [disable: 0, enable: 1] +emulated_m109_m190:1 + #-------------------------------------------------------------------- # UI Settings #-------------------------------------------------------------------- -#### Rotate UI +#### Rotated UI # Rotate UI by 180 degrees. # Options: [disable: 0, enable: 1] -rotate_ui:0 +rotated_ui:0 -#### Default Touch Mode Language -# Select the language to display on the LCD while in Touch Mode. +#### Touch Mode Language +# Select the language to use on the LCD while in Touch Mode. # # NOTE: To add/flash a second language copy the required "language_xx.ini" file from # "Language Packs" folder to the SD root folder. @@ -133,7 +144,7 @@ language:0 # Options: [disable: 0, enable: 1] status_screen:1 -#### Default Touch Mode Colors +#### Touch Mode Colors # Set colors used in Touch Mode. # # NOTE: Select an option from the provided list or set the color (RGB888 format) hex value directly @@ -285,7 +296,7 @@ default_mode:1 # Options: [disable: 0, enable: 1] serial_always_on:0 -#### Default Marlin Mode Background & Font Colors +#### Marlin Mode Background & Font Colors # Set colors used in Marlin Mode. # # NOTE: Select an option from the provided list or set the color (RGB888 format) hex value directly @@ -385,21 +396,21 @@ fan_max:F0:255 F1:255 F2:255 F3:255 F4:255 F5:255 CtL:255 CtI:255 size_min:X0 Y0 Z0 size_max:X235 Y235 Z250 -#### Default X & Y Move Speeds/Feedrates +#### X & Y Move Speeds/Feedrates # Move speeds used in Move menu to move X and Y axes. # Format: [move_speed: S N F] # Unit: [feedrate in mm/min] # Value range: [min: 10, max: 12000] xy_speed:S1000 N3000 F5000 -#### Default Z Speeds/Feedrates +#### Z Speeds/Feedrates # Move speeds used in Move menu to move Z axis. # Format: [move_speed: S N F] # Unit: [feedrate in mm/min] # Value range: [min: 10, max: 12000] z_speed:S500 N1000 F2000 -#### Default Extruder Speeds/Feedrates +#### Extruder Speeds/Feedrates # Speed settings used to extrude/retract. # Format: [ext_speed: S N F] # Unit: [feedrate in mm/min] @@ -593,7 +604,7 @@ preheat_temp_6:T250 B90 # Options: [disable: 0, enable: 1] ps_active_high:1 -#### Default Power Supply Auto Shutdown Mode +#### Power Supply Auto Shutdown Mode # Used in case it is supported by the TFT. # Enable power supply auto shutdown after a print is finished when hotend temperature drops below target value. # Options: [disable: 0, enable: 1, auto-detect: 2] @@ -618,7 +629,7 @@ ps_auto_shutdown_temp:50 # 2) Configure the sensor in the firmware of your mainboard. # 3) Add M75 to "start_gcode" and M77 to "end_gcode" of the TFT (or your slicer). -#### Default Filament Runout Sensor +#### Filament Runout Sensor # Select the type of filament runout sensor and its default enabled/disabled state. # # Options: [Normal Disabled: 0, Normal Enabled: 1, Smart Disabled: 2, Smart Enabled: 3] @@ -652,7 +663,7 @@ fil_runout_distance:7 # Power Loss Recovery & BTT UPS Settings #-------------------------------------------------------------------- -#### Default Power Loss Recovery Mode +#### Power Loss Recovery Mode # Enable power loss recovery. # Disable to reduce the loss of SD card or U disk. # Options: [disable: 0, enable: 1] @@ -698,40 +709,40 @@ toast_sound:1 alert_sound:1 heater_sound:1 -#### Default LCD Brightness Levels (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) -# Default brightness values for LCD. +#### LCD Brightness Levels (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) +# Brightness levels for LCD. # Options: [OFF: 0, 5%: 1, 10%: 2, 20%: 3, 30%: 4, 40%: 5, 50%: 6, 60%: 7, 70%: 8, 80%: 9, 90%: 10, 100%: 11] -## Default display brightness +## LCD brightness level lcd_brightness:11 -## Display brightness when device is idle +## LCD brightness level when device is idle lcd_idle_brightness:5 -#### Default LCD Idle Time (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) +#### LCD Idle Time (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) # The LCD screen will dim to idle brightness, if the display is not touched for the # period of the LCD idle time. # Options: [OFF: 0, 5sec: 1, 10sec: 2, 30sec: 3, 1min: 4, 2min: 5, 5min: 6, 10min: 7] lcd_idle_time:4 -#### Block Touch On Idle (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) -# If enabled, when the LCD is on idle (dimmed) then the first touch on the display will +#### LCD Lock On Idle (only for TFT28/TFT35/TFT43/TFT50/TFT70 V3.0) +# If enabled, when the LCD is idle (dimmed) then the first touch on the display will # simply restore the normal LCD brightness. The touch is then skipped, preventing to # trigger any undesired action due to the dimmed display. # -# NOTE: The block is always avoided if the LCD brightness is restored by the use of -# rotary encoder instead of pressing on the display. +# NOTE: The lock is always avoided if the LCD brightness is restored by the use of +# rotary encoder instead of touching the display. # # Options: [disable: 0, enable: 1] -block_touch_on_idle:0 +lcd_lock_on_idle:0 #### Knob LED Color (only for TFT28/TFT35_E3/TFT43/TFT50/TFT70 V3.0) # Knob LED color at startup. # Options: [OFF: 0, WHITE: 1, RED: 2, ORANGE: 3, YELLOW: 4, GREEN: 5, BLUE: 6, INDIGO: 7, VIOLET: 8] knob_led_color:0 -#### Knob Idle State (only for TFT28/TFT35_E3/TFT43/TFT50/TFT70 V3.0) -# If enabled, when the LCD is on idle (dimmed) then the knob LED will be also switched off. +#### Knob LED Idle State (only for TFT28/TFT35_E3/TFT43/TFT50/TFT70 V3.0) +# If enabled, when the LCD is idle (dimmed) then the knob LED will be also switched off. # Options: [disable: 0, enable: 1] knob_led_idle:1 @@ -800,15 +811,15 @@ custom_gcode_7:M502\n # - start_gcode: M75\n # - end_gcode: M77\n -#### Default Start Gcode Status +#### Start Gcode Status # Options: [disable: 0, enable: 1] start_gcode_enabled:0 -#### Default End Gcode Status +#### End Gcode Status # Options: [disable: 0, enable: 1] end_gcode_enabled:0 -#### Default Cancel Gcode Status +#### Cancel Gcode Status # Options: [disable: 0, enable: 1] cancel_gcode_enabled:0