Merge branch 'bugfix-2.0.x' of https://github.com/MarlinFirmware/Marlin into bugfix-2.0.x

This commit is contained in:
InsanityAutomation
2021-11-11 21:17:23 -05:00
43 changed files with 491 additions and 269 deletions
+9
View File
@@ -1220,6 +1220,15 @@
#endif
#endif
/**
* Probe Enable / Disable
* The probe only provides a triggered signal when enabled.
*/
//#define PROBE_ENABLE_DISABLE
#if ENABLED(PROBE_ENABLE_DISABLE)
//#define PROBE_ENABLE_PIN -1 // Override the default pin here
#endif
/**
* Multiple Probing
*
+1 -1
View File
@@ -1280,7 +1280,7 @@
#endif // HAS_LCD_MENU
#if HAS_DISPLAY
#if EITHER(HAS_DISPLAY, DWIN_CREALITY_LCD_ENHANCED)
// The timeout (in ms) to return to the status screen from sub-menus
//#define LCD_TIMEOUT_TO_STATUS 15000
+1 -1
View File
@@ -41,7 +41,7 @@
* here we define this default string as the date where the latest release
* version was tagged.
*/
//#define STRING_DISTRIBUTION_DATE "2021-11-04"
//#define STRING_DISTRIBUTION_DATE "2021-11-12"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
+12 -3
View File
@@ -92,6 +92,12 @@ void calibrate_delay_loop();
#define DELAY_CYCLES(X) do { SmartDelay<IS_CONSTEXPR(X), IS_CONSTEXPR(X) ? X : 0> _smrtdly_X(X); } while(0)
#if GCC_VERSION <= 70000
#define DELAY_CYCLES_VAR(X) DelayCycleFnc(X)
#else
#define DELAY_CYCLES_VAR DELAY_CYCLES
#endif
// For delay in microseconds, no smart delay selection is required, directly call the delay function
// Teensy compiler is too old and does not accept smart delay compile-time / run-time selection correctly
#define DELAY_US(x) DelayCycleFnc((x) * ((F_CPU) / 1000000UL))
@@ -200,9 +206,12 @@ void calibrate_delay_loop();
#endif
#if ENABLED(DELAY_NS_ROUND_DOWN)
#define DELAY_NS(x) DELAY_CYCLES((x) * ((F_CPU) / 1000000UL) / 1000UL) // floor
#define _NS_TO_CYCLES(x) ( (x) * ((F_CPU) / 1000000UL) / 1000UL) // floor
#elif ENABLED(DELAY_NS_ROUND_CLOSEST)
#define DELAY_NS(x) DELAY_CYCLES(((x) * ((F_CPU) / 1000000UL) + 500) / 1000UL) // round
#define _NS_TO_CYCLES(x) (((x) * ((F_CPU) / 1000000UL) + 500) / 1000UL) // round
#else
#define DELAY_NS(x) DELAY_CYCLES(((x) * ((F_CPU) / 1000000UL) + 999) / 1000UL) // "ceil"
#define _NS_TO_CYCLES(x) (((x) * ((F_CPU) / 1000000UL) + 999) / 1000UL) // "ceil"
#endif
#define DELAY_NS(x) DELAY_CYCLES(_NS_TO_CYCLES(x))
#define DELAY_NS_VAR(x) DELAY_CYCLES_VAR(_NS_TO_CYCLES(x))
+1 -1
View File
@@ -39,7 +39,7 @@
#define DISABLED(V...) DO(DIS,&&,V)
#undef _BV
#define _BV(b) (1UL << (b))
#define _BV(b) (1 << (b))
#ifndef SBI
#define SBI(A,B) (A |= _BV(B))
#endif
+3 -3
View File
@@ -1554,15 +1554,15 @@ void setup() {
#endif
#if HAS_DWIN_E3V2_BASIC
SETUP_LOG("E3V2 Init");
Encoder_Configuration();
HMI_Init();
HMI_SetLanguageCache();
HMI_StartFrame(true);
DWIN_StatusChanged(GET_TEXT_F(WELCOME_MSG));
#endif
#if HAS_SERVICE_INTERVALS && !HAS_DWIN_E3V2_BASIC
ui.reset_status(true); // Show service messages or keep current status
SETUP_RUN(ui.reset_status(true)); // Show service messages or keep current status
#endif
#if ENABLED(MAX7219_DEBUG)
@@ -1593,7 +1593,7 @@ void setup() {
#endif
#if BOTH(HAS_LCD_MENU, TOUCH_SCREEN_CALIBRATION) && EITHER(TFT_CLASSIC_UI, TFT_COLOR_UI)
ui.check_touch_calibration();
SETUP_RUN(ui.check_touch_calibration());
#endif
marlin_state = MF_RUNNING;
-1
View File
@@ -254,7 +254,6 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load
TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE)));
TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE), FPSTR(CONTINUE_STR)));
TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_Popup_Confirm(ICON_BLTouch, GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE), FPSTR(CONTINUE_STR)));
wait_for_user = true; // A click or M108 breaks the purge_length loop
for (float purge_count = purge_length; purge_count > 0 && wait_for_user; --purge_count)
unscaled_e_move(1, ADVANCED_PAUSE_PURGE_FEEDRATE);
+1 -1
View File
@@ -98,7 +98,7 @@ void TWIBus::echodata(uint8_t bytes, FSTR_P const pref, uint8_t adr, const uint8
union TwoBytesToInt16 { uint8_t bytes[2]; int16_t integervalue; };
TwoBytesToInt16 ConversionUnion;
echoprefix(bytes, pref, adr);
echoprefix(bytes, pref, adr);
while (bytes-- && Wire.available()) {
int value = Wire.read();
+1 -1
View File
@@ -43,7 +43,7 @@ void GcodeSuite::M304() {
void GcodeSuite::M304_report(const bool forReplay/*=true*/) {
report_heading_etc(forReplay, F(STR_BED_PID));
SERIAL_ECHO_MSG(
SERIAL_ECHOLNPGM(
" M304 P", thermalManager.temp_bed.pid.Kp
, " I", unscalePID_i(thermalManager.temp_bed.pid.Ki)
, " D", unscalePID_d(thermalManager.temp_bed.pid.Kd)
+1 -1
View File
@@ -42,7 +42,7 @@
* version was tagged.
*/
#ifndef STRING_DISTRIBUTION_DATE
#define STRING_DISTRIBUTION_DATE "2021-11-04"
#define STRING_DISTRIBUTION_DATE "2021-11-12"
#endif
/**
+143 -74
View File
@@ -23,8 +23,8 @@
/**
* DWIN UI Enhanced implementation
* Author: Miguel A. Risco-Castillo
* Version: 3.6.3
* Date: 2021/09/10
* Version: 3.7.1
* Date: 2021/11/09
*/
#include "../../../inc/MarlinConfigPre.h"
@@ -142,7 +142,7 @@ HMI_data_t HMI_data;
millis_t dwin_heat_time = 0;
uint8_t checkkey = MainMenu, last_checkkey = MainMenu;
uint8_t checkkey = 255, last_checkkey = MainMenu;
enum SelectItem : uint8_t {
PAGE_PRINT = 0,
@@ -170,6 +170,7 @@ select_t select_page{0}, select_file{0}, select_print{0};
uint8_t index_file = MROWS;
bool dwin_abort_flag = false; // Flag to reset feedrate, return to Home
bool hash_changed = true; // Flag to know if message status was changed
constexpr float default_max_feedrate[] = DEFAULT_MAX_FEEDRATE;
constexpr float default_max_acceleration[] = DEFAULT_MAX_ACCELERATION;
@@ -386,15 +387,15 @@ void ICON_Stop() {
ICON_Button(select_print.now == PRINT_STOP, ICON_Stop_0, ico, txt);
}
void Draw_Menu_Cursor(const uint8_t line) {
void Draw_Menu_Cursor(const int8_t line) {
DWIN_Draw_Rectangle(1, HMI_data.Cursor_color, 0, MBASE(line) - 18, 14, MBASE(line + 1) - 20);
}
void Erase_Menu_Cursor(const uint8_t line) {
void Erase_Menu_Cursor(const int8_t line) {
DWIN_Draw_Rectangle(1, HMI_data.Background_Color, 0, MBASE(line) - 18, 14, MBASE(line + 1) - 20);
}
void Move_Highlight(const int16_t from, const uint16_t newline) {
void Move_Highlight(const int8_t from, const int8_t newline) {
Erase_Menu_Cursor(newline - from);
Draw_Menu_Cursor(newline);
}
@@ -577,6 +578,7 @@ void Popup_window_PauseOrStop() {
DWINUI::Draw_Icon(ICON_Cancel_E, 146, 280);
}
Draw_Select_Highlight(true);
DWIN_UpdateLCD();
}
#if HAS_HOTEND || HAS_HEATED_BED
@@ -607,9 +609,88 @@ void Popup_window_PauseOrStop() {
}
}
}
#endif
// Draw status line
void DWIN_DrawStatusLine(const uint16_t color, const uint16_t bgcolor, const char *text, const bool center = true) {
DWIN_Draw_Rectangle(1, bgcolor, 0, STATUS_Y, DWIN_WIDTH, STATUS_Y + 20);
if (text) {
if (center) DWINUI::Draw_CenteredString(color, STATUS_Y + 2, text);
else DWINUI::Draw_String(color, 0, STATUS_Y + 2, text);
}
DWIN_UpdateLCD();
}
void DWIN_DrawStatusLine(const char *text, const bool center = true) {
DWIN_DrawStatusLine(HMI_data.StatusTxt_Color, HMI_data.StatusBg_Color, text, center);
}
// Clear & reset status line
void DWIN_ResetStatusLine() {
ui.status_message[0] = 0;
DWIN_CheckStatusMessage();
}
// Djb2 hash algorithm
void DWIN_CheckStatusMessage() {
static uint32_t old_hash = 0;
char * str = &ui.status_message[0];
uint32_t hash = 5381;
char c;
while ((c = *str++)) hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
hash_changed = hash != old_hash;
old_hash = hash;
};
void DWIN_DrawStatusMessage() {
const uint8_t max_status_chars = DWIN_WIDTH / DWINUI::fontWidth(DWINUI::font);
#if ENABLED(STATUS_MESSAGE_SCROLLING)
// Get the UTF8 character count of the string
uint8_t slen = utf8_strlen(ui.status_message);
// If the string fits the status line do not scroll it
if (slen <= max_status_chars) {
if (hash_changed) {
DWIN_DrawStatusLine(HMI_data.StatusTxt_Color, HMI_data.StatusBg_Color, ui.status_message);
hash_changed = false;
}
}
else {
// String is larger than the available line space
// Get a pointer to the next valid UTF8 character
// and the string remaining length
uint8_t rlen;
const char *stat = MarlinUI::status_and_len(rlen);
DWIN_Draw_Rectangle(1, HMI_data.StatusBg_Color, 0, STATUS_Y, DWIN_WIDTH, STATUS_Y + 20);
DWINUI::MoveTo(0, STATUS_Y + 2);
DWINUI::Draw_String(stat, max_status_chars);
// If the string doesn't completely fill the line...
if (rlen < max_status_chars) {
DWINUI::Draw_Char('.'); // Always at 1+ spaces left, draw a dot
uint8_t chars = max_status_chars - rlen; // Amount of space left in characters
if (--chars) { // Draw a second dot if there's space
DWINUI::Draw_Char('.');
if (--chars)
DWINUI::Draw_String(ui.status_message, chars); // Print a second copy of the message
}
}
MarlinUI::advance_status_scroll();
}
#else
if (hash_changed) {
ui.status_message[max_status_chars] = 0;
DWIN_DrawStatusLine(HMI_data.StatusTxt_Color, HMI_data.StatusBg_Color, ui.status_message);
hash_changed = false;
}
#endif
}
void Draw_Print_Labels() {
if (HMI_IsChinese()) {
Title.FrameCopy(30, 1, 42, 14); // "Printing"
@@ -671,6 +752,7 @@ void Draw_PrintProcess() {
}
void Goto_PrintProcess() {
if (checkkey == PrintProcess) return;
checkkey = PrintProcess;
Draw_PrintProcess();
}
@@ -712,8 +794,9 @@ void Draw_Main_Menu() {
}
void Goto_Main_Menu() {
if (checkkey == MainMenu) return;
checkkey = MainMenu;
DWIN_StatusChanged();
ui.reset_status(true);
Draw_Main_Menu();
}
@@ -1077,6 +1160,7 @@ void Draw_Status_Area(const bool with_update) {
void HMI_StartFrame(const bool with_update) {
Goto_Main_Menu();
DWIN_DrawStatusLine(nullptr);
Draw_Status_Area(with_update);
}
@@ -1157,10 +1241,10 @@ void HMI_MainMenu() {
case PAGE_INFO_LEVELING:
#if HAS_ONESTEP_LEVELING
queue.inject(F("G28XYO\nG28Z\nG29")); // TODO: 'G29' should be homing when needed. Does it make sense for every LCD to do this differently?
queue.inject(F("G28Z\nG29")); // Force to get the current Z home position
#else
checkkey = Info;
Draw_Info_Menu();
last_checkkey = MainMenu;
Goto_InfoMenu();
#endif
break;
}
@@ -1245,7 +1329,7 @@ void HMI_SelectFile() {
}
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
if (select_file.now == 0) {
if (select_file.now == 0) { // Back
select_page.set(PAGE_PRINT);
Goto_Main_Menu();
}
@@ -1441,7 +1525,6 @@ void Draw_Main_Area() {
void HMI_ReturnScreen() {
checkkey = last_checkkey;
Draw_Main_Area();
DWIN_UpdateLCD();
return;
}
@@ -1474,7 +1557,7 @@ void DWIN_Update() {
}
void EachMomentUpdate() {
static millis_t next_var_update_ms = 0, next_rts_update_ms = 0;
static millis_t next_var_update_ms = 0, next_rts_update_ms = 0, next_status_update_ms = 0;
const millis_t ms = millis();
if (ELAPSED(ms, next_var_update_ms)) {
@@ -1482,6 +1565,11 @@ void EachMomentUpdate() {
update_variable();
}
if (ELAPSED(ms, next_status_update_ms)) {
next_status_update_ms = ms + 500;
DWIN_DrawStatusMessage();
}
if (PENDING(ms, next_rts_update_ms)) return;
next_rts_update_ms = ms + DWIN_SCROLL_UPDATE_INTERVAL;
@@ -1745,7 +1833,7 @@ void Draw_Title(TitleClass* title) {
void Draw_Menu(MenuClass* menu) {
DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color);
DWIN_Draw_Rectangle(1, DWINUI::backcolor, 0, TITLE_HEIGHT, DWIN_WIDTH - 1, STATUS_Y - 1);
ui.set_status("");
DWIN_ResetStatusLine();
}
// Startup routines
@@ -1758,23 +1846,6 @@ void DWIN_Startup() {
HMI_SetLanguage();
}
void DWIN_DrawStatusLine(const uint16_t color, const uint16_t bgcolor, const char * const text/*=nullptr*/) {
DWIN_Draw_Rectangle(1, bgcolor, 0, STATUS_Y, DWIN_WIDTH, STATUS_Y + 20);
if (text) DWINUI::Draw_CenteredString(color, STATUS_Y + 2, text);
DWIN_UpdateLCD();
}
// Update Status line
void DWIN_StatusChanged(const char * const cstr/*=nullptr*/) {
DWIN_DrawStatusLine(HMI_data.StatusTxt_Color, HMI_data.StatusBg_Color, cstr);
}
void DWIN_StatusChanged(FSTR_P const fstr) {
char str[strlen_P(FTOP(fstr)) + 1];
strcpy_P(str, FTOP(fstr));
DWIN_StatusChanged(str);
}
// Started a Print Job
void DWIN_Print_Started(const bool sd) {
sdprint = card.isPrinting() || sd;
@@ -1866,7 +1937,6 @@ void DWIN_RebootScreen() {
void DWIN_Redraw_screen() {
Draw_Main_Area();
DWIN_StatusChanged(ui.status_message);
Draw_Status_Area(false);
}
@@ -2161,7 +2231,7 @@ void SetMoveZ() { HMI_value.axis = Z_AXIS; SetPFloatOnClick(Z_MIN_POS, Z_MAX_POS
void SetMoveZto0() {
char cmd[48] = "";
char str_1[5] = "", str_2[5] = "";
sprintf_P(cmd, PSTR("G28OXY\nG28Z\nG0X%sY%sF5000\nG0Z0F300"),
sprintf_P(cmd, PSTR("G28Z\nG0X%sY%sF5000\nM420S0\nG0Z0F300"),
#if ENABLED(MESH_BED_LEVELING)
dtostrf(0, 1, 1, str_1),
dtostrf(0, 1, 1, str_2)
@@ -2344,7 +2414,7 @@ void LevBed(uint8_t point) {
float xpos = 0, ypos = 0, zval = 0;
float margin = PROBING_MARGIN;
#else
#define fmt "M420 S0\nG28O\nG90\nG0 Z5 F300\nG0 X%i Y%i F5000\nG0 Z0 F300"
#define fmt "M420S0\nG28O\nG90\nG0Z5F300\nG0X%iY%iF5000\nG0Z0F300"
int16_t xpos = 0, ypos = 0;
int16_t margin = 30;
#endif
@@ -2400,7 +2470,7 @@ void LevBedC () { LevBed(4); }
void ManualMeshStart(){
LCD_MESSAGE(MSG_UBL_BUILD_MESH_MENU);
gcode.process_subcommands_now(F("G28 XYO\nG28 Z\nM211 S0\nG29S1"));
gcode.process_subcommands_now(F("G28Z\nM211S0\nG29S1"));
planner.synchronize();
#ifdef MANUAL_PROBE_START_Z
const uint8_t line = CurrentMenu->line(MMeshMoveZItem->pos);
@@ -2425,7 +2495,7 @@ void LevBedC () { LevBed(4); }
void ManualMeshSave(){
LCD_MESSAGE(MSG_UBL_STORAGE_MESH_MENU);
queue.inject(F("M211 S1\nM500"));
queue.inject(F("M211S1\nM500"));
}
#endif // MESH_BED_LEVELING
@@ -2741,7 +2811,7 @@ void onDrawSteps(MenuItemClass* menuitem, int8_t line) {
#if ENABLED(MESH_BED_LEVELING)
void onDrawMMeshMoveZ(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) menuitem->SetFrame(1, 160, 118, 209, 132);
onDrawPFloatMenu(menuitem, line);
onDrawPFloat2Menu(menuitem, line);
}
#endif
@@ -3027,11 +3097,11 @@ void HMI_SetIntNoDraw() {
// Set an integer pointer variable using the encoder
void HMI_SetPInt() {
int8_t val = HMI_GetInt(HMI_value.MinValue, HMI_value.MaxValue);
if (!val) return;
else if (val == 2) { // Apply
*HMI_value.P_Int = HMI_value.Value;
if (HMI_value.Apply != nullptr) HMI_value.Apply();
} else if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate();
switch (val) {
case 0: return;
case 1: if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate(); break;
case 2: *HMI_value.P_Int = HMI_value.Value; if (HMI_value.Apply != nullptr) HMI_value.Apply(); break;
}
}
// Get a scaled float value using the encoder
@@ -3071,17 +3141,16 @@ void HMI_SetFloat() {
// Set a scaled float pointer variable using the encoder
void HMI_SetPFloat() {
const int8_t val = HMI_GetFloat(HMI_value.dp, HMI_value.MinValue, HMI_value.MaxValue);
if (!val) return;
if (val == 2) { // Apply
*HMI_value.P_Float = HMI_value.Value / POW(10, HMI_value.dp);
if (HMI_value.Apply != nullptr) HMI_value.Apply();
switch (val) {
case 0: return;
case 1: if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate(); break;
case 2: *HMI_value.P_Float = HMI_value.Value / POW(10, HMI_value.dp); if (HMI_value.Apply != nullptr) HMI_value.Apply(); break;
}
else if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate();
}
// Menu Creation and Drawing functions ======================================================
void SetMenuTitle(frame_rect_t cn, frame_rect_t en, const __FlashStringHelper* fstr) {
void SetMenuTitle(frame_rect_t cn, const __FlashStringHelper* fstr) {
if (HMI_IsChinese() && (cn.w != 0))
CurrentMenu->MenuTitle.SetFrame(cn.x, cn.y, cn.w, cn.h);
else
@@ -3093,7 +3162,7 @@ void Draw_Prepare_Menu() {
if (PrepareMenu == nullptr) PrepareMenu = new MenuClass();
if (CurrentMenu != PrepareMenu) {
CurrentMenu = PrepareMenu;
SetMenuTitle({133, 1, 28, 13}, {179, 0, 48, 14}, GET_TEXT_F(MSG_PREPARE));
SetMenuTitle({133, 1, 28, 13}, GET_TEXT_F(MSG_PREPARE));
DWINUI::MenuItemsPrepare(13);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu);
#if ENABLED(ADVANCED_PAUSE_FEATURE)
@@ -3134,7 +3203,7 @@ void Draw_LevBedCorners_Menu() {
if (LevBedMenu == nullptr) LevBedMenu = new MenuClass();
if (CurrentMenu != LevBedMenu) {
CurrentMenu = LevBedMenu;
SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_BED_TRAMMING)); // TODO: Chinese, English "Bed Tramming" JPG
SetMenuTitle({0}, GET_TEXT_F(MSG_BED_TRAMMING)); // TODO: Chinese, English "Bed Tramming" JPG
DWINUI::MenuItemsPrepare(6);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu);
ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_FL), onDrawMenuItem, LevBedFL);
@@ -3151,7 +3220,7 @@ void Draw_Control_Menu() {
if (ControlMenu == nullptr) ControlMenu = new MenuClass();
if (CurrentMenu != ControlMenu) {
CurrentMenu = ControlMenu;
SetMenuTitle({103, 1, 28, 14}, {128, 2, 49, 11}, GET_TEXT_F(MSG_CONTROL));
SetMenuTitle({103, 1, 28, 14}, GET_TEXT_F(MSG_CONTROL));
DWINUI::MenuItemsPrepare(9);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu);
ADDMENUITEM(ICON_Temperature, GET_TEXT_F(MSG_TEMPERATURE), onDrawTempSubMenu, Draw_Temperature_Menu);
@@ -3173,8 +3242,8 @@ void Draw_AdvancedSettings_Menu() {
if (AdvancedSettings == nullptr) AdvancedSettings = new MenuClass();
if (CurrentMenu != AdvancedSettings) {
CurrentMenu = AdvancedSettings;
SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_ADVANCED_SETTINGS)); // TODO: Chinese, English "Advanced Settings" JPG
DWINUI::MenuItemsPrepare(11);
SetMenuTitle({0}, GET_TEXT_F(MSG_ADVANCED_SETTINGS)); // TODO: Chinese, English "Advanced Settings" JPG
DWINUI::MenuItemsPrepare(12);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu);
#if HAS_HOME_OFFSET
ADDMENUITEM(ICON_HomeOffset, GET_TEXT_F(MSG_SET_HOME_OFFSETS), onDrawSubMenu, Draw_HomeOffset_Menu);
@@ -3214,7 +3283,7 @@ void Draw_Move_Menu() {
if (MoveMenu == nullptr) MoveMenu = new MenuClass();
if (CurrentMenu != MoveMenu) {
CurrentMenu = MoveMenu;
SetMenuTitle({192, 1, 42, 14}, {231, 2, 35, 11}, GET_TEXT_F(MSG_MOVE_AXIS));
SetMenuTitle({192, 1, 42, 14}, GET_TEXT_F(MSG_MOVE_AXIS));
DWINUI::MenuItemsPrepare(5);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu);
ADDMENUITEM_P(ICON_MoveX, GET_TEXT_F(MSG_MOVE_X), onDrawMoveX, SetMoveX, &current_position.x);
@@ -3234,7 +3303,7 @@ void Draw_Move_Menu() {
if (HomeOffMenu == nullptr) HomeOffMenu = new MenuClass();
if (CurrentMenu != HomeOffMenu) {
CurrentMenu = HomeOffMenu;
SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_SET_HOME_OFFSETS)); // TODO: Chinese, English "Set Home Offsets" JPG
SetMenuTitle({0}, GET_TEXT_F(MSG_SET_HOME_OFFSETS)); // TODO: Chinese, English "Set Home Offsets" JPG
DWINUI::MenuItemsPrepare(4);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu);
ADDMENUITEM_P(ICON_HomeOffsetX, GET_TEXT_F(MSG_HOME_OFFSET_X), onDrawPFloatMenu, SetHomeOffsetX, &home_offset[X_AXIS]);
@@ -3251,7 +3320,7 @@ void Draw_Move_Menu() {
if (ProbeSetMenu == nullptr) ProbeSetMenu = new MenuClass();
if (CurrentMenu != ProbeSetMenu) {
CurrentMenu = ProbeSetMenu;
SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_ZPROBE_SETTINGS)); // TODO: Chinese, English "Probe Settings" JPG
SetMenuTitle({0}, GET_TEXT_F(MSG_ZPROBE_SETTINGS)); // TODO: Chinese, English "Probe Settings" JPG
DWINUI::MenuItemsPrepare(5);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu);
ADDMENUITEM_P(ICON_ProbeOffsetX, GET_TEXT_F(MSG_ZPROBE_XOFFSET), onDrawPFloatMenu, SetProbeOffsetX, &probe.offset.x);
@@ -3295,7 +3364,7 @@ void Draw_SelectColors_Menu() {
if (SelectColorMenu == nullptr) SelectColorMenu = new MenuClass();
if (CurrentMenu != SelectColorMenu) {
CurrentMenu = SelectColorMenu;
SetMenuTitle({0}, {0}, F("Select Colors")); // TODO: Chinese, English "Select Color" JPG
SetMenuTitle({0}, F("Select Colors")); // TODO: Chinese, English "Select Color" JPG
DWINUI::MenuItemsPrepare(20);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu);
ADDMENUITEM(ICON_StockConfiguration, GET_TEXT_F(MSG_RESTORE_DEFAULTS), onDrawMenuItem, RestoreDefaultsColors);
@@ -3326,7 +3395,7 @@ void Draw_GetColor_Menu() {
if (GetColorMenu == nullptr) GetColorMenu = new MenuClass();
if (CurrentMenu != GetColorMenu) {
CurrentMenu = GetColorMenu;
SetMenuTitle({0}, {0}, F("Get Color")); // TODO: Chinese, English "Get Color" JPG
SetMenuTitle({0}, F("Get Color")); // TODO: Chinese, English "Get Color" JPG
DWINUI::MenuItemsPrepare(5);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, DWIN_ApplyColor);
ADDMENUITEM(ICON_Cancel, GET_TEXT_F(MSG_BUTTON_CANCEL), onDrawMenuItem, Draw_SelectColors_Menu);
@@ -3343,7 +3412,7 @@ void Draw_Tune_Menu() {
if (TuneMenu == nullptr) TuneMenu = new MenuClass();
if (CurrentMenu != TuneMenu) {
CurrentMenu = TuneMenu;
SetMenuTitle({73, 2, 28, 12}, {94, 2, 33, 11}, GET_TEXT_F(MSG_TUNE)); // TODO: Chinese, English "Tune" JPG
SetMenuTitle({73, 2, 28, 12}, GET_TEXT_F(MSG_TUNE)); // TODO: Chinese, English "Tune" JPG
DWINUI::MenuItemsPrepare(10);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_PrintProcess);
ADDMENUITEM_P(ICON_Speed, GET_TEXT_F(MSG_SPEED), onDrawSpeedItem, SetSpeed, &feedrate_percentage);
@@ -3376,7 +3445,7 @@ void Draw_Motion_Menu() {
if (MotionMenu == nullptr) MotionMenu = new MenuClass();
if (CurrentMenu != MotionMenu) {
CurrentMenu = MotionMenu;
SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_MOTION)); // TODO: Chinese, English "Motion" JPG
SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_MOTION)); // TODO: Chinese, English "Motion" JPG
DWINUI::MenuItemsPrepare(6);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu);
ADDMENUITEM(ICON_MaxSpeed, GET_TEXT_F(MSG_SPEED), onDrawSpeed, Draw_MaxSpeed_Menu);
@@ -3396,7 +3465,7 @@ void Draw_Motion_Menu() {
if (FilamentMenu == nullptr) FilamentMenu = new MenuClass();
if (CurrentMenu != FilamentMenu) {
CurrentMenu = FilamentMenu;
SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_FILAMENT_MAN)); // TODO: Chinese, English "Filament Management" JPG
SetMenuTitle({0}, GET_TEXT_F(MSG_FILAMENT_MAN)); // TODO: Chinese, English "Filament Management" JPG
DWINUI::MenuItemsPrepare(5);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu);
ADDMENUITEM(ICON_Park, GET_TEXT_F(MSG_FILAMENT_PARK_ENABLED), onDrawMenuItem, ParkHead);
@@ -3416,8 +3485,8 @@ void Draw_Motion_Menu() {
if (ManualMesh == nullptr) ManualMesh = new MenuClass();
if (CurrentMenu != ManualMesh) {
CurrentMenu = ManualMesh;
SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_MANUAL_MESH)); // TODO: Chinese, English "Manual Mesh Leveling" JPG
DWINUI::MenuItemsPrepare(5);
SetMenuTitle({0}, GET_TEXT_F(MSG_MANUAL_MESH)); // TODO: Chinese, English "Manual Mesh Leveling" JPG
DWINUI::MenuItemsPrepare(6);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu);
ADDMENUITEM(ICON_ManualMesh, GET_TEXT_F(MSG_LEVEL_BED), onDrawMenuItem, ManualMeshStart);
MMeshMoveZItem = ADDMENUITEM_P(ICON_Zoffset, GET_TEXT_F(MSG_MOVE_Z), onDrawMMeshMoveZ, SetMMeshMoveZ, &current_position.z);
@@ -3431,11 +3500,11 @@ void Draw_Motion_Menu() {
#if HAS_PREHEAT
void Draw_Preheat_Menu(frame_rect_t cn, frame_rect_t en, const __FlashStringHelper* fstr) {
void Draw_Preheat_Menu(frame_rect_t cn, const __FlashStringHelper* fstr) {
checkkey = Menu;
if (CurrentMenu != PreheatMenu) {
CurrentMenu = PreheatMenu;
SetMenuTitle(cn, en, fstr);
SetMenuTitle(cn, fstr);
DWINUI::MenuItemsPrepare(5);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Temperature_Menu);
#if HAS_HOTEND
@@ -3457,13 +3526,13 @@ void Draw_Motion_Menu() {
void Draw_Preheat1_Menu() {
HMI_value.Preheat = 0;
if (PreheatMenu == nullptr) PreheatMenu = new MenuClass();
Draw_Preheat_Menu({59, 16, 81, 14}, {56, 15, 85, 14}, F(PREHEAT_1_LABEL " Preheat Settings")); // TODO: English "PLA Settings" JPG
Draw_Preheat_Menu({59, 16, 81, 14}, F(PREHEAT_1_LABEL " Preheat Settings")); // TODO: English "PLA Settings" JPG
}
void Draw_Preheat2_Menu() {
HMI_value.Preheat = 1;
if (PreheatMenu == nullptr) PreheatMenu = new MenuClass();
Draw_Preheat_Menu({142, 16, 82, 14}, {56, 15, 85, 14}, F(PREHEAT_2_LABEL " Preheat Settings")); // TODO: English "ABS Settings" JPG
Draw_Preheat_Menu({142, 16, 82, 14}, F(PREHEAT_2_LABEL " Preheat Settings")); // TODO: English "ABS Settings" JPG
}
#ifdef PREHEAT_3_LABEL
@@ -3471,7 +3540,7 @@ void Draw_Motion_Menu() {
HMI_value.Preheat = 2;
if (PreheatMenu == nullptr) PreheatMenu = new MenuClass();
#define PREHEAT_3_TITLE PREHEAT_3_LABEL " Preheat Set."
Draw_Preheat_Menu({0}, {0}, F(PREHEAT_3_TITLE)); // TODO: Chinese, English "Custom Preheat Settings" JPG
Draw_Preheat_Menu({0}, F(PREHEAT_3_TITLE)); // TODO: Chinese, English "Custom Preheat Settings" JPG
}
#endif
@@ -3482,7 +3551,7 @@ void Draw_Temperature_Menu() {
if (TemperatureMenu == nullptr) TemperatureMenu = new MenuClass();
if (CurrentMenu != TemperatureMenu) {
CurrentMenu = TemperatureMenu;
SetMenuTitle({236, 2, 28, 12}, {56, 15, 85, 14}, GET_TEXT_F(MSG_TEMPERATURE));
SetMenuTitle({236, 2, 28, 12}, GET_TEXT_F(MSG_TEMPERATURE));
DWINUI::MenuItemsPrepare(7);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu);
#if HAS_HOTEND
@@ -3510,7 +3579,7 @@ void Draw_MaxSpeed_Menu() {
if (MaxSpeedMenu == nullptr) MaxSpeedMenu = new MenuClass();
if (CurrentMenu != MaxSpeedMenu) {
CurrentMenu = MaxSpeedMenu;
SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_MAXSPEED));
SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_MAXSPEED));
DWINUI::MenuItemsPrepare(5);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu);
ADDMENUITEM_P(ICON_MaxSpeedX, GET_TEXT_F(MSG_MAXSPEED_X), onDrawMaxSpeedX, SetMaxSpeedX, &planner.settings.max_feedrate_mm_s[X_AXIS]);
@@ -3528,7 +3597,7 @@ void Draw_MaxAccel_Menu() {
if (MaxAccelMenu == nullptr) MaxAccelMenu = new MenuClass();
if (CurrentMenu != MaxAccelMenu) {
CurrentMenu = MaxAccelMenu;
SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_ACCELERATION));
SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_ACCELERATION));
DWINUI::MenuItemsPrepare(5);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu);
ADDMENUITEM_P(ICON_MaxAccX, GET_TEXT_F(MSG_AMAX_A), onDrawMaxAccelX, SetMaxAccelX, &planner.settings.max_acceleration_mm_per_s2[X_AXIS]);
@@ -3547,7 +3616,7 @@ void Draw_MaxAccel_Menu() {
if (MaxJerkMenu == nullptr) MaxJerkMenu = new MenuClass();
if (CurrentMenu != MaxJerkMenu) {
CurrentMenu = MaxJerkMenu;
SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_JERK));
SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_JERK));
DWINUI::MenuItemsPrepare(5);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu);
ADDMENUITEM_P(ICON_MaxSpeedJerkX, GET_TEXT_F(MSG_VA_JERK), onDrawMaxJerkX, SetMaxJerkX, &planner.max_jerk[X_AXIS]);
@@ -3566,7 +3635,7 @@ void Draw_Steps_Menu() {
if (StepsMenu == nullptr) StepsMenu = new MenuClass();
if (CurrentMenu != StepsMenu) {
CurrentMenu = StepsMenu;
SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_STEPS_PER_MM));
SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_STEPS_PER_MM));
DWINUI::MenuItemsPrepare(5);
ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu);
ADDMENUITEM_P(ICON_StepX, GET_TEXT_F(MSG_A_STEPS), onDrawStepsX, SetStepsX, &planner.settings.axis_steps_per_mm[X_AXIS]);
+4 -5
View File
@@ -24,8 +24,8 @@
/**
* DWIN UI Enhanced implementation
* Author: Miguel A. Risco-Castillo
* Version: 3.6.3
* Date: 2021/09/08
* Version: 3.7.1
* Date: 2021/11/09
*/
#include "../../../inc/MarlinConfigPre.h"
@@ -154,6 +154,7 @@ void HMI_SDCardUpdate();
// Other
void Goto_PrintProcess();
void Goto_Main_Menu();
void Goto_InfoMenu();
void Draw_Select_Highlight(const bool sel);
void Draw_Status_Area(const bool with_update); // Status Area
void Draw_Main_Area(); // Redraw main area;
@@ -174,9 +175,7 @@ void EachMomentUpdate();
void update_variable();
void DWIN_HandleScreen();
void DWIN_Update();
void DWIN_DrawStatusLine(const uint16_t color, const uint16_t bgcolor, const char *text=nullptr);
void DWIN_StatusChanged(const char * const cstr=nullptr);
void DWIN_StatusChanged(FSTR_P const fstr);
void DWIN_CheckStatusMessage();
void DWIN_StartHoming();
void DWIN_CompletedHoming();
#if HAS_MESH
+2 -2
View File
@@ -23,8 +23,8 @@
/**
* DWIN UI Enhanced implementation
* Author: Miguel A. Risco-Castillo
* Version: 3.6.3
* Date: 2021/09/08
* Version: 3.7.1
* Date: 2021/11/09
*/
#include "../../../inc/MarlinConfigPre.h"
+2 -9
View File
@@ -24,8 +24,8 @@
/**
* DWIN UI Enhanced implementation
* Author: Miguel A. Risco-Castillo
* Version: 3.6.3
* Date: 2021/09/08
* Version: 3.7.1
* Date: 2021/11/09
*/
#include "../common/dwin_api.h"
@@ -48,13 +48,6 @@ inline void DWIN_Draw_QR(uint8_t QR_Pixel, uint16_t x, uint16_t y, FSTR_P title)
// x/y: Screen paste point
void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y);
// Copy area from virtual display area to current screen
// cacheID: virtual area number
// xStart/yStart: Upper-left of virtual area
// xEnd/yEnd: Lower-right of virtual area
// x/y: Screen paste point
void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y);
// Copy area from current virtual display area to current screen
// xStart/yStart: Upper-left of virtual area
// xEnd/yEnd: Lower-right of virtual area
+9 -9
View File
@@ -23,8 +23,8 @@
/**
* DWIN UI Enhanced implementation
* Author: Miguel A. Risco-Castillo
* Version: 3.6.3
* Date: 2021/09/08
* Version: 3.7.1
* Date: 2021/11/09
*/
#include "../../../inc/MarlinConfigPre.h"
@@ -38,8 +38,8 @@
//#define DEBUG_OUT 1
#include "../../../core/debug_out.h"
uint8_t MenuItemTotal = 0;
uint8_t MenuItemCount = 0;
int8_t MenuItemTotal = 0;
int8_t MenuItemCount = 0;
MenuItemClass** MenuItems = nullptr;
MenuClass *CurrentMenu = nullptr;
MenuClass *PreviousMenu = nullptr;
@@ -50,8 +50,8 @@ uint16_t DWINUI::textcolor = Def_Text_Color;
uint16_t DWINUI::backcolor = Def_Background_Color;
uint8_t DWINUI::font = font8x16;
void (*DWINUI::onCursorErase)(uint8_t line)=nullptr;
void (*DWINUI::onCursorDraw)(uint8_t line)=nullptr;
void (*DWINUI::onCursorErase)(const int8_t line)=nullptr;
void (*DWINUI::onCursorDraw)(const int8_t line)=nullptr;
void (*DWINUI::onTitleDraw)(TitleClass* title)=nullptr;
void (*DWINUI::onMenuDraw)(MenuClass* menu)=nullptr;
@@ -304,14 +304,14 @@ void DWINUI::ClearMenuArea() {
void DWINUI::MenuItemsClear() {
if (MenuItems == nullptr) return;
for (uint8_t i = 0; i < MenuItemCount; i++) delete MenuItems[i];
for (int8_t i = 0; i < MenuItemCount; i++) delete MenuItems[i];
delete[] MenuItems;
MenuItems = nullptr;
MenuItemCount = 0;
MenuItemTotal = 0;
}
void DWINUI::MenuItemsPrepare(uint8_t totalitems) {
void DWINUI::MenuItemsPrepare(int8_t totalitems) {
MenuItemsClear();
MenuItemTotal = totalitems;
MenuItems = new MenuItemClass*[totalitems];
@@ -379,7 +379,7 @@ MenuClass::MenuClass() {
void MenuClass::draw() {
MenuTitle.draw();
if (DWINUI::onMenuDraw != nullptr) (*DWINUI::onMenuDraw)(this);
for (uint8_t i = 0; i < MenuItemCount; i++)
for (int8_t i = 0; i < MenuItemCount; i++)
MenuItems[i]->draw(i - topline);
if (DWINUI::onCursorDraw != nullptr) DWINUI::onCursorDraw(line());
DWIN_UpdateLCD();
+21 -16
View File
@@ -24,11 +24,10 @@
/**
* DWIN UI Enhanced implementation
* Author: Miguel A. Risco-Castillo
* Version: 3.6.3
* Date: 2021/09/08
* Version: 3.7.1
* Date: 2021/11/09
*/
#include "../../../core/types.h"
#include "dwin_lcd.h"
#include "../common/dwin_set.h"
#include "../common/dwin_font.h"
@@ -138,7 +137,7 @@ extern TitleClass Title;
class MenuItemClass {
protected:
public:
uint8_t pos = 0;
int8_t pos = 0;
uint8_t icon = 0;
char caption[32] = "";
uint8_t frameid = 0;
@@ -185,8 +184,8 @@ namespace DWINUI {
extern uint16_t backcolor;
extern uint8_t font;
extern void (*onCursorErase)(uint8_t line);
extern void (*onCursorDraw)(uint8_t line);
extern void (*onCursorErase)(const int8_t line);
extern void (*onCursorDraw)(const int8_t line);
extern void (*onTitleDraw)(TitleClass* title);
extern void (*onMenuDraw)(MenuClass* menu);
@@ -342,6 +341,12 @@ namespace DWINUI {
// rlimit: For draw less chars than string length use rlimit
void Draw_String(const char * const string, uint16_t rlimit = 0xFFFF);
void Draw_String(uint16_t color, const char * const string, uint16_t rlimit = 0xFFFF);
inline void Draw_String(FSTR_P string, uint16_t rlimit = 0xFFFF) {
Draw_String(FTOP(string), rlimit);
}
inline void Draw_String(uint16_t color, FSTR_P string, uint16_t rlimit = 0xFFFF) {
Draw_String(color, FTOP(string), rlimit);
}
// Draw a string
// size: Font size
@@ -353,25 +358,25 @@ namespace DWINUI {
DWIN_Draw_String(false, font, textcolor, backcolor, x, y, string);
}
inline void Draw_String(uint16_t x, uint16_t y, FSTR_P title) {
DWIN_Draw_String(false, font, textcolor, backcolor, x, y, (char *)title);
DWIN_Draw_String(false, font, textcolor, backcolor, x, y, FTOP(title));
}
inline void Draw_String(uint16_t color, uint16_t x, uint16_t y, const char * const string) {
DWIN_Draw_String(false, font, color, backcolor, x, y, string);
}
inline void Draw_String(uint16_t color, uint16_t x, uint16_t y, FSTR_P title) {
DWIN_Draw_String(false, font, color, backcolor, x, y, (char *)title);
DWIN_Draw_String(false, font, color, backcolor, x, y, title);
}
inline void Draw_String(uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, const char * const string) {
DWIN_Draw_String(true, font, color, bgcolor, x, y, string);
}
inline void Draw_String(uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, FSTR_P title) {
DWIN_Draw_String(true, font, color, bgcolor, x, y, (char *)title);
DWIN_Draw_String(true, font, color, bgcolor, x, y, title);
}
inline void Draw_String(uint8_t size, uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, const char * const string) {
DWIN_Draw_String(true, size, color, bgcolor, x, y, string);
}
inline void Draw_String(uint8_t size, uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, FSTR_P title) {
DWIN_Draw_String(true, size, color, bgcolor, x, y, (char *)title);
DWIN_Draw_String(true, size, color, bgcolor, x, y, title);
}
// Draw a centered string using DWIN_WIDTH
@@ -382,8 +387,8 @@ namespace DWINUI {
// y: Upper coordinate of the string
// *string: The string
void Draw_CenteredString(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t y, const char * const string);
inline void Draw_CenteredString(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t y, FSTR_P title) {
Draw_CenteredString(bShow, size, color, bColor, y, (char *)title);
inline void Draw_CenteredString(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t y, FSTR_P string) {
Draw_CenteredString(bShow, size, color, bColor, y, FTOP(string));
}
inline void Draw_CenteredString(uint16_t color, uint16_t bcolor, uint16_t y, const char * const string) {
Draw_CenteredString(true, font, color, bcolor, y, string);
@@ -392,19 +397,19 @@ namespace DWINUI {
Draw_CenteredString(false, size, color, backcolor, y, string);
}
inline void Draw_CenteredString(uint8_t size, uint16_t color, uint16_t y, FSTR_P title) {
Draw_CenteredString(false, size, color, backcolor, y, (char *)title);
Draw_CenteredString(false, size, color, backcolor, y, title);
}
inline void Draw_CenteredString(uint16_t color, uint16_t y, const char * const string) {
Draw_CenteredString(false, font, color, backcolor, y, string);
}
inline void Draw_CenteredString(uint16_t color, uint16_t y, FSTR_P title) {
Draw_CenteredString(false, font, color, backcolor, y, (char *)title);
Draw_CenteredString(false, font, color, backcolor, y, title);
}
inline void Draw_CenteredString(uint16_t y, const char * const string) {
Draw_CenteredString(false, font, textcolor, backcolor, y, string);
}
inline void Draw_CenteredString(uint16_t y, FSTR_P title) {
Draw_CenteredString(false, font, textcolor, backcolor, y, (char *)title);
Draw_CenteredString(false, font, textcolor, backcolor, y, title);
}
// Draw a circle
@@ -477,7 +482,7 @@ namespace DWINUI {
void MenuItemsClear();
// Prepare MenuItems array
void MenuItemsPrepare(uint8_t totalitems);
void MenuItemsPrepare(int8_t totalitems);
// Add elements to the MenuItems array
MenuItemClass* MenuItemsAdd(MenuItemClass* menuitem);
+34 -7
View File
@@ -1,8 +1,8 @@
/**
* DWIN Mesh Viewer
* Author: Miguel A. Risco-Castillo
* version: 2.5
* Date: 2021/09/27
* version: 3.8.1
* Date: 2021/11/06
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
@@ -35,13 +35,15 @@
MeshViewerClass MeshViewer;
void MeshViewerClass::Draw() {
const int8_t mx = 30, my = 30; // Margins
const int8_t mx = 25, my = 25; // Margins
const int16_t stx = (DWIN_WIDTH - 2 * mx) / (GRID_MAX_POINTS_X - 1), // Steps
sty = (DWIN_WIDTH - 2 * my) / (GRID_MAX_POINTS_Y - 1);
int8_t zmesh[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y], maxz =-127, minz = 127;
const int8_t rmax = _MIN(mx - 2, stx / 2);
const int8_t rmin = 7;
int16_t zmesh[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y], maxz =-32000, minz = 32000;
#define px(xp) (mx + (xp) * stx)
#define py(yp) (30 + DWIN_WIDTH - my - (yp) * sty)
#define rm(z) ((((z) - minz) * 10 / _MAX(1, (maxz - minz))) + 10)
#define rm(z) ((z - minz) * (rmax - rmin) / _MAX(1, (maxz - minz)) + rmin)
#define DrawMeshValue(xp, yp, zv) DWINUI::Draw_Signed_Float(font6x12, 1, 2, px(xp) - 12, py(yp) - 6, zv)
#define DrawMeshHLine(yp) DWIN_Draw_HLine(HMI_data.SplitLine_Color, px(0), py(yp), DWIN_WIDTH - 2 * mx)
#define DrawMeshVLine(xp) DWIN_Draw_VLine(HMI_data.SplitLine_Color, px(xp), py(GRID_MAX_POINTS_Y - 1), DWIN_WIDTH - 2 * my)
@@ -61,8 +63,33 @@ void MeshViewerClass::Draw() {
watchdog_refresh();
LOOP_L_N(x, GRID_MAX_POINTS_X) {
uint16_t color = DWINUI::RainbowInt(zmesh[x][y], _MIN(-5, minz), _MAX(5, maxz));
DWINUI::Draw_FillCircle(color, px(x), py(y), rm(zmesh[x][y]));
DrawMeshValue(x, y, Z_VALUES(x,y));
uint8_t radius = rm(zmesh[x][y]);
DWINUI::Draw_FillCircle(color, px(x), py(y), radius);
if (GRID_MAX_POINTS_X < 9)
DWINUI::Draw_Signed_Float(font6x12, 1, 2, px(x) - 12, py(y) - 6, Z_VALUES(x,y));
else {
char str_1[9];
str_1[0] = 0;
switch (zmesh[x][y]) {
case -999 ... -100:
DWINUI::Draw_Signed_Float(font6x12, 1, 1, px(x) - 12, py(y) - 6, Z_VALUES(x,y));
break;
case -99 ... -1:
sprintf_P(str_1, PSTR("-.%02i"), -zmesh[x][y]);
break;
case 0:
DWIN_Draw_String(false, font6x12, DWINUI::textcolor, DWINUI::backcolor, px(x) - 4, py(y) - 6, "0");;
break;
case 1 ... 99:
sprintf_P(str_1, PSTR(".%02i"), zmesh[x][y]);
break;
case 100 ... 999:
DWINUI::Draw_Signed_Float(font6x12, 1, 1, px(x) - 12, py(y) - 6, Z_VALUES(x,y));
break;
}
if (str_1[0])
DWIN_Draw_String(false, font6x12, DWINUI::textcolor, DWINUI::backcolor, px(x) - 12, py(y) - 6, str_1);
}
}
}
char str_1[6], str_2[6] = "";
+2 -2
View File
@@ -1,8 +1,8 @@
/**
* DWIN Mesh Viewer
* Author: Miguel A. Risco-Castillo
* version: 2.5
* Date: 2021/09/27
* Version: 3.8.1
* Date: 2021/11/06
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
+26 -24
View File
@@ -678,31 +678,31 @@ void CrealityDWINClass::Draw_Print_Filename(const bool reset/*=false*/) {
static uint8_t namescrl = 0;
if (reset) namescrl = 0;
if (process == Print) {
size_t len = strlen(filename);
int8_t pos = len;
if (pos > 30) {
pos -= namescrl;
len = _MIN(pos, 30);
char dispname[len + 1];
constexpr int8_t maxlen = 30;
char *outstr = filename;
size_t slen = strlen(filename);
int8_t outlen = slen;
if (slen > maxlen) {
char dispname[maxlen + 1];
int8_t pos = slen - namescrl, len = maxlen;
if (pos >= 0) {
NOMORE(len, pos);
LOOP_L_N(i, len) dispname[i] = filename[i + namescrl];
}
else {
LOOP_L_N(i, 30 + pos) dispname[i] = ' ';
LOOP_S_L_N(i, 30 + pos, 30) dispname[i] = filename[i - (30 + pos)];
const int8_t mp = maxlen + pos;
LOOP_L_N(i, mp) dispname[i] = ' ';
LOOP_S_L_N(i, mp, maxlen) dispname[i] = filename[i - mp];
if (mp <= 0) namescrl = 0;
}
dispname[len] = '\0';
DWIN_Draw_Rectangle(1, Color_Bg_Black, 8, 50, DWIN_WIDTH - 8, 80);
const int8_t npos = (DWIN_WIDTH - 30 * MENU_CHR_W) / 2;
DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, npos, 60, dispname);
if (-pos >= 30) namescrl = 0;
outstr = dispname;
outlen = maxlen;
namescrl++;
}
else {
DWIN_Draw_Rectangle(1, Color_Bg_Black, 8, 50, DWIN_WIDTH - 8, 80);
const int8_t npos = (DWIN_WIDTH - strlen(filename) * MENU_CHR_W) / 2;
DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, npos, 60, filename);
}
DWIN_Draw_Rectangle(1, Color_Bg_Black, 8, 50, DWIN_WIDTH - 8, 80);
const int8_t npos = (DWIN_WIDTH - outlen * MENU_CHR_W) / 2;
DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, npos, 60, outstr);
}
}
@@ -4702,7 +4702,7 @@ void CrealityDWINClass::Update_Status(const char * const text) {
char header[4];
LOOP_L_N(i, 3) header[i] = text[i];
header[3] = '\0';
if (strcmp_P(header,"<F>") == 0) {
if (strcmp_P(header, PSTR("<F>")) == 0) {
LOOP_L_N(i, _MIN((size_t)LONG_FILENAME_LENGTH, strlen(text))) filename[i] = text[i + 3];
filename[_MIN((size_t)LONG_FILENAME_LENGTH - 1, strlen(text))] = '\0';
Draw_Print_Filename(true);
@@ -4798,22 +4798,23 @@ void CrealityDWINClass::State_Update() {
}
void CrealityDWINClass::Screen_Update() {
const millis_t ms = millis();
static millis_t scrltime = 0;
if (ELAPSED(millis(), scrltime)) {
scrltime = millis() + 200;
if (ELAPSED(ms, scrltime)) {
scrltime = ms + 200;
Update_Status_Bar();
if (process == Print) Draw_Print_Filename();
}
static millis_t statustime = 0;
if (ELAPSED(millis(), statustime)) {
statustime = millis() + 500;
if (ELAPSED(ms, statustime)) {
statustime = ms + 500;
Draw_Status_Area();
}
static millis_t printtime = 0;
if (ELAPSED(millis(), printtime)) {
printtime = millis() + 1000;
if (ELAPSED(ms, printtime)) {
printtime = ms + 1000;
if (process == Print) {
Draw_Print_ProgressBar();
Draw_Print_ProgressElapsed();
@@ -5000,6 +5001,7 @@ void MarlinUI::init() {
void MarlinUI::pause_show_message(const PauseMessage message, const PauseMode mode/*=PAUSE_MODE_SAME*/, const uint8_t extruder/*=active_extruder*/) {
switch (message) {
case PAUSE_MESSAGE_INSERT: CrealityDWIN.Confirm_Handler(FilInsert); break;
case PAUSE_MESSAGE_PURGE:
case PAUSE_MESSAGE_OPTION: CrealityDWIN.Popup_Handler(PurgeMore); break;
case PAUSE_MESSAGE_HEAT: CrealityDWIN.Confirm_Handler(HeaterTime); break;
case PAUSE_MESSAGE_WAITING: CrealityDWIN.Draw_Print_Screen(); break;
@@ -409,7 +409,7 @@ void DGUSScreenHandler::SetStatusMessage(const char* msg, const millis_t duratio
}
void DGUSScreenHandler::SetStatusMessage(FSTR_P const fmsg, const millis_t duration) {
dgus_display.WriteStringPGM((uint16_t)DGUS_Addr::MESSAGE_Status, FTOP(msg), DGUS_STATUS_LEN, false, true);
dgus_display.WriteStringPGM((uint16_t)DGUS_Addr::MESSAGE_Status, FTOP(fmsg), DGUS_STATUS_LEN, false, true);
status_expire = (duration > 0 ? ExtUI::safe_millis() + duration : 0);
}
+1
View File
@@ -531,6 +531,7 @@ namespace Language_en {
LSTR MSG_ERR_MINTEMP = _UxGT("Err: MINTEMP");
LSTR MSG_HALTED = _UxGT("PRINTER HALTED");
LSTR MSG_PLEASE_RESET = _UxGT("Please Reset");
LSTR MSG_PREHEATING = _UxGT("Preheating...");
LSTR MSG_HEATING = _UxGT("Heating...");
LSTR MSG_COOLING = _UxGT("Cooling...");
LSTR MSG_BED_HEATING = _UxGT("Bed Heating...");
+10 -9
View File
@@ -49,6 +49,7 @@ MarlinUI ui;
#if ENABLED(DWIN_CREALITY_LCD)
#include "e3v2/creality/dwin.h"
#elif ENABLED(DWIN_CREALITY_LCD_ENHANCED)
#include "fontutils.h"
#include "e3v2/enhanced/dwin.h"
#elif ENABLED(DWIN_CREALITY_LCD_JYERSUI)
#include "e3v2/jyersui/dwin.h"
@@ -69,7 +70,7 @@ MarlinUI ui;
constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
#if HAS_STATUS_MESSAGE
#if BOTH(HAS_WIRED_LCD, STATUS_MESSAGE_SCROLLING)
#if ENABLED(STATUS_MESSAGE_SCROLLING) && EITHER(HAS_WIRED_LCD, DWIN_CREALITY_LCD_ENHANCED)
uint8_t MarlinUI::status_scroll_offset; // = 0
#endif
char MarlinUI::status_message[MAX_MESSAGE_LENGTH + 1];
@@ -1481,11 +1482,9 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
void MarlinUI::finish_status(const bool persist) {
#if HAS_WIRED_LCD
UNUSED(persist);
#if !(BASIC_PROGRESS_BAR && (PROGRESS_MSG_EXPIRE) > 0)
UNUSED(persist);
#endif
#if HAS_WIRED_LCD
#if BASIC_PROGRESS_BAR || BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT)
const millis_t ms = millis();
@@ -1502,13 +1501,15 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
next_filament_display = ms + 5000UL; // Show status message for 5s
#endif
TERN_(STATUS_MESSAGE_SCROLLING, status_scroll_offset = 0);
#else // HAS_WIRED_LCD
UNUSED(persist);
#endif
#if ENABLED(STATUS_MESSAGE_SCROLLING) && EITHER(HAS_WIRED_LCD, DWIN_CREALITY_LCD_ENHANCED)
status_scroll_offset = 0;
#endif
TERN_(EXTENSIBLE_UI, ExtUI::onStatusChanged(status_message));
TERN_(HAS_DWIN_E3V2_BASIC, DWIN_StatusChanged(status_message));
TERN_(DWIN_CREALITY_LCD, DWIN_StatusChanged(status_message));
TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_CheckStatusMessage());
TERN_(DWIN_CREALITY_LCD_JYERSUI, CrealityDWIN.Update_Status(status_message));
}
+3 -4
View File
@@ -356,6 +356,9 @@ public:
#if EITHER(HAS_DISPLAY, DWIN_CREALITY_LCD_ENHANCED)
static void kill_screen(FSTR_P const lcd_error, FSTR_P const lcd_component);
#if DISABLED(LIGHTWEIGHT_UI)
static void draw_status_message(const bool blink);
#endif
#else
static inline void kill_screen(FSTR_P const, FSTR_P const) {}
#endif
@@ -444,10 +447,6 @@ public:
static inline void completion_feedback(const bool=true) { TERN_(HAS_TOUCH_SLEEP, wakeup_screen()); }
#endif
#if DISABLED(LIGHTWEIGHT_UI)
static void draw_status_message(const bool blink);
#endif
#if ENABLED(ADVANCED_PAUSE_FEATURE)
static void draw_hotend_status(const uint8_t row, const uint8_t extruder);
#endif
+62 -63
View File
@@ -48,20 +48,17 @@
#if HAS_MAX31865 && !USE_ADAFRUIT_MAX31865
//#include <SoftwareSPI.h> // TODO: switch to SPIclass/SoftSPI
#include "MAX31865.h"
#ifdef TARGET_LPC1768
#include <SoftwareSPI.h>
#endif
// The maximum speed the MAX31865 can do is 5 MHz
SPISettings MAX31865::spiConfig = SPISettings(
#if defined(TARGET_LPC1768)
SPI_QUARTER_SPEED
#elif defined(ARDUINO_ARCH_STM32)
SPI_CLOCK_DIV4
#else
500000
#endif
, MSBFIRST
, SPI_MODE_1 // CPOL0 CPHA1
TERN(TARGET_LPC1768, SPI_QUARTER_SPEED, TERN(ARDUINO_ARCH_STM32, SPI_CLOCK_DIV4, 500000)),
MSBFIRST,
SPI_MODE1 // CPOL0 CPHA1
);
#ifndef LARGE_PINMAP
@@ -93,7 +90,7 @@ SPISettings MAX31865::spiConfig = SPISettings(
_sclk = _miso = _mosi = -1;
}
#else
#else // LARGE_PINMAP
/**
* Create the interface object using software (bitbang) SPI for PIN values
@@ -106,9 +103,7 @@ SPISettings MAX31865::spiConfig = SPISettings(
* @param spi_clk the SPI clock pin to use
* @param pin_mapping set to 1 for positive pin values
*/
MAX31865::MAX31865(uint32_t spi_cs, uint32_t spi_mosi,
uint32_t spi_miso, uint32_t spi_clk,
uint8_t pin_mapping) {
MAX31865::MAX31865(uint32_t spi_cs, uint32_t spi_mosi, uint32_t spi_miso, uint32_t spi_clk, uint8_t pin_mapping) {
_cs = spi_cs;
_mosi = spi_mosi;
_miso = spi_miso;
@@ -130,14 +125,12 @@ SPISettings MAX31865::spiConfig = SPISettings(
#endif // LARGE_PINMAP
/**
*
* Instance & Class methods
*
*/
/**
* Initialize the SPI interface and set the number of RTD wires used
*
@@ -152,22 +145,13 @@ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) {
OUT_WRITE(_cs, HIGH);
if (_sclk != TERN(LARGE_PINMAP, -1UL, -1)) {
// Define pin modes for Software SPI
#ifdef MAX31865_DEBUG
SERIAL_ECHOLN("Initializing MAX31865 Software SPI");
#endif
OUT_WRITE(_sclk, LOW);
SET_OUTPUT(_mosi);
SET_INPUT(_miso);
softSpiBegin(SPI_QUARTER_SPEED); // Define pin modes for Software SPI
}
else {
// Start and configure hardware SPI
#ifdef MAX31865_DEBUG
SERIAL_ECHOLN("Initializing MAX31865 Hardware SPI");
SERIAL_ECHOLNPGM("Initializing MAX31865 Hardware SPI");
#endif
SPI.begin();
SPI.begin(); // Start and configure hardware SPI
}
setWires(wires);
@@ -176,25 +160,15 @@ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) {
clearFault();
#ifdef MAX31865_DEBUG_SPI
#ifndef LARGE_PINMAP
SERIAL_ECHOLNPGM(
"Regular begin call with _cs: ", _cs,
" _miso: ", _miso,
" _sclk: ", _sclk,
" _mosi: ", _mosi
);
#else
SERIAL_ECHOLNPGM(
"LARGE_PINMAP begin call with _cs: ", _cs,
" _miso: ", _miso,
" _sclk: ", _sclk,
" _mosi: ", _mosi
);
#endif // LARGE_PINMAP
SERIAL_ECHOLNPGM("config: ", readRegister8(MAX31856_CONFIG_REG));
SERIAL_EOL();
#endif // MAX31865_DEBUG_SPI
SERIAL_ECHOLNPGM(
TERN(LARGE_PINMAP, "LARGE_PINMAP", "Regular")
" begin call with _cs: ", _cs,
" _miso: ", _miso,
" _sclk: ", _sclk,
" _mosi: ", _mosi,
" config: ", readRegister8(MAX31856_CONFIG_REG)
);
#endif
}
/**
@@ -371,7 +345,6 @@ float MAX31865::temperature(float Rrtd) {
// private:
//
/**
* Set a value in the configuration register.
*
@@ -432,10 +405,15 @@ void MAX31865::readRegisterN(uint8_t addr, uint8_t buffer[], uint8_t n) {
WRITE(_sclk, LOW);
WRITE(_cs, LOW);
spixfer(addr);
#ifdef TARGET_LPC1768
DELAY_CYCLES(_spi_speed);
#endif
spiTransfer(addr);
while (n--) {
buffer[0] = spixfer(0xFF);
buffer[0] = spiTransfer(0xFF);
#ifdef MAX31865_DEBUG_SPI
SERIAL_ECHOLNPGM("buffer read ", n, " data: ", buffer[0]);
#endif
@@ -462,8 +440,12 @@ void MAX31865::writeRegister8(uint8_t addr, uint8_t data) {
WRITE(_cs, LOW);
spixfer(addr | 0x80); // make sure top bit is set
spixfer(data);
#ifdef TARGET_LPC1768
DELAY_CYCLES(_spi_speed);
#endif
spiTransfer(addr | 0x80); // make sure top bit is set
spiTransfer(data);
if (_sclk == TERN(LARGE_PINMAP, -1UL, -1))
SPI.endTransaction();
@@ -480,21 +462,38 @@ void MAX31865::writeRegister8(uint8_t addr, uint8_t data) {
* @param x an 8-bit chunk of data to write
* @return the 8-bit response
*/
uint8_t MAX31865::spixfer(uint8_t x) {
uint8_t MAX31865::spiTransfer(uint8_t x) {
if (_sclk == TERN(LARGE_PINMAP, -1UL, -1))
return SPI.transfer(x);
uint8_t reply = 0;
for (int i = 7; i >= 0; i--) {
reply <<= 1;
WRITE(_sclk, HIGH);
WRITE(_mosi, x & (1 << i));
WRITE(_sclk, LOW);
if (READ(_miso))
reply |= 1;
}
#ifdef TARGET_LPC1768
return swSpiTransfer(x, _spi_speed, _sclk, _miso, _mosi);
#else
uint8_t reply = 0;
for (int i = 7; i >= 0; i--) {
WRITE(_sclk, HIGH); DELAY_NS_VAR(_spi_delay);
reply <<= 1;
WRITE(_mosi, x & _BV(i)); DELAY_NS_VAR(_spi_delay);
if (READ(_miso)) reply |= 1;
WRITE(_sclk, LOW); DELAY_NS_VAR(_spi_delay);
}
return reply;
#endif
}
return reply;
void MAX31865::softSpiBegin(const uint8_t spi_speed) {
#ifdef MAX31865_DEBUG
SERIAL_ECHOLNPGM("Initializing MAX31865 Software SPI");
#endif
#ifdef TARGET_LPC1768
swSpiBegin(_sclk, _miso, _mosi);
_spi_speed = swSpiInit(spi_speed, _sclk, _mosi);
#else
_spi_delay = (100UL << spi_speed) / 3; // Calculate delay in ns. Top speed is ~10MHz, or 100ns delay between bits.
OUT_WRITE(_sclk, LOW);
SET_OUTPUT(_mosi);
SET_INPUT(_miso);
#endif
}
#endif // HAS_MAX31865 && !USE_ADAFRUIT_MAX31865
+10 -1
View File
@@ -90,6 +90,13 @@ private:
static SPISettings spiConfig;
TERN(LARGE_PINMAP, uint32_t, uint8_t) _sclk, _miso, _mosi, _cs;
#ifdef TARGET_LPC1768
uint8_t _spi_speed;
#else
uint16_t _spi_delay;
#endif
float Rzero, Rref;
void setConfig(uint8_t config, bool enable);
@@ -99,7 +106,9 @@ private:
uint16_t readRegister16(uint8_t addr);
void writeRegister8(uint8_t addr, uint8_t reg);
uint8_t spixfer(uint8_t addr);
uint8_t spiTransfer(uint8_t addr);
void softSpiBegin(const uint8_t spi_speed);
public:
#ifdef LARGE_PINMAP
+3
View File
@@ -392,6 +392,9 @@ void Endstops::not_homing() {
#if HAS_BED_PROBE
void Endstops::enable_z_probe(const bool onoff) {
z_probe_enabled = onoff;
#if PIN_EXISTS(PROBE_ENABLE)
WRITE(PROBE_ENABLE_PIN, onoff);
#endif
resync();
}
#endif
+2
View File
@@ -362,6 +362,8 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
#define WAIT_FOR_BED_HEAT
#endif
LCD_MESSAGE(MSG_PREHEATING);
DEBUG_ECHOPGM("Preheating ");
#if ENABLED(WAIT_FOR_NOZZLE_HEAT)
+2 -4
View File
@@ -3044,8 +3044,6 @@ void MarlinSettings::reset() {
postprocess();
DEBUG_ECHO_MSG("Hardcoded Default Settings Loaded");
TERN_(EXTENSIBLE_UI, ExtUI::onFactoryReset());
}
#if DISABLED(DISABLE_M503)
@@ -3068,9 +3066,9 @@ void MarlinSettings::reset() {
//
CONFIG_ECHO_HEADING("Linear Units");
#if ENABLED(INCH_MODE_SUPPORT)
SERIAL_ECHOPGM(" G2", AS_DIGIT(parser.linear_unit_factor == 1.0), " ;");
SERIAL_ECHO_MSG(" G2", AS_DIGIT(parser.linear_unit_factor == 1.0), " ;");
#else
SERIAL_ECHOPGM(" G21 ;");
SERIAL_ECHO_MSG(" G21 ;");
#endif
gcode.say_units();
+2 -1
View File
@@ -3731,8 +3731,9 @@ void Temperature::isr() {
HMI_flag.heat_flag = 0;
duration_t elapsed = print_job_timer.duration(); // print timer
dwin_heat_time = elapsed.value;
#else
ui.reset_status();
#endif
ui.reset_status();
TERN_(PRINTER_EVENT_LEDS, printerEventLEDs.onHeatingDone());
return true;
}
+1 -1
View File
@@ -616,7 +616,7 @@
#elif MB(BTT_GTR_V1_0)
#include "stm32f4/pins_BTT_GTR_V1_0.h" // STM32F4 env:BIGTREE_GTR_V1_0 env:BIGTREE_GTR_V1_0_usb_flash_drive
#elif MB(BTT_BTT002_V1_0)
#include "stm32f4/pins_BTT_BTT002_V1_0.h" // STM32F4 env:BIGTREE_BTT002
#include "stm32f4/pins_BTT_BTT002_V1_0.h" // STM32F4 env:BIGTREE_BTT002 env:BIGTREE_BTT002_VET6
#elif MB(BTT_E3_RRF)
#include "stm32f4/pins_BTT_E3_RRF.h" // STM32F4 env:BIGTREE_E3_RRF
#elif MB(BTT_SKR_V2_0_REV_A)
+9
View File
@@ -1439,6 +1439,15 @@
#if PIN_EXISTS(Z_MIN_PROBE)
REPORT_NAME_DIGITAL(__LINE__, Z_MIN_PROBE_PIN)
#endif
#if PIN_EXISTS(PROBE_ACTIVATION_SWITCH)
REPORT_NAME_DIGITAL(__LINE__, PROBE_ACTIVATION_SWITCH_PIN)
#endif
#if PIN_EXISTS(PROBE_ENABLE)
REPORT_NAME_DIGITAL(__LINE__, PROBE_ENABLE_PIN)
#endif
#if PIN_EXISTS(PROBE_TARE)
REPORT_NAME_DIGITAL(__LINE__, PROBE_TARE_PIN)
#endif
#if PIN_EXISTS(I_ATT)
REPORT_NAME_DIGITAL(__LINE__, I_ATT_PIN)
#endif
+3 -1
View File
@@ -71,7 +71,9 @@
// Probe
//
#define PROBE_TARE_PIN PA1
#define PROBE_ACTIVATION_SWITCH_PIN PC2 // Optoswitch to Enable Z Probe
#if ENABLED(PROBE_ACTIVATION_SWITCH)
#define PROBE_ACTIVATION_SWITCH_PIN PC2 // Optoswitch to Enable Z Probe
#endif
//
// Steppers
+4 -1
View File
@@ -34,6 +34,9 @@
#define HEATER_0_PIN PA1 // HEATER1
#define HEATER_BED_PIN PA2 // HOT BED
#define FAN_PIN PA0 // FAN
#define PROBE_ACTIVATION_SWITCH_PIN PC6 // Optoswitch to Enable Z Probe
#if ENABLED(PROBE_ACTIVATION_SWITCH)
#define PROBE_ACTIVATION_SWITCH_PIN PC6 // Optoswitch to Enable Z Probe
#endif
#include "pins_CREALITY_V45x.h"
+4 -1
View File
@@ -34,6 +34,9 @@
#define HEATER_0_PIN PB14 // HEATER1
#define HEATER_BED_PIN PB13 // HOT BED
#define FAN_PIN PB15 // FAN
#define PROBE_ACTIVATION_SWITCH_PIN PB2 // Optoswitch to Enable Z Probe
#if ENABLED(PROBE_ACTIVATION_SWITCH)
#define PROBE_ACTIVATION_SWITCH_PIN PB2 // Optoswitch to Enable Z Probe
#endif
#include "pins_CREALITY_V45x.h"
@@ -54,7 +54,7 @@
//
// Limit Switches
//
//
#define X_STOP_PIN PD8
#define Y_STOP_PIN PD15
#define Z_MIN_PIN PA11
@@ -173,7 +173,7 @@
#define LCD_PINS_D5 PE7
#define LCD_PINS_D6 PB2
#define LCD_PINS_D7 PB1
#if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
#define BTN_ENC_EN LCD_PINS_D7 // Detect the presence of the encoder
#endif
+18 -2
View File
@@ -29,6 +29,8 @@
#define BOARD_INFO_NAME "BTT BTT002 V1.0"
//#define MK3_FAN_PINS
#define USES_DIAG_PINS
// Ignore temp readings during development.
@@ -169,8 +171,22 @@
//
#define HEATER_0_PIN PE6 // Heater0
#define HEATER_BED_PIN PE5 // Hotbed
#define FAN_PIN PB8 // Fan1
#define FAN1_PIN PB9 // Fan0
#ifndef FAN_PIN
#ifdef MK3_FAN_PINS
#define FAN_PIN PB8 // Fan1
#else
#define FAN_PIN PB9 // Fan0
#endif
#endif
#ifndef FAN1_PIN
#ifdef MK3_FAN_PINS
#define FAN1_PIN PB9 // Fan0
#else
#define FAN1_PIN PB8 // Fan1
#endif
#endif
/**
* -----------------------------------BTT002 V1.0----------------------------------------
@@ -132,6 +132,13 @@
#define Z_MIN_PROBE_PIN PE4
#endif
//
// Probe enable
//
#if ENABLED(PROBE_ENABLE_DISABLE)
#define PROBE_ENABLE_PIN SERVO0_PIN
#endif
//
// Filament Runout Sensor
//
@@ -38,9 +38,9 @@
#define FLASH_EEPROM_EMULATION
#define FLASH_EEPROM_LEVELING
#define FLASH_SECTOR 2
#define FLASH_SECTOR 1
#define FLASH_UNIT_SIZE 0x4000 // 16k
#define FLASH_ADDRESS_START 0x8008000
#define FLASH_ADDRESS_START 0x8004000
#endif
//
@@ -57,7 +57,7 @@
// Limit Switches
//
#define X_STOP_PIN PB4
#define Y_STOP_PIN PB3
#define Y_STOP_PIN PC8
#define Z_STOP_PIN PB1
//
@@ -111,9 +111,10 @@
#define HEATER_0_PIN PC6
#define HEATER_BED_PIN PC7
#ifndef FAN_PIN
#define FAN_PIN PA1
#define FAN_PIN PA14
#endif
#define FAN1_PIN PC8
#define FAN1_PIN PA13
#define FAN2_PIN PA1
//
// Temperature Sensors
@@ -0,0 +1,46 @@
{
"build": {
"core": "stm32",
"cpu": "cortex-m4",
"extra_flags": "-DSTM32F4 -DSTM32F407xx -DSTM32F40_41xxx",
"f_cpu": "168000000L",
"hwids": [
[
"0x1EAF",
"0x0003"
],
[
"0x0483",
"0x3748"
]
],
"mcu": "stm32f407vet6",
"variant": "MARLIN_BIGTREE_BTT002"
},
"debug": {
"jlink_device": "STM32F407VE",
"openocd_target": "stm32f4x",
"svd_path": "STM32F40x.svd"
},
"frameworks": [
"arduino"
],
"name": "STM32F407VE (192k RAM. 512k Flash)",
"upload": {
"disable_flushing": false,
"maximum_ram_size": 131072,
"maximum_size": 524288,
"protocol": "stlink",
"protocols": [
"stlink",
"dfu",
"jlink"
],
"offset_address": "0x8008000",
"require_upload_port": true,
"use_1200bps_touch": false,
"wait_for_upload_port": false
},
"url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f407ve.html",
"vendor": "ST"
}
@@ -190,12 +190,12 @@ WEAK void SystemClock_Config(void)
/* Enable Power Control clock */
__HAL_RCC_PWR_CLK_ENABLE();
/* The voltage scaling allows optimizing the power consumption when the device is
clocked below the maximum system frequency, to update the voltage scaling value
/* The voltage scaling allows optimizing the power consumption when the device is
clocked below the maximum system frequency, to update the voltage scaling value
regarding system frequency refer to product datasheet. */
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/* Enable HSE Oscillator and activate PLL with HSE as source */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
@@ -209,19 +209,19 @@ WEAK void SystemClock_Config(void)
{
/* Initialization Error */
}
if(HAL_PWREx_EnableOverDrive() != HAL_OK)
{
/* Initialization Error */
}
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
clocks dividers */
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
{
/* Initialization Error */
+2 -1
View File
@@ -14,11 +14,12 @@ exec_test $1 $2 "Azteeg X5GT Example Configuration" "$3"
restore_configs
opt_set MOTHERBOARD BOARD_SMOOTHIEBOARD \
EXTRUDERS 2 TEMP_SENSOR_1 -1 TEMP_SENSOR_BED 5 \
EXTRUDERS 2 TEMP_SENSOR_0 -5 TEMP_SENSOR_1 -1 TEMP_SENSOR_BED 5 TEMP_0_CS_PIN P1_29 \
GRID_MAX_POINTS_X 16 \
NOZZLE_CLEAN_START_POINT "{ { 10, 10, 3 }, { 10, 10, 3 } }" \
NOZZLE_CLEAN_END_POINT "{ { 10, 20, 3 }, { 10, 20, 3 } }"
opt_enable TFTGLCD_PANEL_SPI SDSUPPORT ADAPTIVE_FAN_SLOWING NO_FAN_SLOWING_IN_PID_TUNING \
MAX31865_SENSOR_OHMS_0 MAX31865_CALIBRATION_OHMS_0 \
FIX_MOUNTED_PROBE AUTO_BED_LEVELING_BILINEAR G29_RETRY_AND_RECOVER Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET LEVEL_CORNERS_USE_PROBE LEVEL_CORNERS_VERIFY_RAISED \
PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE SLOW_PWM_HEATERS PIDTEMPBED EEPROM_SETTINGS INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT \
+3 -2
View File
@@ -15,12 +15,13 @@ exec_test $1 $2 "Teensy4.1 with default config" "$3"
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY41 \
EXTRUDERS 2 TEMP_SENSOR_0 1 TEMP_SENSOR_1 5 TEMP_SENSOR_BED 1 \
EXTRUDERS 2 TEMP_SENSOR_0 -5 TEMP_SENSOR_1 5 TEMP_SENSOR_BED 1 TEMP_0_CS_PIN 23 \
I2C_SLAVE_ADDRESS 63 \
GRID_MAX_POINTS_X 16 \
NOZZLE_CLEAN_START_POINT "{ { 10, 10, 3 }, { 10, 10, 3 } }" \
NOZZLE_CLEAN_END_POINT "{ { 10, 20, 3 }, { 10, 20, 3 } }"
opt_enable EXTENSIBLE_UI LCD_INFO_MENU SDSUPPORT SDCARD_SORT_ALPHA \
opt_enable MAX31865_SENSOR_OHMS_0 MAX31865_CALIBRATION_OHMS_0 \
EXTENSIBLE_UI LCD_INFO_MENU SDSUPPORT SDCARD_SORT_ALPHA \
FILAMENT_LCD_DISPLAY CALIBRATION_GCODE BAUD_RATE_GCODE \
FIX_MOUNTED_PROBE Z_SAFE_HOMING AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET \
+8
View File
@@ -204,6 +204,14 @@ build_flags = ${stm32_variant.build_flags}
-DPIN_SERIAL2_RX=PD_6
-DPIN_SERIAL2_TX=PD_5
#
# BigTreeTech BTT002 V1.x with 512k of flash (STM32F407VET6 ARM Cortex-M4)
#
[env:BIGTREE_BTT002_VET6]
platform = ${env:BIGTREE_BTT002.platform}
extends = env:BIGTREE_BTT002
board = marlin_BigTree_BTT002_VET6
#
# BigTreeTech SKR V2.0 (STM32F407VGT6 ARM Cortex-M4) with USB Flash Drive Support
#