diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 0fd6dc040d9d..1b3c433a0944 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -119,19 +119,23 @@ #define MACHINE_TYPE "Ender-3 S1 Pro" #if ENABLED(AUTO_BED_LEVELING_BILINEAR) #if GRID_MAX_POINTS_X == 5 - #define FIRMWARE_VERSION "abl5x5-v003-byTT" + #define FIRMWARE_VERSION "abl5x5-v004-byTT" #elif GRID_MAX_POINTS_X == 7 - #define FIRMWARE_VERSION "abl7x7-v003-byTT" + #define FIRMWARE_VERSION "abl7x7-v004-byTT" + #elif GRID_MAX_POINTS_X == 9 + #define FIRMWARE_VERSION "abl9x9-v004-byTT" #elif GRID_MAX_POINTS_X == 10 - #define FIRMWARE_VERSION "abl10x10-v003-byTT" + #define FIRMWARE_VERSION "abl10x10-v004-byTT" #endif #else #if GRID_MAX_POINTS_X == 5 - #define FIRMWARE_VERSION "ubl5x5-v003-byTT" + #define FIRMWARE_VERSION "ubl5x5-v004-byTT" #elif GRID_MAX_POINTS_X == 7 - #define FIRMWARE_VERSION "ubl7x7-v003-byTT" + #define FIRMWARE_VERSION "ubl7x7-v004-byTT" + #elif GRID_MAX_POINTS_X == 9 + #define FIRMWARE_VERSION "ubl9x9-v004-byTT" #elif GRID_MAX_POINTS_X == 10 - #define FIRMWARE_VERSION "ubl10x10-v003-byTT" + #define FIRMWARE_VERSION "ubl10x10-v004-byTT" #endif #endif #define SCREEN_VERSION "UI20" @@ -167,19 +171,23 @@ #define MACHINE_TYPE "Ender-3 S1 Plus" #if ENABLED(AUTO_BED_LEVELING_BILINEAR) #if GRID_MAX_POINTS_X == 5 - #define FIRMWARE_VERSION "abl5x5-v003-byTT" + #define FIRMWARE_VERSION "abl5x5-v004-byTT" #elif GRID_MAX_POINTS_X == 7 - #define FIRMWARE_VERSION "abl7x7-v003-byTT" + #define FIRMWARE_VERSION "abl7x7-v004-byTT" + #elif GRID_MAX_POINTS_X == 9 + #define FIRMWARE_VERSION "abl9x9-v004-byTT" #elif GRID_MAX_POINTS_X == 10 - #define FIRMWARE_VERSION "abl10x10-v003-byTT" + #define FIRMWARE_VERSION "abl10x10-v004-byTT" #endif #else #if GRID_MAX_POINTS_X == 5 - #define FIRMWARE_VERSION "ubl5x5-v003-byTT" + #define FIRMWARE_VERSION "ubl5x5-v004-byTT" #elif GRID_MAX_POINTS_X == 7 - #define FIRMWARE_VERSION "ubl7x7-v003-byTT" + #define FIRMWARE_VERSION "ubl7x7-v004-byTT" + #elif GRID_MAX_POINTS_X == 9 + #define FIRMWARE_VERSION "ubl9x9-v004-byTT" #elif GRID_MAX_POINTS_X == 10 - #define FIRMWARE_VERSION "ubl10x10-v003-byTT" + #define FIRMWARE_VERSION "ubl10x10-v004-byTT" #endif #endif #define SCREEN_VERSION "v1.0.1-byTT" @@ -214,14 +222,16 @@ #define SOFTVERSION SHORT_BUILD_VERSION #define MACHINE_TYPE "Ender-3 S1" #if ENABLED(AUTO_BED_LEVELING_BILINEAR) - #define FIRMWARE_VERSION "abl5x5-v002-byTT" + #define FIRMWARE_VERSION "abl5x5-v004-byTT" #else #if GRID_MAX_POINTS_X == 5 - #define FIRMWARE_VERSION "ubl5x5-v002-byTT" + #define FIRMWARE_VERSION "ubl5x5-v004-byTT" #elif GRID_MAX_POINTS_X == 7 - #define FIRMWARE_VERSION "ubl7x7-v002-byTT" + #define FIRMWARE_VERSION "ubl7x7-v004-byTT" + #elif GRID_MAX_POINTS_X == 9 + #define FIRMWARE_VERSION "ubl9x9-v004-byTT" #elif GRID_MAX_POINTS_X == 10 - #define FIRMWARE_VERSION "ubl10x10-v002-byTT" + #define FIRMWARE_VERSION "ubl10x10-v004-byTT" #endif #endif #define SCREEN_VERSION "v1.0.1-byTT" @@ -259,11 +269,13 @@ #define FIRMWARE_VERSION "abl5x5-byTT" #else #if GRID_MAX_POINTS_X == 5 - #define FIRMWARE_VERSION "ubl5x5-byTT" + #define FIRMWARE_VERSION "ubl5x5-v004-byTT" #elif GRID_MAX_POINTS_X == 7 - #define FIRMWARE_VERSION "ubl7x7-byTT" + #define FIRMWARE_VERSION "ubl7x7-v004-byTT" + #elif GRID_MAX_POINTS_X == 9 + #define FIRMWARE_VERSION "ubl9x9-v004-byTT" #elif GRID_MAX_POINTS_X == 10 - #define FIRMWARE_VERSION "ubl10x10-byTT" + #define FIRMWARE_VERSION "ubl10x10-v004-byTT" #endif #endif #define SCREEN_VERSION "v1.0.1-byTT" diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index 057910e2e4ba..46f449ce623e 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -858,7 +858,11 @@ void unified_bed_leveling::shift_mesh_height() { #if GRID_MAX_POINTS_X == 7 rtscheck.RTS_SndData(ExchangePageBase + 94, ExchangepageAddr); change_page_font = 94; - #endif + #endif + #if GRID_MAX_POINTS_X == 9 + rtscheck.RTS_SndData(ExchangePageBase + 96, ExchangepageAddr); + change_page_font = 96; + #endif #if GRID_MAX_POINTS_X == 10 rtscheck.RTS_SndData(ExchangePageBase + 95, ExchangepageAddr); change_page_font = 95; @@ -882,6 +886,7 @@ void unified_bed_leveling::shift_mesh_height() { queue.enqueue_one(F("G29 P1 C T")); } rtscheck.RTS_SndData(lang, AUTO_LEVELING_START_TITLE_VP); + leveling_running = 0; RTS_AutoBedLevelPage(); #endif diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 1c2169f6c86a..00085fa690b1 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -819,7 +819,11 @@ G29_TYPE GcodeSuite::G29() { #if GRID_MAX_POINTS_X == 7 rtscheck.RTS_SndData(ExchangePageBase + 94, ExchangepageAddr); change_page_font = 94; - #endif + #endif + #if GRID_MAX_POINTS_X == 9 + rtscheck.RTS_SndData(ExchangePageBase + 96, ExchangepageAddr); + change_page_font = 96; + #endif #if GRID_MAX_POINTS_X == 10 rtscheck.RTS_SndData(ExchangePageBase + 95, ExchangepageAddr); change_page_font = 95; @@ -1045,7 +1049,8 @@ G29_TYPE GcodeSuite::G29() { #if ENABLED(E3S1PRO_RTS) queue.enqueue_one_P(PSTR("M420 S1")); - queue.enqueue_one_P(PSTR("M500")); + queue.enqueue_one_P(PSTR("M500")); + leveling_running = 0; rtscheck.RTS_SndData(lang, AUTO_LEVELING_START_TITLE_VP); RTS_AutoBedLevelPage(); #endif diff --git a/Marlin/src/lcd/rts/e3s1pro/lcd_rts.cpp b/Marlin/src/lcd/rts/e3s1pro/lcd_rts.cpp index 1bd498aba025..70bde3e5bb24 100644 --- a/Marlin/src/lcd/rts/e3s1pro/lcd_rts.cpp +++ b/Marlin/src/lcd/rts/e3s1pro/lcd_rts.cpp @@ -107,6 +107,7 @@ float y_zeta = 0.0; int power_off_type_yes = 0; int old_leveling = 0; int bltouch_tramming = 0; +int leveling_running = 0; int touchscreen_requested_mesh = 0; @@ -397,19 +398,56 @@ void RTSSHOW::RTS_SDCardUpate() { } } -void RTSSHOW::sendPacketAndReceiveResponse(uint16_t packetValue) -{ +bool RTSSHOW::readDisplayVersion(uint8_t &guiVersion, uint8_t &osVersion) { + // Prepare the data packet to send to the display. + uint16_t addressToRead = DGUS_VERSION; + sendPacketAndReceiveResponse(addressToRead); + + // Check if the received response is valid + if (recData.command == DGUS_READVAR && recData.addr == DGUS_VERSION) { + // Extract the version information from the received data + guiVersion = recData.data[0] & 0xFF; // Assuming GUI version is in the LSB + osVersion = recData.data[1] & 0xFF; // Assuming OS version is in the LSB + return true; // Successful reading + } else { + // Handle error or invalid response here + return false; // Reading failed + } +} + +String RTSSHOW::RTS_ReadTextField(uint16_t address) { + // Send the read command to the DGUS display to read the text field content + sendPacketAndReceiveResponse(address); + + // Check if the received response is valid + if (recData.command == 0x83 && recData.addr == address) { + String textFieldContent = ""; + for (unsigned int i = 0; i < recData.bytelen; i++) { + // Extract the character from the received data + char character = recData.data[i]; + + // Append the character to the textFieldContent + textFieldContent += character; + } + return textFieldContent; + } else { + // Handle error or invalid response here + // You can return an error code or an empty string + return ""; + } +} + +void RTSSHOW::sendPacketAndReceiveResponse(uint16_t packetValue) { // Prepare the data packet to send to the display. databuf[0] = FHONE; databuf[1] = FHTWO; databuf[2] = 0x03; // Length of the data packet (excluding header). - databuf[3] = VarAddr_W; // Command to write data to the display. + databuf[3] = VarAddr_R; // Command to read data from the display. databuf[4] = packetValue >> 8; // MSB of the packetValue. databuf[5] = packetValue & 0xFF; // LSB of the packetValue. // Send the data packet to the display over the serial connection. - for (int i = 0; i < 6; i++) - { + for (int i = 0; i < 6; i++) { LCDSERIAL.write(databuf[i]); delayMicroseconds(1); } @@ -421,27 +459,36 @@ void RTSSHOW::sendPacketAndReceiveResponse(uint16_t packetValue) delay(50); // Adjust the delay time based on the response time of the display. // Read the response from the display. - int recnum = 0; - while (LCDSERIAL.available() > 0 && recnum < SizeofDatabuf) - { + int recnum = 0; // Declare the 'recnum' variable here. + while (LCDSERIAL.available() > 0 && recnum < SizeofDatabuf) { delay(1); databuf[recnum] = LCDSERIAL.read(); recnum++; } - // Check if the received response is valid. - if (recnum >= 6 && databuf[0] == FHONE && databuf[1] == FHTWO && databuf[2] == 0x04) - { - // Extract the received value from the response. - uint16_t receivedValue = (databuf[3] << 8) | databuf[4]; - - // Print the received value to the serial monitor. - SERIAL_ECHO_MSG("Received value: ", receivedValue); + // Print the received data to the serial monitor for debugging. + SERIAL_ECHO("Received data from display: "); + for (int i = 0; i < recnum; i++) { + SERIAL_ECHO(databuf[i]); + SERIAL_ECHO(" "); } - else - { + SERIAL_ECHOLN(""); + + if (recnum >= 7 && databuf[0] == FHONE && databuf[1] == FHTWO && databuf[2] == 0x04) { + // Extract the received data from the response. + recData.len = databuf[2]; + recData.command = databuf[3]; + recData.addr = databuf[4]; + recData.addr = (recData.addr << 8) | databuf[5]; + recData.bytelen = databuf[6]; // Corrected position of bytelen + for (unsigned int i = 0; i < recData.bytelen; i += 2) { + recData.data[i / 2] = databuf[7 + i]; + recData.data[i / 2] = (recData.data[i / 2] << 8) | databuf[8 + i]; + } + } else { // Handle error or invalid response here. SERIAL_ECHOLN("Error: Invalid response from display."); + return; } } @@ -460,27 +507,27 @@ void RTSSHOW::RTS_Init(void) if (!IS_SD_INSERTED()) { delay(500); card.mount(); } if (IS_SD_INSERTED()) recovery.check(); #endif +/** + uint8_t guiVersion, osVersion; + bool success = readDisplayVersion(guiVersion, osVersion); + if (success) { + // Display the received display version + SERIAL_ECHO("Display Version: GUI "); + SERIAL_ECHO(guiVersion); + SERIAL_ECHO(", OS "); + SERIAL_ECHOLN(osVersion); + } else { + // Handle the case where reading the display version failed + SERIAL_ECHOLN("Error: Failed to read display version during initialization."); + // You can take appropriate action here, e.g., retry, display an error message, etc. + } -// Send request to read the value at address 0x17D8 from the display -RTS_SndData(0x17D8, VarAddr_R); - -// Receive and process the response from the display -uint16_t addressToSend = 0x17D8; -sendPacketAndReceiveResponse(addressToSend); - -//SERIAL_ECHO("Data received: "); -//for (int i = 0; i < SizeofDatabuf; i++) { -// SERIAL_ECHO(databuf[i]); -// SERIAL_ECHO(" "); -//} - -// Assuming the value is in recdat.data[0] and recdat.data[1]. -//uint16_t variable_0x17D8 = (databuf[3] << 8) | databuf[4]; -uint16_t variable_0x17D8 = (recdat.data[0] << 8) | recdat.data[1]; - -// Print the value of variable_0x17D8 to the serial monitor. -SERIAL_ECHO_MSG("Value of variable 0x17D8: ", variable_0x17D8); - + uint16_t addressToRead = 0x000F; + // Read the text field content from the display at the given address + String textFieldContent = RTS_ReadTextField(addressToRead); + // Print the received text field content to the serial monitor for testing + SERIAL_ECHO_MSG("Value of variable at address 0x17D8: ", textFieldContent.c_str()); +*/ delay(500); last_zoffset = zprobe_zoffset = probe.offset.z; @@ -582,7 +629,7 @@ SERIAL_ECHO_MSG("Value of variable 0x17D8: ", variable_0x17D8); RTS_SndData(home_offset.x * 10, HOME_X_OFFSET_VP); RTS_SndData(home_offset.y * 10, HOME_Y_OFFSET_VP); RTS_SndData(planner.extruder_advance_K[0] * 100, ADVANCE_K_SET); - RTS_SndData(planner.flow_percentage[0], E0_SET_FLOW_VP); + RTS_SndData(planner.flow_percentage[0], E0_SET_FLOW_VP); RTS_SndData(StartSoundSet, 0); #if ENABLED(GCODE_PREVIEW_ENABLED) @@ -776,111 +823,64 @@ int RTSSHOW::RTS_RecData(void) return 2; } - -int RTSSHOW::RTS_RecData2(void) -{ +int RTSSHOW::RTS_RecData2() { static int recnum = 0; - #define DWINBUF_MAX 256 - static bool recvflag = false; - static uint8_t databuf[DWINBUF_MAX]; - // Parse data frame - if((LCDSERIAL.available() > 0) && (recnum < (signed)sizeof(databuf))) - { - databuf[recnum++] = LCDSERIAL.read(); - - #define RECV_DEBUG - #if defined(RECV_DEBUG) - char buf[16]; - sprintf_P(buf, PSTR("%02x "), databuf[recnum - 1]); - //serialprintPGM(buf); - //SERIAL_ECHOPGM(buf); - //SERIAL_ECHO(databuf[i]); - #endif - - // Verify the frame head - if((recnum == 1) && (databuf[0] != 0x5A)) - { - recnum = 0; - } - else if((recnum == 2) && (databuf[1] != 0xA5)) - { - // Verify the frame head - recnum = 0; - } - else if((recnum == 4) && (databuf[3] != 0x83)) - { - // Parse only the read command 0x83 and filter out the reply command 0x82 - recnum = 0; - } - else if((recnum >= 3) && (databuf[2] == (recnum - 3))) - { - // Complete resolution - recvflag = true; - - #if defined(RECV_DEBUG) - //serialprintPGM("\n"); - //SERIAL_ECHO_MSG("dwin rx ok"); - #endif - } - else if((recnum >= 3) && ((recnum - 3) > databuf[2])) - { - // The actual received data bytes were larger than the frame data bytes, parsing failed + while ((LCDSERIAL.available() > 0) && (recnum < SizeofDatabuf)) { + delay(1); + databuf[recnum] = LCDSERIAL.read(); + if (databuf[0] == FHONE) { + recnum++; + } else if (databuf[0] == FHTWO) { + databuf[0] = FHONE; + databuf[1] = FHTWO; + recnum += 2; + } else if (databuf[0] == FHLENG) { + databuf[0] = FHONE; + databuf[1] = FHTWO; + databuf[2] = FHLENG; + recnum += 3; + } else if (databuf[0] == VarAddr_R) { + databuf[0] = FHONE; + databuf[1] = FHTWO; + databuf[2] = FHLENG; + databuf[3] = VarAddr_R; + recnum += 4; + } else { recnum = 0; } } - if(!recvflag) - { - return -1; - } - else - { - recvflag = false; - } - // receive nothing - if(recnum < 1) - { + if (recnum < 1) { return -1; - } - else if((recdat.head[0] == databuf[0]) && (recdat.head[1] == databuf[1]) && (recnum > 2)) - { + } else if ((recdat.head[0] == databuf[0]) && (recdat.head[1] == databuf[1]) && (recnum > 2)) { recdat.len = databuf[2]; recdat.command = databuf[3]; // response for writing byte - if((recdat.len == 0x03) && ((recdat.command == 0x82) || (recdat.command == 0x80)) && (databuf[4] == 0x4F) && (databuf[5] == 0x4B)) - { + if ((recdat.len == 0x03) && ((recdat.command == 0x82) || (recdat.command == 0x80)) && (databuf[4] == 0x4F) && (databuf[5] == 0x4B)) { memset(databuf, 0, sizeof(databuf)); recnum = 0; return -1; - } - else if(recdat.command == 0x83) - { + } else if (recdat.command == 0x83) { // response for reading the data from the variate recdat.addr = databuf[4]; recdat.addr = (recdat.addr << 8) | databuf[5]; recdat.bytelen = databuf[6]; - for(unsigned int i = 0; i < recdat.bytelen; i += 2) - { + for (unsigned int i = 0; i < recdat.bytelen; i += 2) { recdat.data[i / 2] = databuf[7 + i]; recdat.data[i / 2] = (recdat.data[i / 2] << 8) | databuf[8 + i]; } - } - else if(recdat.command == 0x81) - { + } else if (recdat.command == 0x81) { // response for reading the page from the register recdat.addr = databuf[4]; recdat.bytelen = databuf[5]; - for(unsigned int i = 0; i < recdat.bytelen; i ++) - { + for (unsigned int i = 0; i < recdat.bytelen; i++) { recdat.data[i] = databuf[6 + i]; // recdat.data[i] = (recdat.data[i] << 8 )| databuf[7 + i]; } } - } - else - { + } else { memset(databuf, 0, sizeof(databuf)); recnum = 0; // receive the wrong data @@ -1326,6 +1326,7 @@ void RTSSHOW::RTS_HandleData(void) } } else if (recdat.data[0] == 8) { + RTS_SndData(planner.flow_percentage[0], E0_SET_FLOW_VP); RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); #if ENABLED(GCODE_PREVIEW_ENABLED) if (false == CardRecbuf.selectFlag) { @@ -1415,7 +1416,11 @@ void RTSSHOW::RTS_HandleData(void) #if GRID_MAX_POINTS_X == 7 rtscheck.RTS_SndData(ExchangePageBase + 94, ExchangepageAddr); change_page_font = 94; - #endif + #endif + #if GRID_MAX_POINTS_X == 9 + rtscheck.RTS_SndData(ExchangePageBase + 96, ExchangepageAddr); + change_page_font = 96; + #endif #if GRID_MAX_POINTS_X == 10 rtscheck.RTS_SndData(ExchangePageBase + 95, ExchangepageAddr); change_page_font = 95; @@ -1435,6 +1440,16 @@ void RTSSHOW::RTS_HandleData(void) if(recdat.data[0] == 1) { // thermalManager.fan_speed[0] ? RTS_SndData(1, PRINTER_FANOPEN_TITLE_VP) : RTS_SndData(0, PRINTER_FANOPEN_TITLE_VP); + x_frequency = stepper.get_shaping_frequency(X_AXIS); + RTS_SndData(x_frequency * 100, SHAPING_X_FREQUENCY_VP); + y_frequency = stepper.get_shaping_frequency(Y_AXIS); + RTS_SndData(y_frequency * 100, SHAPING_Y_FREQUENCY_VP); + x_zeta = stepper.get_shaping_damping_ratio(X_AXIS); + RTS_SndData(x_zeta * 100, SHAPING_X_ZETA_VP); + y_zeta = stepper.get_shaping_damping_ratio(Y_AXIS); + RTS_SndData(y_zeta * 100, SHAPING_Y_ZETA_VP); + RTS_SndData(planner.extruder_advance_K[0] * 100, ADVANCE_K_SET); + RTS_SndData(planner.flow_percentage[0], E0_SET_FLOW_VP); RTS_SndData(ExchangePageBase + 14, ExchangepageAddr); change_page_font = 14; } @@ -2657,10 +2672,6 @@ void RTSSHOW::RTS_HandleData(void) #if ENABLED(BLTOUCH) old_leveling = 0; - RTS_SndData(AutoHomeFirstPoint, AUTO_BED_LEVEL_CUR_POINT_VP); - RTS_SndData(lang + 10, AUTO_LEVELING_START_TITLE_VP); - RTS_SndData(GRID_MAX_POINTS_X * GRID_MAX_POINTS_Y, AUTO_BED_LEVEL_END_POINT); - if(axes_should_home()){ waitway = 15; queue.enqueue_one_P(PSTR("G28")); @@ -2674,21 +2685,61 @@ void RTSSHOW::RTS_HandleData(void) #if GRID_MAX_POINTS_X == 7 rtscheck.RTS_SndData(ExchangePageBase + 94, ExchangepageAddr); change_page_font = 94; - #endif + #endif + #if GRID_MAX_POINTS_X == 9 + rtscheck.RTS_SndData(ExchangePageBase + 96, ExchangepageAddr); + change_page_font = 96; + #endif #if GRID_MAX_POINTS_X == 10 rtscheck.RTS_SndData(ExchangePageBase + 95, ExchangepageAddr); change_page_font = 95; #endif } - #if ENABLED(AUTO_BED_LEVELING_BILINEAR) - queue.enqueue_one_P(PSTR("G29")); - #else - touchscreen_requested_mesh = 1; - queue.enqueue_one_P(PSTR("G29 P1 T")); - queue.enqueue_one_P(PSTR("G29 S0")); - queue.enqueue_one_P(PSTR("M420 S1")); - queue.enqueue_one_P(PSTR("M500")); - #endif + if (leveling_running == 0){ + RTS_SndData(AutoHomeFirstPoint, AUTO_BED_LEVEL_CUR_POINT_VP); + RTS_SndData(lang + 10, AUTO_LEVELING_START_TITLE_VP); + RTS_SndData(GRID_MAX_POINTS_X * GRID_MAX_POINTS_Y, AUTO_BED_LEVEL_END_POINT); + leveling_running = 1; + bedlevel.reset(); + bool zig = false; + int8_t inStart, inStop, inInc, showcount; + showcount = 0; + //settings.load(); + for (int y = 0; y < GRID_MAX_POINTS_Y; y++) + { + // away from origin + if (zig) + { + inStart = GRID_MAX_POINTS_X - 1; + inStop = -1; + inInc = -1; + } + else + { + // towards origin + inStart = 0; + inStop = GRID_MAX_POINTS_X; + inInc = 1; + } + zig ^= true; + for (int x = inStart; x != inStop; x += inInc) + { + // Set the value to 0 directly + RTS_SndData(0, AUTO_BED_LEVEL_1POINT_NEW_VP + showcount * 2); + showcount++; + } + } + + #if ENABLED(AUTO_BED_LEVELING_BILINEAR) + queue.enqueue_one_P(PSTR("G29")); + #else + touchscreen_requested_mesh = 1; + queue.enqueue_one_P(PSTR("G29 P1 T")); + queue.enqueue_one_P(PSTR("G29 S0")); + queue.enqueue_one_P(PSTR("M420 S1")); + queue.enqueue_one_P(PSTR("M500")); + #endif + } #endif } else if(recdat.data[0] == 164) @@ -2709,7 +2760,11 @@ void RTSSHOW::RTS_HandleData(void) #if GRID_MAX_POINTS_X == 7 RTS_SndData(ExchangePageBase + 94, ExchangepageAddr); change_page_font = 94; - #endif + #endif + #if GRID_MAX_POINTS_X == 9 + RTS_SndData(ExchangePageBase + 96, ExchangepageAddr); + change_page_font = 96; + #endif #if GRID_MAX_POINTS_X == 10 RTS_SndData(ExchangePageBase + 95, ExchangepageAddr); change_page_font = 95; @@ -3022,6 +3077,9 @@ void RTSSHOW::RTS_HandleData(void) case E0FlowKey: planner.flow_percentage[0] = recdat.data[0]; RTS_SndData(recdat.data[0], E0_SET_FLOW_VP); + if(!card.isPrinting()){ + settings.save(); + } break; case HeaterLoadEnterKey: @@ -3661,19 +3719,26 @@ void RTSSHOW::RTS_HandleData(void) case Advance_K_Key: planner.extruder_advance_K[0] = ((float)recdat.data[0])/100; RTS_SndData(planner.extruder_advance_K[0] * 100, ADVANCE_K_SET); + if(!card.isPrinting()){ + settings.save(); + } break; case XShapingFreqsetEnterKey: x_frequency = ((float)recdat.data[0])/100; stepper.set_shaping_frequency(X_AXIS, x_frequency); RTS_SndData(stepper.get_shaping_frequency(X_AXIS) * 100, SHAPING_X_FREQUENCY_VP); - settings.save(); + if(!card.isPrinting()){ + settings.save(); + } break; case YShapingFreqsetEnterKey: y_frequency = ((float)recdat.data[0])/100; stepper.set_shaping_frequency(Y_AXIS, y_frequency); RTS_SndData(stepper.get_shaping_frequency(Y_AXIS) * 100, SHAPING_Y_FREQUENCY_VP); - settings.save(); + if(!card.isPrinting()){ + settings.save(); + } break; case XShapingZetasetEnterKey: @@ -3681,7 +3746,9 @@ void RTSSHOW::RTS_HandleData(void) x_zeta = ((float)recdat.data[0])/100; stepper.set_shaping_damping_ratio(X_AXIS, x_zeta); RTS_SndData(stepper.get_shaping_damping_ratio(X_AXIS) * 100, SHAPING_X_ZETA_VP); - settings.save(); + if(!card.isPrinting()){ + settings.save(); + } break; case YShapingZetasetEnterKey: @@ -3689,7 +3756,9 @@ void RTSSHOW::RTS_HandleData(void) y_zeta = ((float)recdat.data[0])/100; stepper.set_shaping_damping_ratio(Y_AXIS, y_zeta); RTS_SndData(stepper.get_shaping_damping_ratio(Y_AXIS) * 100, SHAPING_Y_ZETA_VP); - settings.save(); + if(!card.isPrinting()){ + settings.save(); + } break; case XMinPosEepromEnterKey: @@ -4599,7 +4668,11 @@ void RTS_AutoBedLevelPage(void) #if GRID_MAX_POINTS_X == 7 rtscheck.RTS_SndData(ExchangePageBase + 94, ExchangepageAddr); change_page_font = 94; - #endif + #endif + #if GRID_MAX_POINTS_X == 9 + rtscheck.RTS_SndData(ExchangePageBase + 96, ExchangepageAddr); + change_page_font = 96; + #endif #if GRID_MAX_POINTS_X == 10 rtscheck.RTS_SndData(ExchangePageBase + 95, ExchangepageAddr); change_page_font = 95; @@ -4659,7 +4732,11 @@ else if(waitway == 15) #if GRID_MAX_POINTS_X == 7 rtscheck.RTS_SndData(ExchangePageBase + 94, ExchangepageAddr); change_page_font = 94; - #endif + #endif + #if GRID_MAX_POINTS_X == 9 + rtscheck.RTS_SndData(ExchangePageBase + 96, ExchangepageAddr); + change_page_font = 96; + #endif #if GRID_MAX_POINTS_X == 10 rtscheck.RTS_SndData(ExchangePageBase + 95, ExchangepageAddr); change_page_font = 95; diff --git a/Marlin/src/lcd/rts/e3s1pro/lcd_rts.h b/Marlin/src/lcd/rts/e3s1pro/lcd_rts.h index db90d7881d36..74d30a43b83d 100644 --- a/Marlin/src/lcd/rts/e3s1pro/lcd_rts.h +++ b/Marlin/src/lcd/rts/e3s1pro/lcd_rts.h @@ -55,6 +55,8 @@ #define DC_SOUND_SET_DDR ((unsigned long)0x0080) #define WRITE_CURVE_DDR_CMD ((unsigned long)0x030B) +const uint8_t DGUS_READVAR = 0x83; +const uint16_t DGUS_VERSION = 0x000F; /*Error value*/ #define Error_201 "201 (Command Timeout)" // The command too much inactive time @@ -536,6 +538,17 @@ typedef struct { #define RECEIVED_SHAKE_HAND_ACK 0x01 extern HMI_LCD_Flag_t HMI_lcd_flag; + +struct RecData2 { + unsigned char len; + unsigned char head[2]; + unsigned char command; + unsigned long addr; + unsigned long bytelen; + unsigned short data[32]; // Adjust the size based on the expected maximum length of data + unsigned char reserv[4]; // Add the reserved field, as present in ResData2 (DB) struct +}; + class RTSSHOW { public: @@ -543,7 +556,7 @@ class RTSSHOW static void EachMomentUpdate(void); static float isBedLevelingFlag; int RTS_RecData(void); - int RTS_RecData2(void); + int RTS_RecData2(); void RTS_SDCardInit(void); bool RTS_SD_Detected(void); void RTS_SDCardUpate(void); @@ -566,11 +579,14 @@ class RTSSHOW void RTS_HandleData_Laser(void); void RTS_SDcard_Stop_laser(void); #endif + String RTS_ReadTextField(uint16_t address); void sendPacketAndReceiveResponse(uint16_t packetValue); + bool readDisplayVersion(uint8_t &guiVersion, uint8_t &osVersion); static void RTS_SndText(const char string[], unsigned long addr, uint8_t textSize = 30); static DB recdat; static DB snddat; private: + RecData2 recData; unsigned char databuf[SizeofDatabuf]; }; @@ -843,6 +859,7 @@ extern uint8_t x_min_pos_eeprom; extern uint8_t y_min_pos_eeprom; extern int8_t g_uiAutoPIDRuningDiff; extern int16_t g_uiCurveDataCnt; +extern int leveling_running; void AutoUIBedNozzleHeightCali(void); void LcdAutoUIMoveXYBlock(float _posX, float _posY); void LcdAutoUIMoveZBlock(float _posZ); diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 91e1097db103..05a072d98bb5 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -665,7 +665,7 @@ #elif MB(CREALITY_V24S1) #include "stm32f1/pins_CREALITY_V24S1.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(CREALITY_V24S1_301) - #include "stm32f1/pins_CREALITY_V24S1_301.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple env:STM32F103RE_creality_e3s1pro_abl5x5 env:STM32F103RE_creality_e3s1pro_abl7x7 env:STM32F103RE_creality_e3s1pro_abl10x10 env:STM32F103RE_creality_e3s1pro_ubl5x5 env:STM32F103RE_creality_e3s1pro_ubl7x7 env:STM32F103RE_creality_e3s1pro_ubl10x10 env:STM32F103RE_creality_e3s1plus_abl5x5 env:STM32F103RE_creality_e3s1plus_abl7x7 env:STM32F103RE_creality_e3s1plus_abl10x10 env:STM32F103RE_creality_e3s1plus_ubl5x5 env:STM32F103RE_creality_e3s1plus_ubl7x7 env:STM32F103RE_creality_e3s1plus_ubl10x10 env:STM32F103RE_creality_e3s1_abl5x5 + #include "stm32f1/pins_CREALITY_V24S1_301.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple env:STM32F103RE_creality_e3s1pro_abl5x5 env:STM32F103RE_creality_e3s1pro_abl7x7 env:STM32F103RE_creality_e3s1pro_abl9x9 env:STM32F103RE_creality_e3s1pro_abl10x10 env:STM32F103RE_creality_e3s1pro_ubl5x5 env:STM32F103RE_creality_e3s1pro_ubl7x7 env:STM32F103RE_creality_e3s1pro_ubl9x9 env:STM32F103RE_creality_e3s1pro_ubl10x10 env:STM32F103RE_creality_e3s1plus_abl5x5 env:STM32F103RE_creality_e3s1plus_abl7x7 env:STM32F103RE_creality_e3s1plus_abl9x9 env:STM32F103RE_creality_e3s1plus_abl10x10 env:STM32F103RE_creality_e3s1plus_ubl5x5 env:STM32F103RE_creality_e3s1plus_ubl7x7 env:STM32F103RE_creality_e3s1plus_ubl9x9 env:STM32F103RE_creality_e3s1plus_ubl10x10 env:STM32F103RE_creality_e3s1_abl5x5 #elif MB(CREALITY_V25S1) #include "stm32f1/pins_CREALITY_V25S1.h" // STM32F1 env:STM32F103RE_creality_smartPro env:STM32F103RE_creality_smartPro_maple #elif MB(CREALITY_V521) @@ -787,7 +787,7 @@ #elif MB(ARTILLERY_RUBY) #include "stm32f4/pins_ARTILLERY_RUBY.h" // STM32F4 env:Artillery_Ruby #elif MB(CREALITY_V24S1_301F4) - #include "stm32f4/pins_CREALITY_V24S1_301F4.h" // STM32F4 env:STM32F401RC_creality env:STM32F401RC_creality_jlink env:STM32F401RC_creality_stlink env:STM32F401RC_creality_e3s1pro_abl5x5 env:STM32F401RC_creality_e3s1pro_abl7x7 env:STM32F401RC_creality_e3s1pro_abl10x10 env:STM32F401RC_creality_e3s1pro_abl5x5_personal env:STM32F401RC_creality_e3s1pro_ubl5x5_personal env:STM32F401RC_creality_e3s1pro_ubl5x5 env:STM32F401RC_creality_e3s1pro_ubl7x7 env:STM32F401RC_creality_e3s1pro_ubl10x10 env:STM32F401RC_creality_e3s1plus_abl5x5 env:STM32F401RC_creality_e3s1plus_abl7x7 env:STM32F401RC_creality_e3s1plus_abl10x10 env:STM32F401RC_creality_e3s1plus_ubl5x5 env:STM32F401RC_creality_e3s1plus_ubl7x7 env:STM32F401RC_creality_e3s1plus_ubl10x10 env:STM32F401RC_creality_e3s1_abl5x5 + #include "stm32f4/pins_CREALITY_V24S1_301F4.h" // STM32F4 env:STM32F401RC_creality env:STM32F401RC_creality_jlink env:STM32F401RC_creality_stlink env:STM32F401RC_creality_e3s1pro_abl5x5 env:STM32F401RC_creality_e3s1pro_abl7x7 env:STM32F401RC_creality_e3s1pro_abl9x9 env:STM32F401RC_creality_e3s1pro_abl10x10 env:STM32F401RC_creality_e3s1pro_abl5x5_personal env:STM32F401RC_creality_e3s1pro_ubl5x5_personal env:STM32F401RC_creality_e3s1pro_ubl5x5 env:STM32F401RC_creality_e3s1pro_ubl7x7 env:STM32F401RC_creality_e3s1pro_ubl9x9 env:STM32F401RC_creality_e3s1pro_ubl10x10 env:STM32F401RC_creality_e3s1plus_abl5x5 env:STM32F401RC_creality_e3s1plus_abl7x7 env:STM32F401RC_creality_e3s1plus_abl9x9 env:STM32F401RC_creality_e3s1plus_abl10x10 env:STM32F401RC_creality_e3s1plus_ubl5x5 env:STM32F401RC_creality_e3s1plus_ubl7x7 env:STM32F401RC_creality_e3s1plus_ubl9x9 env:STM32F401RC_creality_e3s1plus_ubl10x10 env:STM32F401RC_creality_e3s1_abl5x5 #elif MB(OPULO_LUMEN_REV4) #include "stm32f4/pins_OPULO_LUMEN_REV4.h" // STM32F4 env:Opulo_Lumen_REV4 #elif MB(FYSETC_SPIDER_KING407) diff --git a/ini/stm32f1.ini b/ini/stm32f1.ini index f855088bb4f2..93257902bd37 100644 --- a/ini/stm32f1.ini +++ b/ini/stm32f1.ini @@ -196,6 +196,19 @@ build_flags = ${STM32F103Rx_creality.build_flags} -DPROBING_MARGIN=45 board_build.rename = firmware-{date}-{time}-E3S1Pro-abl7x7-v004-F1.bin +[env:STM32F103RE_creality_e3s1pro_abl9x9] +extends = env:STM32F103RE_creality +build_flags = ${STM32F103Rx_creality.build_flags} + -DLASER_FEATURE + -DENDER_MACHINE_OVERRIDE + -DENDER_3S1_PRO + -DAUTO_BED_LEVELING_BILINEAR + -DGRID_MAX_POINTS_X=9 + -DUSER_STM32F103=1 + -DMOTHERBOARD=BOARD_CREALITY_V24S1_301 + -DPROBING_MARGIN=45 +board_build.rename = firmware-{date}-{time}-E3S1Pro-abl9x9-v004-F1.bin + [env:STM32F103RE_creality_e3s1pro_abl10x10] extends = env:STM32F103RE_creality build_flags = ${STM32F103Rx_creality.build_flags} @@ -236,6 +249,19 @@ build_flags = ${STM32F103Rx_creality.build_flags} -DMESH_INSET_Y=45 board_build.rename = firmware-{date}-{time}-E3S1Pro-ubl7x7-v004-F1.bin +[env:STM32F103RE_creality_e3s1pro_ubl9x9] +extends = env:STM32F103RE_creality +build_flags = ${STM32F103Rx_creality.build_flags} + -DENDER_MACHINE_OVERRIDE + -DENDER_3S1_PRO + -DAUTO_BED_LEVELING_UBL + -DGRID_MAX_POINTS_X=9 + -DUSER_STM32F103=1 + -DMOTHERBOARD=BOARD_CREALITY_V24S1_301 + -DMESH_INSET_X=27 + -DMESH_INSET_Y=45 +board_build.rename = firmware-{date}-{time}-E3S1Pro-ubl9x9-v004-F1.bin + [env:STM32F103RE_creality_e3s1pro_ubl10x10] extends = env:STM32F103RE_creality build_flags = ${STM32F103Rx_creality.build_flags} @@ -276,6 +302,19 @@ build_flags = ${STM32F103Rx_creality.build_flags} -DPROBING_MARGIN=45 board_build.rename = firmware-{date}-{time}-E3S1Plus-abl7x7-v004-F1.bin +[env:STM32F103RE_creality_e3s1plus_abl9x9] +extends = env:STM32F103RE_creality +build_flags = ${STM32F103Rx_creality.build_flags} + -DLASER_FEATURE + -DENDER_MACHINE_OVERRIDE + -DENDER_3S1_PLUS + -DAUTO_BED_LEVELING_BILINEAR + -DGRID_MAX_POINTS_X=9 + -DUSER_STM32F103=1 + -DMOTHERBOARD=BOARD_CREALITY_V24S1_301 + -DPROBING_MARGIN=45 +board_build.rename = firmware-{date}-{time}-E3S1Plus-abl9x9-v004-F1.bin + [env:STM32F103RE_creality_e3s1plus_abl10x10] extends = env:STM32F103RE_creality build_flags = ${STM32F103Rx_creality.build_flags} @@ -309,13 +348,26 @@ build_flags = ${STM32F103Rx_creality.build_flags} -DENDER_MACHINE_OVERRIDE -DENDER_3S1_PLUS -DAUTO_BED_LEVELING_UBL - -DGRID_MAX_POINTS_X=10 + -DGRID_MAX_POINTS_X=7 -DUSER_STM32F103=1 -DMOTHERBOARD=BOARD_CREALITY_V24S1_301 -DMESH_INSET_X=27 -DMESH_INSET_Y=45 board_build.rename = firmware-{date}-{time}-E3S1Plus-ubl7x7-v004-F1.bin +[env:STM32F103RE_creality_e3s1plus_ubl9x9] +extends = env:STM32F103RE_creality +build_flags = ${STM32F103Rx_creality.build_flags} + -DENDER_MACHINE_OVERRIDE + -DENDER_3S1_PLUS + -DAUTO_BED_LEVELING_UBL + -DGRID_MAX_POINTS_X=9 + -DUSER_STM32F103=1 + -DMOTHERBOARD=BOARD_CREALITY_V24S1_301 + -DMESH_INSET_X=27 + -DMESH_INSET_Y=45 +board_build.rename = firmware-{date}-{time}-E3S1Plus-ubl9x9-v004-F1.bin + [env:STM32F103RE_creality_e3s1plus_ubl10x10] extends = env:STM32F103RE_creality build_flags = ${STM32F103Rx_creality.build_flags} diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index f1be1f98874f..6ca1ad1906b6 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -773,6 +773,21 @@ build_flags = ${stm32_variant.build_flags} -DMCU_STM32F401RC -DS -DPROBING_MARGIN=45 board_build.rename = firmware-{date}-{time}-E3S1Pro-abl7x7-v004-F4.bin +[env:STM32F401RC_creality_e3s1pro_abl9x9] +extends = env:STM32F401RC_creality +build_flags = ${stm32_variant.build_flags} -DMCU_STM32F401RC -DSTM32F4 + -DSS_TIMER=4 -DTIMER_SERVO=TIM5 + -DENABLE_HWSERIAL3 -DTRANSFER_CLOCK_DIV=8 + -DLASER_FEATURE + -DENDER_MACHINE_OVERRIDE + -DENDER_3S1_PRO + -DAUTO_BED_LEVELING_BILINEAR + -DGRID_MAX_POINTS_X=9 + -DUSER_STM32F401=1 + -DMOTHERBOARD=BOARD_CREALITY_V24S1_301F4 + -DPROBING_MARGIN=45 +board_build.rename = firmware-{date}-{time}-E3S1Pro-abl9x9-v004-F4.bin + [env:STM32F401RC_creality_e3s1pro_abl10x10] extends = env:STM32F401RC_creality build_flags = ${stm32_variant.build_flags} -DMCU_STM32F401RC -DSTM32F4 @@ -837,6 +852,21 @@ build_flags = ${stm32_variant.build_flags} -DMCU_STM32F401RC -DS -DMESH_INSET_Y=45 board_build.rename = firmware-{date}-{time}-E3S1Pro-ubl7x7-v004-F4.bin +[env:STM32F401RC_creality_e3s1pro_ubl9x9] +extends = env:STM32F401RC_creality +build_flags = ${stm32_variant.build_flags} -DMCU_STM32F401RC -DSTM32F4 + -DSS_TIMER=4 -DTIMER_SERVO=TIM5 + -DENABLE_HWSERIAL3 -DTRANSFER_CLOCK_DIV=8 + -DENDER_MACHINE_OVERRIDE + -DENDER_3S1_PRO + -DAUTO_BED_LEVELING_UBL + -DGRID_MAX_POINTS_X=9 + -DUSER_STM32F401=1 + -DMOTHERBOARD=BOARD_CREALITY_V24S1_301F4 + -DMESH_INSET_X=27 + -DMESH_INSET_Y=45 +board_build.rename = firmware-{date}-{time}-E3S1Pro-ubl9x9-v004-F4.bin + [env:STM32F401RC_creality_e3s1pro_ubl10x10] extends = env:STM32F401RC_creality build_flags = ${stm32_variant.build_flags} -DMCU_STM32F401RC -DSTM32F4 @@ -883,6 +913,21 @@ build_flags = ${stm32_variant.build_flags} -DMCU_STM32F401RC -DS -DPROBING_MARGIN=45 board_build.rename = firmware-{date}-{time}-E3S1Plus-abl7x7-v004-F4.bin +[env:STM32F401RC_creality_e3s1plus_abl9x9] +extends = env:STM32F401RC_creality +build_flags = ${stm32_variant.build_flags} -DMCU_STM32F401RC -DSTM32F4 + -DSS_TIMER=4 -DTIMER_SERVO=TIM5 + -DENABLE_HWSERIAL3 -DTRANSFER_CLOCK_DIV=8 + -DLASER_FEATURE + -DENDER_MACHINE_OVERRIDE + -DENDER_3S1_PLUS + -DAUTO_BED_LEVELING_BILINEAR + -DGRID_MAX_POINTS_X=9 + -DUSER_STM32F401=1 + -DMOTHERBOARD=BOARD_CREALITY_V24S1_301F4 + -DPROBING_MARGIN=45 +board_build.rename = firmware-{date}-{time}-E3S1Plus-abl9x9-v004-F4.bin + [env:STM32F401RC_creality_e3s1plus_abl10x10] extends = env:STM32F401RC_creality build_flags = ${stm32_variant.build_flags} -DMCU_STM32F401RC -DSTM32F4 @@ -929,6 +974,21 @@ build_flags = ${stm32_variant.build_flags} -DMCU_STM32F401RC -DS -DMESH_INSET_Y=45 board_build.rename = firmware-{date}-{time}-E3S1Plus-ubl7x7-v004-F4.bin +[env:STM32F401RC_creality_e3s1plus_ubl9x9] +extends = env:STM32F401RC_creality +build_flags = ${stm32_variant.build_flags} -DMCU_STM32F401RC -DSTM32F4 + -DSS_TIMER=4 -DTIMER_SERVO=TIM5 + -DENABLE_HWSERIAL3 -DTRANSFER_CLOCK_DIV=8 + -DENDER_MACHINE_OVERRIDE + -DENDER_3S1_PLUS + -DAUTO_BED_LEVELING_UBL + -DGRID_MAX_POINTS_X=9 + -DUSER_STM32F401=1 + -DMOTHERBOARD=BOARD_CREALITY_V24S1_301F4 + -DMESH_INSET_X=27 + -DMESH_INSET_Y=45 +board_build.rename = firmware-{date}-{time}-E3S1Plus-ubl9x9-v004-F4.bin + [env:STM32F401RC_creality_e3s1plus_ubl10x10] extends = env:STM32F401RC_creality build_flags = ${stm32_variant.build_flags} -DMCU_STM32F401RC -DSTM32F4