]
+preheat_name1:PLA
+preheat_temp1:T200 B60
+
+preheat_name2:PETG
+preheat_temp2:T200 B60
+
+preheat_name3:ABS
+preheat_temp3:T230 B90
+
+#--------------------------------------------------------------------
+# Power Supply Settings (if connected to TFT Controller)
+#--------------------------------------------------------------------
+
+#### Default Power Supply Mode
+# Options: [OFF: 0, ON: 1: Auto:2]
+ps_on:0
+
+#### Power Supply Active HIGH Settings
+# Options:[HIGH: 1, LOW: 0]
+ps_on_active_high:1
+
+#### Maximum hot-end temperature of automatic shut down after printing (only if auto power is enabled)
+# wait for the hot-end temperature to be lower than this value, then turn off the power automatically
+auto_shutdown_temp:50
+
+#--------------------------------------------------------------------
+# Filament Runout Settings (if connected to TFT Controller)
+#--------------------------------------------------------------------
+
+#### Default FIlament Sensor
+# Options:[NONE: 0, Normal: 1, SMART: 2]
+fil_runout:0
+
+#### Filament runout inverting - invert the logic of the sensor.
+# Options: [true: 1, false: 0]
+fil_runout_inverting:1
+
+#### filament noise threshold - Pause print when filament runout is detected for this time period in (ms).
+# time duration in ms
+fil_noise_threshold:100
+
+#### Smart filament runout detection
+# For use with an encoder disc that toggles runout pin as filament moves
+fil_runout_distance:7
+
+#--------------------------------------------------------------------
+# Power Loss Recovery & BTT UPS Settings (if connected to TFT Controller)
+#--------------------------------------------------------------------
+#### Home before Power Loss recovery
+# Options: [enable: 1, disable: 0]
+pl_recovery_home:0
+
+#### Power Loss Z raise (mm)
+# Raise Z axis on resume (on power loss with UPS)
+pl_z_raise:0
+
+#### Enable BTT UPS
+# Options: [enable: 1, disable: 0]
+btt_mini_ups:0
+
+
+#--------------------------------------------------------------------
+# Other device-specific settings
+#--------------------------------------------------------------------
+
+#### Buzzer / sound
+# Options: [enable: 1, disable: 0]
+buzzer:1
+
+#### Knob Led Color (only for TFT35 E3.0)
+#Options: [ 0: LED_OFF, 1: LED_WHITE, 2: LED_RED, 3: LED_ORANGE, 4: LED_YELLOW, 5: LED_GREEN, 6: LED_BLUE, 7: LED_INDIGO, 8: LED_VIOLET]
+knob_led_color:0
+
+#### Default LCD Brightness levels (only for TFT35v3.0 & TFT28v3.0)
+# Options: [(low) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 (full)]
+lcd_brightness:10
+lcd_idle_brightness:5
+
+####Default LCD idle time (only for TFT35v3.0 & TFT28v3.0)
+# Options [0: Off, 1: 5Sec, 2: 10Sec , 3: 30sec, 4: 1min, 5: 2min, 6: 5min, 7: 10min]
+lcd_idle_delay:4
+
+
+#--------------------------------------------------------------------
+# Custom G-Code Commands (up to 15 custom G-code)
+#--------------------------------------------------------------------
+
+#### To enable a custom Command:
+# Remove '#' at the begining custom commands label & gcode.
+
+#### To disable a custom Command:
+# Add '#' at the begining custom commands label & gcode.
+
+# if the values are left blank then default name and G-code will be used
+
+# Options: [Label maximum length: 24 characters, G-code Maximum length 70 characters]
+
+custom_label_1:Disable steppers
+custom_gcode_1:M84\n
+custom_label_2:Init sd card
+custom_gcode_2:G28\nG29\nG0\n
+custom_label_3:Release sd card
+custom_gcode_3:M22\n
+custom_label_4:restore leveling
+custom_gcode_4:M420 S1\n
+custom_label_5:Save to EEPROM
+custom_gcode_5:M500\n
+custom_label_6:restore from EEPROM
+custom_gcode_6:M501\n
+custom_label_7:EEPROM defaults
+custom_gcode_7:M502\n
+#custom_label_8:custom8
+#custom_gcode_8:M105\n
+#custom_label_9:custom9
+#custom_gcode_9:M105\n
+#custom_label_10:custom10
+#custom_gcode_10:M105\n
+#custom_label_11:custom11
+#custom_gcode_11:M105\n
+#custom_label_12:custom12
+#custom_gcode_12:M105\n
+#custom_label_13:custom13
+#custom_gcode_13:M105\n
+#custom_label_14:custom14
+#custom_gcode_14:M105\n
+#custom_label_15:custom15
+#custom_gcode_15:M105\n
+
+#--------------------------------------------------------------------
+# Start, End & Cancel G-codes
+#--------------------------------------------------------------------
+
+#### Default Start Gcode Status
+# Options: [enable: 1, disable: 0]
+start_gcode_enabled:0
+
+#### Default End Gcode Status
+# Options: [enable: 1, disable: 0]
+end_gcode_enabled:0
+
+#### Start G-code - run this G-code before starting print
+# maximum length 50 characters
+start_gcode:G28 XY R20\n
+
+#### End G-code - run this G-code after finishing print
+# maximum length 50 characters
+end_gcode:G90\nG1 E-4\nG92 E0\nM18\n
+
+#### Cancel G-code - run this G-code after canceling print
+# maximum length 50 characters
+cancel_gcode:G28 XY R10\n
diff --git a/README.md b/README.md
index 03d6629817..d99a4bdd77 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,7 @@ Firmware for BigTreeTech's dual-mode touchscreen 3D printer controllers
## Table of Contents
- [Menus and Themes](#menus-and-themes)
- [Update TFT Firmware](#update-tft-firmware)
+- [Configuration](#configuration)
- [Customization](#customization)
- [Bootscreen and Icons](#bootscreen-and-icons)
- [Firmware](#firmware)
@@ -46,6 +47,21 @@ Place SD card with `BIGTREE_TFT*_V*.*.*.bin` & `TFT*` folder into the TFT's
⚠️ Failing to update your icons & fonts will result in missing icons and/or unreadable text ⚠️
+## Configuration
+The Firmware can be configured using the **config.ini** file from from one of these folders:
+[`Copy to SD Card root directory to update`](https://github.com/bigtreetech/BIGTREETECH-TouchScreenFirmware/tree/master/Copy%20to%20SD%20Card%20root%20directory%20to%20update) or
+[`Copy to SD Card root directory to update - Unified Menu Material theme`](https://github.com/bigtreetech/BIGTREETECH-TouchScreenFirmware/tree/master/Copy%20to%20SD%20Card%20root%20directory%20to%20update%20-%20Unified%20Menu%20Material%20theme)
+
+### Editing configuration (config.ini) file
+To edit the **config.ini** file follow the instruction here: [Detailed Instructions here](config_instructions.md)
+
+### Updating Firmware Configuration
+To update the Firmware configuration:
+1. Edit the settings in **config.ini**.
+2. Copy the **config.ini** file to the root of the SD card. (The SD card capacity should be less than or equal to 8GB and formatted as FAT32)
+3. Insert the SD card in the TFT's SD card slot and restart the TFT by pressing the reset buttion or disconnecting and connecting the power cable.
+4. The TFT will update and store the configuraiton form **config.ini** file.
+
## Customization
### Bootscreen and Icons
diff --git a/TFT/src/User/API/Colors.c b/TFT/src/User/API/Colors.c
new file mode 100644
index 0000000000..43a6ae0e76
--- /dev/null
+++ b/TFT/src/User/API/Colors.c
@@ -0,0 +1,40 @@
+#include "Colors.h"
+
+const u32 lcd_colors[LCD_COLOR_COUNT] = {
+ WHITE,
+ BLACK,
+ RED,
+ GREEN,
+ BLUE,
+ CYAN,
+ MAGENTA,
+ YELLOW,
+ ORANGE,
+ PURPLE,
+ LIME,
+ BROWN,
+ DARKBLUE,
+ DARKGREEN,
+ GRAY,
+ DARKGRAY,
+ };
+
+const LABEL lcd_color_names[LCD_COLOR_COUNT] =
+{
+ LABEL_WHITE,
+ LABEL_BLACK,
+ LABEL_RED,
+ LABEL_GREEN,
+ LABEL_BLUE,
+ LABEL_CYAN,
+ LABEL_MAGENTA,
+ LABEL_YELLOW,
+ LABEL_ORANGE,
+ LABEL_PURPLE,
+ LABEL_LIME,
+ LABEL_BROWN,
+ LABEL_DARKBLUE,
+ LABEL_DARKGREEN,
+ LABEL_GRAY,
+ LABEL_DARKGRAY
+ };
\ No newline at end of file
diff --git a/TFT/src/User/API/Colors.h b/TFT/src/User/API/Colors.h
new file mode 100644
index 0000000000..2796044c34
--- /dev/null
+++ b/TFT/src/User/API/Colors.h
@@ -0,0 +1,51 @@
+
+#ifndef _COLORS_H_
+#define _COLORS_H_
+
+#include "includes.h"
+#include "menu.h"
+
+// Color Definition
+
+#define WHITE 0xFFFF
+#define BLACK 0x0000
+#define RED 0xF800
+#define GREEN 0x0760
+#define BLUE 0x00DF
+#define CYAN 0x07FF
+#define MAGENTA 0xF81F
+#define YELLOW 0xFFE0
+#define ORANGE 0xFB23
+#define PURPLE 0x7817
+#define LIME 0xBFE0
+#define BROWN 0X9240
+#define DARKBLUE 0X0030
+#define DARKGREEN 0x0340
+#define GRAY 0X8430
+#define DARKGRAY 0x2124
+
+
+typedef enum
+{
+LCD_WHITE = 0,
+LCD_BLACK,
+LCD_RED,
+LCD_GREEN,
+LCD_BLUE,
+LCD_CYAN,
+LCD_MAGENTA,
+LCD_YELLOW,
+LCD_ORANGE,
+LCD_PURPLE,
+LCD_LIME,
+LCD_BROWN,
+LCD_DARKBLUE,
+LCD_DARKGREEN,
+LCD_GRAY,
+LCD_DARKGRAY,
+LCD_COLOR_COUNT
+}LCD_COLOR;
+
+extern const u32 lcd_colors[LCD_COLOR_COUNT];
+extern const LABEL lcd_color_names[LCD_COLOR_COUNT];
+#endif
diff --git a/TFT/src/User/API/Language/Language.h b/TFT/src/User/API/Language/Language.h
index acf08d28e4..e27fb9e1ba 100644
--- a/TFT/src/User/API/Language/Language.h
+++ b/TFT/src/User/API/Language/Language.h
@@ -35,7 +35,8 @@ enum {
//keep the following always at the end of this list
LABEL_NUM,
LABEL_BACKGROUND,
- LABEL_DYNAMIC
+ LABEL_DYNAMIC,
+ LABEL_CUSTOM_VALUE,
};
u8 * textSelect(u8 sel);
diff --git a/TFT/src/User/API/Language/Language.inc b/TFT/src/User/API/Language/Language.inc
index 15793af545..3339d072b3 100644
--- a/TFT/src/User/API/Language/Language.inc
+++ b/TFT/src/User/API/Language/Language.inc
@@ -6,7 +6,6 @@
*
* Description: https://en.wikipedia.org/wiki/X_Macro
*/
-
X_WORD (LANGUAGE)
X_WORD (HEAT)
X_WORD (MOVE)
@@ -24,6 +23,7 @@ X_WORD (SHUT_DOWN)
X_WORD (RGB_SETTINGS)
X_WORD (RGB_OFF)
X_WORD (GCODE)
+X_WORD (TERMINAL)
X_WORD (CUSTOM)
X_WORD (LEVELING)
X_WORD (POINT_1)
@@ -72,6 +72,12 @@ X_WORD (GRAY)
X_WORD (ORANGE)
X_WORD (INDIGO)
X_WORD (VIOLET)
+X_WORD (MAGENTA)
+X_WORD (PURPLE)
+X_WORD (LIME)
+X_WORD (DARKBLUE)
+X_WORD (DARKGREEN)
+X_WORD (DARKGRAY)
X_WORD (DISCONNECT)
X_WORD (PERCENTAGE)
X_WORD (BABYSTEP)
@@ -98,15 +104,7 @@ X_WORD (10_MM)
X_WORD (1_PERCENT)
X_WORD (5_PERCENT)
X_WORD (10_PERCENT)
-X_WORD (20_PERCENT)
-X_WORD (30_PERCENT)
-X_WORD (40_PERCENT)
-X_WORD (50_PERCENT)
-X_WORD (60_PERCENT)
-X_WORD (70_PERCENT)
-X_WORD (80_PERCENT)
-X_WORD (90_PERCENT)
-X_WORD (100_PERCENT)
+X_WORD (PERCENT_VALUE)
X_WORD (READY)
X_WORD (BUSY)
X_WORD (UNCONNECTED)
@@ -114,7 +112,7 @@ X_WORD (DISCONNECT_INFO)
X_WORD (LOADING)
X_WORD (POWER_FAILED)
X_WORD (CONTINUE)
-X_WORD (CANNEL)
+X_WORD (CANCEL)
X_WORD (ADJUST_TITLE)
X_WORD (ADJUST_INFO)
X_WORD (ADJUST_OK)
@@ -136,9 +134,6 @@ X_WORD (FILAMENT_SENSOR)
X_WORD (FILAMENT_RUNOUT)
X_WORD (PREHEAT)
X_WORD (PREHEAT_BOTH)
-X_WORD (PREHEAT_PLA)
-X_WORD (PREHEAT_PETG)
-X_WORD (PREHEAT_ABS)
X_WORD (IS_PAUSE)
X_WORD (AUTO_SHUT_DOWN)
X_WORD (UNIFIEDMOVE)
diff --git a/TFT/src/User/API/Language/language_am.h b/TFT/src/User/API/Language/language_am.h
index de5b333c6f..2c0fddf876 100644
--- a/TFT/src/User/API/Language/language_am.h
+++ b/TFT/src/User/API/Language/language_am.h
@@ -18,6 +18,7 @@
#define AM_RGB_SETTINGS "LED Color"
#define AM_RGB_OFF "LED Off"
#define AM_GCODE "Gcode"
+ #define AM_TERMINAL "Terminal"
#define AM_CUSTOM "Custom"
#define AM_LEVELING "Leveling"
#define AM_POINT_1 "Point 1"
@@ -66,6 +67,12 @@
#define AM_ORANGE "Orange"
#define AM_INDIGO "Indigo"
#define AM_VIOLET "Violet"
+ #define AM_MAGENTA "Magenta"
+ #define AM_PURPLE "Purple"
+ #define AM_LIME "Lime"
+ #define AM_DARKBLUE "DarkBlue"
+ #define AM_DARKGREEN "DarkGreen"
+ #define AM_DARKGRAY "DarkGray"
#define AM_DISCONNECT "Անջատել"
#define AM_PERCENTAGE "Percentage"
#define AM_BABYSTEP "Դանդաղ"
@@ -92,15 +99,7 @@
#define AM_1_PERCENT "1%"
#define AM_5_PERCENT "5%"
#define AM_10_PERCENT "10%"
- #define AM_20_PERCENT "20%"
- #define AM_30_PERCENT "30%"
- #define AM_40_PERCENT "40%"
- #define AM_50_PERCENT "50%"
- #define AM_60_PERCENT "60%"
- #define AM_70_PERCENT "70%"
- #define AM_80_PERCENT "80%"
- #define AM_90_PERCENT "90%"
- #define AM_100_PERCENT "100%"
+ #define AM_PERCENT_VALUE "%d%"
#define AM_READY "Պատրաստ"
#define AM_BUSY "Ծանրաբեռնված է"
#define AM_UNCONNECTED "Տպիչը կցված չէ"
@@ -108,7 +107,7 @@
#define AM_LOADING "Բեռնում է..."
#define AM_POWER_FAILED "Տպելը չի ավարտվել, շարունակե՞լ"
#define AM_CONTINUE "Շարունակել"
- #define AM_CANNEL "Չեղարկել"
+ #define AM_CANCEL "Չեղարկել"
#define AM_ADJUST_TITLE "Էկրանի կարգավորում"
#define AM_ADJUST_INFO "Please click on the red dot"
#define AM_ADJUST_OK "Adjustment Success"
@@ -130,9 +129,6 @@
#define AM_FILAMENT_RUNOUT "Filament runout!"
#define AM_PREHEAT "Preheat"
#define AM_PREHEAT_BOTH "Both"
- #define AM_PREHEAT_PLA "PLA"
- #define AM_PREHEAT_PETG "PETG"
- #define AM_PREHEAT_ABS "ABS"
#define AM_IS_PAUSE "Unable to extrude when printing, Pause printing?"
#define AM_AUTO_SHUT_DOWN "Auto Power"
#define AM_UNIFIEDMOVE "Movement"
@@ -141,23 +137,23 @@
#define AM_EMERGENCYSTOP "EM. STOP"
#define AM_TOUCH_TO_EXIT "Touch anywhere to exit"
#define AM_MAINMENU "Menu"
- #define AM_WAIT_TEMP_SHUT_DOWN "Wait for the temperature of hotend to be lower than " STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "℃" // Wait for the temperature of hotend to be lower than 50℃
+ #define AM_WAIT_TEMP_SHUT_DOWN "Wait for the temperature of hotend to be lower than %d℃" // Wait for the temperature of hotend to be lower than 50℃
#define AM_FORCE_SHUT_DOWN "Force"
#define AM_SHUTTING_DOWN "Shutting down..."
#define AM_PARAMETER_SETTING "Պարամետր"
- #define AM_ON "ON"
- #define AM_OFF "OFF"
- #define AM_SMART "SMART"
- #define AM_TERMINAL_ACK "Hide Terminal ACK"
- #define AM_INVERT_XAXIS "Invert X Axis"
- #define AM_INVERT_YAXIS "Invert Y Axis"
- #define AM_INVERT_ZAXIS "Invert Z Axis"
- #define AM_MOVE_SPEED "Move speed(X Y Z)"
- #define AM_KNOB_LED "Rotary Knob LED"
- #define AM_M0_PAUSE "Paused by M0 command"
- #define AM_SEND_START_GCODE "Start Gcode before print"
- #define AM_SEND_END_GCODE "End Gcode after print"
- #define AM_SEND_CANCEL_GCODE "Cancel Gcode"
+ #define AM_ON "ON"
+ #define AM_OFF "OFF"
+ #define AM_SMART "SMART"
+ #define AM_TERMINAL_ACK "Show ACK in Terminal"
+ #define AM_INVERT_XAXIS "Invert X Axis"
+ #define AM_INVERT_YAXIS "Invert Y Axis"
+ #define AM_INVERT_ZAXIS "Invert Z Axis"
+ #define AM_MOVE_SPEED "Move speed(X Y Z)"
+ #define AM_KNOB_LED "Rotary Knob LED"
+ #define AM_M0_PAUSE "Paused by M0 command"
+ #define AM_SEND_START_GCODE "Start Gcode before print"
+ #define AM_SEND_END_GCODE "End Gcode after print"
+ #define AM_SEND_CANCEL_GCODE "Cancel Gcode"
#define AM_PERSISTENT_STATUS_INFO "Persistent Status Info"
#define AM_FILE_LISTMODE "Files viewer List Mode"
#define AM_CURRENT_SETTING "Driver Current (mA)"
diff --git a/TFT/src/User/API/Language/language_cn.h b/TFT/src/User/API/Language/language_cn.h
index 3f2d8c9909..83e0eef70e 100644
--- a/TFT/src/User/API/Language/language_cn.h
+++ b/TFT/src/User/API/Language/language_cn.h
@@ -18,6 +18,7 @@
#define CN_RGB_SETTINGS "灯光颜色"
#define CN_RGB_OFF "熄灭灯光"
#define CN_GCODE "Gcode"
+ #define CN_TERMINAL "Terminal"
#define CN_CUSTOM "自定义"
#define CN_LEVELING "调平"
#define CN_POINT_1 "第一点"
@@ -66,6 +67,12 @@
#define CN_ORANGE "橙色"
#define CN_INDIGO "靛"
#define CN_VIOLET "紫色"
+ #define CN_MAGENTA "Magenta"
+ #define CN_PURPLE "Purple"
+ #define CN_LIME "Lime"
+ #define CN_DARKBLUE "DarkBlue"
+ #define CN_DARKGREEN "DarkGreen"
+ #define CN_DARKGRAY "DarkGray"
#define CN_DISCONNECT "断开连接"
#define CN_PERCENTAGE "百分比"
#define CN_BABYSTEP "Z-微调"
@@ -92,15 +99,7 @@
#define CN_1_PERCENT "1%"
#define CN_5_PERCENT "5%"
#define CN_10_PERCENT "10%"
- #define CN_20_PERCENT "20%"
- #define CN_30_PERCENT "30%"
- #define CN_40_PERCENT "40%"
- #define CN_50_PERCENT "50%"
- #define CN_60_PERCENT "60%"
- #define CN_70_PERCENT "70%"
- #define CN_80_PERCENT "80%"
- #define CN_90_PERCENT "90%"
- #define CN_100_PERCENT "100%"
+ #define CN_PERCENT_VALUE "%d%"
#define CN_READY "准备打印"
#define CN_BUSY "系统繁忙,请稍候..."
#define CN_UNCONNECTED "未连接到打印机!"
@@ -108,7 +107,7 @@
#define CN_LOADING "加载中..."
#define CN_POWER_FAILED "是否继续打印?"
#define CN_CONTINUE "继续"
- #define CN_CANNEL "取消"
+ #define CN_CANCEL "取消"
#define CN_ADJUST_TITLE "触屏校准"
#define CN_ADJUST_INFO "请点击红点中心位置"
#define CN_ADJUST_OK "校准成功"
@@ -130,9 +129,6 @@
#define CN_FILAMENT_RUNOUT "耗材已用尽,请更换耗材!"
#define CN_PREHEAT "一键预热"
#define CN_PREHEAT_BOTH "Both"
- #define CN_PREHEAT_PLA "PLA"
- #define CN_PREHEAT_PETG "PETG"
- #define CN_PREHEAT_ABS "ABS"
#define CN_IS_PAUSE "打印中无法挤出耗材, 是否暂停打印?"
#define CN_AUTO_SHUT_DOWN "自动关机"
#define CN_UNIFIEDMOVE "运动"
@@ -141,14 +137,14 @@
#define CN_EMERGENCYSTOP "紧急停止"
#define CN_TOUCH_TO_EXIT "触摸任意点退出当前界面"
#define CN_MAINMENU "菜单"
- #define CN_WAIT_TEMP_SHUT_DOWN "喷头温度正在降温,等待低于" STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "℃后自动关机" // 喷头温度正在降温,等待低于50℃后自动关机
+ #define CN_WAIT_TEMP_SHUT_DOWN "喷头温度正在降温,等待低于%d℃后自动关机" // 喷头温度正在降温,等待低于50℃后自动关机
#define CN_FORCE_SHUT_DOWN "强制关机"
#define CN_SHUTTING_DOWN "正在关机..."
#define CN_PARAMETER_SETTING "参数设置"
#define CN_ON "开启"
#define CN_OFF "关闭"
#define CN_SMART "智能"
- #define CN_TERMINAL_ACK "Gcode终端隐藏温度信息"
+ #define CN_TERMINAL_ACK "在GCODE终端中显示温度信息"
#define CN_INVERT_XAXIS "翻转X轴"
#define CN_INVERT_YAXIS "翻转Y轴"
#define CN_INVERT_ZAXIS "翻转Z轴"
diff --git a/TFT/src/User/API/Language/language_cz.h b/TFT/src/User/API/Language/language_cz.h
index acea379549..4a5692f077 100644
--- a/TFT/src/User/API/Language/language_cz.h
+++ b/TFT/src/User/API/Language/language_cz.h
@@ -18,6 +18,7 @@
#define CZ_RGB_SETTINGS "Barva LED"
#define CZ_RGB_OFF "LED vyp."
#define CZ_GCODE "Gcode"
+ #define CZ_TERMINAL "Terminal"
#define CZ_CUSTOM "Vlastní"
#define CZ_LEVELING "Srovnat"
#define CZ_POINT_1 "Bod 1"
@@ -66,6 +67,12 @@
#define CZ_ORANGE "Oranžová"
#define CZ_INDIGO "Indigo"
#define CZ_VIOLET "Fialová"
+ #define CZ_MAGENTA "Magenta"
+ #define CZ_PURPLE "Purple"
+ #define CZ_LIME "Lime"
+ #define CZ_DARKBLUE "DarkBlue"
+ #define CZ_DARKGREEN "DarkGreen"
+ #define CZ_DARKGRAY "DarkGray"
#define CZ_DISCONNECT "Odpojit"
#define CZ_PERCENTAGE "Procenta"
#define CZ_BABYSTEP "BabyStep"
@@ -92,15 +99,7 @@
#define CZ_1_PERCENT "1%"
#define CZ_5_PERCENT "5%"
#define CZ_10_PERCENT "10%"
- #define CZ_20_PERCENT "20%"
- #define CZ_30_PERCENT "30%"
- #define CZ_40_PERCENT "40%"
- #define CZ_50_PERCENT "50%"
- #define CZ_60_PERCENT "60%"
- #define CZ_70_PERCENT "70%"
- #define CZ_80_PERCENT "80%"
- #define CZ_90_PERCENT "90%"
- #define CZ_100_PERCENT "100%"
+ #define CZ_PERCENT_VALUE "%d%"
#define CZ_READY "Ready"
#define CZ_BUSY "Zpracovávám, čekejte prosím..."
#define CZ_UNCONNECTED "Tiskárna není připojena!"
@@ -108,7 +107,7 @@
#define CZ_LOADING "Nahrávám..."
#define CZ_POWER_FAILED "Obnovit tisk?"
#define CZ_CONTINUE "Pokračovat"
- #define CZ_CANNEL "Zrušit"
+ #define CZ_CANCEL "Zrušit"
#define CZ_ADJUST_TITLE "Kalibrace dotykové obrazovky"
#define CZ_ADJUST_INFO "Dotkněte se postupně všech bodů"
#define CZ_ADJUST_OK "Kalibrace úspěšná"
@@ -130,9 +129,6 @@
#define CZ_FILAMENT_RUNOUT "Došel filament!"
#define CZ_PREHEAT "Zahřát"
#define CZ_PREHEAT_BOTH "Vše"
- #define CZ_PREHEAT_PLA "PLA"
- #define CZ_PREHEAT_PETG "PETG"
- #define CZ_PREHEAT_ABS "ABS"
#define CZ_IS_PAUSE "Během tisku nelze extrudovat, mám pozastavit tisk?"
#define CZ_AUTO_SHUT_DOWN "Automat"
#define CZ_UNIFIEDMOVE "Pohyb"
@@ -141,14 +137,14 @@
#define CZ_EMERGENCYSTOP "!!STOP!!"
#define CZ_TOUCH_TO_EXIT "Pro návrat se dotkněte obrazovky..."
#define CZ_MAINMENU "Menu"
- #define CZ_WAIT_TEMP_SHUT_DOWN "Čekám na zchladnutí extruderu pod " STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "℃" // Wait for the temperature of hotend to be lower than 50℃
+ #define CZ_WAIT_TEMP_SHUT_DOWN "Čekám na zchladnutí extruderu pod %d℃" // Wait for the temperature of hotend to be lower than 50℃
#define CZ_FORCE_SHUT_DOWN "Vynutit"
#define CZ_SHUTTING_DOWN "Vypínám se..."
#define CZ_PARAMETER_SETTING "Parametr"
#define CZ_ON "ON"
#define CZ_OFF "OFF"
#define CZ_SMART "SMART"
- #define CZ_TERMINAL_ACK "Skrýt Terminal ACK"
+ #define CZ_TERMINAL_ACK "zobrazit ACK v Terminal"
#define CZ_INVERT_XAXIS "Otočit osu X"
#define CZ_INVERT_YAXIS "Otočit osu Y"
#define CZ_INVERT_ZAXIS "Otočit osu Z"
diff --git a/TFT/src/User/API/Language/language_de.h b/TFT/src/User/API/Language/language_de.h
index d2049c6511..491dc2f73f 100644
--- a/TFT/src/User/API/Language/language_de.h
+++ b/TFT/src/User/API/Language/language_de.h
@@ -18,6 +18,7 @@
#define DE_RGB_SETTINGS "LED Farbe"
#define DE_RGB_OFF "LED Aus"
#define DE_GCODE "Gcode"
+ #define DE_TERMINAL "Terminal"
#define DE_CUSTOM "Extras"
#define DE_LEVELING "Leveling"
#define DE_POINT_1 "Punkt 1"
@@ -66,6 +67,12 @@
#define DE_ORANGE "Orange"
#define DE_INDIGO "Indigo"
#define DE_VIOLET "Violet"
+ #define DE_MAGENTA "Magenta"
+ #define DE_PURPLE "Purple"
+ #define DE_LIME "Lime"
+ #define DE_DARKBLUE "DarkBlue"
+ #define DE_DARKGREEN "DarkGreen"
+ #define DE_DARKGRAY "DarkGray"
#define DE_DISCONNECT "Trennen"
#define DE_PERCENTAGE "Prozent"
#define DE_BABYSTEP "BabyStep"
@@ -92,15 +99,7 @@
#define DE_1_PERCENT "1%"
#define DE_5_PERCENT "5%"
#define DE_10_PERCENT "10%"
- #define DE_20_PERCENT "20%"
- #define DE_30_PERCENT "30%"
- #define DE_40_PERCENT "40%"
- #define DE_50_PERCENT "50%"
- #define DE_60_PERCENT "60%"
- #define DE_70_PERCENT "70%"
- #define DE_80_PERCENT "80%"
- #define DE_90_PERCENT "90%"
- #define DE_100_PERCENT "100%"
+ #define DE_PERCENT_VALUE "%d%"
#define DE_READY "Bereit"
#define DE_BUSY "Bitte warten..."
#define DE_UNCONNECTED "Keine Verbindung zum Drucker!"
@@ -108,7 +107,7 @@
#define DE_LOADING "Laden..."
#define DE_POWER_FAILED "\u0887 Druck fortsetzen?" //Question Sign
#define DE_CONTINUE "Fortsetzen"
- #define DE_CANNEL "\u088F Abbruch" //Cancel Sign
+ #define DE_CANCEL "\u088F Abbruch" //Cancel Sign
#define DE_ADJUST_TITLE "Touchscreen kalibrieren"
#define DE_ADJUST_INFO "Auf den roten Punkt drücken"
#define DE_ADJUST_OK "Anpassung erfolgreich"
@@ -130,9 +129,6 @@
#define DE_FILAMENT_RUNOUT "Filament runout!"
#define DE_PREHEAT "Vorheizen"
#define DE_PREHEAT_BOTH "Beide"
- #define DE_PREHEAT_PLA "PLA"
- #define DE_PREHEAT_PETG "PETG"
- #define DE_PREHEAT_ABS "ABS"
#define DE_IS_PAUSE "Extrudierung während Druckvorgangs nicht möglich, Druck Pausieren?"
#define DE_AUTO_SHUT_DOWN "Automatisch AUS (PS_ON)"
#define DE_UNIFIEDMOVE "Bewegung"
@@ -141,14 +137,14 @@
#define DE_EMERGENCYSTOP "NOT STOP!"
#define DE_TOUCH_TO_EXIT "Zum verlassen, Bildschirm berühren."
#define DE_MAINMENU "Menü"
- #define DE_WAIT_TEMP_SHUT_DOWN "Warte bis Hotend-Temperatur unter " STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "℃ fällt." // Wait for the temperature of hotend to be lower than 50℃
+ #define DE_WAIT_TEMP_SHUT_DOWN "Warte bis Hotend-Temperatur unter %d℃ fällt." // Wait for the temperature of hotend to be lower than 50℃
#define DE_FORCE_SHUT_DOWN "Erzwinge"
#define DE_SHUTTING_DOWN "Fahre herunter..."
#define DE_PARAMETER_SETTING "Parameter"
#define DE_ON "AN"
#define DE_OFF "AUS"
#define DE_SMART "SMART"
- #define DE_TERMINAL_ACK "Blende Terminal ACK aus"
+ #define DE_TERMINAL_ACK "Show ACK in Terminal"
#define DE_INVERT_XAXIS "Invertiere X-Achse"
#define DE_INVERT_YAXIS "Invertiere Y-Achse"
#define DE_INVERT_ZAXIS "Invertiere Z-Achse"
diff --git a/TFT/src/User/API/Language/language_du.h b/TFT/src/User/API/Language/language_du.h
index a898e52591..6585c3dc20 100644
--- a/TFT/src/User/API/Language/language_du.h
+++ b/TFT/src/User/API/Language/language_du.h
@@ -18,6 +18,7 @@
#define DU_RGB_SETTINGS "LED Kleur"
#define DU_RGB_OFF "LED Uit"
#define DU_GCODE "Gcode"
+ #define DU_TERMINAL "Terminal"
#define DU_CUSTOM "Aangepast"
#define DU_LEVELING "Nivelleren"
#define DU_POINT_1 "Punt 1"
@@ -66,6 +67,12 @@
#define DU_ORANGE "Oranje"
#define DU_INDIGO "Indigo"
#define DU_VIOLET "Violet"
+ #define DU_MAGENTA "Magenta"
+ #define DU_PURPLE "Purple"
+ #define DU_LIME "Lime"
+ #define DU_DARKBLUE "DarkBlue"
+ #define DU_DARKGREEN "DarkGreen"
+ #define DU_DARKGRAY "DarkGray"
#define DU_DISCONNECT "Loskoppelen"
#define DU_PERCENTAGE "Percentage"
#define DU_BABYSTEP "BabyStap"
@@ -92,15 +99,7 @@
#define DU_1_PERCENT "1%"
#define DU_5_PERCENT "5%"
#define DU_10_PERCENT "10%"
- #define DU_20_PERCENT "20%"
- #define DU_30_PERCENT "30%"
- #define DU_40_PERCENT "40%"
- #define DU_50_PERCENT "50%"
- #define DU_60_PERCENT "60%"
- #define DU_70_PERCENT "70%"
- #define DU_80_PERCENT "80%"
- #define DU_90_PERCENT "90%"
- #define DU_100_PERCENT "100%"
+ #define DU_PERCENT_VALUE "%d%"
#define DU_READY "Gereed"
#define DU_BUSY "In verwerking ,wacht aub..."
#define DU_UNCONNECTED "Geen printer gekoppeld!"
@@ -108,7 +107,7 @@
#define DU_LOADING "Opladen..."
#define DU_POWER_FAILED "Verder met printen?"
#define DU_CONTINUE "Verder"
- #define DU_CANNEL "Afbreken"
+ #define DU_CANCEL "Afbreken"
#define DU_ADJUST_TITLE "Touch Screen Calibratie"
#define DU_ADJUST_INFO "Klik op de rode punt"
#define DU_ADJUST_OK "Calibratie Gelukt"
@@ -130,9 +129,6 @@
#define DU_FILAMENT_RUNOUT "filament op!"
#define DU_PREHEAT "Voorverwarmen"
#define DU_PREHEAT_BOTH "Beide"
- #define DU_PREHEAT_PLA "PLA"
- #define DU_PREHEAT_PETG "PETG"
- #define DU_PREHEAT_ABS "ABS"
#define DU_IS_PAUSE "Kan niet extruderen tijdens printen, Pauzeer printen?"
#define DU_AUTO_SHUT_DOWN "Auto Power"
#define DU_UNIFIEDMOVE "Beweging"
@@ -141,14 +137,14 @@
#define DU_EMERGENCYSTOP "NOODSTOP"
#define DU_TOUCH_TO_EXIT "Aanraken om te verlaten"
#define DU_MAINMENU "Menu"
- #define DU_WAIT_TEMP_SHUT_DOWN "Wacht tot de temperatuur van de spuitkop lager dan " STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "℃ is" // Wait for the temperature of hotend to be lower than 50℃
+ #define DU_WAIT_TEMP_SHUT_DOWN "Wacht tot de temperatuur van de spuitkop lager dan %d℃ is" // Wait for the temperature of hotend to be lower than 50℃
#define DU_FORCE_SHUT_DOWN "Forceer Afsluiten"
#define DU_SHUTTING_DOWN "Afsluiten..."
#define DU_PARAMETER_SETTING "Parameter"
#define DU_ON "AAN"
#define DU_OFF "UIT"
#define DU_SMART "SMART"
- #define DU_TERMINAL_ACK "Verberg Terminal ACK"
+ #define DU_TERMINAL_ACK "Show ACK in Terminal"
#define DU_INVERT_XAXIS "Inverteer X Axis"
#define DU_INVERT_YAXIS "Inverteer Y Axis"
#define DU_INVERT_ZAXIS "Inverteer Z Axis"
diff --git a/TFT/src/User/API/Language/language_en.h b/TFT/src/User/API/Language/language_en.h
index e75346eaee..03326b9b74 100644
--- a/TFT/src/User/API/Language/language_en.h
+++ b/TFT/src/User/API/Language/language_en.h
@@ -18,6 +18,7 @@
#define EN_RGB_SETTINGS "LED Color"
#define EN_RGB_OFF "LED Off"
#define EN_GCODE "Gcode"
+ #define EN_TERMINAL "Terminal"
#define EN_CUSTOM "Custom"
#define EN_LEVELING "Leveling"
#define EN_POINT_1 "Point 1"
@@ -66,6 +67,12 @@
#define EN_ORANGE "Orange"
#define EN_INDIGO "Indigo"
#define EN_VIOLET "Violet"
+ #define EN_MAGENTA "Magenta"
+ #define EN_PURPLE "Purple"
+ #define EN_LIME "Lime"
+ #define EN_DARKBLUE "DarkBlue"
+ #define EN_DARKGREEN "DarkGreen"
+ #define EN_DARKGRAY "DarkGray"
#define EN_DISCONNECT "Disconnect"
#define EN_PERCENTAGE "Percentage"
#define EN_BABYSTEP "BabyStep"
@@ -92,15 +99,7 @@
#define EN_1_PERCENT "1%"
#define EN_5_PERCENT "5%"
#define EN_10_PERCENT "10%"
- #define EN_20_PERCENT "20%"
- #define EN_30_PERCENT "30%"
- #define EN_40_PERCENT "40%"
- #define EN_50_PERCENT "50%"
- #define EN_60_PERCENT "60%"
- #define EN_70_PERCENT "70%"
- #define EN_80_PERCENT "80%"
- #define EN_90_PERCENT "90%"
- #define EN_100_PERCENT "100%"
+ #define EN_PERCENT_VALUE "%d%"
#define EN_READY "Ready"
#define EN_BUSY "Busy processing, please wait..."
#define EN_UNCONNECTED "No printer attached!"
@@ -108,7 +107,7 @@
#define EN_LOADING "Loading..."
#define EN_POWER_FAILED "\u0887 Continue printing?" //Question Sign
#define EN_CONTINUE "Continue"
- #define EN_CANNEL "\u088F Cancel" //Cancel Sign
+ #define EN_CANCEL "\u088F Cancel" //Cancel Sign
#define EN_ADJUST_TITLE "Touch Screen Calibration"
#define EN_ADJUST_INFO "Please click on the red dot"
#define EN_ADJUST_OK "Adjustment Success"
@@ -130,9 +129,6 @@
#define EN_FILAMENT_RUNOUT "filament runout!"
#define EN_PREHEAT "Preheat"
#define EN_PREHEAT_BOTH "Both"
- #define EN_PREHEAT_PLA "PLA"
- #define EN_PREHEAT_PETG "PETG"
- #define EN_PREHEAT_ABS "ABS"
#define EN_IS_PAUSE "Unable to extrude when printing, Pause printing?"
#define EN_AUTO_SHUT_DOWN "Auto Power"
#define EN_UNIFIEDMOVE "Movement"
@@ -141,14 +137,14 @@
#define EN_EMERGENCYSTOP "EM. STOP"
#define EN_TOUCH_TO_EXIT "Touch anywhere to exit"
#define EN_MAINMENU "Menu"
- #define EN_WAIT_TEMP_SHUT_DOWN "Wait for the temperatureof hotend to be lower than " STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "°C" // The length of the info line is 24 characters, so the "temperatureof" will automatically be divided into "temperature of..."
+ #define EN_WAIT_TEMP_SHUT_DOWN "Wait for the temperatureof hotend to be lower than %d " // The length of the info line is 24 characters, so the "temperatureof" will automatically be divided into "temperature of..."
#define EN_FORCE_SHUT_DOWN "Force"
#define EN_SHUTTING_DOWN "Shutting down..."
#define EN_PARAMETER_SETTING "Parameter Settings"
#define EN_ON "ON"
#define EN_OFF "OFF"
#define EN_SMART "SMART"
- #define EN_TERMINAL_ACK "Hide Terminal ACK"
+ #define EN_TERMINAL_ACK "Show ACK in Terminal"
#define EN_INVERT_XAXIS "Invert X Axis"
#define EN_INVERT_YAXIS "Invert Y Axis"
#define EN_INVERT_ZAXIS "Invert Z Axis"
diff --git a/TFT/src/User/API/Language/language_es.h b/TFT/src/User/API/Language/language_es.h
index 18190e57d6..33ae314252 100644
--- a/TFT/src/User/API/Language/language_es.h
+++ b/TFT/src/User/API/Language/language_es.h
@@ -18,6 +18,7 @@
#define ES_RGB_SETTINGS "Color LED"
#define ES_RGB_OFF "Apagar LED"
#define ES_GCODE "Gcode"
+ #define ES_TERMINAL "Terminal"
#define ES_CUSTOM "Personalizar"
#define ES_LEVELING "Nivelar"
#define ES_POINT_1 "Punto 1"
@@ -66,6 +67,12 @@
#define ES_ORANGE "Orange"
#define ES_INDIGO "Indigo"
#define ES_VIOLET "Violet"
+ #define ES_MAGENTA "Magenta"
+ #define ES_PURPLE "Purple"
+ #define ES_LIME "Lime"
+ #define ES_DARKBLUE "DarkBlue"
+ #define ES_DARKGREEN "DarkGreen"
+ #define ES_DARKGRAY "DarkGray"
#define ES_DISCONNECT "Desconectar"
#define ES_PERCENTAGE "Porcentaje"
#define ES_BABYSTEP "BabyStep"
@@ -92,15 +99,7 @@
#define ES_1_PERCENT "1%"
#define ES_5_PERCENT "5%"
#define ES_10_PERCENT "10%"
- #define ES_20_PERCENT "20%"
- #define ES_30_PERCENT "30%"
- #define ES_40_PERCENT "40%"
- #define ES_50_PERCENT "50%"
- #define ES_60_PERCENT "60%"
- #define ES_70_PERCENT "70%"
- #define ES_80_PERCENT "80%"
- #define ES_90_PERCENT "90%"
- #define ES_100_PERCENT "100%"
+ #define ES_PERCENT_VALUE "%d%"
#define ES_READY "Preparado"
#define ES_BUSY "Procesamiento ocupado, por favor espere..."
#define ES_UNCONNECTED "¡No hay comunicación con impresora!"
@@ -108,7 +107,7 @@
#define ES_LOADING "Cargando..."
#define ES_POWER_FAILED "¿Continuar imprimiendo?"
#define ES_CONTINUE "Continuar"
- #define ES_CANNEL "Cancelar"
+ #define ES_CANCEL "Cancelar"
#define ES_ADJUST_TITLE "¡Calibrar la pantalla táctil"
#define ES_ADJUST_INFO "Por favor haga clic en el punto rojo"
#define ES_ADJUST_OK "Ajuste correcto"
@@ -130,9 +129,6 @@
#define ES_FILAMENT_RUNOUT "¡Filamento agotado!"
#define ES_PREHEAT "Precalentar"
#define ES_PREHEAT_BOTH "Ambos"
- #define ES_PREHEAT_PLA "PLA"
- #define ES_PREHEAT_PETG "PETG"
- #define ES_PREHEAT_ABS "ABS"
#define ES_IS_PAUSE "No se puede extruir al imprimir,¿Pausar la impresión?"
#define ES_AUTO_SHUT_DOWN "Apag. aut."
#define ES_UNIFIEDMOVE "Movimiento"
@@ -141,14 +137,14 @@
#define ES_EMERGENCYSTOP "PARADA EMERGENCIA"
#define ES_TOUCH_TO_EXIT "Toca cualquier lugar para salir"
#define ES_MAINMENU "Menu"
- #define ES_WAIT_TEMP_SHUT_DOWN "Espere a que la temperatura del hotend sea inferior a " STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "℃" // Wait for the temperature of hotend to be lower than 50℃
+ #define ES_WAIT_TEMP_SHUT_DOWN "Espere a que la temperatura del hotend sea inferior a %d℃" // Wait for the temperature of hotend to be lower than 50℃
#define ES_FORCE_SHUT_DOWN "Forzar Apagado"
#define ES_SHUTTING_DOWN "Apagando..."
#define ES_PARAMETER_SETTING "Parámetro"
#define ES_ON "ON"
#define ES_OFF "OFF"
#define ES_SMART "SMART"
- #define ES_TERMINAL_ACK "Hide Terminal ACK"
+ #define ES_TERMINAL_ACK "Show ACK in Terminal"
#define ES_INVERT_XAXIS "Invert X Axis"
#define ES_INVERT_YAXIS "Invert Y Axis"
#define ES_INVERT_ZAXIS "Invert Z Axis"
diff --git a/TFT/src/User/API/Language/language_fr.h b/TFT/src/User/API/Language/language_fr.h
index e98c9e8b96..1ba86c5f2c 100644
--- a/TFT/src/User/API/Language/language_fr.h
+++ b/TFT/src/User/API/Language/language_fr.h
@@ -18,6 +18,7 @@
#define FR_RGB_SETTINGS "Couleur LED"
#define FR_RGB_OFF "LED Off"
#define FR_GCODE "Gcode"
+ #define FR_TERMINAL "Terminal"
#define FR_CUSTOM "Custom"
#define FR_LEVELING "Niveaux"
#define FR_POINT_1 "Point 1"
@@ -66,6 +67,12 @@
#define FR_ORANGE "Orange"
#define FR_INDIGO "Indigo"
#define FR_VIOLET "Violet"
+ #define FR_MAGENTA "Magenta"
+ #define FR_PURPLE "Purple"
+ #define FR_LIME "Lime"
+ #define FR_DARKBLUE "DarkBlue"
+ #define FR_DARKGREEN "DarkGreen"
+ #define FR_DARKGRAY "DarkGray"
#define FR_DISCONNECT "Déconnexion"
#define FR_PERCENTAGE "Avancement en %"
#define FR_BABYSTEP "BabyStep"
@@ -92,15 +99,7 @@
#define FR_1_PERCENT "1%"
#define FR_5_PERCENT "5%"
#define FR_10_PERCENT "10%"
- #define FR_20_PERCENT "20%"
- #define FR_30_PERCENT "30%"
- #define FR_40_PERCENT "40%"
- #define FR_50_PERCENT "50%"
- #define FR_60_PERCENT "60%"
- #define FR_70_PERCENT "70%"
- #define FR_80_PERCENT "80%"
- #define FR_90_PERCENT "90%"
- #define FR_100_PERCENT "100%"
+ #define FR_PERCENT_VALUE "%d%"
#define FR_READY "Prêt"
#define FR_BUSY "Occupée, veuillez patienter..."
#define FR_UNCONNECTED "L'imprimante n'est pas reliée !"
@@ -108,7 +107,7 @@
#define FR_LOADING "Chargement..."
#define FR_POWER_FAILED "Continuer l’impression ?"
#define FR_CONTINUE "Continuer"
- #define FR_CANNEL "Annuler"
+ #define FR_CANCEL "Annuler"
#define FR_ADJUST_TITLE "Calibration écran tactile"
#define FR_ADJUST_INFO "SVP Touchez le point rouge"
#define FR_ADJUST_OK "Ajustement OK"
@@ -130,9 +129,6 @@
#define FR_FILAMENT_RUNOUT "Fin de Filament !"
#define FR_PREHEAT "Préparer"
#define FR_PREHEAT_BOTH "Global"
- #define FR_PREHEAT_PLA "PLA"
- #define FR_PREHEAT_PETG "PETG"
- #define FR_PREHEAT_ABS "ABS"
#define FR_IS_PAUSE "Extrusion impossible quand l’impression est en cours, mettre impression en pause ?"
#define FR_AUTO_SHUT_DOWN "Auto Power"
#define FR_UNIFIEDMOVE "Mouvement"
@@ -141,14 +137,14 @@
#define FR_EMERGENCYSTOP "Arrêt d'urgence"
#define FR_TOUCH_TO_EXIT "Toucher n'importe où pour sortir"
#define FR_MAINMENU "Menu"
- #define FR_WAIT_TEMP_SHUT_DOWN "Veuillez, patientez que la température de la buse soit inférieure à" STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "℃" // Wait for the temperature of hotend to be lower than 50℃
+ #define FR_WAIT_TEMP_SHUT_DOWN "Veuillez, patientez que la température de la buse soit inférieure à%d℃" // Wait for the temperature of hotend to be lower than 50℃
#define FR_FORCE_SHUT_DOWN "Forcer Extinction"
#define FR_SHUTTING_DOWN "Extinction en cours..."
#define FR_PARAMETER_SETTING "Paramètre"
#define FR_ON "ON"
#define FR_OFF "OFF"
#define FR_SMART "SMART"
- #define FR_TERMINAL_ACK "Cacher le Terminal ACK"
+ #define FR_TERMINAL_ACK "Show ACK in Terminal"
#define FR_INVERT_XAXIS "Inverser Axe X"
#define FR_INVERT_YAXIS "Inverser Axe Y"
#define FR_INVERT_ZAXIS "Inverser Axe Z"
diff --git a/TFT/src/User/API/Language/language_hu.h b/TFT/src/User/API/Language/language_hu.h
index 70a133f3dc..24966163a7 100644
--- a/TFT/src/User/API/Language/language_hu.h
+++ b/TFT/src/User/API/Language/language_hu.h
@@ -18,6 +18,7 @@
#define HU_RGB_SETTINGS "LED Szín"
#define HU_RGB_OFF "LED KI"
#define HU_GCODE "G-Kód"
+ #define HU_TERMINAL "Terminal"
#define HU_CUSTOM "Egyedi"
#define HU_LEVELING "Szintezés"
#define HU_POINT_1 "1. pont"
@@ -66,6 +67,12 @@
#define HU_ORANGE "Narancs"
#define HU_INDIGO "Indigó"
#define HU_VIOLET "Viola"
+ #define HU_MAGENTA "Magenta"
+ #define HU_PURPLE "Purple"
+ #define HU_LIME "Lime"
+ #define HU_DARKBLUE "DarkBlue"
+ #define HU_DARKGREEN "DarkGreen"
+ #define HU_DARKGRAY "DarkGray"
#define HU_DISCONNECT "Leválaszt"
#define HU_PERCENTAGE "Százalék"
#define HU_BABYSTEP "Mikrolépés"
@@ -92,15 +99,7 @@
#define HU_1_PERCENT "1%"
#define HU_5_PERCENT "5%"
#define HU_10_PERCENT "10%"
- #define HU_20_PERCENT "20%"
- #define HU_30_PERCENT "30%"
- #define HU_40_PERCENT "40%"
- #define HU_50_PERCENT "50%"
- #define HU_60_PERCENT "60%"
- #define HU_70_PERCENT "70%"
- #define HU_80_PERCENT "80%"
- #define HU_90_PERCENT "90%"
- #define HU_100_PERCENT "100%"
+ #define HU_PERCENT_VALUE "%d%"
#define HU_READY "Kész"
#define HU_BUSY "Feldolgozás alatt, kérlek várj..."
#define HU_UNCONNECTED "Nincs nyomtató csatlakoztatva!"
@@ -108,7 +107,7 @@
#define HU_LOADING "Betöltés..."
#define HU_POWER_FAILED "Folytatja a nyomtatást?"
#define HU_CONTINUE "Folytatás"
- #define HU_CANNEL "Mégse"
+ #define HU_CANCEL "Mégse"
#define HU_ADJUST_TITLE "Érintőképernyő kalibrálása."
#define HU_ADJUST_INFO "Kattintson a piros pontra."
#define HU_ADJUST_OK "Kalibrálás sikeres."
@@ -130,9 +129,6 @@
#define HU_FILAMENT_RUNOUT "Filament kifutás!"
#define HU_PREHEAT "Előfűtés"
#define HU_PREHEAT_BOTH "Mindkettő"
- #define HU_PREHEAT_PLA "PLA"
- #define HU_PREHEAT_PETG "PETG"
- #define HU_PREHEAT_ABS "ABS"
#define HU_IS_PAUSE "Nem sikerül adagolni a nyomtatás alatt. Szüneteli a nyomtatást?"
#define HU_AUTO_SHUT_DOWN "Automata kikapcsolás"
#define HU_UNIFIEDMOVE "Mozgás"
@@ -141,14 +137,14 @@
#define HU_EMERGENCYSTOP "VészSTOP"
#define HU_TOUCH_TO_EXIT "Érintse meg a kilépéshez."
#define HU_MAINMENU "Főmenü"
- #define HU_WAIT_TEMP_SHUT_DOWN "Várja meg a fej visszahűlését." STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "℃" // Várjon, amíg a meleg fej a megadott ℃ alá hűl.
+ #define HU_WAIT_TEMP_SHUT_DOWN "Várja meg a fej visszahűlését.%d℃" // Várjon, amíg a meleg fej a megadott ℃ alá hűl.
#define HU_FORCE_SHUT_DOWN "Kényszerítés"
#define HU_SHUTTING_DOWN "Leállítás..."
#define HU_PARAMETER_SETTING "Paraméter Beállítások"
#define HU_ON "BE"
#define HU_OFF "KI"
#define HU_SMART "OKOS"
- #define HU_TERMINAL_ACK "ACK elrejtése"
+ #define HU_TERMINAL_ACK "Show ACK in Terminal"
#define HU_INVERT_XAXIS "X megfordítása"
#define HU_INVERT_YAXIS "Y megfordítása"
#define HU_INVERT_ZAXIS "Z megfordítása"
diff --git a/TFT/src/User/API/Language/language_it.h b/TFT/src/User/API/Language/language_it.h
index 4a82ca4247..31107d104c 100644
--- a/TFT/src/User/API/Language/language_it.h
+++ b/TFT/src/User/API/Language/language_it.h
@@ -18,6 +18,7 @@
#define IT_RGB_SETTINGS "RGB LED"
#define IT_RGB_OFF "Spegni"
#define IT_GCODE "Gcode"
+ #define IT_TERMINAL "Terminal"
#define IT_CUSTOM "Custom"
#define IT_LEVELING "Livella"
#define IT_POINT_1 "Punto 1"
@@ -66,6 +67,12 @@
#define IT_ORANGE "Orange"
#define IT_INDIGO "Indigo"
#define IT_VIOLET "Violet"
+ #define IT_MAGENTA "Magenta"
+ #define IT_PURPLE "Purple"
+ #define IT_LIME "Lime"
+ #define IT_DARKBLUE "DarkBlue"
+ #define IT_DARKGREEN "DarkGreen"
+ #define IT_DARKGRAY "DarkGray"
#define IT_DISCONNECT "Scollega"
#define IT_PERCENTAGE "Percentuale"
#define IT_BABYSTEP "BabyStep"
@@ -92,15 +99,7 @@
#define IT_1_PERCENT "1%"
#define IT_5_PERCENT "5%"
#define IT_10_PERCENT "10%"
- #define IT_20_PERCENT "20%"
- #define IT_30_PERCENT "30%"
- #define IT_40_PERCENT "40%"
- #define IT_50_PERCENT "50%"
- #define IT_60_PERCENT "60%"
- #define IT_70_PERCENT "70%"
- #define IT_80_PERCENT "80%"
- #define IT_90_PERCENT "90%"
- #define IT_100_PERCENT "100%"
+ #define IT_PERCENT_VALUE "%d%"
#define IT_READY "Pronto"
#define IT_BUSY "Processo in carico, attendi..."
#define IT_UNCONNECTED "Stampante non connessa"
@@ -108,7 +107,7 @@
#define IT_LOADING "Caricamento..."
#define IT_POWER_FAILED "Vuoi continuare la stampa?"
#define IT_CONTINUE "Continua"
- #define IT_CANNEL "Cancella"
+ #define IT_CANCEL "Cancella"
#define IT_ADJUST_TITLE "Calibrazione Touch Screen"
#define IT_ADJUST_INFO "Premi sui punti rossi"
#define IT_ADJUST_OK "Regolazione Completata!"
@@ -130,9 +129,6 @@
#define IT_FILAMENT_RUNOUT "Filamento finito!"
#define IT_PREHEAT "Prepara"
#define IT_PREHEAT_BOTH "Both"
- #define IT_PREHEAT_PLA "PLA"
- #define IT_PREHEAT_PETG "PETG"
- #define IT_PREHEAT_ABS "ABS"
#define IT_IS_PAUSE "Impossibile estrudere durante la stampa, vuoi sospendere?"
#define IT_AUTO_SHUT_DOWN "Auto Spegnimento"
#define IT_UNIFIEDMOVE "Movimento"
@@ -141,14 +137,14 @@
#define IT_EMERGENCYSTOP "EM. STOP"
#define IT_TOUCH_TO_EXIT "Premi ovunque per uscire"
#define IT_MAINMENU "Menu"
- #define IT_WAIT_TEMP_SHUT_DOWN "Wait for the temperature of hotend to be lower than " STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "℃" // Wait for the temperature of hotend to be lower than 50℃
+ #define IT_WAIT_TEMP_SHUT_DOWN "Wait for the temperature of hotend to be lower than %d℃" // Wait for the temperature of hotend to be lower than 50℃
#define IT_FORCE_SHUT_DOWN "Force"
#define IT_SHUTTING_DOWN "Shutting down..."
#define IT_PARAMETER_SETTING "Parametri"
#define IT_ON "ON"
#define IT_OFF "OFF"
#define IT_SMART "SMART"
- #define IT_TERMINAL_ACK "Hide Terminal ACK"
+ #define IT_TERMINAL_ACK "Show ACK in Terminal"
#define IT_INVERT_XAXIS "Invert X Axis"
#define IT_INVERT_YAXIS "Invert Y Axis"
#define IT_INVERT_ZAXIS "Invert Z Axis"
diff --git a/TFT/src/User/API/Language/language_jp.h b/TFT/src/User/API/Language/language_jp.h
index 7ee463e729..9e93f0823e 100644
--- a/TFT/src/User/API/Language/language_jp.h
+++ b/TFT/src/User/API/Language/language_jp.h
@@ -18,6 +18,7 @@
#define JP_RGB_SETTINGS "LED Color"
#define JP_RGB_OFF "LED Off"
#define JP_GCODE "Gcode"
+ #define JP_TERMINAL "Terminal"
#define JP_CUSTOM "Custom"
#define JP_LEVELING "Leveling"
#define JP_POINT_1 "Point 1"
@@ -66,6 +67,12 @@
#define JP_ORANGE "Orange"
#define JP_INDIGO "Indigo"
#define JP_VIOLET "Violet"
+ #define JP_MAGENTA "Magenta"
+ #define JP_PURPLE "Purple"
+ #define JP_LIME "Lime"
+ #define JP_DARKBLUE "DarkBlue"
+ #define JP_DARKGREEN "DarkGreen"
+ #define JP_DARKGRAY "DarkGray"
#define JP_DISCONNECT "データ接続"
#define JP_PERCENTAGE "パーセント"
#define JP_BABYSTEP "ベビーステップ"
@@ -92,15 +99,7 @@
#define JP_1_PERCENT "1%"
#define JP_5_PERCENT "5%"
#define JP_10_PERCENT "10%"
- #define JP_20_PERCENT "20%"
- #define JP_30_PERCENT "30%"
- #define JP_40_PERCENT "40%"
- #define JP_50_PERCENT "50%"
- #define JP_60_PERCENT "60%"
- #define JP_70_PERCENT "70%"
- #define JP_80_PERCENT "80%"
- #define JP_90_PERCENT "90%"
- #define JP_100_PERCENT "100%"
+ #define JP_PERCENT_VALUE "%d%"
#define JP_READY "準備中"
#define JP_BUSY "ビジー状態、しばらくお待ちください..."
#define JP_UNCONNECTED "プリンターに連続していない!"
@@ -108,7 +107,7 @@
#define JP_LOADING "ロッド中..."
#define JP_POWER_FAILED "プリントを継続しますか?"
#define JP_CONTINUE "継続"
- #define JP_CANNEL "キャンセル"
+ #define JP_CANCEL "キャンセル"
#define JP_ADJUST_TITLE "タッチスクリーン較正"
#define JP_ADJUST_INFO "赤星をタッチ"
#define JP_ADJUST_OK "校正が成功しました"
@@ -130,9 +129,6 @@
#define JP_FILAMENT_RUNOUT "filament runout!"
#define JP_PREHEAT "Preheat"
#define JP_PREHEAT_BOTH "Both"
- #define JP_PREHEAT_PLA "PLA"
- #define JP_PREHEAT_PETG "PETG"
- #define JP_PREHEAT_ABS "ABS"
#define JP_IS_PAUSE "Unable to extrude when printing, Pause printing?"
#define JP_AUTO_SHUT_DOWN "Auto Power"
#define JP_UNIFIEDMOVE "Movement"
@@ -141,14 +137,14 @@
#define JP_EMERGENCYSTOP "EM. STOP"
#define JP_TOUCH_TO_EXIT "Touch anywhere to exit"
#define JP_MAINMENU "Menu"
- #define JP_WAIT_TEMP_SHUT_DOWN "Wait for the temperature of hotend to be lower than " STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "℃" // Wait for the temperature of hotend to be lower than 50℃
+ #define JP_WAIT_TEMP_SHUT_DOWN "Wait for the temperature of hotend to be lower than %d℃" // Wait for the temperature of hotend to be lower than 50℃
#define JP_FORCE_SHUT_DOWN "Force"
#define JP_SHUTTING_DOWN "Shutting down..."
#define JP_PARAMETER_SETTING "パラメータ"
#define JP_ON "ON"
#define JP_OFF "OFF"
#define JP_SMART "SMART"
- #define JP_TERMINAL_ACK "Hide Terminal ACK"
+ #define JP_TERMINAL_ACK "Show ACK in Terminal"
#define JP_INVERT_XAXIS "Invert X Axis"
#define JP_INVERT_YAXIS "Invert Y Axis"
#define JP_INVERT_ZAXIS "Invert Z Axis"
diff --git a/TFT/src/User/API/Language/language_pl.h b/TFT/src/User/API/Language/language_pl.h
index 0e6d5e4ffc..154f323e78 100644
--- a/TFT/src/User/API/Language/language_pl.h
+++ b/TFT/src/User/API/Language/language_pl.h
@@ -18,6 +18,7 @@
#define PL_RGB_SETTINGS "Kolor LED"
#define PL_RGB_OFF "Wyłącz LED"
#define PL_GCODE "Gcode"
+ #define PL_TERMINAL "Terminal"
#define PL_CUSTOM "Własne"
#define PL_LEVELING "Poziomowanie"
#define PL_POINT_1 "Punkt 1"
@@ -66,6 +67,12 @@
#define PL_ORANGE "Orange"
#define PL_INDIGO "Indigo"
#define PL_VIOLET "Violet"
+ #define PL_MAGENTA "Magenta"
+ #define PL_PURPLE "Purple"
+ #define PL_LIME "Lime"
+ #define PL_DARKBLUE "DarkBlue"
+ #define PL_DARKGREEN "DarkGreen"
+ #define PL_DARKGRAY "DarkGray"
#define PL_DISCONNECT "Odłącz"
#define PL_PERCENTAGE "Procent"
#define PL_BABYSTEP "BabyStep"
@@ -92,15 +99,7 @@
#define PL_1_PERCENT "1%"
#define PL_5_PERCENT "5%"
#define PL_10_PERCENT "10%"
- #define PL_20_PERCENT "20%"
- #define PL_30_PERCENT "30%"
- #define PL_40_PERCENT "40%"
- #define PL_50_PERCENT "50%"
- #define PL_60_PERCENT "60%"
- #define PL_70_PERCENT "70%"
- #define PL_80_PERCENT "80%"
- #define PL_90_PERCENT "90%"
- #define PL_100_PERCENT "100%"
+ #define PL_PERCENT_VALUE "%d%"
#define PL_READY "Gotowy"
#define PL_BUSY "Trwa przetwarzanie, proszę czekać..."
#define PL_UNCONNECTED "Drukarka nie podłączona!"
@@ -108,7 +107,7 @@
#define PL_LOADING "Loading..."
#define PL_POWER_FAILED "Kontynuować drukowanie?"
#define PL_CONTINUE "Kontynuuj"
- #define PL_CANNEL "Anuluj"
+ #define PL_CANCEL "Anuluj"
#define PL_ADJUST_TITLE "Kalibracja ekranu dotykowego"
#define PL_ADJUST_INFO "Dotykaj czerwoną kropkę"
#define PL_ADJUST_OK "Kalibracja poprawna"
@@ -130,9 +129,6 @@
#define PL_FILAMENT_RUNOUT "brak filamentu!"
#define PL_PREHEAT "Rozgrzew."
#define PL_PREHEAT_BOTH "Wszystko"
- #define PL_PREHEAT_PLA "PLA"
- #define PL_PREHEAT_PETG "PETG"
- #define PL_PREHEAT_ABS "ABS"
#define PL_IS_PAUSE "Operacja niedostępna w trakcie drukowania, wstrzymać drukowanie?"
#define PL_AUTO_SHUT_DOWN "Auto Wył."
#define PL_UNIFIEDMOVE "Ruch"
@@ -141,14 +137,14 @@
#define PL_EMERGENCYSTOP "ZATRZYMAJ"
#define PL_TOUCH_TO_EXIT "Dotkij aby wyjść"
#define PL_MAINMENU "Menu"
- #define PL_WAIT_TEMP_SHUT_DOWN "Czekam na schłodzenie do " STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "℃" // Wait for the temperature of hotend to be lower than 50℃
+ #define PL_WAIT_TEMP_SHUT_DOWN "Czekam na schłodzenie do %d℃" // Wait for the temperature of hotend to be lower than 50℃
#define PL_FORCE_SHUT_DOWN "Wymuś"
#define PL_SHUTTING_DOWN "Wyłączanie..."
#define PL_PARAMETER_SETTING "Parametr"
#define PL_ON "ON"
#define PL_OFF "OFF"
#define PL_SMART "SMART"
- #define PL_TERMINAL_ACK "Hide Terminal ACK"
+ #define PL_TERMINAL_ACK "Show ACK in Terminal"
#define PL_INVERT_XAXIS "Invert X Axis"
#define PL_INVERT_YAXIS "Invert Y Axis"
#define PL_INVERT_ZAXIS "Invert Z Axis"
diff --git a/TFT/src/User/API/Language/language_pt.h b/TFT/src/User/API/Language/language_pt.h
index 04b1c07f1f..d7c265db38 100644
--- a/TFT/src/User/API/Language/language_pt.h
+++ b/TFT/src/User/API/Language/language_pt.h
@@ -18,6 +18,7 @@
#define PT_RGB_SETTINGS "LED cor"
#define PT_RGB_OFF "Desligar"
#define PT_GCODE "Gcode"
+ #define PT_TERMINAL "Terminal"
#define PT_CUSTOM "Custom"
#define PT_LEVELING "Nivelar"
#define PT_POINT_1 "Ponto 1"
@@ -66,6 +67,12 @@
#define PT_ORANGE "Orange"
#define PT_INDIGO "Indigo"
#define PT_VIOLET "Violet"
+ #define PT_MAGENTA "Magenta"
+ #define PT_PURPLE "Purple"
+ #define PT_LIME "Lime"
+ #define PT_DARKBLUE "DarkBlue"
+ #define PT_DARKGREEN "DarkGreen"
+ #define PT_DARKGRAY "DarkGray"
#define PT_DISCONNECT "Desconectar"
#define PT_PERCENTAGE "Percentagem"
#define PT_BABYSTEP "BabyStep"
@@ -92,15 +99,7 @@
#define PT_1_PERCENT "1%"
#define PT_5_PERCENT "5%"
#define PT_10_PERCENT "10%"
- #define PT_20_PERCENT "20%"
- #define PT_30_PERCENT "30%"
- #define PT_40_PERCENT "40%"
- #define PT_50_PERCENT "50%"
- #define PT_60_PERCENT "60%"
- #define PT_70_PERCENT "70%"
- #define PT_80_PERCENT "80%"
- #define PT_90_PERCENT "90%"
- #define PT_100_PERCENT "100%"
+ #define PT_PERCENT_VALUE "%d%"
#define PT_READY "Pronto"
#define PT_BUSY "Em processamento, aguarde..."
#define PT_UNCONNECTED "Nenhuma impressora conectada!"
@@ -108,7 +107,7 @@
#define PT_LOADING "Carregando..."
#define PT_POWER_FAILED "Continuar a imprimir?"
#define PT_CONTINUE "Continuar"
- #define PT_CANNEL "Cancelar"
+ #define PT_CANCEL "Cancelar"
#define PT_ADJUST_TITLE "Calibracao do Touch Screen"
#define PT_ADJUST_INFO "Por favor, clique no ponto vermelho"
#define PT_ADJUST_OK "Ajustado com sucesso"
@@ -130,9 +129,6 @@
#define PT_FILAMENT_RUNOUT "Filamento runout!"
#define PT_PREHEAT "Aquecer"
#define PT_PREHEAT_BOTH "Ambos"
- #define PT_PREHEAT_PLA "PLA"
- #define PT_PREHEAT_PETG "PETG"
- #define PT_PREHEAT_ABS "ABS"
#define PT_IS_PAUSE "Nao e possível a extrusão durante a impressao, pausar a impressao?"
#define PT_AUTO_SHUT_DOWN "Auto Power"
#define PT_UNIFIEDMOVE "Movimento"
@@ -141,14 +137,14 @@
#define PT_EMERGENCYSTOP "EMERGENCIA STOP"
#define PT_TOUCH_TO_EXIT "Toque em qualquer lugar para sair"
#define PT_MAINMENU "Menu"
- #define PT_WAIT_TEMP_SHUT_DOWN "Wait for the temperature of hotend to be lower than " STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "℃" // Wait for the temperature of hotend to be lower than 50℃
+ #define PT_WAIT_TEMP_SHUT_DOWN "Wait for the temperature of hotend to be lower than %d℃" // Wait for the temperature of hotend to be lower than 50℃
#define PT_FORCE_SHUT_DOWN "Force"
#define PT_SHUTTING_DOWN "Shutting down..."
#define PT_PARAMETER_SETTING "Parâmetro"
#define PT_ON "ON"
#define PT_OFF "OFF"
#define PT_SMART "SMART"
- #define PT_TERMINAL_ACK "Hide Terminal ACK"
+ #define PT_TERMINAL_ACK "Show ACK in Terminal"
#define PT_INVERT_XAXIS "Invert X Axis"
#define PT_INVERT_YAXIS "Invert Y Axis"
#define PT_INVERT_ZAXIS "Invert Z Axis"
diff --git a/TFT/src/User/API/Language/language_ru.h b/TFT/src/User/API/Language/language_ru.h
index b9d869185b..49d6ce9875 100644
--- a/TFT/src/User/API/Language/language_ru.h
+++ b/TFT/src/User/API/Language/language_ru.h
@@ -18,6 +18,7 @@
#define RU_RGB_SETTINGS "Цвет LED"
#define RU_RGB_OFF "LED выкл"
#define RU_GCODE "G-коды"
+ #define RU_TERMINAL "Терминал"
#define RU_CUSTOM "Своё меню"
#define RU_LEVELING "Равнение"
#define RU_POINT_1 "Точка 1"
@@ -31,7 +32,7 @@
#define RU_BLTOUCH_STOW "BLT вверх"
#define RU_BLTOUCH_REPEAT "Точность Z"
#define RU_Z_OFFSET "Отступ Z"
- #define RU_PROBE_OFFSET "Отступ BLT"
+ #define RU_PROBE_OFFSET "Смещение датчика"
#define RU_EEPROM_SAVE "Сохранить"
#define RU_INC "Увеличить"
#define RU_DEC "Уменьшить"
@@ -66,6 +67,12 @@
#define RU_ORANGE "Оранжевый"
#define RU_INDIGO "Индиго"
#define RU_VIOLET "Фиолетовый"
+ #define RU_MAGENTA "Маджента"
+ #define RU_PURPLE "Пурпурный"
+ #define RU_LIME "Лаймовый"
+ #define RU_DARKBLUE "Тёмносиний"
+ #define RU_DARKGREEN "Тёмнозелёный"
+ #define RU_DARKGRAY "Тёмносерый"
#define RU_DISCONNECT "Отключить"
#define RU_PERCENTAGE "Подстройки"
#define RU_BABYSTEP "Микрошаг Z"
@@ -92,15 +99,7 @@
#define RU_1_PERCENT "1%"
#define RU_5_PERCENT "5%"
#define RU_10_PERCENT "10%"
- #define RU_20_PERCENT "20%"
- #define RU_30_PERCENT "30%"
- #define RU_40_PERCENT "40%"
- #define RU_50_PERCENT "50%"
- #define RU_60_PERCENT "60%"
- #define RU_70_PERCENT "70%"
- #define RU_80_PERCENT "80%"
- #define RU_90_PERCENT "90%"
- #define RU_100_PERCENT "100%"
+ #define RU_PERCENT_VALUE "%d%"
#define RU_READY "Готов"
#define RU_BUSY "Занято процессом, подождите..."
#define RU_UNCONNECTED "Нет подключения!"
@@ -108,7 +107,7 @@
#define RU_LOADING "Загрузка..."
#define RU_POWER_FAILED "\u0887 Продолжить печать?" //Question Sign
#define RU_CONTINUE "Продолжение"
- #define RU_CANNEL "\u088F Отмена" //Cancel Sign
+ #define RU_CANCEL "\u088F Отмена" //Cancel Sign
#define RU_ADJUST_TITLE "Калибровка экрана"
#define RU_ADJUST_INFO "Нажмите на красную точку"
#define RU_ADJUST_OK "Успешная калибровка"
@@ -130,9 +129,6 @@
#define RU_FILAMENT_RUNOUT "Пруток закончился"
#define RU_PREHEAT "Преднагрев"
#define RU_PREHEAT_BOTH "Оба"
- #define RU_PREHEAT_PLA "PLA"
- #define RU_PREHEAT_PETG "PETG"
- #define RU_PREHEAT_ABS "ABS"
#define RU_IS_PAUSE "Невозможна экструзия при печати, поставить на паузу?"
#define RU_AUTO_SHUT_DOWN "Автовыключение"
#define RU_UNIFIEDMOVE "Движение"
@@ -141,14 +137,14 @@
#define RU_EMERGENCYSTOP "Экст.стоп"
#define RU_MAINMENU "Меню"
#define RU_TOUCH_TO_EXIT "Нажмите для возврата"
- #define RU_WAIT_TEMP_SHUT_DOWN "Дождитесь температуры сопла не ниже чем " STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "°C" // Wait for the temperature of hotend to be lower than 50°C
+ #define RU_WAIT_TEMP_SHUT_DOWN "Дождитесь температуры сопла не ниже чем %d°C" // Wait for the temperature of hotend to be lower than 50°C
#define RU_FORCE_SHUT_DOWN "Принудительно выкл"
#define RU_SHUTTING_DOWN "Выключаю..."
#define RU_PARAMETER_SETTING "Параметры"
#define RU_ON "Вкл"
#define RU_OFF "Выкл"
#define RU_SMART "Умный"
- #define RU_TERMINAL_ACK "Скрыть ACK терминала"
+ #define RU_TERMINAL_ACK "ACK терминала (C°)"
#define RU_INVERT_XAXIS "Инверсия оси X"
#define RU_INVERT_YAXIS "Инверсия оси Y"
#define RU_INVERT_ZAXIS "Инверсия оси Z"
diff --git a/TFT/src/User/API/Language/language_sk.h b/TFT/src/User/API/Language/language_sk.h
index 2986093a46..a0175b135e 100644
--- a/TFT/src/User/API/Language/language_sk.h
+++ b/TFT/src/User/API/Language/language_sk.h
@@ -18,6 +18,7 @@
#define SK_RGB_SETTINGS "Farba LED"
#define SK_RGB_OFF "Vypnúť LED"
#define SK_GCODE "Gcode"
+ #define SK_TERMINAL "Terminal"
#define SK_CUSTOM "Vlastné"
#define SK_LEVELING "Vyrovnanie"
#define SK_POINT_1 "Bod 1"
@@ -66,6 +67,12 @@
#define SK_ORANGE "Oranžová"
#define SK_INDIGO "Indigo"
#define SK_VIOLET "Fialová"
+ #define SK_MAGENTA "Magenta"
+ #define SK_PURPLE "Purple"
+ #define SK_LIME "Lime"
+ #define SK_DARKBLUE "DarkBlue"
+ #define SK_DARKGREEN "DarkGreen"
+ #define SK_DARKGRAY "DarkGray"
#define SK_DISCONNECT "Odpojiť"
#define SK_PERCENTAGE "Percentá"
#define SK_BABYSTEP "BabyStep"
@@ -92,15 +99,7 @@
#define SK_1_PERCENT "1%"
#define SK_5_PERCENT "5%"
#define SK_10_PERCENT "10%"
- #define SK_20_PERCENT "20%"
- #define SK_30_PERCENT "30%"
- #define SK_40_PERCENT "40%"
- #define SK_50_PERCENT "50%"
- #define SK_60_PERCENT "60%"
- #define SK_70_PERCENT "70%"
- #define SK_80_PERCENT "80%"
- #define SK_90_PERCENT "90%"
- #define SK_100_PERCENT "100%"
+ #define SK_PERCENT_VALUE "%d%"
#define SK_READY "Pripravená"
#define SK_BUSY "Počkajte prosím..."
#define SK_UNCONNECTED "Tlačiareň odpojená!"
@@ -108,7 +107,7 @@
#define SK_LOADING "Načítavam..."
#define SK_POWER_FAILED "Pokračovať v tlači?"
#define SK_CONTINUE "Pokračovať"
- #define SK_CANNEL "Zrušiť"
+ #define SK_CANCEL "Zrušiť"
#define SK_ADJUST_TITLE "Kalibrácia"
#define SK_ADJUST_INFO "Dotknite sa postupne všetkých bodov"
#define SK_ADJUST_OK "Kalibrácia úspešná"
@@ -130,9 +129,6 @@
#define SK_FILAMENT_RUNOUT "Chýba Filament!"
#define SK_PREHEAT "Nahriať"
#define SK_PREHEAT_BOTH "Tryska/Podložka"
- #define SK_PREHEAT_PLA "PLA"
- #define SK_PREHEAT_PETG "PETG"
- #define SK_PREHEAT_ABS "ABS"
#define SK_IS_PAUSE "Nemožné extrúdovať počas tlače, Pozastaviť tlač?"
#define SK_AUTO_SHUT_DOWN "Auto vyp."
#define SK_UNIFIEDMOVE "Pohyb"
@@ -141,14 +137,14 @@
#define SK_EMERGENCYSTOP "STOP"
#define SK_TOUCH_TO_EXIT "Dotknite sa obrazovky pre ukončenie"
#define SK_MAINMENU "Menu"
- #define SK_WAIT_TEMP_SHUT_DOWN "Počkať na teplotu trysky menej ako" STRINGIFY(AUTO_SHUT_DOWN_MAXTEMP) "℃" // Počkať na teplotu hotendu menej ako 50℃
+ #define SK_WAIT_TEMP_SHUT_DOWN "Počkať na teplotu trysky menej ako%d℃" // Počkať na teplotu hotendu menej ako 50℃
#define SK_FORCE_SHUT_DOWN "Vynútené vypnutie"
#define SK_SHUTTING_DOWN "Vypínanie..."
#define SK_PARAMETER_SETTING "Parametre"
#define SK_ON "ON"
#define SK_OFF "OFF"
#define SK_SMART "SMART"
- #define SK_TERMINAL_ACK "Skryť ACK terminál"
+ #define SK_TERMINAL_ACK "Show ACK in Terminal"
#define SK_INVERT_XAXIS "Invertovať os X"
#define SK_INVERT_YAXIS "Invertovať os Y"
#define SK_INVERT_ZAXIS "Invertovať os Z"
diff --git a/TFT/src/User/API/Language/utf8_decode.c b/TFT/src/User/API/Language/utf8_decode.c
index 6e4cc59e26..a1d09cba3a 100644
--- a/TFT/src/User/API/Language/utf8_decode.c
+++ b/TFT/src/User/API/Language/utf8_decode.c
@@ -127,3 +127,18 @@ uint16_t GUI_StrPixelWidth(const uint8_t *const str)
}
return len;
}
+uint16_t getUTF8Length(const uint8_t *const str)
+{
+ uint16_t i = 0, len = 0;
+ CHAR_INFO info;
+
+ if(str == NULL) return 0;
+ while(str[i])
+ {
+ info.bytes = 0;
+ getUTF8EncodeInfo(str + i, &info);
+ i += info.bytes;
+ len ++;
+ }
+ return len;
+}
diff --git a/TFT/src/User/API/Language/utf8_decode.h b/TFT/src/User/API/Language/utf8_decode.h
index c5c83fd2e2..ba9c52a8f9 100644
--- a/TFT/src/User/API/Language/utf8_decode.h
+++ b/TFT/src/User/API/Language/utf8_decode.h
@@ -28,5 +28,6 @@ typedef struct
void getCharacterInfo(const uint8_t *ch, CHAR_INFO *pInfo);
uint16_t GUI_StrPixelWidth(const uint8_t *const str);
+uint16_t getUTF8Length(const uint8_t *const str);
#endif
diff --git a/TFT/src/User/API/UI/GUI.c b/TFT/src/User/API/UI/GUI.c
index 5e1d045110..c794f0de50 100644
--- a/TFT/src/User/API/UI/GUI.c
+++ b/TFT/src/User/API/UI/GUI.c
@@ -23,7 +23,7 @@ void GUI_SetColor(uint16_t color)
uint16_t GUI_GetColor(void)
{
- return foreGroundColor;
+ return lcd_colors[infoSettings.font_color];
}
void GUI_SetBkColor(uint16_t bkcolor)
diff --git a/TFT/src/User/API/UI/Numpad.c b/TFT/src/User/API/UI/Numpad.c
new file mode 100644
index 0000000000..bfeaa3ad3d
--- /dev/null
+++ b/TFT/src/User/API/UI/Numpad.c
@@ -0,0 +1,237 @@
+#include "Numpad.h"
+
+const GUI_RECT rect_of_numkey[KEY_NUM]={
+ {0*SKEYWIDTH, ICON_START_Y+0*SKEYHEIGHT, 1*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT},//1
+ {1*SKEYWIDTH, ICON_START_Y+0*SKEYHEIGHT, 2*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT},//2
+ {2*SKEYWIDTH, ICON_START_Y+0*SKEYHEIGHT, 3*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT},//3
+ {3*SKEYWIDTH, ICON_START_Y+0*SKEYHEIGHT, 4*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT},//OK
+
+ {0*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT, 1*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT},//4
+ {1*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT, 2*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT},//5
+ {2*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT, 3*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT},//6
+ {3*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT, 4*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT},//Del
+
+ {0*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT, 1*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT},//7
+ {1*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT, 2*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT},//8
+ {2*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT, 3*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT},//9
+ {3*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT, 4*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT},//
+
+ {0*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT, 1*SKEYWIDTH, ICON_START_Y+4*SKEYHEIGHT},//.
+ {1*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT, 2*SKEYWIDTH, ICON_START_Y+4*SKEYHEIGHT},//0
+ {2*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT, 3*SKEYWIDTH, ICON_START_Y+4*SKEYHEIGHT},//-
+ {3*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT, 4*SKEYWIDTH, ICON_START_Y+4*SKEYHEIGHT},//
+};
+
+const char *const numPadKeyChar[KEY_NUM] = {
+ "1","2","3","\u0894",
+ "4","5","6","\u0899",
+ "7","8","9","\u0895",
+ ".","0","-",""
+};
+
+//get keypress for NumPad
+NUM_KEY_VALUES NumKeyGetValue(void)
+{
+ return (NUM_KEY_VALUES)KEY_GetValue(sizeof(rect_of_numkey)/sizeof(rect_of_numkey[0]), rect_of_numkey);
+}
+
+void Draw_keyboard(void)
+{
+ TSC_ReDrawIcon = NULL;
+ GUI_ClearRect(0, 0, LCD_WIDTH, rect_of_numkey[0].y0);
+ GUI_SetBkColor(WHITE);
+ GUI_ClearRect(0, rect_of_numkey[0].y0, LCD_WIDTH, LCD_HEIGHT);
+ GUI_SetColor(BLACK);
+
+ for (int i = 0;i<3;i++){
+ GUI_DrawLine(rect_of_numkey[i].x1,rect_of_numkey[i].y0,rect_of_numkey[12+i].x1,rect_of_numkey[12+i].y1);
+ GUI_DrawLine(rect_of_numkey[i*4].x0,rect_of_numkey[i*4].y1,rect_of_numkey[3+i*4].x1,rect_of_numkey[3+i*4].y1);
+ }
+
+ for(uint8_t i=0 ;i");
+ char tempstr[BUFLONG];
+ my_sprintf(tempstr, "%.2f", old_val);
+ //GUI_SetColor(WHITE);
+ GUI_DispStringInPrect(&oldParameterRect,(u8*)tempstr);
+ touchSound = false;
+ while (1)
+ {
+ key_num = NumKeyGetValue();
+ switch (key_num)
+ {
+ case NUM_KEY_EXIT:
+ BUZZER_PLAY(sound_cancel);
+ touchSound = true;
+ return old_val;
+
+ case NUM_KEY_DEL:
+ if (nowIndex)
+ ParameterBuf[--nowIndex] = 0;
+ BUZZER_PLAY(sound_keypress);
+ break;
+
+ case NUM_KEY_1:
+ case NUM_KEY_2:
+ case NUM_KEY_3:
+ case NUM_KEY_4:
+ case NUM_KEY_5:
+ case NUM_KEY_6:
+ case NUM_KEY_7:
+ case NUM_KEY_8:
+ case NUM_KEY_9:
+ case NUM_KEY_0:
+ if (nowIndex < BUFLONG - 1)
+ {
+ ParameterBuf[nowIndex++] = numPadKeyChar[key_num][0];
+ ParameterBuf[nowIndex] = 0;
+ BUZZER_PLAY(sound_keypress);
+ }
+ break;
+ case NUM_KEY_DEC:
+ if (!strchr((const char *)ParameterBuf, numPadKeyChar[key_num][0]))
+ {
+ if (nowIndex < BUFLONG - 1)
+ {
+ if(nowIndex == 0 || (nowIndex == 1 && strchr((const char *)ParameterBuf, '-'))) // check if no number exits or only minus exists
+ ParameterBuf[nowIndex++] = '0'; //add zero before decimal sign if it is the first character
+ ParameterBuf[nowIndex++] = numPadKeyChar[key_num][0];
+ ParameterBuf[nowIndex] = 0;
+ BUZZER_PLAY(sound_keypress);
+ }
+ }
+ break;
+ case NUM_KEY_MINUS:
+ if (!strchr( (const char *)ParameterBuf, numPadKeyChar[key_num][0]) && negative_val)
+ {
+ if (nowIndex == 0)
+ {
+ ParameterBuf[nowIndex++] = numPadKeyChar[key_num][0];
+ ParameterBuf[nowIndex] = 0;
+ BUZZER_PLAY(sound_keypress);
+ }
+ }
+ break;
+
+ case NUM_KEY_OK:
+ if (nowIndex > 0)
+ {
+ if (nowIndex == 1 &&(strchr((const char *)ParameterBuf, '.') || strchr((const char *)ParameterBuf, '-')))
+ break;
+ //Send_Settingcmd();
+
+ BUZZER_PLAY(sound_ok);
+ touchSound = true;
+ return strtof(ParameterBuf, NULL);
+
+ }
+ default:
+ break;
+ }
+
+ if (lastIndex != nowIndex)
+ {
+ lastIndex = nowIndex;
+ GUI_ClearPrect(&newParameterRect);
+ GUI_DispStringInPrect(&newParameterRect, (u8 *)ParameterBuf);
+ }
+ loopBackEnd();
+ }
+}
+
+
+u32 numPadInt(u32 old_val)
+{
+ //bool exit = false;
+ GUI_RECT oldParameterRect = {0, 0, LCD_WIDTH/2 - BYTE_WIDTH, rect_of_numkey[0].y0};
+ GUI_RECT newParameterRect = {LCD_WIDTH/2 + BYTE_WIDTH, 0, LCD_WIDTH, rect_of_numkey[0].y0};
+ GUI_RECT arrowRect = {LCD_WIDTH/2 - BYTE_WIDTH, 0, LCD_WIDTH/2 + BYTE_WIDTH, rect_of_numkey[0].y0};
+ uint8_t nowIndex = 0,lastIndex = 0;
+ char ParameterBuf[BUFLONG] = {0};
+ NUM_KEY_VALUES key_num = NUM_KEY_IDLE;
+ Draw_keyboard();
+ GUI_DispStringInPrect(&arrowRect,(u8 *)">");
+ char tempstr[BUFLONG];
+ my_sprintf(tempstr, "%.2f", old_val);
+ GUI_DispStringInPrect(&oldParameterRect,(u8*)tempstr);
+ touchSound = false;
+ while (1)
+ {
+ key_num = NumKeyGetValue();
+ switch (key_num)
+ {
+ case NUM_KEY_EXIT:
+ BUZZER_PLAY(sound_cancel);
+ touchSound = true;
+ return old_val;
+
+ case NUM_KEY_DEL:
+ if (nowIndex)
+ ParameterBuf[--nowIndex] = 0;
+ BUZZER_PLAY(sound_keypress);
+ break;
+
+ case NUM_KEY_1:
+ case NUM_KEY_2:
+ case NUM_KEY_3:
+ case NUM_KEY_4:
+ case NUM_KEY_5:
+ case NUM_KEY_6:
+ case NUM_KEY_7:
+ case NUM_KEY_8:
+ case NUM_KEY_9:
+ case NUM_KEY_0:
+ if (nowIndex < BUFLONG - 1)
+ {
+ ParameterBuf[nowIndex++] = numPadKeyChar[key_num][0];
+ ParameterBuf[nowIndex] = 0;
+ BUZZER_PLAY(sound_keypress);
+ }
+ break;
+ case NUM_KEY_OK:
+ if (nowIndex > 0)
+ {
+ if (nowIndex == 1 &&(ParameterBuf[0] = '.' || ParameterBuf[0] == '-'))
+ break;
+
+ BUZZER_PLAY(sound_ok);
+ touchSound = true;
+ return strtoul(ParameterBuf,NULL,10);
+ }
+ default:
+ break;
+ }
+
+ if (lastIndex != nowIndex)
+ {
+ lastIndex = nowIndex;
+ GUI_ClearPrect(&newParameterRect);
+ GUI_DispStringInPrect(&newParameterRect, (u8 *)ParameterBuf);
+ }
+ loopBackEnd();
+ }
+}
\ No newline at end of file
diff --git a/TFT/src/User/API/UI/Numpad.h b/TFT/src/User/API/UI/Numpad.h
new file mode 100644
index 0000000000..e32832937e
--- /dev/null
+++ b/TFT/src/User/API/UI/Numpad.h
@@ -0,0 +1,56 @@
+#ifndef _NUMPAD_H_
+#define _NUMPAD_H_
+
+#include "includes.h"
+
+#define SKEYHEIGHT (LCD_HEIGHT-ICON_START_Y)/4
+#define SKEYWIDTH LCD_WIDTH/4
+
+#define KEY_NUM 16
+#define BUFLONG 6
+
+typedef enum
+{
+ SKEY_0 = 0,
+ SKEY_1,
+ SKEY_2,
+ SKEY_3,
+ SKEY_4,
+ SKEY_5,
+ SKEY_6,
+ SKEY_7,
+ SKEY_8,
+ SKEY_9,
+ SKEY_10,
+ SKEY_11,
+ SKEY_IDLE = IDLE_TOUCH,
+}SKEY_VALUES;
+
+typedef enum
+{
+ NUM_KEY_1 = 0,
+ NUM_KEY_2,
+ NUM_KEY_3,
+ NUM_KEY_OK,
+ NUM_KEY_4,
+ NUM_KEY_5,
+ NUM_KEY_6,
+ NUM_KEY_DEL,
+ NUM_KEY_7,
+ NUM_KEY_8,
+ NUM_KEY_9,
+ NUM_KEY_EXIT,
+ NUM_KEY_DEC,
+ NUM_KEY_0,
+ NUM_KEY_MINUS,
+ NUM_KEY_15,
+
+ NUM_KEY_IDLE = IDLE_TOUCH,
+}NUM_KEY_VALUES;
+
+
+float numPadFloat(float old_val, bool negative_val);
+
+u32 numPadInt(u32 old_val);
+
+#endif
\ No newline at end of file
diff --git a/TFT/src/User/API/UI/ST7920_Simulator.c b/TFT/src/User/API/UI/ST7920_Simulator.c
index 174c7d6544..04059aa00f 100644
--- a/TFT/src/User/API/UI/ST7920_Simulator.c
+++ b/TFT/src/User/API/UI/ST7920_Simulator.c
@@ -53,9 +53,9 @@ void ST7920_DrawByte(u8 data)
for(; i<8; i++)
{
if(data & 0x80)
- ST7920_DrawPixel(x, y, infoSettings.font_color);
+ ST7920_DrawPixel(x, y, lcd_colors[infoSettings.marlin_mode_font_color]);
else
- ST7920_DrawPixel(x, y, infoSettings.bg_color);
+ ST7920_DrawPixel(x, y, lcd_colors[infoSettings.marlin_mode_bg_color]);
data <<= 1;
x++;
}
@@ -134,13 +134,15 @@ void ST7920_ST7920_ParseWCmd(u8 cmd)
void menuST7920(void)
{
- GUI_Clear(infoSettings.bg_color);
- GUI_SetColor(infoSettings.font_color);
- GUI_SetBkColor(infoSettings.bg_color);
-
- #if defined(ST7920_BANNER_TEXT)
- GUI_DispStringInRect(0, 0, LCD_WIDTH, SIMULATOR_YSTART, (u8*)ST7920_BANNER_TEXT);
- #endif
+ GUI_Clear(lcd_colors[infoSettings.marlin_mode_bg_color]);
+ GUI_SetColor(lcd_colors[infoSettings.marlin_mode_font_color]);
+ GUI_SetBkColor(lcd_colors[infoSettings.marlin_mode_bg_color]);
+
+ if(infoSettings.marlin_mode_showtitle == 1){
+ STRINGS_STORE tempST;
+ W25Qxx_ReadBuffer((uint8_t *)&tempST,STRINGS_STORE_ADDR,sizeof(STRINGS_STORE));
+ GUI_DispStringInRect(0, 0, LCD_WIDTH, SIMULATOR_YSTART, (u8*)tempST.marlin_title);
+ }
SPI_Slave();
SPI_Slave_CS_Config();
diff --git a/TFT/src/User/API/UI/ST7920_Simulator.h b/TFT/src/User/API/UI/ST7920_Simulator.h
index 1a2506bc1a..9fca975e7e 100644
--- a/TFT/src/User/API/UI/ST7920_Simulator.h
+++ b/TFT/src/User/API/UI/ST7920_Simulator.h
@@ -6,11 +6,11 @@
// User-defined colors for 12864 mode from Configuration.h
#ifndef ST7920_BKCOLOR
- #define ST7920_BKCOLOR (BLACK)
+ #define ST7920_BKCOLOR LCD_BLACK
#endif
#ifndef ST7920_FNCOLOR
- #define ST7920_FNCOLOR (GREEN)
+ #define ST7920_FNCOLOR LCD_GREEN
#endif
#define ST7920_XSTART (0x80)
diff --git a/TFT/src/User/API/UI/list_item.c b/TFT/src/User/API/UI/list_item.c
index 07af49dd60..ab779515ef 100644
--- a/TFT/src/User/API/UI/list_item.c
+++ b/TFT/src/User/API/UI/list_item.c
@@ -7,6 +7,8 @@
char * dynamic_label[LISTITEM_PER_PAGE];
+char * dynamic_text_value[LISTITEM_PER_PAGE];
+
float dynamic_value[LISTITEM_PER_PAGE];
const uint16_t ICON_COLOR[ICONCHAR_NUM]=
@@ -248,7 +250,17 @@ char * getDynamicLabel(uint8_t i){
return dynamic_label[i];
}
-// save dynamic value ( i : index of the value position, value:float value)
+// save dynamic text value (upto 7 characters) ( i : index of the text value position, txt: char * to the text value)
+void setDynamicTextValue(uint8_t i, char *txt){
+ dynamic_text_value[i] = txt;
+}
+
+// get dynamic text value ( i : index of the text value position)
+char * getDynamicTextValue(uint8_t i){
+ return dynamic_text_value[i];
+}
+
+// save dynamic value (upto 7 digits) ( i : index of the value position, value:float value)
void setDynamicValue(uint8_t i,float value){
dynamic_value[i] = value;
}
@@ -343,10 +355,10 @@ void DrawListItemPress(const GUI_RECT * rect, bool pressed){
}
else
{
- GUI_SetColor(BACKGROUND_COLOR);
+ GUI_SetColor(lcd_colors[infoSettings.bg_color]);
GUI_DrawPrect(rect);
- GUI_SetColor(LISTBTN_BKCOLOR);
+ GUI_SetColor(lcd_colors[infoSettings.list_border_color]);
GUI_DrawLine(rect->x0, rect->y0-1 , rect->x1-1, rect->y0-1 );
GUI_DrawLine(rect->x0, rect->y1-1 , rect->x1-1, rect->y1-1 );
}
@@ -358,14 +370,16 @@ void ListItem_Display(const GUI_RECT* rect, uint8_t position, const LISTITEM * c
//draw navigation icons
if(position >= LISTITEM_PER_PAGE){
if(curitem->icon != ICONCHAR_BACKGROUND){
- DrawCharIcon(rect,MIDDLE,curitem->icon,LISTBTN_BKCOLOR);
+ DrawCharIcon(rect,MIDDLE,curitem->icon,lcd_colors[infoSettings.list_button_color]);
if (pressed != false){
+ GUI_SetColor(WHITE);
GUI_DrawPrect(rect);
}
}
else{
GUI_ClearPrect(rect);
}
+ GUI_RestoreColorDefault();
}
//draw list tiems
else if (curitem->icon != ICONCHAR_BACKGROUND){
@@ -376,7 +390,7 @@ void ListItem_Display(const GUI_RECT* rect, uint8_t position, const LISTITEM * c
{
case LIST_LABEL:
if(curitem->icon != ICONCHAR_BLANK) {
- DrawCharIcon(rect,LEFT_CENTER,curitem->icon, BACKGROUND_COLOR);
+ DrawCharIcon(rect,LEFT_CENTER,curitem->icon, lcd_colors[infoSettings.bg_color]);
pos.x += (BYTE_HEIGHT + 1);
}
textarea_width = LISTITEM_WIDTH - (pos.x + 1); //width after removing the width for icon
@@ -402,7 +416,7 @@ void ListItem_Display(const GUI_RECT* rect, uint8_t position, const LISTITEM * c
GUI_ClearPrect(rect);
if(curitem->icon != ICONCHAR_BLANK) {
- DrawCharIcon(rect,LEFT_CENTER,curitem->icon,BLACK);
+ DrawCharIcon(rect,LEFT_CENTER,curitem->icon,lcd_colors[infoSettings.bg_color]);
pos.x += (BYTE_HEIGHT + 1);
}
textarea_width = LISTITEM_WIDTH - (pos.x + BYTE_HEIGHT + 2); //width after removing the width for icon
@@ -418,7 +432,7 @@ void ListItem_Display(const GUI_RECT* rect, uint8_t position, const LISTITEM * c
case LIST_CUSTOMVALUE:
if(curitem->icon != ICONCHAR_BLANK) {
- DrawCharIcon(rect,LEFT_CENTER,curitem->icon,BLACK);
+ DrawCharIcon(rect,LEFT_CENTER,curitem->icon,lcd_colors[infoSettings.bg_color]);
pos.x += (BYTE_HEIGHT + 3);
}
GUI_ClearRect(pos.x, rect->y0, rect->x1 - BYTE_WIDTH*8 -1, rect->y1); // clear only text area
@@ -465,7 +479,7 @@ void ListItem_DisplayToggle(uint16_t sx, uint16_t sy, uint8_t iconchar_state)
//GUI_ClearPrect(&rect_item);
GUI_SetTextMode(GUI_TEXTMODE_NORMAL);
- GUI_SetColor(LISTBTN_BKCOLOR);
+ GUI_SetColor(lcd_colors[infoSettings.list_border_color]);
GUI_DispString(sx, sy, (uint8_t*)GET_ICONCHAR[ICONCHAR_TOGGLE_BODY]);
GUI_SetTextMode(GUI_TEXTMODE_TRANS);
@@ -493,7 +507,7 @@ void ListItem_DisplayCustomValue(const GUI_RECT* rect,LABEL value,int i)
GUI_ClearPrect(&rectVal);
GUI_SetTextMode(GUI_TEXTMODE_NORMAL);
- GUI_SetColor(LISTBTN_BKCOLOR);
+ GUI_SetColor(lcd_colors[infoSettings.bg_color]);
GUI_DrawPrect(&rectVal);
GUI_SetTextMode(GUI_TEXTMODE_TRANS);
@@ -501,17 +515,25 @@ void ListItem_DisplayCustomValue(const GUI_RECT* rect,LABEL value,int i)
char tempstr[10];
- if(value.index == LABEL_DYNAMIC){
- if (dynamic_value[i] < 1000.0f){
- my_sprintf(tempstr, "%.2f",dynamic_value[i]);
+ if (value.index == LABEL_CUSTOM_VALUE) //show custom numeric value
+ {
+ if (dynamic_value[i] < 1000.0f)
+ {
+ my_sprintf(tempstr, "%.2f", dynamic_value[i]);
}
- else{
- my_sprintf(tempstr, "%.1f",dynamic_value[i]);
+ else
+ {
+ my_sprintf(tempstr, "%.1f", dynamic_value[i]);
}
- GUI_DispStringInPrect(&rectVal,(u8*)tempstr);
+ GUI_DispStringInPrect(&rectVal, (u8 *)tempstr);
}
- else{
- GUI_DispStringInPrect(&rectVal,textSelect(value.index));
+ else if (value.index == LABEL_DYNAMIC) //show custom text value
+ {
+ GUI_DispStringInPrect(&rectVal, (u8 *)getDynamicTextValue(i));
+ }
+ else //show regular text labels
+ {
+ GUI_DispStringInPrect(&rectVal, textSelect(value.index));
}
GUI_RestoreColorDefault();
diff --git a/TFT/src/User/API/UI/list_item.h b/TFT/src/User/API/UI/list_item.h
index b695316363..e0ecd161ce 100644
--- a/TFT/src/User/API/UI/list_item.h
+++ b/TFT/src/User/API/UI/list_item.h
@@ -45,10 +45,17 @@ typedef enum
uint8_t * IconCharSelect(uint8_t sel);
-void setDynamicLabel(uint8_t i,char *label);
-char * getDynamicLabel(uint8_t i);
-void setDynamicValue(uint8_t i,float value);
-float getDynamicValue(uint8_t i);
+
+void setDynamicLabel(uint8_t i,char *label); //set list item title to any text
+char * getDynamicLabel(uint8_t i); //get the custom text of the list item title
+
+void setDynamicTextValue(uint8_t i, char *label); //set list item value to any text (upto 7 characters)
+char * getDynamicTextValue(uint8_t i); //get the custom text of the list item value
+
+void setDynamicValue(uint8_t i,float value); //set list item value to any numeric value (upto 7 digits)
+float getDynamicValue(uint8_t i); //get the custom numeric value of the list item value
+
+
void DrawCharIcon(const GUI_RECT * rect,ICON_POS iconalign, uint16_t iconindex, uint16_t btn_color);
void ListItem_Display(const GUI_RECT* rect, uint8_t positon, const LISTITEM * curitem, bool pressed);
void ListMenuSetItem (const LISTITEM * menuItem, uint8_t positon);
diff --git a/TFT/src/User/API/boot.c b/TFT/src/User/API/boot.c
index 3c938d55fe..3244d785e6 100644
--- a/TFT/src/User/API/boot.c
+++ b/TFT/src/User/API/boot.c
@@ -131,7 +131,7 @@ void updateIcon(void)
int notfound = 0;
char tempstr[50];
char nowBmp[64];
- GUI_Clear(BACKGROUND_COLOR);
+ GUI_Clear(lcd_colors[infoSettings.bg_color]);
GUI_DispString(5, PADDING, (u8 *)"Updating Logo");
GUI_ClearPrect(&iconUpdateRect);
if (bmpDecode(BMP_ROOT_DIR "/Logo.bmp", LOGO_ADDR))
@@ -145,7 +145,7 @@ void updateIcon(void)
dispIconFail((u8 *)(BMP_ROOT_DIR "/Logo.bmp"));
}
- GUI_Clear(BACKGROUND_COLOR);
+ GUI_Clear(lcd_colors[infoSettings.bg_color]);
GUI_DispString(5, PADDING, (u8 *)"Updating Icons");
for (int i = 0; i < COUNT(iconBmpName); i++)
@@ -230,7 +230,7 @@ void updateFont(char *font, u32 addr)
tempbuf = malloc(W25QXX_SECTOR_SIZE);
if (tempbuf == NULL) return;
- GUI_Clear(BACKGROUND_COLOR);
+ GUI_Clear(lcd_colors[infoSettings.bg_color]);
my_sprintf((void *)buffer,"%s Size: %dKB",font, (u32)f_size(&myfp)>>10);
GUI_DispString(0, 100, (u8*)buffer);
GUI_DispString(0, 140, (u8*)"Updating: %");
@@ -272,7 +272,7 @@ void scanRenameUpdate(void) {
if (f_dir_exists(ROOT_DIR)) { // ROOT_DIR exists
if (f_dir_exists(ROOT_DIR ".CUR")) { // old ROOT_DIR also exists
- GUI_Clear(BACKGROUND_COLOR);
+ GUI_Clear(lcd_colors[infoSettings.bg_color]);
// It will take some time to delete the old ROOT_DIR, so display "Deleting" on the screen to tell user.
GUI_DispStringInRect(0, 0, LCD_WIDTH, LCD_HEIGHT, (uint8_t *)"Deleting old ROOT_DIR...");
f_remove_full_dir(ROOT_DIR ".CUR");
@@ -286,6 +286,12 @@ void scanRenameUpdate(void) {
}
f_rename(FIRMWARE_NAME ".bin", FIRMWARE_NAME ".CUR");
}
+ if (f_file_exists(CONFIG_FILE_PATH)) { // config exists
+ if (f_file_exists(CONFIG_FILE_PATH ".CUR")) { // old config also exists
+ f_unlink(CONFIG_FILE_PATH ".CUR");
+ }
+ f_rename(CONFIG_FILE_PATH, CONFIG_FILE_PATH ".CUR");
+ }
}
void scanUpdates(void)
@@ -298,6 +304,7 @@ void scanUpdates(void)
if (f_dir_exists(BMP_ROOT_DIR)) {
updateIcon();
}
+ getConfigFromFile();
scanRenameUpdate();
scanResetDir();
}
diff --git a/TFT/src/User/API/boot.h b/TFT/src/User/API/boot.h
index e5055f1efc..65968b9647 100644
--- a/TFT/src/User/API/boot.h
+++ b/TFT/src/User/API/boot.h
@@ -3,6 +3,7 @@
#include "variants.h"
#include "stdbool.h"
+#include "config.h"
#define W25QXX_SECTOR_SIZE (0x1000) // 4096-4K
@@ -11,11 +12,19 @@
#define WORD_UNICODE 0x4B000 // unicode (+0x480000 4.5M)
#define BYTE_ASCII_ADDR (WORD_UNICODE+0x480000) // ascii (+0x1000 4K)
//#define BYTE_RESERVE_ADDR 0x710000
-#define ICON_ADDR(num) ((num)*0x5000+BYTE_ASCII_ADDR+0x1000)
+#define STRINGS_STORE_ADDR (BYTE_ASCII_ADDR+0x1000) //for label strings from config file
+#define STRINGS_STORE_MAX_SIZE 0x5000 //label strings max size
+#define PRINT_GCODES_ADDR (STRINGS_STORE_ADDR+STRINGS_STORE_MAX_SIZE) //for start/end/cancel gcodes from config file
+#define PRINT_GCODES_MAX_SIZE 0x5000 //start/end/cancel gcodes max size
+#define CUSTOM_GCODE_ADDR (PRINT_GCODES_ADDR+PRINT_GCODES_MAX_SIZE) //for custom gcodes from config file
+#define CUSTOM_GCODE_MAX_SIZE 0x5000 //custom gocdes max size
+
+#define ICON_ADDR(num) ((num)*0x5000+CUSTOM_GCODE_ADDR+CUSTOM_GCODE_MAX_SIZE)
#define INFOBOX_ADDR (ICON_ADDR(ICON_PREVIEW) + 0x5000) // total byte size 0xA7F8
#define SMALL_ICON_START_ADDR (INFOBOX_ADDR+0xA7F8)
#define SMALL_ICON_ADDR(num) ((num)*0x1000+SMALL_ICON_START_ADDR)
+
#define ADMIN_MODE_FILE "0:admin.txt"
#define FIRMWARE_NAME STRINGIFY(HARDWARE) "." STRINGIFY(SOFTWARE_VERSION)
#define BMP_ROOT_DIR "0:" ROOT_DIR "/bmp"
diff --git a/TFT/src/User/API/config.c b/TFT/src/User/API/config.c
new file mode 100644
index 0000000000..582ae54f61
--- /dev/null
+++ b/TFT/src/User/API/config.c
@@ -0,0 +1,957 @@
+
+#include "config.h"
+
+//#define CONFIG_DEBUG // To be used only when calling 'getConfigFromFile()' after boot process
+#ifdef CONFIG_DEBUG
+#define PRINTDEBUG(x) Serial_Puts(SERIAL_PORT, x);
+#else
+#define PRINTDEBUG(x)
+#endif
+
+
+const GUI_POINT pointConfigTitle = {2,2};
+const GUI_RECT rectTitleline = {0, BYTE_HEIGHT+4, LCD_WIDTH, BYTE_HEIGHT+6};
+const GUI_RECT recterror = {BYTE_WIDTH/2-2, BYTE_HEIGHT*2+2, LCD_WIDTH-BYTE_WIDTH/2+2, LCD_HEIGHT-(BYTE_HEIGHT*4)-4};
+const GUI_RECT recterrortxt = {BYTE_WIDTH/2, BYTE_HEIGHT*2+4, LCD_WIDTH-BYTE_WIDTH/2, LCD_HEIGHT-(BYTE_HEIGHT*4)-6};
+const GUI_RECT rectProgressframe = {BYTE_WIDTH/2-2, LCD_HEIGHT-(BYTE_HEIGHT*2+BYTE_HEIGHT/2), LCD_WIDTH-BYTE_WIDTH/2+2,LCD_HEIGHT-BYTE_HEIGHT/2};
+const GUI_POINT pointProgressText = {BYTE_WIDTH/2-2, LCD_HEIGHT-(BYTE_HEIGHT*4)};
+
+u16 foundkeys = 0;
+
+CONFIGFILE configFile;
+char cur_line[LINE_MAX_CHAR];
+int customcode_index = 0;
+int customcode_good[CUSTOM_GCODES_COUNT];
+bool scheduleRotate = false;
+
+static CUSTOM_GCODES* configCustomGcodes = NULL;
+PRINT_GCODES* configPrintGcodes = NULL;
+STRINGS_STORE* configStringsStore = NULL;
+
+const char *const config_keywords[CONFIG_COUNT] = {
+ #define X_CONFIG(NAME) CONFIG_##NAME ,
+ #include "config.inc"
+ #undef X_CONFIG
+};
+
+
+void getConfigFromFile(void)
+{
+ configCustomGcodes = (CUSTOM_GCODES*)malloc(sizeof(CUSTOM_GCODES));
+ configPrintGcodes = (PRINT_GCODES*)malloc(sizeof(PRINT_GCODES));
+ configStringsStore = (STRINGS_STORE*)malloc(sizeof(STRINGS_STORE));
+ customcode_index = 0;
+ bool comment_mode = false;
+ bool comment_space = true;
+ char cur_char;
+ char last_char = 0;
+ u8 count = 0;
+ UINT br = 0;
+ if (f_file_exists(CONFIG_FILE_PATH) == false)
+ return;
+
+ drawProgressPage();
+
+ if (f_open(&configFile.file, CONFIG_FILE_PATH, FA_OPEN_EXISTING | FA_READ) != FR_OK)
+ {
+ PRINTDEBUG("parse error\n");
+ showError(CSTAT_FILE_NOTOPEN);
+ return;
+ }
+ else
+ {
+
+ configFile.size = f_size(&configFile.file);
+ if (configFile.size == 0)
+ {
+ showError(CSTAT_FILE_INVALID);
+ f_close(&configFile.file);
+ return;
+ }
+ for (; configFile.cur < configFile.size;)
+ {
+ if (f_read(&configFile.file, &cur_char, 1, &br) != FR_OK)
+ {
+ PRINTDEBUG("read error\n");
+ return;
+ }
+ configFile.cur++;
+
+ //
+ if (cur_char == '\n') //'\n' is end flag for each config line
+ {
+ comment_mode = false; //for new command
+ comment_space = true;
+ if (count != 0)
+ {
+ //cur_line[count++] = '\n';
+ cur_line[count++] = '\0';
+ cur_line[count] = 0; //terminate string
+ PRINTDEBUG("\n");
+ PRINTDEBUG(cur_line);
+ parseConfigLine();
+ drawProgress();
+ count = 0; //clear buffer
+ }
+ }
+ else if (count < LINE_MAX_CHAR - 2)
+ {
+ if (cur_char == '#')
+ comment_mode = true;
+ else
+ {
+ if (comment_space && cur_char != ' ') //ignore ' ' space bytes
+ comment_space = false;
+ if (!comment_mode && !comment_space && cur_char != '\r') //normal code
+ {
+ if (cur_char == 'n' && last_char == '\\') //replace "\n" with new line char('\n')
+ {
+ cur_char = '\n';
+ count--;
+ }
+ cur_line[count++] = cur_char;
+ last_char = cur_char;
+ }
+ }
+ }
+ }
+ //store custom codes count
+ configCustomGcodes->count = customcode_index;
+
+ PRINTDEBUG("\ngcode stored at 1:");
+ PRINTDEBUG(configCustomGcodes->gcode[1]);
+ if(scheduleRotate)
+ {
+ LCD_RefreshDirection();
+ TSC_Calibration();
+ }
+ storePara();
+ saveConfig();
+ free(configCustomGcodes);
+ free(configPrintGcodes);
+ free(configStringsStore);
+
+ f_close(&configFile.file);
+ configFile.cur = 0;
+ configFile.size = 0;
+ }
+}
+
+static u16 c_index = 0;
+
+//check if keyword exits in the buffer line
+static char key_seen(const char *keyStr)
+{
+ u16 i;
+ for (c_index = 0; c_index < ACK_MAX_SIZE && cur_line[c_index] != 0; c_index++)
+ {
+ for (i = 0; keyStr[i] != 0 && cur_line[c_index + i] != 0 && cur_line[c_index + i] == keyStr[i]; i++)
+ {
+ }
+ if (keyStr[i] == 0)
+ {
+ c_index += i;
+ return true;
+ }
+ }
+ return false;
+}
+
+// Get the int after config keyword.
+static u32 config_value(void)
+{
+ return (strtol(&cur_line[c_index], NULL, 10));
+}
+
+// Get the float after config keyword.
+static float config_float(void)
+{
+ return (strtod(&cur_line[c_index], NULL));
+}
+
+//check if the value is within min and max limits
+bool inLimit(int val, int min, int max)
+{
+ if (val < min || val > max)
+ {
+ showError(CSTAT_INVALID_VALUE);
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+}
+
+
+//check keywords in the config line in buffer
+void parseConfigLine(void)
+{
+ for (u16 i = 0; i < CONFIG_COUNT; i++){
+ if (key_seen(config_keywords[i]))
+ {
+ PRINTDEBUG("\n");
+ PRINTDEBUG((char*)config_keywords[i]);
+ parseConfigKey(i);
+ foundkeys++;
+ return;
+ }
+ }
+ showError(CSTAT_UNKNOWN_KEYWORD);
+}
+
+// Treat all values other than 0 as 1.
+int8_t getOnOff(void)
+{
+ if (config_value() == 0)
+ return 0;
+ else
+ return 1;
+}
+
+void saveConfig(void)
+{
+ writeConfig((uint8_t *)configCustomGcodes, sizeof(CUSTOM_GCODES), CUSTOM_GCODE_ADDR, CUSTOM_GCODE_MAX_SIZE);
+
+ writeConfig((uint8_t *)configPrintGcodes, sizeof(PRINT_GCODES), PRINT_GCODES_ADDR, PRINT_GCODES_MAX_SIZE);
+
+ writeConfig((uint8_t *)configStringsStore, sizeof(STRINGS_STORE), STRINGS_STORE_ADDR, STRINGS_STORE_MAX_SIZE);
+
+ #ifdef CONFIG_DEBUG
+ CUSTOM_GCODES tempgcode;// = NULL;
+
+ uint8_t * data_r = (u8 *)&tempgcode;
+
+ W25Qxx_ReadBuffer(data_r,CUSTOM_GCODE_ADDR,sizeof(CUSTOM_GCODES));
+ PRINTDEBUG("\nread done");
+
+ PRINTDEBUG("\nread from flash:");
+ PRINTDEBUG(tempgcode.gcode[1]);
+ #endif
+}
+
+void writeConfig(uint8_t* dataBytes, uint16_t numBytes, uint32_t addr, uint32_t maxSize){
+ //do not proceed if data size is larger than reserved max size.
+ if (numBytes > maxSize)
+ {
+ PRINTDEBUG("\nwrite error\n");
+ showError(CSTAT_STORAGE_LOW);
+ return;
+ }
+ int sectorCount =maxSize/W25QXX_SECTOR_SIZE;
+
+ //erase part of flash to be rewritten
+ for (int i = 0; i < sectorCount;i++){
+ W25Qxx_EraseSector(addr+(i*W25QXX_SECTOR_SIZE));
+ }
+ Delay_ms(100); //give time for spi flash to settle
+
+ //write data to spi flash
+ W25Qxx_WriteBuffer(dataBytes,addr,numBytes);
+ Delay_ms(100); //give time for spi flash to settle
+
+}
+
+//Reset & store config settings
+void resetConfig(void)
+{
+ const uint8_t cg_enabled[MAX_GCODE_LENGTH] = CUSTOM_GCODE_ENABLED;
+ const char cg_list[][MAX_GCODE_LENGTH] = CUSTOM_GCODE_LIST;
+ const char cg_names[][MAX_GCODE_LENGTH] = CUSTOM_GCODE_LABELS;
+ const char cg_preheatnames[][MAX_GCODE_LENGTH] = PREHEAT_LABELS;
+
+
+ CUSTOM_GCODES tempCG;
+ STRINGS_STORE tempST;
+ PRINT_GCODES tempPC;
+
+ //restore custom gcode presets
+ int n = 0;
+ for (int i = 0; i < CUSTOM_GCODES_COUNT;i++)
+ {
+ if(cg_enabled[i] == 1){
+ strcpy(tempCG.gcode[n],cg_list[i]);
+ strcpy(tempCG.name[n],cg_names[i]);
+ n++;
+ }
+ }
+ tempCG.count = n;
+
+ //restore strings store
+ strcpy(tempST.marlin_title,ST7920_BANNER_TEXT);
+
+ for (int i = 0; i < PREHEAT_COUNT;i++)
+ {
+ strcpy(tempST.preheat_name[i],cg_preheatnames[i]);
+ }
+
+ //restore print gcodes
+ strcpy(tempPC.start_gcode,PRINT_START_GCODE);
+ strcpy(tempPC.end_gcode,PRINT_END_GCODE);
+ strcpy(tempPC.cancel_gcode,PRINT_CANCEL_GCODE);
+
+ // write restored config
+ writeConfig((uint8_t *)&tempCG, sizeof(CUSTOM_GCODES), CUSTOM_GCODE_ADDR, CUSTOM_GCODE_MAX_SIZE);
+ writeConfig((uint8_t *)&tempPC, sizeof(PRINT_GCODES), PRINT_GCODES_ADDR, PRINT_GCODES_MAX_SIZE);
+ writeConfig((uint8_t *)&tempPC, sizeof(STRINGS_STORE), STRINGS_STORE_ADDR, STRINGS_STORE_MAX_SIZE);
+}
+
+void drawProgressPage(void)
+{
+ GUI_Clear(BLACK);
+ GUI_DispString(2,2,(u8*)"Updating Configuration...");
+ GUI_FillRectColor(rectTitleline.x0,rectTitleline.y0,rectTitleline.x1,rectTitleline.y1,BLUE);
+ //GUI_DrawPrect(&recterror);
+ GUI_DrawPrect(&rectProgressframe);
+}
+
+void drawProgress(void){
+ char tempstr[50];
+ my_sprintf(tempstr,"Total keywords found: %d",foundkeys);
+ GUI_DispString(pointProgressText.x,pointProgressText.y,(u8*)tempstr);
+ u16 p = map(configFile.cur,0,configFile.size, rectProgressframe.x0,rectProgressframe.x1);
+ GUI_FillRect(rectProgressframe.x0,rectProgressframe.y0,p,rectProgressframe.y1);
+}
+
+void showError(CONFIG_STATS stat)
+{
+ char *ttl;
+ char *txt;
+ GUI_SetBkColor(BLACK);
+ GUI_ClearPrect(&recterrortxt);
+ GUI_DrawPrect(&recterror);
+
+ char tempstr[50];
+
+ switch (stat)
+ {
+ case CSTAT_INVALID_VALUE:
+ GUI_SetColor(ORANGE);
+ ttl = "Invalid Value(s) in:";
+ txt = cur_line;
+ break;
+ case CSTAT_UNKNOWN_KEYWORD:
+ GUI_SetColor(RED);
+ ttl = "Invalid Keyword:";
+ txt = cur_line;
+ break;
+ case CSTAT_FILE_NOTOPEN:
+ GUI_SetColor(RED);
+ ttl = "Error:";
+ my_sprintf(tempstr, "Unable to open %s", CONFIG_FILE_PATH);
+ txt = tempstr;
+ break;
+ case CSTAT_STORAGE_LOW:
+ GUI_SetColor(RED);
+ ttl = "Write Error:";
+ my_sprintf(tempstr, "Config size is larger than allocated size", CONFIG_FILE_PATH);
+ txt = tempstr;
+ break;
+ case CSTAT_FILE_INVALID:
+ default:
+ GUI_SetColor(RED);
+ ttl = "Error:";
+ txt = "Invalid config File";
+ break;
+ }
+ GUI_DispString(recterrortxt.x0, recterrortxt.y0, (u8*)ttl);
+ GUI_DispStringInRect(recterrortxt.x0, recterrortxt.y0 + (BYTE_HEIGHT * 2), recterrortxt.x1, recterrortxt.y1, (u8*)txt);
+ GUI_SetColor(WHITE);
+ Delay_ms(5000);
+}
+
+// parse the keyword values in the buffer
+void parseConfigKey(u16 index)
+{
+ //---------------------------------------------------------general settings
+
+ switch (index)
+ {
+ case C_INDEX_UNIFIEDMENU:
+ infoSettings.unified_menu = getOnOff();
+ break;
+
+ case C_INDEX_UART_BAUDRATE:
+ if (inLimit(config_value(),0,ITEM_BAUDRATE_NUM-1))
+ infoSettings.baudrate = item_baudrate[config_value()];
+ break;
+
+ case C_INDEX_LANGUAGE:
+ if (inLimit(config_value(), 0, LANGUAGE_NUM-1))
+ infoSettings.language = config_value();
+ break;
+
+ case C_INDEX_TITLE_BG:
+ if (inLimit(config_value(), 0, LCD_COLOR_COUNT-1))
+ infoSettings.title_bg_color = config_value();
+ break;
+
+ case C_INDEX_MENU_BG_COLOR:
+ if (inLimit(config_value(), 0, LCD_COLOR_COUNT-1))
+ infoSettings.bg_color = config_value();
+ break;
+
+ case C_INDEX_MENU_FONT_COLOR:
+ if (inLimit(config_value(), 0, LCD_COLOR_COUNT-1))
+ infoSettings.font_color = config_value();
+ break;
+
+ case C_INDEX_NOTIFY_COLOR:
+ if (inLimit(config_value(), 0, LCD_COLOR_COUNT-1))
+ infoSettings.reminder_color = config_value();
+ break;
+
+ case C_INDEX_SD_NOTIFY_COLOR:
+ if (inLimit(config_value(), 0, LCD_COLOR_COUNT-1))
+ infoSettings.sd_reminder_color = config_value();
+ break;
+
+ case C_INDEX_SS_XYZ_BG_COLOR:
+ if (inLimit(config_value(), 0, LCD_COLOR_COUNT-1))
+ infoSettings.status_xyz_bg_color = config_value();
+ break;
+
+ case C_INDEX_LIST_BORDER_COLOR:
+ if (inLimit(config_value(), 0, LCD_COLOR_COUNT-1))
+ infoSettings.list_border_color = config_value();
+ break;
+
+ case C_INDEX_LIST_BUTTON_BG_COLOR:
+ if (inLimit(config_value(), 0, LCD_COLOR_COUNT-1))
+ infoSettings.list_button_color = config_value();
+ break;
+
+ case C_INDEX_MODE:
+ if (inLimit(config_value(), 0, MODE_COUNT-1))
+ infoSettings.mode = config_value();
+ break;
+
+ case C_INDEX_ROTATE_UI:
+ if (infoSettings.rotate_ui != getOnOff())
+ scheduleRotate = true;
+ infoSettings.rotate_ui = getOnOff();
+ break;
+
+ case C_INDEX_TERMINAL_ACK:
+ infoSettings.terminalACK = getOnOff();
+ break;
+
+ case C_INDEX_INVERT_AXIS:
+ if (key_seen("X"))
+ infoSettings.invert_axis[X_AXIS] = getOnOff();
+ if (key_seen("Y"))
+ infoSettings.invert_axis[Y_AXIS] = getOnOff();
+ if (key_seen("Z"))
+ infoSettings.invert_axis[Z_AXIS] = getOnOff();
+ break;
+
+ case C_INDEX_PERSISTENT_TEMP:
+ infoSettings.persistent_info = getOnOff();
+ break;
+
+ case C_INDEX_LIST_MODE:
+ infoSettings.file_listmode = getOnOff();
+ break;
+ break;
+
+ //---------------------------------------------------------Marlin Mode Settings (Only for TFT35_V3.0/TFT24_V1.1/TFT28V3.0)
+#ifdef ST7920_SPI
+ case C_INDEX_MARLIN_BG_COLOR:
+ if (inLimit(config_value(), 0, LCD_COLOR_COUNT-1))
+ infoSettings.marlin_mode_bg_color = config_value();
+ break;
+
+ case C_INDEX_MARLIN_FONT_COLOR:
+ if (inLimit(config_value(), 0, LCD_COLOR_COUNT-1))
+ infoSettings.marlin_mode_font_color = config_value();
+ break;
+
+ case C_INDEX_MARLIN_SHOW_TITLE:
+ infoSettings.marlin_mode_showtitle = getOnOff();
+ break;
+
+ case C_INDEX_MARLIN_TITLE:
+ {
+ char * pchr;
+ pchr = strrchr(cur_line,':') + 1;
+ int utf8len = getUTF8Length((u8*)pchr);
+ int bytelen = strlen(pchr) + 1;
+ if (inLimit(utf8len,NAME_MIN_LENGTH,MAX_STRING_LENGTH) && inLimit(bytelen,NAME_MIN_LENGTH,MAX_GCODE_LENGTH))
+ strcpy(configStringsStore->marlin_title, pchr);
+ }
+ break;
+
+#endif
+ //---------------------------------------------------------Printer / Machine Settings
+
+ case C_INDEX_TOOL_COUNT:
+ if (inLimit(config_value(), 1, MAX_TOOL_COUNT))
+ infoSettings.tool_count = config_value();
+ break;
+
+ case C_INDEX_EXT_COUNT:
+ if (inLimit(config_value(), 1, MAX_EXT_COUNT))
+ infoSettings.ext_count = config_value();
+ break;
+
+ case C_INDEX_FAN_COUNT:
+ if (inLimit(config_value(), 1, MAX_TOOL_COUNT))
+ infoSettings.fan_count = config_value();
+ break;
+
+ case C_INDEX_MAX_TEMP:
+ if (key_seen("BED:"))
+ { if (inLimit(config_value(), MIN_BED_TEMP, MAX_BED_TEMP))
+ infoSettings.max_temp[BED] = config_value();
+ }
+ if (key_seen("T0:"))
+ { if (inLimit(config_value(), MIN_TOOL_TEMP, MAX_TOOL_TEMP))
+ infoSettings.max_temp[BED + 1] = config_value();
+ }
+ if (key_seen("T1:"))
+ { if (inLimit(config_value(), MIN_TOOL_TEMP, MAX_TOOL_TEMP))
+ infoSettings.max_temp[BED + 2] = config_value();
+ }
+ if (key_seen("T2:"))
+ { if (inLimit(config_value(), MIN_TOOL_TEMP, MAX_TOOL_TEMP))
+ infoSettings.max_temp[BED + 3] = config_value();
+ }
+ if (key_seen("T3:"))
+ { if (inLimit(config_value(), MIN_TOOL_TEMP, MAX_TOOL_TEMP))
+ infoSettings.max_temp[BED + 4] = config_value();
+ }
+ if (key_seen("T4:"))
+ { if (inLimit(config_value(), MIN_TOOL_TEMP, MAX_TOOL_TEMP))
+ infoSettings.max_temp[BED + 5] = config_value();
+ }
+ if (key_seen("T5:"))
+ { if (inLimit(config_value(), MIN_TOOL_TEMP, MAX_TOOL_TEMP))
+ infoSettings.max_temp[BED + 6] = config_value();
+ }
+ break;
+
+ case C_INDEX_MIN_TEMP:
+ if (inLimit(config_value(), 25, MAX_TOOL_TEMP))
+ infoSettings.min_ext_temp = config_value();
+ break;
+
+ case C_INDEX_FAN_MAX:
+ if (key_seen("F0:"))
+ { if (inLimit(config_value(), MIN_FAN_SPEED, MAX_FAN_SPEED))
+ infoSettings.fan_max[0] = config_value();
+ }
+ if (key_seen("F1:"))
+ { if (inLimit(config_value(), MIN_FAN_SPEED, MAX_FAN_SPEED))
+ infoSettings.fan_max[1] = config_value();
+ }
+ if (key_seen("F2:"))
+ { if (inLimit(config_value(), MIN_FAN_SPEED, MAX_FAN_SPEED))
+ infoSettings.fan_max[2] = config_value();
+ }
+ if (key_seen("F3:"))
+ { if (inLimit(config_value(), MIN_FAN_SPEED, MAX_FAN_SPEED))
+ infoSettings.fan_max[3] = config_value();
+ }
+ if (key_seen("F4:"))
+ { if (inLimit(config_value(), MIN_FAN_SPEED, MAX_FAN_SPEED))
+ infoSettings.fan_max[4] = config_value();
+ }
+ if (key_seen("F5:"))
+ { if (inLimit(config_value(), MIN_FAN_SPEED, MAX_FAN_SPEED))
+ infoSettings.fan_max[5] = config_value();
+ }
+ break;
+
+ case C_INDEX_BUILD_MIN:
+ if (key_seen("X"))
+ { if (inLimit(config_value(), MIN_SIZE_LIMIT, MAX_SIZE_LIMIT))
+ infoSettings.machine_size_min[X_AXIS] = config_value();
+ }
+ if (key_seen("Y"))
+ { if (inLimit(config_value(), MIN_SIZE_LIMIT, MAX_SIZE_LIMIT))
+ infoSettings.machine_size_min[Y_AXIS] = config_value();
+ }
+ if (key_seen("Z"))
+ { if (inLimit(config_value(), MIN_SIZE_LIMIT, MAX_SIZE_LIMIT))
+ infoSettings.machine_size_min[Z_AXIS] = config_value();
+ }
+ break;
+
+ case C_INDEX_BUILD_MAX:
+ if (key_seen("X"))
+ { if (inLimit(config_value(), MIN_SIZE_LIMIT, MAX_SIZE_LIMIT))
+ infoSettings.machine_size_max[X_AXIS] = config_value();
+ }
+ if (key_seen("Y"))
+ { if (inLimit(config_value(), MIN_SIZE_LIMIT, MAX_SIZE_LIMIT))
+ infoSettings.machine_size_max[Y_AXIS] = config_value();
+ }
+ if (key_seen("Z"))
+ { if (inLimit(config_value(), MIN_SIZE_LIMIT, MAX_SIZE_LIMIT))
+ infoSettings.machine_size_max[Z_AXIS] = config_value();
+ }
+ break;
+
+ case C_INDEX_MOVE_SPEED:
+ if (key_seen("S"))
+ { if (inLimit(config_value(), MIN_SPEED_LIMIT, MAX_SPEED_LIMIT))
+ infoSettings.axis_speed[0] = config_value();
+ }
+ if (key_seen("N"))
+ { if (inLimit(config_value(), MIN_SPEED_LIMIT, MAX_SPEED_LIMIT))
+ infoSettings.axis_speed[1] = config_value();
+ }
+ if (key_seen("F"))
+ { if (inLimit(config_value(), MIN_SPEED_LIMIT, MAX_SPEED_LIMIT))
+ infoSettings.axis_speed[2] = config_value();
+ }
+ break;
+
+ case C_INDEX_EXT_SPEED:
+ if (key_seen("S"))
+ { if (inLimit(config_value(), MIN_SPEED_LIMIT, MAX_SPEED_LIMIT))
+ infoSettings.ext_speed[0] = config_value();
+ }
+ if (key_seen("N"))
+ { if (inLimit(config_value(), MIN_SPEED_LIMIT, MAX_SPEED_LIMIT))
+ infoSettings.ext_speed[1] = config_value();
+ }
+ if (key_seen("F"))
+ { if (inLimit(config_value(), MIN_SPEED_LIMIT, MAX_SPEED_LIMIT))
+ infoSettings.ext_speed[2] = config_value();
+ }
+ break;
+
+ case C_INDEX_AUTO_LEVEL:
+ infoSettings.auto_load_leveling = getOnOff();
+ break;
+
+ case C_INDEX_M27_DELAY:
+ if (inLimit(config_value(), MIN_DELAY_SEC, MAX_DELAY_SEC))
+ infoSettings.m27_refresh_time = config_value();
+ break;
+
+ case C_INDEX_M27_KEEP_ON:
+ infoSettings.m27_active = getOnOff();
+ break;
+
+ case C_INDEX_FAN_PERCENT:
+ infoSettings.fan_percentage = getOnOff();
+ break;
+
+ case C_INDEX_PAUSE_RETRACT:
+ if (key_seen("R"))
+ { if (inLimit(config_float(), MIN_RETRACT_LIMIT, MAX_RETRACT_LIMIT))
+ infoSettings.pause_retract_len = config_float();
+ }
+ if (key_seen("P"))
+ { if (inLimit(config_float(), MIN_RETRACT_LIMIT, MAX_RETRACT_LIMIT))
+ infoSettings.resume_purge_len = config_float();
+ }
+ break;
+
+ case C_INDEX_PAUSE_POS:
+ if (key_seen("X"))
+ { if (inLimit(config_float(), MIN_POS_LIMIT, MAX_SIZE_LIMIT))
+ infoSettings.pause_pos[X_AXIS] = config_float();
+ }
+ if (key_seen("Y"))
+ { if (inLimit(config_float(), MIN_POS_LIMIT, MAX_SIZE_LIMIT))
+ infoSettings.pause_pos[Y_AXIS] = config_float();
+ }
+ break;
+
+ case C_INDEX_PAUSE_Z_RAISE:
+ if (inLimit(config_float(), MIN_POS_LIMIT, MAX_SIZE_LIMIT))
+ infoSettings.pause_z_raise = config_float();
+ break;
+
+ case C_INDEX_PAUSE_FEEDRATE:
+ if (key_seen("X"))
+ { if (inLimit(config_value(), MIN_SPEED_LIMIT, MAX_SPEED_LIMIT))
+ infoSettings.pause_feedrate[0] = config_value();
+ }
+ if (key_seen("Y"))
+ { if (inLimit(config_value(), MIN_SPEED_LIMIT, MAX_SPEED_LIMIT))
+ infoSettings.pause_feedrate[1] = config_value();
+ }
+ if (key_seen("Z"))
+ { if (inLimit(config_value(), MIN_SPEED_LIMIT, MAX_SPEED_LIMIT))
+ infoSettings.pause_feedrate[2] = config_value();
+ }
+ if (key_seen("E"))
+ { if (inLimit(config_value(), MIN_SPEED_LIMIT, MAX_SPEED_LIMIT))
+ infoSettings.pause_feedrate[3] = config_value();
+ }
+ break;
+
+ case C_INDEX_LEVEL_EDGE:
+ if (inLimit(config_value(), MIN_POS_LIMIT, MAX_SIZE_LIMIT))
+ infoSettings.level_edge = config_value();
+ break;
+
+ case C_INDEX_LEVEL_Z_POS:
+ if (inLimit(config_float(), MIN_POS_LIMIT, MAX_SIZE_LIMIT))
+ infoSettings.level_z_pos = config_float();
+ break;
+
+ case C_INDEX_LEVEL_Z_RAISE:
+ if (inLimit(config_float(), MIN_POS_LIMIT, MAX_SIZE_LIMIT))
+ infoSettings.level_z_raise = config_float();
+ break;
+
+ case C_INDEX_LEVEL_FEEDRATE:
+ if (key_seen("X"))
+ { if (inLimit(config_value(), MIN_SPEED_LIMIT, MAX_SPEED_LIMIT))
+ infoSettings.level_feedrate[0] = config_value();
+ }
+ if (key_seen("Y"))
+ { if (inLimit(config_value(), MIN_SPEED_LIMIT, MAX_SPEED_LIMIT))
+ infoSettings.level_feedrate[1] = config_value();
+ }
+ if (key_seen("Z"))
+ { if (inLimit(config_value(), MIN_SPEED_LIMIT, MAX_SPEED_LIMIT))
+ infoSettings.level_feedrate[2] = config_value();
+ }
+ break;
+
+ case C_INDEX_PREHEAT_NAME_1:
+ case C_INDEX_PREHEAT_NAME_2:
+ case C_INDEX_PREHEAT_NAME_3:
+ {
+ char pchr[LINE_MAX_CHAR];
+ strcpy(pchr, strrchr(cur_line, ':') + 1);
+ int utf8len = getUTF8Length((u8*)pchr);
+ int bytelen = strlen(pchr) + 1;
+ if (inLimit(utf8len,NAME_MIN_LENGTH,MAX_STRING_LENGTH) && inLimit(bytelen,NAME_MIN_LENGTH,MAX_GCODE_LENGTH))
+ strcpy(configStringsStore->preheat_name[index - C_INDEX_PREHEAT_NAME_1], pchr);
+ }
+
+ break;
+
+ case C_INDEX_PREHEAT_TEMP_1:
+ case C_INDEX_PREHEAT_TEMP_2:
+ case C_INDEX_PREHEAT_TEMP_3:
+ {
+ int val_index = index - C_INDEX_PREHEAT_TEMP_1;
+ if (key_seen("B:"))
+ { if (inLimit(config_value(), MIN_BED_TEMP, MAX_BED_TEMP))
+ infoSettings.preheat_bed[val_index] = config_value();
+ }
+ if (key_seen("T:"))
+ { if (inLimit(config_value(), MIN_TOOL_TEMP, MAX_TOOL_TEMP))
+ infoSettings.preheat_bed[val_index] = config_value();
+ }
+ }
+ break;
+
+ //---------------------------------------------------------Power Supply Settings (if connected to TFT Controller):
+
+#ifdef PS_ON_PIN
+
+ case C_INDEX_PS_ON:
+ if (config_value() == 1)
+ infoSettings.auto_off = 1;
+ else if(config_value() == 2)
+ infoSettings.auto_off = 2;
+ else
+ infoSettings.auto_off = 0;
+ break;
+
+ case C_INDEX_PS_LOGIC:
+ infoSettings.powerloss_invert = getOnOff();
+ break;
+
+ case C_INDEX_SHUTDOWN_TEMP:
+ if (inLimit(config_value(), MIN_BED_TEMP, MAX_BED_TEMP))
+ infoSettings.auto_off_temp = config_value();
+ break;
+
+#endif
+
+ //---------------------------------------------------------Power Loss Recovery & BTT UPS Settings (if connected to TFT Controller:
+
+#ifdef BTT_MINI_UPS
+
+ case C_INDEX_POWERLOSS_HOME:
+ infoSettings.powerloss_home = getOnOff();
+ break;
+
+ case C_INDEX_POWERLOSS_ZRAISE:
+ if (inLimit(config_float(), MIN_SIZE_LIMIT, MAX_SIZE_LIMIT))
+ infoSettings.powerloss_z_raise = config_float();
+ break;
+
+ case C_INDEX_BTT_MINIUPS:
+ infoSettings.btt_ups = getOnOff();
+ break;
+
+#endif
+
+ //---------------------------------------------------------Filament Runout Settings (if connected to TFT Controller):
+
+#ifdef FIL_RUNOUT_PIN
+ case C_INDEX_RUNOUT:
+ infoSettings.runout = getOnOff();
+ break;
+
+ case C_INDEX_RUNOUT_LOGIC:
+ infoSettings.runout_invert = getOnOff();
+ break;
+
+ case C_INDEX_RUNOUT_NOISE:
+ if (inLimit(config_value(), MIN_DELAY_MS, MAX_DELAY_MS))
+ infoSettings.runout_noise_ms = config_value();
+ break;
+
+ case C_INDEX_RUNOUT_DISTANCE:
+ if (inLimit(config_value(), MIN_RUNOUT_DISTANCE, MAX_RUNOUT_DISTANCE))
+ infoSettings.runout_distance = config_value();
+ break;
+#endif
+ //---------------------------------------------------------other device specific settings
+#ifdef BUZZER_PIN
+ case C_INDEX_BUZZER_ON:
+ if (inLimit(config_value(),0,1))
+ {
+ if (config_value() == 0)
+ infoSettings.silent = 1;
+ else
+ infoSettings.silent = 0;
+ }
+ break;
+#endif
+
+#ifdef LED_COLOR_PIN
+ case C_INDEX_KNOB_COLOR:
+ if (inLimit(config_value(), 0, LED_COLOR_NUM-1))
+ infoSettings.knob_led_color = config_value();
+ break;
+#endif
+
+#ifdef LCD_LED_PWM_CHANNEL
+ case C_INDEX_BRIGHTNESS:
+ if (inLimit(config_value(), 0, ITEM_BRIGHTNESS_NUM-1))
+ infoSettings.lcd_brightness = config_value();
+ break;
+ case C_INDEX_BRIGHTNESS_IDLE:
+ if (inLimit(config_value(), 0, ITEM_BRIGHTNESS_NUM-1))
+ infoSettings.lcd_idle_brightness = config_value();
+ break;
+ case C_INDEX_BRIGHTNESS_IDLE_DELAY:
+ if (inLimit(config_value(), 0, ITEM_SECONDS_NUM-1))
+ infoSettings.lcd_idle_timer = config_value();
+ break;
+#endif
+ //---------------------------------------------------------CustomG-Code Commands upto 15 custom G-code
+ case C_INDEX_CUSTOM_LABEL_1:
+ case C_INDEX_CUSTOM_LABEL_2:
+ case C_INDEX_CUSTOM_LABEL_3:
+ case C_INDEX_CUSTOM_LABEL_4:
+ case C_INDEX_CUSTOM_LABEL_5:
+ case C_INDEX_CUSTOM_LABEL_6:
+ case C_INDEX_CUSTOM_LABEL_7:
+ case C_INDEX_CUSTOM_LABEL_8:
+ case C_INDEX_CUSTOM_LABEL_9:
+ case C_INDEX_CUSTOM_LABEL_10:
+ case C_INDEX_CUSTOM_LABEL_11:
+ case C_INDEX_CUSTOM_LABEL_12:
+ case C_INDEX_CUSTOM_LABEL_13:
+ case C_INDEX_CUSTOM_LABEL_14:
+ case C_INDEX_CUSTOM_LABEL_15:
+ {
+ char pchr[LINE_MAX_CHAR];
+ strcpy(pchr,strrchr(cur_line,':') + 1);
+ int utf8len = getUTF8Length((u8*)pchr);
+ int bytelen = strlen(pchr) + 1;
+ if (inLimit(utf8len,NAME_MIN_LENGTH,MAX_GCODE_NAME_LENGTH) && inLimit(bytelen,NAME_MIN_LENGTH,MAX_GCODE_LENGTH))
+ {
+ strcpy(configCustomGcodes->name[customcode_index++], pchr);
+ customcode_good[index - C_INDEX_CUSTOM_LABEL_1] = 1; //set name was found ok
+ }
+ else
+ {
+ customcode_good[index - C_INDEX_CUSTOM_LABEL_1] = 0;//set name was not ok
+ }
+ break;
+ }
+ case C_INDEX_CUSTOM_GCODE_1:
+ case C_INDEX_CUSTOM_GCODE_2:
+ case C_INDEX_CUSTOM_GCODE_3:
+ case C_INDEX_CUSTOM_GCODE_4:
+ case C_INDEX_CUSTOM_GCODE_5:
+ case C_INDEX_CUSTOM_GCODE_6:
+ case C_INDEX_CUSTOM_GCODE_7:
+ case C_INDEX_CUSTOM_GCODE_8:
+ case C_INDEX_CUSTOM_GCODE_9:
+ case C_INDEX_CUSTOM_GCODE_10:
+ case C_INDEX_CUSTOM_GCODE_11:
+ case C_INDEX_CUSTOM_GCODE_12:
+ case C_INDEX_CUSTOM_GCODE_13:
+ case C_INDEX_CUSTOM_GCODE_14:
+ case C_INDEX_CUSTOM_GCODE_15:
+ {
+ int fileindex = index - C_INDEX_CUSTOM_GCODE_1; //actual gcode index in config file
+ char pchr[LINE_MAX_CHAR];
+ strcpy(pchr,strrchr(cur_line,':') + 1);
+ int len = strlen(pchr) + 1;
+ if (inLimit(len,GCODE_MIN_LENGTH,MAX_GCODE_LENGTH) && (customcode_good[fileindex] == 1)) //check if gcode length is ok and the name was ok
+ {
+ strcpy(configCustomGcodes->gcode[customcode_index-1], pchr);
+ }
+ else if (customcode_good[fileindex] == 1) //if name was ok but gcode is not ok then reduce count
+ {
+ customcode_index--;
+ }
+ break;
+ }
+ //---------------------------------------------------------Start, End & Cancel G-codes
+ case C_INDEX_START_GCODE_ON:
+ infoSettings.send_start_gcode = getOnOff();
+ break;
+
+ case C_INDEX_END_GOCODE_ON:
+ infoSettings.send_end_gcode = getOnOff();
+ break;
+
+ case C_INDEX_START_GCODE:
+ {
+ char * pchr;
+ pchr = strrchr(cur_line,':') + 1;
+ int len = strlen(pchr);
+ if (inLimit(len,GCODE_MIN_LENGTH,MAX_GCODE_LENGTH))
+ {
+ strcpy(configPrintGcodes->start_gcode, pchr);
+ }
+
+ }
+ break;
+ case C_INDEX_END_GCODE:
+ {
+ char * pchr;
+ pchr = strrchr(cur_line,':') + 1;
+ int len = strlen(pchr);
+ if (inLimit(len,GCODE_MIN_LENGTH,MAX_GCODE_LENGTH))
+ {
+ strcpy(configPrintGcodes->end_gcode, pchr);
+ }
+
+ }
+ break;
+ case C_INDEX_CANCEL_GCODE:
+ {
+ char * pchr;
+ pchr = strrchr(cur_line,':') + 1;
+ int len = strlen(pchr);
+ if (inLimit(len,GCODE_MIN_LENGTH,MAX_GCODE_LENGTH))
+ {
+ strcpy(configPrintGcodes->cancel_gcode, pchr);
+ }
+
+ }
+ break;
+
+ default:
+ break;
+ }
+}
\ No newline at end of file
diff --git a/TFT/src/User/API/config.h b/TFT/src/User/API/config.h
new file mode 100644
index 0000000000..7b156328af
--- /dev/null
+++ b/TFT/src/User/API/config.h
@@ -0,0 +1,187 @@
+#ifndef _CONFIG_H_
+#define _CONFIG_H_
+
+#include "variants.h"
+#include "stdbool.h"
+#include "includes.h"
+#include "ff.h"
+
+#define LINE_MAX_CHAR 100
+#define CONFIG_FILE_PATH "0:config.ini"
+
+#define CONFIG_UNIFIEDMENU "unified_menu:"
+#define CONFIG_UART_BAUDRATE "baudrate:"
+#define CONFIG_LANGUAGE "language:"
+
+#define CONFIG_TITLE_BG "title_back_color:"
+#define CONFIG_MENU_BG_COLOR "background_color:"
+#define CONFIG_MENU_FONT_COLOR "font_color:"
+#define CONFIG_NOTIFY_COLOR "reminder_color:"
+#define CONFIG_SD_NOTIFY_COLOR "volume_status_color:"
+#define CONFIG_SS_XYZ_BG_COLOR "status_xyz_bg_color:"
+#define CONFIG_LIST_BORDER_COLOR "list_border_color:"
+#define CONFIG_LIST_BUTTON_BG_COLOR "list_button_bg_color:"
+
+#define CONFIG_ROTATE_UI "rotate_ui:"
+#define CONFIG_TERMINAL_ACK "terminal_ack:"
+#define CONFIG_INVERT_AXIS "invert_axis:"
+#define CONFIG_PERSISTENT_TEMP "persistent_info:"
+#define CONFIG_LIST_MODE "files_list_mode:"
+//-----------------------------Marlin Mode Settings (Only for TFT35_V3.0/TFT24_V1.1/TFT28V3.0)
+#define CONFIG_MODE "default_mode:"
+#define CONFIG_MARLIN_BG_COLOR "marlin_bg_color:"
+#define CONFIG_MARLIN_FONT_COLOR "marlin_fn_color:"
+#define CONFIG_MARLIN_SHOW_TITLE "marlin_show_title:"
+#define CONFIG_MARLIN_TITLE "marlin_title:"
+#define CONFIG_MARLIN_FULLSCREEN "marlin_fullscreen:"
+//-----------------------------Printer / Machine Settings
+#define CONFIG_TOOL_COUNT "hotend_count:"
+#define CONFIG_EXT_COUNT "ext_count:"
+#define CONFIG_FAN_COUNT "fan_count:"
+#define CONFIG_MAX_TEMP "max_temp:"
+#define CONFIG_MIN_TEMP "min_temp:"
+#define CONFIG_FAN_MAX "fan_max:"
+#define CONFIG_BUILD_MIN "size_min:"
+#define CONFIG_BUILD_MAX "size_max:"
+#define CONFIG_MOVE_SPEED "move_speed:"
+#define CONFIG_EXT_SPEED "ext_speed:"
+#define CONFIG_AUTO_LEVEL "auto_load_leveling:"
+#define CONFIG_M27_DELAY "M27_refresh_time:"
+#define CONFIG_M27_KEEP_ON "M27_always_active:"
+#define CONFIG_FAN_PERCENT "fan_speed_percent:"
+#define CONFIG_PAUSE_RETRACT "pause_retract:"
+#define CONFIG_PAUSE_POS "pause_pos:"
+#define CONFIG_PAUSE_Z_RAISE "pause_z_raise:"
+#define CONFIG_PAUSE_FEEDRATE "pause_feedrate:"
+#define CONFIG_LEVEL_EDGE "level_edge_distance:"
+#define CONFIG_LEVEL_Z_POS "level_z_pos:"
+#define CONFIG_LEVEL_Z_RAISE "level_z_raise:"
+#define CONFIG_LEVEL_FEEDRATE "level_feedrate:"
+#define CONFIG_PREHEAT_NAME_1 "preheat_name1:"
+#define CONFIG_PREHEAT_NAME_2 "preheat_name2:"
+#define CONFIG_PREHEAT_NAME_3 "preheat_name3:"
+#define CONFIG_PREHEAT_TEMP_1 "preheat_temp1:"
+#define CONFIG_PREHEAT_TEMP_2 "preheat_temp2:"
+#define CONFIG_PREHEAT_TEMP_3 "preheat_temp3:"
+//-----------------------------Power Supply Settings (if connected to TFT Controller)
+#define CONFIG_PS_ON "ps_on:"
+#define CONFIG_PS_LOGIC "ps_on_active_high:"
+#define CONFIG_SHUTDOWN_TEMP "auto_shutdown_temp:"
+//-----------------------------Filament Runout Settings (if connected to TFT Controller)
+#define CONFIG_RUNOUT "fil_runout:"
+#define CONFIG_RUNOUT_LOGIC "fil_runout_inverting:"
+#define CONFIG_RUNOUT_NOISE "fil_noise_threshold:"
+#define CONFIG_RUNOUT_DISTANCE "fil_runout_distance:"
+//-----------------------------Power Loss Recovery & BTT UPS Settings (if connected to TFT Controller)
+#define CONFIG_POWERLOSS_HOME "pl_recovery_home:"
+#define CONFIG_POWERLOSS_ZRAISE "pl_z_raise:"
+#define CONFIG_BTT_MINIUPS "btt_mini_ups:"
+//-----------------------------other device specific settings
+#define CONFIG_BUZZER_ON "buzzer:"
+#define CONFIG_KNOB_COLOR "knob_led_color:"
+#define CONFIG_BRIGHTNESS "lcd_brightness:"
+#define CONFIG_BRIGHTNESS_IDLE "lcd_idle_brightness:"
+#define CONFIG_BRIGHTNESS_IDLE_DELAY "lcd_idle_delay:"
+//-----------------------------Custom G-Code Commands (up to 15 custom G-code)
+#define CONFIG_CUSTOM_LABEL_1 "custom_label_1:"
+#define CONFIG_CUSTOM_LABEL_2 "custom_label_2:"
+#define CONFIG_CUSTOM_LABEL_3 "custom_label_3:"
+#define CONFIG_CUSTOM_LABEL_4 "custom_label_4:"
+#define CONFIG_CUSTOM_LABEL_5 "custom_label_5:"
+#define CONFIG_CUSTOM_LABEL_6 "custom_label_6:"
+#define CONFIG_CUSTOM_LABEL_7 "custom_label_7:"
+#define CONFIG_CUSTOM_LABEL_8 "custom_label_8:"
+#define CONFIG_CUSTOM_LABEL_9 "custom_label_9:"
+#define CONFIG_CUSTOM_LABEL_10 "custom_label_10:"
+#define CONFIG_CUSTOM_LABEL_11 "custom_label_11:"
+#define CONFIG_CUSTOM_LABEL_12 "custom_label_12:"
+#define CONFIG_CUSTOM_LABEL_13 "custom_label_13:"
+#define CONFIG_CUSTOM_LABEL_14 "custom_label_14:"
+#define CONFIG_CUSTOM_LABEL_15 "custom_label_15:"
+#define CONFIG_CUSTOM_GCODE_1 "custom_gcode_1:"
+#define CONFIG_CUSTOM_GCODE_2 "custom_gcode_2:"
+#define CONFIG_CUSTOM_GCODE_3 "custom_gcode_3:"
+#define CONFIG_CUSTOM_GCODE_4 "custom_gcode_4:"
+#define CONFIG_CUSTOM_GCODE_5 "custom_gcode_5:"
+#define CONFIG_CUSTOM_GCODE_6 "custom_gcode_6:"
+#define CONFIG_CUSTOM_GCODE_7 "custom_gcode_7:"
+#define CONFIG_CUSTOM_GCODE_8 "custom_gcode_8:"
+#define CONFIG_CUSTOM_GCODE_9 "custom_gcode_9:"
+#define CONFIG_CUSTOM_GCODE_10 "custom_gcode_10:"
+#define CONFIG_CUSTOM_GCODE_11 "custom_gcode_11:"
+#define CONFIG_CUSTOM_GCODE_12 "custom_gcode_12:"
+#define CONFIG_CUSTOM_GCODE_13 "custom_gcode_13:"
+#define CONFIG_CUSTOM_GCODE_14 "custom_gcode_14:"
+#define CONFIG_CUSTOM_GCODE_15 "custom_gcode_15:"
+//-----------------------------Start, End & Cancel G-codes
+#define CONFIG_START_GCODE_ON "start_gcode_enabled:"
+#define CONFIG_END_GOCODE_ON "end_gcode_enabled:"
+#define CONFIG_START_GCODE "start_gcode:"
+#define CONFIG_END_GCODE "end_gcode:"
+#define CONFIG_CANCEL_GCODE "cancel_gcode:"
+
+//-----------------------------Limits
+#define MAX_SIZE_LIMIT 1000 // machine size over this will not be parsed.
+#define MAX_EXT_SPEED_LIMIT 5000 // Extruder speed over this will not pe parsed.
+#define MAX_TOOL_TEMP 300 // extruder temp over this will not pe parsed.
+#define MAX_BED_TEMP 200 // bed temp over this will not pe parsed.
+#define MAX_SPEED_LIMIT 12000 // speed over this will not pe parsed.
+#define MAX_RUNOUT_DISTANCE 50 // runout distance over this will not pe parsed.
+#define MAX_DELAY_MS 1800 // time delay (ms) over this will not pe parsed.
+#define MAX_DELAY_SEC 100 // time delay (sec) over this will not pe parsed.
+#define MAX_RETRACT_LIMIT 20 // retract length over this will not be parsed.
+#define MAX_FAN_SPEED 255 // fan speed (PWM) over this will not be parsed.
+
+#define NAME_MIN_LENGTH 3 // minimum name length
+#define GCODE_MIN_LENGTH 3 // gcode length less than this will not pe parsed.
+#define MIN_SIZE_LIMIT 0 // machine size less than this will not be parsed.
+#define MIN_POS_LIMIT 0 // position value less than this will not be parsed.
+#define MIN_TOOL_TEMP 20 // extruder temp less than this will not pe parsed.
+#define MIN_BED_TEMP 20 // bed temp less than this will not pe parsed.
+#define MIN_RUNOUT_DISTANCE 1 // runout distance less than this will not be parsed.
+#define MIN_DELAY_MS 10 // time delay (ms) less than this will not pe parsed.
+#define MIN_DELAY_SEC 1 // time delay (sec) less than this will not pe parsed.
+#define MIN_SPEED_LIMIT 10 // speed less than this will not pe parsed.
+#define MIN_RETRACT_LIMIT 0 // retract length less than this will not be parsed.
+#define MIN_FAN_SPEED 25 // fan speed (PWM) less than this will not be parsed.
+
+
+typedef struct
+{
+ FIL file;
+ u32 size; // total size of config file
+ u32 cur; // total size of
+}CONFIGFILE;
+
+typedef enum
+{
+ CSTAT_FILE_NOTOPEN = 0,
+ CSTAT_FILE_INVALID,
+ CSTAT_UNKNOWN_KEYWORD,
+ CSTAT_INVALID_VALUE,
+ CSTAT_OLD_VERSION,
+ CSTAT_STORAGE_LOW,
+ CSTAT_SPI_WRITE_FAIL,
+}CONFIG_STATS;
+
+
+void getConfigFromFile(void);
+void parseConfigLine(void);
+void parseConfigKey(u16 index);
+void writeConfig(uint8_t* dataBytes, uint16_t numBytes, uint32_t addr, uint32_t maxSize);
+void saveConfig(void);
+void resetConfig(void);
+void drawProgressPage(void);
+void drawProgress(void);
+void showError(CONFIG_STATS stat);
+
+//This List is Auto-Generated. Please add new icons in icon_list.inc only
+enum
+{
+ #define X_CONFIG(NAME) C_INDEX_##NAME ,
+ #include "config.inc"
+ #undef X_CONFIG
+
+ CONFIG_COUNT,
+};
+#endif
\ No newline at end of file
diff --git a/TFT/src/User/API/config.inc b/TFT/src/User/API/config.inc
new file mode 100644
index 0000000000..798ee3882b
--- /dev/null
+++ b/TFT/src/User/API/config.inc
@@ -0,0 +1,115 @@
+/**
+* CONFIG Kewords Generation
+* Usage: X_CONFIG(VALUE)
+* 'VALUE' is the keyword name without the 'CONFIG_'
+*
+* Description: https://en.wikipedia.org/wiki/X_Macro
+*/
+X_CONFIG(UNIFIEDMENU)
+X_CONFIG(UART_BAUDRATE)
+X_CONFIG(LANGUAGE)
+X_CONFIG(TITLE_BG)
+X_CONFIG(MENU_BG_COLOR)
+X_CONFIG(MENU_FONT_COLOR)
+X_CONFIG(NOTIFY_COLOR)
+X_CONFIG(SD_NOTIFY_COLOR)
+X_CONFIG(SS_XYZ_BG_COLOR)
+X_CONFIG(LIST_BORDER_COLOR)
+X_CONFIG(LIST_BUTTON_BG_COLOR)
+X_CONFIG(ROTATE_UI)
+X_CONFIG(TERMINAL_ACK)
+X_CONFIG(INVERT_AXIS)
+X_CONFIG(PERSISTENT_TEMP)
+X_CONFIG(LIST_MODE)
+//-----------------------------Marlin Mode Settings (Only for TFT35_V3.0/TFT24_V1.1/TFT28V3.0)
+X_CONFIG(MODE)
+X_CONFIG(MARLIN_BG_COLOR)
+X_CONFIG(MARLIN_FONT_COLOR)
+X_CONFIG(MARLIN_SHOW_TITLE)
+X_CONFIG(MARLIN_TITLE)
+X_CONFIG(MARLIN_FULLSCREEN)
+//-----------------------------Printer / Machine Settings
+X_CONFIG(TOOL_COUNT)
+X_CONFIG(EXT_COUNT)
+X_CONFIG(FAN_COUNT)
+X_CONFIG(MAX_TEMP)
+X_CONFIG(MIN_TEMP)
+X_CONFIG(FAN_MAX)
+X_CONFIG(BUILD_MIN)
+X_CONFIG(BUILD_MAX)
+X_CONFIG(MOVE_SPEED)
+X_CONFIG(EXT_SPEED)
+X_CONFIG(AUTO_LEVEL)
+X_CONFIG(M27_DELAY)
+X_CONFIG(M27_KEEP_ON)
+X_CONFIG(FAN_PERCENT)
+X_CONFIG(PAUSE_RETRACT)
+X_CONFIG(PAUSE_POS)
+X_CONFIG(PAUSE_Z_RAISE)
+X_CONFIG(PAUSE_FEEDRATE)
+X_CONFIG(LEVEL_EDGE)
+X_CONFIG(LEVEL_Z_POS)
+X_CONFIG(LEVEL_Z_RAISE)
+X_CONFIG(LEVEL_FEEDRATE)
+X_CONFIG(PREHEAT_NAME_1)
+X_CONFIG(PREHEAT_NAME_2)
+X_CONFIG(PREHEAT_NAME_3)
+X_CONFIG(PREHEAT_TEMP_1)
+X_CONFIG(PREHEAT_TEMP_2)
+X_CONFIG(PREHEAT_TEMP_3)
+//-----------------------------Power Supply Settings (if connected to TFT Controller)
+X_CONFIG(PS_ON)
+X_CONFIG(PS_LOGIC)
+X_CONFIG(SHUTDOWN_TEMP)
+//-----------------------------Power Loss Recovery & BTT UPS Settings (if connected to TFT Controller)
+X_CONFIG(POWERLOSS_HOME)
+X_CONFIG(POWERLOSS_ZRAISE)
+X_CONFIG(BTT_MINIUPS)
+//-----------------------------Filament Runout Settings (if connected to TFT Controller)
+X_CONFIG(RUNOUT)
+X_CONFIG(RUNOUT_LOGIC)
+X_CONFIG(RUNOUT_NOISE)
+X_CONFIG(RUNOUT_DISTANCE)
+//-----------------------------other device specific settings
+X_CONFIG(BUZZER_ON)
+X_CONFIG(KNOB_COLOR)
+X_CONFIG(BRIGHTNESS)
+X_CONFIG(BRIGHTNESS_IDLE)
+X_CONFIG(BRIGHTNESS_IDLE_DELAY)
+//-----------------------------CustomG-Code Commands upto 15 custom G-code
+X_CONFIG(CUSTOM_LABEL_1)
+X_CONFIG(CUSTOM_LABEL_2)
+X_CONFIG(CUSTOM_LABEL_3)
+X_CONFIG(CUSTOM_LABEL_4)
+X_CONFIG(CUSTOM_LABEL_5)
+X_CONFIG(CUSTOM_LABEL_6)
+X_CONFIG(CUSTOM_LABEL_7)
+X_CONFIG(CUSTOM_LABEL_8)
+X_CONFIG(CUSTOM_LABEL_9)
+X_CONFIG(CUSTOM_LABEL_10)
+X_CONFIG(CUSTOM_LABEL_11)
+X_CONFIG(CUSTOM_LABEL_12)
+X_CONFIG(CUSTOM_LABEL_13)
+X_CONFIG(CUSTOM_LABEL_14)
+X_CONFIG(CUSTOM_LABEL_15)
+X_CONFIG(CUSTOM_GCODE_1)
+X_CONFIG(CUSTOM_GCODE_2)
+X_CONFIG(CUSTOM_GCODE_3)
+X_CONFIG(CUSTOM_GCODE_4)
+X_CONFIG(CUSTOM_GCODE_5)
+X_CONFIG(CUSTOM_GCODE_6)
+X_CONFIG(CUSTOM_GCODE_7)
+X_CONFIG(CUSTOM_GCODE_8)
+X_CONFIG(CUSTOM_GCODE_9)
+X_CONFIG(CUSTOM_GCODE_10)
+X_CONFIG(CUSTOM_GCODE_11)
+X_CONFIG(CUSTOM_GCODE_12)
+X_CONFIG(CUSTOM_GCODE_13)
+X_CONFIG(CUSTOM_GCODE_14)
+X_CONFIG(CUSTOM_GCODE_15)
+//-----------------------------Start, End & Cancel G-codes
+X_CONFIG(START_GCODE_ON)
+X_CONFIG(END_GOCODE_ON)
+X_CONFIG(START_GCODE)
+X_CONFIG(END_GCODE)
+X_CONFIG(CANCEL_GCODE)
\ No newline at end of file
diff --git a/TFT/src/User/API/extend.c b/TFT/src/User/API/extend.c
index 29dddd5a36..b8d3c59af3 100644
--- a/TFT/src/User/API/extend.c
+++ b/TFT/src/User/API/extend.c
@@ -9,19 +9,19 @@
void PS_ON_Init(void)
{
GPIO_InitSet(PS_ON_PIN, MGPIO_MODE_OUT_PP, 0);
- GPIO_SetLevel(PS_ON_PIN, PS_ON_ACTIVE_HIGH);
+ GPIO_SetLevel(PS_ON_PIN, infoSettings.ps_active_high);
}
// Power Supply Control turn on, M80
void PS_ON_On(void)
{
- GPIO_SetLevel(PS_ON_PIN, PS_ON_ACTIVE_HIGH);
+ GPIO_SetLevel(PS_ON_PIN, infoSettings.ps_active_high);
}
// Power Supply Control turn off, M81
void PS_ON_Off(void)
{
- GPIO_SetLevel(PS_ON_PIN, !PS_ON_ACTIVE_HIGH);
+ GPIO_SetLevel(PS_ON_PIN, !infoSettings.ps_active_high);
}
#endif
@@ -37,7 +37,7 @@ void positionSetUpdateWaiting(bool isWaiting)
void FIL_Runout_Init(void)
{
- GPIO_InitSet(FIL_RUNOUT_PIN, FIL_RUNOUT_INVERTING ? MGPIO_MODE_IPU : MGPIO_MODE_IPD, 0);
+ GPIO_InitSet(FIL_RUNOUT_PIN, infoSettings.runout_invert ? MGPIO_MODE_IPU : MGPIO_MODE_IPD, 0);
}
bool FIL_RunoutPinFilteredLevel(void)
@@ -50,7 +50,7 @@ bool FIL_RunoutPinFilteredLevel(void)
if (OS_GetTimeMs() > nextTime)
{
rst = trueTimes > falseTimes ? true : false;
- nextTime = OS_GetTimeMs() + FIL_NOISE_THRESHOLD;
+ nextTime = OS_GetTimeMs() + infoSettings.runout_noise_ms ;
trueTimes = 0;
falseTimes = 0;
}
@@ -101,7 +101,7 @@ bool FIL_SmartRunoutDetect(void)
}
}
- if (ABS(actualExtrude - lastExtrudePosition) >= FILAMENT_RUNOUT_DISTANCE_MM)
+ if (ABS(actualExtrude - lastExtrudePosition) >= infoSettings.runout_distance)
{
lastExtrudePosition = actualExtrude;
if (isAlive)
@@ -122,7 +122,7 @@ bool FIL_IsRunout(void)
switch (infoSettings.runout) {
case FILAMENT_RUNOUT_ON:
// Detect HIGH/LOW level, Suitable for general mechanical / photoelectric switches
- return (FIL_RunoutPinFilteredLevel() == FIL_RUNOUT_INVERTING);
+ return (FIL_RunoutPinFilteredLevel() == infoSettings.runout_invert);
case FILAMENT_SMART_RUNOUT_ON:
return FIL_SmartRunoutDetect();
diff --git a/TFT/src/User/API/flashStore.c b/TFT/src/User/API/flashStore.c
index 79fa99f729..8662e094d5 100644
--- a/TFT/src/User/API/flashStore.c
+++ b/TFT/src/User/API/flashStore.c
@@ -1,9 +1,8 @@
#include "flashStore.h"
#include "STM32_Flash.h"
-#define PARA_SIZE 256 //bytes
#define TSC_SIGN 0x20190827 // DO NOT MODIFY
-#define PARA_SIGN 0x20200331 // If a new setting parameter is added, modify here and initialize the initial value in the "infoSettingsReset()" function
+#define PARA_SIGN 0x20200430 // (YYYMMDD) If a new setting parameter is added, modify here and initialize the initial value in the "infoSettingsReset()" function
extern u32 TSC_Para[7]; //
extern SETTINGS infoSettings; //
@@ -57,32 +56,114 @@ bool readStoredPara(void)
}
else
{
- infoSettings.baudrate = byteToWord(data + (index += 4), 4);
- infoSettings.language = byteToWord(data + (index += 4), 4);
- infoSettings.mode = byteToWord(data + (index += 4), 4);
- infoSettings.runout = byteToWord(data + (index += 4), 4);
- infoSettings.rotate_ui = byteToWord(data + (index += 4), 4);
- infoSettings.bg_color = byteToWord(data + (index += 4), 4);
- infoSettings.font_color = byteToWord(data + (index += 4), 4);
- infoSettings.silent = byteToWord(data + (index += 4), 4);
- infoSettings.auto_off = byteToWord(data + (index += 4), 4);
- infoSettings.terminalACK = byteToWord(data + (index += 4), 4);
- infoSettings.invert_axis[X_AXIS] = byteToWord(data + (index += 4), 4);
- infoSettings.invert_axis[Y_AXIS] = byteToWord(data + (index += 4), 4);
- infoSettings.invert_axis[Z_AXIS] = byteToWord(data + (index += 4), 4);
- infoSettings.move_speed = byteToWord(data + (index += 4), 4);
- infoSettings.send_start_gcode = byteToWord(data + (index += 4), 4);
- infoSettings.send_end_gcode = byteToWord(data + (index += 4), 4);
- infoSettings.send_cancel_gcode = byteToWord(data + (index += 4), 4);
- infoSettings.persistent_info = byteToWord(data + (index += 4), 4);
- infoSettings.file_listmode = byteToWord(data + (index += 4), 4);
- infoSettings.knob_led_color = byteToWord(data + (index += 4), 4);
- #ifdef LCD_LED_PWM_CHANNEL
- infoSettings.lcd_brightness = byteToWord(data + (index += 4), 4);
- infoSettings.lcd_idle_brightness = byteToWord(data + (index += 4), 4);
- infoSettings.lcd_idle_timer = byteToWord(data + (index += 4), 4);
- #endif
- infoSettings.marlin_mode_fullscreen = byteToWord(data + (index += 4), 4);
+ infoSettings.baudrate = byteToWord(data + (index += 4), 4);
+ infoSettings.language = byteToWord(data + (index += 4), 4);
+ infoSettings.mode = byteToWord(data + (index += 4), 4);
+ infoSettings.unified_menu = byteToWord(data + (index += 4), 4);
+ infoSettings.rotate_ui = byteToWord(data + (index += 4), 4);
+
+ infoSettings.bg_color = byteToWord(data + (index += 4), 4);
+ infoSettings.font_color = byteToWord(data + (index += 4), 4);
+ infoSettings.title_bg_color = byteToWord(data + (index += 4), 4);
+ infoSettings.reminder_color = byteToWord(data + (index += 4), 4);
+ infoSettings.sd_reminder_color = byteToWord(data + (index += 4), 4);
+ infoSettings.status_xyz_bg_color = byteToWord(data + (index += 4), 4);
+ infoSettings.list_border_color = byteToWord(data + (index += 4), 4);
+ infoSettings.list_button_color = byteToWord(data + (index += 4), 4);
+
+ infoSettings.silent = byteToWord(data + (index += 4), 4);
+ infoSettings.terminalACK = byteToWord(data + (index += 4), 4);
+ infoSettings.move_speed = byteToWord(data + (index += 4), 4);
+ infoSettings.knob_led_color = byteToWord(data + (index += 4), 4);
+ infoSettings.persistent_info = byteToWord(data + (index += 4), 4);
+ infoSettings.file_listmode = byteToWord(data + (index += 4), 4);
+
+ infoSettings.lcd_brightness = byteToWord(data + (index += 4), 4);
+ infoSettings.lcd_idle_brightness = byteToWord(data + (index += 4), 4);
+ infoSettings.lcd_idle_timer = byteToWord(data + (index += 4), 4);
+
+ infoSettings.marlin_mode_bg_color = byteToWord(data + (index += 4), 4);
+ infoSettings.marlin_mode_font_color = byteToWord(data + (index += 4), 4);
+ infoSettings.marlin_mode_showtitle = byteToWord(data + (index += 4), 4);
+ infoSettings.marlin_mode_fullscreen = byteToWord(data + (index += 4), 4);
+
+ infoSettings.send_start_gcode = byteToWord(data + (index += 4), 4);
+ infoSettings.send_end_gcode = byteToWord(data + (index += 4), 4);
+ infoSettings.send_cancel_gcode = byteToWord(data + (index += 4), 4);
+ infoSettings.auto_off = byteToWord(data + (index += 4), 4);
+ infoSettings.ps_active_high = byteToWord(data + (index += 4), 4);
+ infoSettings.auto_off_temp = byteToWord(data + (index += 4), 4);
+
+ infoSettings.runout = byteToWord(data + (index += 4), 4);
+ infoSettings.runout_invert = byteToWord(data + (index += 4), 4);
+ infoSettings.runout_noise_ms = byteToWord(data + (index += 4), 4);
+ infoSettings.runout_distance = byteToWord(data + (index += 4), 4);
+
+ infoSettings.powerloss_home = byteToWord(data + (index += 4), 4);
+ infoSettings.powerloss_invert = byteToWord(data + (index += 4), 4);
+ infoSettings.powerloss_z_raise = byteToWord(data + (index += 4), 4);
+ infoSettings.btt_ups = byteToWord(data + (index += 4), 4);
+
+//machine specific settings
+
+ infoSettings.tool_count = byteToWord(data + (index += 4), 4);
+ infoSettings.ext_count = byteToWord(data + (index += 4), 4);
+ infoSettings.fan_count = byteToWord(data + (index += 4), 4);
+ infoSettings.auto_load_leveling = byteToWord(data + (index += 4), 4);
+ infoSettings.m27_refresh_time = byteToWord(data + (index += 4), 4);
+ infoSettings.m27_active = byteToWord(data + (index += 4), 4);
+
+ for(int i = 0; i < HEAT_NUM; i++)
+ {
+ infoSettings.max_temp[i] = byteToWord(data + (index += 4), 4);
+ }
+
+ infoSettings.min_ext_temp = byteToWord(data + (index += 4), 4);
+
+ for(int i = 0; i < MAX_TOOL_COUNT ;i++)
+ {
+ infoSettings.fan_max[i] = byteToWord(data + (index += 4), 4);
+ }
+
+ infoSettings.fan_percentage = byteToWord(data + (index += 4), 4);
+
+ for(int i = 0; i < AXIS_NUM ;i++) //x, y, z
+ {
+ infoSettings.invert_axis[i] = byteToWord(data + (index += 4), 4);
+ infoSettings.machine_size_min[i] = byteToWord(data + (index += 4), 4);
+ infoSettings.machine_size_max[i] = byteToWord(data + (index += 4), 4);
+ infoSettings.level_feedrate[i] = byteToWord(data + (index += 4), 4);
+ }
+
+ for(int i = 0; i < SPEED_COUNT ;i++)
+ {
+ infoSettings.axis_speed[i] = byteToWord(data + (index += 4), 4);
+ infoSettings.ext_speed[i] = byteToWord(data + (index += 4), 4);
+ }
+
+ infoSettings.pause_retract_len = byteToWord(data + (index += 4), 4);
+ infoSettings.resume_purge_len = byteToWord(data + (index += 4), 4);
+
+
+ infoSettings.pause_pos[X_AXIS] = byteToWord(data + (index += 4), 4); // X
+ infoSettings.pause_pos[Y_AXIS] = byteToWord(data + (index += 4), 4); // Y
+ infoSettings.pause_z_raise = byteToWord(data + (index += 4), 4);
+
+ for(int i = 0; i < TOTAL_AXIS ;i++)
+ {
+ infoSettings.pause_feedrate[i] = byteToWord(data + (index += 4), 4); // X, Y, Z, E
+ }
+
+ infoSettings.level_edge = byteToWord(data + (index += 4), 4);
+ infoSettings.level_z_pos = byteToWord(data + (index += 4), 4);
+ infoSettings.level_z_raise = byteToWord(data + (index += 4), 4);
+
+ for (int i = 0; i < PREHEAT_COUNT; i++)
+ {
+ infoSettings.preheat_temp[i] = byteToWord(data + (index += 4), 4);
+ infoSettings.preheat_bed[i] = byteToWord(data + (index += 4), 4);
+ }
+
}
return paraExist;
@@ -93,38 +174,121 @@ void storePara(void)
u8 data[PARA_SIZE];
u32 index = 0;
- wordToByte(TSC_SIGN, data + (index += 4));
+ wordToByte(TSC_SIGN, data + (index += 4));
for(int i=0; i= FAN_NUM) return;
+ if(i >= infoSettings.fan_count) return;
curIndex = i;
}
@@ -55,37 +54,40 @@ void showFanSpeed(void)
{
const GUI_RECT rect = {exhibitRect.x0, CENTER_Y-BYTE_HEIGHT, exhibitRect.x1, CENTER_Y};
u8 fs;
- #ifdef SHOW_FAN_PERCENTAGE
+ if(infoSettings.fan_percentage == 1)
fs = (fanSpeed[curIndex]*100)/255;
- #else
+ else
fs = fanSpeed[curIndex];
- #endif
+
GUI_ClearRect(rect.x0, rect.y0, rect.x1, rect.y1);
GUI_DispStringInPrect(&rect, (u8*)fanID[curIndex]);
- #ifdef SHOW_FAN_PERCENTAGE
- char fan_s[5];
- sprintf(fan_s, "%3d%%", fs);
- GUI_DispString(CENTER_X-BYTE_WIDTH, CENTER_Y, (u8 *)fan_s);
- #else
- GUI_DispDec(CENTER_X-BYTE_WIDTH, CENTER_Y, fs, 3, LEFT);
- #endif
+ if(infoSettings.fan_percentage == 1)
+ {
+ char fan_s[5];
+ sprintf(fan_s, "%3d%%", fs);
+ GUI_DispString(CENTER_X-BYTE_WIDTH, CENTER_Y, (u8 *)fan_s);
+ }
+ else
+ {GUI_DispDec(CENTER_X-BYTE_WIDTH, CENTER_Y, fs, 3, LEFT);
+ }
}
void fanSpeedReDraw(void)
{
- #ifdef SHOW_FAN_PERCENTAGE
- char fan_s[5] = "";
- sprintf(fan_s, "%3d%%", (fanSpeed[curIndex]*100)/255);
- GUI_DispString(CENTER_X-BYTE_WIDTH, CENTER_Y, (u8 *)fan_s);
- #else
+ if(infoSettings.fan_percentage == 1)
+ {
+ char fan_s[5] = "";
+ sprintf(fan_s, "%3d%%", (fanSpeed[curIndex]*100)/255);
+ GUI_DispString(CENTER_X-BYTE_WIDTH, CENTER_Y, (u8 *)fan_s);
+ }
+ else
GUI_DispDec(CENTER_X-BYTE_WIDTH, CENTER_Y, fanSpeed[curIndex], 3, LEFT);
- #endif
}
void menuFan(void)
{
u8 nowIndex = curIndex;
- u8 nowFanSpeed[FAN_NUM];
+ u8 nowFanSpeed[infoSettings.fan_count];
memcpy(nowFanSpeed, fanSpeed, sizeof(fanSpeed));
KEY_VALUES key_num = KEY_IDLE;
@@ -102,40 +104,46 @@ void menuFan(void)
switch(key_num)
{
case KEY_ICON_0:
- if (fanSpeed[curIndex] > 0) {
- #ifdef SHOW_FAN_PERCENTAGE
- if ((fanSpeed[curIndex]-2) > 0) {
- fanSpeed[curIndex]-=2; //2.55 is 1 percent, rounding down
- } else {
- fanSpeed[curIndex]=0;
- }
- #else
- fanSpeed[curIndex]--;
- #endif
+ if (fanSpeed[curIndex] > 0)
+ {
+ if (infoSettings.fan_percentage == 1)
+ {
+ if ((fanSpeed[curIndex] - 2) > 0)
+ fanSpeed[curIndex] -= 2; //2.55 is 1 percent, rounding down
+ else
+ fanSpeed[curIndex] = 0;
+ }
+ else
+ {
+ fanSpeed[curIndex]--;
+ }
}
break;
case KEY_ICON_3:
- if (fanSpeed[curIndex] < fanMaxPWM[curIndex]){
- #ifdef SHOW_FAN_PERCENTAGE
- if (fanSpeed[curIndex]+2 <= fanMaxPWM[curIndex]){
- fanSpeed[curIndex]+=2; //2.55 is 1 percent, rounding down
- } else {
- fanSpeed[curIndex]=fanMaxPWM[curIndex];
- }
- #else
- fanSpeed[curIndex]++;
- #endif
+ if (fanSpeed[curIndex] < infoSettings.fan_max[curIndex])
+ {
+ if (infoSettings.fan_percentage == 1)
+ {
+ if (fanSpeed[curIndex] + 2 <= infoSettings.fan_max[curIndex])
+ fanSpeed[curIndex] += 2; //2.55 is 1 percent, rounding down
+ else
+ fanSpeed[curIndex] = infoSettings.fan_max[curIndex];
+ }
+ else
+ {
+ fanSpeed[curIndex]++;
+ }
}
break;
case KEY_ICON_4:
- curIndex = (curIndex + 1) % FAN_NUM;
+ curIndex = (curIndex + 1) % infoSettings.fan_count;
showFanSpeed();
break;
case KEY_ICON_5:
- fanSpeed[curIndex] = fanMaxPWM[curIndex];
+ fanSpeed[curIndex] = infoSettings.fan_max[curIndex];
break;
case KEY_ICON_6:
@@ -150,28 +158,33 @@ void menuFan(void)
#if LCD_ENCODER_SUPPORT
if(encoderPosition)
{
- if (fanSpeed[curIndex] < fanMaxPWM[curIndex] && encoderPosition > 0){
- #ifdef SHOW_FAN_PERCENTAGE
- if (fanSpeed[curIndex]+2 <= fanMaxPWM[curIndex]){
- fanSpeed[curIndex]+=2; //2.55 is 1 percent, rounding down
- } else {
- fanSpeed[curIndex]=fanMaxPWM[curIndex];
- }
- #else
+ if (fanSpeed[curIndex] < infoSettings.fan_max[curIndex] && encoderPosition > 0)
+ {
+ if (infoSettings.fan_percentage == 1)
+ {
+ if (fanSpeed[curIndex] + 2 <= infoSettings.fan_max[curIndex])
+ fanSpeed[curIndex] += 2; //2.55 is 1 percent, rounding down
+ else
+ fanSpeed[curIndex] = infoSettings.fan_max[curIndex];
+ }
+ else
+ {
fanSpeed[curIndex]++;
- #endif
+ }
}
if (fanSpeed[curIndex] > 0 && encoderPosition < 0) {
- #ifdef SHOW_FAN_PERCENTAGE
- if ((fanSpeed[curIndex]-2) > 0) {
- fanSpeed[curIndex]-=2; //2.55 is 1 percent, rounding down
- } else {
- fanSpeed[curIndex]=0;
- }
- #else
+ if (infoSettings.fan_percentage == 1)
+ {
+ if ((fanSpeed[curIndex] - 2) > 0)
+ fanSpeed[curIndex] -= 2; //2.55 is 1 percent, rounding down
+ else
+ fanSpeed[curIndex] = 0;
+ }
+ else
+ {
fanSpeed[curIndex]--;
- #endif
+ }
}
encoderPosition = 0;
diff --git a/TFT/src/User/Menu/FeatureSettings.c b/TFT/src/User/Menu/FeatureSettings.c
index 8f30f26d17..09819dbcb7 100644
--- a/TFT/src/User/Menu/FeatureSettings.c
+++ b/TFT/src/User/Menu/FeatureSettings.c
@@ -37,14 +37,8 @@ const uint16_t toggleitem[TOGGLE_NUM] = {ICONCHAR_TOGGLE_OFF,ICONCHAR_TOGGLE_ON}
#define ITEM_SPEED_NUM 3
const LABEL itemMoveSpeed[ITEM_SPEED_NUM] = {
//item value text(only for custom value)
- LABEL_NORMAL_SPEED,
LABEL_SLOW_SPEED,
- LABEL_FAST_SPEED
- };
-
-const u8 item_movespeed[ITEM_SPEED_NUM] = {
LABEL_NORMAL_SPEED,
- LABEL_SLOW_SPEED,
LABEL_FAST_SPEED
};
@@ -53,7 +47,7 @@ const u8 item_movespeed[ITEM_SPEED_NUM] = {
//
typedef enum
{
- SKEY_HIDEACK = 0,
+ SKEY_ACK = 0,
SKEY_INVERT_X,
SKEY_INVERT_Y,
SKEY_INVERT_Z,
@@ -73,14 +67,13 @@ typedef enum
SKEY_KNOB,
#endif
#ifdef LCD_LED_PWM_CHANNEL
- SKEY_LCD_BRIGHTNESS,
- SKEY_LCD_BRIGTHNESS_DIM,
- SKEY_LCD_DIM_IDLE_TIMER,
+ SKEY_LCD_BRIGHTNESS,
+ SKEY_LCD_BRIGTHNESS_DIM,
+ SKEY_LCD_DIM_IDLE_TIMER,
#endif
#ifdef ST7920_SPI
- SKEY_ST7920_FULLSCREEN,
+ SKEY_ST7920_FULLSCREEN,
#endif
-
SKEY_RESET_SETTINGS, // Keep reset always at the bottom of the settings menu list.
SKEY_COUNT //keep this always at the end
}SKEY_LIST;
@@ -112,12 +105,12 @@ LISTITEM settingPage[SKEY_COUNT] = {
{ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_KNOB_LED, LABEL_OFF },
#endif
#ifdef LCD_LED_PWM_CHANNEL
- {ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_BRIGHTNESS, LABEL_100_PERCENT },
- {ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_BRIGHTNESS_DIM, LABEL_100_PERCENT },
- {ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_DIM_IDLE_TIMER, LABEL_60_SECONDS },
+ {ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_BRIGHTNESS, LABEL_DYNAMIC },
+ {ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_BRIGHTNESS_DIM, LABEL_DYNAMIC },
+ {ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_LCD_DIM_IDLE_TIMER, LABEL_DYNAMIC },
#endif
#ifdef ST7920_SPI
- {ICONCHAR_BLANK, LIST_TOGGLE, LABEL_ST7920_FULLSCREEN, LABEL_OFF },
+ {ICONCHAR_BLANK, LIST_TOGGLE, LABEL_ST7920_FULLSCREEN, LABEL_OFF },
#endif
{ICONCHAR_BLANK, LIST_CUSTOMVALUE, LABEL_SETTINGS, LABEL_RESET } // Keep reset always at the bottom of the settings menu list.
};
@@ -125,7 +118,7 @@ LISTITEM settingPage[SKEY_COUNT] = {
void menuResetSettings(void)
{
uint16_t key_num = IDLE_TOUCH;
- popupDrawPage(bottomDoubleBtn, textSelect(LABEL_WARNING), textSelect(LABEL_RESET_SETTINGS), textSelect(LABEL_CONFIRM), textSelect(LABEL_CANNEL));
+ popupDrawPage(bottomDoubleBtn, textSelect(LABEL_WARNING), textSelect(LABEL_RESET_SETTINGS), textSelect(LABEL_CONFIRM), textSelect(LABEL_CANCEL));
while(infoMenu.menu[infoMenu.cur] == menuResetSettings)
{
key_num = KEY_GetValue(2, doubleBtnRect);
@@ -154,7 +147,7 @@ void updateFeatureSettings(uint8_t key_val)
uint8_t item_index = fe_cur_page*LISTITEM_PER_PAGE+ key_val;
switch (item_index)
{
- case SKEY_HIDEACK:
+ case SKEY_ACK:
infoSettings.terminalACK = (infoSettings.terminalACK + 1) % TOGGLE_NUM;
settingPage[item_index].icon = toggleitem[infoSettings.terminalACK];
featureSettingsItems.items[key_val] = settingPage[item_index];
@@ -272,22 +265,27 @@ void updateFeatureSettings(uint8_t key_val)
break;
#ifdef LCD_LED_PWM_CHANNEL
- case SKEY_LCD_BRIGHTNESS:
- infoSettings.lcd_brightness = (infoSettings.lcd_brightness + 1) % ITEM_BRIGHTNESS_NUM;
- settingPage[item_index].valueLabel = itemBrightness[infoSettings.lcd_brightness];
- featureSettingsItems.items[key_val] = settingPage[item_index];
- Set_LCD_Brightness(LCD_BRIGHTNESS[infoSettings.lcd_brightness]);
+ case SKEY_LCD_BRIGHTNESS:
+ {
+ infoSettings.lcd_brightness = (infoSettings.lcd_brightness + 1) % ITEM_BRIGHTNESS_NUM;
+ char tempstr[8];
+ my_sprintf(tempstr,(char *)textSelect(LABEL_PERCENT_VALUE),infoSettings.lcd_idle_brightness);
+ setDynamicTextValue(key_val,tempstr);
+ Set_LCD_Brightness(LCD_BRIGHTNESS[infoSettings.lcd_brightness]);
+ menuDrawListItem(&featureSettingsItems.items[key_val], key_val);
+ }
+ break;
- menuDrawListItem(&featureSettingsItems.items[key_val], key_val);
- break;
+ case SKEY_LCD_BRIGTHNESS_DIM:
+ {
+ infoSettings.lcd_idle_brightness = (infoSettings.lcd_idle_brightness + 1) % ITEM_BRIGHTNESS_NUM;
+ char tempstr[8];
+ my_sprintf(tempstr,(char *)textSelect(LABEL_PERCENT_VALUE),infoSettings.lcd_idle_brightness);
+ setDynamicTextValue(key_val,tempstr);
- case SKEY_LCD_BRIGTHNESS_DIM:
- infoSettings.lcd_idle_brightness = (infoSettings.lcd_idle_brightness + 1) % ITEM_BRIGHTNESS_NUM;
- settingPage[item_index].valueLabel = itemBrightness[infoSettings.lcd_idle_brightness];
- featureSettingsItems.items[key_val] = settingPage[item_index];
-
- menuDrawListItem(&featureSettingsItems.items[key_val], key_val);
- break;
+ menuDrawListItem(&featureSettingsItems.items[key_val], key_val);
+ }
+ break;
case SKEY_LCD_DIM_IDLE_TIMER:
infoSettings.lcd_idle_timer = (infoSettings.lcd_idle_timer + 1) % ITEM_SECONDS_NUM;
@@ -299,15 +297,14 @@ void updateFeatureSettings(uint8_t key_val)
#endif //LCD_LED_PWM_CHANNEL
#ifdef ST7920_SPI
- case SKEY_ST7920_FULLSCREEN:
- infoSettings.marlin_mode_fullscreen = (infoSettings.marlin_mode_fullscreen + 1) % TOGGLE_NUM;
- settingPage[item_index].icon = toggleitem[infoSettings.marlin_mode_fullscreen];
- featureSettingsItems.items[key_val] = settingPage[item_index];
+ case SKEY_ST7920_FULLSCREEN:
+ infoSettings.marlin_mode_fullscreen = (infoSettings.marlin_mode_fullscreen + 1) % TOGGLE_NUM;
+ settingPage[item_index].icon = toggleitem[infoSettings.marlin_mode_fullscreen];
+ featureSettingsItems.items[key_val] = settingPage[item_index];
- menuDrawListItem(&featureSettingsItems.items[key_val], key_val);
- break;
+ menuDrawListItem(&featureSettingsItems.items[key_val], key_val);
+ break;
#endif
-
default:
break;
}
@@ -322,7 +319,7 @@ void loadFeatureSettings(){
uint8_t item_index = fe_cur_page*LISTITEM_PER_PAGE + i;
switch (item_index)
{
- case SKEY_HIDEACK:
+ case SKEY_ACK:
settingPage[item_index].icon = toggleitem[infoSettings.terminalACK];
featureSettingsItems.items[i] = settingPage[item_index];
break;
@@ -395,28 +392,35 @@ void loadFeatureSettings(){
break;
#endif
#ifdef LCD_LED_PWM_CHANNEL
- case SKEY_LCD_BRIGHTNESS:
- settingPage[item_index].valueLabel = itemBrightness[infoSettings.lcd_brightness];
- featureSettingsItems.items[i] = settingPage[item_index];
- break;
+ case SKEY_LCD_BRIGHTNESS:
+ {
+ char tempstr[8];
+ my_sprintf(tempstr,(char *)textSelect(LABEL_PERCENT_VALUE),infoSettings.lcd_idle_brightness);
+ setDynamicTextValue(i,tempstr);
+ featureSettingsItems.items[i] = settingPage[item_index];
+ }
+ break;
- case SKEY_LCD_BRIGTHNESS_DIM:
- settingPage[item_index].valueLabel = itemBrightness[infoSettings.lcd_idle_brightness];
- featureSettingsItems.items[i] = settingPage[item_index];
- break;
- case SKEY_LCD_DIM_IDLE_TIMER:
- settingPage[item_index].valueLabel = itemDimTime[infoSettings.lcd_idle_timer];
- featureSettingsItems.items[i] = settingPage[item_index];
- break;
+ case SKEY_LCD_BRIGTHNESS_DIM:
+ {
+ char tempstr[8];
+ my_sprintf(tempstr,(char *)textSelect(LABEL_PERCENT_VALUE),infoSettings.lcd_idle_brightness);
+ setDynamicTextValue(i,tempstr);
+ featureSettingsItems.items[i] = settingPage[item_index];
+ break;
+ }
+ case SKEY_LCD_DIM_IDLE_TIMER:
+ settingPage[item_index].valueLabel = itemDimTime[infoSettings.lcd_idle_timer];
+ featureSettingsItems.items[i] = settingPage[item_index];
+ break;
#endif //LCD_LED_PWM_CHANNEL
#ifdef ST7920_SPI
- case SKEY_ST7920_FULLSCREEN:
- settingPage[item_index].icon = toggleitem[infoSettings.marlin_mode_fullscreen];
- featureSettingsItems.items[i] = settingPage[item_index];
- break;
+ case SKEY_ST7920_FULLSCREEN:
+ settingPage[item_index].icon = toggleitem[infoSettings.marlin_mode_fullscreen];
+ featureSettingsItems.items[i] = settingPage[item_index];
+ break;
#endif
-
default:
featureSettingsItems.items[i].icon = ICONCHAR_BACKGROUND;
break;
diff --git a/TFT/src/User/Menu/Heat.c b/TFT/src/User/Menu/Heat.c
index 186c8000d6..3994fa2ac8 100644
--- a/TFT/src/User/Menu/Heat.c
+++ b/TFT/src/User/Menu/Heat.c
@@ -38,7 +38,6 @@ const ITEM itemDegree[ITEM_DEGREE_NUM] = {
const u8 item_degree[ITEM_DEGREE_NUM] = {1, 5, 10};
static u8 item_degree_i = 1;
-const u16 heat_max_temp[] = HEAT_MAX_TEMP;
const char* toolID[] = HEAT_SIGN_ID;
const char* const heatDisplayID[] = HEAT_DISPLAY_ID;
const char* heatCmd[] = HEAT_CMD;
@@ -89,7 +88,7 @@ bool heatGetIsWaiting(TOOL tool)
bool heatHasWaiting(void)
{
TOOL i;
- for(i = BED; i < HEATER_NUM; i++)
+ for(i = BED; i < infoSettings.tool_count; i++)
{
if(heater.T[i].waiting != WAIT_NONE)
return true;
@@ -113,7 +112,7 @@ void heatSetIsWaiting(TOOL tool, HEATER_WAIT isWaiting)
void heatClearIsWaiting(void)
{
- for(TOOL i = BED; i < HEATER_NUM; i++)
+ for(TOOL i = BED; i < infoSettings.tool_count; i++)
{
heater.T[i].waiting = WAIT_NONE;
}
@@ -123,7 +122,7 @@ void heatClearIsWaiting(void)
/* Set current heater tool, nozzle or hot bed */
void heatSetCurrentTool(TOOL tool)
{
- if(tool >= HEATER_NUM) return;
+ if(tool >= infoSettings.tool_count) return;
heater.tool = tool;
}
/* Get current tool, nozzle or hot bed */
@@ -135,7 +134,7 @@ TOOL heatGetCurrentTool(void)
/* Set current nozzle */
void heatSetCurrentToolNozzle(TOOL tool)
{
- if(tool >= HEATER_NUM && tool < NOZZLE0) return;
+ if(tool >= infoSettings.tool_count && tool < NOZZLE0) return;
heater.nozzle = tool;
heater.tool = tool;
}
@@ -215,22 +214,22 @@ void menuHeat(void)
heater.T[heater.tool].target =
limitValue( 0,
heater.T[heater.tool].target - item_degree[item_degree_i],
- heat_max_temp[heater.tool]);
+ infoSettings.max_temp[heater.tool]);
}
break;
case KEY_ICON_3:
- if(heater.T[heater.tool].target < heat_max_temp[heater.tool])
+ if(heater.T[heater.tool].target < infoSettings.max_temp[heater.tool])
{
heater.T[heater.tool].target =
limitValue( 0,
heater.T[heater.tool].target + item_degree[item_degree_i],
- heat_max_temp[heater.tool]);
+ infoSettings.max_temp[heater.tool]);
}
break;
case KEY_ICON_4:
- lastHeater.tool = heater.tool = (TOOL)((heater.tool+1) % HEATER_NUM);
+ lastHeater.tool = heater.tool = (TOOL)((heater.tool+1) % (infoSettings.tool_count + 1));
heatItems.items[key_num] = itemTool[heater.tool];
menuDrawItem(&heatItems.items[key_num], key_num);
showTemperature();
@@ -254,19 +253,19 @@ void menuHeat(void)
#if LCD_ENCODER_SUPPORT
if(encoderPosition)
{
- if(heater.T[heater.tool].target < heat_max_temp[heater.tool] && encoderPosition > 0)
+ if(heater.T[heater.tool].target < infoSettings.max_temp[heater.tool] && encoderPosition > 0)
{
heater.T[heater.tool].target =
limitValue( 0,
heater.T[heater.tool].target + item_degree[item_degree_i],
- heat_max_temp[heater.tool]);
+ infoSettings.max_temp[heater.tool]);
}
if(heater.T[heater.tool].target > 0 && encoderPosition < 0)
{
heater.T[heater.tool].target =
limitValue( 0,
heater.T[heater.tool].target - item_degree[item_degree_i],
- heat_max_temp[heater.tool]);
+ infoSettings.max_temp[heater.tool]);
}
encoderPosition = 0;
}
@@ -316,7 +315,7 @@ void loopCheckHeater(void)
}while(0);
/* Query the heater that needs to wait for the temperature to rise, whether it reaches the set temperature */
- for(u8 i=0; iname[item_index]);
}
else{
customItems.items[i].icon = ICONCHAR_BACKGROUND;
@@ -150,7 +41,7 @@ void loaditemsCustomGcode(void){
}
}
// set page up down button according to page count and current page
- if (CKEY_COUNT <= LISTITEM_PER_PAGE)
+ if (gcode_num <= LISTITEM_PER_PAGE)
{
customItems.items[5].icon = ICONCHAR_BACKGROUND;
customItems.items[6].icon = ICONCHAR_BACKGROUND;
@@ -161,7 +52,7 @@ void loaditemsCustomGcode(void){
customItems.items[5].icon = ICONCHAR_BACKGROUND;
customItems.items[6].icon = ICONCHAR_PAGEDOWN;
}
- else if(gc_cur_page == (GC_PAGE_COUNT-1)){
+ else if(gc_cur_page == (gc_page_count-1)){
customItems.items[5].icon = ICONCHAR_PAGEUP;
customItems.items[6].icon = ICONCHAR_BACKGROUND;
}
@@ -171,14 +62,20 @@ void loaditemsCustomGcode(void){
customItems.items[6].icon = ICONCHAR_PAGEDOWN;
}
}
- // menuDrawListItem(&customItems.items[5],5);
- //menuDrawListItem(&customItems.items[6],6);
}
void menuCustom(void)
{
- KEY_VALUES key_num = KEY_IDLE;
+ //load custom codes
+ customcodes = (CUSTOM_GCODES*)malloc(sizeof(CUSTOM_GCODES));
gc_cur_page = 0;
+ W25Qxx_ReadBuffer((u8*)customcodes,CUSTOM_GCODE_ADDR,sizeof(CUSTOM_GCODES));
+ gcode_num = customcodes->count;
+
+ gc_page_count = (gcode_num+LISTITEM_PER_PAGE-1)/LISTITEM_PER_PAGE;
+
+ KEY_VALUES key_num = KEY_IDLE;
+
loaditemsCustomGcode();
menuDrawListPage(&customItems);
@@ -186,56 +83,67 @@ void menuCustom(void)
{
key_num = menuKeyGetValue();
- if(key_num < LISTITEM_PER_PAGE){
- sendCustomGcode(key_num);
+ if (key_num < LISTITEM_PER_PAGE)
+ {
+ uint32_t item_index = gc_cur_page * LISTITEM_PER_PAGE + key_num;
+ if (item_index < gcode_num)
+ {
+ storeCmd(customcodes->gcode[item_index]);
+ }
}
switch(key_num)
{
- case KEY_ICON_5:
- if(GC_PAGE_COUNT > 1){
- if (gc_cur_page > 0){
- gc_cur_page--;
- loaditemsCustomGcode();
- menuRefreshListPage();
- }
- }
- break;
- case KEY_ICON_6:
- if(GC_PAGE_COUNT > 1){
- if (gc_cur_page < GC_PAGE_COUNT-1){
- gc_cur_page++;
- loaditemsCustomGcode();
- menuRefreshListPage();
- }
- }
- break;
- case KEY_ICON_7:
- infoMenu.cur--;
- break;
- default:
- break;
+ case KEY_ICON_5:
+ if (gc_page_count > 1)
+ {
+ if (gc_cur_page > 0)
+ {
+ gc_cur_page--;
+ loaditemsCustomGcode();
+ menuRefreshListPage();
+ }
+ }
+ break;
+ case KEY_ICON_6:
+ if (gc_page_count > 1)
+ {
+ if (gc_cur_page < gc_page_count - 1)
+ {
+ gc_cur_page++;
+ loaditemsCustomGcode();
+ menuRefreshListPage();
+ }
+ }
+ break;
+ case KEY_ICON_7:
+ infoMenu.cur--;
+ break;
+ default:
+ break;
}
loopProcess();
}
+ free(customcodes);
}
-MENUITEMS RGBItems = {
-// title
-LABEL_RGB_SETTINGS,
-// icon label
- {{ICON_RGB_RED, LABEL_RED},
- {ICON_RGB_GREEN, LABEL_GREEN},
- {ICON_RGB_BLUE, LABEL_BLUE},
- {ICON_RGB_WHITE, LABEL_WHITE},
- {ICON_RGB_OFF, LABEL_OFF},
- {ICON_BACKGROUND, LABEL_BACKGROUND},
- {ICON_BACKGROUND, LABEL_BACKGROUND},
- {ICON_BACK, LABEL_BACK},}
-};
void menuRGBSettings(void)
{
+ MENUITEMS RGBItems = {
+ // title
+ LABEL_RGB_SETTINGS,
+ // icon label
+ {{ICON_RGB_RED, LABEL_RED},
+ {ICON_RGB_GREEN, LABEL_GREEN},
+ {ICON_RGB_BLUE, LABEL_BLUE},
+ {ICON_RGB_WHITE, LABEL_WHITE},
+ {ICON_RGB_OFF, LABEL_OFF},
+ {ICON_BACKGROUND, LABEL_BACKGROUND},
+ {ICON_BACKGROUND, LABEL_BACKGROUND},
+ {ICON_BACK, LABEL_BACK},}
+ };
+
KEY_VALUES key_num = KEY_IDLE;
menuDrawPage(&RGBItems);
@@ -277,22 +185,22 @@ void menuRGBSettings(void)
}
-MENUITEMS machineSettingsItems = {
-// title
-LABEL_MACHINE_SETTINGS,
-// icon label
- {{ICON_CUSTOM, LABEL_CUSTOM},
- {ICON_RGB_SETTINGS, LABEL_RGB_SETTINGS},
- {ICON_GCODE, LABEL_GCODE},
- {ICON_SHUT_DOWN, LABEL_SHUT_DOWN},
- {ICON_PARAMETER, LABEL_PARAMETER_SETTING},
- {ICON_BACKGROUND, LABEL_BACKGROUND},
- {ICON_BACKGROUND, LABEL_BACKGROUND},
- {ICON_BACK, LABEL_BACK},}
-};
-
void menuMachineSettings(void)
{
+
+ MENUITEMS machineSettingsItems = {
+ // title
+ LABEL_MACHINE_SETTINGS,
+ // icon label
+ {{ICON_CUSTOM, LABEL_CUSTOM},
+ {ICON_RGB_SETTINGS, LABEL_RGB_SETTINGS},
+ {ICON_GCODE, LABEL_TERMINAL},
+ {ICON_SHUT_DOWN, LABEL_SHUT_DOWN},
+ {ICON_PARAMETER, LABEL_PARAMETER_SETTING},
+ {ICON_BACKGROUND, LABEL_BACKGROUND},
+ {ICON_BACKGROUND, LABEL_BACKGROUND},
+ {ICON_BACK, LABEL_BACK},}
+ };
KEY_VALUES key_num = KEY_IDLE;
menuDrawPage(&machineSettingsItems);
diff --git a/TFT/src/User/Menu/MachineSettings.h b/TFT/src/User/Menu/MachineSettings.h
index 5f90338f76..cd30e3a2c5 100644
--- a/TFT/src/User/Menu/MachineSettings.h
+++ b/TFT/src/User/Menu/MachineSettings.h
@@ -1,5 +1,6 @@
#ifndef _MACHINE_SETTINGS_H_
#define _MACHINE_SETTINGS_H_
+#include "includes.h"
void menuRGBSettings(void);
void menuMachineSettings(void);
diff --git a/TFT/src/User/Menu/MainPage.c b/TFT/src/User/Menu/MainPage.c
index c1c151ab1e..96a299d4e9 100644
--- a/TFT/src/User/Menu/MainPage.c
+++ b/TFT/src/User/Menu/MainPage.c
@@ -1,86 +1,103 @@
#include "MainPage.h"
#include "includes.h"
-MENUITEMS mainPageItems = {
+
+
+void unifiedMenu(void){
+ //1 title, ITEM_PER_PAGE items(icon+label)
+MENUITEMS unifiedPageItems = {
// title
- LABEL_READY,
- // icon label
- #ifdef UNIFIED_MENU //if Unified menu is selected
- {{ICON_HEAT_FAN, LABEL_UNIFIEDHEAT},
- {ICON_HOME_MOVE, LABEL_UNIFIEDMOVE},
- {ICON_EXTRUDE, LABEL_EXTRUDE},
- {ICON_STOP, LABEL_EMERGENCYSTOP},
- {ICON_GCODE, LABEL_GCODE},
- {ICON_CUSTOM, LABEL_CUSTOM},
- {ICON_SETTINGS, LABEL_SETTINGS},
- {ICON_BACK, LABEL_BACK}}
- #else
- {{ICON_HEAT, LABEL_PREHEAT},
- {ICON_MOVE, LABEL_MOVE},
- {ICON_HOME, LABEL_HOME},
- {ICON_PRINT, LABEL_PRINT},
- {ICON_EXTRUDE, LABEL_EXTRUDE},
- {ICON_FAN, LABEL_FAN},
- {ICON_SETTINGS, LABEL_SETTINGS},
- {ICON_LEVELING, LABEL_LEVELING}}
- #endif
+ LABEL_MAINMENU,
+ // icon label
+ {{ICON_HEAT_FAN, LABEL_UNIFIEDHEAT},
+ {ICON_HOME_MOVE, LABEL_UNIFIEDMOVE},
+ {ICON_EXTRUDE, LABEL_EXTRUDE},
+ {ICON_STOP, LABEL_EMERGENCYSTOP},
+ {ICON_GCODE, LABEL_TERMINAL},
+ {ICON_CUSTOM, LABEL_CUSTOM},
+ {ICON_SETTINGS, LABEL_SETTINGS},
+ {ICON_BACK, LABEL_BACK}}
};
-void menuMain(void)
+ KEY_VALUES key_num = KEY_IDLE;
+ GUI_SetBkColor(infoSettings.bg_color);
+
+ menuDrawPage(&unifiedPageItems);
+
+ while(infoMenu.menu[infoMenu.cur] == unifiedMenu)
+ {
+ key_num = menuKeyGetValue();
+ switch(key_num)
+ {
+ case KEY_ICON_0: infoMenu.menu[++infoMenu.cur] = menuUnifiedHeat; break;
+ case KEY_ICON_1: infoMenu.menu[++infoMenu.cur] = menuUnifiedMove; break;
+ case KEY_ICON_2: infoMenu.menu[++infoMenu.cur] = menuExtrude; break;
+ case KEY_ICON_3: storeCmd("M112\n"); break; // Emergency Stop : Used for emergency stopping, a reset is required to return to operational mode.
+ // it may need to wait for a space to open up in the command queue.
+ // Enable EMERGENCY_PARSER in Marlin Firmware for an instantaneous M112 command.
+ case KEY_ICON_4: infoMenu.menu[++infoMenu.cur] = menuSendGcode; break;
+ case KEY_ICON_5: infoMenu.menu[++infoMenu.cur] = menuCustom; break;
+ case KEY_ICON_6: infoMenu.menu[++infoMenu.cur] = menuSettings; break;
+ case KEY_ICON_7: infoMenu.cur--; break;
+ default:break;
+ }
+ loopProcess();
+ }
+}
+
+void classicMenu(void)
{
//1 title, ITEM_PER_PAGE items(icon+label)
+ MENUITEMS classicPageItems = {
+ // title
+ LABEL_READY,
+ // icon label
+ {{ICON_HEAT, LABEL_PREHEAT},
+ {ICON_MOVE, LABEL_MOVE},
+ {ICON_HOME, LABEL_HOME},
+ {ICON_PRINT, LABEL_PRINT},
+ {ICON_EXTRUDE, LABEL_EXTRUDE},
+ {ICON_FAN, LABEL_FAN},
+ {ICON_SETTINGS, LABEL_SETTINGS},
+ {ICON_LEVELING, LABEL_LEVELING}}
+ };
-
- #ifndef UNIFIED_MENU
- if(infoMachineSettings.autoLevel == 1){
- mainPageItems.items[7].icon = ICON_LEVELING;
- mainPageItems.items[7].label.index = LABEL_ABL;
+ if (infoMachineSettings.autoLevel == 1)
+ {
+ classicPageItems.items[7].icon = ICON_LEVELING;
+ classicPageItems.items[7].label.index = LABEL_ABL;
}
- else{
- mainPageItems.items[7].icon = ICON_MANUAL_LEVEL;
- mainPageItems.items[7].label.index = LABEL_LEVELING;
+ else
+ {
+ classicPageItems.items[7].icon = ICON_MANUAL_LEVEL;
+ classicPageItems.items[7].label.index = LABEL_LEVELING;
}
- #endif
-
KEY_VALUES key_num=KEY_IDLE;
- GUI_SetBkColor(ST7920_BKCOLOR);
- menuDrawPage(&mainPageItems);
+ GUI_SetBkColor(infoSettings.bg_color);
+
+ menuDrawPage(&classicPageItems);
- while(infoMenu.menu[infoMenu.cur] == menuMain)
+ while(infoMenu.menu[infoMenu.cur] == classicMenu)
{
key_num = menuKeyGetValue();
switch(key_num)
{
- #ifdef UNIFIED_MENU //if Unified menu is selected
- case KEY_ICON_0: infoMenu.menu[++infoMenu.cur] = menuUnifiedHeat; break;
- case KEY_ICON_1: infoMenu.menu[++infoMenu.cur] = menuUnifiedMove; break;
- case KEY_ICON_2: infoMenu.menu[++infoMenu.cur] = menuExtrude; break;
- case KEY_ICON_3: storeCmd("M112\n"); break; // Emergency Stop : Used for emergency stopping, a reset is required to return to operational mode.
- // it may need to wait for a space to open up in the command queue.
- // Enable EMERGENCY_PARSER in Marlin Firmware for an instantaneous M112 command.
- case KEY_ICON_4: infoMenu.menu[++infoMenu.cur] = menuSendGcode; break;
- case KEY_ICON_5: infoMenu.menu[++infoMenu.cur] = menuCustom; break;
- case KEY_ICON_6: infoMenu.menu[++infoMenu.cur] = menuSettings; break;
- case KEY_ICON_7: infoMenu.cur--; break;
- default:break;
- #else
- case KEY_ICON_0: infoMenu.menu[++infoMenu.cur] = menuPreheat; break;
- case KEY_ICON_1: infoMenu.menu[++infoMenu.cur] = menuMove; break;
- case KEY_ICON_2: infoMenu.menu[++infoMenu.cur] = menuHome; break;
- case KEY_ICON_3: infoMenu.menu[++infoMenu.cur] = menuPrint; break;
- case KEY_ICON_4: infoMenu.menu[++infoMenu.cur] = menuExtrude; break;
- case KEY_ICON_5: infoMenu.menu[++infoMenu.cur] = menuFan; break;
- case KEY_ICON_6: infoMenu.menu[++infoMenu.cur] = menuSettings; break;
- case KEY_ICON_7:
- if(infoMachineSettings.autoLevel == 1){
- infoMenu.menu[++infoMenu.cur] = menuAutoLeveling;
- }
- else{
- infoMenu.menu[++infoMenu.cur] = menuManualLeveling;
- }
- break;
- default:break;
- #endif
+ case KEY_ICON_0: infoMenu.menu[++infoMenu.cur] = menuPreheat; break;
+ case KEY_ICON_1: infoMenu.menu[++infoMenu.cur] = menuMove; break;
+ case KEY_ICON_2: infoMenu.menu[++infoMenu.cur] = menuHome; break;
+ case KEY_ICON_3: infoMenu.menu[++infoMenu.cur] = menuPrint; break;
+ case KEY_ICON_4: infoMenu.menu[++infoMenu.cur] = menuExtrude; break;
+ case KEY_ICON_5: infoMenu.menu[++infoMenu.cur] = menuFan; break;
+ case KEY_ICON_6: infoMenu.menu[++infoMenu.cur] = menuSettings; break;
+ case KEY_ICON_7:
+ if(infoMachineSettings.autoLevel == 1){
+ infoMenu.menu[++infoMenu.cur] = menuAutoLeveling;
+ }
+ else{
+ infoMenu.menu[++infoMenu.cur] = menuManualLeveling;
+ }
+ break;
+ default:break;
}
loopProcess();
}
diff --git a/TFT/src/User/Menu/MainPage.h b/TFT/src/User/Menu/MainPage.h
index ee59625014..a7aa82c92e 100644
--- a/TFT/src/User/Menu/MainPage.h
+++ b/TFT/src/User/Menu/MainPage.h
@@ -1,6 +1,7 @@
#ifndef _MAINPAGE_H_
#define _MAINPAGE_H_
-void menuMain(void);
+void unifiedMenu(void);
+void classicMenu(void);
#endif
diff --git a/TFT/src/User/Menu/Mode.c b/TFT/src/User/Menu/Mode.c
index 8daac71c5b..47f49b22e5 100644
--- a/TFT/src/User/Menu/Mode.c
+++ b/TFT/src/User/Menu/Mode.c
@@ -38,14 +38,14 @@ void infoMenuSelect(void)
#ifdef BUZZER_PIN
Buzzer_Config();
#endif
- GUI_SetColor(FONT_COLOR);
- GUI_SetBkColor(BACKGROUND_COLOR);
+ GUI_SetColor(lcd_colors[infoSettings.font_color]);
+ GUI_SetBkColor(lcd_colors[infoSettings.bg_color]);
- #ifdef UNIFIED_MENU //if Unified menu is selected
+ if(infoSettings.unified_menu == 1) //if Unified menu is selected
infoMenu.menu[infoMenu.cur] = menuStatus; //status screen as default screen on boot
- #else // classic UI
- infoMenu.menu[infoMenu.cur] = menuMain;
- #endif
+ else
+ infoMenu.menu[infoMenu.cur] = classicMenu; // classic UI
+
#ifdef SHOW_BTT_BOOTSCREEN
if (freshboot)
{
@@ -76,8 +76,8 @@ void infoMenuSelect(void)
knob_LED_DeInit();
#endif
#endif
- GUI_SetColor(ST7920_FNCOLOR);
- GUI_SetBkColor(ST7920_BKCOLOR);
+ GUI_SetColor(lcd_colors[infoSettings.marlin_mode_font_color]);
+ GUI_SetBkColor(lcd_colors[infoSettings.marlin_mode_bg_color]);
infoMenu.menu[infoMenu.cur] = menuST7920;
break;
diff --git a/TFT/src/User/Menu/More.c b/TFT/src/User/Menu/More.c
index ba30c0e2a3..34aeaf704b 100644
--- a/TFT/src/User/Menu/More.c
+++ b/TFT/src/User/Menu/More.c
@@ -5,7 +5,7 @@ void menuIsPause(void)
{
u16 key_num = IDLE_TOUCH;
- popupDrawPage(bottomDoubleBtn, textSelect(LABEL_WARNING), textSelect(LABEL_IS_PAUSE), textSelect(LABEL_CONFIRM), textSelect(LABEL_CANNEL));
+ popupDrawPage(bottomDoubleBtn, textSelect(LABEL_WARNING), textSelect(LABEL_IS_PAUSE), textSelect(LABEL_CONFIRM), textSelect(LABEL_CANCEL));
while(infoMenu.menu[infoMenu.cur] == menuIsPause)
{
diff --git a/TFT/src/User/Menu/Move.c b/TFT/src/User/Menu/Move.c
index 930bc74386..ce1c7439da 100644
--- a/TFT/src/User/Menu/Move.c
+++ b/TFT/src/User/Menu/Move.c
@@ -41,7 +41,7 @@ LABEL_MOVE,
}
};
-const uint32_t item_move_speed[] = {DEFAULT_SPEED_MOVE, SPEED_MOVE_SLOW, SPEED_MOVE_FAST};
+//const uint32_t item_move_speed[] = {DEFAULT_SPEED_MOVE, SPEED_MOVE_SLOW, SPEED_MOVE_FAST};
#define ITEM_MOVE_LEN_NUM 3
const ITEM itemMoveLen[ITEM_MOVE_LEN_NUM] = {
@@ -114,7 +114,7 @@ void menuMove(void)
menuDrawPage(&moveItems);
mustStoreCmd("G91\n");
- mustStoreCmd("G1 F%d\n",item_move_speed[infoSettings.move_speed]);
+ mustStoreCmd("G1 F%d\n",infoSettings.axis_speed[infoSettings.move_speed]);
mustStoreCmd("M114\n");
drawXYZ();
@@ -195,15 +195,15 @@ void drawXYZ(void){
my_sprintf(tempstr, "X:%.1f ", getAxisLocation(0));
if (nowAxis == X_AXIS) GUI_SetColor(INFOBOX_ICON_COLOR);
GUI_DispString(START_X+1*SPACE_X+1*ICON_WIDTH,(ICON_START_Y-BYTE_HEIGHT)/2,(u8 *)tempstr);
- GUI_SetColor(FONT_COLOR);
+ GUI_SetColor(lcd_colors[infoSettings.font_color]);
my_sprintf(tempstr, "Y:%.1f ", getAxisLocation(1));
if (nowAxis == Y_AXIS) GUI_SetColor(INFOBOX_ICON_COLOR);
GUI_DispString(START_X+2*SPACE_X+2*ICON_WIDTH,(ICON_START_Y-BYTE_HEIGHT)/2,(u8 *)tempstr);
- GUI_SetColor(FONT_COLOR);
+ GUI_SetColor(lcd_colors[infoSettings.font_color]);
my_sprintf(tempstr, "Z:%.1f ", getAxisLocation(2));
if (nowAxis == Z_AXIS) GUI_SetColor(INFOBOX_ICON_COLOR);
GUI_DispString(START_X+3*SPACE_X+3*ICON_WIDTH,(ICON_START_Y-BYTE_HEIGHT)/2,(u8 *)tempstr);
- //GUI_SetBkColor(BACKGROUND_COLOR);
- GUI_SetColor(FONT_COLOR);
+ //GUI_SetBkColor(lcd_colors[infoSettings.bg_color]);
+ GUI_SetColor(lcd_colors[infoSettings.font_color]);
}
diff --git a/TFT/src/User/Menu/Parametersetting.c b/TFT/src/User/Menu/Parametersetting.c
index cc72ac1e02..cee7b02bfb 100644
--- a/TFT/src/User/Menu/Parametersetting.c
+++ b/TFT/src/User/Menu/Parametersetting.c
@@ -1,35 +1,6 @@
#include "Parametersetting.h"
#include "includes.h"
-const GUI_RECT rect_of_numkey[KEY_NUM]={
- {0*SKEYWIDTH, ICON_START_Y+0*SKEYHEIGHT, 1*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT},//1
- {1*SKEYWIDTH, ICON_START_Y+0*SKEYHEIGHT, 2*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT},//2
- {2*SKEYWIDTH, ICON_START_Y+0*SKEYHEIGHT, 3*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT},//3
- {3*SKEYWIDTH, ICON_START_Y+0*SKEYHEIGHT, 4*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT},//OK
-
- {0*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT, 1*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT},//4
- {1*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT, 2*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT},//5
- {2*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT, 3*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT},//6
- {3*SKEYWIDTH, ICON_START_Y+1*SKEYHEIGHT, 4*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT},//Del
-
- {0*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT, 1*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT},//7
- {1*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT, 2*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT},//8
- {2*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT, 3*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT},//9
- {3*SKEYWIDTH, ICON_START_Y+2*SKEYHEIGHT, 4*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT},//
-
- {0*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT, 1*SKEYWIDTH, ICON_START_Y+4*SKEYHEIGHT},//.
- {1*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT, 2*SKEYWIDTH, ICON_START_Y+4*SKEYHEIGHT},//0
- {2*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT, 3*SKEYWIDTH, ICON_START_Y+4*SKEYHEIGHT},//-
- {3*SKEYWIDTH, ICON_START_Y+3*SKEYHEIGHT, 4*SKEYWIDTH, ICON_START_Y+4*SKEYHEIGHT},//
-};
-
-const char *const Key_Num[KEY_NUM] = {
- "1","2","3","\u0894",
- "4","5","6","\u0899",
- "7","8","9","\u0895",
- ".","0","-",""
-};
-
const char *const parameter_Cmd[PARAMETERS_COUNT][STEPPER_COUNT] = {
{"M92 X%.2f\n", "M92 Y%.2f\n", "M92 Z%.2f\n", "M92 T0 E%.2f\n", "M92 T1 E%.2f\n"}, //Steps/mm
{"M906 X%.0f\n", "M906 Y%.0f\n", "M906 Z%.0f\n", "M906 T0 E%.0f\n", "M906 I1 E%.0f\n"}, //Current
@@ -140,12 +111,6 @@ void setParameter(PARAMETER_NAME name, int index, float val){
}
}
-//get keypress for NumPad
-NUM_KEY_VALUES NumKeyGetValue(void)
-{
- return (NUM_KEY_VALUES)KEY_GetValue(sizeof(rect_of_numkey)/sizeof(rect_of_numkey[0]), rect_of_numkey);
-}
-
//show menu for selected parameter type
void menuShowParameter(void){
KEY_VALUES key_num = KEY_IDLE;
@@ -154,11 +119,11 @@ void menuShowParameter(void){
// title
parameter_names[cur_parameter],
// icon ItemType Item Title item value text(only for custom value)
- {{ICONCHAR_EDIT, LIST_CUSTOMVALUE, LABEL_DYNAMIC, LABEL_DYNAMIC},
- {ICONCHAR_EDIT, LIST_CUSTOMVALUE, LABEL_DYNAMIC, LABEL_DYNAMIC},
- {ICONCHAR_EDIT, LIST_CUSTOMVALUE, LABEL_DYNAMIC, LABEL_DYNAMIC},
- {ICONCHAR_EDIT, LIST_CUSTOMVALUE, LABEL_DYNAMIC, LABEL_DYNAMIC},
- {ICONCHAR_BACKGROUND, LIST_CUSTOMVALUE, LABEL_DYNAMIC, LABEL_DYNAMIC},
+ {{ICONCHAR_EDIT, LIST_CUSTOMVALUE, LABEL_DYNAMIC, LABEL_CUSTOM_VALUE},
+ {ICONCHAR_EDIT, LIST_CUSTOMVALUE, LABEL_DYNAMIC, LABEL_CUSTOM_VALUE},
+ {ICONCHAR_EDIT, LIST_CUSTOMVALUE, LABEL_DYNAMIC, LABEL_CUSTOM_VALUE},
+ {ICONCHAR_EDIT, LIST_CUSTOMVALUE, LABEL_DYNAMIC, LABEL_CUSTOM_VALUE},
+ {ICONCHAR_BACKGROUND, LIST_CUSTOMVALUE, LABEL_DYNAMIC, LABEL_CUSTOM_VALUE},
{ICONCHAR_BACKGROUND, LIST_LABEL, LABEL_BACKGROUND, LABEL_BACKGROUND},
{ICONCHAR_BACKGROUND, LIST_LABEL, LABEL_BACKGROUND, LABEL_BACKGROUND},
{ICONCHAR_BACK, LIST_LABEL, LABEL_BACKGROUND, LABEL_BACKGROUND},}
@@ -210,7 +175,7 @@ void menuShowParameter(void){
//accept negative values only for probe offset
bool negative_val = false;
if(cur_parameter == P_PROBE_OFFSET || cur_parameter == P_BUMPSENSITIVITY) negative_val = true;
- float v = num_pad(getParameter(cur_parameter,key_num),negative_val);
+ float v = numPadFloat(getParameter(cur_parameter,key_num),negative_val);
if (v != getParameter(cur_parameter,key_num))
{
storeCmd(parameter_Cmd[cur_parameter][key_num],v);
@@ -340,147 +305,6 @@ void menuParameterSettings(void){
}
-void Draw_keyboard(void)
-{
- TSC_ReDrawIcon = NULL;
- GUI_SetBkColor(BLACK);
- GUI_ClearRect(0, 0, LCD_WIDTH, rect_of_numkey[0].y0);
- GUI_SetBkColor(WHITE);
- GUI_ClearRect(0, rect_of_numkey[0].y0, LCD_WIDTH, LCD_HEIGHT);
- GUI_SetColor(BLACK);
-
- for (int i = 0;i<3;i++){
- GUI_DrawLine(rect_of_numkey[i].x1,rect_of_numkey[i].y0,rect_of_numkey[12+i].x1,rect_of_numkey[12+i].y1);
- GUI_DrawLine(rect_of_numkey[i*4].x0,rect_of_numkey[i*4].y1,rect_of_numkey[3+i*4].x1,rect_of_numkey[3+i*4].y1);
- }
-
- for(uint8_t i=0 ;i");
- char tempstr[BUFLONG];
- my_sprintf(tempstr, "%.2f", old_val);
- GUI_SetColor(WHITE);
- GUI_DispStringInPrect(&oldParameterRect,(u8*)tempstr);
- touchSound = false;
- while (1)
- {
- key_num = NumKeyGetValue();
- switch (key_num)
- {
- case NUM_KEY_EXIT:
- BUZZER_PLAY(sound_cancel);
- touchSound = true;
- return old_val;
-
- case NUM_KEY_DEL:
- BUZZER_PLAY(sound_keypress);
- if(nowIndex)
- ParameterBuf[--nowIndex] = 0;
- break;
-
- case NUM_KEY_1:
- case NUM_KEY_2:
- case NUM_KEY_3:
- case NUM_KEY_4:
- case NUM_KEY_5:
- case NUM_KEY_6:
- case NUM_KEY_7:
- case NUM_KEY_8:
- case NUM_KEY_9:
- case NUM_KEY_0:
- BUZZER_PLAY(sound_keypress);
- if(nowIndex < BUFLONG-1)
- {
- ParameterBuf[nowIndex++] = Key_Num[key_num][0];
- ParameterBuf[nowIndex] = 0;
- }
- break;
- case NUM_KEY_DEC:
- BUZZER_PLAY(sound_keypress);
- if(!strchr((const char *)ParameterBuf, Key_Num[key_num][0])){
- if(nowIndex < BUFLONG-1)
- {
- ParameterBuf[nowIndex++] = Key_Num[key_num][0];
- ParameterBuf[nowIndex] = 0;
- }
- }
- break;
- case NUM_KEY_MINUS:
- BUZZER_PLAY(sound_keypress);
- if(!strchr((const char *)ParameterBuf, Key_Num[key_num][0]) && negative_val){
- if(nowIndex == 0)
- {
- ParameterBuf[nowIndex++] = Key_Num[key_num][0];
- ParameterBuf[nowIndex] = 0;
- }
- }
- break;
-
- case NUM_KEY_OK:
- /* if(nowIndex)
- {
- ParameterBuf[nowIndex++] = '\n';
- ParameterBuf[nowIndex] = 0;
-
- cmd_long = strlen(para_cmd);
- cmd_buff = malloc(cmd_long + strlen(ParameterBuf));
- if(cmd_buff)
- {
- strcpy(cmd_buff, para_cmd);
- storeCmd(strcat(cmd_buff, ParameterBuf));
- free(cmd_buff);
- }
-
- ParameterBuf[nowIndex = 0] = 0;
-
- } */
-
- //Send_Settingcmd();
- BUZZER_PLAY(sound_ok);
- touchSound = true;
- return strtof(ParameterBuf,NULL);
-
- default:
- break;
- }
-
- if(lastIndex != nowIndex)
- {
- lastIndex = nowIndex;
- GUI_SetBkColor(BLACK);
- GUI_SetColor(WHITE);
- GUI_ClearPrect(&newParameterRect);
- GUI_DispStringInPrect(&newParameterRect, (u8 *)ParameterBuf);
- GUI_RestoreColorDefault();
- }
- loopBackEnd();
- }
-
-}
-
void temp_Change(void)
{
diff --git a/TFT/src/User/Menu/Parametersetting.h b/TFT/src/User/Menu/Parametersetting.h
index a9e40e3cff..7e8ae5a5ea 100644
--- a/TFT/src/User/Menu/Parametersetting.h
+++ b/TFT/src/User/Menu/Parametersetting.h
@@ -3,8 +3,6 @@
#include "menu.h"
#include "coordinate.h"
-#define SKEYHEIGHT (LCD_HEIGHT-ICON_START_Y)/4
-#define SKEYWIDTH LCD_WIDTH/4
#define ICON_NOZZLE_X 2*ICON_WIDTH+ICON_WIDTH/2
#define VALUE_NOZZLE_X ICON_NOZZLE_X+BYTE_WIDTH
@@ -12,47 +10,6 @@
#define ICON_BED_X 3*ICON_WIDTH+2*BYTE_WIDTH+ICON_WIDTH/2
#define VALUE_BED_X ICON_BED_X+BYTE_WIDTH
-#define KEY_NUM 16
-#define BUFLONG 6
-typedef enum
-{
- SKEY_0 = 0,
- SKEY_1,
- SKEY_2,
- SKEY_3,
- SKEY_4,
- SKEY_5,
- SKEY_6,
- SKEY_7,
- SKEY_8,
- SKEY_9,
- SKEY_10,
- SKEY_11,
- SKEY_IDLE = IDLE_TOUCH,
-}SKEY_VALUES;
-
-typedef enum
-{
- NUM_KEY_1 = 0,
- NUM_KEY_2,
- NUM_KEY_3,
- NUM_KEY_OK,
- NUM_KEY_4,
- NUM_KEY_5,
- NUM_KEY_6,
- NUM_KEY_DEL,
- NUM_KEY_7,
- NUM_KEY_8,
- NUM_KEY_9,
- NUM_KEY_EXIT,
- NUM_KEY_DEC,
- NUM_KEY_0,
- NUM_KEY_MINUS,
- NUM_KEY_15,
-
- NUM_KEY_IDLE = IDLE_TOUCH,
-}NUM_KEY_VALUES;
-
typedef enum
{
P_STEPS_PER_MM = 0,
@@ -95,7 +52,6 @@ float getParameter(PARAMETER_NAME name, int index);
void setParameter(PARAMETER_NAME name, int index, float val);
void menuParameterSettings(void);
-float num_pad(float old_val, bool negative_val);
void show_GlobalInfo(void);
void temp_Change(void);
diff --git a/TFT/src/User/Menu/PowerFailed.c b/TFT/src/User/Menu/PowerFailed.c
index 0d989906d5..1d4d1477c0 100644
--- a/TFT/src/User/Menu/PowerFailed.c
+++ b/TFT/src/User/Menu/PowerFailed.c
@@ -132,26 +132,29 @@ bool powerOffGetData(void)
mustStoreCacheCmd("%s\n", tool_change[infoBreakPoint.nozzle - NOZZLE0]);
if(infoBreakPoint.feedrate != 0)
{
- mustStoreCacheCmd("G92 Z%.3f\n", infoBreakPoint.axis[Z_AXIS]
- #ifdef BTT_MINI_UPS
- + POWER_LOSS_ZRAISE
- #endif
- );
- mustStoreCacheCmd("G1 Z%.3f\n", infoBreakPoint.axis[Z_AXIS]+POWER_LOSS_ZRAISE);
- #ifdef HOME_BEFORE_PLR
+ int btt_zraise = 0;
+ if(infoSettings.btt_ups == 1)
+ btt_zraise = infoSettings.powerloss_z_raise;
+ mustStoreCacheCmd("G92 Z%.3f\n", infoBreakPoint.axis[Z_AXIS]+ btt_zraise);
+ mustStoreCacheCmd("G1 Z%.3f\n", infoBreakPoint.axis[Z_AXIS]+infoSettings.powerloss_z_raise);
+ if (infoSettings.powerloss_home)
+ {
mustStoreCacheCmd("G28\n");
- mustStoreCacheCmd("G1 Z%.3f\n", infoBreakPoint.axis[Z_AXIS]+POWER_LOSS_ZRAISE);
- #else
+ mustStoreCacheCmd("G1 Z%.3f\n", infoBreakPoint.axis[Z_AXIS] + infoSettings.powerloss_z_raise);
+ }
+ else
+ {
mustStoreCacheCmd("G28 R0 XY\n");
- #endif
+ }
+
mustStoreCacheCmd("M83\n");
mustStoreCacheCmd("G1 E30 F300\n");
- mustStoreCacheCmd("G1 E-%d F4800\n", NOZZLE_PAUSE_RETRACT_LENGTH);
+ mustStoreCacheCmd("G1 E-%d F4800\n", infoSettings.pause_retract_len);
mustStoreCacheCmd("G1 X%.3f Y%.3f Z%.3f F3000\n",
infoBreakPoint.axis[X_AXIS],
infoBreakPoint.axis[Y_AXIS],
infoBreakPoint.axis[Z_AXIS]);
- mustStoreCacheCmd("G1 E%d F4800\n", NOZZLE_RESUME_PURGE_LENGTH);
+ mustStoreCacheCmd("G1 E%d F4800\n", infoSettings.resume_purge_len);
mustStoreCacheCmd("G92 E%.5f\n",infoBreakPoint.axis[E_AXIS]);
mustStoreCacheCmd("G1 F%d\n",infoBreakPoint.feedrate);
@@ -173,12 +176,12 @@ void menuPowerOff(void)
{
u16 key_num = IDLE_TOUCH;
clearPowerFailed();
- GUI_Clear(BACKGROUND_COLOR);
+ GUI_Clear(lcd_colors[infoSettings.bg_color]);
GUI_DispString((LCD_WIDTH - GUI_StrPixelWidth(textSelect(LABEL_LOADING)))/2, LCD_HEIGHT/2 - BYTE_HEIGHT, textSelect(LABEL_LOADING));
if(mountFS()==true && powerFailedExist())
{
- popupDrawPage(bottomDoubleBtn, textSelect(LABEL_POWER_FAILED), (u8* )infoFile.title, textSelect(LABEL_CONFIRM), textSelect(LABEL_CANNEL));
+ popupDrawPage(bottomDoubleBtn, textSelect(LABEL_POWER_FAILED), (u8* )infoFile.title, textSelect(LABEL_CONFIRM), textSelect(LABEL_CANCEL));
while(infoMenu.menu[infoMenu.cur]==menuPowerOff)
{
diff --git a/TFT/src/User/Menu/PowerFailed.h b/TFT/src/User/Menu/PowerFailed.h
index 824ba97493..20d74166b9 100644
--- a/TFT/src/User/Menu/PowerFailed.h
+++ b/TFT/src/User/Menu/PowerFailed.h
@@ -14,7 +14,7 @@ typedef struct
float axis[TOTAL_AXIS];
u32 feedrate;
u16 speed,flow;
- u16 target[HEATER_NUM],
+ u16 target[HEAT_NUM],
fan[FAN_NUM];
TOOL nozzle;
u32 offset;
diff --git a/TFT/src/User/Menu/PreheatMenu.c b/TFT/src/User/Menu/PreheatMenu.c
index 2ff96f8350..ac489a1612 100644
--- a/TFT/src/User/Menu/PreheatMenu.c
+++ b/TFT/src/User/Menu/PreheatMenu.c
@@ -1,26 +1,8 @@
#include "PreheatMenu.h"
#include "includes.h"
+STRINGS_STORE * preheatnames;
-MENUITEMS preheatItems = {
-// title
-LABEL_PREHEAT,
-// icon label
- {
- {ICON_PREHEAT_PLA, LABEL_PREHEAT_PLA},
- {ICON_PREHEAT_PETG, LABEL_PREHEAT_PETG},
- {ICON_PREHEAT_ABS, LABEL_PREHEAT_ABS},
- {ICON_BACKGROUND, LABEL_BACKGROUND},
- {ICON_BACKGROUND, LABEL_BACKGROUND},
- {ICON_PREHEAT_BOTH, LABEL_PREHEAT_BOTH},
- #ifdef UNIFIED_MENU
- {ICON_BACKGROUND, LABEL_BACKGROUND},
- #else
- {ICON_HEAT, LABEL_HEAT},
- #endif
- {ICON_BACK, LABEL_BACK},
- }
-};
const ITEM itemToolPreheat[] = {
// icon label
@@ -34,17 +16,51 @@ const ITEM itemToolPreheat[] = {
{ICON_NOZZLE, LABEL_NOZZLE},
};
-const u16 preheat_bed_temp[] = PREHEAT_BED;
-const u16 preheat_hotend_temp[] = PREHEAT_HOTEND;
+void drawPreheatNames(void)
+{
+ for (int i = 0;i < PREHEAT_COUNT;i++)
+ {
+ const GUI_RECT *rect;
+ rect = rect_of_key + ITEM_PER_PAGE + i;
+ GUI_ClearPrect(rect);
+ GUI_DispStringInPrect(rect, (u8*)preheatnames->preheat_name[i]);
+ }
+}
void menuPreheat(void)
{
+ MENUITEMS preheatItems = {
+ // title
+ LABEL_PREHEAT,
+ // icon label
+ {
+ {ICON_PREHEAT_PLA, LABEL_BACKGROUND},
+ {ICON_PREHEAT_PETG, LABEL_BACKGROUND},
+ {ICON_PREHEAT_ABS, LABEL_BACKGROUND},
+ {ICON_BACKGROUND, LABEL_BACKGROUND},
+ {ICON_BACKGROUND, LABEL_BACKGROUND},
+ {ICON_PREHEAT_BOTH, LABEL_PREHEAT_BOTH},
+ {ICON_BACKGROUND, LABEL_BACKGROUND},
+ {ICON_BACK, LABEL_BACK},
+ }
+ };
+
+ if(infoSettings.unified_menu !=1)
+ {
+ preheatItems.items[6].icon = ICON_HEAT;
+ preheatItems.items[6].label.index = LABEL_HEAT;
+ }
+
+ preheatnames = (STRINGS_STORE*)malloc(sizeof(STRINGS_STORE));
+ uint8_t *data_p = (uint8_t *)preheatnames;
+ W25Qxx_ReadBuffer(data_p,STRINGS_STORE_ADDR,sizeof(STRINGS_STORE));
+
static TOOLPREHEAT nowHeater = BOTH;
KEY_VALUES key_num = KEY_IDLE;
menuDrawPage(&preheatItems);
-
+ drawPreheatNames();
while(infoMenu.menu[infoMenu.cur] == menuPreheat)
{
key_num = menuKeyGetValue();
@@ -55,16 +71,17 @@ void menuPreheat(void)
case KEY_ICON_2:
switch(nowHeater){
case BOTH:
- heatSetTargetTemp(BED, preheat_bed_temp[key_num]);
- heatSetTargetTemp(heatGetCurrentToolNozzle(), preheat_hotend_temp[key_num]);
+ heatSetTargetTemp(BED, infoSettings.preheat_bed[key_num]);
+ heatSetTargetTemp(heatGetCurrentToolNozzle(), infoSettings.preheat_temp[key_num]);
break;
case BED_PREHEAT:
- heatSetTargetTemp(BED, preheat_bed_temp[key_num]);
+ heatSetTargetTemp(BED, infoSettings.preheat_bed[key_num]);
break;
case NOZZLE0_PREHEAT:
- heatSetTargetTemp(heatGetCurrentToolNozzle(), preheat_hotend_temp[key_num]);
+ heatSetTargetTemp(heatGetCurrentToolNozzle(), infoSettings.preheat_temp[key_num]);
break;
}
+ drawPreheatNames();
break;
case KEY_ICON_5:
@@ -73,13 +90,15 @@ void menuPreheat(void)
menuDrawItem(&preheatItems.items[key_num], key_num);;
break;
- #ifndef UNIFIED_MENU
case KEY_ICON_6:
- infoMenu.menu[++infoMenu.cur] = menuHeat;
+ if(infoSettings.unified_menu != 1)
+ {
+ infoMenu.menu[++infoMenu.cur] = menuHeat;
+ }
break;
- #endif
case KEY_ICON_7:
+ free(preheatnames);
infoMenu.cur--; break;
default:break;
}
diff --git a/TFT/src/User/Menu/Print.c b/TFT/src/User/Menu/Print.c
index 0ee73ccc8a..6360429c66 100644
--- a/TFT/src/User/Menu/Print.c
+++ b/TFT/src/User/Menu/Print.c
@@ -104,9 +104,9 @@ void gocdeIconDraw(void)
scrollFileNameCreate(0);
Scroll_CreatePara(&titleScroll, (uint8_t* )infoFile.title, &titleRect);
printIconItems.title.address = (uint8_t* )infoFile.title;
- GUI_SetBkColor(TITLE_BACKGROUND_COLOR);
+ GUI_SetBkColor(lcd_colors[infoSettings.title_bg_color]);
GUI_ClearPrect(&titleRect);
- GUI_SetBkColor(BACKGROUND_COLOR);
+ GUI_SetBkColor(lcd_colors[infoSettings.bg_color]);
//draw folders
for(i=0;(i + infoFile.cur_page * NUM_PER_PAGE < infoFile.F_num) && (i < NUM_PER_PAGE) ; i++) // folder
@@ -153,9 +153,9 @@ void gocdeListDraw(void)
Scroll_CreatePara(&titleScroll, (u8 *)infoFile.title, &titleRect);
printListItems.title.address = (u8 *)infoFile.title;
- GUI_SetBkColor(TITLE_BACKGROUND_COLOR);
+ GUI_SetBkColor(lcd_colors[infoSettings.title_bg_color]);
GUI_ClearRect(0, 0, LCD_WIDTH, TITLE_END_Y);
- GUI_SetBkColor(BACKGROUND_COLOR);
+ GUI_SetBkColor(lcd_colors[infoSettings.bg_color]);
for (i = 0; (i + infoFile.cur_page * NUM_PER_PAGE < infoFile.F_num) && (i < NUM_PER_PAGE); i++) // folder
{
@@ -215,7 +215,7 @@ void menuPrintFromSource(void)
u8 update=0;
- GUI_Clear(BACKGROUND_COLOR);
+ GUI_Clear(lcd_colors[infoSettings.bg_color]);
GUI_DispStringInRect(0, 0, LCD_WIDTH, LCD_HEIGHT, textSelect(LABEL_LOADING));
if (mountFS() == true && scanPrintFiles() == true)
@@ -238,9 +238,9 @@ void menuPrintFromSource(void)
while(infoMenu.menu[infoMenu.cur] == menuPrintFromSource)
{
- GUI_SetBkColor(TITLE_BACKGROUND_COLOR);
+ GUI_SetBkColor(lcd_colors[infoSettings.title_bg_color]);
Scroll_DispString(&titleScroll, LEFT); //
- GUI_SetBkColor(BACKGROUND_COLOR);
+ GUI_SetBkColor(lcd_colors[infoSettings.bg_color]);
if(list_mode != true){
Scroll_DispString(&gcodeScroll, CENTER); //
diff --git a/TFT/src/User/Menu/Printing.c b/TFT/src/User/Menu/Printing.c
index f09a35a330..ea7fccf095 100644
--- a/TFT/src/User/Menu/Printing.c
+++ b/TFT/src/User/Menu/Printing.c
@@ -37,6 +37,9 @@ static int c_fan = 0;
static int c_speedID = 0;
static int key_pause = 4;
const char* Speed_ID[2] = {"Speed","Flow"};
+
+static PRINT_GCODES * printcodes = NULL;
+
#define LAYER_TITLE "Layer"
#define EXT_ICON_POS 0
#define BED_ICON_POS 1
@@ -81,7 +84,6 @@ const ITEM itemIsPause[2] = {
#endif
static PRINTING infoPrinting;
-static u32 update_time = M27_REFRESH * 1000;
static bool update_waiting = false;
@@ -143,11 +145,11 @@ void printSetUpdateWaiting(bool isWaiting)
void printerGotoIdle(void)
{
// disable all heater
- for(TOOL i = BED; i < HEATER_NUM; i++) {
+ for(TOOL i = BED; i < (infoSettings.tool_count+1); i++) {
mustStoreCmd("%s S0\n", heatCmd[i]);
}
// disable all fan
- for(u8 i = 0; i < FAN_NUM; i++) {
+ for(u8 i = 0; i < (infoSettings.fan_count+1); i++) {
mustStoreCmd("%s S0\n", fanCmd[i]);
}
// disable all stepper
@@ -167,6 +169,12 @@ u8 *getCurGcodeName(char *path)
void menuBeforePrinting(void)
{
+ //load stat/end/cancel gcodes from spi flash
+ printcodes = (PRINT_GCODES*)malloc(sizeof(PRINT_GCODES));
+ uint8_t *data_p = (uint8_t *)printcodes;
+ W25Qxx_ReadBuffer(data_p,CUSTOM_GCODE_ADDR,sizeof(printcodes));
+
+
long size = 0;
switch (infoFile.source)
{
@@ -198,7 +206,7 @@ void menuBeforePrinting(void)
printSetUpdateWaiting(true);
if (infoMachineSettings.autoReportSDStatus ==1){
- request_M27(M27_REFRESH); //Check if there is a SD or USB print running.
+ request_M27(infoSettings.m27_refresh_time*1000); //Check if there is a SD or USB print running.
}
else{
request_M27(0);
@@ -225,7 +233,7 @@ void menuBeforePrinting(void)
infoPrinting.size = f_size(&infoPrinting.file);
infoPrinting.cur = infoPrinting.file.fptr;
if(infoSettings.send_start_gcode == 1 && infoPrinting.cur == 0){ // PLR continue printing, CAN NOT use start gcode
- mustStoreCmd(PRINT_START_GCODE);
+ mustStoreCmd(printcodes->start_gcode);
}
break;
}
@@ -292,14 +300,14 @@ bool setPrintPause(bool is_pause, bool is_m0pause)
if (isCoorRelative == true) mustStoreCmd("G90\n");
if (isExtrudeRelative == true) mustStoreCmd("M82\n");
- if (heatGetCurrentTemp(heatGetCurrentToolNozzle()) > PREVENT_COLD_EXTRUSION_MINTEMP)
+ if (heatGetCurrentTemp(heatGetCurrentToolNozzle()) > infoSettings.min_ext_temp)
{
- mustStoreCmd("G1 E%.5f F%d\n", tmp.axis[E_AXIS] - NOZZLE_PAUSE_RETRACT_LENGTH, NOZZLE_PAUSE_E_FEEDRATE);
+ mustStoreCmd("G1 E%.5f F%d\n", tmp.axis[E_AXIS] - infoSettings.pause_retract_len, infoSettings.pause_feedrate[E_AXIS]);
}
if (coordinateIsKnown())
{
- mustStoreCmd("G1 Z%.3f F%d\n", tmp.axis[Z_AXIS] + NOZZLE_PAUSE_Z_RAISE, NOZZLE_PAUSE_Z_FEEDRATE);
- mustStoreCmd("G1 X%d Y%d F%d\n", NOZZLE_PAUSE_X_POSITION, NOZZLE_PAUSE_Y_POSITION, NOZZLE_PAUSE_XY_FEEDRATE);
+ mustStoreCmd("G1 Z%.3f F%d\n", tmp.axis[Z_AXIS] + infoSettings.pause_z_raise, infoSettings.pause_feedrate[E_AXIS]);
+ mustStoreCmd("G1 X%d Y%d F%d\n", infoSettings.pause_pos[X_AXIS], infoSettings.pause_pos[Y_AXIS], infoSettings.pause_feedrate[X_AXIS]);
}
if (isCoorRelative == true) mustStoreCmd("G91\n");
@@ -318,12 +326,12 @@ bool setPrintPause(bool is_pause, bool is_m0pause)
if (coordinateIsKnown())
{
- mustStoreCmd("G1 X%.3f Y%.3f F%d\n", tmp.axis[X_AXIS], tmp.axis[Y_AXIS], NOZZLE_PAUSE_XY_FEEDRATE);
- mustStoreCmd("G1 Z%.3f F%d\n", tmp.axis[Z_AXIS], NOZZLE_PAUSE_Z_FEEDRATE);
+ mustStoreCmd("G1 X%.3f Y%.3f F%d\n", tmp.axis[X_AXIS], tmp.axis[Y_AXIS], infoSettings.pause_feedrate[X_AXIS]);
+ mustStoreCmd("G1 Z%.3f F%d\n", tmp.axis[Z_AXIS], infoSettings.pause_feedrate[Z_AXIS]);
}
- if(heatGetCurrentTemp(heatGetCurrentToolNozzle()) > PREVENT_COLD_EXTRUSION_MINTEMP)
+ if(heatGetCurrentTemp(heatGetCurrentToolNozzle()) > infoSettings.min_ext_temp)
{
- mustStoreCmd("G1 E%.5f F%d\n", tmp.axis[E_AXIS] - NOZZLE_PAUSE_RETRACT_LENGTH + NOZZLE_RESUME_PURGE_LENGTH, NOZZLE_PAUSE_E_FEEDRATE);
+ mustStoreCmd("G1 E%.5f F%d\n", tmp.axis[E_AXIS] - infoSettings.pause_retract_len + infoSettings.resume_purge_len, infoSettings.pause_feedrate[E_AXIS]);
}
mustStoreCmd("G92 E%.5f\n", tmp.axis[E_AXIS]);
mustStoreCmd("G1 F%d\n", tmp.feedrate);
@@ -377,13 +385,16 @@ void reDrawFan(int icon_pos)
{
char tempstr[10];
u8 fs;
- #ifdef SHOW_FAN_PERCENTAGE
- fs = (fanGetSpeed(c_fan)*100)/255;
+ if (infoSettings.fan_percentage == 1)
+ {
+ fs = (fanGetSpeed(c_fan) * 100) / 255;
my_sprintf(tempstr, "%d%%", fs);
- #else
+ }
+ else
+ {
fs = fanGetSpeed(c_fan);
my_sprintf(tempstr, "%d", fs);
- #endif
+ }
GUI_SetTextMode(GUI_TEXTMODE_TRANS);
@@ -464,9 +475,9 @@ void toggleinfo(void)
{
if (OS_GetTimeMs() > nextTime)
{
- if (EXTRUDER_NUM > 1)
+ if (infoSettings.tool_count > 1)
{
- c_Ext = (TOOL)((c_Ext + 1) % HEATER_NUM);
+ c_Ext = (TOOL)((c_Ext + 1) % (infoSettings.tool_count+1));
if (c_Ext == 0)
{
c_Ext += 1;
@@ -475,7 +486,7 @@ void toggleinfo(void)
reValueNozzle(EXT_ICON_POS);
}
- if (FAN_NUM > 1)
+ if (infoSettings.fan_count > 1)
{
c_fan = (c_fan + 1) % FAN_NUM;
rapid_serial_loop(); //perform backend printing loop before drawing to avoid printer idling
@@ -629,6 +640,7 @@ void menuPrinting(void)
else
{
exitPrinting();
+
infoMenu.cur--;
}
break;
@@ -651,7 +663,7 @@ void endPrinting(void)
switch (infoFile.source)
{
case BOARD_SD:
- printSetUpdateWaiting(M27_WATCH_OTHER_SOURCES);
+ printSetUpdateWaiting(infoSettings.m27_active);
break;
case TFT_UDISK:
@@ -663,8 +675,9 @@ void endPrinting(void)
powerFailedClose();
powerFailedDelete();
if(infoSettings.send_end_gcode == 1){
- mustStoreCmd(PRINT_END_GCODE);
+ mustStoreCmd(printcodes->end_gcode);
}
+ free(printcodes);
printerGotoIdle();
}
@@ -710,7 +723,7 @@ void menuStopPrinting(void)
{
u16 key_num = IDLE_TOUCH;
- popupDrawPage(bottomDoubleBtn, textSelect(LABEL_WARNING), textSelect(LABEL_STOP_PRINT), textSelect(LABEL_CONFIRM), textSelect(LABEL_CANNEL));
+ popupDrawPage(bottomDoubleBtn, textSelect(LABEL_WARNING), textSelect(LABEL_STOP_PRINT), textSelect(LABEL_CONFIRM), textSelect(LABEL_CANCEL));
while(infoMenu.menu[infoMenu.cur] == menuStopPrinting)
{
@@ -736,8 +749,9 @@ void menuShutDown(void)
{
bool tempIsLower;
u16 key_num = IDLE_TOUCH;
-
- popupDrawPage(bottomDoubleBtn, textSelect(LABEL_SHUT_DOWN), textSelect(LABEL_WAIT_TEMP_SHUT_DOWN), textSelect(LABEL_FORCE_SHUT_DOWN), textSelect(LABEL_CANNEL));
+ char tempstr[75];
+ my_sprintf(tempstr,(char*)textSelect(LABEL_WAIT_TEMP_SHUT_DOWN),infoSettings.auto_off_temp);
+ popupDrawPage(bottomDoubleBtn, textSelect(LABEL_SHUT_DOWN), (u8*)tempstr, textSelect(LABEL_FORCE_SHUT_DOWN), textSelect(LABEL_CANCEL));
for(u8 i = 0; i < FAN_NUM; i++)
{
@@ -839,7 +853,7 @@ void getGcodeFromFile(void)
void loopCheckPrinting(void)
{
static u32 nextTime=0;
-
+ u32 update_time = infoSettings.m27_refresh_time * 1000;
do
{ /* WAIT FOR M27 */
if(update_waiting == true) {nextTime=OS_GetTimeMs()+update_time; break;}
diff --git a/TFT/src/User/Menu/ScreenSettings.c b/TFT/src/User/Menu/ScreenSettings.c
index eadb90bc30..f689b23d8f 100644
--- a/TFT/src/User/Menu/ScreenSettings.c
+++ b/TFT/src/User/Menu/ScreenSettings.c
@@ -1,19 +1,6 @@
#include "ScreenSettings.h"
#include "includes.h"
-
-MENUITEMS screenSettingsItems = {
-// title
-LABEL_SCREEN_SETTINGS,
-// icon label
- {{ICON_ROTATE_UI, LABEL_ROTATE_UI},
- {ICON_TOUCHSCREEN_ADJUST, LABEL_TOUCHSCREEN_ADJUST},
- {ICON_LANGUAGE, LABEL_LANGUAGE},
- {ICON_BACKGROUND, LABEL_BACKGROUND},
- {ICON_BACKGROUND, LABEL_BACKGROUND},
- {ICON_BACKGROUND, LABEL_BACKGROUND},
- {ICON_BACKGROUND, LABEL_BACKGROUND},
- {ICON_BACK, LABEL_BACK},}
-};
+#include "Colors.h"
#ifdef BUZZER_PIN // Speaker
#define BUZZER_KEY_INDEX KEY_ICON_3
@@ -37,39 +24,44 @@ LABEL_SCREEN_SETTINGS,
#endif
#define LCD12864_FN_INDEX (LCD12864_BG_INDEX+1)
- #define ITEM_COLOR_NUM 9
- const ITEM itemBGcolor[ITEM_COLOR_NUM] = {
- // icon label
- {ICON_BKCOLOR, LABEL_WHITE},
- {ICON_BKCOLOR, LABEL_BLACK},
- {ICON_BKCOLOR, LABEL_BLUE},
- {ICON_BKCOLOR, LABEL_RED},
- {ICON_BKCOLOR, LABEL_GREEN},
- {ICON_BKCOLOR, LABEL_CYAN},
- {ICON_BKCOLOR, LABEL_YELLOW},
- {ICON_BKCOLOR, LABEL_BROWN},
- {ICON_BKCOLOR, LABEL_GRAY},
- };
-
- const ITEM itemFontcolor[ITEM_COLOR_NUM] = {
- // icon label
- {ICON_FONTCOLOR, LABEL_WHITE},
- {ICON_FONTCOLOR, LABEL_BLACK},
- {ICON_FONTCOLOR, LABEL_BLUE},
- {ICON_FONTCOLOR, LABEL_RED},
- {ICON_FONTCOLOR, LABEL_GREEN},
- {ICON_FONTCOLOR, LABEL_CYAN},
- {ICON_FONTCOLOR, LABEL_YELLOW},
- {ICON_FONTCOLOR, LABEL_BROWN},
- {ICON_FONTCOLOR, LABEL_GRAY},
- };
- const u32 item_color[ITEM_COLOR_NUM] = {WHITE, BLACK, BLUE, RED, GREEN, CYAN, YELLOW, BROWN, GRAY};
- static u8 item_bgcolor_i = 0;
- static u8 item_fontcolor_i = 0;
#endif
+const LABEL lcd_colors_names[LCD_COLOR_COUNT] =
+{
+ LABEL_WHITE,
+ LABEL_BLACK,
+ LABEL_RED,
+ LABEL_GREEN,
+ LABEL_BLUE,
+ LABEL_CYAN,
+ LABEL_MAGENTA,
+ LABEL_YELLOW,
+ LABEL_ORANGE,
+ LABEL_PURPLE,
+ LABEL_LIME,
+ LABEL_BROWN,
+ LABEL_DARKBLUE,
+ LABEL_DARKGREEN,
+ LABEL_GRAY,
+ LABEL_DARKGRAY
+ };
void menuScreenSettings(void)
{
+
+MENUITEMS screenSettingsItems = {
+// title
+LABEL_SCREEN_SETTINGS,
+// icon label
+ {{ICON_ROTATE_UI, LABEL_ROTATE_UI},
+ {ICON_TOUCHSCREEN_ADJUST, LABEL_TOUCHSCREEN_ADJUST},
+ {ICON_LANGUAGE, LABEL_LANGUAGE},
+ {ICON_BACKGROUND, LABEL_BACKGROUND},
+ {ICON_BACKGROUND, LABEL_BACKGROUND},
+ {ICON_BACKGROUND, LABEL_BACKGROUND},
+ {ICON_BACKGROUND, LABEL_BACKGROUND},
+ {ICON_BACK, LABEL_BACK},}
+};
+
KEY_VALUES key_num = KEY_IDLE;
SETTINGS now = infoSettings;
@@ -85,22 +77,14 @@ void menuScreenSettings(void)
#endif
#ifdef ST7920_SPI
- for(u8 i=0; i X_MAX_POS){
- xaxis = X_MAX_POS;
+ if ( xaxis > infoSettings.machine_size_max[X_AXIS]){
+ xaxis = infoSettings.machine_size_max[X_AXIS];
}
break;
case 1:
yaxis += val;
- if ( yaxis > Y_MAX_POS){
- yaxis = Y_MAX_POS;
+ if ( yaxis > infoSettings.machine_size_max[Y_AXIS]){
+ yaxis = infoSettings.machine_size_max[Y_AXIS];
}
break;
case 2:
zaxis += val;
- if ( zaxis > Z_MAX_POS){
- zaxis = Z_MAX_POS;
+ if ( zaxis > infoSettings.machine_size_max[Z_AXIS]){
+ zaxis = infoSettings.machine_size_max[Z_AXIS];
}
break;
default:
@@ -192,20 +195,20 @@ void gantry_dec(int n, float val){
{
case 0:
xaxis -= val;
- if ( xaxis < X_MIN_POS){
- xaxis = X_MIN_POS;
+ if ( xaxis < infoSettings.machine_size_min[X_AXIS]){
+ xaxis = infoSettings.machine_size_min[X_AXIS];
}
break;
case 1:
yaxis -= val;
- if ( yaxis < Y_MIN_POS){
- yaxis = Y_MIN_POS;
+ if ( yaxis < infoSettings.machine_size_min[Y_AXIS]){
+ yaxis = infoSettings.machine_size_min[Y_AXIS];
}
break;
case 2:
zaxis -= val;
- if ( zaxis < Z_MIN_POS){
- zaxis = Z_MIN_POS;
+ if ( zaxis < infoSettings.machine_size_min[Z_AXIS]){
+ zaxis = infoSettings.machine_size_min[Z_AXIS];
}
break;
default:
@@ -305,15 +308,14 @@ void menuStatus(void)
{
booted = true;
KEY_VALUES key_num = KEY_IDLE;
- GUI_SetBkColor(BACKGROUND_COLOR);
+ GUI_SetBkColor(lcd_colors[infoSettings.bg_color]);
//set_status_icon();
menuDrawPage(&StatusItems);
- GUI_SetColor(GANTRYLBL_BKCOLOR);
+ GUI_SetColor(lcd_colors[infoSettings.status_xyz_bg_color]);
//GUI_ClearPrect(&RecGantry);
GUI_FillPrect(&RecGantry);
drawTemperature();
drawStatusScreenMsg();
-
while (infoMenu.menu[infoMenu.cur] == menuStatus)
{
if(infoHost.connected != lastConnection_status){
@@ -342,7 +344,7 @@ void menuStatus(void)
infoMenu.menu[++infoMenu.cur] = menuSpeed;
break;
case KEY_ICON_4:
- infoMenu.menu[++infoMenu.cur] = menuMain;
+ infoMenu.menu[++infoMenu.cur] = unifiedMenu;
break;
case KEY_ICON_7:
infoMenu.menu[++infoMenu.cur] = menuPrint;
diff --git a/TFT/src/User/Menu/StatusScreen.h b/TFT/src/User/Menu/StatusScreen.h
index 90fdb62ce3..8fef7a13c3 100644
--- a/TFT/src/User/Menu/StatusScreen.h
+++ b/TFT/src/User/Menu/StatusScreen.h
@@ -1,6 +1,6 @@
#ifndef _STATUSSCREEN_H_
#define _STATUSSCREEN_H_
-#include "GUI.h"
+#include "includes.h"
//Colors for drawing the icons
#define GANTRYLBL_BKCOLOR 0x2187
diff --git a/TFT/src/User/Menu/leveling.c b/TFT/src/User/Menu/leveling.c
index 63e1f26eaf..0e99aac0f9 100644
--- a/TFT/src/User/Menu/leveling.c
+++ b/TFT/src/User/Menu/leveling.c
@@ -76,19 +76,19 @@ LABEL_LEVELING,
void moveToLevelingPoint(u8 point)
{
- static const s16 pointPosition[][2] = {
- {LEVELING_POINT_1_X, LEVELING_POINT_1_Y},
- {LEVELING_POINT_2_X, LEVELING_POINT_2_Y},
- {LEVELING_POINT_3_X, LEVELING_POINT_3_Y},
- {LEVELING_POINT_4_X, LEVELING_POINT_4_Y},
+ s16 pointPosition[4][2] = {
+ {infoSettings.machine_size_min[X_AXIS] + infoSettings.level_edge, infoSettings.machine_size_min[Y_AXIS] + infoSettings.level_edge},
+ {infoSettings.machine_size_max[X_AXIS] - infoSettings.level_edge, infoSettings.machine_size_min[X_AXIS] + infoSettings.level_edge},
+ {infoSettings.machine_size_max[X_AXIS] - infoSettings.level_edge, infoSettings.machine_size_max[Y_AXIS] - infoSettings.level_edge},
+ {infoSettings.machine_size_min[X_AXIS] + infoSettings.level_edge, infoSettings.machine_size_max[Y_AXIS] - infoSettings.level_edge},
};
if(coordinateIsKnown() == false)
{
storeCmd("G28\n");
}
- storeCmd("G0 Z%.3f F%d\n", LEVELING_POINT_MOVE_Z, LEVELING_POINT_Z_FEEDRATE);
- storeCmd("G0 X%d Y%d F%d\n", pointPosition[point][0], pointPosition[point][1], LEVELING_POINT_XY_FEEDRATE);
- storeCmd("G0 Z%.3f F%d\n", LEVELING_POINT_Z, LEVELING_POINT_Z_FEEDRATE);
+ storeCmd("G0 Z%.3f F%d\n", infoSettings.level_z_raise, infoSettings.level_feedrate[Z_AXIS]);
+ storeCmd("G0 X%d Y%d F%d\n", pointPosition[point][0], pointPosition[point][1], infoSettings.level_feedrate[X_AXIS]);
+ storeCmd("G0 Z%.3f F%d\n", infoSettings.level_z_pos, infoSettings.level_feedrate[Z_AXIS]);
}
void menuManualLeveling(void)
diff --git a/TFT/src/User/Menu/menu.c b/TFT/src/User/Menu/menu.c
index 40577052cd..337f0378bc 100644
--- a/TFT/src/User/Menu/menu.c
+++ b/TFT/src/User/Menu/menu.c
@@ -54,16 +54,16 @@ void menuClearGaps(void)
{3*ICON_WIDTH+2*SPACE_X+START_X, ICON_START_Y, 3*ICON_WIDTH+3*SPACE_X+START_X, LCD_HEIGHT},
{4*ICON_WIDTH+3*SPACE_X+START_X, ICON_START_Y, LCD_WIDTH, LCD_HEIGHT}};
- GUI_SetBkColor(TITLE_BACKGROUND_COLOR);
+ GUI_SetBkColor(lcd_colors[infoSettings.title_bg_color]);
GUI_ClearPrect(gaps);
- GUI_SetBkColor(BACKGROUND_COLOR);
+ GUI_SetBkColor(lcd_colors[infoSettings.bg_color]);
for(uint8_t i = 1; i < COUNT(gaps); i++)
GUI_ClearPrect(gaps + i);
}
void GUI_RestoreColorDefault(void){
- GUI_SetBkColor(BACKGROUND_COLOR);
- GUI_SetColor(FONT_COLOR);
+ GUI_SetBkColor(lcd_colors[infoSettings.bg_color]);
+ GUI_SetColor(lcd_colors[infoSettings.font_color]);
GUI_SetTextMode(GUI_TEXTMODE_NORMAL);
GUI_SetNumMode(GUI_NUMMODE_SPACE);
}
@@ -148,9 +148,10 @@ void reminderSetUnConnected(void)
void reminderMessage(int16_t inf, SYS_STATUS status)
{
reminder.inf = inf;
- GUI_SetColor(REMINDER_FONT_COLOR);
+ GUI_SetColor(lcd_colors[infoSettings.reminder_color]);
+ GUI_SetBkColor(lcd_colors[infoSettings.title_bg_color]);
GUI_DispStringInPrect(&reminder.rect, textSelect(reminder.inf));
- GUI_SetColor(FONT_COLOR);
+ GUI_RestoreColorDefault();
reminder.status = status;
reminder.time = OS_GetTimeMs() + 2000; // 2 seconds
}
@@ -158,11 +159,12 @@ void reminderMessage(int16_t inf, SYS_STATUS status)
void volumeReminderMessage(int16_t inf, SYS_STATUS status)
{
volumeReminder.inf = inf;
- GUI_SetColor(VOLUME_REMINDER_FONT_COLOR);
+ GUI_SetColor(lcd_colors[infoSettings.sd_reminder_color]);
+ GUI_SetBkColor(lcd_colors[infoSettings.title_bg_color]);
GUI_DispStringInPrect(&volumeReminder.rect, textSelect(volumeReminder.inf));
- GUI_SetColor(FONT_COLOR);
volumeReminder.status = status;
volumeReminder.time = OS_GetTimeMs() + 2000;
+ GUI_RestoreColorDefault();
}
void busyIndicator(SYS_STATUS status)
@@ -171,7 +173,7 @@ void busyIndicator(SYS_STATUS status)
{
GUI_SetColor(YELLOW);
GUI_FillCircle(busySign.rect.x0, (busySign.rect.y1 - busySign.rect.y0) / 2, (busySign.rect.x1-busySign.rect.x0)/2);
- GUI_SetColor(FONT_COLOR);
+ GUI_SetColor(lcd_colors[infoSettings.font_color]);
}
busySign.status = status;
busySign.time = OS_GetTimeMs() + 2000;
@@ -204,9 +206,18 @@ void loopReminderClear(void)
/* Clear warning message */
reminder.status = STATUS_IDLE;
- if(curMenuItems == NULL)
+ if (isListview)
+ {
+ if (curListItems == NULL)
return;
- menuDrawTitle(labelGetAddress(&curMenuItems->title));
+ menuDrawTitle(labelGetAddress(&curListItems->title));
+ }
+ else
+ {
+ if (curMenuItems == NULL)
+ return;
+ menuDrawTitle(labelGetAddress(&curMenuItems->title));
+ }
}
void loopVolumeReminderClear(void)
@@ -223,9 +234,19 @@ void loopVolumeReminderClear(void)
/* Clear warning message */
volumeReminder.status = STATUS_IDLE;
+ if(isListview)
+ {
+ if(curListItems == NULL)
+ return;
+ menuDrawTitle(labelGetAddress(&curListItems->title));
+ }
+ else
+ {
if(curMenuItems == NULL)
return;
menuDrawTitle(labelGetAddress(&curMenuItems->title));
+ }
+
}
void loopBusySignClear(void)
@@ -243,15 +264,15 @@ void loopBusySignClear(void)
/* End Busy display sing */
busySign.status = STATUS_IDLE;
- GUI_SetColor(BACKGROUND_COLOR);
+ GUI_SetColor(lcd_colors[infoSettings.title_bg_color]);
GUI_FillCircle(busySign.rect.x0, (busySign.rect.y1 - busySign.rect.y0) / 2, (busySign.rect.x1-busySign.rect.x0)/2);
- GUI_SetColor(FONT_COLOR);
+ GUI_SetColor(lcd_colors[infoSettings.font_color]);
}
void menuDrawTitle(const uint8_t *content) //(const MENUITEMS * menuItems)
{
uint16_t start_y = (TITLE_END_Y - BYTE_HEIGHT) / 2;
- GUI_FillRectColor(10, start_y, LCD_WIDTH-10, start_y+BYTE_HEIGHT, TITLE_BACKGROUND_COLOR);
+ GUI_FillRectColor(10, start_y, LCD_WIDTH-10, start_y+BYTE_HEIGHT, lcd_colors[infoSettings.title_bg_color]);
if (content)
{
@@ -262,9 +283,10 @@ void menuDrawTitle(const uint8_t *content) //(const MENUITEMS * menuItems)
show_GlobalInfo();
if(reminder.status == STATUS_IDLE) return;
- GUI_SetColor(RED);
+ GUI_SetColor(lcd_colors[infoSettings.reminder_color]);
+ GUI_SetBkColor(lcd_colors[infoSettings.title_bg_color]);
GUI_DispStringInPrect(&reminder.rect, textSelect(reminder.inf));
- GUI_SetColor(FONT_COLOR);
+ GUI_RestoreColorDefault();
}
//Draw the entire interface
@@ -300,9 +322,9 @@ void menuDrawListPage(const LISTITEMS *listItems)
curListItems = listItems;
TSC_ReDrawIcon = itemDrawIconPress;
- GUI_SetBkColor(TITLE_BACKGROUND_COLOR);
+ GUI_SetBkColor(lcd_colors[infoSettings.title_bg_color]);
GUI_ClearRect(0, 0, LCD_WIDTH, TITLE_END_Y);
- GUI_SetBkColor(BACKGROUND_COLOR);
+ GUI_SetBkColor(lcd_colors[infoSettings.bg_color]);
GUI_ClearRect(0, TITLE_END_Y, LCD_WIDTH, LCD_HEIGHT);
//menuClearGaps(); //Use this function instead of GUI_Clear to eliminate the splash screen when clearing the screen.
diff --git a/TFT/src/User/Menu/menu.h b/TFT/src/User/Menu/menu.h
index a776b15238..ae97fb0380 100644
--- a/TFT/src/User/Menu/menu.h
+++ b/TFT/src/User/Menu/menu.h
@@ -90,6 +90,7 @@ typedef struct
}LISTITEMS;
extern const GUI_RECT exhibitRect;
+extern const GUI_RECT rect_of_key[ITEM_PER_PAGE*2];
#define CENTER_Y ((exhibitRect.y1 - exhibitRect.y0)/2 + exhibitRect.y0)
#define CENTER_X ((exhibitRect.x1 - exhibitRect.x0 - BYTE_WIDTH)/2 + exhibitRect.x0)
#define LISTITEM_WIDTH (LCD_WIDTH-(3*START_X)-LIST_ICON_WIDTH)
diff --git a/TFT/src/User/SanityCheck.c b/TFT/src/User/SanityCheck.c
new file mode 100644
index 0000000000..2199c3ee3c
--- /dev/null
+++ b/TFT/src/User/SanityCheck.c
@@ -0,0 +1,12 @@
+#include "SanityCheck.h"
+
+//Main settings
+void sizecheck(void){
+// if error shows 'the size of an array must be greater than zero'
+// then the size of the array is larger tha allocated size in flash.
+SIZE_CHECK( sizeof(SETTINGS) > PARA_SIZE); //Size of infoSettings is larger tha allocated size in flash.
+SIZE_CHECK( sizeof(STRINGS_STORE) > STRINGS_STORE_MAX_SIZE); // check size of strings_store is larger tha allocated size in flash.
+SIZE_CHECK( sizeof(CUSTOM_GCODES) > CUSTOM_GCODE_MAX_SIZE); // check size of custom_gcodes is larger tha allocated size in flash.
+SIZE_CHECK( sizeof(PRINT_GCODES) > PRINT_GCODES_MAX_SIZE); // check size of print_gcodes is larger tha allocated size in flash.
+
+}
\ No newline at end of file
diff --git a/TFT/src/User/SanityCheck.h b/TFT/src/User/SanityCheck.h
index 0dbbc0c745..d6cf4e7082 100644
--- a/TFT/src/User/SanityCheck.h
+++ b/TFT/src/User/SanityCheck.h
@@ -1,28 +1,43 @@
#ifndef _SANITYCHECK_H_
#define _SANITYCHECK_H_
+#include "includes.h"
#include "Configuration.h"
+#include "flashStore.h"
+#include "Settings.h"
+//
+//check size of settings against max allocated size at compile time
+#define SIZE_CHECK(object) ((void)sizeof(char[1 - 2*!!(object)]))
+
+
+#if CONFIG_VERSION != CONFIG_SUPPPORT
+ #error "the Configuration.h is old. please use the latest Configuration.h file"
+#endif
#ifndef ST7920_SPI
- #ifdef CLEAN_MODE_SWITCHING_SUPPORT
- #error "CLEAN_MODE_SWITCHING_SUPPORT can only be enabled for TFT controllers which support ST7920 Emulator/Marlin Mode. Disable CLEAN_MODE_SWITCHING_SUPPORT in Configuration.h"
- #endif
+ #ifdef CLEAN_MODE_SWITCHING_SUPPORT
+ #error "CLEAN_MODE_SWITCHING_SUPPORT can only be enabled for TFT controllers which support ST7920 Emulator/Marlin Mode. Disable CLEAN_MODE_SWITCHING_SUPPORT in Configuration.h"
+ #endif
#endif
#ifdef LED_COLOR_PIN
+
#ifdef STARTUP_KNOB_LED_COLOR
- #if STARTUP_KNOB_LED_COLOR < 1
- #error "STARTUP_knob_LED_COLOR cannot be less than 1"
+ #if STARTUP_KNOB_LED_COLOR < 0
+ #error "STARTUP_knob_LED_COLOR cannot be less than 1"
#endif
- #if STARTUP_KNOB_LED_COLOR > 9
- #error "STARTUP_knob_LED_COLOR cannot be greater than 9"
+ #if STARTUP_KNOB_LED_COLOR > 8
+ #error "STARTUP_knob_LED_COLOR cannot be greater than 9"
#endif
#else
- #define STARTUP_KNOB_LED_COLOR 1
+ #define STARTUP_KNOB_LED_COLOR 0
#endif
- #else
- #define STARTUP_KNOB_LED_COLOR 1
+
+#else
+
+ #define STARTUP_KNOB_LED_COLOR 0
+
#endif
#ifdef EXTRUDE_STEPS
@@ -37,4 +52,156 @@
#error "CANCEL_PRINT_GCODE is now PRINT_CANCEL_GCODE. Please update your Configuration.h file."
#endif
+#ifndef ST7920_BANNER_TEXT
+ #define ST7920_BANNER_TEXT "LCD12864 Simulator"
+#endif
+
+#if TOOL_NUM > MAX_TOOL_COUNT
+ #error "TOOL_NUM can not be more than 6"
+#endif
+
+#if EXT_NUM > MAX_TOOL_COUNT
+ #error "EXT_NUM can not be more than 6"
+#endif
+
+#if FAN_NUM > MAX_TOOL_COUNT
+ #error "FAN_NUM can not be more than 6"
+#endif
+
+#ifdef CUSTOM_0_LABEL
+ #define ENABLE_CUSTOM0 1
+#else
+ #define ENABLE_CUSTOM0 0
+ #define CUSTOM_0_LABEL ""
+ #define CUSTOM_0_GCODE ""
+#endif
+
+#ifdef CUSTOM_1_LABEL
+ #define ENABLE_CUSTOM1 1
+#else
+ #define ENABLE_CUSTOM1 0
+ #define CUSTOM_1_LABEL ""
+ #define CUSTOM_1_GCODE ""
+#endif
+
+#ifdef CUSTOM_2_LABEL
+ #define ENABLE_CUSTOM2 1
+#else
+ #define ENABLE_CUSTOM2 0
+ #define CUSTOM_2_LABEL ""
+ #define CUSTOM_2_GCODE ""
+#endif
+
+#ifdef CUSTOM_3_LABEL
+ #define ENABLE_CUSTOM3 1
+#else
+ #define ENABLE_CUSTOM3 0
+ #define CUSTOM_3_LABEL ""
+ #define CUSTOM_3_GCODE ""
+#endif
+
+#ifdef CUSTOM_4_LABEL
+ #define ENABLE_CUSTOM4 1
+#else
+ #define ENABLE_CUSTOM4 0
+ #define CUSTOM_4_LABEL ""
+ #define CUSTOM_4_GCODE ""
+#endif
+
+#ifdef CUSTOM_5_LABEL
+ #define ENABLE_CUSTOM5 1
+#else
+ #define ENABLE_CUSTOM5 0
+ #define CUSTOM_5_LABEL ""
+ #define CUSTOM_5_GCODE ""
+#endif
+
+#ifdef CUSTOM_6_LABEL
+ #define ENABLE_CUSTOM6 1
+#else
+ #define ENABLE_CUSTOM6 0
+ #define CUSTOM_6_LABEL ""
+ #define CUSTOM_6_GCODE ""
+#endif
+
+#ifdef CUSTOM_7_LABEL
+ #define ENABLE_CUSTOM7 1
+#else
+ #define ENABLE_CUSTOM7 0
+ #define CUSTOM_7_LABEL ""
+ #define CUSTOM_7_GCODE ""
+#endif
+
+#ifdef CUSTOM_8_LABEL
+ #define ENABLE_CUSTOM8 1
+#else
+ #define ENABLE_CUSTOM8 0
+ #define CUSTOM_8_LABEL ""
+ #define CUSTOM_8_GCODE ""
+#endif
+
+#ifdef CUSTOM_9_LABEL
+ #define ENABLE_CUSTOM9 1
+#else
+ #define ENABLE_CUSTOM9 0
+ #define CUSTOM_9_LABEL ""
+ #define CUSTOM_9_GCODE ""
+#endif
+
+#ifdef CUSTOM_10_LABEL
+ #define ENABLE_CUSTOM10 1
+#else
+ #define ENABLE_CUSTOM10 0
+ #define CUSTOM_10_LABEL ""
+ #define CUSTOM_10_GCODE ""
+#endif
+
+#ifdef CUSTOM_11_LABEL
+ #define ENABLE_CUSTOM11 1
+#else
+ #define ENABLE_CUSTOM11 0
+ #define CUSTOM_11_LABEL ""
+ #define CUSTOM_11_GCODE ""
+#endif
+
+#ifdef CUSTOM_12_LABEL
+ #define ENABLE_CUSTOM12 1
+#else
+ #define ENABLE_CUSTOM12 0
+ #define CUSTOM_12_LABEL ""
+ #define CUSTOM_12_GCODE ""
+#endif
+
+#ifdef CUSTOM_13_LABEL
+ #define ENABLE_CUSTOM13 1
+#else
+ #define ENABLE_CUSTOM13 0
+ #define CUSTOM_13_LABEL ""
+ #define CUSTOM_13_GCODE ""
+#endif
+
+#ifdef CUSTOM_14_LABEL
+ #define ENABLE_CUSTOM14 1
+#else
+ #define ENABLE_CUSTOM14 0
+ #define CUSTOM_14_LABEL ""
+ #define CUSTOM_14_GCODE ""
+#endif
+
+
+#define CUSTOM_GCODE_ENABLED {ENABLE_CUSTOM0, ENABLE_CUSTOM1, ENABLE_CUSTOM2, ENABLE_CUSTOM3, ENABLE_CUSTOM4,\
+ ENABLE_CUSTOM5, ENABLE_CUSTOM6, ENABLE_CUSTOM7, ENABLE_CUSTOM8, ENABLE_CUSTOM9,\
+ ENABLE_CUSTOM10,ENABLE_CUSTOM11,ENABLE_CUSTOM12,ENABLE_CUSTOM13,ENABLE_CUSTOM14}
+
+#define CUSTOM_GCODE_LIST {CUSTOM_0_GCODE, CUSTOM_1_GCODE, CUSTOM_2_GCODE, CUSTOM_3_GCODE, CUSTOM_4_GCODE,\
+ CUSTOM_5_GCODE, CUSTOM_6_GCODE, CUSTOM_7_GCODE, CUSTOM_8_GCODE, CUSTOM_9_GCODE,\
+ CUSTOM_10_GCODE,CUSTOM_11_GCODE,CUSTOM_12_GCODE,CUSTOM_13_GCODE,CUSTOM_14_GCODE }
+
+#define CUSTOM_GCODE_LABELS {CUSTOM_0_LABEL, CUSTOM_1_LABEL, CUSTOM_2_LABEL, CUSTOM_3_LABEL, CUSTOM_4_LABEL,\
+ CUSTOM_5_LABEL, CUSTOM_6_LABEL, CUSTOM_7_LABEL, CUSTOM_8_LABEL, CUSTOM_9_LABEL,\
+ CUSTOM_10_LABEL,CUSTOM_11_LABEL,CUSTOM_12_LABEL,CUSTOM_13_LABEL,CUSTOM_14_LABEL }
+
+
+
+
#endif
diff --git a/TFT/src/User/config.ini b/TFT/src/User/config.ini
new file mode 100644
index 0000000000..bb4a393280
--- /dev/null
+++ b/TFT/src/User/config.ini
@@ -0,0 +1,359 @@
+#### Default Config file for BigTreeTech TFT Controllers
+#
+# BIGTREE_TFT35_V1_1 / BIGTREE_TFT35_V1_2 / BIGTREE_TFT35_V2_0
+# BIGTREE_TFT35_V3_0 / BIGTREE_TFT35_E3_V3_0 / BIGTREE_TFT28_V1_0
+# BIGTREE_TFT28_V3_0 / BIGTREE_TFT24_V1_1 / MKS_32_V1_4
+#
+# Firmware Source: https://github.com/bigtreetech/BIGTREETECH-TouchScreenFirmware
+#
+#--------------------------------------------------------------------
+# General Settings
+#--------------------------------------------------------------------
+
+#### UNIFIED MENU / CLASSIC MENU
+# Select a UI Menu flavour
+# Options: [Unified Menu: 1, Classic Menu: 0]
+unified_menu:1
+
+#### Baudrate
+# Options: [0: 2400, 1: 9600, 2: 19200, 3: 38400, 4: 57600, 5: 115200, 6: 250000, 7: 500000,8: 1000000 ]
+baudrate:5
+
+#### Default Touch Mode Language
+# Select the language to display on the LCD while in Touch Mode.
+# Options: [0: ENGLISH, 1: CHINESE, 2: RUSSIAN, 3: JAPANESE, 4: ARMENIAN,
+# 5: GERMAN, 6: CZECH, 7: SPAIN, 8: FRENCH, 9: PORTUGUESE,
+# 10: ITALIAN,11: POLISH, 12: SLOVAK, 13: DUTCH, 14: HUNGARY]
+language:0
+
+#### Default Touch Mode Color Options
+# Options: [ WHITE: 0, BLACK: 1, RED: 2, GREEN: 3, BLUE: 4, CYAN: 5, MAGENTA: 6, YELLOW: 7,
+# ORANGE: 8, PURPLE: 9, LIME: 10, BROWN: 11, DARKBLUE: 12, DARKGREEN: 13, GRAY: 14, DARKGRAY: 15 ]
+
+# Title background color
+title_back_color:1
+
+#Background color
+background_color:1
+
+#Font foreground color
+font_color:0
+
+#Reminder font color, such as: "No print attached", "Busy processing", etc.
+reminder_color:5
+
+#Volume status/reminder font color, such as: "Card inserted", "Card removed"
+volume_status_color:5
+
+#Backgroud color for X Y Z position display in Status Screen.
+status_xyz_bg_color:15
+
+#List View Border Color
+list_border_color:15
+
+#List View button background color
+list_button_bg_color:15
+
+#Backgroud color for X Y Z position display in Status Screen.
+status_xyz_bg_color:15
+
+#List View Border Color
+list_border_color:15
+
+#List View button background color
+list_button_bg_color:15
+
+#### Rotate UI 180 degrees
+# Options: [enable: 1, disable: 0]
+rotate_ui:0
+
+#### Show or hide Temperature ACK in Gcode Terminal
+# Options: [Show: 1, Hide: 0]
+terminal_ack:0
+
+#### invert X axis button function in Move menu to match move buttons to actual axis
+# Options: [enable: 1, disable: 0]
+# Invert Axis format [ X Y Z E ]
+invert_axis: X0 Y0 Z0
+
+#### Persistent temperature info
+# show persistent temperature info on all menu screens
+# Options: [enable: 1, disable: 0]
+persistent_info:0
+
+#### File List Mode
+# show file as list
+# Options: [enable: 1, disable: 0]
+files_list_mode:1
+
+
+#--------------------------------------------------------------------
+# Marlin Mode Settings (Only for TFT35_V3.0/ TFT24_V1.1/ TFT28V3.0)
+#--------------------------------------------------------------------
+
+#### Default Mode
+# Options: [0:Touch Mode, 1: Marlin Mode]
+default_mode:0
+
+#### Default Marlin Mode Background & Font Color Options
+# Options: [ WHITE: 0, BLACK: 1, RED: 2, GREEN: 3, BLUE: 4, CYAN: 5, MAGENTA: 6, YELLOW: 7,
+# ORANGE: 8, PURPLE: 9, LIME: 10, BROWN: 11, DARKBLUE: 12, DARKGREEN: 13, GRAY: 14, DARKGRAY: 15 ]
+marlin_bg_color:1
+marlin_fn_color:8
+
+#### Marlin Mode show title
+# Options:[1:enable, 0: disable]
+marlin_show_title:1
+
+# Run Marlin Mode in Fullscreen
+# Options:[1:enable, 0: disable] [Disabled. RECOMMENDED FOR TFT24]
+marlin_fullscreen:0
+
+#### Text displayed at the top of the TFT in Marlin Mode.
+marlin_title:LCD12864 Simulator
+
+
+#--------------------------------------------------------------------
+# Printer / Machine Settings
+#--------------------------------------------------------------------
+
+#### Hotend Count
+# Options: [1 to 6]
+ext_count:1
+
+#### Extruder Count
+# Options: [1 to 6]
+ext_count:1
+
+#### Fan Count
+# Options: [1 to 6]
+fan_count:1
+
+#### Bed / Extruder Maximum Temperatures
+# format [max_temp: BED: T0: T1: T2: T3: T4: T5:]
+max_temp: BED:150 T0:275 T1:275 T2:275 T3:275 T4:275 T5:275
+
+#### Cold Extrusion Minimum Temperature
+min_temp:180
+
+#### Fan Maximum PWM speed (0 to 255)
+fan_max:255
+
+#### Machine Size / Build Area (mm)
+# Options: [X Axis: X, Y Axis: Y, Z Axis: Z]
+# minimum possible value: 0, maximum possible value: 2000
+# minimum size limit format [size_min: X Y Z]
+# maximum size limit format [size_max: X Y Z]
+size_min: X0 Y0 Z0
+size_max: X235 Y235 Z250
+
+#### default Move Speeds (mm/min)
+# Options: [Slow: S, Normal: N, Fast: F]
+# format [move_speed: S N F]
+move_speed: S1000 N3000 F5000
+
+#### default Extruder Speeds (mm/min)
+# Options: [Slow: S, Normal: N, Fast: F]
+# format [ext_speed: S N F]
+ext_speed: S60 N600 F1200
+
+####Auto Save Load Leveling Data
+# The TFT will auto-detect if Auto Bed Level is available.
+# Enable this will send "M500" after "G29" to store leveling value
+# and send "M420 S1" to enable leveling state after startup
+# Options:[1:enable, 0: disable]
+auto_load_leveling:1
+
+#### Onboard / Printer SD Card Support (enable if the printer has an Onboard SDcard
+#Options: [enable: 1, disable: 0]
+onboard_sd_support:1
+
+#### M27 / Printing status refresh time (this will be used if SD_AUTOREPORT is not detected by the TFT)
+M27_refresh_time:3
+
+#### M27 always active - keep polling M27 even if not printing
+# Options: [enable: 1, disable: 0]
+M27_always_active:1
+
+#### Show Fan Speed as Percentage
+# Options: [enable: 1, disable: 0]
+fan_speed_percent:1
+
+#### Pause Settings
+# position & Lengths in mm, Feedrates in mm/min
+# minimum possible value: 0, maximum possible value: 2000
+# Pause retract distance format [pause_retract: R P]
+# Pause XY position format [pause_pos: X Y]
+# Pause Z raise format [pause_z_raise: Z]
+# Pause feed Rate # format [ X Y Z E]
+pause_retract: R15 P16
+pause_pos:X10 Y10
+pause_z_raise:20
+pause_feedrate: X6000 Y6000 Z6000 E600
+
+### Manual Level Points Edge distance (mm)
+# distance in mm, Feedrates in mm/min
+# Leveling Edge distance format [pause_pos: X Y]
+# Leveling Z Position format [level_z_pos: Z]
+# Leveling Z raise format [level_z_raise: Z]
+# Leveling feed Rate format [ X Y Z]
+level_edge_distance: X20 Y20
+level_z_pos:0.2
+level_z_raise:10
+level_feedrate: X6000 Y6000 Z6000
+
+#### Preheat Temperature
+# Maximum Filament name length 7 characters
+# If default names are changed, make sure to change Icons to match the names
+#format [T B]
+preheat_name1:PLA
+preheat_temp1:T200 B60
+
+preheat_name2:PETG
+preheat_temp2:T200 B60
+
+preheat_name3:ABS
+preheat_temp3:T230 B90
+
+#--------------------------------------------------------------------
+# Power Supply Settings (if connected to TFT Controller)
+#--------------------------------------------------------------------
+
+#### Default Power Supply Mode
+# Options: [OFF: 0, ON: 1: Auto:2]
+ps_on:0
+
+#### Power Supply Active HIGH Settings
+# Options:[HIGH: 1, LOW: 0]
+ps_on_active_high:1
+
+#### Maximum hot-end temperature of automatic shut down after printing (only if auto power is enabled)
+# wait for the hot-end temperature to be lower than this value, then turn off the power automatically
+auto_shutdown_temp:50
+
+#--------------------------------------------------------------------
+# Filament Runout Settings (if connected to TFT Controller)
+#--------------------------------------------------------------------
+
+#### Default FIlament Sensor
+# Options:[NONE: 0, Normal: 1, SMART: 2]
+fil_runout:0
+
+#### Filament runout inverting - invert the logic of the sensor.
+# Options: [true: 1, false: 0]
+fil_runout_inverting:1
+
+#### filament noise threshold - Pause print when filament runout is detected for this time period in (ms).
+# time duration in ms
+fil_noise_threshold:100
+
+#### Smart filament runout detection
+# For use with an encoder disc that toggles runout pin as filament moves
+fil_runout_distance:7
+
+#--------------------------------------------------------------------
+# Power Loss Recovery & BTT UPS Settings (if connected to TFT Controller)
+#--------------------------------------------------------------------
+#### Home before Power Loss recovery
+# Options: [enable: 1, disable: 0]
+pl_recovery_home:0
+
+#### Power Loss Z raise (mm)
+# Raise Z axis on resume (on power loss with UPS)
+pl_z_raise:0
+
+#### Enable BTT UPS
+# Options: [enable: 1, disable: 0]
+btt_mini_ups:0
+
+
+#--------------------------------------------------------------------
+# Other device-specific settings
+#--------------------------------------------------------------------
+
+#### Buzzer / sound
+# Options: [enable: 1, disable: 0]
+buzzer:1
+
+#### Knob Led Color (only for TFT35 E3.0)
+#Options: [ 0: LED_OFF, 1: LED_WHITE, 2: LED_RED, 3: LED_ORANGE, 4: LED_YELLOW, 5: LED_GREEN, 6: LED_BLUE, 7: LED_INDIGO, 8: LED_VIOLET]
+knob_led_color:0
+
+#### Default LCD Brightness levels (only for TFT35v3.0 & TFT28v3.0)
+# Options: [(low) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 (full)]
+lcd_brightness:10
+lcd_idle_brightness:5
+
+####Default LCD idle time (only for TFT35v3.0 & TFT28v3.0)
+# Options [0: Off, 1: 5Sec, 2: 10Sec , 3: 30sec, 4: 1min, 5: 2min, 6: 5min, 7: 10min]
+lcd_idle_delay:4
+
+
+#--------------------------------------------------------------------
+# Custom G-Code Commands (up to 15 custom G-code)
+#--------------------------------------------------------------------
+
+#### To enable a custom Command:
+# Remove '#' at the begining custom commands label & gcode.
+
+#### To disable a custom Command:
+# Add '#' at the begining custom commands label & gcode.
+
+# if the values are left blank then default name and G-code will be used
+
+# Options: [Label maximum length: 24 characters, G-code Maximum length 70 characters]
+
+custom_label_1:Disable steppers
+custom_gcode_1:M84\n
+custom_label_2:Init sd card
+custom_gcode_2:G28\nG29\nG0\n
+custom_label_3:Release sd card
+custom_gcode_3:M22\n
+custom_label_4:restore leveling
+custom_gcode_4:M420 S1\n
+custom_label_5:Save to EEPROM
+custom_gcode_5:M500\n
+custom_label_6:restore from EEPROM
+custom_gcode_6:M501\n
+custom_label_7:EEPROM defaults
+custom_gcode_7:M502\n
+#custom_label_8:custom8
+#custom_gcode_8:M105\n
+#custom_label_9:custom9
+#custom_gcode_9:M105\n
+#custom_label_10:custom10
+#custom_gcode_10:M105\n
+#custom_label_11:custom11
+#custom_gcode_11:M105\n
+#custom_label_12:custom12
+#custom_gcode_12:M105\n
+#custom_label_13:custom13
+#custom_gcode_13:M105\n
+#custom_label_14:custom14
+#custom_gcode_14:M105\n
+#custom_label_15:custom15
+#custom_gcode_15:M105\n
+
+#--------------------------------------------------------------------
+# Start, End & Cancel G-codes
+#--------------------------------------------------------------------
+
+#### Default Start Gcode Status
+# Options: [enable: 1, disable: 0]
+start_gcode_enabled:0
+
+#### Default End Gcode Status
+# Options: [enable: 1, disable: 0]
+end_gcode_enabled:0
+
+#### Start G-code - run this G-code before starting print
+# maximum length 50 characters
+start_gcode:G28 XY R20\n
+
+#### End G-code - run this G-code after finishing print
+# maximum length 50 characters
+end_gcode:G90\nG1 E-4\nG92 E0\nM18\n
+
+#### Cancel G-code - run this G-code after canceling print
+# maximum length 50 characters
+cancel_gcode:G28 XY R10\n
diff --git a/TFT/src/User/includes.h b/TFT/src/User/includes.h
index f36defb01b..8aa07b43b8 100644
--- a/TFT/src/User/includes.h
+++ b/TFT/src/User/includes.h
@@ -15,6 +15,7 @@
#include "boot.h"
+#include "Colors.h"
#include "lcd.h"
#include "LCD_Init.h"
#include "lcd_dma.h"
@@ -52,9 +53,10 @@
#include "flashStore.h"
#include "parseACK.h"
#include "Selectmode.h"
-#include "Parametersetting.h"
#include "extend.h"
+#include "list_item.h"
+#include "Numpad.h"
#include "SanityCheck.h"
//menu
@@ -70,6 +72,7 @@
#include "Speed.h"
#include "BabyStep.h"
#include "ledcolor.h"
+#include "Parametersetting.h"
#include "Extrude.h"
#include "Fan.h"
@@ -88,7 +91,6 @@
#include "UnifiedMove.h"
#include "UnifiedHeat.h"
#include "StatusScreen.h"
-#include "list_item.h"
#define MAX_MENU_DEPTH 10 // max sub menu depth
typedef void (*FP_MENU)(void);
diff --git a/TFT/src/User/main.c b/TFT/src/User/main.c
index d4897ea9d0..b9f5b3e9b5 100644
--- a/TFT/src/User/main.c
+++ b/TFT/src/User/main.c
@@ -66,9 +66,8 @@ void Hardware_GenericInit(void)
#ifdef LED_COLOR_PIN
knob_LED_Init();
- #else
- #define STARTUP_KNOB_LED_COLOR 1
#endif
+
#ifdef U_DISK_SUPPORT
USBH_Init(&USB_OTG_Core, USB_OTG_FS_CORE_ID, &USB_Host, &USBH_MSC_cb, &USR_cb);
#endif
@@ -78,11 +77,13 @@ void Hardware_GenericInit(void)
TSC_Calibration();
storePara();
}
+ printSetUpdateWaiting(infoSettings.m27_active);
#ifdef LCD_LED_PWM_CHANNEL
- Set_LCD_Brightness(LCD_BRIGHTNESS[infoSettings.lcd_brightness]);
+ Set_LCD_Brightness(LCD_BRIGHTNESS[infoSettings.lcd_brightness]);
#endif
GUI_RestoreColorDefault();
infoMenuSelect();
+
}
int main(void)
diff --git a/config_instructions.md b/config_instructions.md
new file mode 100644
index 0000000000..1ca749951c
--- /dev/null
+++ b/config_instructions.md
@@ -0,0 +1,47 @@
+## Firmware configuration using **config.ini** File
+
+**The TFT Firmware can be configured with **config.ini** File without the need to re-compile the firmware.**
+use the **config.ini** file from from one of these folders:
+
+[`Copy to SD Card root directory to update`](https://github.com/bigtreetech/BIGTREETECH-TouchScreenFirmware/tree/master/Copy%20to%20SD%20Card%20root%20directory%20to%20update)
+or
+[`Copy to SD Card root directory to update - Unified Menu Material theme`](https://github.com/bigtreetech/BIGTREETECH-TouchScreenFirmware/tree/master/Copy%20to%20SD%20Card%20root%20directory%20to%20update%20-%20Unified%20Menu%20Material%20theme)
+
+### Editing **config.ini** File:
+
+Before editing config.ini file please read the following points:
+ - All the Settings Keywords are in small-caps (a-z) followed by the ' : ' colon sign.
+ - If any Keyword has in-valid values then it will be skipped by the TFT Controller and the Keyword with in-valid values will be displayed on the screen during update.
+ - Any text after the ' # ' hash sign will not be read by the TFT Controller and it will skip to next line.
+ - There should be only one keyword per line. If there are more than one Keywords in one line then only the fist one will be read by the TFT.
+ - The Keyword values should start after the ' : ' colon sign.
+ - All G-Code strings should be in single Line.
+ - To denote EOL / NewLine, Use **\n** in the G-Code strings. The TFT will convert the **\n** to EOL while updating. eg.
+ ```
+ start_gcode:G28\nG29\nG1 X10 Y10 Z10\n
+ ```
+
+### Instructions:
+1. Open the **config.ini** File in any text editor like Notepad or Notepad++.
+ 
+
+
+2. Change the settings parameter values according to options provided in the **config.ini** file.
+ 
+
+
+3. Ignore / Leave the Keywords that are not supported by your TFT Variant. All unsupported Settings Keywords are skipped by the TFT.
+
+
+4. Save the **config.ini** File.
+ Save the **config.ini** File. Do not change the name of the file.
+
+
+5. Copy the **config.ini** file to the root directory of the SD card. (The SD card capacity should be less than or equal to 8GB and formatted as FAT32)
+ 
+
+
+6. Insert the SD card in the TFT's SD card slot and restart the TFT by pressing the reset buttion or disconnecting and connecting the power cable.
+
+
+7. The TFT will update and store the configuraiton form **config.ini** file.
diff --git a/images/config1.png b/images/config1.png
new file mode 100644
index 0000000000..d85b2a60f4
Binary files /dev/null and b/images/config1.png differ
diff --git a/images/config2.png b/images/config2.png
new file mode 100644
index 0000000000..a975f108aa
Binary files /dev/null and b/images/config2.png differ
diff --git a/images/config3.png b/images/config3.png
new file mode 100644
index 0000000000..390129b4fe
Binary files /dev/null and b/images/config3.png differ