Skip to content

Commit 50cc2be

Browse files
committed
Allow manually entering mesh leveling points #209
1 parent ec04e53 commit 50cc2be

File tree

4 files changed

+61
-0
lines changed

4 files changed

+61
-0
lines changed

Marlin/src/lcd/extui/lib/dgus_creality/DGUSScreenHandler.cpp

+29
Original file line numberDiff line numberDiff line change
@@ -948,6 +948,35 @@ void DGUSScreenHandler::UpdateMeshValue(const int8_t x, const int8_t y, const fl
948948
dgusdisplay.SetVariableDisplayColor(spAddr, color);
949949
}
950950

951+
void DGUSScreenHandler::HandleMeshPoint(DGUS_VP_Variable &var, void *val_ptr) {
952+
// Determine the X and Y for this mesh point
953+
// We can do this because we assume MESH_INPUT_SUPPORTED_X_SIZE and MESH_INPUT_SUPPORTED_Y_SIZE with MESH_INPUT_DATA_SIZE.
954+
// So each VP is MESH_INPUT_DATA_SIZE apart
955+
956+
if (HasSynchronousOperation) {
957+
setstatusmessagePGM(PSTR("Wait for leveling to complete"));
958+
return;
959+
}
960+
961+
const uint16_t probe_point = var.VP - VP_MESH_INPUT_X0_Y0;
962+
constexpr uint16_t col_size = MESH_INPUT_SUPPORTED_Y_SIZE * MESH_INPUT_DATA_SIZE;
963+
964+
const uint8_t x = probe_point / col_size; // Will be 0 to 3 inclusive
965+
const uint8_t y = (probe_point - (x * col_size)) / MESH_INPUT_DATA_SIZE;
966+
967+
float z = swap16(*(int16_t*)val_ptr) * 0.001;
968+
969+
SERIAL_ECHOPAIR("Overriding mesh value. X:", x);
970+
SERIAL_ECHOPAIR(" Y:", y);
971+
SERIAL_ECHOPAIR_F(" Z:", z);
972+
SERIAL_ECHOPAIR(" [point ", probe_point, "] ");
973+
SERIAL_ECHOPAIR(" [VP: ", var.VP);
974+
SERIAL_ECHOLN("]");
975+
976+
UpdateMeshValue(x, y, z);
977+
ExtUI::setMeshPoint({ x, y }, z);
978+
}
979+
951980
const uint16_t* DGUSLCD_FindScreenVPMapList(uint8_t screen) {
952981
const uint16_t *ret;
953982
const struct VPMapping *map = VPMap;

Marlin/src/lcd/extui/lib/dgus_creality/DGUSScreenHandler.h

+2
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ class DGUSScreenHandler {
129129
static void ResetMeshValues();
130130

131131
static void UpdateMeshValue(const int8_t x, const int8_t y, const float z);
132+
133+
static void HandleMeshPoint(DGUS_VP_Variable &var, void *val_ptr);
132134
#endif
133135

134136
// Hook for live z adjust action

Marlin/src/lcd/extui/lib/dgus_creality/creality_touch/DGUSDisplayDef.cpp

+23
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,29 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = {
665665
// Development test button
666666
VPHELPER(VP_DEVELOPMENT_HELPER_BUTTON, nullptr, ScreenHandler.HandleDevelopmentTestButton, nullptr),
667667

668+
// Mesh override input
669+
#if MESH_INPUT_SUPPORTED_SIZE == GRID_MAX_POINTS
670+
//#define _VPHELPER_GP(N) VPHELPER((VP_MESH_INPUT_X0_Y0 + ( ##N## * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
671+
//REPEAT(MESH_INPUT_SUPPORTED_SIZE, _VPHELPER_GP)
672+
673+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 0 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
674+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 1 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
675+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 2 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
676+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 3 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
677+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 4 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
678+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 5 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
679+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 6 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
680+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 7 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
681+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 8 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
682+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 9 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
683+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 10 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
684+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 11 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
685+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 12 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
686+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 13 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
687+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 14 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
688+
VPHELPER((VP_MESH_INPUT_X0_Y0 + ( 15 * MESH_INPUT_DATA_SIZE)), nullptr, ScreenHandler.HandleMeshPoint, nullptr),
689+
#endif
690+
668691
// M117 LCD String (We don't need the string in memory but "just" push it to the display on demand, hence the nullptr
669692
{ .VP = VP_M117, .memadr = nullptr, .size = VP_M117_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&ScreenHandler.DGUSLCD_SendStringToDisplay },
670693
{ .VP = VP_M117_STATIC, .memadr = nullptr, .size = VP_M117_STATIC_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&ScreenHandler.DGUSLCD_SendStringToDisplay },

Marlin/src/lcd/extui/lib/dgus_creality/creality_touch/DGUSDisplayDef.h

+7
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,13 @@ constexpr uint16_t MESH_LEVEL_SP_EDGE_SIZE = MESH_LEVEL_SP_SIZE * MESH_LEVEL_EDG
392392

393393
constexpr uint16_t MESH_LEVEL_MAX_POINTS = MESH_LEVEL_EDGE_MAX_POINTS * MESH_LEVEL_EDGE_MAX_POINTS;
394394

395+
// Mesh inputs
396+
constexpr uint16_t VP_MESH_INPUT_X0_Y0 = 0x2360;
397+
398+
#define MESH_INPUT_SUPPORTED_X_SIZE 4
399+
#define MESH_INPUT_SUPPORTED_Y_SIZE 4
400+
#define MESH_INPUT_SUPPORTED_SIZE 16
401+
#define MESH_INPUT_DATA_SIZE 2 // 2 byte integer
395402

396403
// Color table: https://stackoverflow.com/q/13720937/646215
397404
// Color picker: https://ee-programming-notepad.blogspot.com/2016/10/16-bit-color-generator-picker.html

0 commit comments

Comments
 (0)