diff --git a/CR-XABL_Screens_V2Rev2.7z b/CR-XABL_Screens_V2Rev2.7z new file mode 100644 index 0000000000..b54c2ab21f Binary files /dev/null and b/CR-XABL_Screens_V2Rev2.7z differ diff --git a/CR-X_Stock_ScreenRev1.7z b/CR-X_Stock_ScreenRev1.7z new file mode 100644 index 0000000000..fb5e9c6184 Binary files /dev/null and b/CR-X_Stock_ScreenRev1.7z differ diff --git a/Hex Files/10SProBLTUBLEncMC_DW7.hex.gz b/Hex Files/10SProBLTUBLEncMC_DW7.hex.gz new file mode 100644 index 0000000000..5f2a42d3cb Binary files /dev/null and b/Hex Files/10SProBLTUBLEncMC_DW7.hex.gz differ diff --git a/Hex Files/10SProV2_BIL_DW7.hex.gz b/Hex Files/10SProV2_BIL_DW7.hex.gz new file mode 100644 index 0000000000..8300c93ee4 Binary files /dev/null and b/Hex Files/10SProV2_BIL_DW7.hex.gz differ diff --git a/Hex Files/10SProV2_BIL_MC_DW7.hex.gz b/Hex Files/10SProV2_BIL_MC_DW7.hex.gz new file mode 100644 index 0000000000..15b813b3de Binary files /dev/null and b/Hex Files/10SProV2_BIL_MC_DW7.hex.gz differ diff --git a/Hex Files/10SProV2_BIL_ME_DW7.hex.gz b/Hex Files/10SProV2_BIL_ME_DW7.hex.gz new file mode 100644 index 0000000000..8ea1859671 Binary files /dev/null and b/Hex Files/10SProV2_BIL_ME_DW7.hex.gz differ diff --git a/Hex Files/10SProV2_UBL_DW7.hex.gz b/Hex Files/10SProV2_UBL_DW7.hex.gz new file mode 100644 index 0000000000..1202215101 Binary files /dev/null and b/Hex Files/10SProV2_UBL_DW7.hex.gz differ diff --git a/Hex Files/10SProV2_UBL_MC_DW7.hex.gz b/Hex Files/10SProV2_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..56e46c4003 Binary files /dev/null and b/Hex Files/10SProV2_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/10SProV2_UBL_ME_DW7.hex.gz b/Hex Files/10SProV2_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..37c703fd27 Binary files /dev/null and b/Hex Files/10SProV2_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/10SPro_BIL_DW7.hex.gz b/Hex Files/10SPro_BIL_DW7.hex.gz new file mode 100644 index 0000000000..4c3101b241 Binary files /dev/null and b/Hex Files/10SPro_BIL_DW7.hex.gz differ diff --git a/Hex Files/10SPro_BIL_MC_DW7.hex.gz b/Hex Files/10SPro_BIL_MC_DW7.hex.gz new file mode 100644 index 0000000000..986b21599a Binary files /dev/null and b/Hex Files/10SPro_BIL_MC_DW7.hex.gz differ diff --git a/Hex Files/10SPro_BIL_ME_DW7.hex.gz b/Hex Files/10SPro_BIL_ME_DW7.hex.gz new file mode 100644 index 0000000000..b48850bfe8 Binary files /dev/null and b/Hex Files/10SPro_BIL_ME_DW7.hex.gz differ diff --git a/Hex Files/10SPro_BLTUBLEncME_DW7.hex.gz b/Hex Files/10SPro_BLTUBLEncME_DW7.hex.gz new file mode 100644 index 0000000000..6b8b783d29 Binary files /dev/null and b/Hex Files/10SPro_BLTUBLEncME_DW7.hex.gz differ diff --git a/Hex Files/10SPro_BLT_BIL_DW7.hex.gz b/Hex Files/10SPro_BLT_BIL_DW7.hex.gz new file mode 100644 index 0000000000..3501dc44d2 Binary files /dev/null and b/Hex Files/10SPro_BLT_BIL_DW7.hex.gz differ diff --git a/Hex Files/10SPro_BLT_BIL_MC_DW7.hex.gz b/Hex Files/10SPro_BLT_BIL_MC_DW7.hex.gz new file mode 100644 index 0000000000..e557f10d00 Binary files /dev/null and b/Hex Files/10SPro_BLT_BIL_MC_DW7.hex.gz differ diff --git a/Hex Files/10SPro_BLT_BIL_ME_DW7.hex.gz b/Hex Files/10SPro_BLT_BIL_ME_DW7.hex.gz new file mode 100644 index 0000000000..11405cd1a1 Binary files /dev/null and b/Hex Files/10SPro_BLT_BIL_ME_DW7.hex.gz differ diff --git a/Hex Files/10SPro_BLT_UBL_DW7.hex.gz b/Hex Files/10SPro_BLT_UBL_DW7.hex.gz new file mode 100644 index 0000000000..1ac15ef0e4 Binary files /dev/null and b/Hex Files/10SPro_BLT_UBL_DW7.hex.gz differ diff --git a/Hex Files/10SPro_BLT_UBL_Enc_DW7.hex.gz b/Hex Files/10SPro_BLT_UBL_Enc_DW7.hex.gz new file mode 100644 index 0000000000..ce6f2520d9 Binary files /dev/null and b/Hex Files/10SPro_BLT_UBL_Enc_DW7.hex.gz differ diff --git a/Hex Files/10SPro_BLT_UBL_MC_DW7.hex.gz b/Hex Files/10SPro_BLT_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..05fc124a00 Binary files /dev/null and b/Hex Files/10SPro_BLT_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/10SPro_BLT_UBL_ME_DW7.hex.gz b/Hex Files/10SPro_BLT_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..927f91aafa Binary files /dev/null and b/Hex Files/10SPro_BLT_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/10SPro_UBL_DW7.hex.gz b/Hex Files/10SPro_UBL_DW7.hex.gz new file mode 100644 index 0000000000..e67f65d2c1 Binary files /dev/null and b/Hex Files/10SPro_UBL_DW7.hex.gz differ diff --git a/Hex Files/10SPro_UBL_MC_DW7.hex.gz b/Hex Files/10SPro_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..7656042737 Binary files /dev/null and b/Hex Files/10SPro_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/10SPro_UBL_ME_DW7.hex.gz b/Hex Files/10SPro_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..9058ab2ded Binary files /dev/null and b/Hex Files/10SPro_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10Max_BIL_DW7.hex.gz b/Hex Files/CR10Max_BIL_DW7.hex.gz new file mode 100644 index 0000000000..f67b5b2a12 Binary files /dev/null and b/Hex Files/CR10Max_BIL_DW7.hex.gz differ diff --git a/Hex Files/CR10Max_BIL_MC_DW7.hex.gz b/Hex Files/CR10Max_BIL_MC_DW7.hex.gz new file mode 100644 index 0000000000..b4b70bdd1c Binary files /dev/null and b/Hex Files/CR10Max_BIL_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10Max_BIL_ME_DW7.hex.gz b/Hex Files/CR10Max_BIL_ME_DW7.hex.gz new file mode 100644 index 0000000000..93c44ae02a Binary files /dev/null and b/Hex Files/CR10Max_BIL_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10Max_UBL_DW7.hex.gz b/Hex Files/CR10Max_UBL_DW7.hex.gz new file mode 100644 index 0000000000..7e53047462 Binary files /dev/null and b/Hex Files/CR10Max_UBL_DW7.hex.gz differ diff --git a/Hex Files/CR10Max_UBL_MC_DW7.hex.gz b/Hex Files/CR10Max_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..a9fe9d670c Binary files /dev/null and b/Hex Files/CR10Max_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10Max_UBL_ME_DW7.hex.gz b/Hex Files/CR10Max_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..75c782fc3c Binary files /dev/null and b/Hex Files/CR10Max_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10MiniBLTHostMC_DW7.hex.gz b/Hex Files/CR10MiniBLTHostMC_DW7.hex.gz new file mode 100644 index 0000000000..aa7540e8b3 Binary files /dev/null and b/Hex Files/CR10MiniBLTHostMC_DW7.hex.gz differ diff --git a/Hex Files/CR10MiniBLTHostME_DW7.hex.gz b/Hex Files/CR10MiniBLTHostME_DW7.hex.gz new file mode 100644 index 0000000000..646fcff6f1 Binary files /dev/null and b/Hex Files/CR10MiniBLTHostME_DW7.hex.gz differ diff --git a/Hex Files/CR10Mini_BLT_Host_DW7.hex.gz b/Hex Files/CR10Mini_BLT_Host_DW7.hex.gz new file mode 100644 index 0000000000..05b4efdfc4 Binary files /dev/null and b/Hex Files/CR10Mini_BLT_Host_DW7.hex.gz differ diff --git a/Hex Files/CR10Mini_BLT_SD_DW7.hex.gz b/Hex Files/CR10Mini_BLT_SD_DW7.hex.gz new file mode 100644 index 0000000000..27559e197a Binary files /dev/null and b/Hex Files/CR10Mini_BLT_SD_DW7.hex.gz differ diff --git a/Hex Files/CR10Mini_BLT_SD_MC_DW7.hex.gz b/Hex Files/CR10Mini_BLT_SD_MC_DW7.hex.gz new file mode 100644 index 0000000000..4b1a318550 Binary files /dev/null and b/Hex Files/CR10Mini_BLT_SD_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10Mini_BLT_SD_ME_DW7.hex.gz b/Hex Files/CR10Mini_BLT_SD_ME_DW7.hex.gz new file mode 100644 index 0000000000..b49ebec7a1 Binary files /dev/null and b/Hex Files/CR10Mini_BLT_SD_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10Mini_DW7.hex.gz b/Hex Files/CR10Mini_DW7.hex.gz new file mode 100644 index 0000000000..b655281587 Binary files /dev/null and b/Hex Files/CR10Mini_DW7.hex.gz differ diff --git a/Hex Files/CR10Mini_MC_DW7.hex.gz b/Hex Files/CR10Mini_MC_DW7.hex.gz new file mode 100644 index 0000000000..04bf000284 Binary files /dev/null and b/Hex Files/CR10Mini_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10Mini_ME_DW7.hex.gz b/Hex Files/CR10Mini_ME_DW7.hex.gz new file mode 100644 index 0000000000..dccca0056f Binary files /dev/null and b/Hex Files/CR10Mini_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_DW7.hex.gz b/Hex Files/CR10S_BLT_DW7.hex.gz new file mode 100644 index 0000000000..f3c9ca90fc Binary files /dev/null and b/Hex Files/CR10S_BLT_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_LR_DW7.hex.gz b/Hex Files/CR10S_BLT_LR_DW7.hex.gz new file mode 100644 index 0000000000..5ef66a6bb7 Binary files /dev/null and b/Hex Files/CR10S_BLT_LR_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_MC_DW7.hex.gz b/Hex Files/CR10S_BLT_MC_DW7.hex.gz new file mode 100644 index 0000000000..eaadaca97c Binary files /dev/null and b/Hex Files/CR10S_BLT_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_MC_NF_DW7.hex.gz b/Hex Files/CR10S_BLT_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..b983e5d62b Binary files /dev/null and b/Hex Files/CR10S_BLT_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_ME_DW7.hex.gz b/Hex Files/CR10S_BLT_ME_DW7.hex.gz new file mode 100644 index 0000000000..e2ed94554b Binary files /dev/null and b/Hex Files/CR10S_BLT_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_ME_NF_DW7.hex.gz b/Hex Files/CR10S_BLT_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..b9de5c7200 Binary files /dev/null and b/Hex Files/CR10S_BLT_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_NF_DW7.hex.gz b/Hex Files/CR10S_BLT_NF_DW7.hex.gz new file mode 100644 index 0000000000..055187b598 Binary files /dev/null and b/Hex Files/CR10S_BLT_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_NF_LR_DW7.hex.gz b/Hex Files/CR10S_BLT_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..f1849ed7b2 Binary files /dev/null and b/Hex Files/CR10S_BLT_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_UBL_DW7.hex.gz b/Hex Files/CR10S_BLT_UBL_DW7.hex.gz new file mode 100644 index 0000000000..72aa48280e Binary files /dev/null and b/Hex Files/CR10S_BLT_UBL_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_UBL_MC_DW7.hex.gz b/Hex Files/CR10S_BLT_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..cd27fbfdfa Binary files /dev/null and b/Hex Files/CR10S_BLT_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_UBL_MC_NF_DW7.hex.gz b/Hex Files/CR10S_BLT_UBL_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..50324e9d19 Binary files /dev/null and b/Hex Files/CR10S_BLT_UBL_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_UBL_ME_DW7.hex.gz b/Hex Files/CR10S_BLT_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..ab4d2c1295 Binary files /dev/null and b/Hex Files/CR10S_BLT_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_UBL_ME_NF_DW7.hex.gz b/Hex Files/CR10S_BLT_UBL_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..42d820ceba Binary files /dev/null and b/Hex Files/CR10S_BLT_UBL_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_UBL_NF_DW7.hex.gz b/Hex Files/CR10S_BLT_UBL_NF_DW7.hex.gz new file mode 100644 index 0000000000..9cfbcb9370 Binary files /dev/null and b/Hex Files/CR10S_BLT_UBL_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10S_BLT_UBL_NF_LR_DW7.hex.gz b/Hex Files/CR10S_BLT_UBL_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..4dcc758bfc Binary files /dev/null and b/Hex Files/CR10S_BLT_UBL_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/CR10S_DW7.hex.gz b/Hex Files/CR10S_DW7.hex.gz new file mode 100644 index 0000000000..d3131af1da Binary files /dev/null and b/Hex Files/CR10S_DW7.hex.gz differ diff --git a/Hex Files/CR10S_LR_DW7.hex.gz b/Hex Files/CR10S_LR_DW7.hex.gz new file mode 100644 index 0000000000..8ab423b339 Binary files /dev/null and b/Hex Files/CR10S_LR_DW7.hex.gz differ diff --git a/Hex Files/CR10S_MC_DW7.hex.gz b/Hex Files/CR10S_MC_DW7.hex.gz new file mode 100644 index 0000000000..9d294a7a5f Binary files /dev/null and b/Hex Files/CR10S_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10S_MC_NF_DW7.hex.gz b/Hex Files/CR10S_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..5dd004c1a2 Binary files /dev/null and b/Hex Files/CR10S_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10S_ME_DW7.hex.gz b/Hex Files/CR10S_ME_DW7.hex.gz new file mode 100644 index 0000000000..6710d158be Binary files /dev/null and b/Hex Files/CR10S_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10S_ME_NF_DW7.hex.gz b/Hex Files/CR10S_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..940ba7635e Binary files /dev/null and b/Hex Files/CR10S_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10S_NF_DW7.hex.gz b/Hex Files/CR10S_NF_DW7.hex.gz new file mode 100644 index 0000000000..25735c3e4a Binary files /dev/null and b/Hex Files/CR10S_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10S_NF_LR_DW7.hex.gz b/Hex Files/CR10S_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..db948990c0 Binary files /dev/null and b/Hex Files/CR10S_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_BLT_DW7.hex.gz b/Hex Files/CR10V2_BLT_DW7.hex.gz new file mode 100644 index 0000000000..b0a714ce49 Binary files /dev/null and b/Hex Files/CR10V2_BLT_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_BLT_MC_DW7.hex.gz b/Hex Files/CR10V2_BLT_MC_DW7.hex.gz new file mode 100644 index 0000000000..7858289b76 Binary files /dev/null and b/Hex Files/CR10V2_BLT_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_BLT_MC_NF_DW7.hex.gz b/Hex Files/CR10V2_BLT_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..6746c5057c Binary files /dev/null and b/Hex Files/CR10V2_BLT_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_BLT_ME_DW7.hex.gz b/Hex Files/CR10V2_BLT_ME_DW7.hex.gz new file mode 100644 index 0000000000..eb4b26af6e Binary files /dev/null and b/Hex Files/CR10V2_BLT_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_BLT_ME_NF_DW7.hex.gz b/Hex Files/CR10V2_BLT_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..679d0fb8fe Binary files /dev/null and b/Hex Files/CR10V2_BLT_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_BLT_NF_DW7.hex.gz b/Hex Files/CR10V2_BLT_NF_DW7.hex.gz new file mode 100644 index 0000000000..4a4313ec3c Binary files /dev/null and b/Hex Files/CR10V2_BLT_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_BLT_UBL_DW7.hex.gz b/Hex Files/CR10V2_BLT_UBL_DW7.hex.gz new file mode 100644 index 0000000000..ba999818ba Binary files /dev/null and b/Hex Files/CR10V2_BLT_UBL_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_BLT_UBL_MC_DW7.hex.gz b/Hex Files/CR10V2_BLT_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..0e5ca8bc30 Binary files /dev/null and b/Hex Files/CR10V2_BLT_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_BLT_UBL_MC_NF_DW7.hex.gz b/Hex Files/CR10V2_BLT_UBL_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..0e14c1b15b Binary files /dev/null and b/Hex Files/CR10V2_BLT_UBL_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_BLT_UBL_ME_DW7.hex.gz b/Hex Files/CR10V2_BLT_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..56037a95b2 Binary files /dev/null and b/Hex Files/CR10V2_BLT_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_BLT_UBL_ME_NF_DW7.hex.gz b/Hex Files/CR10V2_BLT_UBL_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..dc383144af Binary files /dev/null and b/Hex Files/CR10V2_BLT_UBL_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_BLT_UBL_NF_DW7.hex.gz b/Hex Files/CR10V2_BLT_UBL_NF_DW7.hex.gz new file mode 100644 index 0000000000..c898af1c57 Binary files /dev/null and b/Hex Files/CR10V2_BLT_UBL_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_DW7.hex.gz b/Hex Files/CR10V2_DW7.hex.gz new file mode 100644 index 0000000000..f789c07966 Binary files /dev/null and b/Hex Files/CR10V2_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_MC_DW7.hex.gz b/Hex Files/CR10V2_MC_DW7.hex.gz new file mode 100644 index 0000000000..0872c2e89a Binary files /dev/null and b/Hex Files/CR10V2_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_MC_NF_DW7.hex.gz b/Hex Files/CR10V2_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..3980314c52 Binary files /dev/null and b/Hex Files/CR10V2_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_ME_DW7.hex.gz b/Hex Files/CR10V2_ME_DW7.hex.gz new file mode 100644 index 0000000000..05f1710d95 Binary files /dev/null and b/Hex Files/CR10V2_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_ME_NF_DW7.hex.gz b/Hex Files/CR10V2_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..e6e346064c Binary files /dev/null and b/Hex Files/CR10V2_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_NF_DW7.hex.gz b/Hex Files/CR10V2_NF_DW7.hex.gz new file mode 100644 index 0000000000..40bf960fa7 Binary files /dev/null and b/Hex Files/CR10V2_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_UBL_DW7.hex.gz b/Hex Files/CR10V2_UBL_DW7.hex.gz new file mode 100644 index 0000000000..4da536b425 Binary files /dev/null and b/Hex Files/CR10V2_UBL_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_UBL_MC_DW7.hex.gz b/Hex Files/CR10V2_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..a555da2f74 Binary files /dev/null and b/Hex Files/CR10V2_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_UBL_MC_NF_DW7.hex.gz b/Hex Files/CR10V2_UBL_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..11cf7e3d17 Binary files /dev/null and b/Hex Files/CR10V2_UBL_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_UBL_ME_DW7.hex.gz b/Hex Files/CR10V2_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..019e8664cb Binary files /dev/null and b/Hex Files/CR10V2_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_UBL_ME_NF_DW7.hex.gz b/Hex Files/CR10V2_UBL_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..f83b8f38e0 Binary files /dev/null and b/Hex Files/CR10V2_UBL_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10V2_UBL_NF_DW7.hex.gz b/Hex Files/CR10V2_UBL_NF_DW7.hex.gz new file mode 100644 index 0000000000..303109cde4 Binary files /dev/null and b/Hex Files/CR10V2_UBL_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10_BLT_Host_DW7.hex.gz b/Hex Files/CR10_BLT_Host_DW7.hex.gz new file mode 100644 index 0000000000..de9d78bf4b Binary files /dev/null and b/Hex Files/CR10_BLT_Host_DW7.hex.gz differ diff --git a/Hex Files/CR10_BLT_Host_MC_DW7.hex.gz b/Hex Files/CR10_BLT_Host_MC_DW7.hex.gz new file mode 100644 index 0000000000..77b2822031 Binary files /dev/null and b/Hex Files/CR10_BLT_Host_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10_BLT_Host_MC_NF_DW7.hex.gz b/Hex Files/CR10_BLT_Host_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..0eec372f99 Binary files /dev/null and b/Hex Files/CR10_BLT_Host_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10_BLT_Host_ME_DW7.hex.gz b/Hex Files/CR10_BLT_Host_ME_DW7.hex.gz new file mode 100644 index 0000000000..6f9217bde8 Binary files /dev/null and b/Hex Files/CR10_BLT_Host_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10_BLT_SD_DW7.hex.gz b/Hex Files/CR10_BLT_SD_DW7.hex.gz new file mode 100644 index 0000000000..1f54207f06 Binary files /dev/null and b/Hex Files/CR10_BLT_SD_DW7.hex.gz differ diff --git a/Hex Files/CR10_BLT_SD_MC_DW7.hex.gz b/Hex Files/CR10_BLT_SD_MC_DW7.hex.gz new file mode 100644 index 0000000000..c649d6429c Binary files /dev/null and b/Hex Files/CR10_BLT_SD_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10_BLT_SD_MC_NF_DW7.hex.gz b/Hex Files/CR10_BLT_SD_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..dc5f837e1d Binary files /dev/null and b/Hex Files/CR10_BLT_SD_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10_BLT_SD_ME_DW7.hex.gz b/Hex Files/CR10_BLT_SD_ME_DW7.hex.gz new file mode 100644 index 0000000000..37252c8c04 Binary files /dev/null and b/Hex Files/CR10_BLT_SD_ME_DW7.hex.gz differ diff --git a/Hex Files/CR10_DW7.hex.gz b/Hex Files/CR10_DW7.hex.gz new file mode 100644 index 0000000000..d517370954 Binary files /dev/null and b/Hex Files/CR10_DW7.hex.gz differ diff --git a/Hex Files/CR10_MC_DW7.hex.gz b/Hex Files/CR10_MC_DW7.hex.gz new file mode 100644 index 0000000000..e68eb40412 Binary files /dev/null and b/Hex Files/CR10_MC_DW7.hex.gz differ diff --git a/Hex Files/CR10_MC_NF_DW7.hex.gz b/Hex Files/CR10_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..b741a43533 Binary files /dev/null and b/Hex Files/CR10_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/CR10_ME_DW7.hex.gz b/Hex Files/CR10_ME_DW7.hex.gz new file mode 100644 index 0000000000..1836c6b6c6 Binary files /dev/null and b/Hex Files/CR10_ME_DW7.hex.gz differ diff --git a/Hex Files/CR2020_DW7.hex.gz b/Hex Files/CR2020_DW7.hex.gz new file mode 100644 index 0000000000..9470e8f40b Binary files /dev/null and b/Hex Files/CR2020_DW7.hex.gz differ diff --git a/Hex Files/CR20_BLT_DW7.hex.gz b/Hex Files/CR20_BLT_DW7.hex.gz new file mode 100644 index 0000000000..edf24f04e6 Binary files /dev/null and b/Hex Files/CR20_BLT_DW7.hex.gz differ diff --git a/Hex Files/CR20_BLT_LR_DW7.hex.gz b/Hex Files/CR20_BLT_LR_DW7.hex.gz new file mode 100644 index 0000000000..13d9bd2493 Binary files /dev/null and b/Hex Files/CR20_BLT_LR_DW7.hex.gz differ diff --git a/Hex Files/CR20_BLT_MC_DW7.hex.gz b/Hex Files/CR20_BLT_MC_DW7.hex.gz new file mode 100644 index 0000000000..5beefa0c3d Binary files /dev/null and b/Hex Files/CR20_BLT_MC_DW7.hex.gz differ diff --git a/Hex Files/CR20_BLT_ME_DW7.hex.gz b/Hex Files/CR20_BLT_ME_DW7.hex.gz new file mode 100644 index 0000000000..67eb80bc2f Binary files /dev/null and b/Hex Files/CR20_BLT_ME_DW7.hex.gz differ diff --git a/Hex Files/CR20_BLT_UBL_DW7.hex.gz b/Hex Files/CR20_BLT_UBL_DW7.hex.gz new file mode 100644 index 0000000000..bf21d1ca5e Binary files /dev/null and b/Hex Files/CR20_BLT_UBL_DW7.hex.gz differ diff --git a/Hex Files/CR20_BLT_UBL_LR_DW7.hex.gz b/Hex Files/CR20_BLT_UBL_LR_DW7.hex.gz new file mode 100644 index 0000000000..842897f9c0 Binary files /dev/null and b/Hex Files/CR20_BLT_UBL_LR_DW7.hex.gz differ diff --git a/Hex Files/CR20_BLT_UBL_MC_DW7.hex.gz b/Hex Files/CR20_BLT_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..0b636bf9ca Binary files /dev/null and b/Hex Files/CR20_BLT_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/CR20_BLT_UBL_ME_DW7.hex.gz b/Hex Files/CR20_BLT_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..e85cf396ae Binary files /dev/null and b/Hex Files/CR20_BLT_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/CR20_DW7.hex.gz b/Hex Files/CR20_DW7.hex.gz new file mode 100644 index 0000000000..ce33085926 Binary files /dev/null and b/Hex Files/CR20_DW7.hex.gz differ diff --git a/Hex Files/CR20_LR_DW7.hex.gz b/Hex Files/CR20_LR_DW7.hex.gz new file mode 100644 index 0000000000..0302c39a11 Binary files /dev/null and b/Hex Files/CR20_LR_DW7.hex.gz differ diff --git a/Hex Files/CR20_MC_DW7.hex.gz b/Hex Files/CR20_MC_DW7.hex.gz new file mode 100644 index 0000000000..a44f35b863 Binary files /dev/null and b/Hex Files/CR20_MC_DW7.hex.gz differ diff --git a/Hex Files/CR20_ME_DW7.hex.gz b/Hex Files/CR20_ME_DW7.hex.gz new file mode 100644 index 0000000000..4e8c47fb20 Binary files /dev/null and b/Hex Files/CR20_ME_DW7.hex.gz differ diff --git a/Hex Files/CR20_Pro_DW7.hex.gz b/Hex Files/CR20_Pro_DW7.hex.gz new file mode 100644 index 0000000000..4914e743f7 Binary files /dev/null and b/Hex Files/CR20_Pro_DW7.hex.gz differ diff --git a/Hex Files/CR20_Pro_LR_DW7.hex.gz b/Hex Files/CR20_Pro_LR_DW7.hex.gz new file mode 100644 index 0000000000..a0bc0f3edb Binary files /dev/null and b/Hex Files/CR20_Pro_LR_DW7.hex.gz differ diff --git a/Hex Files/CR20_Pro_MC_DW7.hex.gz b/Hex Files/CR20_Pro_MC_DW7.hex.gz new file mode 100644 index 0000000000..79f7b78f54 Binary files /dev/null and b/Hex Files/CR20_Pro_MC_DW7.hex.gz differ diff --git a/Hex Files/CR20_Pro_ME_DW7.hex.gz b/Hex Files/CR20_Pro_ME_DW7.hex.gz new file mode 100644 index 0000000000..fd65c95ded Binary files /dev/null and b/Hex Files/CR20_Pro_ME_DW7.hex.gz differ diff --git a/Hex Files/CR20_Pro_UBL_DW7.hex.gz b/Hex Files/CR20_Pro_UBL_DW7.hex.gz new file mode 100644 index 0000000000..16211eadb1 Binary files /dev/null and b/Hex Files/CR20_Pro_UBL_DW7.hex.gz differ diff --git a/Hex Files/CR20_Pro_UBL_LR_DW7.hex.gz b/Hex Files/CR20_Pro_UBL_LR_DW7.hex.gz new file mode 100644 index 0000000000..1cc1b7e061 Binary files /dev/null and b/Hex Files/CR20_Pro_UBL_LR_DW7.hex.gz differ diff --git a/Hex Files/CR20_Pro_UBL_MC_DW7.hex.gz b/Hex Files/CR20_Pro_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..9a6f7e234b Binary files /dev/null and b/Hex Files/CR20_Pro_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/CR20_Pro_UBL_ME_DW7.hex.gz b/Hex Files/CR20_Pro_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..c645d96e13 Binary files /dev/null and b/Hex Files/CR20_Pro_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/CRX_BLTBILNoFilME_DW7.hex.gz b/Hex Files/CRX_BLTBILNoFilME_DW7.hex.gz new file mode 100644 index 0000000000..a6b442635b Binary files /dev/null and b/Hex Files/CRX_BLTBILNoFilME_DW7.hex.gz differ diff --git a/Hex Files/CRX_BLTUBLNoFilME_DW7.hex.gz b/Hex Files/CRX_BLTUBLNoFilME_DW7.hex.gz new file mode 100644 index 0000000000..e633a6ce56 Binary files /dev/null and b/Hex Files/CRX_BLTUBLNoFilME_DW7.hex.gz differ diff --git a/Hex Files/CRX_BLT_BILNoFilMC_DW7.hex.gz b/Hex Files/CRX_BLT_BILNoFilMC_DW7.hex.gz new file mode 100644 index 0000000000..0d16bfc917 Binary files /dev/null and b/Hex Files/CRX_BLT_BILNoFilMC_DW7.hex.gz differ diff --git a/Hex Files/CRX_BLT_BIL_Fil_DW7.hex.gz b/Hex Files/CRX_BLT_BIL_Fil_DW7.hex.gz new file mode 100644 index 0000000000..c00779ee8a Binary files /dev/null and b/Hex Files/CRX_BLT_BIL_Fil_DW7.hex.gz differ diff --git a/Hex Files/CRX_BLT_BIL_Fil_MC_DW7.hex.gz b/Hex Files/CRX_BLT_BIL_Fil_MC_DW7.hex.gz new file mode 100644 index 0000000000..9a8264c321 Binary files /dev/null and b/Hex Files/CRX_BLT_BIL_Fil_MC_DW7.hex.gz differ diff --git a/Hex Files/CRX_BLT_BIL_Fil_ME_DW7.hex.gz b/Hex Files/CRX_BLT_BIL_Fil_ME_DW7.hex.gz new file mode 100644 index 0000000000..61a0565ada Binary files /dev/null and b/Hex Files/CRX_BLT_BIL_Fil_ME_DW7.hex.gz differ diff --git a/Hex Files/CRX_BLT_BIL_NoFil_DW7.hex.gz b/Hex Files/CRX_BLT_BIL_NoFil_DW7.hex.gz new file mode 100644 index 0000000000..eef16763af Binary files /dev/null and b/Hex Files/CRX_BLT_BIL_NoFil_DW7.hex.gz differ diff --git a/Hex Files/CRX_BLT_UBLNoFilMC_DW7.hex.gz b/Hex Files/CRX_BLT_UBLNoFilMC_DW7.hex.gz new file mode 100644 index 0000000000..8667a58507 Binary files /dev/null and b/Hex Files/CRX_BLT_UBLNoFilMC_DW7.hex.gz differ diff --git a/Hex Files/CRX_BLT_UBL_Fil_DW7.hex.gz b/Hex Files/CRX_BLT_UBL_Fil_DW7.hex.gz new file mode 100644 index 0000000000..f1cefd6d4f Binary files /dev/null and b/Hex Files/CRX_BLT_UBL_Fil_DW7.hex.gz differ diff --git a/Hex Files/CRX_BLT_UBL_Fil_MC_DW7.hex.gz b/Hex Files/CRX_BLT_UBL_Fil_MC_DW7.hex.gz new file mode 100644 index 0000000000..4555539f30 Binary files /dev/null and b/Hex Files/CRX_BLT_UBL_Fil_MC_DW7.hex.gz differ diff --git a/Hex Files/CRX_BLT_UBL_Fil_ME_DW7.hex.gz b/Hex Files/CRX_BLT_UBL_Fil_ME_DW7.hex.gz new file mode 100644 index 0000000000..d61618cdfa Binary files /dev/null and b/Hex Files/CRX_BLT_UBL_Fil_ME_DW7.hex.gz differ diff --git a/Hex Files/CRX_BLT_UBL_NoFil_DW7.hex.gz b/Hex Files/CRX_BLT_UBL_NoFil_DW7.hex.gz new file mode 100644 index 0000000000..a23e254d66 Binary files /dev/null and b/Hex Files/CRX_BLT_UBL_NoFil_DW7.hex.gz differ diff --git a/Hex Files/CRX_Fil_DW7.hex.gz b/Hex Files/CRX_Fil_DW7.hex.gz new file mode 100644 index 0000000000..a89bfd3871 Binary files /dev/null and b/Hex Files/CRX_Fil_DW7.hex.gz differ diff --git a/Hex Files/CRX_Fil_MC_DW7.hex.gz b/Hex Files/CRX_Fil_MC_DW7.hex.gz new file mode 100644 index 0000000000..c5bd254da7 Binary files /dev/null and b/Hex Files/CRX_Fil_MC_DW7.hex.gz differ diff --git a/Hex Files/CRX_Fil_ME_DW7.hex.gz b/Hex Files/CRX_Fil_ME_DW7.hex.gz new file mode 100644 index 0000000000..13c8e1018e Binary files /dev/null and b/Hex Files/CRX_Fil_ME_DW7.hex.gz differ diff --git a/Hex Files/CRX_NoFil_DW7.hex.gz b/Hex Files/CRX_NoFil_DW7.hex.gz new file mode 100644 index 0000000000..76d9942216 Binary files /dev/null and b/Hex Files/CRX_NoFil_DW7.hex.gz differ diff --git a/Hex Files/CRX_NoFil_MC_DW7.hex.gz b/Hex Files/CRX_NoFil_MC_DW7.hex.gz new file mode 100644 index 0000000000..ee728dd9e4 Binary files /dev/null and b/Hex Files/CRX_NoFil_MC_DW7.hex.gz differ diff --git a/Hex Files/CRX_NoFil_ME_DW7.hex.gz b/Hex Files/CRX_NoFil_ME_DW7.hex.gz new file mode 100644 index 0000000000..fffd6ab178 Binary files /dev/null and b/Hex Files/CRX_NoFil_ME_DW7.hex.gz differ diff --git a/Hex Files/E5PBILSlntDZH_DW7.hex.gz b/Hex Files/E5PBILSlntDZH_DW7.hex.gz new file mode 100644 index 0000000000..921943bc02 Binary files /dev/null and b/Hex Files/E5PBILSlntDZH_DW7.hex.gz differ diff --git a/Hex Files/E5PBILSlntDZ_DW7.hex.gz b/Hex Files/E5PBILSlntDZ_DW7.hex.gz new file mode 100644 index 0000000000..edf5ef949c Binary files /dev/null and b/Hex Files/E5PBILSlntDZ_DW7.hex.gz differ diff --git a/Hex Files/E5PBILSlntDZ_MC_DW7.hex.gz b/Hex Files/E5PBILSlntDZ_MC_DW7.hex.gz new file mode 100644 index 0000000000..525f229b43 Binary files /dev/null and b/Hex Files/E5PBILSlntDZ_MC_DW7.hex.gz differ diff --git a/Hex Files/E5PBILSlntDZ_ME_DW7.hex.gz b/Hex Files/E5PBILSlntDZ_ME_DW7.hex.gz new file mode 100644 index 0000000000..a4db5d933e Binary files /dev/null and b/Hex Files/E5PBILSlntDZ_ME_DW7.hex.gz differ diff --git a/Hex Files/E5PUBLSlntDZH_DW7.hex.gz b/Hex Files/E5PUBLSlntDZH_DW7.hex.gz new file mode 100644 index 0000000000..f4fe74260a Binary files /dev/null and b/Hex Files/E5PUBLSlntDZH_DW7.hex.gz differ diff --git a/Hex Files/E5PUBLSlntDZ_DW7.hex.gz b/Hex Files/E5PUBLSlntDZ_DW7.hex.gz new file mode 100644 index 0000000000..8951351478 Binary files /dev/null and b/Hex Files/E5PUBLSlntDZ_DW7.hex.gz differ diff --git a/Hex Files/E5PUBLSlntDZ_MC_DW7.hex.gz b/Hex Files/E5PUBLSlntDZ_MC_DW7.hex.gz new file mode 100644 index 0000000000..39779dc078 Binary files /dev/null and b/Hex Files/E5PUBLSlntDZ_MC_DW7.hex.gz differ diff --git a/Hex Files/E5PUBLSlntDZ_ME_DW7.hex.gz b/Hex Files/E5PUBLSlntDZ_ME_DW7.hex.gz new file mode 100644 index 0000000000..07c6166a2a Binary files /dev/null and b/Hex Files/E5PUBLSlntDZ_ME_DW7.hex.gz differ diff --git a/Hex Files/E5P_BILH_DW7.hex.gz b/Hex Files/E5P_BILH_DW7.hex.gz new file mode 100644 index 0000000000..84291e1380 Binary files /dev/null and b/Hex Files/E5P_BILH_DW7.hex.gz differ diff --git a/Hex Files/E5P_BIL_DW7.hex.gz b/Hex Files/E5P_BIL_DW7.hex.gz new file mode 100644 index 0000000000..97b392abdb Binary files /dev/null and b/Hex Files/E5P_BIL_DW7.hex.gz differ diff --git a/Hex Files/E5P_BIL_DZH_DW7.hex.gz b/Hex Files/E5P_BIL_DZH_DW7.hex.gz new file mode 100644 index 0000000000..a73adf06bf Binary files /dev/null and b/Hex Files/E5P_BIL_DZH_DW7.hex.gz differ diff --git a/Hex Files/E5P_BIL_DZ_DW7.hex.gz b/Hex Files/E5P_BIL_DZ_DW7.hex.gz new file mode 100644 index 0000000000..3b689135be Binary files /dev/null and b/Hex Files/E5P_BIL_DZ_DW7.hex.gz differ diff --git a/Hex Files/E5P_BIL_DZ_MC_DW7.hex.gz b/Hex Files/E5P_BIL_DZ_MC_DW7.hex.gz new file mode 100644 index 0000000000..e2dc35d0dc Binary files /dev/null and b/Hex Files/E5P_BIL_DZ_MC_DW7.hex.gz differ diff --git a/Hex Files/E5P_BIL_DZ_ME_DW7.hex.gz b/Hex Files/E5P_BIL_DZ_ME_DW7.hex.gz new file mode 100644 index 0000000000..e669b5a27b Binary files /dev/null and b/Hex Files/E5P_BIL_DZ_ME_DW7.hex.gz differ diff --git a/Hex Files/E5P_BIL_MC_DW7.hex.gz b/Hex Files/E5P_BIL_MC_DW7.hex.gz new file mode 100644 index 0000000000..ac8547d744 Binary files /dev/null and b/Hex Files/E5P_BIL_MC_DW7.hex.gz differ diff --git a/Hex Files/E5P_BIL_ME_DW7.hex.gz b/Hex Files/E5P_BIL_ME_DW7.hex.gz new file mode 100644 index 0000000000..af7f168b1e Binary files /dev/null and b/Hex Files/E5P_BIL_ME_DW7.hex.gz differ diff --git a/Hex Files/E5P_BIL_SlntH_DW7.hex.gz b/Hex Files/E5P_BIL_SlntH_DW7.hex.gz new file mode 100644 index 0000000000..800daec217 Binary files /dev/null and b/Hex Files/E5P_BIL_SlntH_DW7.hex.gz differ diff --git a/Hex Files/E5P_BIL_Slnt_DW7.hex.gz b/Hex Files/E5P_BIL_Slnt_DW7.hex.gz new file mode 100644 index 0000000000..40b0d0111f Binary files /dev/null and b/Hex Files/E5P_BIL_Slnt_DW7.hex.gz differ diff --git a/Hex Files/E5P_BIL_Slnt_MC_DW7.hex.gz b/Hex Files/E5P_BIL_Slnt_MC_DW7.hex.gz new file mode 100644 index 0000000000..e4739bc057 Binary files /dev/null and b/Hex Files/E5P_BIL_Slnt_MC_DW7.hex.gz differ diff --git a/Hex Files/E5P_BIL_Slnt_ME_DW7.hex.gz b/Hex Files/E5P_BIL_Slnt_ME_DW7.hex.gz new file mode 100644 index 0000000000..f4eca0d76d Binary files /dev/null and b/Hex Files/E5P_BIL_Slnt_ME_DW7.hex.gz differ diff --git a/Hex Files/E5P_UBLH_DW7.hex.gz b/Hex Files/E5P_UBLH_DW7.hex.gz new file mode 100644 index 0000000000..9fc35a057a Binary files /dev/null and b/Hex Files/E5P_UBLH_DW7.hex.gz differ diff --git a/Hex Files/E5P_UBL_DW7.hex.gz b/Hex Files/E5P_UBL_DW7.hex.gz new file mode 100644 index 0000000000..d9384557d5 Binary files /dev/null and b/Hex Files/E5P_UBL_DW7.hex.gz differ diff --git a/Hex Files/E5P_UBL_DZH_DW7.hex.gz b/Hex Files/E5P_UBL_DZH_DW7.hex.gz new file mode 100644 index 0000000000..ca17d8d1e1 Binary files /dev/null and b/Hex Files/E5P_UBL_DZH_DW7.hex.gz differ diff --git a/Hex Files/E5P_UBL_DZ_DW7.hex.gz b/Hex Files/E5P_UBL_DZ_DW7.hex.gz new file mode 100644 index 0000000000..5a9e3104f4 Binary files /dev/null and b/Hex Files/E5P_UBL_DZ_DW7.hex.gz differ diff --git a/Hex Files/E5P_UBL_DZ_MC_DW7.hex.gz b/Hex Files/E5P_UBL_DZ_MC_DW7.hex.gz new file mode 100644 index 0000000000..6d9f668243 Binary files /dev/null and b/Hex Files/E5P_UBL_DZ_MC_DW7.hex.gz differ diff --git a/Hex Files/E5P_UBL_DZ_ME_DW7.hex.gz b/Hex Files/E5P_UBL_DZ_ME_DW7.hex.gz new file mode 100644 index 0000000000..5f935e2509 Binary files /dev/null and b/Hex Files/E5P_UBL_DZ_ME_DW7.hex.gz differ diff --git a/Hex Files/E5P_UBL_MC_DW7.hex.gz b/Hex Files/E5P_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..417be63247 Binary files /dev/null and b/Hex Files/E5P_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/E5P_UBL_ME_DW7.hex.gz b/Hex Files/E5P_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..6a6a35dab1 Binary files /dev/null and b/Hex Files/E5P_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/E5P_UBL_SlntH_DW7.hex.gz b/Hex Files/E5P_UBL_SlntH_DW7.hex.gz new file mode 100644 index 0000000000..05b1ef7f51 Binary files /dev/null and b/Hex Files/E5P_UBL_SlntH_DW7.hex.gz differ diff --git a/Hex Files/E5P_UBL_Slnt_DW7.hex.gz b/Hex Files/E5P_UBL_Slnt_DW7.hex.gz new file mode 100644 index 0000000000..8a56403770 Binary files /dev/null and b/Hex Files/E5P_UBL_Slnt_DW7.hex.gz differ diff --git a/Hex Files/E5P_UBL_Slnt_MC_DW7.hex.gz b/Hex Files/E5P_UBL_Slnt_MC_DW7.hex.gz new file mode 100644 index 0000000000..aa984a8dd0 Binary files /dev/null and b/Hex Files/E5P_UBL_Slnt_MC_DW7.hex.gz differ diff --git a/Hex Files/E5P_UBL_Slnt_ME_DW7.hex.gz b/Hex Files/E5P_UBL_Slnt_ME_DW7.hex.gz new file mode 100644 index 0000000000..485513af8a Binary files /dev/null and b/Hex Files/E5P_UBL_Slnt_ME_DW7.hex.gz differ diff --git a/Hex Files/Ender2_BLT_Host_DW7.hex.gz b/Hex Files/Ender2_BLT_Host_DW7.hex.gz new file mode 100644 index 0000000000..57aa2cc9dd Binary files /dev/null and b/Hex Files/Ender2_BLT_Host_DW7.hex.gz differ diff --git a/Hex Files/Ender2_BLT_Host_MC_DW7.hex.gz b/Hex Files/Ender2_BLT_Host_MC_DW7.hex.gz new file mode 100644 index 0000000000..72e09c39fe Binary files /dev/null and b/Hex Files/Ender2_BLT_Host_MC_DW7.hex.gz differ diff --git a/Hex Files/Ender2_BLT_Host_ME_DW7.hex.gz b/Hex Files/Ender2_BLT_Host_ME_DW7.hex.gz new file mode 100644 index 0000000000..207d306927 Binary files /dev/null and b/Hex Files/Ender2_BLT_Host_ME_DW7.hex.gz differ diff --git a/Hex Files/Ender2_BLT_SD_DW7.hex.gz b/Hex Files/Ender2_BLT_SD_DW7.hex.gz new file mode 100644 index 0000000000..3b6f4800dd Binary files /dev/null and b/Hex Files/Ender2_BLT_SD_DW7.hex.gz differ diff --git a/Hex Files/Ender2_BLT_SD_MC_DW7.hex.gz b/Hex Files/Ender2_BLT_SD_MC_DW7.hex.gz new file mode 100644 index 0000000000..aa02ad0ea6 Binary files /dev/null and b/Hex Files/Ender2_BLT_SD_MC_DW7.hex.gz differ diff --git a/Hex Files/Ender2_BLT_SD_ME_DW7.hex.gz b/Hex Files/Ender2_BLT_SD_ME_DW7.hex.gz new file mode 100644 index 0000000000..8af862dedf Binary files /dev/null and b/Hex Files/Ender2_BLT_SD_ME_DW7.hex.gz differ diff --git a/Hex Files/Ender2_DW7.hex.gz b/Hex Files/Ender2_DW7.hex.gz new file mode 100644 index 0000000000..dc32f290b4 Binary files /dev/null and b/Hex Files/Ender2_DW7.hex.gz differ diff --git a/Hex Files/Ender2_MC_DW7.hex.gz b/Hex Files/Ender2_MC_DW7.hex.gz new file mode 100644 index 0000000000..cd2631e937 Binary files /dev/null and b/Hex Files/Ender2_MC_DW7.hex.gz differ diff --git a/Hex Files/Ender2_ME_DW7.hex.gz b/Hex Files/Ender2_ME_DW7.hex.gz new file mode 100644 index 0000000000..37c862cf7b Binary files /dev/null and b/Hex Files/Ender2_ME_DW7.hex.gz differ diff --git a/Hex Files/Ender3_BLT_Host_DW7.hex.gz b/Hex Files/Ender3_BLT_Host_DW7.hex.gz new file mode 100644 index 0000000000..d6bf9323dd Binary files /dev/null and b/Hex Files/Ender3_BLT_Host_DW7.hex.gz differ diff --git a/Hex Files/Ender3_BLT_Host_MC_DW7.hex.gz b/Hex Files/Ender3_BLT_Host_MC_DW7.hex.gz new file mode 100644 index 0000000000..ebac5bc176 Binary files /dev/null and b/Hex Files/Ender3_BLT_Host_MC_DW7.hex.gz differ diff --git a/Hex Files/Ender3_BLT_Host_ME_DW7.hex.gz b/Hex Files/Ender3_BLT_Host_ME_DW7.hex.gz new file mode 100644 index 0000000000..80e462957b Binary files /dev/null and b/Hex Files/Ender3_BLT_Host_ME_DW7.hex.gz differ diff --git a/Hex Files/Ender3_BLT_SD_DW7.hex.gz b/Hex Files/Ender3_BLT_SD_DW7.hex.gz new file mode 100644 index 0000000000..a488f25606 Binary files /dev/null and b/Hex Files/Ender3_BLT_SD_DW7.hex.gz differ diff --git a/Hex Files/Ender3_BLT_SD_MC_DW7.hex.gz b/Hex Files/Ender3_BLT_SD_MC_DW7.hex.gz new file mode 100644 index 0000000000..acafd3647c Binary files /dev/null and b/Hex Files/Ender3_BLT_SD_MC_DW7.hex.gz differ diff --git a/Hex Files/Ender3_BLT_SD_ME_DW7.hex.gz b/Hex Files/Ender3_BLT_SD_ME_DW7.hex.gz new file mode 100644 index 0000000000..cd63604fa2 Binary files /dev/null and b/Hex Files/Ender3_BLT_SD_ME_DW7.hex.gz differ diff --git a/Hex Files/Ender3_DW7.hex.gz b/Hex Files/Ender3_DW7.hex.gz new file mode 100644 index 0000000000..77b2794628 Binary files /dev/null and b/Hex Files/Ender3_DW7.hex.gz differ diff --git a/Hex Files/Ender3_MC_DW7.hex.gz b/Hex Files/Ender3_MC_DW7.hex.gz new file mode 100644 index 0000000000..10ffc32b45 Binary files /dev/null and b/Hex Files/Ender3_MC_DW7.hex.gz differ diff --git a/Hex Files/Ender3_ME_DW7.hex.gz b/Hex Files/Ender3_ME_DW7.hex.gz new file mode 100644 index 0000000000..0230ca10e8 Binary files /dev/null and b/Hex Files/Ender3_ME_DW7.hex.gz differ diff --git a/Hex Files/Ender4_BLT_DW7.hex.gz b/Hex Files/Ender4_BLT_DW7.hex.gz new file mode 100644 index 0000000000..0342dc5f4b Binary files /dev/null and b/Hex Files/Ender4_BLT_DW7.hex.gz differ diff --git a/Hex Files/Ender4_BLT_MC_DW7.hex.gz b/Hex Files/Ender4_BLT_MC_DW7.hex.gz new file mode 100644 index 0000000000..890a1d1526 Binary files /dev/null and b/Hex Files/Ender4_BLT_MC_DW7.hex.gz differ diff --git a/Hex Files/Ender4_BLT_ME_DW7.hex.gz b/Hex Files/Ender4_BLT_ME_DW7.hex.gz new file mode 100644 index 0000000000..ac8391d677 Binary files /dev/null and b/Hex Files/Ender4_BLT_ME_DW7.hex.gz differ diff --git a/Hex Files/Ender4_BLT_UBL_DW7.hex.gz b/Hex Files/Ender4_BLT_UBL_DW7.hex.gz new file mode 100644 index 0000000000..81a9839fa9 Binary files /dev/null and b/Hex Files/Ender4_BLT_UBL_DW7.hex.gz differ diff --git a/Hex Files/Ender4_BLT_UBL_MC_DW7.hex.gz b/Hex Files/Ender4_BLT_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..74216e825e Binary files /dev/null and b/Hex Files/Ender4_BLT_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/Ender4_BLT_UBL_ME_DW7.hex.gz b/Hex Files/Ender4_BLT_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..f7c5428135 Binary files /dev/null and b/Hex Files/Ender4_BLT_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/Ender4_DW7.hex.gz b/Hex Files/Ender4_DW7.hex.gz new file mode 100644 index 0000000000..15db0b7dc6 Binary files /dev/null and b/Hex Files/Ender4_DW7.hex.gz differ diff --git a/Hex Files/Ender4_MC_DW7.hex.gz b/Hex Files/Ender4_MC_DW7.hex.gz new file mode 100644 index 0000000000..62574e0a05 Binary files /dev/null and b/Hex Files/Ender4_MC_DW7.hex.gz differ diff --git a/Hex Files/Ender4_ME_DW7.hex.gz b/Hex Files/Ender4_ME_DW7.hex.gz new file mode 100644 index 0000000000..3394ab8e02 Binary files /dev/null and b/Hex Files/Ender4_ME_DW7.hex.gz differ diff --git a/Hex Files/Ender5_BLT_Host_DW7.hex.gz b/Hex Files/Ender5_BLT_Host_DW7.hex.gz new file mode 100644 index 0000000000..aba77ea499 Binary files /dev/null and b/Hex Files/Ender5_BLT_Host_DW7.hex.gz differ diff --git a/Hex Files/Ender5_BLT_Host_MC_DW7.hex.gz b/Hex Files/Ender5_BLT_Host_MC_DW7.hex.gz new file mode 100644 index 0000000000..8bcb4b839d Binary files /dev/null and b/Hex Files/Ender5_BLT_Host_MC_DW7.hex.gz differ diff --git a/Hex Files/Ender5_BLT_Host_ME_DW7.hex.gz b/Hex Files/Ender5_BLT_Host_ME_DW7.hex.gz new file mode 100644 index 0000000000..b4de5a4446 Binary files /dev/null and b/Hex Files/Ender5_BLT_Host_ME_DW7.hex.gz differ diff --git a/Hex Files/Ender5_BLT_SD_DW7.hex.gz b/Hex Files/Ender5_BLT_SD_DW7.hex.gz new file mode 100644 index 0000000000..f53172b67a Binary files /dev/null and b/Hex Files/Ender5_BLT_SD_DW7.hex.gz differ diff --git a/Hex Files/Ender5_BLT_SD_MC_DW7.hex.gz b/Hex Files/Ender5_BLT_SD_MC_DW7.hex.gz new file mode 100644 index 0000000000..cde8cfe996 Binary files /dev/null and b/Hex Files/Ender5_BLT_SD_MC_DW7.hex.gz differ diff --git a/Hex Files/Ender5_BLT_SD_ME_DW7.hex.gz b/Hex Files/Ender5_BLT_SD_ME_DW7.hex.gz new file mode 100644 index 0000000000..7c7e973b5f Binary files /dev/null and b/Hex Files/Ender5_BLT_SD_ME_DW7.hex.gz differ diff --git a/Hex Files/Ender5_DW7.hex.gz b/Hex Files/Ender5_DW7.hex.gz new file mode 100644 index 0000000000..8bb490538f Binary files /dev/null and b/Hex Files/Ender5_DW7.hex.gz differ diff --git a/Hex Files/Ender5_MC_DW7.hex.gz b/Hex Files/Ender5_MC_DW7.hex.gz new file mode 100644 index 0000000000..f2ce29f957 Binary files /dev/null and b/Hex Files/Ender5_MC_DW7.hex.gz differ diff --git a/Hex Files/Ender5_ME_DW7.hex.gz b/Hex Files/Ender5_ME_DW7.hex.gz new file mode 100644 index 0000000000..a24ede019d Binary files /dev/null and b/Hex Files/Ender5_ME_DW7.hex.gz differ diff --git a/Hex Files/S4_AC_DW7.hex.gz b/Hex Files/S4_AC_DW7.hex.gz new file mode 100644 index 0000000000..3d35fbf6a8 Binary files /dev/null and b/Hex Files/S4_AC_DW7.hex.gz differ diff --git a/Hex Files/S4_AC_LR_DW7.hex.gz b/Hex Files/S4_AC_LR_DW7.hex.gz new file mode 100644 index 0000000000..7ad47e85aa Binary files /dev/null and b/Hex Files/S4_AC_LR_DW7.hex.gz differ diff --git a/Hex Files/S4_AC_MC_DW7.hex.gz b/Hex Files/S4_AC_MC_DW7.hex.gz new file mode 100644 index 0000000000..b74c0cdbd6 Binary files /dev/null and b/Hex Files/S4_AC_MC_DW7.hex.gz differ diff --git a/Hex Files/S4_AC_MC_NF_DW7.hex.gz b/Hex Files/S4_AC_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..7f9df06e60 Binary files /dev/null and b/Hex Files/S4_AC_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_AC_ME_DW7.hex.gz b/Hex Files/S4_AC_ME_DW7.hex.gz new file mode 100644 index 0000000000..d1066e0986 Binary files /dev/null and b/Hex Files/S4_AC_ME_DW7.hex.gz differ diff --git a/Hex Files/S4_AC_ME_NF_DW7.hex.gz b/Hex Files/S4_AC_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..bba49621c8 Binary files /dev/null and b/Hex Files/S4_AC_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_AC_NF_DW7.hex.gz b/Hex Files/S4_AC_NF_DW7.hex.gz new file mode 100644 index 0000000000..a700d23f36 Binary files /dev/null and b/Hex Files/S4_AC_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_AC_NF_LR_DW7.hex.gz b/Hex Files/S4_AC_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..2253288776 Binary files /dev/null and b/Hex Files/S4_AC_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_DW7.hex.gz b/Hex Files/S4_BLT_AC_DW7.hex.gz new file mode 100644 index 0000000000..2b5e9ef162 Binary files /dev/null and b/Hex Files/S4_BLT_AC_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_LR_DW7.hex.gz b/Hex Files/S4_BLT_AC_LR_DW7.hex.gz new file mode 100644 index 0000000000..a4b465c8dc Binary files /dev/null and b/Hex Files/S4_BLT_AC_LR_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_MC_DW7.hex.gz b/Hex Files/S4_BLT_AC_MC_DW7.hex.gz new file mode 100644 index 0000000000..fc0287062d Binary files /dev/null and b/Hex Files/S4_BLT_AC_MC_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_MC_NF_DW7.hex.gz b/Hex Files/S4_BLT_AC_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..fa9b2ad3de Binary files /dev/null and b/Hex Files/S4_BLT_AC_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_ME_DW7.hex.gz b/Hex Files/S4_BLT_AC_ME_DW7.hex.gz new file mode 100644 index 0000000000..d90d9ac806 Binary files /dev/null and b/Hex Files/S4_BLT_AC_ME_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_ME_NF_DW7.hex.gz b/Hex Files/S4_BLT_AC_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..4686e9e9d6 Binary files /dev/null and b/Hex Files/S4_BLT_AC_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_NF_DW7.hex.gz b/Hex Files/S4_BLT_AC_NF_DW7.hex.gz new file mode 100644 index 0000000000..2dc48c96b2 Binary files /dev/null and b/Hex Files/S4_BLT_AC_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_NF_LR_DW7.hex.gz b/Hex Files/S4_BLT_AC_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..b9494d2d81 Binary files /dev/null and b/Hex Files/S4_BLT_AC_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_UBL_DW7.hex.gz b/Hex Files/S4_BLT_AC_UBL_DW7.hex.gz new file mode 100644 index 0000000000..109a8b52ea Binary files /dev/null and b/Hex Files/S4_BLT_AC_UBL_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_UBL_LR_DW7.hex.gz b/Hex Files/S4_BLT_AC_UBL_LR_DW7.hex.gz new file mode 100644 index 0000000000..deb9ef0dd5 Binary files /dev/null and b/Hex Files/S4_BLT_AC_UBL_LR_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_UBL_MC_DW7.hex.gz b/Hex Files/S4_BLT_AC_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..720a3c373a Binary files /dev/null and b/Hex Files/S4_BLT_AC_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_UBL_MC_NF_DW7.hex.gz b/Hex Files/S4_BLT_AC_UBL_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..4f4f391999 Binary files /dev/null and b/Hex Files/S4_BLT_AC_UBL_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_UBL_ME_DW7.hex.gz b/Hex Files/S4_BLT_AC_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..af3fe01068 Binary files /dev/null and b/Hex Files/S4_BLT_AC_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_UBL_ME_NF_DW7.hex.gz b/Hex Files/S4_BLT_AC_UBL_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..278e3ae055 Binary files /dev/null and b/Hex Files/S4_BLT_AC_UBL_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_UBL_NF_DW7.hex.gz b/Hex Files/S4_BLT_AC_UBL_NF_DW7.hex.gz new file mode 100644 index 0000000000..a15929a9fd Binary files /dev/null and b/Hex Files/S4_BLT_AC_UBL_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_AC_UBL_NF_LR_DW7.hex.gz b/Hex Files/S4_BLT_AC_UBL_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..18a4beb5fd Binary files /dev/null and b/Hex Files/S4_BLT_AC_UBL_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_DW7.hex.gz b/Hex Files/S4_BLT_DW7.hex.gz new file mode 100644 index 0000000000..4ff0d26b53 Binary files /dev/null and b/Hex Files/S4_BLT_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_LR_DW7.hex.gz b/Hex Files/S4_BLT_LR_DW7.hex.gz new file mode 100644 index 0000000000..da80b3c661 Binary files /dev/null and b/Hex Files/S4_BLT_LR_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_MC_DW7.hex.gz b/Hex Files/S4_BLT_MC_DW7.hex.gz new file mode 100644 index 0000000000..6a013339eb Binary files /dev/null and b/Hex Files/S4_BLT_MC_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_MC_NF_DW7.hex.gz b/Hex Files/S4_BLT_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..3b6fda371a Binary files /dev/null and b/Hex Files/S4_BLT_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_ME_DW7.hex.gz b/Hex Files/S4_BLT_ME_DW7.hex.gz new file mode 100644 index 0000000000..498ffa59c5 Binary files /dev/null and b/Hex Files/S4_BLT_ME_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_ME_NF_DW7.hex.gz b/Hex Files/S4_BLT_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..a2ff6fa92e Binary files /dev/null and b/Hex Files/S4_BLT_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_NF_DW7.hex.gz b/Hex Files/S4_BLT_NF_DW7.hex.gz new file mode 100644 index 0000000000..73b18f83be Binary files /dev/null and b/Hex Files/S4_BLT_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_NF_LR_DW7.hex.gz b/Hex Files/S4_BLT_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..68d51f9e3c Binary files /dev/null and b/Hex Files/S4_BLT_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_UBL_DW7.hex.gz b/Hex Files/S4_BLT_UBL_DW7.hex.gz new file mode 100644 index 0000000000..f626be10bb Binary files /dev/null and b/Hex Files/S4_BLT_UBL_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_UBL_LR_DW7.hex.gz b/Hex Files/S4_BLT_UBL_LR_DW7.hex.gz new file mode 100644 index 0000000000..f1d230785e Binary files /dev/null and b/Hex Files/S4_BLT_UBL_LR_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_UBL_MC_DW7.hex.gz b/Hex Files/S4_BLT_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..f5a8f05ae7 Binary files /dev/null and b/Hex Files/S4_BLT_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_UBL_MC_NF_DW7.hex.gz b/Hex Files/S4_BLT_UBL_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..78ddfa69cf Binary files /dev/null and b/Hex Files/S4_BLT_UBL_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_UBL_ME_DW7.hex.gz b/Hex Files/S4_BLT_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..6f6ed8f796 Binary files /dev/null and b/Hex Files/S4_BLT_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_UBL_ME_NF_DW7.hex.gz b/Hex Files/S4_BLT_UBL_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..ea7b3736a1 Binary files /dev/null and b/Hex Files/S4_BLT_UBL_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_UBL_NF_DW7.hex.gz b/Hex Files/S4_BLT_UBL_NF_DW7.hex.gz new file mode 100644 index 0000000000..dbf3ed06db Binary files /dev/null and b/Hex Files/S4_BLT_UBL_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_BLT_UBL_NF_LR_DW7.hex.gz b/Hex Files/S4_BLT_UBL_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..67e6a91f52 Binary files /dev/null and b/Hex Files/S4_BLT_UBL_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/S4_DW7.hex.gz b/Hex Files/S4_DW7.hex.gz new file mode 100644 index 0000000000..189a649fec Binary files /dev/null and b/Hex Files/S4_DW7.hex.gz differ diff --git a/Hex Files/S4_LR_DW7.hex.gz b/Hex Files/S4_LR_DW7.hex.gz new file mode 100644 index 0000000000..d388adf767 Binary files /dev/null and b/Hex Files/S4_LR_DW7.hex.gz differ diff --git a/Hex Files/S4_MC_DW7.hex.gz b/Hex Files/S4_MC_DW7.hex.gz new file mode 100644 index 0000000000..6aca34ace3 Binary files /dev/null and b/Hex Files/S4_MC_DW7.hex.gz differ diff --git a/Hex Files/S4_MC_NF_DW7.hex.gz b/Hex Files/S4_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..77828c9d5a Binary files /dev/null and b/Hex Files/S4_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_ME_DW7.hex.gz b/Hex Files/S4_ME_DW7.hex.gz new file mode 100644 index 0000000000..5cde6a1ba7 Binary files /dev/null and b/Hex Files/S4_ME_DW7.hex.gz differ diff --git a/Hex Files/S4_ME_NF_DW7.hex.gz b/Hex Files/S4_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..99c760d50b Binary files /dev/null and b/Hex Files/S4_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_NF_DW7.hex.gz b/Hex Files/S4_NF_DW7.hex.gz new file mode 100644 index 0000000000..7e26962243 Binary files /dev/null and b/Hex Files/S4_NF_DW7.hex.gz differ diff --git a/Hex Files/S4_NF_LR_DW7.hex.gz b/Hex Files/S4_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..ec7f11cd2f Binary files /dev/null and b/Hex Files/S4_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/S5_AC_DW7.hex.gz b/Hex Files/S5_AC_DW7.hex.gz new file mode 100644 index 0000000000..e512e63f72 Binary files /dev/null and b/Hex Files/S5_AC_DW7.hex.gz differ diff --git a/Hex Files/S5_AC_LR_DW7.hex.gz b/Hex Files/S5_AC_LR_DW7.hex.gz new file mode 100644 index 0000000000..7c0026d468 Binary files /dev/null and b/Hex Files/S5_AC_LR_DW7.hex.gz differ diff --git a/Hex Files/S5_AC_MC_DW7.hex.gz b/Hex Files/S5_AC_MC_DW7.hex.gz new file mode 100644 index 0000000000..3f867e841b Binary files /dev/null and b/Hex Files/S5_AC_MC_DW7.hex.gz differ diff --git a/Hex Files/S5_AC_MC_NF_DW7.hex.gz b/Hex Files/S5_AC_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..fc0d63eccb Binary files /dev/null and b/Hex Files/S5_AC_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_AC_ME_DW7.hex.gz b/Hex Files/S5_AC_ME_DW7.hex.gz new file mode 100644 index 0000000000..71cedf6c8b Binary files /dev/null and b/Hex Files/S5_AC_ME_DW7.hex.gz differ diff --git a/Hex Files/S5_AC_ME_NF_DW7.hex.gz b/Hex Files/S5_AC_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..c0c427cba4 Binary files /dev/null and b/Hex Files/S5_AC_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_AC_NF_DW7.hex.gz b/Hex Files/S5_AC_NF_DW7.hex.gz new file mode 100644 index 0000000000..e4f5e9ff82 Binary files /dev/null and b/Hex Files/S5_AC_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_AC_NF_LR_DW7.hex.gz b/Hex Files/S5_AC_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..400fb5528b Binary files /dev/null and b/Hex Files/S5_AC_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_DW7.hex.gz b/Hex Files/S5_BLT_AC_DW7.hex.gz new file mode 100644 index 0000000000..dbb009148c Binary files /dev/null and b/Hex Files/S5_BLT_AC_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_LR_DW7.hex.gz b/Hex Files/S5_BLT_AC_LR_DW7.hex.gz new file mode 100644 index 0000000000..06d75f18a2 Binary files /dev/null and b/Hex Files/S5_BLT_AC_LR_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_MC_DW7.hex.gz b/Hex Files/S5_BLT_AC_MC_DW7.hex.gz new file mode 100644 index 0000000000..a0af956dad Binary files /dev/null and b/Hex Files/S5_BLT_AC_MC_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_MC_NF_DW7.hex.gz b/Hex Files/S5_BLT_AC_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..47f17a2143 Binary files /dev/null and b/Hex Files/S5_BLT_AC_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_ME_DW7.hex.gz b/Hex Files/S5_BLT_AC_ME_DW7.hex.gz new file mode 100644 index 0000000000..47fbe6d332 Binary files /dev/null and b/Hex Files/S5_BLT_AC_ME_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_ME_NF_DW7.hex.gz b/Hex Files/S5_BLT_AC_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..a720d32e26 Binary files /dev/null and b/Hex Files/S5_BLT_AC_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_NF_DW7.hex.gz b/Hex Files/S5_BLT_AC_NF_DW7.hex.gz new file mode 100644 index 0000000000..4164edfb8e Binary files /dev/null and b/Hex Files/S5_BLT_AC_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_NF_LR_DW7.hex.gz b/Hex Files/S5_BLT_AC_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..28f7569af3 Binary files /dev/null and b/Hex Files/S5_BLT_AC_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_UBL_DW7.hex.gz b/Hex Files/S5_BLT_AC_UBL_DW7.hex.gz new file mode 100644 index 0000000000..7004bab6cb Binary files /dev/null and b/Hex Files/S5_BLT_AC_UBL_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_UBL_LR_DW7.hex.gz b/Hex Files/S5_BLT_AC_UBL_LR_DW7.hex.gz new file mode 100644 index 0000000000..61ff99226c Binary files /dev/null and b/Hex Files/S5_BLT_AC_UBL_LR_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_UBL_MC_DW7.hex.gz b/Hex Files/S5_BLT_AC_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..91ea01d20d Binary files /dev/null and b/Hex Files/S5_BLT_AC_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_UBL_MC_NF_DW7.hex.gz b/Hex Files/S5_BLT_AC_UBL_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..caa7e412c8 Binary files /dev/null and b/Hex Files/S5_BLT_AC_UBL_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_UBL_ME_DW7.hex.gz b/Hex Files/S5_BLT_AC_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..da7ed212c0 Binary files /dev/null and b/Hex Files/S5_BLT_AC_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_UBL_ME_NF_DW7.hex.gz b/Hex Files/S5_BLT_AC_UBL_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..67d4fa0cb0 Binary files /dev/null and b/Hex Files/S5_BLT_AC_UBL_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_UBL_NF_DW7.hex.gz b/Hex Files/S5_BLT_AC_UBL_NF_DW7.hex.gz new file mode 100644 index 0000000000..bd162ea515 Binary files /dev/null and b/Hex Files/S5_BLT_AC_UBL_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_AC_UBL_NF_LR_DW7.hex.gz b/Hex Files/S5_BLT_AC_UBL_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..430580b64e Binary files /dev/null and b/Hex Files/S5_BLT_AC_UBL_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_DW7.hex.gz b/Hex Files/S5_BLT_DW7.hex.gz new file mode 100644 index 0000000000..5347d12a9a Binary files /dev/null and b/Hex Files/S5_BLT_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_LR_DW7.hex.gz b/Hex Files/S5_BLT_LR_DW7.hex.gz new file mode 100644 index 0000000000..082a183a9b Binary files /dev/null and b/Hex Files/S5_BLT_LR_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_MC_DW7.hex.gz b/Hex Files/S5_BLT_MC_DW7.hex.gz new file mode 100644 index 0000000000..cdd197aab2 Binary files /dev/null and b/Hex Files/S5_BLT_MC_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_MC_NF_DW7.hex.gz b/Hex Files/S5_BLT_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..0a6c07b852 Binary files /dev/null and b/Hex Files/S5_BLT_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_ME_DW7.hex.gz b/Hex Files/S5_BLT_ME_DW7.hex.gz new file mode 100644 index 0000000000..3776f12ddf Binary files /dev/null and b/Hex Files/S5_BLT_ME_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_ME_NF_DW7.hex.gz b/Hex Files/S5_BLT_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..a36e7693f5 Binary files /dev/null and b/Hex Files/S5_BLT_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_NF_DW7.hex.gz b/Hex Files/S5_BLT_NF_DW7.hex.gz new file mode 100644 index 0000000000..a042f54e60 Binary files /dev/null and b/Hex Files/S5_BLT_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_NF_LR_DW7.hex.gz b/Hex Files/S5_BLT_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..e4952bb983 Binary files /dev/null and b/Hex Files/S5_BLT_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_UBL_DW7.hex.gz b/Hex Files/S5_BLT_UBL_DW7.hex.gz new file mode 100644 index 0000000000..4c30830560 Binary files /dev/null and b/Hex Files/S5_BLT_UBL_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_UBL_LR_DW7.hex.gz b/Hex Files/S5_BLT_UBL_LR_DW7.hex.gz new file mode 100644 index 0000000000..88ac123ddb Binary files /dev/null and b/Hex Files/S5_BLT_UBL_LR_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_UBL_MC_DW7.hex.gz b/Hex Files/S5_BLT_UBL_MC_DW7.hex.gz new file mode 100644 index 0000000000..a564f59702 Binary files /dev/null and b/Hex Files/S5_BLT_UBL_MC_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_UBL_MC_NF_DW7.hex.gz b/Hex Files/S5_BLT_UBL_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..a88b8eb7b0 Binary files /dev/null and b/Hex Files/S5_BLT_UBL_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_UBL_ME_DW7.hex.gz b/Hex Files/S5_BLT_UBL_ME_DW7.hex.gz new file mode 100644 index 0000000000..a6bafcc889 Binary files /dev/null and b/Hex Files/S5_BLT_UBL_ME_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_UBL_ME_NF_DW7.hex.gz b/Hex Files/S5_BLT_UBL_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..0ec89aaa85 Binary files /dev/null and b/Hex Files/S5_BLT_UBL_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_UBL_NF_DW7.hex.gz b/Hex Files/S5_BLT_UBL_NF_DW7.hex.gz new file mode 100644 index 0000000000..67323e1dfb Binary files /dev/null and b/Hex Files/S5_BLT_UBL_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_BLT_UBL_NF_LR_DW7.hex.gz b/Hex Files/S5_BLT_UBL_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..7bba115420 Binary files /dev/null and b/Hex Files/S5_BLT_UBL_NF_LR_DW7.hex.gz differ diff --git a/Hex Files/S5_DW7.hex.gz b/Hex Files/S5_DW7.hex.gz new file mode 100644 index 0000000000..51b0801518 Binary files /dev/null and b/Hex Files/S5_DW7.hex.gz differ diff --git a/Hex Files/S5_LR_DW7.hex.gz b/Hex Files/S5_LR_DW7.hex.gz new file mode 100644 index 0000000000..e0ed044c47 Binary files /dev/null and b/Hex Files/S5_LR_DW7.hex.gz differ diff --git a/Hex Files/S5_MC_DW7.hex.gz b/Hex Files/S5_MC_DW7.hex.gz new file mode 100644 index 0000000000..af3a13d5b4 Binary files /dev/null and b/Hex Files/S5_MC_DW7.hex.gz differ diff --git a/Hex Files/S5_MC_NF_DW7.hex.gz b/Hex Files/S5_MC_NF_DW7.hex.gz new file mode 100644 index 0000000000..8dd486fd1a Binary files /dev/null and b/Hex Files/S5_MC_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_ME_DW7.hex.gz b/Hex Files/S5_ME_DW7.hex.gz new file mode 100644 index 0000000000..d0fd0a1e4e Binary files /dev/null and b/Hex Files/S5_ME_DW7.hex.gz differ diff --git a/Hex Files/S5_ME_NF_DW7.hex.gz b/Hex Files/S5_ME_NF_DW7.hex.gz new file mode 100644 index 0000000000..739241aaf3 Binary files /dev/null and b/Hex Files/S5_ME_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_NF_DW7.hex.gz b/Hex Files/S5_NF_DW7.hex.gz new file mode 100644 index 0000000000..2f1c17e614 Binary files /dev/null and b/Hex Files/S5_NF_DW7.hex.gz differ diff --git a/Hex Files/S5_NF_LR_DW7.hex.gz b/Hex Files/S5_NF_LR_DW7.hex.gz new file mode 100644 index 0000000000..d4ac7bdcb7 Binary files /dev/null and b/Hex Files/S5_NF_LR_DW7.hex.gz differ diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 0b6234bbcc..2ef463c3a4 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -1,3 +1,219 @@ +/* + Basic Options + + Select Machine +*/ + +// Standard Atmega2560 machines (No bootloader required) + +//#define MachineEnder5Plus +//#define MachineEnder4 +//#define MachineCR20 //Buzzer doesnt work +//#define MachineCR20Pro +//#define MachineCR10S +//#define MachineCR10SV2 +//#define MachineCR10SPro // Graphics LCD Requires soldering R64 and R66 +//#define MachineCR10SProV2 // Second Gen 10S Pro with BLTouch wired to Z Max +//#define MachineCRX +//#define MachineCRXPro +//#define MachineCR10Max +//#define MachineS4 +//#define MachineS5 +//#define MachineCR2020 // Industrial Series 2020 + +// Atmega1284P machines Needs a bootloader flashed before installation +// See video here : https://www.youtube.com/watch?v=fIl5X2ffdyo + +//#define MachineEnder2 +//#define MachineEnder3 +//#define MachineEnder5 +//#define MachineMini +//#define MachineCR10 + + +//STM32F103RE Machines +//#define MachineEnder3V2 +//#define MachineEnder3Pro422 +//#define MachineEnder3Pro427 + +//#define PLUS // Adds bltouch, allmetal, bilinear (standard), lerdge, 93 e steps/mm + +/* + Hotend Type + Choose one option below. + E3D assumes the following mount : + https://www.thingiverse.com/thing:2494642 + + Configured with 5015 left wing, right wing ABL sensor (BLTouch or M18) only + + Mosquito may be set with either mounting option above and overrides temp sensor and max temp + E3D Mounting assumes Groovemount + Creality Mounting assumes bolt-on kit +*/ +//#define HotendStock +//#define HotendE3D +//#define HotendMosquito + +//Enable this if you have an all metal hotend capable of 300c +#ifndef HotendAllMetal + #define HotendAllMetal +#endif + +// Enable this if you used a plug and play creality e3d or mosquito kit and kept the Creality thermistor +//#define CrealityThermistor + +/* + * Select these if you have changed to a high performance extruder + */ + + //#define EZRstruder + //#define Bondtech + //#define E3DTitan + //#define E3DHemera + //#define CrealityTitan + //#define DDXExtruderKit + + //#define MicroswissDirectDrive + //#define DirectDrive // Any direct drive extruder, reduces filament change lengths + +/* + Choose bed type below. If you have an extenrally controlled + ac bed, leave both disabled +*/ +//#define BedAC +//#define BedDC + +//#define SolidBedMounts //Removed a few LCD options to save some memory since not needed with solid mounts + +/* + Choose ABL sensor type below + Leave all disabled if no sensor is available +*/ +//#define ABL_EZABL // TH3D EZABL or Any NO Sensor +//#define ABL_NCSW //Creality ABL or Any NC Sensor +//#define ABL_BLTOUCH +//#define ABL_TOUCH_MI // Uncomment ABL_TOUCH_MI to use Touch-MI sensor by hotends.fr + +//#define CREALITY_ABL_MOUNT //Using creality ABL mount +//#define E3D_DUALFAN_MOUNT // Using HD Modular mount as above with 2 5015 blowers and sensor on the right +//#define E3D_PROBEMOUNT_LEFT // Default is probe mounted to the right for E3D. Set this to invert. + + +/** + * Screen options + */ + +//#define OrigLCD // Upgraded mainboard with single cable Ender LCD +//#define GraphicLCD //Full graphics LCD for Ender 4, CR-X or CR10SPro +//#define Big_UI // Lightweight status screen, saves CPU cycles + +// Touchscreen options - only 32 bit boards have the open serial ports to use with graphics displays above +//#define ForceCRXDisplay +//#define Force10SProDisplay + +//#define AddonFilSensor //Adds a filament runout sensor to the CR20 or Ender 4 +//#define lerdgeFilSensor //Using lerdge filament sensor, which is opposite polarity to stock +//#define DualFilSensors //Using dual filament sensors on XMax and YMAX +//#define FilamentEncoder //Using filamet jam sensor such as the Bigtreetech Encoder wheel + +//#define PurgeBucket //Adds automatic wiping on tool change if purge bucket is installed + +// Advanced options - Not for most users + +// User defined thermistor +//Sets thermistor based calculated beta values instead of lookup tables +//#define ConfigurableThermistors + +//#define CrealityViewerKit // Reduces baud to 115200 for Creality viewer kit + +/* + Choose bed leveling type here + Requires a sensor from above + Melzi board users may only select ABL_BI for bilinear leveling + If a probe is enabled and nothing selected here, defaults to Bilinear +*/ +//#define ABL_BI +//#define ABL_UBL + +/* + For melzi boards these options allow you to cusomize what you want to do. + Since the storage space is so small, it cannot fit most options together. + Even just a probe and leveling with standard options is filling te entire program space! +*/ +//#define OrigLA // Enable this for linear advance instead of mesh leveling on a melzi board +//#define MelziHostOnly // Enable this to turn off local SD support and instead prioritize options for Octoprint or USB + +/** + * Advanced motherboard replacement options + */ + +//#define OriginalCrealitySquareBoard +//#define MachineCR10Orig // Forces Melzi board +//#define Melzi_To_SBoardUpgrade // Upgrade Melzi board to 10S board +//#define CrealitySilentBoard // Creality board with TMC2208 Standalone drivers. Disables Linear Advance + +//#define SKR13 // 32 bit board - assumes 2208 drivers +//#define SKR14 +//#define SKR14Turbo +//#define SKRPRO11 + +// This board is NOT recommended and is HIGHLY advised against utilizing the expanded builds for. +// The MCU is rated for 256kb and stability problems, including hangs with heaters on, have been reported. + +//#define SKRMiniE3V2 + +//#define I2C_EEPROM // use I2C EEPROM on SRK PRO v1.1 e.g AT24C256 +//#define SKR14_PowerLossKit // Bigtreetech power loss kit for SKR14 + +//#define SKR_2209 +//#define SKR_2130 +//#define SKR_UART // Configure SKR board with drivers in UART mode or SPI for TMC2130 +//#define SKR_ReverseSteppers // Some users reported directions backwards than others on SKR with various drivers. +//#define DualZ // Uses 5th driver on CRX or SKR boards as Z2 + + /* + * + * If any non-stock dual extruder is used, define type here + */ + + //#define Dual_BowdenSplitterY + //#define Dual_CyclopsSingleNozzle + //#define Dual_ChimeraDualNozzle + +//#define POWER_LOSS_RECOVERY //Large and does not fit with any other features on Melzi, or UBL on Atmega + +//Add filtering to endstops when long extensions are used. Makes homing more reliable but less accurate. +//#define CableExtensionNoiseFilter + +/* + Choose a probe grid density below. Faster probes less points, but is less accurate. + Extreme is for extremely uneven or tilted bed surfaces. + UBL and Extreme are recommended with solid bed mounts as it becomes a one time commissioning. + Standard is recommended in most other scenarios. +*/ +//#define MeshFast +//#define MeshStd +//#define MeshFine +//#define MeshExtreme + +/* + Disables SD Sort, Autotemp, Arc support, Linear Advance (Unless overridden with OrigLA above), Big edit fonts, and a few other little things + Intended to resolve issues with certain newer boards experiencing motion errors under load. + Enables Slim Menus +*/ +//#define LowMemoryBoard + + +/* + Enclosure Controls +*/ +//#define EnclosureLight // Uses 5vdc LED's hooked to D12 +//#define PowerShutoffKit // 5vdc relay to interupt all heater power on D12, assumes NO relay. +//#define EnclosureTempSensor // Uses PT100 Probe hooked to A12, only partially implemented upstream +//#define EnclosureHeater //Planned to use A11 to control heater upstream, and repurpose the unused y max as the fan output. Not yet fully implemented upstream + +//#define UnstableTemps // define if temps are unstable and you need a temporary workaround + /** * Marlin 3D Printer Firmware * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] @@ -70,8 +286,8 @@ // @section info // Author info of this build printed to the host during boot and M115 -#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes. -//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes) +#define STRING_CONFIG_H_AUTHOR "TinyMachines3D" // Who made the changes. +#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes) /** * *** VENDORS PLEASE READ *** @@ -84,16 +300,211 @@ * respectfully request that you retain the unmodified Marlin boot screen. */ -// Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION ** -#define SHOW_BOOTSCREEN +// Enable to show the bitmap in Marlin/_Bootscreen.h on startup. +#if ENABLED(MachineCR10SProV2) + #define MachineCR10SPro + #if NONE(ABL_NCSW, ABL_EZABL, ABL_BLTOUCH) + #define ABL_BLTOUCH + #endif +#endif + +#if BOTH(PowerShutoffKit, EnclosureLight) + #undef EnclosureLight +#endif + +#if ENABLED(SKRMiniE3V2) + #define SKR_2209 + #define SKR_UART + #define OrigLCD +#endif + +#if ENABLED(CrealityTitan) + #define E3DTitan +#endif + +#if ENABLED(OriginalCrealitySquareBoard) + #define SD_DETECT_PIN -1 +#endif + +#if ANY(MicroswissDirectDrive, DDXExtruderKit, CrealityTitan) + #define DirectDrive +#endif + +#if ENABLED(DDXExtruderKit) + #define Bondtech +#endif + +#if ENABLED(MachineCR10SPro) + #define MachineCR10Std + #if DISABLED(ABL_BLTOUCH, ABL_EZABL, ABL_TOUCH_MI) + #define ABL_NCSW + #endif + #if DISABLED(ABL_UBL) + #define ABL_BI + #endif + #define lerdgeFilSensor + #if NONE(BedAC, BedDC) + #define BedDC + #endif +#endif + +#if ENABLED(MachineCR10Max) + #if NONE(ABL_NCSW, ABL_EZABL, ABL_BLTOUCH) + #define ABL_BLTOUCH + #endif + #if DISABLED(ABL_UBL) + #define ABL_BI + #endif + #define lerdgeFilSensor + #if NONE(BedAC, BedDC) + #define BedDC + #endif +#endif + +#if ENABLED(MachineEnder5Plus) + #if NONE(ABL_NCSW, ABL_EZABL, ABL_BLTOUCH) + #define ABL_BLTOUCH + #endif + #if NONE(SKR13, SKR14, SKR14Turbo, SKRPRO11, SKRMiniE3V2) + #define Y_STOP_PIN 14 + #define X_STOP_PIN 3 + #endif + #define lerdgeFilSensor + #if DISABLED(ABL_UBL) + #define ABL_BI + #endif + #if NONE(BedAC, BedDC) + #define BedDC + #endif +#endif + +#if ENABLED(MachineCR10SV2) + #define lerdgeFilSensor + #if NONE(BedAC, BedDC) + #define BedDC + #endif +#endif + +#if ANY(MachineCR10SV2, MachineCR10Max, MachineCR10SProV2) && ANY(ABL_EZABL, ABL_NCSW, ABL_BLTOUCH, ABL_TOUCH_MI) && NONE(SKR13, SKR14, SKR14Turbo, SKRPRO11) + #define Z_STOP_PIN 19 +#endif + +#if ANY(MachineEnder2, MachineEnder3, MachineEnder5, MachineCR10, MachineMini) && NONE(Melzi_To_SBoardUpgrade, SKR13, SKRPRO11, SKRMiniE3V2) + #define MachineCR10Orig +#endif + +#if ANY(MachineCR10, MachineCR10S, MachineCR10SV2) + #define MachineCR10Std +#endif + +#if ENABLED(MachineCR2020) + #define EnclosureLight + #define LCD_CONTRAST_INIT 165 + #define SUICIDE_PIN 12 // Power up method is triggering the kill. Need to add consistent inversion upstream + #define SUICIDE_PIN_INVERTING true + #define DirectDrive +#endif + +#if ENABLED(PLUS) + #if DISABLED(MachineCR10Orig) + #define lerdgeFilSensor //Using lerdge filament sensor, which is opposite polarity to stock) + #endif + #define HotendAllMetal + #define EZRstruder + #if DISABLED(ABL_UBL) + #define ABL_BI + #endif + #if NONE(ABL_NCSW, ABL_EZABL, ABL_BLTOUCH) + #define ABL_BLTOUCH + #endif +#endif + +#if ENABLED(MachineCRXPro) + #define MachineCRX + #if NONE(ABL_NCSW, ABL_EZABL, ABL_BLTOUCH) + #define ABL_BLTOUCH + #endif + #define Force10SProDisplay +#endif + +#if ENABLED(MachineCRX) + #define MachineCR10Std + #define Dual_BowdenSplitterY + #if NONE(BedAC, BedDC) + #define BedDC + #endif +#endif + +#if ANY(MachineEnder3V2, MachineEnder3Pro422, MachineEnder3Pro427) + #define POWER_LOSS_RECOVERY //Screen will not compile without PLR + #if NONE(BedAC, BedDC) + #define BedDC + #endif + #define CrealitySilentBoard +#endif + +#if ANY(MachineEnder3Pro422, MachineEnder3Pro427) + #define MachineEnder3 + #define RET6_12864_LCD +#endif + +#if NONE(HotendStock, HotendE3D) + #define HotendStock +#endif + +#if ANY(ABL_EZABL, ABL_NCSW, ABL_BLTOUCH, ABL_TOUCH_MI) && NONE(ABL_UBL, ABL_BI) + #define ABL_BI +#endif + +#if NONE(MeshFast, MeshStd, MeshFine, MeshExtreme) + #define MeshStd +#endif + +#if ENABLED(MachineCR20Pro) + #define LCD_CONTRAST_INIT 165 + #define MachineCR20 + #if NONE(ABL_NCSW, ABL_EZABL, ABL_BLTOUCH) + #define ABL_BLTOUCH + #endif + #define HotendAllMetal + #if DISABLED(ABL_UBL) + #define ABL_BI + #endif + #define SolidBedMounts + #if NONE(BedAC, BedDC) + #define BedDC + #endif +#endif + +#if ENABLED(SKRPRO11) + #define FIL_RUNOUT_PIN PE15 + #if DISABLED(I2C_EEPROM) + #define FLASH_EEPROM_EMULATION + #endif +#endif + +#if ENABLED(E3DHemera) + #define DirectDrive +#endif + +#if ENABLED(MachineCR10Orig, ABL_BI) + #define LowMemoryBoard +#endif +//Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION ** +#if NONE(MachineEnder4, MachineCR10SPro, MachineCRX, MachineCR10Max, MachineEnder5Plus) || ENABLED(GraphicLCD) + #undef SolidBedMounts +#endif + +#if NONE(MachineCR10Orig, MachineEnder4, MachineCR10SPro, MachineCRX, MachineCR10Max, MachineEnder5Plus, SKRMiniE3V2) || ENABLED(GraphicLCD) + #define SHOW_BOOTSCREEN // Show the bitmap in Marlin/_Bootscreen.h on startup. -//#define SHOW_CUSTOM_BOOTSCREEN - -// Show the bitmap in Marlin/_Statusscreen.h on the status screen. -//#define CUSTOM_STATUS_SCREEN_IMAGE - -// @section machine + #if DISABLED(MachineEnder3V2) + #define SHOW_CUSTOM_BOOTSCREEN + // Show the bitmap in Marlin/_Statusscreen.h on the status screen. + #define CUSTOM_STATUS_SCREEN_IMAGE + #endif +#endif /** * Select the serial port on the board to use for communication with the host. @@ -103,14 +514,29 @@ * * :[-1, 0, 1, 2, 3, 4, 5, 6, 7] */ -#define SERIAL_PORT 0 +#if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, SKRMiniE3V2) + #define SERIAL_PORT -1 + #elif ANY(MachineEnder3V2, MachineEnder3Pro422, MachineEnder3Pro427) + #define SERIAL_PORT 1 +#else + #define SERIAL_PORT 0 +#endif /** * Select a secondary serial port on the board to use for communication with the host. * Currently Ethernet (-2) is only supported on Teensy 4.1 boards. * :[-2, -1, 0, 1, 2, 3, 4, 5, 6, 7] */ -//#define SERIAL_PORT_2 -1 + +#if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11) && (NONE(MachineCR10SPro, MachineCRX, MachineEnder5Plus, MachineCR10Max) || (ENABLED(GraphicLCD) && NONE(Force10SProDisplay, ForceCRXDisplay))) + #define SERIAL_PORT_2 0 +#elif ENABLED(SKRMiniE3V2) + #define SERIAL_PORT_2 2 +#elif ANY(SKR13, SKR14, SKR14Turbo) + #define DGUS_SERIAL_PORT 0 +#elif ANY(MachineEnder3V2, MachineEnder3Pro422, MachineEnder3Pro427) + #define SERIAL_PORT_2 3 +#endif /** * This setting determines the communication speed of the printer. @@ -121,40 +547,67 @@ * * :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000] */ -#define BAUDRATE 250000 +#if ANY(MachineEnder3V2, CrealityViewerKit) + #define BAUDRATE 115200 +#else + #define BAUDRATE 250000 +#endif // Enable the Bluetooth serial interface on AT90USB devices //#define BLUETOOTH // Choose the name from boards.h that matches your setup #ifndef MOTHERBOARD - #define MOTHERBOARD BOARD_RAMPS_14_EFB + #if ENABLED(SKR14Turbo) + #define MOTHERBOARD BOARD_BTT_SKR_V1_4_TURBO + #elif ENABLED(SKR14) + #define MOTHERBOARD BOARD_BTT_SKR_V1_4 + #elif ENABLED(SKR13) + #define MOTHERBOARD BOARD_BTT_SKR_V1_3 + #elif ENABLED(SKRPRO11) + #define MOTHERBOARD BOARD_BTT_SKR_PRO_V1_1 + #elif ENABLED(SKRMiniE3V2) + #define MOTHERBOARD BOARD_BTT_SKR_MINI_E3_V2_0 + #elif ANY(MachineEnder3V2, MachineEnder3Pro422) + #define MOTHERBOARD BOARD_CREALITY_V4 + #elif ENABLED(MachineEnder3Pro427) + #define MOTHERBOARD BOARD_CREALITY_V427 + #elif (ENABLED(MachineCR10Orig) && DISABLED(Melzi_To_SBoardUpgrade)) + #define MOTHERBOARD BOARD_MELZI_CREALITY + #else + #define MOTHERBOARD BOARD_RAMPS_CREALITY + #endif #endif // Name displayed in the LCD "Ready" message and Info menu //#define CUSTOM_MACHINE_NAME "3D Printer" // Printer's unique ID, used by some programs to differentiate between machines. -// Choose your own or use a service like https://www.uuidgenerator.net/version4 +// Choose your own or use a service like http://www.uuidgenerator.net/version4 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000" // @section extruder // This defines the number of extruders -// :[0, 1, 2, 3, 4, 5, 6, 7, 8] -#define EXTRUDERS 1 - +// :[1, 2, 3, 4, 5, 6, 7, 8] +#if ANY(Dual_BowdenSplitterY, Dual_CyclopsSingleNozzle, Dual_ChimeraDualNozzle) + #define EXTRUDERS 2 +#else + #define EXTRUDERS 1 +#endif // Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc. #define DEFAULT_NOMINAL_FILAMENT_DIA 1.75 // For Cyclops or any "multi-extruder" that shares a single nozzle. -//#define SINGLENOZZLE +#if ANY(Dual_BowdenSplitterY, Dual_CyclopsSingleNozzle) + #define SINGLENOZZLE +#endif // Save and restore temperature and fan speed on tool-change. // Set standby for the unselected tool with M104/106/109 T... #if ENABLED(SINGLENOZZLE) - //#define SINGLENOZZLE_STANDBY_TEMP - //#define SINGLENOZZLE_STANDBY_FAN + #define SINGLENOZZLE_STANDBY_TEMP + #define SINGLENOZZLE_STANDBY_FAN #endif /** @@ -314,9 +767,11 @@ // Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing). // The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder). // For the other hotends it is their distance from the extruder 0 hotend. -//#define HOTEND_OFFSET_X { 0.0, 20.00 } // (mm) relative X-offset for each nozzle -//#define HOTEND_OFFSET_Y { 0.0, 5.00 } // (mm) relative Y-offset for each nozzle -//#define HOTEND_OFFSET_Z { 0.0, 0.00 } // (mm) relative Z-offset for each nozzle +#if(ENABLED(Dual_ChimeraDualNozzle)) + #define HOTEND_OFFSET_X {0.0, 18.00} // (in mm) for each extruder, offset of the hotend on the X axis + #define HOTEND_OFFSET_Y {0.0, 0.00} // (in mm) for each extruder, offset of the hotend on the Y axis +#endif +//#define HOTEND_OFFSET_Z {0.0, 0.00} // (mm) relative Z-offset for each nozzle // @section machine @@ -326,11 +781,18 @@ * Enable and connect the power supply to the PS_ON_PIN. * Specify whether the power supply is active HIGH or active LOW. */ -//#define PSU_CONTROL +#if EITHER(MachineCR2020, PowerShutoffKit) + #define PSU_CONTROL +#endif //#define PSU_NAME "Power Supply" #if ENABLED(PSU_CONTROL) - #define PSU_ACTIVE_STATE LOW // Set 'LOW' for ATX, 'HIGH' for X-Box + #if ENABLED(PowerShutoffKit) + #define PS_ON_PIN 12 + #define PSU_ACTIVE_STATE HIGH + #else + #define PSU_ACTIVE_STATE LOW // Set 'LOW' for ATX, 'HIGH' for X-Box + #endif //#define PSU_DEFAULT_OFF // Keep power off until enabled directly with M80 //#define PSU_POWERUP_DELAY 250 // (ms) Delay for the PSU to warm up to full power @@ -338,7 +800,7 @@ //#define PSU_POWERUP_GCODE "M355 S1" // G-code to run after power-on (e.g., case light on) //#define PSU_POWEROFF_GCODE "M355 S0" // G-code to run before power-off (e.g., case light off) - //#define AUTO_POWER_CONTROL // Enable automatic control of the PS_ON pin + #define AUTO_POWER_CONTROL // Enable automatic control of the PS_ON pin #if ENABLED(AUTO_POWER_CONTROL) #define AUTO_POWER_FANS // Turn on PSU if fans need power #define AUTO_POWER_E_FANS @@ -419,17 +881,44 @@ * 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below. * 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below. */ -#define TEMP_SENSOR_0 1 -#define TEMP_SENSOR_1 0 +#if ENABLED(ConfigurableThermistors) + #define TEMP_SENSOR_0 1000 +#elif ENABLED(HotendMosquito) + #define TEMP_SENSOR_0 67 +#elif ENABLED(HotendE3D) + #define TEMP_SENSOR_0 5 +#elif ANY(HotendStock, CrealityThermistor) + #define TEMP_SENSOR_0 1 +#endif + +#if DISABLED(Dual_ChimeraDualNozzle) + #define TEMP_SENSOR_1 0 +#else + #define TEMP_SENSOR_1 TEMP_SENSOR_0 +#endif + #define TEMP_SENSOR_2 0 #define TEMP_SENSOR_3 0 #define TEMP_SENSOR_4 0 #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_6 0 #define TEMP_SENSOR_7 0 -#define TEMP_SENSOR_BED 0 +#if ENABLED(ConfigurableThermistors) && ANY(BedDC, BedAC) + #define TEMP_SENSOR_BED 1000 +#elif ENABLED(BedDC) + #define TEMP_SENSOR_BED 5 +#elif ENABLED(BedAC) + #define TEMP_SENSOR_BED 11 +#else + #define TEMP_SENSOR_BED 0 +#endif + #define TEMP_SENSOR_PROBE 0 -#define TEMP_SENSOR_CHAMBER 0 + +#if(ENABLED(EnclosureTempSensor)) + #define TEMP_SENSOR_CHAMBER 147 + #define TEMP_CHAMBER_PIN 12 +#endif // Dummy thermistor constant temperature readings, for use with 998 and 999 #define DUMMY_THERMISTOR_998_VALUE 25 @@ -446,11 +935,16 @@ //#define TEMP_SENSOR_1_AS_REDUNDANT #define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10 -#define TEMP_RESIDENCY_TIME 10 // (seconds) Time to wait for hotend to "settle" in M109 -#define TEMP_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer -#define TEMP_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target +#define TEMP_RESIDENCY_TIME 2 // (seconds) Time to wait for hotend to "settle" in M109 +#if ENABLED(UnstableTemps) + #define TEMP_WINDOW 5 // (°C) Temperature proximity for the "temperature reached" timer + #define TEMP_HYSTERESIS 7 // (°C) Temperature proximity considered "close enough" to the target +#else + #define TEMP_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer + #define TEMP_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target +#endif -#define TEMP_BED_RESIDENCY_TIME 10 // (seconds) Time to wait for bed to "settle" in M190 +#define TEMP_BED_RESIDENCY_TIME 5 // (seconds) Time to wait for bed to "settle" in M190 #define TEMP_BED_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer #define TEMP_BED_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target @@ -469,7 +963,13 @@ // Above this temperature the heater will be switched off. // This can protect components from overheating, but NOT from shorts and failures. // (Use MINTEMP for thermistor short/failure protection.) -#define HEATER_0_MAXTEMP 275 +#if ENABLED(HotendMosquito) + #define HEATER_0_MAXTEMP 450 +#elif ENABLED(HotendAllMetal) + #define HEATER_0_MAXTEMP 315 +#else + #define HEATER_0_MAXTEMP 255 +#endif #define HEATER_1_MAXTEMP 275 #define HEATER_2_MAXTEMP 275 #define HEATER_3_MAXTEMP 275 @@ -491,8 +991,10 @@ #define PID_K1 0.95 // Smoothing factor within any PID loop #if ENABLED(PIDTEMP) - //#define PID_EDIT_MENU // Add PID editing to the "Advanced Settings" menu. (~700 bytes of PROGMEM) - //#define PID_AUTOTUNE_MENU // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of PROGMEM) + #if NONE(MachineCR10Orig, SKRMiniE3V2) + #define PID_EDIT_MENU // Add PID editing to the "Advanced Settings" menu. (~700 bytes of PROGMEM) + #define PID_AUTOTUNE_MENU // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of PROGMEM) + #endif //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders) // Set/get with gcode: M301 E[extruder number, 0-2] @@ -503,9 +1005,62 @@ #define DEFAULT_Ki_LIST { 1.08, 1.08 } #define DEFAULT_Kd_LIST { 114.00, 114.00 } #else - #define DEFAULT_Kp 22.20 - #define DEFAULT_Ki 1.08 - #define DEFAULT_Kd 114.00 + // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it + #if ENABLED(HotendMosquito) + #define DEFAULT_Kp 25.95 + #define DEFAULT_Ki 3.08 + #define DEFAULT_Kd 54.74 + #elif ENABLED(HotendStock) + #if ANY(MachineCR10SPro, MachineCR10Max) + #define DEFAULT_Kp 25.25 + #define DEFAULT_Ki 2.17 + #define DEFAULT_Kd 73.44 + #elif ENABLED(MachineEnder5Plus) + #define DEFAULT_Kp 14.72 + #define DEFAULT_Ki 0.89 + #define DEFAULT_Kd 61.22 + #elif ENABLED(MachineCRX) + #define DEFAULT_Kp 19.00 + #define DEFAULT_Ki 1.40 + #define DEFAULT_Kd 66.00 + #elif ENABLED(MachineCR10SV2) + #define DEFAULT_Kp 19.47 + #define DEFAULT_Ki 1.59 + #define DEFAULT_Kd 59.40 + #elif ENABLED(MachineCR2020) + #define DEFAULT_Kp 22.2 + #define DEFAULT_Ki 1.08 + #define DEFAULT_Kd 114 + #elif ENABLED(MachineEnder3V2) + #define DEFAULT_Kp 28.72 + #define DEFAULT_Ki 2.62 + #define DEFAULT_Kd 78.81 + #else + #define DEFAULT_Kp 17.42 + #define DEFAULT_Ki 1.27 + #define DEFAULT_Kd 59.93 + #endif + #elif ENABLED(HotendE3D) + //E3D v6 Clone with 5050 fan wing at 100% set to 235 + #define DEFAULT_Kp 23.36 + #define DEFAULT_Ki 1.99 + #define DEFAULT_Kd 87.46 + #endif + + // Ultimaker + //#define DEFAULT_Kp 22.2 + //#define DEFAULT_Ki 1.08 + //#define DEFAULT_Kd 114 + + // MakerGear + //#define DEFAULT_Kp 7.0 + //#define DEFAULT_Ki 0.1 + //#define DEFAULT_Kd 12 + + // Mendel Parts V9 on 12V + //#define DEFAULT_Kp 63.0 + //#define DEFAULT_Ki 2.25 + //#define DEFAULT_Kd 440 #endif #endif // PIDTEMP @@ -526,8 +1081,9 @@ * heater. If your configuration is significantly different than this and you don't understand * the issues involved, don't use bed PID until someone else verifies that your hardware works. */ -//#define PIDTEMPBED - +#if NONE(MachineCR10Orig, LowMemoryBoard, SKRMiniE3V2) || ENABLED(MelziHostOnly) + #define PIDTEMPBED +#endif //#define BED_LIMIT_SWITCHING /** @@ -542,11 +1098,17 @@ //#define MIN_BED_POWER 0 //#define PID_BED_DEBUG // Sends debug data to the serial port. - // 120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) - // from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10) - #define DEFAULT_bedKp 10.00 - #define DEFAULT_bedKi .023 - #define DEFAULT_bedKd 305.4 + //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) + //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10) + #if ENABLED(MachineEnder3V2) + #define DEFAULT_bedKp 462.10 + #define DEFAULT_bedKi 85.47 + #define DEFAULT_bedKd 624.59 + #else + #define DEFAULT_bedKp 690.34 + #define DEFAULT_bedKi 111.47 + #define DEFAULT_bedKd 1068.83 + #endif // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles. #endif // PIDTEMPBED @@ -576,7 +1138,7 @@ * Note: For Bowden Extruders make this large enough to allow load/unload. */ #define PREVENT_LENGTHY_EXTRUDE -#define EXTRUDE_MAXLENGTH 200 +#define EXTRUDE_MAXLENGTH 750 //=========================================================================== //======================== Thermal Runaway Protection ======================= @@ -607,7 +1169,9 @@ // Enable one of the options below for CoreXY, CoreXZ, or CoreYZ kinematics, // either in the usual order or reversed -//#define COREXY +#if ENABLED(MachineEnder4) + #define COREXY +#endif //#define COREXZ //#define COREYZ //#define COREYX @@ -624,9 +1188,15 @@ // Specify here all the endstop connectors that are connected to any endstop or probe. // Almost all printers will be using one per axis. Probes will use one or more of the // extra connectors. Leave undefined any used for non-endstop and non-probe purposes. -#define USE_XMIN_PLUG -#define USE_YMIN_PLUG -#define USE_ZMIN_PLUG +#if ANY(MachineEnder5, MachineEnder5Plus) + #define USE_ZMIN_PLUG + #define USE_XMAX_PLUG + #define USE_YMAX_PLUG +#else + #define USE_XMIN_PLUG + #define USE_YMIN_PLUG + #define USE_ZMIN_PLUG +#endif //#define USE_XMAX_PLUG //#define USE_YMAX_PLUG //#define USE_ZMAX_PLUG @@ -658,14 +1228,27 @@ #endif // Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup). -#define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. -#define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. -#define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. -#define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. -#define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. -#define Z_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. -#define Z_MIN_PROBE_ENDSTOP_INVERTING false // Set to true to invert the logic of the probe. +#if ANY(MachineEnder4, MachineCR2020) + #define X_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop. +#else + #define X_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop. +#endif +#if ENABLED(MachineCR2020) + #define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop. +#else + #define Y_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop. +#endif +#define X_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop. +#define Y_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop. +#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop. +#if NONE(ABL_EZABL, ABL_BLTOUCH, MachineCR2020) + #define Z_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop. + #define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the probe. +#else + #define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop. + #define Z_MIN_PROBE_ENDSTOP_INVERTING true // set to true to invert the logic of the probe. +#endif /** * Stepper Drivers * @@ -684,16 +1267,87 @@ * TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE * :['A4988', 'A5984', 'DRV8825', 'LV8729', 'L6470', 'L6474', 'POWERSTEP01', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE'] */ -#define X_DRIVER_TYPE A4988 -#define Y_DRIVER_TYPE A4988 -#define Z_DRIVER_TYPE A4988 + +#if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, MachineCR10SV2, CrealitySilentBoard, MachineCR10SPro, MachineCR10SProV2, MachineCR10Max, SKRMiniE3V2) && DISABLED(SKR_UART) + #if ENABLED(SKR_2209) + #define X_DRIVER_TYPE TMC2209_STANDALONE + #define Y_DRIVER_TYPE TMC2209_STANDALONE + #define Z_DRIVER_TYPE TMC2209_STANDALONE + #define E0_DRIVER_TYPE TMC2209_STANDALONE + #if ENABLED(DualZ) + #define Z2_DRIVER_TYPE TMC2209_STANDALONE + #else + #define E1_DRIVER_TYPE TMC2209_STANDALONE + #endif + #elif ENABLED(SKR_2130) + #define X_DRIVER_TYPE TMC2130_STANDALONE + #define Y_DRIVER_TYPE TMC2130_STANDALONE + #define Z_DRIVER_TYPE TMC2130_STANDALONE + #define E0_DRIVER_TYPE TMC2130_STANDALONE + #if ENABLED(DualZ) + #define Z2_DRIVER_TYPE TMC2130_STANDALONE + #else + #define E1_DRIVER_TYPE TMC2130_STANDALONE + #endif + #else + #define X_DRIVER_TYPE TMC2208_STANDALONE + #define Y_DRIVER_TYPE TMC2208_STANDALONE + #define Z_DRIVER_TYPE TMC2208_STANDALONE + #define E0_DRIVER_TYPE TMC2208_STANDALONE + #if ENABLED(DualZ) + #define Z2_DRIVER_TYPE TMC2208_STANDALONE + #else + #define E1_DRIVER_TYPE TMC2208_STANDALONE + #endif + #endif +#elif ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, SKRMiniE3V2) && ENABLED(SKR_UART) + #if ENABLED(SKR_2209) + #define X_DRIVER_TYPE TMC2209 + #define Y_DRIVER_TYPE TMC2209 + #define Z_DRIVER_TYPE TMC2209 + #define E0_DRIVER_TYPE TMC2209 + #if ENABLED(DualZ) + #define Z2_DRIVER_TYPE TMC2209 + #else + #define E1_DRIVER_TYPE TMC2209 + #endif + #elif ENABLED(SKR_2130) + #define X_DRIVER_TYPE TMC2130 + #define Y_DRIVER_TYPE TMC2130 + #define Z_DRIVER_TYPE TMC2130 + #define E0_DRIVER_TYPE TMC2130 + #if ENABLED(DualZ) + #define Z2_DRIVER_TYPE TMC2130 + #else + #define E1_DRIVER_TYPE TMC2130 + #endif + #else + #define X_DRIVER_TYPE TMC2208 + #define Y_DRIVER_TYPE TMC2208 + #define Z_DRIVER_TYPE TMC2208 + #define E0_DRIVER_TYPE TMC2208 + #if ENABLED(DualZ) + #define Z2_DRIVER_TYPE TMC2208 + #else + #define E1_DRIVER_TYPE TMC2208 + #endif + #endif +#else + #define X_DRIVER_TYPE A4988 + #define Y_DRIVER_TYPE A4988 + #define Z_DRIVER_TYPE A4988 + #define E0_DRIVER_TYPE A4988 + #if ENABLED(DualZ) + #define Z2_DRIVER_TYPE A4988 + #else + #define E1_DRIVER_TYPE A4988 + #endif +#endif + //#define X2_DRIVER_TYPE A4988 //#define Y2_DRIVER_TYPE A4988 //#define Z2_DRIVER_TYPE A4988 //#define Z3_DRIVER_TYPE A4988 -//#define Z4_DRIVER_TYPE A4988 -#define E0_DRIVER_TYPE A4988 -//#define E1_DRIVER_TYPE A4988 //#define E2_DRIVER_TYPE A4988 //#define E3_DRIVER_TYPE A4988 //#define E4_DRIVER_TYPE A4988 @@ -703,7 +1357,9 @@ // Enable this feature if all enabled endstop pins are interrupt-capable. // This will remove the need to poll the interrupt pins, saving many CPU cycles. -//#define ENDSTOP_INTERRUPTS_FEATURE +#if ENABLED(MachineEnder3V2) + #define ENDSTOP_INTERRUPTS_FEATURE +#endif /** * Endstop Noise Threshold @@ -717,7 +1373,9 @@ * * :[2,3,4,5,6,7] */ -//#define ENDSTOP_NOISE_THRESHOLD 2 +#if ANY(MachineEnder5Plus, CableExtensionNoiseFilter) + #define ENDSTOP_NOISE_THRESHOLD 2 +#endif // Check for stuck or disconnected endstops during homing moves. //#define DETECT_BROKEN_ENDSTOP @@ -747,18 +1405,85 @@ * Override with M92 * X, Y, Z, E0 [, E1[, E2...]] */ -#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 4000, 500 } + +#if ENABLED(CrealityTitan) + #define EStepsmm 382.14 +#elif ENABLED(MicroswissDirectDrive) + #define EStepsmm 130 +#elif(ENABLED(Bondtech) || ENABLED(E3DTitan)) + #define EStepsmm 415 +#elif ENABLED(E3DHemera) + #define EStepsmm 409 +#elif ANY(EZRstruder, MachineCR10SV2) + #define EStepsmm 93 +#elif ANY(MachineCR10SPro, MachineCR10Max, MachineCRXPro) + #define EStepsmm 140 +#elif ENABLED(MachineCR2020) + #define EStepsmm 113 +#else + #define EStepsmm 95 +#endif + +#if ENABLED(MachineEnder5Plus) + #define ZStepsmm 800 +#else + #define ZStepsmm 400 +#endif + +#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, ZStepsmm, EStepsmm } /** * Default Max Feed Rate (mm/s) * Override with M203 - * X, Y, Z, E0 [, E1[, E2...]] + * X, Y, Z, E0 [, E1[, E2[, E3[, E4[, E5]]]]] */ -#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +#if ENABLED(MachineCR20Pro) + #define DEFAULT_MAX_FEEDRATE { 750, 750, 10, 75 } + #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 75 } + #define DEFAULT_ACCELERATION 750 // X, Y, Z and E acceleration for printing moves + #define DEFAULT_RETRACT_ACCELERATION 1000 // E acceleration for retracts + #define DEFAULT_TRAVEL_ACCELERATION 300 // X, Y, Z acceleration for travel (non printing) moves +#elif ANY(MachineMini, MachineCR20, MachineEnder2, MachineEnder3, MachineEnder3V2, MachineEnder4, MachineEnder5, MachineEnder5Plus) + #define DEFAULT_MAX_FEEDRATE { 750, 750, 10, 75 } + #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 75 } + #define DEFAULT_ACCELERATION 750 // X, Y, Z and E acceleration for printing moves + #define DEFAULT_RETRACT_ACCELERATION 1000 // E acceleration for retracts + #define DEFAULT_TRAVEL_ACCELERATION 300 // X, Y, Z acceleration for travel (non printing) moves +#elif (ENABLED(MachineCR10SPro)) + #define DEFAULT_MAX_FEEDRATE { 500, 500, 10, 70 } + #define DEFAULT_MAX_ACCELERATION { 750, 750, 100, 60 } + #define DEFAULT_ACCELERATION 750 // X, Y, Z and E acceleration for printing moves + #define DEFAULT_RETRACT_ACCELERATION 1000 // E acceleration for retracts + #define DEFAULT_TRAVEL_ACCELERATION 300 // X, Y, Z acceleration for travel (non printing) moves +#elif (ENABLED(MachineCR10Std)) + #define DEFAULT_MAX_FEEDRATE { 500, 500, 10, 75 } + #define DEFAULT_MAX_ACCELERATION { 1500, 1500, 100, 75 } + #define DEFAULT_ACCELERATION 750 // X, Y, Z and E acceleration for printing moves + #define DEFAULT_RETRACT_ACCELERATION 1000 // E acceleration for retracts + #define DEFAULT_TRAVEL_ACCELERATION 300 // X, Y, Z acceleration for travel (non printing) moves +#elif ENABLED( MachineS4) + #define DEFAULT_MAX_FEEDRATE { 500, 400, 10, 75 } + #define DEFAULT_MAX_ACCELERATION { 1000, 750, 100, 75 } + #define DEFAULT_ACCELERATION 750 // X, Y, Z and E acceleration for printing moves + #define DEFAULT_RETRACT_ACCELERATION 1000 // E acceleration for retracts + #define DEFAULT_TRAVEL_ACCELERATION 300 // X, Y, Z acceleration for travel (non printing) moves +#elif ANY(MachineS5, MachineCR10Max) + #define DEFAULT_MAX_FEEDRATE { 500, 400, 15, 75 } + #define DEFAULT_MAX_ACCELERATION { 1000, 700, 100, 75 } + #define DEFAULT_ACCELERATION 500 // X, Y, Z and E acceleration for printing moves + #define DEFAULT_RETRACT_ACCELERATION 1000 // E acceleration for retracts + #define DEFAULT_TRAVEL_ACCELERATION 300 // X, Y, Z acceleration for travel (non printing) moves +#elif ENABLED(MachineCR2020) + #define DEFAULT_MAX_FEEDRATE { 750, 750, 10, 75 } + #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 75 } + #define DEFAULT_ACCELERATION 750 // X, Y, Z and E acceleration for printing moves + #define DEFAULT_RETRACT_ACCELERATION 1000 // E acceleration for retracts + #define DEFAULT_TRAVEL_ACCELERATION 300 // X, Y, Z acceleration for travel (non printing) moves +#endif //#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 #if ENABLED(LIMITED_MAX_FR_EDITING) - #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits + #define MAX_FEEDRATE_EDIT_VALUES { 1000, 1000, 25, 150 } // ...or, set your own edit limits #endif /** @@ -767,11 +1492,10 @@ * Override with M201 * X, Y, Z, E0 [, E1[, E2...]] */ -#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } //#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 #if ENABLED(LIMITED_MAX_ACCEL_EDITING) - #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits + #define MAX_ACCEL_EDIT_VALUES { 2000, 2000, 250, 500 } // ...or, set your own edit limits #endif /** @@ -782,9 +1506,6 @@ * M204 R Retract Acceleration * M204 T Travel Acceleration */ -#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E acceleration for printing moves -#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts -#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves /** * Default Jerk limits (mm/s) @@ -794,10 +1515,10 @@ * When changing speed and direction, if the difference is less than the * value set here, it may happen instantaneously. */ -//#define CLASSIC_JERK +#define CLASSIC_JERK #if ENABLED(CLASSIC_JERK) #define DEFAULT_XJERK 10.0 - #define DEFAULT_YJERK 10.0 + #define DEFAULT_YJERK 5.0 #define DEFAULT_ZJERK 0.3 //#define TRAVEL_EXTRA_XYJERK 0.0 // Additional jerk allowance for all travel moves @@ -831,7 +1552,9 @@ * * See https://github.com/synthetos/TinyG/wiki/Jerk-Controlled-Motion-Explained */ -//#define S_CURVE_ACCELERATION +#if NONE(MachineCR10Orig, SKRMiniE3V2) || ENABLED(MelziHostOnly) + #define S_CURVE_ACCELERATION +#endif //=========================================================================== //============================= Z Probe Options ============================= @@ -850,7 +1573,7 @@ #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN // Force the use of the probe for Z-axis homing -//#define USE_PROBE_FOR_Z_HOMING +#define USE_PROBE_FOR_Z_HOMING /** * Z_MIN_PROBE_PIN @@ -881,14 +1604,18 @@ * Use G29 repeatedly, adjusting the Z height at each point with movement commands * or (with LCD_BED_LEVELING) the LCD controller. */ -//#define PROBE_MANUALLY -//#define MANUAL_PROBE_START_Z 0.2 +#if DISABLED(ABL_EZABL, ABL_NCSW, ABL_BLTOUCH, ABL_TOUCH_MI) + #define PROBE_MANUALLY + #define MANUAL_PROBE_START_Z 0.2 +#endif /** * A Fix-Mounted Probe either doesn't deploy or needs manual deployment. * (e.g., an inductive probe or a nozzle-based probe-switch.) */ -//#define FIX_MOUNTED_PROBE +#if ANY(ABL_EZABL, ABL_NCSW) + #define FIX_MOUNTED_PROBE +#endif /** * Use the nozzle as the probe, as with a conductive @@ -905,7 +1632,9 @@ /** * The BLTouch probe uses a Hall effect sensor and emulates a servo. */ -//#define BLTOUCH +#if ENABLED(ABL_BLTOUCH) + #define BLTOUCH +#endif /** * Pressure sensor with a BLTouch-like interface @@ -922,7 +1651,9 @@ * Also requires: BABYSTEPPING, BABYSTEP_ZPROBE_OFFSET, Z_SAFE_HOMING, * and a minimum Z_HOMING_HEIGHT of 10. */ -//#define TOUCH_MI_PROBE +#if ENABLED(ABL_TOUCH_MI) + #define TOUCH_MI_PROBE +#endif #if ENABLED(TOUCH_MI_PROBE) #define TOUCH_MI_RETRACT_Z 0.5 // Height at which the probe retracts //#define TOUCH_MI_DEPLOY_XPOS (X_MAX_BED + 2) // For a magnet on the right side of the bed @@ -930,7 +1661,15 @@ #endif // A probe that is deployed and stowed with a solenoid pin (SOL1_PIN) -//#define SOLENOID_PROBE +#if ENABLED(ABL_BLTOUCH) + #if DISABLED(MachineCR10Orig) + #define PROBING_FANS_OFF // Turn fans off when probing + #endif + + #if ENABLED(MachineEnder4) && NONE(SKR13, SKR14, SKR14Turbo, SKRPRO11) + #define SOLENOID_PROBE PIN_15 + #endif +#endif // A sled-mounted probe like those designed by Charles Bell. //#define Z_PROBE_SLED @@ -963,49 +1702,82 @@ // /** - * Nozzle-to-Probe offsets { X, Y, Z } + * Z Probe to nozzle (X,Y) offset, relative to (0, 0). * - * - Use a caliper or ruler to measure the distance from the tip of - * the Nozzle to the center-point of the Probe in the X and Y axes. - * - For the Z offset use your best known value and adjust at runtime. - * - Probe Offsets can be tuned at runtime with 'M851', LCD menus, babystepping, etc. + * In the following example the X and Y offsets are both positive: * - * Assuming the typical work area orientation: - * - Probe to RIGHT of the Nozzle has a Positive X offset - * - Probe to LEFT of the Nozzle has a Negative X offset - * - Probe in BACK of the Nozzle has a Positive Y offset - * - Probe in FRONT of the Nozzle has a Negative Y offset - * - * Some examples: - * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, -1 } // Example "1" - * #define NOZZLE_TO_PROBE_OFFSET {-10, 5, -1 } // Example "2" - * #define NOZZLE_TO_PROBE_OFFSET { 5, -5, -1 } // Example "3" - * #define NOZZLE_TO_PROBE_OFFSET {-15,-10, -1 } // Example "4" + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ - * | [+] | - * L | 1 | R <-- Example "1" (right+, back+) - * E | 2 | I <-- Example "2" ( left-, back+) - * F |[-] N [+]| G <-- Nozzle - * T | 3 | H <-- Example "3" (right+, front-) - * | 4 | T <-- Example "4" ( left-, front-) - * | [-] | + * | | + * L | (+) P | R <-- probe (20,20) + * E | | I + * F | (-) N (+) | G <-- nozzle (10,10) + * T | | H + * | (-) | T + * | | * O-- FRONT --+ + * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } +#if ENABLED(MachineCRXPro, HotendStock, ABL_BLTOUCH) + #define NOZZLE_TO_PROBE_OFFSET { 48, 3, 0 } +#elif ENABLED(MachineCRX, HotendStock) + #if ENABLED(ABL_BLTOUCH) + #define NOZZLE_TO_PROBE_OFFSET { -22, -45, 0 } + #elif ANY(ABL_EZABL, ABL_NCSW) + #define NOZZLE_TO_PROBE_OFFSET { -44, -10, 0 } + #endif +#elif ANY(MachineCR10SPro, MachineCR10Max) && ENABLED(HotendStock) && DISABLED(MicroswissDirectDrive) + #define NOZZLE_TO_PROBE_OFFSET { -27, 0, 0 } +#elif (ANY(ABL_BLTOUCH, ABL_EZABL,ABL_NCSW) && ENABLED(E3DHemera)) + #define NOZZLE_TO_PROBE_OFFSET { -40, 0, 0 } +#elif ENABLED(MachineCR10SV2) + #if ENABLED(ABL_BLTOUCH) + #define NOZZLE_TO_PROBE_OFFSET { 45, 7, 0 } + #elif ENABLED(ABL_EZABL) || ENABLED(ABL_NCSW) + #define NOZZLE_TO_PROBE_OFFSET { 45, 7, 0 } + #endif +#elif ENABLED(MicroswissDirectDrive) && ENABLED(ABL_BLTOUCH) + #define NOZZLE_TO_PROBE_OFFSET { -45, -5, 0 } +#elif (ENABLED(ABL_BLTOUCH) && ENABLED(HotendStock)) + #define NOZZLE_TO_PROBE_OFFSET { -41, -8, 0 } +#elif ((ANY(ABL_EZABL, ABL_NCSW)) && ENABLED(HotendStock)) + #if ENABLED(CREALITY_ABL_MOUNT) + #define NOZZLE_TO_PROBE_OFFSET { -55, -15, 0 } + #else + #define NOZZLE_TO_PROBE_OFFSET { -44, -10, 0 } + #endif +#elif (ANY(ABL_BLTOUCH, ABL_EZABL,ABL_NCSW) && ANY(HotendE3D)) + #if ENABLED(E3D_DUALFAN_MOUNT) + #if ENABLED(E3D_PROBEMOUNT_LEFT) + #define NOZZLE_TO_PROBE_OFFSET { -63, 5, 0 } + #else + #define NOZZLE_TO_PROBE_OFFSET { 63, 5, 0 } + #endif + #else + #define NOZZLE_TO_PROBE_OFFSET { 32, 5, 0 } + #endif +#endif + // Most probes should stay away from the edges of the bed, but // with NOZZLE_AS_PROBE this can be negative for a wider probing area. -#define PROBING_MARGIN 10 +#if ENABLED(ABL_BLTOUCH) + #define PROBING_MARGIN 3 +#else + #define PROBING_MARGIN 10 +#endif -// X and Y axis travel speed (mm/min) between probes -#define XY_PROBE_SPEED (133*60) +// X and Y axis travel speed (mm/m) between probes +#define XY_PROBE_SPEED 10000 // Feedrate (mm/min) for the first approach when double-probing (MULTIPLE_PROBING == 2) #define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z // Feedrate (mm/min) for the "accurate" probe of each point -#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2) +#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST) /** * Multiple Probing @@ -1016,7 +1788,9 @@ * A total of 2 does fast/slow probes with a weighted average. * A total of 3 or more adds more slow probes, taking the average. */ -//#define MULTIPLE_PROBING 2 +#if DISABLED(MachineCR10Orig) || ENABLED(MelziHostOnly) + #define MULTIPLE_PROBING 2 +#endif //#define EXTRA_PROBING 1 /** @@ -1033,19 +1807,27 @@ * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. * But: `M851 Z+1` with a CLEARANCE of 2 => 2mm from bed to nozzle. */ -#define Z_CLEARANCE_DEPLOY_PROBE 10 // Z Clearance for Deploy/Stow +#if ENABLED(MachineEnder5) + #define Z_CLEARANCE_DEPLOY_PROBE 0 // Z Clearance for Deploy/Stow +#else + #define Z_CLEARANCE_DEPLOY_PROBE 10 // Z Clearance for Deploy/Stow +#endif #define Z_CLEARANCE_BETWEEN_PROBES 5 // Z Clearance between probe points #define Z_CLEARANCE_MULTI_PROBE 5 // Z Clearance between multiple probes -//#define Z_AFTER_PROBING 5 // Z position after probing is done +#if DISABLED(TOUCH_MI_PROBE) + #define Z_AFTER_PROBING 5 // Z position after probing is done +#endif -#define Z_PROBE_LOW_POINT -2 // Farthest distance below the trigger-point to go before stopping +#define Z_PROBE_LOW_POINT -3 // Farthest distance below the trigger-point to go before stopping // For M851 give a range for adjusting the Z probe offset -#define Z_PROBE_OFFSET_RANGE_MIN -20 -#define Z_PROBE_OFFSET_RANGE_MAX 20 +#define Z_PROBE_OFFSET_RANGE_MIN -9 +#define Z_PROBE_OFFSET_RANGE_MAX 9 // Enable the M48 repeatability test to test probe accuracy -//#define Z_MIN_PROBE_REPEATABILITY_TEST +#if ANY(ABL_EZABL, ABL_BLTOUCH, ABL_NCSW, ABL_TOUCH_MI) && NONE(MachineCR10Orig, SKRMiniE3V2) + #define Z_MIN_PROBE_REPEATABILITY_TEST +#endif // Before deploy/stow pause for user confirmation //#define PAUSE_BEFORE_DEPLOY_STOW @@ -1060,7 +1842,9 @@ * These options are most useful for the BLTouch probe, but may also improve * readings with inductive probes and piezo sensors. */ -//#define PROBING_HEATERS_OFF // Turn heaters off when probing +#if ((ENABLED(ABL_EZABL) || ENABLED(ABL_NCSW)) && ENABLED(BED_AC)) && DISABLED(MachineCR10Orig) + #define PROBING_HEATERS_OFF // Turn heaters off when probing +#endif #if ENABLED(PROBING_HEATERS_OFF) //#define WAIT_FOR_BED_HEATER // Wait for bed to heat back up between probes (to improve accuracy) #endif @@ -1075,32 +1859,71 @@ #define Z_ENABLE_ON 0 #define E_ENABLE_ON 0 // For all extruders -// Disable axis steppers immediately when they're not being stepped. +// Disables axis stepper immediately when it's not being used. // WARNING: When motors turn off there is a chance of losing position accuracy! #define DISABLE_X false #define DISABLE_Y false #define DISABLE_Z false -// Turn off the display blinking that warns about possible accuracy reduction +// Warn on display about possibly reduced accuracy //#define DISABLE_REDUCED_ACCURACY_WARNING // @section extruder -#define DISABLE_E false // Disable the extruder when not stepping +#define DISABLE_E false // For all extruders #define DISABLE_INACTIVE_EXTRUDER // Keep only the active extruder enabled // @section machine // Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way. -#define INVERT_X_DIR false -#define INVERT_Y_DIR true -#define INVERT_Z_DIR false + +#if(ANY(MachineEnder4, MachineEnder5)) + #define INVERT_X_DIR true + #define INVERT_Y_DIR true + #define INVERT_Z_DIR true + #if(ENABLED(E3DTitan)) + #define INVERT_E0_DIR false + #define INVERT_E1_DIR true + #else + #define INVERT_E0_DIR true + #define INVERT_E1_DIR false + #endif +#elif ANY(MachineCR10Orig, SKR13, SKR14, SKR14Turbo, SKRMiniE3V2) && DISABLED(SKR_ReverseSteppers) + #define INVERT_X_DIR true + #define INVERT_Y_DIR true + #define INVERT_Z_DIR false + #if(ENABLED(E3DTitan)) + #define INVERT_E0_DIR false + #define INVERT_E1_DIR true + #else + #define INVERT_E0_DIR true + #define INVERT_E1_DIR false + #endif +#else + #define INVERT_X_DIR false + #if ANY(MachineCRX,MachineCR10SPro, MachineCR10Max, MachineCR2020) + #define INVERT_Y_DIR true + #else + #define INVERT_Y_DIR false + #endif + #if ANY(MachineEnder5Plus, MachineCR2020) + #define INVERT_Z_DIR false + #else + #define INVERT_Z_DIR true + #endif + #if ANY(E3DTitan, MachineCR2020) + #define INVERT_E0_DIR true + #define INVERT_E1_DIR false + #else + #define INVERT_E0_DIR false + #define INVERT_E1_DIR true + #endif +#endif // @section extruder // For direct drive extruder v9 set to true, for geared extruder set to false. -#define INVERT_E0_DIR false -#define INVERT_E1_DIR false + #define INVERT_E2_DIR false #define INVERT_E3_DIR false #define INVERT_E4_DIR false @@ -1110,34 +1933,163 @@ // @section homing -//#define NO_MOTION_BEFORE_HOMING // Inhibit movement until all axes have been homed +//#define NO_MOTION_BEFORE_HOMING // Inhibit movement until all axes have been homed -//#define UNKNOWN_Z_NO_RAISE // Don't raise Z (lower the bed) if Z is "unknown." For beds that fall when Z is powered off. - -//#define Z_HOMING_HEIGHT 4 // (mm) Minimal Z height before homing (G28) for Z clearance above the bed, clamps, ... - // Be sure to have this much clearance over your Z_MAX_POS to prevent grinding. +//#define UNKNOWN_Z_NO_RAISE // Don't raise Z (lower the bed) if Z is "unknown." For beds that fall when Z is powered off. +#if ANY(MachineEnder5) + #define Z_HOMING_HEIGHT 0 +#elif ENABLED(TOUCH_MI_PROBE) + #define Z_HOMING_HEIGHT 10 +#else + #define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ... +#endif //#define Z_AFTER_HOMING 10 // (mm) Height to move to after homing Z // Direction of endstops when homing; 1=MAX, -1=MIN // :[-1,1] -#define X_HOME_DIR -1 -#define Y_HOME_DIR -1 -#define Z_HOME_DIR -1 +#if ANY(MachineEnder5, MachineEnder5Plus) + #define X_HOME_DIR 1 + #define Y_HOME_DIR 1 + #define Z_HOME_DIR -1 +#else + #define X_HOME_DIR -1 + #define Y_HOME_DIR -1 + #define Z_HOME_DIR -1 +#endif // @section machine // The size of the print bed -#define X_BED_SIZE 200 -#define Y_BED_SIZE 200 + + #if ENABLED(MachineMini) + #define X_BED_SIZE 300 + #define Y_BED_SIZE 220 + #define Z_MAX_POS 300 + #define X_MAX_POS 300 + #define Y_MAX_POS 220 + #define ClipClearance 15 + #elif ENABLED(MachineEnder2) + #define X_BED_SIZE 150 + #define Y_BED_SIZE 150 + #define Z_MAX_POS 200 + #define X_MAX_POS 150 + #define Y_MAX_POS 150 + #define ClipClearance 15 + #elif ANY(MachineEnder3, MachineEnder3V2) + #define X_BED_SIZE 230 + #define Y_BED_SIZE 230 + #define Z_MAX_POS 250 + #define X_MAX_POS 250 + #define Y_MAX_POS 250 + #define ClipClearance 15 + #elif(ANY(MachineEnder4, MachineEnder5)) + #define X_BED_SIZE 220 + #define Y_BED_SIZE 220 + #define Z_MAX_POS 300 + #define X_MAX_POS 230 + #define Y_MAX_POS 225 + #define ClipClearance 15 + #elif ENABLED(MachineEnder5Plus) + #define Y_BED_SIZE 360 + #define Z_MAX_POS 400 + #if ENABLED(E3DHemera) + #define X_BED_SIZE 352 + #define X_MAX_POS 352 + #else + #define X_BED_SIZE 360 + #define X_MAX_POS 360 + #endif + #define Y_MAX_POS 360 + #define ClipClearance 25 + #elif ENABLED(MachineCR20) + #define X_BED_SIZE 230 + #define Y_BED_SIZE 230 + #define Z_MAX_POS 250 + #define X_MAX_POS 240 + #define Y_MAX_POS 240 + #define ClipClearance 15 + #elif ENABLED(MachineCRX) + #define X_BED_SIZE 300 + #define Y_BED_SIZE 300 + #define Z_MAX_POS 400 + #define X_MAX_POS 315 + #define Y_MAX_POS 308 + #define ClipClearance 15 + #elif ENABLED(MachineCR10SProV2) + #define X_BED_SIZE 300 + #define Y_BED_SIZE 300 + #define Z_MAX_POS 400 + #define X_MAX_POS 315 + #define Y_MAX_POS 310 + #define ClipClearance 5 + #elif ENABLED(MachineCR10SPro) + #define X_BED_SIZE 300 + #define Y_BED_SIZE 300 + #define Z_MAX_POS 400 + #define X_MAX_POS 315 + #define Y_MAX_POS 310 + #define ClipClearance 10 + #elif ENABLED(MachineCR10Std) + #define X_BED_SIZE 300 + #define Y_BED_SIZE 300 + #define Z_MAX_POS 400 + #define X_MAX_POS 315 + #define Y_MAX_POS 310 + #define ClipClearance 15 + #elif ENABLED( MachineS4) + #define X_BED_SIZE 400 + #define Y_BED_SIZE 400 + #define Z_MAX_POS 400 + #define X_MAX_POS 410 + #define Y_MAX_POS 400 + #define ClipClearance 15 + #elif ENABLED(MachineCR10Max) + #define X_BED_SIZE 450 + #define Y_BED_SIZE 450 + #define Z_MAX_POS 470 + #define X_MAX_POS 450 + #define Y_MAX_POS 450 + #define ClipClearance 15 + #elif ENABLED(MachineS5) + #define X_BED_SIZE 500 + #define Y_BED_SIZE 500 + #define Z_MAX_POS 500 + #define X_MAX_POS 510 + #define Y_MAX_POS 500 + #define ClipClearance 20 + #elif ENABLED(MachineCR2020) + #define X_BED_SIZE 200 + #define Y_BED_SIZE 202.5 + #define Z_MAX_POS 210 + #define X_MAX_POS 200 + #define Y_MAX_POS 202.5 + #define ClipClearance 15 + #endif + + #ifndef ClipClearance + #define ClipClearance 0 + #endif + // Travel limits (mm) after homing, corresponding to endstop positions. -#define X_MIN_POS 0 -#define Y_MIN_POS 0 +#if ENABLED(MicroswissDirectDrive) + #define X_MIN_POS -15 + #define Y_MIN_POS -10 +#elif ENABLED(TOUCH_MI_PROBE) + #define X_MIN_POS -4 + #define Y_MIN_POS -10 +#else + #define X_MIN_POS 0 + #define Y_MIN_POS 0 +#endif #define Z_MIN_POS 0 -#define X_MAX_POS X_BED_SIZE -#define Y_MAX_POS Y_BED_SIZE -#define Z_MAX_POS 200 +#ifndef X_MAX_POS + #define X_MAX_POS X_BED_SIZE +#endif +#ifndef Y_MAX_POS + #define Y_MAX_POS Y_BED_SIZE +#endif /** * Software Endstops @@ -1163,9 +2115,10 @@ #define MAX_SOFTWARE_ENDSTOP_Y #define MAX_SOFTWARE_ENDSTOP_Z #endif - -#if EITHER(MIN_SOFTWARE_ENDSTOPS, MAX_SOFTWARE_ENDSTOPS) - //#define SOFT_ENDSTOPS_MENU_ITEM // Enable/Disable software endstops from the LCD +#if(NONE(MachineCR10Orig, LowMemoryBoard)) + #if EITHER(MIN_SOFTWARE_ENDSTOPS, MAX_SOFTWARE_ENDSTOPS) + #define SOFT_ENDSTOPS_MENU_ITEM // Enable/Disable software endstops from the LCD + #endif #endif /** @@ -1181,13 +2134,26 @@ * RAMPS-based boards use SERVO3_PIN for the first runout sensor. * For other boards you may need to define FIL_RUNOUT_PIN, FIL_RUNOUT2_PIN, etc. */ -//#define FILAMENT_RUNOUT_SENSOR +#if (NONE(MachineCR10Orig, MachineCR20, MachineEnder3, MachineEnder3V2, MachineEnder4, MachineEnder5, MachineCRX, Melzi_To_SBoardUpgrade) || ANY(AddonFilSensor, lerdgeFilSensor, DualFilSensors )) + #define FILAMENT_RUNOUT_SENSOR +#endif #if ENABLED(FILAMENT_RUNOUT_SENSOR) #define FIL_RUNOUT_ENABLED_DEFAULT true // Enable the sensor on startup. Override with M412 followed by M500. - #define NUM_RUNOUT_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each. - #define FIL_RUNOUT_STATE LOW // Pin state indicating that filament is NOT present. - #define FIL_RUNOUT_PULLUP // Use internal pullup for filament runout pins. - //#define FIL_RUNOUT_PULLDOWN // Use internal pulldown for filament runout pins. + #if ENABLED(DualFilSensors) + #if DISABLED(SKR13, SKR14, SKR14Turbo, SKRPRO11) + #define NUM_RUNOUT_SENSORS 2 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each. + #endif + #define FIL_RUNOUT2_PIN 15 + #else + #define NUM_RUNOUT_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each. + #endif + #if ENABLED(lerdgeFilSensor) + #define FIL_RUNOUT_STATE LOW // set to true to invert the logic of the sensor. + #else + #define FIL_RUNOUT_STATE HIGH // set to true to invert the logic of the sensor. + #endif + #define FIL_RUNOUT_PULLUP // Use internal pullup for filament runout pins. + //#define FIL_RUNOUT_PULLDOWN // Use internal pulldown for filament runout pins. // Set one or more commands to execute on filament runout. // (After 'M412 H' Marlin will ask the host to handle the process.) @@ -1196,13 +2162,21 @@ // After a runout is detected, continue printing this length of filament // before executing the runout script. Useful for a sensor at the end of // a feed tube. Requires 4 bytes SRAM per sensor, plus 4 bytes overhead. - //#define FILAMENT_RUNOUT_DISTANCE_MM 25 + #if ENABLED(FilamentEncoder) + #define FILAMENT_RUNOUT_DISTANCE_MM 12 + #elif ANY(MachineEnder5Plus, MachineCR10SPro, MachineCR10SProV2) + #define FILAMENT_RUNOUT_DISTANCE_MM 10 + #else + #define FILAMENT_RUNOUT_DISTANCE_MM 5 + #endif #ifdef FILAMENT_RUNOUT_DISTANCE_MM // Enable this option to use an encoder disc that toggles the runout pin // as the filament moves. (Be sure to set FILAMENT_RUNOUT_DISTANCE_MM // large enough to avoid false positives.) - //#define FILAMENT_MOTION_SENSOR + #if ENABLED(FilamentEncoder) + #define FILAMENT_MOTION_SENSOR + #endif #endif #endif @@ -1246,15 +2220,20 @@ */ //#define AUTO_BED_LEVELING_3POINT //#define AUTO_BED_LEVELING_LINEAR -//#define AUTO_BED_LEVELING_BILINEAR -//#define AUTO_BED_LEVELING_UBL -//#define MESH_BED_LEVELING - +#if ANY(ABL_EZABL, ABL_BLTOUCH, ABL_NCSW, ABL_TOUCH_MI) + #if ENABLED(ABL_UBL) + #define AUTO_BED_LEVELING_UBL + #elif ENABLED(ABL_BI) + #define AUTO_BED_LEVELING_BILINEAR + #endif +#elif !BOTH(OrigLA, MachineCR10Orig) + #define MESH_BED_LEVELING +#endif /** * Normally G28 leaves leveling disabled on completion. Enable * this option to have G28 restore the prior leveling state. */ -//#define RESTORE_LEVELING_AFTER_G28 +#define RESTORE_LEVELING_AFTER_G28 /** * Enable detailed logging of G28, G29, M48, etc. @@ -1267,18 +2246,24 @@ // Gradually reduce leveling correction until a set height is reached, // at which point movement will be level to the machine's XY plane. // The height can be set with M420 Z - #define ENABLE_LEVELING_FADE_HEIGHT + #if NONE(MachineCR10Orig, SKRMiniE3V2) + #define ENABLE_LEVELING_FADE_HEIGHT + #endif // For Cartesian machines, instead of dividing moves on mesh boundaries, // split up moves into short segments like a Delta. This follows the // contours of the bed more closely than edge-to-edge straight moves. - #define SEGMENT_LEVELED_MOVES - #define LEVELED_SEGMENT_LENGTH 5.0 // (mm) Length of all segments (except the last one) + #if DISABLED(ABL_UBL) + #define SEGMENT_LEVELED_MOVES + #define LEVELED_SEGMENT_LENGTH 20.0 // (mm) Length of all segments (except the last one) + #endif /** * Enable the G26 Mesh Validation Pattern tool. */ - //#define G26_MESH_VALIDATION +#if NONE(MachineCR10Orig, SKRMiniE3V2) + #define G26_MESH_VALIDATION // Enable G26 mesh validation +#endif #if ENABLED(G26_MESH_VALIDATION) #define MESH_TEST_NOZZLE_SIZE 0.4 // (mm) Diameter of primary nozzle. #define MESH_TEST_LAYER_HEIGHT 0.2 // (mm) Default layer height for the G26 Mesh Validation Tool. @@ -1290,11 +2275,26 @@ #endif +#if ENABLED(MeshFast) +#define GRID_MAX_POINTS_X 3 +#elif ENABLED(MeshStd) + #if ENABLED(ABL_UBL) + #define GRID_MAX_POINTS_X 6 + #else + #define GRID_MAX_POINTS_X 5 + #endif +#elif ENABLED( MeshFine) + #define GRID_MAX_POINTS_X 8 +#elif ENABLED(MeshExtreme) + #define GRID_MAX_POINTS_X 15 +#else + #define GRID_MAX_POINTS_X 3 +#endif + #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X + #if EITHER(AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_BILINEAR) // Set the number of grid points per dimension. - #define GRID_MAX_POINTS_X 3 - #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST @@ -1303,7 +2303,7 @@ // Beyond the probed grid, continue the implied tilt? // Default is to maintain the height of the nearest edge. - //#define EXTRAPOLATE_BEYOND_GRID + #define EXTRAPOLATE_BEYOND_GRID // // Experimental Subdivision of the grid by Catmull-Rom method. @@ -1322,17 +2322,14 @@ //=========================================================================== //========================= Unified Bed Leveling ============================ //=========================================================================== - - //#define MESH_EDIT_GFX_OVERLAY // Display a graphics overlay while editing the mesh - - #define MESH_INSET 1 // Set Mesh bounds as an inset region of the bed - #define GRID_MAX_POINTS_X 10 // Don't use more than 15 points per axis, implementation limited. - #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - + #define MESH_INSET 1 + #if NONE(MachineCR10SPro, MachineCRX, MachineEnder5Plus, MachineCR10Max, MachineEnder4, OrigLCD) || ENABLED(GraphicLCD) + #define MESH_EDIT_GFX_OVERLAY // Display a graphics overlay while editing the mesh + #endif #define UBL_MESH_EDIT_MOVES_Z // Sophisticated users prefer no movement of nozzle #define UBL_SAVE_ACTIVE_ON_M500 // Save the currently active mesh in the current slot on M500 - //#define UBL_Z_RAISE_WHEN_OFF_MESH 2.5 // When the nozzle is off the mesh, this value is used + #define UBL_Z_RAISE_WHEN_OFF_MESH 0 // When the nozzle is off the mesh, this value is used // as the Z-Height correction value. #elif ENABLED(MESH_BED_LEVELING) @@ -1341,9 +2338,15 @@ //=================================== Mesh ================================== //=========================================================================== - #define MESH_INSET 10 // Set Mesh bounds as an inset region of the bed - #define GRID_MAX_POINTS_X 3 // Don't use more than 7 points per axis, implementation limited. - #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X +#if(ENABLED(MachineEnder3)) + #define MESH_INSET 40 // Set Mesh bounds as an inset region of the bed +#elif ENABLED(MachineCR10SV2) + #define MESH_INSET 30 +#else + #define MESH_INSET 20 // Set Mesh bounds as an inset region of the bed +#endif + //#define GRID_MAX_POINTS_X 3 // Don't use more than 7 points per axis, implementation limited. + //#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest Z at Z_MIN_POS @@ -1353,22 +2356,27 @@ * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. */ -//#define LCD_BED_LEVELING +#if NONE(ABL_EZABL, ABL_NCSW, ABL_BLTOUCH, ABL_TOUCH_MI, SKRMiniE3V2, MachineEnder3V2) && (DISABLED(MachineCRX) || ENABLED(GraphicLCD)) + #define LCD_BED_LEVELING +#endif #if ENABLED(LCD_BED_LEVELING) #define MESH_EDIT_Z_STEP 0.025 // (mm) Step size while manually probing Z axis. - #define LCD_PROBE_Z_RANGE 4 // (mm) Z Range centered on Z_MIN_POS for LCD Z adjustment - //#define MESH_EDIT_MENU // Add a menu to edit mesh points + #define LCD_PROBE_Z_RANGE 8 // (mm) Z Range centered on Z_MIN_POS for LCD Z adjustment + #if NONE(MachineCR10Orig, SKRMiniE3V2) + #define MESH_EDIT_MENU // Add a menu to edit mesh points + #endif #endif +#if NONE(SolidBedMounts, SKRMiniE3V2, MachineCR10Orig) // Add a menu item to move between bed corners for manual bed adjustment -//#define LEVEL_BED_CORNERS - + #define LEVEL_BED_CORNERS +#endif #if ENABLED(LEVEL_BED_CORNERS) - #define LEVEL_CORNERS_INSET_LFRB { 30, 30, 30, 30 } // (mm) Left, Front, Right, Back insets + #define LEVEL_CORNERS_INSET_LFRB { 22, 22, 22, 22 } // (mm) Left, Front, Right, Back insets #define LEVEL_CORNERS_HEIGHT 0.0 // (mm) Z height of nozzle at leveling points #define LEVEL_CORNERS_Z_HOP 4.0 // (mm) Z height of nozzle between leveling points - //#define LEVEL_CENTER_TOO // Move to the center after the last corner + #define LEVEL_CENTER_TOO // Move to the center after the last corner #endif /** @@ -1397,11 +2405,13 @@ // - Move the Z probe (or nozzle) to a defined XY point before Z Homing. // - Prevent Z homing when the Z probe is outside bed area. // -//#define Z_SAFE_HOMING +#if ANY(ABL_EZABL, ABL_NCSW, ABL_BLTOUCH, ABL_TOUCH_MI) + #define Z_SAFE_HOMING +#endif #if ENABLED(Z_SAFE_HOMING) - #define Z_SAFE_HOMING_X_POINT X_CENTER // X point for Z homing - #define Z_SAFE_HOMING_Y_POINT Y_CENTER // Y point for Z homing + #define Z_SAFE_HOMING_X_POINT (X_BED_SIZE / 2) // X point for Z homing + #define Z_SAFE_HOMING_Y_POINT (Y_BED_SIZE / 2) // Y point for Z homing #endif // Homing speeds (mm/min) @@ -1483,12 +2493,15 @@ * M501 - Read settings from EEPROM. (i.e., Throw away unsaved changes) * M502 - Revert settings to "factory" defaults. (Follow with M500 to init the EEPROM.) */ -//#define EEPROM_SETTINGS // Persistent storage with M500 and M501 -//#define DISABLE_M503 // Saves ~2700 bytes of PROGMEM. Disable for release! -#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM. +#define EEPROM_SETTINGS // Persistent storage with M500 and M501 +#if DISABLED(LowMemoryBoard) + #define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM. +#else + #define DISABLE_M503 // Saves ~2700 bytes of PROGMEM. Disable for release! +#endif #define EEPROM_BOOT_SILENT // Keep M503 quiet and only give errors during first load #if ENABLED(EEPROM_SETTINGS) - //#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors. + #define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors. #endif // @@ -1497,10 +2510,11 @@ // When enabled Marlin will send a busy status message to the host // every couple of seconds when it can't accept commands. // -#define HOST_KEEPALIVE_FEATURE // Disable this if your host doesn't like keepalive messages -#define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113. -#define BUSY_WHILE_HEATING // Some hosts require "busy" messages even during heating - +#if NONE(MachineCR10Orig, MelziHostOnly) + #define HOST_KEEPALIVE_FEATURE // Disable this if your host doesn't like keepalive messages + #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113. + #define BUSY_WHILE_HEATING // Some hosts require "busy" messages even during heating +#endif // // G20/G21 Inch mode support // @@ -1535,16 +2549,21 @@ * P1 Raise the nozzle always to Z-park height. * P2 Raise the nozzle by Z-park amount, limited to Z_MAX_POS. */ -//#define NOZZLE_PARK_FEATURE +#define NOZZLE_PARK_FEATURE #if ENABLED(NOZZLE_PARK_FEATURE) - // Specify a park position as { X, Y, Z_raise } - #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 } +// Specify a park position as { X, Y, Z } +#if(ENABLED(MachineEnder2)) + #define NOZZLE_PARK_POINT { (0), (0), 10 } +#else + #define NOZZLE_PARK_POINT { (50), (10), 10 } +#endif + //#define NOZZLE_PARK_X_ONLY // X move only is required to park //#define NOZZLE_PARK_Y_ONLY // Y move only is required to park #define NOZZLE_PARK_Z_RAISE_MIN 2 // (mm) Always raise Z by at least this distance - #define NOZZLE_PARK_XY_FEEDRATE 100 // (mm/s) X and Y axes feedrate (also used for delta Z axis) - #define NOZZLE_PARK_Z_FEEDRATE 5 // (mm/s) Z axis feedrate (not used for delta printers) +#define NOZZLE_PARK_XY_FEEDRATE 50 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) +#define NOZZLE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) #endif /** @@ -1584,19 +2603,21 @@ * Caveats: The ending Z should be the same as starting Z. * Attention: EXPERIMENTAL. G-code arguments may change. */ -//#define NOZZLE_CLEAN_FEATURE - +#if ANY(MachineCRX, PurgeBucket) + #define NOZZLE_CLEAN_FEATURE +#endif #if ENABLED(NOZZLE_CLEAN_FEATURE) // Default number of pattern repetitions - #define NOZZLE_CLEAN_STROKES 12 + #define NOZZLE_CLEAN_STROKES 5 // Default number of triangles #define NOZZLE_CLEAN_TRIANGLES 3 // Specify positions for each tool as { { X, Y, Z }, { X, Y, Z } } // Dual hotend system may use { { -20, (Y_BED_SIZE / 2), (Z_MIN_POS + 1) }, { 420, (Y_BED_SIZE / 2), (Z_MIN_POS + 1) }} - #define NOZZLE_CLEAN_START_POINT { { 30, 30, (Z_MIN_POS + 1) } } - #define NOZZLE_CLEAN_END_POINT { { 100, 60, (Z_MIN_POS + 1) } } + + #define NOZZLE_CLEAN_START_POINT { X_MAX_POS, 40, (Z_MIN_POS + 1)} + #define NOZZLE_CLEAN_END_POINT { (X_MAX_POS - 10), 40, (Z_MIN_POS + 1) } // Circular pattern radius #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5 @@ -1609,7 +2630,7 @@ #define NOZZLE_CLEAN_GOBACK // For a purge/clean station that's always at the gantry height (thus no Z move) - //#define NOZZLE_CLEAN_NO_Z + #define NOZZLE_CLEAN_NO_Z // For a purge/clean station mounted on the X axis //#define NOZZLE_CLEAN_NO_Y @@ -1634,8 +2655,9 @@ * M76 - Pause the print job timer * M77 - Stop the print job timer */ -#define PRINTJOB_TIMER_AUTOSTART - +#if NONE(MachineCR10Orig, LowMemoryBoard) || ENABLED(MelziHostOnly) + #define PRINTJOB_TIMER_AUTOSTART +#endif /** * Print Counter * @@ -1648,7 +2670,9 @@ * * View the current statistics with M78. */ -//#define PRINTCOUNTER +#if NONE(MachineCR10Orig, LowMemoryBoard, SKRMiniE3V2) + #define PRINTCOUNTER +#endif /** * Password @@ -1681,6 +2705,38 @@ //#include "Configuration_Secure.h" // External file with PASSWORD_DEFAULT_VALUE #endif + +/** + * Password + * + * Set a numerical password for the printer which can be requested: + * + * - When the printer boots up + * - Upon opening the 'Print from Media' Menu + * - When SD printing is completed or aborted + * + * The following G-codes can be used: + * + * M510 - Lock Printer. Blocks all commands except M511. + * M511 - Unlock Printer. + * M512 - Set, Change and Remove Password. + * + * If you forget the password and get locked out you'll need to re-flash + * the firmware with the feature disabled, reset EEPROM, and (optionally) + * re-flash the firmware again with this feature enabled. + */ +//#define PASSWORD_FEATURE +#if ENABLED(PASSWORD_FEATURE) + #define PASSWORD_LENGTH 4 // (#) Number of digits (1-9). 3 or 4 is recommended + #define PASSWORD_ON_STARTUP + #define PASSWORD_UNLOCK_GCODE // Unlock with the M511 P command. Disable to prevent brute-force attack. + #define PASSWORD_CHANGE_GCODE // Change the password with M512 P N. + //#define PASSWORD_ON_SD_PRINT_MENU // This does not prevent gcodes from running + //#define PASSWORD_AFTER_SD_PRINT_END + //#define PASSWORD_AFTER_SD_PRINT_ABORT + //#include "Configuration_Secure.h" // External file with PASSWORD_DEFAULT_VALUE +#endif + //============================================================================= //============================= LCD and SD support ============================ //============================================================================= @@ -1736,7 +2792,12 @@ * SD Card support is disabled by default. If your controller has an SD slot, * you must uncomment the following option or it won't work. */ -//#define SDSUPPORT +#if DISABLED(MelziHostOnly) + #define SDSUPPORT +#endif +#if ENABLED(MachineEnder3V2) + #define SDIO_SUPPORT +#endif /** * SD CARD: SPI SPEED @@ -1761,8 +2822,10 @@ * Disable all menus and only display the Status Screen, or * just remove some extraneous menu items to recover space. */ -//#define NO_LCD_MENUS -//#define SLIM_LCD_MENUS +#if ANY(MachineCR10Orig, SKRMiniE3V2) && DISABLED(MelziHostOnly) && ENABLED(ABL_BI) + //#define NO_LCD_MENUS + #define SLIM_LCD_MENUS +#endif // // ENCODER SETTINGS @@ -1770,13 +2833,14 @@ // This option overrides the default number of encoder pulses needed to // produce one step. Should be increased for high-resolution encoders. // -//#define ENCODER_PULSES_PER_STEP 4 - +#if ANY(MachineCR20, MachineEnder3V2) + #define ENCODER_PULSES_PER_STEP 4 +#endif // // Use this option to override the number of step signals required to // move between next/prev menu items. // -//#define ENCODER_STEPS_PER_MENU_ITEM 1 +#define ENCODER_STEPS_PER_MENU_ITEM 1 /** * Encoder Direction Options @@ -1816,15 +2880,18 @@ // // Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu. // -//#define INDIVIDUAL_AXIS_HOMING_MENU - +#if NONE(MachineCR10Orig, LowMemoryBoard) + #define INDIVIDUAL_AXIS_HOMING_MENU +#endif // // SPEAKER/BUZZER // // If you have a speaker that can produce tones, enable it here. // By default Marlin assumes you have a buzzer with a fixed frequency. // -//#define SPEAKER +#if NONE(MachineCR10Orig, SKRMiniE3V2) + #define SPEAKER +#endif // // The duration and frequency for the UI feedback sound. @@ -1833,8 +2900,8 @@ // Note: Test audio output with the G-Code: // M300 S P // -//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2 -//#define LCD_FEEDBACK_FREQUENCY_HZ 5000 +#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2 +#define LCD_FEEDBACK_FREQUENCY_HZ 5000 //============================================================================= //======================== LCD / Controller Selection ========================= @@ -1908,7 +2975,19 @@ //======================== LCD / Controller Selection ========================= //===================== (I2C and Shift-Register LCDs) ===================== //============================================================================= - +#if ENABLED(MachineEnder4) && DISABLED(GraphicLCD) + #define REPRAP_DISCOUNT_SMART_CONTROLLER +#elif ENABLED(MachineEnder2) + #define ENDER2_STOCKDISPLAY +#elif ANY(MachineCR20, MachineCR2020) + #define MKS_MINI_12864 +#elif ENABLED(MachineEnder3V2) + #define DWIN_CREALITY_LCD +#elif ANY(OrigLCD, MachineCR10Orig, MachineEnder3Pro422, MachineEnder3Pro427, SKRMiniE3V2) && DISABLED(GraphicLCD) + #define CR10_STOCKDISPLAY +#elif NONE(MachineCR10SPro, MachineCRX, MachineEnder5Plus, MachineCR10Max, OrigLCD, MachineCR10Orig, SKRMiniE3V2) || ENABLED(GraphicLCD) + #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER +#endif // // CONTROLLER TYPE: I2C // @@ -2206,7 +3285,9 @@ // Third-party or vendor-customized controller interfaces. // Sources should be installed in 'src/lcd/extui'. // -//#define EXTENSIBLE_UI +#if ANY(MachineCR10SPro, MachineCRX, MachineEnder5Plus, MachineCR10Max) && (NONE(GraphicLCD, SKRMiniE3V2) || ANY(Force10SProDisplay, ForceCRXDisplay)) + #define EXTENSIBLE_UI +#endif #if ENABLED(EXTENSIBLE_UI) //#define EXTUI_LOCAL_BEEPER // Enables use of local Beeper pin with external display diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index b39e9e1722..d98c6f87ae 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -186,12 +186,14 @@ * THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD */ #if ENABLED(THERMAL_PROTECTION_HOTENDS) - #define THERMAL_PROTECTION_PERIOD 40 // Seconds - #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius + #define THERMAL_PROTECTION_PERIOD 60 // Seconds + #define THERMAL_PROTECTION_HYSTERESIS 10 // Degrees Celsius - //#define ADAPTIVE_FAN_SLOWING // Slow part cooling fan if temperature drops + #if DISABLED(MachineCR10Orig) || ENABLED(MelziHostOnly) + #define ADAPTIVE_FAN_SLOWING // Slow part cooling fan if temperature drops + #endif #if BOTH(ADAPTIVE_FAN_SLOWING, PIDTEMP) - //#define NO_FAN_SLOWING_IN_PID_TUNING // Don't slow fan speed during M303 + #define NO_FAN_SLOWING_IN_PID_TUNING // Don't slow fan speed during M303 #endif /** @@ -206,7 +208,7 @@ * and/or decrease WATCH_TEMP_INCREASE. WATCH_TEMP_INCREASE should not be set * below 2. */ - #define WATCH_TEMP_PERIOD 20 // Seconds + #define WATCH_TEMP_PERIOD 50 // Seconds #define WATCH_TEMP_INCREASE 2 // Degrees Celsius #endif @@ -214,28 +216,47 @@ * Thermal Protection parameters for the bed are just as above for hotends. */ #if ENABLED(THERMAL_PROTECTION_BED) - #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds - #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius +#if(ENABLED(BedDC)) + #if EITHER(MachineS5, MachineCR10Max) + #define THERMAL_PROTECTION_BED_PERIOD 240 // Seconds + #define THERMAL_PROTECTION_BED_HYSTERESIS 4 // Degrees Celsius + + #define WATCH_BED_TEMP_PERIOD 240 // Seconds + #define WATCH_BED_TEMP_INCREASE 4 // Degrees Celsius + + #else + #define THERMAL_PROTECTION_BED_PERIOD 50 // Seconds + #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius + + #define WATCH_BED_TEMP_PERIOD 180 // Seconds + #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius + #endif +#else + + #define THERMAL_PROTECTION_BED_PERIOD 30 // Seconds + #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius + + #define WATCH_BED_TEMP_PERIOD 120 // Seconds + #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius +#endif /** * As described above, except for the bed (M140/M190/M303). */ - #define WATCH_BED_TEMP_PERIOD 60 // Seconds - #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif /** * Thermal Protection parameters for the heated chamber. */ #if ENABLED(THERMAL_PROTECTION_CHAMBER) - #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius /** * Heated chamber watch settings (M141/M191). */ - #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds - #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius #endif #if ENABLED(PIDTEMP) @@ -311,7 +332,9 @@ * Enable Autotemp Mode with M104/M109 F S B. * Disable by sending M104/M109 with no F parameter (or F0 with AUTOTEMP_PROPORTIONAL). */ -#define AUTOTEMP +#if NONE(MachineCR10Orig, LowMemoryBoard, SKRMiniE3V2) || ENABLED(MelziHostOnly) + #define AUTOTEMP +#endif #if ENABLED(AUTOTEMP) #define AUTOTEMP_OLDWEIGHT 0.98 // Turn on AUTOTEMP on M104/M109 by default using proportions set here @@ -371,10 +394,10 @@ * Hotend Idle Timeout * Prevent filament in the nozzle from charring and causing a critical jam. */ -//#define HOTEND_IDLE_TIMEOUT +#define HOTEND_IDLE_TIMEOUT #if ENABLED(HOTEND_IDLE_TIMEOUT) - #define HOTEND_IDLE_TIMEOUT_SEC (5*60) // (seconds) Time without extruder movement to trigger protection - #define HOTEND_IDLE_MIN_TRIGGER 180 // (°C) Minimum temperature to enable hotend protection + #define HOTEND_IDLE_TIMEOUT_SEC (15*60) // (seconds) Time without extruder movement to trigger protection + #define HOTEND_IDLE_MIN_TRIGGER 170 // (°C) Minimum temperature to enable hotend protection #define HOTEND_IDLE_NOZZLE_TARGET 0 // (°C) Safe temperature for the nozzle after timeout #define HOTEND_IDLE_BED_TARGET 0 // (°C) Safe temperature for the bed after timeout #endif @@ -395,11 +418,12 @@ * The fan turns on automatically whenever any driver is enabled and turns * off (or reduces to idle speed) shortly after drivers are turned off. */ -//#define USE_CONTROLLER_FAN +#if ENABLED(SKRMiniE3V2) + #define USE_CONTROLLER_FAN +#endif #if ENABLED(USE_CONTROLLER_FAN) //#define CONTROLLER_FAN_PIN -1 // Set a custom pin for the controller fan //#define CONTROLLER_FAN_USE_Z_ONLY // With this option only the Z axis is considered - //#define CONTROLLER_FAN_IGNORE_Z // Ignore Z stepper. Useful when stepper timeout is disabled. #define CONTROLLERFAN_SPEED_MIN 0 // (0-255) Minimum speed. (If set below this value the fan is turned off.) #define CONTROLLERFAN_SPEED_ACTIVE 255 // (0-255) Active speed, used when any motor is enabled #define CONTROLLERFAN_SPEED_IDLE 0 // (0-255) Idle speed, used when motors are disabled @@ -413,7 +437,7 @@ // When first starting the main fan, run it at full speed for the // given number of milliseconds. This gets the fan spinning reliably // before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu) -//#define FAN_KICKSTART_TIME 100 +#define FAN_KICKSTART_TIME 100 // Some coolers may require a non-zero "off" state. //#define FAN_OFF_PWM 1 @@ -503,14 +527,20 @@ /** * M355 Case Light on-off / brightness */ -//#define CASE_LIGHT_ENABLE +#if(ENABLED(EnclosureLight)) + #define CASE_LIGHT_ENABLE +#endif #if ENABLED(CASE_LIGHT_ENABLE) - //#define CASE_LIGHT_PIN 4 // Override the default pin if needed + #if ENABLED(MachineCR2020) + #define CASE_LIGHT_PIN 65 // Override the default pin if needed + #else + #define CASE_LIGHT_PIN 12 // Override the default pin if needed + #endif #define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW #define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on - #define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin) + #define CASE_LIGHT_DEFAULT_BRIGHTNESS 255 // Set default power-up brightness (0-255, requires PWM pin) //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm - //#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu + #define CASE_LIGHT_MENU // Add Case Light options to the LCD menu //#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting. //#define CASE_LIGHT_USE_NEOPIXEL // Use NeoPixel LED as case light, requires NEOPIXEL_LED. #if ENABLED(CASE_LIGHT_USE_NEOPIXEL) @@ -573,8 +603,11 @@ // // For Z set the number of stepper drivers // -#define NUM_Z_STEPPER_DRIVERS 1 // (1-4) Z options change based on how many - +#if ENABLED(DualZ) + #define NUM_Z_STEPPER_DRIVERS 2 // (1-4) Z options change based on how many +#else + #define NUM_Z_STEPPER_DRIVERS 1 // (1-4) Z options change based on how many +#endif #if NUM_Z_STEPPER_DRIVERS > 1 //#define Z_MULTI_ENDSTOPS #if ENABLED(Z_MULTI_ENDSTOPS) @@ -653,12 +686,13 @@ //#define SENSORLESS_BACKOFF_MM { 2, 2 } // (mm) Backoff from endstops before sensorless homing -#define HOMING_BUMP_MM { 5, 5, 2 } // (mm) Backoff from endstops after first bump +#define HOMING_BUMP_MM { 8, 8, 2 } // (mm) Backoff from endstops after first bump #define HOMING_BUMP_DIVISOR { 2, 2, 4 } // Re-Bump Speed Divisor (Divides the Homing Feedrate) -//#define HOMING_BACKOFF_POST_MM { 2, 2, 2 } // (mm) Backoff from endstops after homing +#define HOMING_BACKOFF_POST_MM { 8, 8, 2 } // (mm) Backoff from endstops after homing + +#define QUICK_HOME // If G28 contains XY do a diagonal move first -//#define QUICK_HOME // If G28 contains XY do a diagonal move first //#define HOME_Y_BEFORE_X // If G28 contains XY home Y before X //#define CODEPENDENT_XY_HOMING // If X/Y can't home without homing Y/X first @@ -708,8 +742,9 @@ * differs, a mode set eeprom write will be completed at initialization. * Use the option below to force an eeprom write to a V3.1 probe regardless. */ - //#define BLTOUCH_SET_5V_MODE - + #if NONE(SKR13, SKR14, SKR14Turbo, SKRPRO11, SKRMiniE3V2) + #define BLTOUCH_SET_5V_MODE + #endif /** * Safety: Activate if connecting a probe with an unknown voltage mode. * V3.0: Set a probe into mode selected above at Marlin startup. Required for 5V mode on 3.0 @@ -724,7 +759,9 @@ * This feature was designed for Delta's with very fast Z moves however higher speed cartesians may function * If the machine cannot raise the probe fast enough after a trigger, it may enter a fault state. */ - //#define BLTOUCH_HS_MODE + #if NONE(MachineCR10Orig, LowMemoryBoard, MachineCRX) + #define BLTOUCH_HS_MODE + #endif // Safety: Enable voltage mode settings in the LCD menu. //#define BLTOUCH_LCD_VOLTAGE_MENU @@ -737,7 +774,9 @@ * Z Steppers Auto-Alignment * Add the G34 command to align multiple Z steppers using a bed probe. */ -//#define Z_STEPPER_AUTO_ALIGN +#if ENABLED(DualZ) && ANY(ABL_EZABL, ABL_NCSW, ABL_BLTOUCH, ABL_TOUCH_MI) + #define Z_STEPPER_AUTO_ALIGN +#endif #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3 [, Z4]] // If not defined, probe limits will be used. @@ -783,7 +822,7 @@ // On a 300mm bed a 5% grade would give a misalignment of ~1.5cm #define G34_MAX_GRADE 5 // (%) Maximum incline that G34 will handle - #define Z_STEPPER_ALIGN_ITERATIONS 5 // Number of iterations to apply during alignment + #define Z_STEPPER_ALIGN_ITERATIONS 8 // Number of iterations to apply during alignment #define Z_STEPPER_ALIGN_ACC 0.02 // Stop iterating early if the accuracy is better than this #define RESTORE_LEVELING_AFTER_G34 // Restore leveling after G34 is done? // After G34, re-home Z (G28 Z) or just calculate it from the last probe heights? @@ -847,7 +886,9 @@ // If the Nozzle or Bed falls when the Z stepper is disabled, set its resting position here. //#define Z_AFTER_DEACTIVATE Z_HOME_POS -//#define HOME_AFTER_DEACTIVATE // Require rehoming after steppers are deactivated +#if ANY(MachineEnder5, MachineEnder5Plus) + #define HOME_AFTER_DEACTIVATE // Require rehoming after steppers are deactivated +#endif // Default Minimum Feedrates for printing and travel moves #define DEFAULT_MINIMUMFEEDRATE 0.0 // (mm/s) Minimum feedrate. Set with M205 S. @@ -860,7 +901,11 @@ // Increase the slowdown divisor for larger buffer sizes. #define SLOWDOWN #if ENABLED(SLOWDOWN) - #define SLOWDOWN_DIVISOR 2 + #if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, SKRMiniE3V2, MachineEnder3V2) + #define SLOWDOWN_DIVISOR 4 + #else + #define SLOWDOWN_DIVISOR 2 + #endif #endif /** @@ -883,7 +928,9 @@ // Backlash Compensation // Adds extra movement to axes on direction-changes to account for backlash. // -//#define BACKLASH_COMPENSATION +#if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11) + #define BACKLASH_COMPENSATION +#endif #if ENABLED(BACKLASH_COMPENSATION) // Define values for backlash distance and correction. // If BACKLASH_GCODE is enabled these values are the defaults. @@ -895,7 +942,7 @@ //#define BACKLASH_SMOOTHING_MM 3 // (mm) // Add runtime configuration and tuning of backlash values (M425) - //#define BACKLASH_GCODE + #define BACKLASH_GCODE #if ENABLED(BACKLASH_GCODE) // Measure the Z backlash when probing (G29) and set with "M425 Z" @@ -974,7 +1021,9 @@ * vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the * lowest stepping frequencies. */ -//#define ADAPTIVE_STEP_SMOOTHING +#if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, MachineEnder3V2) + #define ADAPTIVE_STEP_SMOOTHING +#endif /** * Custom Microstepping @@ -1060,8 +1109,9 @@ // Change values more rapidly when the encoder is rotated faster #define ENCODER_RATE_MULTIPLIER #if ENABLED(ENCODER_RATE_MULTIPLIER) - #define ENCODER_10X_STEPS_PER_SEC 30 // (steps/s) Encoder rate for 10x speed - #define ENCODER_100X_STEPS_PER_SEC 80 // (steps/s) Encoder rate for 100x speed + #define ENCODER_5X_STEPS_PER_SEC 30 + #define ENCODER_10X_STEPS_PER_SEC 80 // (steps/s) Encoder rate for 10x speed + #define ENCODER_100X_STEPS_PER_SEC 130 // (steps/s) Encoder rate for 100x speed #endif // Play a beep when the feedrate is changed from the Status Screen @@ -1082,7 +1132,9 @@ #endif // Include a page of printer information in the LCD Main Menu - //#define LCD_INFO_MENU + #if NONE(MachineCR10Orig, SKRMiniE3V2) + #define LCD_INFO_MENU + #endif #if ENABLED(LCD_INFO_MENU) //#define LCD_PRINTER_INFO_IS_BOOTSCREEN // Show bootscreen(s) instead of Printer Info pages #endif @@ -1122,22 +1174,25 @@ #endif // HAS_LCD_MENU // Scroll a longer status message into view -//#define STATUS_MESSAGE_SCROLLING +#if NONE(MachineCR10Orig, LowMemoryBoard, SKRMiniE3V2) + #define STATUS_MESSAGE_SCROLLING -// On the Info Screen, display XY with one decimal place when possible -//#define LCD_DECIMAL_SMALL_XY + // On the Info Screen, display XY with one decimal place when possible + #define LCD_DECIMAL_SMALL_XY -// The timeout (in ms) to return to the status screen from sub-menus -//#define LCD_TIMEOUT_TO_STATUS 15000 - -// Add an 'M73' G-code to set the current percentage -//#define LCD_SET_PROGRESS_MANUALLY + // The timeout (in ms) to return to the status screen from sub-menus + #define LCD_TIMEOUT_TO_STATUS 15000 + // Add an 'M73' G-code to set the current percentage + #if NONE(MachineEnder4, MachineEnder3V2) || ENABLED(GraphicLCD) + #define LCD_SET_PROGRESS_MANUALLY + #endif +#endif // Show the E position (filament used) during printing //#define LCD_SHOW_E_TOTAL #if ENABLED(SHOW_BOOTSCREEN) - #define BOOTSCREEN_TIMEOUT 4000 // (ms) Total Duration to display the boot screen(s) + #define BOOTSCREEN_TIMEOUT 2000 // (ms) Total Duration to display the boot screen(s) #endif #if EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY) && ANY(HAS_MARLINUI_U8GLIB, HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL) @@ -1152,7 +1207,7 @@ #endif #if EITHER(HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL) - //#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing + #define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing #if ENABLED(LCD_PROGRESS_BAR) #define PROGRESS_BAR_BAR_TIME 2000 // (ms) Amount of time to show the bar #define PROGRESS_BAR_MSG_TIME 3000 // (ms) Amount of time to show the status message @@ -1167,7 +1222,9 @@ // The standard SD detect circuit reads LOW when media is inserted and HIGH when empty. // Enable this option and set to HIGH if your SD cards are incorrectly detected. - //#define SD_DETECT_STATE HIGH + #if NONE(MachineCR10SPro, MachineCRX, MachineEnder5Plus, MachineCR10Max, MachineEnder3V2, MachineEnder3Pro422, MachineEnder3Pro427) + #define SD_DETECT_STATE HIGH + #endif //#define SDCARD_READONLY // Read-only SD card (to save over 2K of flash) @@ -1178,13 +1235,14 @@ // Reverse SD sort to show "more recent" files first, according to the card's FAT. // Since the FAT gets out of order with usage, SDCARD_SORT_ALPHA is recommended. - #define SDCARD_RATHERRECENTFIRST + #if NONE(MachineCR10Orig, LowMemoryBoard, SKRMiniE3V2) + #define SDCARD_RATHERRECENTFIRST + #define SD_MENU_CONFIRM_START // Confirm the selected SD file before printing - #define SD_MENU_CONFIRM_START // Confirm the selected SD file before printing + //#define MENU_ADDAUTOSTART // Add a menu option to run auto#.g files - //#define MENU_ADDAUTOSTART // Add a menu option to run auto#.g files - - #define EVENT_GCODE_SD_ABORT "G28XY" // G-code to run on SD Abort Print (e.g., "G28XY" or "G27") + #define EVENT_GCODE_SD_ABORT "G28XY" // G-code to run on Stop Print (e.g., "G28XY" or "G27") + #endif #if ENABLED(PRINTER_EVENT_LEDS) #define PE_LEDS_COMPLETED_TIME (30*60) // (seconds) Time to keep the LED "done" color before restoring normal illumination @@ -1204,7 +1262,10 @@ //#define BACKUP_POWER_SUPPLY // Backup power / UPS to move the steppers on power loss //#define POWER_LOSS_RECOVER_ZHOME // Z homing is needed for proper recovery. 99.9% of the time this should be disabled! //#define POWER_LOSS_ZRAISE 2 // (mm) Z axis raise on resume (on power loss with UPS) - //#define POWER_LOSS_PIN 44 // Pin to detect power loss. Set to -1 to disable default pin on boards without module. + #if ANY(SKR14Turbo, SKR14) && DISABLED(SKR14_PowerLossKit) + #define POWER_LOSS_PIN -1 + #endif + //#define POWER_LOSS_PIN 44 // Pin to detect power loss //#define POWER_LOSS_STATE HIGH // State of pin indicating power loss //#define POWER_LOSS_PULL // Set pullup / pulldown as appropriate //#define POWER_LOSS_PURGE_LEN 20 // (mm) Length of filament to purge on resume @@ -1238,26 +1299,27 @@ * - SDSORT_CACHE_NAMES will retain the sorted file listing in RAM. (Expensive!) * - SDSORT_DYNAMIC_RAM only uses RAM when the SD menu is visible. (Use with caution!) */ - //#define SDCARD_SORT_ALPHA + #define SDCARD_SORT_ALPHA // SD Card Sorting options #if ENABLED(SDCARD_SORT_ALPHA) #define SDSORT_LIMIT 40 // Maximum number of sorted items (10-256). Costs 27 bytes each. #define FOLDER_SORTING -1 // -1=above 0=none 1=below #define SDSORT_GCODE false // Allow turning sorting on/off with LCD and M34 G-code. - #define SDSORT_USES_RAM false // Pre-allocate a static array for faster pre-sorting. + #define SDSORT_USES_RAM true // Pre-allocate a static array for faster pre-sorting. #define SDSORT_USES_STACK false // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.) - #define SDSORT_CACHE_NAMES false // Keep sorted items in RAM longer for speedy performance. Most expensive option. - #define SDSORT_DYNAMIC_RAM false // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use! + #define SDSORT_CACHE_NAMES true // Keep sorted items in RAM longer for speedy performance. Most expensive option. + #define SDSORT_DYNAMIC_RAM true // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use! #define SDSORT_CACHE_VFATS 2 // Maximum number of 13-byte VFAT entries to use for sorting. // Note: Only affects SCROLL_LONG_FILENAMES with SDSORT_CACHE_NAMES but not SDSORT_DYNAMIC_RAM. #endif - // This allows hosts to request long names for files and folders with M33 - //#define LONG_FILENAME_HOST_SUPPORT - // Enable this option to scroll long filenames in the SD card menu - //#define SCROLL_LONG_FILENAMES + #if NONE(MachineCR10Orig, LowMemoryBoard, SKRMiniE3V2) + // This allows hosts to request long names for files and folders with M33 + #define LONG_FILENAME_HOST_SUPPORT + #define SCROLL_LONG_FILENAMES + #endif // Leave the heaters on after Stop Print (not recommended!) //#define SD_ABORT_NO_COOLDOWN @@ -1279,7 +1341,9 @@ /** * Auto-report SdCard status with M27 S */ - //#define AUTO_REPORT_SD_STATUS + #if NONE(MachineCR10Orig, LowMemoryBoard, OriginalCrealitySquareBoard) + #define AUTO_REPORT_SD_STATUS + #endif /** * Support for USB thumb drives using an Arduino USB Host Shield or @@ -1341,7 +1405,9 @@ * * :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ] */ - //#define SDCARD_CONNECTION LCD + #if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11) + #define SDCARD_CONNECTION ONBOARD + #endif #endif // SDSUPPORT @@ -1349,7 +1415,7 @@ * By default an onboard SD card reader may be shared as a USB mass- * storage device. This option hides the SD card from the host PC. */ -//#define NO_SD_HOST_DRIVE // Disable SD Card access over USB (for security). +#define NO_SD_HOST_DRIVE // Disable SD Card access over USB (for security). /** * Additional options for Graphical Displays @@ -1365,18 +1431,20 @@ */ #if HAS_MARLINUI_U8GLIB // Show SD percentage next to the progress bar - //#define DOGM_SD_PERCENT + #define DOGM_SD_PERCENT // Save many cycles by drawing a hollow frame or no frame on the Info Screen - //#define XYZ_NO_FRAME - #define XYZ_HOLLOW_FRAME + #define XYZ_NO_FRAME + //#define XYZ_HOLLOW_FRAME // Enable to save many cycles by drawing a hollow frame on Menu Screens #define MENU_HOLLOW_FRAME // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. - //#define USE_BIG_EDIT_FONT + #if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11) + #define USE_BIG_EDIT_FONT + #endif // A smaller font may be used on the Info Screen. Costs 2434 bytes of PROGMEM. // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. @@ -1402,7 +1470,9 @@ // The normal delay is 10µs. Use the lowest value that still gives a reliable display. //#define DOGM_SPI_DELAY_US 5 - //#define LIGHTWEIGHT_UI + #if ENABLED(Big_UI) + #define LIGHTWEIGHT_UI + #endif #if ENABLED(LIGHTWEIGHT_UI) #define STATUS_EXPIRE_SECONDS 20 #endif @@ -1416,8 +1486,10 @@ //#define STATUS_COMBINE_HEATERS // Use combined heater images instead of separate ones //#define STATUS_HOTEND_NUMBERLESS // Use plain hotend icons instead of numbered ones (with 2+ hotends) #define STATUS_HOTEND_INVERTED // Show solid nozzle bitmaps when heating (Requires STATUS_HOTEND_ANIM) - #define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating - #define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating + #if NONE(MachineCR10Orig, LowMemoryBoard, SKRMiniE3V2) + #define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating + #define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating + #endif #define STATUS_CHAMBER_ANIM // Use a second bitmap to indicate chamber heating //#define STATUS_CUTTER_ANIM // Use a second bitmap to indicate spindle / laser active //#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap @@ -1425,15 +1497,20 @@ //#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames //#define STATUS_HEAT_PERCENT // Show heating in a progress bar //#define BOOT_MARLIN_LOGO_SMALL // Show a smaller Marlin logo on the Boot Screen (saving 399 bytes of flash) - //#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~‭3260 (or ~940) bytes of PROGMEM. - - // Frivolous Game Options - //#define MARLIN_BRICKOUT - //#define MARLIN_INVADERS - //#define MARLIN_SNAKE + #if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11) + #define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~‭3260 (or ~940) bytes of PROGMEM. + #else + #define BOOT_MARLIN_LOGO_SMALL // Show a smaller Marlin logo on the Boot Screen (saving 399 bytes of flash) + #endif //#define GAMES_EASTER_EGG // Add extra blank lines above the "Games" sub-menu -#endif // HAS_MARLINUI_U8GLIB + #if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11) + // Frivolous Game Options + #define MARLIN_BRICKOUT + #define MARLIN_INVADERS + #define MARLIN_SNAKE + #endif +#endif // HAS_GRAPHICAL_LCD // // Additional options for DGUS / DWIN displays @@ -1606,18 +1683,18 @@ * * Warning: Does not respect endstops! */ -//#define BABYSTEPPING +#define BABYSTEPPING #if ENABLED(BABYSTEPPING) - //#define INTEGRATED_BABYSTEPPING // EXPERIMENTAL integration of babystepping into the Stepper ISR + #define INTEGRATED_BABYSTEPPING // EXPERIMENTAL integration of babystepping into the Stepper ISR //#define BABYSTEP_WITHOUT_HOMING - //#define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement). + #define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement). //#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA! #define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way //#define BABYSTEP_MILLIMETER_UNITS // Specify BABYSTEP_MULTIPLICATOR_(XY|Z) in mm instead of micro-steps - #define BABYSTEP_MULTIPLICATOR_Z 1 // (steps or mm) Steps or millimeter distance for each Z babystep + #define BABYSTEP_MULTIPLICATOR_Z 10 // (steps or mm) Steps or millimeter distance for each Z babystep #define BABYSTEP_MULTIPLICATOR_XY 1 // (steps or mm) Steps or millimeter distance for each XY babystep - //#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping. + #define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping. #if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING) #define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds. // Note: Extra time may be added to mitigate controller latency. @@ -1627,12 +1704,18 @@ #endif #endif - //#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28 + #if ENABLED(EXTENSIBLE_UI) && NONE(ABL_EZABL, ABL_NCSW, ABL_BLTOUCH, ABL_TOUCH_MI) + #define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28 + #endif - //#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping + #if ANY(ABL_EZABL, ABL_BLTOUCH, ABL_NCSW, ABL_TOUCH_MI) + #define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping + #endif #if ENABLED(BABYSTEP_ZPROBE_OFFSET) //#define BABYSTEP_HOTEND_Z_OFFSET // For multiple hotends, babystep relative Z offsets - //#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor + #if NONE(MachineCR10Orig, LowMemoryBoard, EXTENSIBLE_UI, SKRMiniE3V2, MachineEnder3V2) && (DISABLED(MachineEnder4) || ENABLED(GraphicLCD)) + #define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor + #endif #endif #endif @@ -1653,12 +1736,14 @@ * * See https://marlinfw.org/docs/features/lin_advance.html for full instructions. */ -//#define LIN_ADVANCE +#if NONE(MachineCR10Orig, SKRMiniE3V2, LowMemoryBoard, MachineCR10SPro, MachineCR10Max, SKR13, SKR14, SKR14Turbo, MachineCR10SV2, CrealitySilentBoard) || ENABLED(OrigLA) || (ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11) && ENABLED(SKR_UART)) + #define LIN_ADVANCE +#endif #if ENABLED(LIN_ADVANCE) //#define EXTRA_LIN_ADVANCE_K // Enable for second linear advance constants - #define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed + #define LIN_ADVANCE_K 0.0 // Unit: mm compression per 1mm/s extruder speed //#define LA_DEBUG // If enabled, this will generate debug information output over USB. - //#define EXPERIMENTAL_SCURVE // Enable this option to permit S-Curve Acceleration + #define EXPERIMENTAL_SCURVE // Enable this option to permit S-Curve Acceleration #endif // @section leveling @@ -1698,8 +1783,8 @@ #if PROBE_SELECTED && !IS_KINEMATIC //#define PROBING_MARGIN_LEFT PROBING_MARGIN //#define PROBING_MARGIN_RIGHT PROBING_MARGIN - //#define PROBING_MARGIN_FRONT PROBING_MARGIN - //#define PROBING_MARGIN_BACK PROBING_MARGIN + #define PROBING_MARGIN_FRONT (PROBING_MARGIN + ClipClearance) + #define PROBING_MARGIN_BACK (PROBING_MARGIN + ClipClearance) #endif #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) @@ -1714,7 +1799,9 @@ * Repeatedly attempt G29 leveling until it succeeds. * Stop after G29_MAX_RETRIES attempts. */ -//#define G29_RETRY_AND_RECOVER +#if ENABLED(ABL_BI) && NONE(MachineCR10Orig, LowMemoryBoard, SKRMiniE3V2) + #define G29_RETRY_AND_RECOVER +#endif #if ENABLED(G29_RETRY_AND_RECOVER) #define G29_MAX_RETRIES 3 #define G29_HALT_ON_FAILURE @@ -1723,7 +1810,7 @@ * between attempts, and after the maximum number of retries have been tried. */ #define G29_SUCCESS_COMMANDS "M117 Bed leveling done." - #define G29_RECOVER_COMMANDS "M117 Probe failed. Rewiping.\nG28\nG12 P0 S12 T0" + #define G29_RECOVER_COMMANDS "M117 Probe failed.\nG28\n" #define G29_FAILURE_COMMANDS "M117 Bed leveling failed.\nG0 Z10\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nG4 S1" #endif @@ -1794,7 +1881,9 @@ // // G2/G3 Arc Support // -#define ARC_SUPPORT // Disable this feature to save ~3226 bytes +#if NONE(MachineCR10Orig, SKRMiniE3V2) + #define ARC_SUPPORT // Disable this feature to save ~3226 bytes +#endif #if ENABLED(ARC_SUPPORT) #define MM_PER_ARC_SEGMENT 1 // (mm) Length (or minimum length) of each arc segment //#define ARC_SEGMENTS_PER_R 1 // Max segment length, MM_PER = Min @@ -1891,20 +1980,23 @@ // The number of linear moves that can be in the planner at once. // The value of BLOCK_BUFFER_SIZE must be a power of 2 (e.g. 8, 16, 32) -#if BOTH(SDSUPPORT, DIRECT_STEPPING) - #define BLOCK_BUFFER_SIZE 8 -#elif ENABLED(SDSUPPORT) +#if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, SKRMiniE3V2, MachineEnder3V2) || DISABLED(EXTENSIBLE_UI) #define BLOCK_BUFFER_SIZE 16 #else - #define BLOCK_BUFFER_SIZE 16 + #define BLOCK_BUFFER_SIZE 8 #endif // @section serial // The ASCII buffer for serial input #define MAX_CMD_SIZE 96 -#define BUFSIZE 4 - +#if ANY(MachineCR10Orig, SKRMiniE3V2, MachineEnder3V2) //melzi has more ram than a 2560 + #define BUFSIZE 16 +#elif ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11) + #define BUFSIZE 8 +#else + #define BUFSIZE 4 +#endif // Transmission to Host Buffer Size // To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0. // To buffer a simple "ok" you need 4 bytes. @@ -1912,7 +2004,11 @@ // For debug-echo: 128 bytes for the optimal speed. // Other output doesn't need to be that speedy. // :[0, 2, 4, 8, 16, 32, 64, 128, 256] -#define TX_BUFFER_SIZE 0 +#if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11) + #define TX_BUFFER_SIZE 32 +#else + #define TX_BUFFER_SIZE 0 +#endif // Host Receive Buffer Size // Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough. @@ -1947,16 +2043,22 @@ * Currently handles M108, M112, M410, M876 * NOTE: Not yet implemented for all platforms. */ -//#define EMERGENCY_PARSER +#if NONE(SKRPRO11, SKRMiniE3V2, MachineEnder3V2, MachineEnder3V2, MachineEnder3Pro422, MachineEnder3Pro427) + #define EMERGENCY_PARSER +#endif // Bad Serial-connections can miss a received command by sending an 'ok' // Therefore some clients abort after 30 seconds in a timeout. // Some other clients start sending commands while receiving a 'wait'. // This "wait" is only sent when the buffer is empty. 1 second is a good value here. -//#define NO_TIMEOUTS 1000 // Milliseconds +#if NONE(MachineCR10Orig, LowMemoryBoard, MachineEnder3V2) || ENABLED(MelziHostOnly) + #define NO_TIMEOUTS 1000 // Milliseconds +#endif // Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary. -//#define ADVANCED_OK +#if NONE(MachineCR10Orig, LowMemoryBoard, SKRMiniE3V2) || ENABLED(MelziHostOnly) + #define ADVANCED_OK +#endif // Printrun may have trouble receiving long strings all at once. // This option inserts short delays between lines of serial output. @@ -1990,7 +2092,9 @@ * * Note that M207 / M208 / M209 settings are saved to EEPROM. */ -//#define FWRETRACT + #if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11, MachineEnder3V2) + #define FWRETRACT +#endif #if ENABLED(FWRETRACT) #define FWRETRACT_AUTORETRACT // Override slicer retractions #if ENABLED(FWRETRACT_AUTORETRACT) @@ -2018,25 +2122,27 @@ // Z raise distance for tool-change, as needed for some extruders #define TOOLCHANGE_ZRAISE 2 // (mm) //#define TOOLCHANGE_ZRAISE_BEFORE_RETRACT // Apply raise before swap retraction (if enabled) - //#define TOOLCHANGE_NO_RETURN // Never return to previous position on tool-change + #define TOOLCHANGE_NO_RETURN // Never return to previous position on tool-change #if ENABLED(TOOLCHANGE_NO_RETURN) - //#define EVENT_GCODE_AFTER_TOOLCHANGE "G12X" // Extra G-code to run after tool-change + #if ENABLED(PurgeBucket) + #define EVENT_GCODE_AFTER_TOOLCHANGE "G12X" // G-code to run after tool-change is complete + #endif #endif /** * Retract and prime filament on tool-change to reduce * ooze and stringing and to get cleaner transitions. */ - //#define TOOLCHANGE_FILAMENT_SWAP + #define TOOLCHANGE_FILAMENT_SWAP #if ENABLED(TOOLCHANGE_FILAMENT_SWAP) // Load / Unload - #define TOOLCHANGE_FS_LENGTH 12 // (mm) Load / Unload length + #define TOOLCHANGE_FS_LENGTH 80 // (mm) Load / Unload length #define TOOLCHANGE_FS_EXTRA_RESUME_LENGTH 0 // (mm) Extra length for better restart, fine tune by LCD/Gcode) #define TOOLCHANGE_FS_RETRACT_SPEED (50*60) // (mm/min) (Unloading) #define TOOLCHANGE_FS_UNRETRACT_SPEED (25*60) // (mm/min) (On SINGLENOZZLE or Bowden loading must be slowed down) // Longer prime to clean out a SINGLENOZZLE - #define TOOLCHANGE_FS_EXTRA_PRIME 0 // (mm) Extra priming length + #define TOOLCHANGE_FS_EXTRA_PRIME 2 // (mm) Extra priming length #define TOOLCHANGE_FS_PRIME_SPEED (4.6*60) // (mm/min) Extra priming feedrate #define TOOLCHANGE_FS_WIPE_RETRACT 0 // (mm/min) Retract before cooling for less stringing, better wipe, etc. @@ -2071,10 +2177,10 @@ * Position to park head during tool change. * Doesn't apply to SWITCHING_TOOLHEAD, DUAL_X_CARRIAGE, or PARKING_EXTRUDER */ - //#define TOOLCHANGE_PARK + #define TOOLCHANGE_PARK #if ENABLED(TOOLCHANGE_PARK) - #define TOOLCHANGE_PARK_XY { X_MIN_POS + 10, Y_MIN_POS + 10 } - #define TOOLCHANGE_PARK_XY_FEEDRATE 6000 // (mm/min) + #define TOOLCHANGE_PARK_XY { X_MAX_POS, Y_MIN_POS + 10 } + #define TOOLCHANGE_PARK_XY_FEEDRATE 6000 // (mm/m) //#define TOOLCHANGE_PARK_X_ONLY // X axis only move //#define TOOLCHANGE_PARK_Y_ONLY // Y axis only move #endif @@ -2090,49 +2196,73 @@ * Requires NOZZLE_PARK_FEATURE. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define ADVANCED_PAUSE_FEATURE +#if DISABLED(MachineCR10Orig) && ((ENABLED(SKRMiniE3V2) && DISABLED(POWER_LOSS_RECOVERY)) || DISABLED(SKRMiniE3V2)) + #define ADVANCED_PAUSE_FEATURE +#endif #if ENABLED(ADVANCED_PAUSE_FEATURE) #define PAUSE_PARK_RETRACT_FEEDRATE 60 // (mm/s) Initial retract feedrate. - #define PAUSE_PARK_RETRACT_LENGTH 2 // (mm) Initial retract. + #define PAUSE_PARK_RETRACT_LENGTH 4 // (mm) Initial retract. // This short retract is done immediately, before parking the nozzle. - #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // (mm/s) Unload filament feedrate. This can be pretty fast. + #if ANY(MachineCR10SPro, MachineCR10SProV2, MachineCR10Max) + #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 20 // (mm/s) Unload filament feedrate. This can be pretty fast. + #else + #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 40 // (mm/s) Unload filament feedrate. This can be pretty fast. + #endif #define FILAMENT_CHANGE_UNLOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate. - #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // (mm) The length of filament for a complete unload. + #if ANY(MachineEnder5Plus, MachineCR10SPro, MachineCR10SProV2) + #define FILAMENT_CHANGE_UNLOAD_LENGTH 75 + #elif ENABLED(DirectDrive) + #define FILAMENT_CHANGE_UNLOAD_LENGTH 125 + #elif ANY(MachineEnder5Plus, MachineCR10Max, MachineCR10S4, MachineCR10S5) + #define FILAMENT_CHANGE_UNLOAD_LENGTH 700 + #else + #define FILAMENT_CHANGE_UNLOAD_LENGTH 430 // (mm) The length of filament for a complete unload. + #endif // For Bowden, the full length of the tube and nozzle. // For direct drive, the full length of the nozzle. // Set to 0 for manual unloading. #define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE 6 // (mm/s) Slow move when starting load. #define FILAMENT_CHANGE_SLOW_LOAD_LENGTH 0 // (mm) Slow length, to allow time to insert material. // 0 to disable start loading and skip to fast load only - #define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 6 // (mm/s) Load filament feedrate. This can be pretty fast. - #define FILAMENT_CHANGE_FAST_LOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate. - #define FILAMENT_CHANGE_FAST_LOAD_LENGTH 0 // (mm) Load length of filament, from extruder gear to nozzle. + #define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 20 // (mm/s) Load filament feedrate. This can be pretty fast. + #define FILAMENT_CHANGE_FAST_LOAD_ACCEL 15 // (mm/s^2) Lower acceleration may allow a faster feedrate. + + #if ENABLED(DirectDrive) + #define FILAMENT_CHANGE_FAST_LOAD_LENGTH 100 + #elif(ENABLED(MachineCRX)) + #define FILAMENT_CHANGE_FAST_LOAD_LENGTH 450 // (mm) Load length of filament, from extruder gear to nozzle. + #elif ANY(MachineEnder5Plus, MachineCR10Max, MachineCR10S4, MachineCR10S5) + #define FILAMENT_CHANGE_FAST_LOAD_LENGTH 600 + #else + #define FILAMENT_CHANGE_FAST_LOAD_LENGTH 430 // (mm) Load length of filament, from extruder gear to nozzle. + #endif // For Bowden, the full length of the tube and nozzle. // For direct drive, the full length of the nozzle. //#define ADVANCED_PAUSE_CONTINUOUS_PURGE // Purge continuously up to the purge length until interrupted. #define ADVANCED_PAUSE_PURGE_FEEDRATE 3 // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate. - #define ADVANCED_PAUSE_PURGE_LENGTH 50 // (mm) Length to extrude after loading. + #define ADVANCED_PAUSE_PURGE_LENGTH 20 // (mm) Length to extrude after loading. // Set to 0 for manual extrusion. // Filament can be extruded repeatedly from the Filament Change menu // until extrusion is consistent, and to purge old filament. #define ADVANCED_PAUSE_RESUME_PRIME 0 // (mm) Extra distance to prime nozzle after returning from park. - //#define ADVANCED_PAUSE_FANS_PAUSE // Turn off print-cooling fans while the machine is paused. + #define ADVANCED_PAUSE_FANS_PAUSE // Turn off print-cooling fans while the machine is paused. // Filament Unload does a Retract, Delay, and Purge first: - #define FILAMENT_UNLOAD_PURGE_RETRACT 13 // (mm) Unload initial retract length. + #define FILAMENT_UNLOAD_PURGE_RETRACT 4 // (mm) Unload initial retract length. #define FILAMENT_UNLOAD_PURGE_DELAY 5000 // (ms) Delay for the filament to cool after retract. - #define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged. + #define FILAMENT_UNLOAD_PURGE_LENGTH 0 // (mm) An unretract is done, then this length is purged. #define FILAMENT_UNLOAD_PURGE_FEEDRATE 25 // (mm/s) feedrate to purge before unload #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety. - #define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed. + #define FILAMENT_CHANGE_ALERT_BEEPS 2 // Number of alert beeps to play when a response is needed. #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change. - //#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change. - //#define HOME_BEFORE_FILAMENT_CHANGE // If needed, home before parking for filament change - - //#define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu. - //#define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302) + #define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change. + #define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change + #if NONE(MachineCR10Orig, MachineEnder4, SKRMiniE3V2) + #define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu. + #define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302) + #endif #endif // @section tmc @@ -2272,7 +2402,7 @@ #define INTERPOLATE true #if AXIS_IS_TMC(X) - #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. + #define X_CURRENT 730 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_CURRENT_HOME X_CURRENT // (mA) RMS current for sensorless homing #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 @@ -2290,7 +2420,7 @@ #endif #if AXIS_IS_TMC(Y) - #define Y_CURRENT 800 + #define Y_CURRENT 730 #define Y_CURRENT_HOME Y_CURRENT #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 @@ -2308,7 +2438,7 @@ #endif #if AXIS_IS_TMC(Z) - #define Z_CURRENT 800 + #define Z_CURRENT 850 #define Z_CURRENT_HOME Z_CURRENT #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 @@ -2317,7 +2447,7 @@ #endif #if AXIS_IS_TMC(Z2) - #define Z2_CURRENT 800 + #define Z2_CURRENT 850 #define Z2_CURRENT_HOME Z2_CURRENT #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 @@ -2344,7 +2474,7 @@ #endif #if AXIS_IS_TMC(E0) - #define E0_CURRENT 800 + #define E0_CURRENT 730 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 #define E0_CHAIN_POS -1 @@ -2352,7 +2482,7 @@ #endif #if AXIS_IS_TMC(E1) - #define E1_CURRENT 800 + #define E1_CURRENT 730 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 #define E1_CHAIN_POS -1 @@ -2432,7 +2562,9 @@ * The default SW SPI pins are defined the respective pins files, * but you can override or define them here. */ - //#define TMC_USE_SW_SPI + #if ENABLED(SKR_2130) + #define TMC_USE_SW_SPI + #endif //#define TMC_SW_MOSI -1 //#define TMC_SW_MISO -1 //#define TMC_SW_SCK -1 @@ -2449,22 +2581,29 @@ * Set *_SERIAL_TX_PIN and *_SERIAL_RX_PIN to match for all drivers * on the same serial port, either here or in your board's pins file. */ - #define X_SLAVE_ADDRESS 0 - #define Y_SLAVE_ADDRESS 0 - #define Z_SLAVE_ADDRESS 0 - #define X2_SLAVE_ADDRESS 0 - #define Y2_SLAVE_ADDRESS 0 - #define Z2_SLAVE_ADDRESS 0 - #define Z3_SLAVE_ADDRESS 0 - #define Z4_SLAVE_ADDRESS 0 - #define E0_SLAVE_ADDRESS 0 - #define E1_SLAVE_ADDRESS 0 - #define E2_SLAVE_ADDRESS 0 - #define E3_SLAVE_ADDRESS 0 - #define E4_SLAVE_ADDRESS 0 - #define E5_SLAVE_ADDRESS 0 - #define E6_SLAVE_ADDRESS 0 - #define E7_SLAVE_ADDRESS 0 + #if ENABLED(SKRMiniE3V2) + #define X_SLAVE_ADDRESS 0 + #define Y_SLAVE_ADDRESS 2 + #define Z_SLAVE_ADDRESS 1 + #define E0_SLAVE_ADDRESS 3 + #else + #define X_SLAVE_ADDRESS 0 + #define Y_SLAVE_ADDRESS 0 + #define Z_SLAVE_ADDRESS 0 + #define X2_SLAVE_ADDRESS 0 + #define Y2_SLAVE_ADDRESS 0 + #define Z2_SLAVE_ADDRESS 0 + #define Z3_SLAVE_ADDRESS 0 + #define Z4_SLAVE_ADDRESS 0 + #define E0_SLAVE_ADDRESS 0 + #define E1_SLAVE_ADDRESS 0 + #define E2_SLAVE_ADDRESS 0 + #define E3_SLAVE_ADDRESS 0 + #define E4_SLAVE_ADDRESS 0 + #define E5_SLAVE_ADDRESS 0 + #define E6_SLAVE_ADDRESS 0 + #define E7_SLAVE_ADDRESS 0 + #endif /** * Software enable @@ -2481,7 +2620,7 @@ */ #define STEALTHCHOP_XY #define STEALTHCHOP_Z - #define STEALTHCHOP_E + //#define STEALTHCHOP_E /** * Optimize spreadCycle chopper parameters by using predefined parameter sets @@ -2527,7 +2666,9 @@ * M912 - Clear stepper driver overtemperature pre-warn condition flag. * M122 - Report driver parameters (Requires TMC_DEBUG) */ - //#define MONITOR_DRIVER_STATUS + #if ENABLED(SKR_UART) && DISABLED(SKRMiniE3V2) + #define MONITOR_DRIVER_STATUS + #endif #if ENABLED(MONITOR_DRIVER_STATUS) #define CURRENT_STEP_DOWN 50 // [mA] @@ -2542,17 +2683,16 @@ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD. * M913 X/Y/Z/E to live tune the setting */ - //#define HYBRID_THRESHOLD + #define HYBRID_THRESHOLD - #define X_HYBRID_THRESHOLD 100 // [mm/s] + #define X_HYBRID_THRESHOLD 150 // [mm/s] #define X2_HYBRID_THRESHOLD 100 - #define Y_HYBRID_THRESHOLD 100 + #define Y_HYBRID_THRESHOLD 150 #define Y2_HYBRID_THRESHOLD 100 - #define Z_HYBRID_THRESHOLD 3 - #define Z2_HYBRID_THRESHOLD 3 + #define Z_HYBRID_THRESHOLD 10 + #define Z2_HYBRID_THRESHOLD 10 #define Z3_HYBRID_THRESHOLD 3 - #define Z4_HYBRID_THRESHOLD 3 - #define E0_HYBRID_THRESHOLD 30 + #define E0_HYBRID_THRESHOLD 50 #define E1_HYBRID_THRESHOLD 30 #define E2_HYBRID_THRESHOLD 30 #define E3_HYBRID_THRESHOLD 30 @@ -2618,13 +2758,15 @@ * Beta feature! * Create a 50/50 square wave step pulse optimal for stepper drivers. */ - //#define SQUARE_WAVE_STEPPING + #define SQUARE_WAVE_STEPPING /** * Enable M122 debugging command for TMC stepper drivers. * M122 S0/1 will enable continous reporting. */ - //#define TMC_DEBUG + #if ENABLED(SKR_UART) && DISABLED(SKRMiniE3V2) + #define TMC_DEBUG + #endif /** * You can set your own advanced settings by filling in predefined functions. @@ -3151,15 +3293,18 @@ /** * Auto-report temperatures with M155 S */ -#define AUTO_REPORT_TEMPERATURES - +#if NONE(MachineCR10Orig, LowMemoryBoard) + #define AUTO_REPORT_TEMPERATURES +#endif /** * Include capabilities in M115 output */ -#define EXTENDED_CAPABILITIES_REPORT +#if NONE(MachineCR10Orig, LowMemoryBoard) + #define EXTENDED_CAPABILITIES_REPORT #if ENABLED(EXTENDED_CAPABILITIES_REPORT) //#define M115_GEOMETRY_REPORT #endif +#endif /** * Expected Printer Check @@ -3224,7 +3369,9 @@ /** * Spend 28 bytes of SRAM to optimize the GCode parser */ -#define FASTER_GCODE_PARSER +#if NONE(MachineCR10Orig, LowMemoryBoard) + #define FASTER_GCODE_PARSER +#endif #if ENABLED(FASTER_GCODE_PARSER) //#define GCODE_QUOTED_STRINGS // Support for quoted string parameters @@ -3262,7 +3409,9 @@ * Add G-codes M810-M819 to define and run G-code macros. * Macros are not saved to EEPROM. */ -//#define GCODE_MACROS +#if ANY(SKR13, SKR14, SKR14Turbo, SKRPRO11) + #define GCODE_MACROS +#endif #if ENABLED(GCODE_MACROS) #define GCODE_MACROS_SLOTS 5 // Up to 10 may be used #define GCODE_MACROS_SLOT_SIZE 50 // Maximum length of a single macro @@ -3271,27 +3420,46 @@ /** * User-defined menu items that execute custom GCode */ -//#define CUSTOM_USER_MENUS +#if ANY(ABL_UBL, ABL_BI) + #define CUSTOM_USER_MENUS +#endif + #if ENABLED(CUSTOM_USER_MENUS) - //#define CUSTOM_USER_MENU_TITLE "Custom Commands" - #define USER_SCRIPT_DONE "M117 User Script Done" + //#define USER_SCRIPT_DONE "M117 User Script Done" #define USER_SCRIPT_AUDIBLE_FEEDBACK - //#define USER_SCRIPT_RETURN // Return to status screen after a script + #define USER_SCRIPT_RETURN // Return to status screen after a script + #define CUSTOM_USER_MENU_TITLE "Leveling Tools" - #define USER_DESC_1 "Home & UBL Info" - #define USER_GCODE_1 "G28\nG29 W" + #if ENABLED(BedDC) + #define CommBedTmp "55" + #else + #define CommBedTmp "75" + #endif - #define USER_DESC_2 "Preheat for " PREHEAT_1_LABEL - #define USER_GCODE_2 "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND) + #if ENABLED(DualZ) + #define DualZComm "\nG34I8" + #else + #define DualZComm "" + #endif - #define USER_DESC_3 "Preheat for " PREHEAT_2_LABEL - #define USER_GCODE_3 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND) + #define USER_DESC_1 "Setup" + #if (ENABLED(ABL_UBL)) + #define USER_GCODE_1 "M190S" CommBedTmp "\nG28" DualZComm "\nG29P1\nG29P3\nG29S1\nG29S0\nG29F0.0\nG29A\nM104S215\nG28\nM109S215\nG1X150Y150F5000\nG1Z0\nM500\nM400\nM117 Set Z Offset" + #elif ENABLED(ABL_BI) + #define USER_GCODE_1 "M190S" CommBedTmp "\nG28" DualZComm "\nG29\nM400\nM104S215\nG28\nM109S215\nM420S1\nG1X100Y100F5000\nG1Z0\nM500\nM117 Set Z Offset" + #endif - #define USER_DESC_4 "Heat Bed/Home/Level" - #define USER_GCODE_4 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29" + #define USER_DESC_2 "PID Tune" + #define USER_GCODE_2 "M106S128\nM303C8S215E0U\nM500\nM117 PID Tune Done" - #define USER_DESC_5 "Home & Info" - #define USER_GCODE_5 "G28\nM503" + #define USER_DESC_3 "Prep for Z Adjust" + #define USER_GCODE_3 "M190S" CommBedTmp "\nM104S215\nG28\nG29L1\nG1 X100Y100F5000\nG1Z0" + + #define USER_DESC_4 "Store Settings" + #define USER_GCODE_4 "M500\nM117 Settings Stored" + + //#define USER_DESC_5 "Run Mesh Validation" + //#define USER_GCODE_5 "G26" #endif /** @@ -3308,10 +3476,12 @@ * Host Prompt Support enables Marlin to use the host for user prompts so * filament runout and other processes can be managed from the host side. */ -//#define HOST_ACTION_COMMANDS +#define HOST_ACTION_COMMANDS #if ENABLED(HOST_ACTION_COMMANDS) - //#define HOST_PROMPT_SUPPORT - //#define HOST_START_MENU_ITEM // Add a menu item that tells the host to start + #if DISABLED(MachineCR10Orig) || ENABLED(MelziHostOnly) + #define HOST_PROMPT_SUPPORT + #define HOST_START_MENU_ITEM // Add a menu item that tells the host to start + #endif #endif /** @@ -3319,7 +3489,9 @@ * * Implement M486 to allow Marlin to skip objects */ -//#define CANCEL_OBJECTS +#if NONE(MachineCR10Orig, LowMemoryBoard, EXTENSIBLE_UI, SKRMiniE3V2) + #define CANCEL_OBJECTS +#endif /** * I2C position encoders for closed loop control. diff --git a/Marlin/Version.h b/Marlin/Version.h index fe0724fbfc..e3b05a20f8 100644 --- a/Marlin/Version.h +++ b/Marlin/Version.h @@ -16,7 +16,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . * */ #pragma once @@ -28,25 +28,131 @@ /** * Marlin release version identifier */ -//#define SHORT_BUILD_VERSION "bugfix-2.0.x" +#define SHORT_BUILD_VERSION "2.0.6_DW7" /** * Verbose version identifier which should contain a reference to the location * from where the binary was downloaded or the source code was compiled. */ -//#define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION + +#if(ENABLED(MachineMini)) +#define VerChar1 "M" +#elif(ENABLED(MachineEnder2)) +#define VerChar1 "E2" +#elif(ENABLED(MachineEnder3)) +#define VerChar1 "E3" +#elif ENABLED(MachineEnder3V2) + #define VerChar1 "E3V2" +#elif(ENABLED(MachineEnder4)) +#define VerChar1 "E4" +#elif(ENABLED(MachineEnder5)) +#define VerChar1 "E5" +#elif(ENABLED(MachineEnder5Plus)) +#define VerChar1 "E5P" +#elif(ENABLED(MachineCR20)) +#define VerChar1 "2" +#elif(ENABLED(MachineCR10Orig)) +#define VerChar1 "O" +#elif(ENABLED(MachineCR10Std)) +#define VerChar1 "S" +#elif(ENABLED(MachineCRX)) +#define VerChar1 "X" +#elif(ENABLED(MachineS4)) +#define VerChar1 "4" +#elif(ENABLED(MachineS5) || ENABLED(MachineCR10Max)) +#define VerChar1 "5" +#elif ENABLED(MachineCR2020) + #define VerChar1 "20" +#endif + +#if(ENABLED(HotendStock)) +#define VerChar2 "S" +#elif(ENABLED(HotendE3D)) +#define VerChar2 "E" +#elif ENABLED(HotendMosquito) +#define VerChar2 "M" +#endif + +#if(ENABLED(HotendAllMetal)) +#define VerChar3 "M" +#else +#define VerChar3 "S" +#endif + + +#if(ENABLED(BedAC)) +#define VerChar4 "A" +#elif(ENABLED(BedDC)) +#define VerChar4 "D" +#else +#define VerChar4 "N" +#endif + +#if(ENABLED(ABL_EZABL)) +#define VerChar5 "A" +#elif(ENABLED(ABL_BLTOUCH)) +#define VerChar5 "B" +#else +#define VerChar5 "N" +#endif + +#if(ENABLED(ABL_UBL)) +#define VerChar6 "U" +#elif(ENABLED(ABL_BI)) +#define VerChar6 "B" +#else +#define VerChar6 "N" +#endif + +#define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION " TM3D " VerChar1 VerChar2 VerChar3 VerChar4 VerChar5 VerChar6 /** * The STRING_DISTRIBUTION_DATE represents when the binary file was built, * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2019-07-10" +#define STRING_DISTRIBUTION_DATE "2020-08-10" /** * Defines a generic printer name to be output to the LCD after booting Marlin. */ -//#define MACHINE_NAME "3D Printer" +#if(ENABLED(MachineMini)) +#define CUSTOM_MACHINE_NAME "Mini SuPeR" +#elif(ENABLED(MachineEnder2)) +#define CUSTOM_MACHINE_NAME "TM3D Ender2" +#elif(ENABLED(MachineEnder3)) +#define CUSTOM_MACHINE_NAME "TM3D Ender3" +#elif(ENABLED(MachineEnder3V2)) +#define CUSTOM_MACHINE_NAME "TM3D Ender3V2" +#elif(ENABLED(MachineEnder4)) +#define CUSTOM_MACHINE_NAME "TM3D Ender4" +#elif(ENABLED(MachineEnder5)) +#define CUSTOM_MACHINE_NAME "TM3D Ender5" +#elif(ENABLED(MachineEnder5Plus)) +#define CUSTOM_MACHINE_NAME "TM3D E5 Plus" +#elif(ENABLED(MachineCR20)) +#define CUSTOM_MACHINE_NAME "SuPeR CR-20" +#elif(ENABLED(MachineCR10Orig)) +#define CUSTOM_MACHINE_NAME "SuPeR CR-10" +#elif(ENABLED(MachineCRX)) +#define CUSTOM_MACHINE_NAME "TM3D CR-X" +#elif ENABLED(MachineCR10SProV2) + #define CUSTOM_MACHINE_NAME "TM3D 10SProV2" +#elif(ENABLED(MachineCR10SPro)) +#define CUSTOM_MACHINE_NAME "TM3D 10S Pro" +#elif(ENABLED(MachineCR10Max)) +#define CUSTOM_MACHINE_NAME "TM3D Max" +#elif(ENABLED(MachineCR10SV2)) +#define CUSTOM_MACHINE_NAME "TM3D CR10V2" +#elif(ENABLED(MachineCR10Std)) +#define CUSTOM_MACHINE_NAME "300 SuPeR" +#elif(ENABLED(MachineS4)) +#define CUSTOM_MACHINE_NAME "400 SuPeR" +#elif(ENABLED(MachineS5)) +#define CUSTOM_MACHINE_NAME "500 SuPeR" +#elif ENABLED(MachineCR2020) + #define CUSTOM_MACHINE_NAME "TM3D 2020" +#endif /** * The SOURCE_CODE_URL is the location where users will find the Marlin Source @@ -54,7 +160,7 @@ * has a distinct Github fork— the Source Code URL should just be the main * Marlin repository. */ -//#define SOURCE_CODE_URL "https://github.com/MarlinFirmware/Marlin" +#define SOURCE_CODE_URL "https://github.com/InsanityAutomation/Marlin/tree/CrealityDwin_2.0" /** * Default generic printer UUID. @@ -65,12 +171,12 @@ * The WEBSITE_URL is the location where users can get more information such as * documentation about a specific Marlin release. */ -//#define WEBSITE_URL "https://marlinfw.org" +#define WEBSITE_URL "tinymachines3d.com" /** * Set the vendor info the serial USB interface, if changable * Currently only supported by DUE platform */ -//#define USB_DEVICE_VENDOR_ID 0x0000 -//#define USB_DEVICE_PRODUCT_ID 0x0000 -//#define USB_DEVICE_MANUFACTURE_NAME WEBSITE_URL +//#define USB_DEVICE_VENDOR_ID 0x0000 +//#define USB_DEVICE_PRODUCT_ID 0x0000 +//#define USB_DEVICE_MANUFACTURE_NAME WEBSITE_URL \ No newline at end of file diff --git a/Marlin/_Bootscreen.h b/Marlin/_Bootscreen.h new file mode 100644 index 0000000000..d262102e47 --- /dev/null +++ b/Marlin/_Bootscreen.h @@ -0,0 +1,93 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/** + * Custom Bitmap for splashscreen + * + * You may use one of the following tools to generate the C++ bitmap array from + * a black and white image: + * + * - http://www.marlinfw.org/tools/u8glib/converter.html + * - http://www.digole.com/tools/PicturetoC_Hex_converter.php + */ + +#define CUSTOM_BOOTSCREEN_TIMEOUT 2500 +#define CUSTOM_BOOTSCREEN_BMPWIDTH 128 +#define CUSTOM_BOOTSCREEN_INVERTED + +const unsigned char custom_start_bmp[] PROGMEM = { + B11111101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, + B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, + B11111101,B00000000,B00000000,B00000111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, + B11111110,B00000111,B11000000,B00000101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, + B11111100,B00001010,B00100000,B00000110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, + B11111110,B00010100,B00010000,B00000101,B00000000,B00000000,B00000111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, + B11111100,B00101000,B00001000,B00000110,B00000111,B11000000,B00000101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111,B11111111,B11111111,B11111111, + B11111110,B01010100,B00000100,B00000100,B00001010,B00100000,B00000110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111111, + B11111100,B01100000,B00000100,B00000110,B00010100,B00010000,B00000101,B00000000,B00000000,B00000111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, + B11111110,B01010000,B00000100,B00000100,B00101000,B00001000,B00000110,B00000111,B11000000,B00000101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111, + B11111100,B01100000,B00000100,B00000110,B01010100,B00000100,B00000100,B00001010,B00100000,B00000110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111, + B11111110,B01010100,B00000100,B00011100,B01100000,B00000100,B00000110,B00010100,B00010000,B00000101,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111, + B11111100,B00101000,B00001000,B00101110,B01010000,B00000100,B00000100,B00101000,B00001000,B00000110,B00000111,B11000000,B00000000,B00000001,B11110000,B00111111, + B11111110,B00010100,B00010000,B01010100,B01100000,B00000100,B00000110,B01010100,B00000100,B00000100,B00001010,B00100000,B00000000,B00000010,B00001000,B00011111, + B11111100,B00001010,B00100000,B01100110,B01010100,B00000100,B00011100,B01100000,B00000100,B00000110,B00010100,B00010000,B00000000,B00000101,B00000100,B00111111, + B11111110,B00000111,B11000000,B01010100,B00101000,B00001000,B00101110,B01010000,B00000100,B00000100,B00101000,B00001000,B00000000,B00001010,B00000010,B00011111, + B11111100,B00000000,B00000000,B00101110,B00010100,B00010000,B01010100,B01100000,B00000100,B00000110,B01010100,B00000100,B00000000,B00010101,B00000001,B00111111, + B11111110,B00000000,B00000000,B00011100,B00001010,B00100000,B01100110,B01010100,B00000100,B00011100,B01100000,B00000100,B00000000,B00011000,B00000001,B00011111, + B11111100,B00000000,B00000000,B00000110,B00000111,B11000000,B01010100,B00101000,B00001000,B00101110,B01010000,B00000100,B00000000,B00010100,B00000001,B00111111, + B11111110,B00000000,B00000000,B00000100,B00000000,B00000000,B00101110,B00010100,B00010000,B01010100,B01100000,B00000100,B00000000,B00011000,B00000001,B00011111, + B11111100,B11111111,B11111111,B11111110,B00000000,B00000000,B00011100,B00001010,B00100000,B01100110,B01010100,B00000100,B00011100,B00010101,B00000001,B00111111, + B11111110,B11010101,B01010101,B01010100,B00000000,B00000000,B00000110,B00000111,B11000000,B01010100,B00101000,B00001000,B00101010,B00001010,B00000010,B00011111, + B11111100,B10000100,B00010000,B01000110,B00000000,B00000000,B00000100,B00000000,B00000000,B00101110,B00010100,B00010000,B01010001,B00000101,B00000100,B00111111, + B11111110,B11000100,B00010000,B01000100,B11111111,B11111111,B11111110,B00000000,B00000000,B00011100,B00001010,B00100000,B01100001,B00000010,B10001000,B00011111, + B11111100,B10000100,B00010000,B01000110,B11010101,B01010101,B01010100,B00000000,B00000000,B00000110,B00000111,B11000000,B01010001,B00000001,B11110000,B00111111, + B11111110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000110,B00000000,B00000000,B00000100,B00000000,B00000000,B00101010,B00000000,B00000000,B00011111, + B11111100,B11000100,B00010000,B01000110,B11000100,B00010000,B01000100,B11111111,B11111111,B11111110,B00000000,B00000000,B00011100,B00000000,B00000000,B00111111, + B11111110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000110,B11010101,B01010101,B01010100,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111, + B11111100,B11010101,B01010101,B01010110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111, + B11111100,B11111111,B11111111,B11111100,B11000100,B00010000,B01000110,B11000100,B00010000,B01000100,B11111111,B11111111,B11111111,B11111111,B11111111,B10011111, + B11111110,B00000000,B00000000,B00000110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000110,B11010101,B01010101,B01010101,B01010101,B01010101,B10111111, + B11111101,B01010101,B01010101,B01010100,B11010101,B01010101,B01010110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000001,B00000100,B00010000,B10011111, + B11111111,B11111111,B11111111,B11111100,B11111111,B11111111,B11111100,B11000100,B00010000,B01000110,B11000100,B00010000,B01000001,B00000100,B00010001,B10111111, + B11111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000001,B00000100,B00010000,B10011111, + B11111111,B11111111,B11111111,B11111101,B01010101,B01010101,B01010100,B11010101,B01010101,B01010110,B10000100,B00010000,B01000001,B00000100,B00010000,B10011111, + B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B11111111,B11111111,B11111100,B11000100,B00010000,B01000001,B00000100,B00010001,B10111111, + B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000110,B10000100,B00010000,B01000001,B00000100,B00010000,B10011111, + B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111101,B01010101,B01010101,B01010100,B11010101,B01010101,B01010101,B01010101,B01010101,B10111111, + B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B11111111,B11111111,B11111111,B11111111,B11111111,B10011111, + B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111, + B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111, + B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, + B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, + B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, + B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, + B11100000,B00101110,B11111011,B01111101,B11111011,B11111011,B11001111,B11000001,B11011111,B10111011,B00111110,B11000000,B11100001,B11111110,B00111100,B00011111, + B11111101,B11101110,B01111011,B00111001,B11111001,B11110011,B11001111,B10011110,B11011111,B10111011,B00111110,B11011111,B11011110,B11111100,B11011101,B11100111, + B11111101,B11101110,B00111011,B10111011,B11111001,B11101011,B11010111,B10111111,B01011111,B10111011,B01011110,B11011111,B11011110,B11111101,B11101101,B11110111, + B11111101,B11101110,B10111011,B11010011,B11111010,B11101011,B10110111,B00111111,B11011111,B10111011,B01001110,B11011111,B11011111,B11111111,B11001101,B11110011, + B11111101,B11101110,B11011011,B11000111,B11111010,B11101011,B10111011,B01111111,B11000000,B00111011,B01101110,B11000000,B11100011,B11111111,B00011101,B11110011, + B11111101,B11101110,B11001011,B11101111,B11111010,B11011011,B10111011,B01111111,B11011111,B10111011,B01100110,B11011111,B11111000,B11111111,B11001101,B11110011, + B11111101,B11101110,B11101011,B11101111,B11111011,B01011011,B00000011,B00111111,B01011111,B10111011,B01110110,B11011111,B11111110,B01111111,B11101101,B11110011, + B11111101,B11101110,B11110011,B11101111,B11111011,B01011011,B01111001,B10111110,B11011111,B10111011,B01111010,B11011111,B11011110,B01111101,B11101101,B11110111, + B11111101,B11101110,B11110011,B11101111,B11111011,B10111010,B11111101,B10011110,B11011111,B10111011,B01111100,B11011111,B11011110,B11111101,B11001101,B11100111, + B11111101,B11101110,B11111011,B11101111,B11111011,B10111010,B11111101,B11000001,B11011111,B10111011,B01111110,B11000000,B11100000,B11111110,B00011100,B00011111 +}; diff --git a/Marlin/_Statusscreen.h b/Marlin/_Statusscreen.h new file mode 100644 index 0000000000..d0450837ab --- /dev/null +++ b/Marlin/_Statusscreen.h @@ -0,0 +1,74 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/** + * Custom Status Screen bitmap + * + * Place this file in the root with your configuration files + * and enable CUSTOM_STATUS_SCREEN_IMAGE in Configuration.h. + * + * Use the Marlin Bitmap Converter to make your own: + * http://marlinfw.org/tools/u8glib/converter.html + */ + +// +// Status Screen Logo bitmap +// +#define STATUS_LOGO_Y 3 +#define STATUS_LOGO_WIDTH 24 + +const unsigned char status_logo_bmp[] PROGMEM = { + B11111111,B11111111,B11111111, + B10000000,B00000000,B00000001, + B10001110,B00000000,B11100001, + B10011111,B00000001,B11110001, + B10010011,B10000001,B00111001, + B10011111,B10000001,B11111001, + B10011111,B10000001,B11111001, + B10011111,B10111001,B11111001, + B10001111,B00101000,B11110001, + B10000000,B00111000,B00000001, + B10000000,B00000000,B00000001, + B10011111,B11111111,B11111001, + B10010001,B01110100,B10011001, + B10011011,B00000110,B10101001, + B10011011,B01010100,B10101001, + B10011011,B01010110,B10101001, + B10011011,B01010100,B10011001, + B10011111,B11111111,B11111001, + B11111111,B11111111,B11111111 +}; + +// +// Use default bitmaps +// +#define STATUS_HOTEND_ANIM +#define STATUS_BED_ANIM +#if HOTENDS < 2 + #define STATUS_LOGO_X 8 + #define STATUS_HEATERS_X 40 + #define STATUS_BED_X 72 +#else + #define STATUS_LOGO_X 0 + #define STATUS_HEATERS_X 32 + #define STATUS_BED_X 80 +#endif diff --git a/Marlin/src/lcd/dwin/dwin_lcd.cpp b/Marlin/src/lcd/dwin/dwin_lcd.cpp index 7d1528bed1..5faad38174 100644 --- a/Marlin/src/lcd/dwin/dwin_lcd.cpp +++ b/Marlin/src/lcd/dwin/dwin_lcd.cpp @@ -42,7 +42,7 @@ // Make sure DWIN_SendBuf is large enough to hold the largest string plus draw command and tail. // Assume the narrowest (6 pixel) font and 2-byte gb2312-encoded characters. -uint8_t DWIN_SendBuf[11 + DWIN_WIDTH / 6 * 2] = { 0xAA }; +uint8_t DWIN_SendBuf[11 + DWIN_WIDTH / 8] = { 0xAA }; uint8_t DWIN_BufTail[4] = { 0xCC, 0x33, 0xC3, 0x3C }; uint8_t databuf[26] = { 0 }; uint8_t receivedType; diff --git a/Marlin/src/lcd/dwin/e3v2/dwin.h b/Marlin/src/lcd/dwin/e3v2/dwin.h index 5bff2e9f78..0b6d0dbc81 100644 --- a/Marlin/src/lcd/dwin/e3v2/dwin.h +++ b/Marlin/src/lcd/dwin/e3v2/dwin.h @@ -75,11 +75,11 @@ enum processID : uint8_t { Move_X, Move_Y, Move_Z, + Extruder, + Homeoffset, #if HAS_HOTEND - Extruder, ETemp, #endif - Homeoffset, #if HAS_HEATED_BED BedTemp, #endif diff --git a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp new file mode 100644 index 0000000000..3217dcde71 --- /dev/null +++ b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.cpp @@ -0,0 +1,1940 @@ +#include "Creality_DWIN.h" +#include +#include +#include +#include "../../ui_api.h" + +#if ENABLED(EXTENSIBLE_UI) +namespace ExtUI +{ + uint8_t waitway_lock = 0; + const float manual_feedrate_mm_m[] = MANUAL_FEEDRATE; + uint8_t startprogress = 0; + CRec CardRecbuf; + + char waitway = 0; + int recnum = 0; + unsigned char Percentrecord = 0; + float ChangeMaterialbuf[2] = {0}; + + char NozzleTempStatus[3] = {0}; + + bool PrintMode = false; //Eco Mode default off + + char PrintStatue[2] = {0}; //PrintStatue[0], 0 represent to 43 page, 1 represent to 44 page + + char PrinterStatusKey[2] = {0}; // PrinterStatusKey[1] value: 0 represents to keep temperature, 1 represents to heating , 2 stands for cooling , 3 stands for printing + // PrinterStatusKey[0] value: 0 reprensents 3D printer ready + char FilementStatus[2] = {0}; + + unsigned char AxisPagenum = 0; //0 for 10mm, 1 for 1mm, 2 for 0.1mm + bool InforShowStatus = true; + bool TPShowStatus = false; // true for only opening time and percentage, false for closing time and percentage. + bool FanStatus = true; + bool AutohomeKey = false; + unsigned char AutoHomeIconNum; + unsigned long VolumeSet = 0x20; + + bool reEntryPrevent = false; + uint16_t idleThrottling = 0; + + #if HAS_PID_HEATING + uint16_t pid_hotendAutoTemp = 150; + uint16_t pid_bedAutoTemp = 70; + #endif + +void onStartup() +{ + DWIN_SERIAL.begin(115200); + + rtscheck.recdat.head[0] = rtscheck.snddat.head[0] = FHONE; + rtscheck.recdat.head[1] = rtscheck.snddat.head[1] = FHTWO; + memset(rtscheck.databuf, 0, sizeof(rtscheck.databuf)); + + //VolumeSet = eeprom_read_byte((unsigned char*)FONT_EEPROM+4); + //if(VolumeSet < 0 || VolumeSet > 0xFF) + + //Set Eco Mode + if (PrintMode) + rtscheck.RTS_SndData(3, FanKeyIcon + 1); // saving mode + else + rtscheck.RTS_SndData(2, FanKeyIcon + 1); // normal + + rtscheck.RTS_SndData(100, FeedrateDisplay); + + /***************turn off motor*****************/ + rtscheck.RTS_SndData(11, FilenameIcon); + + /***************transmit temperature to screen*****************/ + rtscheck.RTS_SndData(0, NozzlePreheat); + rtscheck.RTS_SndData(0, BedPreheat); + rtscheck.RTS_SndData(getActualTemp_celsius(H0), NozzleTemp); + rtscheck.RTS_SndData(getActualTemp_celsius(BED), Bedtemp); + /***************transmit Fan speed to screen*****************/ + rtscheck.RTS_SndData(2, FanKeyIcon); //turn 0ff fan icon + FanStatus = true; + + /***************transmit Printer information to screen*****************/ + for (int j = 0; j < 20; j++) //clean filename + rtscheck.RTS_SndData(0, MacVersion + j); + char sizebuf[20] = {0}; + sprintf(sizebuf, "%d X %d X %d", Y_BED_SIZE, X_BED_SIZE, Z_MAX_POS); + #if defined(CUSTOM_MACHINE_NAME) + rtscheck.RTS_SndData(CUSTOM_MACHINE_NAME, MacVersion); + #else + rtscheck.RTS_SndData(MACHINE_NAME, MacVersion); + #endif + rtscheck.RTS_SndData(DETAILED_BUILD_VERSION, SoftVersion); + rtscheck.RTS_SndData(sizebuf, PrinterSize); + rtscheck.RTS_SndData(WEBSITE_URL, CorpWebsite); + + /**************************some info init*******************************/ + rtscheck.RTS_SndData(0, PrintscheduleIcon); + rtscheck.RTS_SndData(0, PrintscheduleIcon + 1); + + /************************clean screen*******************************/ + for (int i = 0; i < MaxFileNumber; i++) + { + for (int j = 0; j < 10; j++) + rtscheck.RTS_SndData(0, SDFILE_ADDR + i * 10 + j); + } + + for (int j = 0; j < 10; j++) + { + rtscheck.RTS_SndData(0, Printfilename + j); //clean screen. + rtscheck.RTS_SndData(0, Choosefilename + j); //clean filename + } + for (int j = 0; j < 8; j++) + rtscheck.RTS_SndData(0, FilenameCount + j); + for (int j = 1; j <= MaxFileNumber; j++) + { + rtscheck.RTS_SndData(10, FilenameIcon + j); + rtscheck.RTS_SndData(10, FilenameIcon1 + j); + } + + SERIAL_ECHOLN("==Dwin Init Complete=="); +} + +void onIdle() +{ + if (reEntryPrevent) + return; + if(idleThrottling++ < 750){ + return; + } + + reEntryPrevent = true; + idleThrottling = 0; + if(waitway && !commandsInQueue()) + waitway_lock++; + else + waitway_lock = 0; + + if(waitway_lock > 100) { + waitway_lock = 0; + waitway = 0; //clear waitway if nothing is going on + } + + switch (waitway) + { + case 1: + if(isPositionKnown()) { + InforShowStatus = true; + SERIAL_ECHOLN("==waitway 1=="); + rtscheck.RTS_SndData(4 + CEIconGrap, IconPrintstatus); // 4 for Pause + rtscheck.RTS_SndData(ExchangePageBase + 54, ExchangepageAddr); + waitway = 0; + } + break; + + case 2: + if (isPositionKnown() && !commandsInQueue()) + waitway = 0; + break; + + case 3: + SERIAL_ECHOLN("==waitway 3=="); + //if(isPositionKnown() && (getActualTemp_celsius(BED) >= (getTargetTemp_celsius(BED)-1))) { + rtscheck.RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + waitway = 7; + //return; + //} + break; + + case 4: + if (AutohomeKey && isPositionKnown() && !commandsInQueue()) + { //Manual Move Home Done + SERIAL_ECHOLN("==waitway 4=="); + rtscheck.RTS_SndData(ExchangePageBase + 71 + AxisPagenum, ExchangepageAddr); + AutohomeKey = false; + waitway = 0; + } + break; + case 5: + if(isPositionKnown() && !commandsInQueue()) { + InforShowStatus = true; + waitway = 0; + SERIAL_ECHOLN("==waitway 5=="); + rtscheck.RTS_SndData(ExchangePageBase + 78, ExchangepageAddr); //exchange to 78 page + } + break; + case 6: + if(!commandsInQueue()) { + setAxisPosition_mm(LEVEL_CORNERS_HEIGHT, (axis_t)Z); + waitway = 0; + } + break; + case 7: + if(!commandsInQueue()) + waitway = 0; + break; + } + + void yield(); + + if (InforShowStatus) + { + if (startprogress == 0) + { + rtscheck.RTS_SndData(StartSoundSet, SoundAddr); + if (VolumeSet == 0) + { + rtscheck.RTS_SndData(0, VolumeIcon); + rtscheck.RTS_SndData(9, SoundIcon); + } + else + { + rtscheck.RTS_SndData((VolumeSet + 1) / 32 - 1, VolumeIcon); + rtscheck.RTS_SndData(8, SoundIcon); + } + rtscheck.RTS_SndData(VolumeSet, VolumeIcon - 2); + rtscheck.RTS_SndData(VolumeSet << 8, SoundAddr + 1); + #if HAS_MESH + if (getLevelingActive()) + rtscheck.RTS_SndData(3, AutoLevelIcon); /*On*/ + else + rtscheck.RTS_SndData(2, AutoLevelIcon); /*Off*/ + #endif + startprogress += 25; + } + else if( startprogress < 250) + { + startprogress = 254; + SERIAL_ECHOLN(" startprogress "); + InforShowStatus = true; + TPShowStatus = false; + rtscheck.RTS_SndData(ExchangePageBase + 45, ExchangepageAddr); + reEntryPrevent = false; + return; + } + if (startprogress <= 100) + rtscheck.RTS_SndData(startprogress, StartIcon); + else + rtscheck.RTS_SndData((startprogress - 100), StartIcon + 1); + + //rtscheck.RTS_SndData((startprogress++) % 5, ExchFlmntIcon); + + if (isPrinting()) + { + rtscheck.RTS_SndData(0 + CEIconGrap, IconPrintstatus); + rtscheck.RTS_SndData(getProgress_seconds_elapsed() / 3600, Timehour); + rtscheck.RTS_SndData((getProgress_seconds_elapsed() % 3600) / 60, Timemin); + if (getProgress_percent() > 0) + { + Percentrecord = getProgress_percent() + 1; + if (Percentrecord <= 50) + { + rtscheck.RTS_SndData((unsigned int)Percentrecord * 2, PrintscheduleIcon); + rtscheck.RTS_SndData(0, PrintscheduleIcon + 1); + } + else + { + rtscheck.RTS_SndData(100, PrintscheduleIcon); + rtscheck.RTS_SndData((unsigned int)Percentrecord * 2 - 100, PrintscheduleIcon + 1); + } + } + else + { + rtscheck.RTS_SndData(0, PrintscheduleIcon); + rtscheck.RTS_SndData(0, PrintscheduleIcon + 1); + } + rtscheck.RTS_SndData((unsigned int)getProgress_percent(), Percentage); + } + else if (getActualTemp_celsius(BED) < (getTargetTemp_celsius(BED) - THERMAL_PROTECTION_BED_HYSTERESIS ) || (getActualTemp_celsius(H0) < (getTargetTemp_celsius(H0) - THERMAL_PROTECTION_HYSTERESIS))) + { + rtscheck.RTS_SndData(1 + CEIconGrap, IconPrintstatus); // Heating Status + PrinterStatusKey[1] = (PrinterStatusKey[1] == 0 ? 1 : PrinterStatusKey[1]); + } + else if (getActualTemp_celsius(BED) > (getTargetTemp_celsius(BED) + THERMAL_PROTECTION_BED_HYSTERESIS) || (getActualTemp_celsius(H0) > (getTargetTemp_celsius(H0) + THERMAL_PROTECTION_HYSTERESIS))) + { + rtscheck.RTS_SndData(8 + CEIconGrap, IconPrintstatus); // Cooling Status + PrinterStatusKey[1] = (PrinterStatusKey[1] == 0 ? 2 : PrinterStatusKey[1]); + } + + + rtscheck.RTS_SndData(getZOffset_mm() * 100, 0x1026); + //float temp_buf = getActualTemp_celsius(H0); + rtscheck.RTS_SndData(getActualTemp_celsius(H0), NozzleTemp); + rtscheck.RTS_SndData(getActualTemp_celsius(BED), Bedtemp); + rtscheck.RTS_SndData(getTargetTemp_celsius(H0), NozzlePreheat); + rtscheck.RTS_SndData(getTargetTemp_celsius(BED), BedPreheat); + rtscheck.RTS_SndData((unsigned int)(getFlowPercentage(E0)), Flowrate); + //SERIAL_ECHOLNPAIR("getFlowPercentage =", (unsigned int)getFlowPercentage(E0)); + rtscheck.RTS_SndData((unsigned int)(getAxisSteps_per_mm(X) * 10), StepMM_X); + rtscheck.RTS_SndData((unsigned int)(getAxisSteps_per_mm(Y) * 10), StepMM_Y); + rtscheck.RTS_SndData((unsigned int)(getAxisSteps_per_mm(Z) * 10), StepMM_Z); + rtscheck.RTS_SndData((unsigned int)(getAxisSteps_per_mm(E0) * 10), StepMM_E); + + #if HAS_BED_PROBE + rtscheck.RTS_SndData(getProbeOffset_mm(X) * 100, ProbeOffset_X); + rtscheck.RTS_SndData(getProbeOffset_mm(Y) * 100, ProbeOffset_Y); + rtscheck.RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z); + #endif + + #if HAS_PID_HEATING + rtscheck.RTS_SndData(pid_hotendAutoTemp, HotendPID_AutoTmp); + rtscheck.RTS_SndData(pid_bedAutoTemp, BedPID_AutoTmp); + rtscheck.RTS_SndData((unsigned int)(getPIDValues_Kp(E0) * 10), HotendPID_P); + rtscheck.RTS_SndData((unsigned int)(getPIDValues_Ki(E0) * 10), HotendPID_I); + rtscheck.RTS_SndData((unsigned int)(getPIDValues_Kd(E0) * 10), HotendPID_D); + #if ENABLED(PIDTEMPBED) + rtscheck.RTS_SndData((unsigned int)(getBedPIDValues_Kp() * 10), BedPID_P); + rtscheck.RTS_SndData((unsigned int)(getBedPIDValues_Ki() * 10), BedPID_I); + rtscheck.RTS_SndData((unsigned int)(getBedPIDValues_Kd() * 10), BedPID_D); + #endif + #endif + + if (NozzleTempStatus[0] || NozzleTempStatus[2]) //statuse of loadfilement and unloadfinement when temperature is less than + { + unsigned int IconTemp; + + IconTemp = getActualTemp_celsius(H0) * 100 / getTargetTemp_celsius(H0); + if (IconTemp >= 100) + IconTemp = 100; + rtscheck.RTS_SndData(IconTemp, HeatPercentIcon); + if (getActualTemp_celsius(H0) > EXTRUDE_MINTEMP && NozzleTempStatus[0]!=0) + { + NozzleTempStatus[0] = 0; + rtscheck.RTS_SndData(10 * ChangeMaterialbuf[0], FilementUnit1); + rtscheck.RTS_SndData(10 * ChangeMaterialbuf[1], FilementUnit2); + SERIAL_ECHOLN("==Heating Done Change Filament=="); + rtscheck.RTS_SndData(ExchangePageBase + 65, ExchangepageAddr); + } + else if (getActualTemp_celsius(H0) >= getTargetTemp_celsius(H0) && NozzleTempStatus[2]) + { + SERIAL_ECHOLNPAIR("***NozzleTempStatus[2] =", (int)NozzleTempStatus[2]); + NozzleTempStatus[2] = 0; + TPShowStatus = true; + rtscheck.RTS_SndData(4, ExchFlmntIcon); + rtscheck.RTS_SndData(ExchangePageBase + 83, ExchangepageAddr); + } + else if (NozzleTempStatus[2]) + { + //rtscheck.RTS_SndData((startprogress++) % 5, ExchFlmntIcon); + } + } + + if (AutohomeKey) + { + rtscheck.RTS_SndData(AutoHomeIconNum++, AutoZeroIcon); + if (AutoHomeIconNum > 9) + AutoHomeIconNum = 0; + } + } + void yield(); + if (rtscheck.RTS_RecData() > 0) + rtscheck.RTS_HandleData(); + + if(rtscheck.recdat.addr != DisplayZaxis && rtscheck.recdat.addr != DisplayYaxis && rtscheck.recdat.addr != DisplayZaxis) { + rtscheck.RTS_SndData(10 * getAxisPosition_mm((axis_t)X), DisplayXaxis); + rtscheck.RTS_SndData(10 * getAxisPosition_mm((axis_t)Y), DisplayYaxis); + rtscheck.RTS_SndData(10 * getAxisPosition_mm((axis_t)Z), DisplayZaxis); + } + reEntryPrevent = false; +} + +RTSSHOW::RTSSHOW() +{ + recdat.head[0] = snddat.head[0] = FHONE; + recdat.head[1] = snddat.head[1] = FHTWO; + memset(databuf, 0, sizeof(databuf)); +} + +int RTSSHOW::RTS_RecData() +{ + while (DWIN_SERIAL.available() > 0 && (recnum < SizeofDatabuf)) + { + databuf[recnum] = DWIN_SERIAL.read(); + if (databuf[0] != FHONE) //ignore the invalid data + { + if (recnum > 0) // prevent the program from running. + { + memset(databuf, 0, sizeof(databuf)); + recnum = 0; + } + continue; + } + delay_ms(2); + recnum++; + } + + if (recnum < 1) //receive nothing + return -1; + else if ((recdat.head[0] == databuf[0]) && (recdat.head[1] == databuf[1]) && recnum > 2) + { + // SERIAL_ECHOLN(" *** RTS_RecData1*** "); + + recdat.len = databuf[2]; + recdat.command = databuf[3]; + if (recdat.len == 0x03 && (recdat.command == 0x82 || recdat.command == 0x80) && (databuf[4] == 0x4F) && (databuf[5] == 0x4B)) //response for writing byte + { + memset(databuf, 0, sizeof(databuf)); + recnum = 0; + //SERIAL_ECHOLN(" *** RTS_RecData1*** "); + return -1; + } + 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 long 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) //response for reading the page from the register + { + recdat.addr = databuf[4]; + recdat.bytelen = databuf[5]; + for (unsigned long i = 0; i < recdat.bytelen; i++) + { + recdat.data[i] = databuf[6 + i]; + //recdat.data[i]= (recdat.data[i] << 8 )| databuf[7+i]; + } + } + } + else + { + memset(databuf, 0, sizeof(databuf)); + recnum = 0; + return -1; //receive the wrong data + } + memset(databuf, 0, sizeof(databuf)); + recnum = 0; + return 2; +} + +void RTSSHOW::RTS_SndData(void) +{ + if ((snddat.head[0] == FHONE) && (snddat.head[1] == FHTWO) && snddat.len >= 3) + { + databuf[0] = snddat.head[0]; + databuf[1] = snddat.head[1]; + databuf[2] = snddat.len; + databuf[3] = snddat.command; + if (snddat.command == 0x80) //to write data to the register + { + databuf[4] = snddat.addr; + for (int i = 0; i < (snddat.len - 2); i++) + databuf[5 + i] = snddat.data[i]; + } + else if (snddat.len == 3 && (snddat.command == 0x81)) //to read data from the register + { + databuf[4] = snddat.addr; + databuf[5] = snddat.bytelen; + } + else if (snddat.command == 0x82) //to write data to the variate + { + databuf[4] = snddat.addr >> 8; + databuf[5] = snddat.addr & 0xFF; + for (int i = 0; i < (snddat.len - 3); i += 2) + { + databuf[6 + i] = snddat.data[i / 2] >> 8; + databuf[7 + i] = snddat.data[i / 2] & 0xFF; + } + } + else if (snddat.len == 4 && (snddat.command == 0x83)) //to read data from the variate + { + databuf[4] = snddat.addr >> 8; + databuf[5] = snddat.addr & 0xFF; + databuf[6] = snddat.bytelen; + } + for (int i = 0; i < (snddat.len + 3); i++) + { + DWIN_SERIAL.write(databuf[i]); + delay_us(1); + } + + memset(&snddat, 0, sizeof(snddat)); + memset(databuf, 0, sizeof(databuf)); + snddat.head[0] = FHONE; + snddat.head[1] = FHTWO; + } +} + +void RTSSHOW::RTS_SndData(const String &s, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) +{ + if (s.length() < 1) + return; + RTS_SndData(s.c_str(), addr, cmd); +} + +void RTSSHOW::RTS_SndData(const char *str, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) +{ + + int len = strlen(str); + + if (len > 0) + { + databuf[0] = FHONE; + databuf[1] = FHTWO; + databuf[2] = 3 + len; + databuf[3] = cmd; + databuf[4] = addr >> 8; + databuf[5] = addr & 0x00FF; + for (int i = 0; i < len; i++) + databuf[6 + i] = str[i]; + + for (int i = 0; i < (len + 6); i++) + { + DWIN_SERIAL.write(databuf[i]); + delay_us(1); + } + memset(databuf, 0, sizeof(databuf)); + } +} + +void RTSSHOW::RTS_SndData(char c, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) +{ + snddat.command = cmd; + snddat.addr = addr; + snddat.data[0] = (unsigned long)c; + snddat.data[0] = snddat.data[0] << 8; + snddat.len = 5; + RTS_SndData(); +} + +void RTSSHOW::RTS_SndData(unsigned char *str, unsigned long addr, unsigned char cmd) { RTS_SndData((char *)str, addr, cmd); } + +void RTSSHOW::RTS_SndData(int n, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) +{ + if (cmd == VarAddr_W) + { + if ((uint8_t)n > 0xFFFF) + { + snddat.data[0] = n >> 16; + snddat.data[1] = n & 0xFFFF; + snddat.len = 7; + } + else + { + snddat.data[0] = n; + snddat.len = 5; + } + } + else if (cmd == RegAddr_W) + { + snddat.data[0] = n; + snddat.len = 3; + } + else if (cmd == VarAddr_R) + { + snddat.bytelen = n; + snddat.len = 4; + } + snddat.command = cmd; + snddat.addr = addr; + RTS_SndData(); +} + +void RTSSHOW::RTS_SndData(unsigned int n, unsigned long addr, unsigned char cmd) { RTS_SndData((int)n, addr, cmd); } + +void RTSSHOW::RTS_SndData(float n, unsigned long addr, unsigned char cmd) { RTS_SndData((int)n, addr, cmd); } + +void RTSSHOW::RTS_SndData(long n, unsigned long addr, unsigned char cmd) { RTS_SndData((unsigned long)n, addr, cmd); } + +void RTSSHOW::RTS_SndData(unsigned long n, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) +{ + if (cmd == VarAddr_W) + { + if (n > 0xFFFF) + { + snddat.data[0] = n >> 16; + snddat.data[1] = n & 0xFFFF; + + //snddat.data[0] = n >> 24; + //snddat.data[1] = n >> 16; + //snddat.data[2] = n >> 8; + //snddat.data[3] = n; + snddat.len = 7; + } + else + { + snddat.data[0] = n; + snddat.len = 5; + } + } + else if (cmd == VarAddr_R) + { + snddat.bytelen = n; + snddat.len = 4; + } + snddat.command = cmd; + snddat.addr = addr; + RTS_SndData(); +} + +void RTSSHOW::RTS_SDCardUpate(bool removed, bool inserted) +{ + SERIAL_ECHOLN("SDUpdate"); + bool shouldCheck; + if(!removed && !inserted) + shouldCheck = isMediaInserted(); + else + shouldCheck = false; + + if (inserted || shouldCheck) + { + ExtUI::FileList files; + files.count(); + + int addrnum = 0; + int num = 0; + for (uint16_t i = 0; i < files.count() && i < (uint16_t)MaxFileNumber + addrnum; i++) + { + files.seek(i); + files.filename(); + const char *pointFilename = files.longFilename(); + int filenamelen = strlen(files.longFilename()); + int j = 1; + while ((strncmp(&pointFilename[j], ".gcode", 6) && strncmp(&pointFilename[j], ".GCODE", 6)) && (j++) < filenamelen) + ; + if (j >= filenamelen) + { + addrnum++; + continue; + } + + if (j >= TEXTBYTELEN) + { + //strncpy(&files.longFilename[TEXTBYTELEN -3],"~~",2); + //files.longFilename()[TEXTBYTELEN-1] = '\0'; + j = TEXTBYTELEN - 1; + } + + strncpy(CardRecbuf.Cardshowfilename[num], files.longFilename(), j); + + strcpy(CardRecbuf.Cardfilename[num], files.shortFilename()); + CardRecbuf.addr[num] = SDFILE_ADDR + num * 10; + rtscheck.RTS_SndData(CardRecbuf.Cardshowfilename[num], CardRecbuf.addr[num]); + CardRecbuf.Filesum = (++num); + //SERIAL_ECHO(" CardRecbuf.Filesum =="); + //SERIAL_ECHO(CardRecbuf.Filesum); + rtscheck.RTS_SndData(1, FilenameIcon + CardRecbuf.Filesum); + } + rtscheck.RTS_SndData(17, IconPrintstatus); + return; + } + + if(removed || !shouldCheck) + { + for (int i = 0; i < MaxFileNumber; i++) + { + for (int j = 0; j < 10; j++) + rtscheck.RTS_SndData(0, SDFILE_ADDR + i * 10 + j); + } + + for (int j = 0; j < 10; j++) + { + rtscheck.RTS_SndData(0, Printfilename + j); //clean screen. + rtscheck.RTS_SndData(0, Choosefilename + j); //clean filename + } + for (int j = 0; j < 8; j++) + rtscheck.RTS_SndData(0, FilenameCount + j); + for (int j = 1; j <= MaxFileNumber; j++) + { + rtscheck.RTS_SndData(10, FilenameIcon + j); + rtscheck.RTS_SndData(10, FilenameIcon1 + j); + } + SERIAL_ECHOLN("***Card Removed***"); + rtscheck.RTS_SndData(18, IconPrintstatus); + return; + } +} + +void RTSSHOW::RTS_HandleData() +{ + int Checkkey = -1; + SERIAL_ECHOLN(" *******RTS_HandleData******** "); + if (waitway > 0) //for waiting + { + SERIAL_ECHOLNPAIR("waitway ==", (int)waitway); + memset(&recdat, 0, sizeof(recdat)); + recdat.head[0] = FHONE; + recdat.head[1] = FHTWO; + return; + } + SERIAL_ECHOLNPAIR("recdat.data[0] ==", recdat.data[0]); + SERIAL_ECHOLNPAIR("recdat.addr ==", recdat.addr); + for (int i = 0; Addrbuf[i] != 0; i++) + { + if (recdat.addr == Addrbuf[i]) + { + if (Addrbuf[i] == NzBdSet || Addrbuf[i] == NozzlePreheat || Addrbuf[i] == BedPreheat || Addrbuf[i] == Flowrate) + Checkkey = ManualSetTemp; + else if (Addrbuf[i] >= Stopprint && Addrbuf[i] <= Resumeprint) + Checkkey = PrintChoice; + else if (Addrbuf[i] >= AutoZero && Addrbuf[i] <= DisplayZaxis) + Checkkey = XYZEaxis; + else if (Addrbuf[i] >= FilementUnit1 && Addrbuf[i] <= FilementUnit2) + Checkkey = Filement; + else + Checkkey = i; + break; + } + } + + switch(recdat.addr) { + case Flowrate : + case StepMM_X : + case StepMM_Y : + case StepMM_Z : + case StepMM_E : + case ProbeOffset_X : + case ProbeOffset_Y : + case ProbeOffset_Z : + case HotendPID_AutoTmp : + case BedPID_AutoTmp : + case HotendPID_P : + case HotendPID_I : + case HotendPID_D : + case BedPID_P : + case BedPID_I : + case BedPID_D : + Checkkey = ManualSetTemp; + break; + } + + if (recdat.addr >= SDFILE_ADDR && recdat.addr <= (SDFILE_ADDR + 10 * (FileNum + 1))) + Checkkey = Filename; + + if (Checkkey < 0) + { + memset(&recdat, 0, sizeof(recdat)); + recdat.head[0] = FHONE; + recdat.head[1] = FHTWO; + return; + } + SERIAL_ECHOLN("== Checkkey=="); + SERIAL_ECHOLN(Checkkey); + + #if (ENABLED(MachineCRX) && DISABLED(Force10SProDisplay)) || ENABLED(ForceCRXDisplay) + const unsigned short topLeftData = 1; + const unsigned short topRightData = 2; + const unsigned short lowLeftData = 4; + const unsigned short lowRightData = 5; + const unsigned short centerData = 3; + const unsigned short homeZ = 99; + const unsigned short babystepUp = 98; + const unsigned short babystepDown = 97; + const unsigned short autoMeasure = 96; + const unsigned short assistEntry = 95; + const unsigned short levelOn = 94; + #else + const uint8_t topLeftData = 7; + const uint8_t topRightData = 8; + const uint8_t lowLeftData = 10; + const uint8_t lowRightData = 9; + const uint8_t centerData = 6; + const uint8_t homeZ = 1; + const uint8_t babystepUp = 2; + const uint8_t babystepDown = 3; + const uint8_t autoMeasure = 5; + const uint8_t assistEntry = 4; + const uint8_t levelOn = 11; + #endif + + const uint8_t validateMesh = 12; + constexpr float lfrb[4] = LEVEL_CORNERS_INSET_LFRB; +SERIAL_ECHOLN(PSTR("BeginSwitch")); + + switch (Checkkey) + { + case Printfile: + if (recdat.data[0] == 1) // card + { + InforShowStatus = false; + CardRecbuf.recordcount = -1; + RTS_SDCardUpate(false, false); + SERIAL_ECHOLN("Handle Data PrintFile 1 Setting Screen "); + RTS_SndData(ExchangePageBase + 46, ExchangepageAddr); + } + else if (recdat.data[0] == 2) // return after printing result. + { + InforShowStatus = true; + TPShowStatus = false; + stopPrint(); + injectCommands_P(PSTR("M84")); + RTS_SndData(11, FilenameIcon); + RTS_SndData(0, PrintscheduleIcon); + RTS_SndData(0, PrintscheduleIcon + 1); + RTS_SndData(0, Percentage); + delay_ms(2); + RTS_SndData(0, Timehour); + RTS_SndData(0, Timemin); + + SERIAL_ECHOLN("Handle Data PrintFile 2 Setting Screen "); + RTS_SndData(ExchangePageBase + 45, ExchangepageAddr); //exchange to 45 page + } + else if (recdat.data[0] == 3) // Temperature control + { + InforShowStatus = true; + TPShowStatus = false; + SERIAL_ECHOLN("Handle Data PrintFile 3 Setting Screen "); + if (FanStatus) + RTS_SndData(ExchangePageBase + 58, ExchangepageAddr); //exchange to 58 page, the fans off + else + RTS_SndData(ExchangePageBase + 57, ExchangepageAddr); //exchange to 57 page, the fans on + } + else if (recdat.data[0] == 4) //Settings + InforShowStatus = false; + break; + + case Ajust: + if (recdat.data[0] == 1) + { + InforShowStatus = false; + FanStatus ? RTS_SndData(2, FanKeyIcon) : RTS_SndData(3, FanKeyIcon); + } + else if (recdat.data[0] == 2) + { + SERIAL_ECHOLN("Handle Data Adjust 2 Setting Screen "); + InforShowStatus = true; + if (PrinterStatusKey[1] == 3) // during heating + { + RTS_SndData(ExchangePageBase + 53, ExchangepageAddr); + } + else if (PrinterStatusKey[1] == 4) + { + RTS_SndData(ExchangePageBase + 54, ExchangepageAddr); + } + else + { + RTS_SndData(ExchangePageBase + 53, ExchangepageAddr); + } + } + else if (recdat.data[0] == 3) + { + if (FanStatus) //turn on the fan + { + RTS_SndData(3, FanKeyIcon); + setTargetFan_percent(100, FAN0); + FanStatus = false; + } + else //turn off the fan + { + RTS_SndData(2, FanKeyIcon); + setTargetFan_percent(0, FAN0); + FanStatus = true; + } + } + else if (recdat.data[0] == 4) + { + if (PrintMode) // normal printing mode + { + RTS_SndData(2, FanKeyIcon + 1); + PrintMode = false; + } + else // power saving mode + { + RTS_SndData(3, FanKeyIcon + 1); + PrintMode = true; + } + } + break; + + case Feedrate: + setFeedrate_percent(recdat.data[0]); + break; + + case PrintChoice: + if (recdat.addr == Stopprint) + { + SERIAL_ECHOLN("StopPrint"); + if (recdat.data[0] == 240) // no + { + RTS_SndData(ExchangePageBase + 53, ExchangepageAddr); + SERIAL_ECHOLNPAIR("Stop No", recdat.data[0] ); + } + else + { + RTS_SndData(ExchangePageBase + 45, ExchangepageAddr); + RTS_SndData(0, Timehour); + RTS_SndData(0, Timemin); + SERIAL_ECHOLNPAIR("Stop Triggered", recdat.data[0] ); + stopPrint(); + } + } + else if (recdat.addr == Pauseprint) + { + if (recdat.data[0] != 0xF1) + break; + + RTS_SndData(ExchangePageBase + 54, ExchangepageAddr); + pausePrint(); + } + else if (recdat.addr == Resumeprint && recdat.data[0] == 1) + { + resumePrint(); + + PrinterStatusKey[1] = 0; + InforShowStatus = true; + + RTS_SndData(0 + CEIconGrap, IconPrintstatus); + PrintStatue[1] = 0; + //PrinterStatusKey[1] = 3; + RTS_SndData(ExchangePageBase + 53, ExchangepageAddr); + } + if (recdat.addr == Resumeprint && recdat.data[0] == 2) // warming + { + resumePrint(); + NozzleTempStatus[2] = 1; + PrinterStatusKey[1] = 0; + InforShowStatus = true; + RTS_SndData(ExchangePageBase + 82, ExchangepageAddr); + } + break; + + case Zoffset: + float tmp_zprobe_offset; + if (recdat.data[0] >= 32768) + { + tmp_zprobe_offset = ((float)recdat.data[0] - 65536) / 100; + } + else + { + tmp_zprobe_offset = ((float)recdat.data[0]) / 100; + } + + if (WITHIN((tmp_zprobe_offset), Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) + { + + smartAdjustAxis_steps(((getAxisSteps_per_mm(Z) * (getZOffset_mm() - tmp_zprobe_offset)) * -1), (axis_t)Z, false); + //babystepAxis_steps(((int)getAxisSteps_per_mm(Z) * (getZOffset_mm() - tmp_zprobe_offset) * -1), (axis_t)Z); + //setZOffset_mm(tmp_zprobe_offset); + injectCommands_P((PSTR("M500"))); + } + else + { + RTS_SndData(getZOffset_mm() * 100, 0x1026); + } + char zOffs[20], tmp1[11]; + sprintf_P(zOffs, PSTR("Z Offset : %s"), dtostrf(getZOffset_mm(), 1, 3, tmp1)); + onStatusChanged(zOffs); + break; + + case TempControl: + if (recdat.data[0] == 0) + { + InforShowStatus = true; + TPShowStatus = false; + } + else if (recdat.data[0] == 1) + { + if(FanStatus) + RTS_SndData(ExchangePageBase + 60, ExchangepageAddr); //exchange to 60 page, the fans off + else + RTS_SndData(ExchangePageBase + 59, ExchangepageAddr); //exchange to 59 page, the fans on + } + else if (recdat.data[0] == 2) + { + InforShowStatus = true; + } + else if (recdat.data[0] == 3) + { + if (FanStatus) //turn on the fan + { + setTargetFan_percent(100, FAN0); + FanStatus = false; + RTS_SndData(ExchangePageBase + 57, ExchangepageAddr); //exchange to 57 page, the fans on + } + else //turn off the fan + { + setTargetFan_percent(0, FAN0); + FanStatus = true; + RTS_SndData(ExchangePageBase + 58, ExchangepageAddr); //exchange to 58 page, the fans on + } + } + else if (recdat.data[0] == 5) //PLA mode + { + setTargetTemp_celsius(PREHEAT_1_TEMP_HOTEND, H0); + setTargetTemp_celsius(PREHEAT_1_TEMP_BED, BED); + + RTS_SndData(PREHEAT_1_TEMP_HOTEND, NozzlePreheat); + RTS_SndData(PREHEAT_1_TEMP_BED, BedPreheat); + } + else if (recdat.data[0] == 6) //ABS mode + { + setTargetTemp_celsius(PREHEAT_2_TEMP_HOTEND, H0); + setTargetTemp_celsius(PREHEAT_2_TEMP_BED, BED); + + RTS_SndData(PREHEAT_2_TEMP_HOTEND, NozzlePreheat); + RTS_SndData(PREHEAT_2_TEMP_BED, BedPreheat); + } + else if (recdat.data[0] == 0xF1) + { + //InforShowStatus = true; + #if FAN_COUNT > 0 + for (uint8_t i = 0; i < FAN_COUNT; i++) + setTargetFan_percent(0, (fan_t)i); + #endif + FanStatus = false; + setTargetTemp_celsius(0.0, H0); + setTargetTemp_celsius(0.0, BED); + + RTS_SndData(0, NozzlePreheat); + delay_ms(1); + RTS_SndData(0, BedPreheat); + delay_ms(1); + + RTS_SndData(8 + CEIconGrap, IconPrintstatus); + RTS_SndData(ExchangePageBase + 57, ExchangepageAddr); + PrinterStatusKey[1] = 2; + } + break; + + case ManualSetTemp: + SERIAL_ECHOLN("ManualSetTemp"); + if (recdat.addr == NzBdSet) + { + if (recdat.data[0] == 0) + { + if (FanStatus) + RTS_SndData(ExchangePageBase + 58, ExchangepageAddr); //exchange to 58 page, the fans off + else + RTS_SndData(ExchangePageBase + 57, ExchangepageAddr); //exchange to 57 page, the fans on + } + else if (recdat.data[0] == 1) + { + setTargetTemp_celsius(0.0, H0); + RTS_SndData(0, NozzlePreheat); + } + else if (recdat.data[0] == 2) + { + setTargetTemp_celsius(0.0, BED); + RTS_SndData(0, BedPreheat); + } + } + else if (recdat.addr == NozzlePreheat) + setTargetTemp_celsius((float)recdat.data[0], H0); + else if (recdat.addr == BedPreheat) + setTargetTemp_celsius((float)recdat.data[0], BED); + else if (recdat.addr == Flowrate) + setFlow_percent((int16_t)recdat.data[0], getActiveTool()); + #if HAS_PID_HEATING + else if (recdat.addr == HotendPID_AutoTmp) + pid_hotendAutoTemp = (uint16_t)recdat.data[0]; + else if (recdat.addr == BedPID_AutoTmp) + pid_bedAutoTemp = (uint16_t)recdat.data[0]; + #endif + else { + float tmp_float_handling; + if (recdat.data[0] >= 32768) + { + tmp_float_handling = ((float)recdat.data[0] - 65536) / 100; + } + else + { + tmp_float_handling = ((float)recdat.data[0]) / 100; + } + if (recdat.addr == StepMM_X) { + setAxisSteps_per_mm(tmp_float_handling*10, X); + } + else if (recdat.addr == StepMM_Y) { + setAxisSteps_per_mm(tmp_float_handling*10, Y); + } + else if (recdat.addr == StepMM_Z) { + setAxisSteps_per_mm(tmp_float_handling*10, Z); + } + else if (recdat.addr == StepMM_E) { + setAxisSteps_per_mm(tmp_float_handling*10, E0); + setAxisSteps_per_mm(tmp_float_handling*10, E1); + } + #if HAS_BED_PROBE + else if (recdat.addr == ProbeOffset_X) { + setProbeOffset_mm(tmp_float_handling, X); + } + else if (recdat.addr == ProbeOffset_Y) { + setProbeOffset_mm(tmp_float_handling, Y); + } + else if (recdat.addr == ProbeOffset_Z) { + setProbeOffset_mm(tmp_float_handling, Z); + } + #endif + #if HAS_PID_HEATING + else if (recdat.addr == HotendPID_P) { + setPIDValues(tmp_float_handling*10, getPIDValues_Ki(getActiveTool()), getPIDValues_Kd(getActiveTool()), getActiveTool()); + } + else if (recdat.addr == HotendPID_I) { + setPIDValues(getPIDValues_Kp(getActiveTool()), tmp_float_handling*10, getPIDValues_Kd(getActiveTool()), getActiveTool()); + } + else if (recdat.addr == HotendPID_D) { + setPIDValues(getPIDValues_Kp(getActiveTool()), getPIDValues_Ki(getActiveTool()), tmp_float_handling*10, getActiveTool()); + } + #if ENABLED(PIDTEMPBED) + else if (recdat.addr == BedPID_P) { + setBedPIDValues(tmp_float_handling*10, getBedPIDValues_Ki(), getBedPIDValues_Kd()); + } + else if (recdat.addr == BedPID_I) { + setBedPIDValues(getBedPIDValues_Kp(), tmp_float_handling*10, getBedPIDValues_Kd()); + } + else if (recdat.addr == BedPID_D) { + setBedPIDValues(getBedPIDValues_Kp(), getBedPIDValues_Ki(), tmp_float_handling*10); + } + #endif + #endif + } + break; + + case Setting: + if (recdat.data[0] == 0) // return to main page + { + InforShowStatus = true; + TPShowStatus = false; + } + else if (recdat.data[0] == 1) //Bed Autoleveling + { + #if HAS_MESH + if (getLevelingActive()) + RTS_SndData(3, AutoLevelIcon); + else + RTS_SndData(2, AutoLevelIcon); + #endif + RTS_SndData(10, FilenameIcon); //Motor Icon + if (!isPositionKnown()) + injectCommands_P(PSTR("G28\nG1F1000Z0.0")); + else + injectCommands_P(PSTR("G1F1000Z0.0")); + waitway = 2; + + RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + } + else if (recdat.data[0] == 2) // Exchange filement + { + InforShowStatus = true; + TPShowStatus = false; + memset(ChangeMaterialbuf, 0, sizeof(ChangeMaterialbuf)); + ChangeMaterialbuf[1] = ChangeMaterialbuf[0] = 10; + RTS_SndData(10 * ChangeMaterialbuf[0], FilementUnit1); //It's ChangeMaterialbuf for show,instead of current_position[E_AXIS] in them. + RTS_SndData(10 * ChangeMaterialbuf[1], FilementUnit2); + RTS_SndData(getActualTemp_celsius(H0), NozzleTemp); + RTS_SndData(getTargetTemp_celsius(H0), NozzlePreheat); + delay_ms(2); + RTS_SndData(ExchangePageBase + 65, ExchangepageAddr); + } + else if (recdat.data[0] == 3) //Move + { + AxisPagenum = 0; + RTS_SndData(ExchangePageBase + 71, ExchangepageAddr); + } + else if (recdat.data[0] == 4) //Language + { + //Just loads language screen, now used for tools + } + else if (recdat.data[0] == 5) //Printer Information + { + RTS_SndData(WEBSITE_URL, CorpWebsite); + } + else if (recdat.data[0] == 6) // Diabalestepper + { + injectCommands_P(PSTR("M84")); + RTS_SndData(11, FilenameIcon); + } + break; + + case ReturnBack: + if (recdat.data[0] == 1) // return to the tool page + { + InforShowStatus = false; + RTS_SndData(ExchangePageBase + 63, ExchangepageAddr); + } + if (recdat.data[0] == 2) // return to the Level mode page + { + RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + } + break; + + case Bedlevel: + switch(recdat.data[0]) + { + case homeZ: // Z-axis to home + { + // Disallow Z homing if X or Y are unknown + if (!isAxisPositionKnown((axis_t)X) || !isAxisPositionKnown((axis_t)Y)) + injectCommands_P(PSTR("G28\nG1F1500Z0.0")); + else + injectCommands_P(PSTR("G28Z\nG1F1500Z0.0")); + + RTS_SndData(getZOffset_mm() * 100, 0x1026); + break; + } + case babystepUp: // Z-axis to Up + { + if (WITHIN((getZOffset_mm() + 0.1), Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) + { + smartAdjustAxis_steps((getAxisSteps_per_mm(Z) / 10), (axis_t)Z, false); + //SERIAL_ECHOLNPAIR("Babystep Pos Steps : ", (int)(getAxisSteps_per_mm(Z) / 10)); + //setZOffset_mm(getZOffset_mm() + 0.1); + RTS_SndData(getZOffset_mm() * 100, 0x1026); + char zOffs[20], tmp1[11]; + sprintf_P(zOffs, PSTR("Z Offset : %s"), dtostrf(getZOffset_mm(), 1, 3, tmp1)); + onStatusChanged(zOffs); + injectCommands_P(PSTR("M500")); + } + break; + } + case babystepDown: // Z-axis to Down + { + if (WITHIN((getZOffset_mm() - 0.1), Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) + { + smartAdjustAxis_steps(((getAxisSteps_per_mm(Z) / 10) * -1), (axis_t)Z, false); + //SERIAL_ECHOLNPAIR("Babystep Neg Steps : ", (int)((getAxisSteps_per_mm(Z) / 10) * -1)); + //babystepAxis_steps((((int)getAxisSteps_per_mm(Z) / 10) * -1), (axis_t)Z); + //setZOffset_mm(getZOffset_mm() - 0.1); + RTS_SndData(getZOffset_mm() * 100, 0x1026); + char zOffs[20], tmp1[11]; + sprintf_P(zOffs, PSTR("Z Offset : %s"), dtostrf(getZOffset_mm(), 1, 3, tmp1)); + onStatusChanged(zOffs); + injectCommands_P(PSTR("M500")); + } + break; + } + case assistEntry: // Assitant Level + { + #if HAS_MESH + setLevelingActive(false); + #endif + if (!isPositionKnown()) + injectCommands_P((PSTR("G28\nG1 F1000 Z0.0"))); + else + injectCommands_P((PSTR("G1 F1000 Z0.0"))); + waitway = 2; + RTS_SndData(ExchangePageBase + 84, ExchangepageAddr); + break; + } + case autoMeasure: // AutoLevel "Measuring" Button + { + waitway = 3; //only for prohibiting to receive massage + RTS_SndData(3, AutolevelIcon); + uint8_t abl_probe_index = 0; + while (abl_probe_index < 25) { + rtscheck.RTS_SndData(0, AutolevelVal + abl_probe_index * 2); + ++abl_probe_index; + } + RTS_SndData(ExchangePageBase + 85, ExchangepageAddr); + injectCommands_P(PSTR(USER_GCODE_1)); + break; + } + + case centerData: // Assitant Level , Centre 1 + { + setAxisPosition_mm(LEVEL_CORNERS_Z_HOP, (axis_t)Z); + setAxisPosition_mm(X_CENTER, (axis_t)X); + setAxisPosition_mm(Y_CENTER, (axis_t)Y); + waitway = 6; + break; + } + case topLeftData: // Assitant Level , Front Left 2 + { + setAxisPosition_mm(LEVEL_CORNERS_Z_HOP, (axis_t)Z); + setAxisPosition_mm((X_MIN_BED + lfrb[0]), (axis_t)X); + setAxisPosition_mm((Y_MIN_BED + lfrb[1]), (axis_t)Y); + waitway = 6; + break; + } + case topRightData: // Assitant Level , Front Right 3 + { + setAxisPosition_mm(LEVEL_CORNERS_Z_HOP, (axis_t)Z); + setAxisPosition_mm((X_MAX_BED - lfrb[2]), (axis_t)X); + setAxisPosition_mm((Y_MIN_BED + lfrb[1]), (axis_t)Y); + waitway = 6; + break; + } + case lowRightData: // Assitant Level , Back Right 4 + { + setAxisPosition_mm(LEVEL_CORNERS_Z_HOP, (axis_t)Z); + setAxisPosition_mm((X_MAX_BED - lfrb[2]), (axis_t)X); + setAxisPosition_mm((Y_MAX_BED - lfrb[3]), (axis_t)Y); + waitway = 6; + break; + } + case lowLeftData: // Assitant Level , Back Left 5 + { + setAxisPosition_mm(LEVEL_CORNERS_Z_HOP, (axis_t)Z); + setAxisPosition_mm((X_MIN_BED + lfrb[0]), (axis_t)X); + setAxisPosition_mm((Y_MAX_BED - lfrb[3]), (axis_t)Y); + waitway = 6; + break; + } + case levelOn: // Autolevel switch + { + #if HAS_MESH + if (!getLevelingActive()) //turn on the Autolevel + { + RTS_SndData(3, AutoLevelIcon); + setLevelingActive(true); + } + else //turn off the Autolevel + { + RTS_SndData(2, AutoLevelIcon); + setLevelingActive(false); + } + #endif + RTS_SndData(getZOffset_mm() * 100, 0x1026); + break; + } + case validateMesh: + { + injectCommands_P(PSTR("G26R255")); + onStatusChanged("Beginning G26.. Heating"); + break; + } + default: + { + SERIAL_ECHOLNPAIR("Unsupported Option Selected", recdat.data[0]); + break; + } + } + + RTS_SndData(10, FilenameIcon); + break; + + case XYZEaxis: + { + axis_t axis; + float min, max; + waitway = 4; + if (recdat.addr == DisplayXaxis) + { + axis = X; + min = X_MIN_POS; + max = X_MAX_POS; + } + else if (recdat.addr == DisplayYaxis) + { + axis = Y; + min = Y_MIN_POS; + max = Y_MAX_POS; + } + else if (recdat.addr == DisplayZaxis) + { + axis = Z; + min = Z_MIN_POS; + max = Z_MAX_POS; + } + else if (recdat.addr == AutoZero) + { + if (recdat.data[0] == 3) //autohome + { + waitway = 4; + injectCommands_P((PSTR("G28\nG1 F1000 Z10"))); + InforShowStatus = AutohomeKey = true; + AutoHomeIconNum = 0; + RTS_SndData(ExchangePageBase + 74, ExchangepageAddr); + RTS_SndData(10, FilenameIcon); + } + else + { + AxisPagenum = recdat.data[0]; + waitway = 0; + } + break; + } + + float targetPos = ((float)recdat.data[0]) / 10; + + if (targetPos < min) + targetPos = min; + else if (targetPos > max) + targetPos = max; + setAxisPosition_mm(targetPos, axis); + waitway = 0; + RTS_SndData(10, FilenameIcon); + break; + } + + case Filement: + + unsigned int IconTemp; + if (recdat.addr == Exchfilement) + { + if (getActualTemp_celsius(H0) < EXTRUDE_MINTEMP && recdat.data[0] < 5) + { + RTS_SndData((int)EXTRUDE_MINTEMP, 0x1020); + delay_ms(5); + RTS_SndData(ExchangePageBase + 66, ExchangepageAddr); + break; + } + + switch(recdat.data[0]) + { + case 1 : // Unload filement1 + { + setAxisPosition_mm((getAxisPosition_mm(E0) - ChangeMaterialbuf[0]), E0); + break; + } + case 2: // Load filement1 + { + setAxisPosition_mm((getAxisPosition_mm(E0) + ChangeMaterialbuf[0]), E0); + break; + } + case 3: // Unload filement2 + { + setAxisPosition_mm((getAxisPosition_mm(E1) - ChangeMaterialbuf[1]), E1); + break; + } + case 4: // Load filement2 + { + setAxisPosition_mm((getAxisPosition_mm(E1) + ChangeMaterialbuf[1]), E1); + break; + } + case 5: // sure to heat + { + NozzleTempStatus[0] = 1; + //InforShowoStatus = true; + + setTargetTemp_celsius((PREHEAT_1_TEMP_HOTEND+10), H0); + IconTemp = getActualTemp_celsius(H0) * 100 / getTargetTemp_celsius(H0); + if (IconTemp >= 100) + IconTemp = 100; + RTS_SndData(IconTemp, HeatPercentIcon); + + RTS_SndData(getActualTemp_celsius(H0), NozzleTemp); + RTS_SndData(getTargetTemp_celsius(H0), NozzlePreheat); + delay_ms(5); + RTS_SndData(ExchangePageBase + 68, ExchangepageAddr); + break; + } + case 6: //cancel to heat + { + RTS_SndData(ExchangePageBase + 65, ExchangepageAddr); + break; + } + case 0xF1: //Sure to cancel heating + { + //InforShowoStatus = true; + NozzleTempStatus[0] = 0; + delay_ms(1); + RTS_SndData(ExchangePageBase + 65, ExchangepageAddr); + break; + } + case 0xF0: // not to cancel heating + break; + } + RTS_SndData(10 * ChangeMaterialbuf[0], FilementUnit1); //It's ChangeMaterialbuf for show,instead of current_position[E_AXIS] in them. + RTS_SndData(10 * ChangeMaterialbuf[1], FilementUnit2); + } + else if (recdat.addr == FilementUnit1) + { + ChangeMaterialbuf[0] = ((float)recdat.data[0]) / 10; + } + else if (recdat.addr == FilementUnit2) + { + ChangeMaterialbuf[1] = ((float)recdat.data[0]) / 10; + } + break; + + case LanguageChoice: + + SERIAL_ECHOLNPAIR("\n ***recdat.data[0] =", recdat.data[0]); + /*if(recdat.data[0]==1) { + settings.save(); + } + else { + injectCommands_P(PSTR("M300")); + }*/ + // may at some point use language change screens to save eeprom explicitly + SERIAL_ECHOLN("InLangChoice"); + switch(recdat.data[0]) + { + case 0: { + SERIAL_ECHOLN("Chinese Not Supported"); + break; + } + case 1: { + SERIAL_ECHOLN("English Already Set"); + break; + } + #if HAS_PID_HEATING + case 2: { + SERIAL_ECHOLN("Hotend PID"); + startPIDTune(pid_hotendAutoTemp, getActiveTool()); + break; + } + #endif + case 3: { + SERIAL_ECHOLN("Init EEPROM"); + injectCommands_P(PSTR("M502\nM500")); + break; + } + case 4: { + SERIAL_ECHOLN("BLTouch Reset"); + injectCommands_P(PSTR("M999\nM280P0S160")); + break; + } + #if HAS_PID_HEATING + case 5: { + #if ENABLED(PIDTEMPBED) + startBedPIDTune(pid_bedAutoTemp); + #else + SERIAL_ECHOLN("Bed PID Disabled"); + #endif + break; + } + #endif + case 6: { + SERIAL_ECHOLN("Store Settings"); + injectCommands_P(PSTR("M500")); + break; + } + default: { + SERIAL_ECHOLN("Invalid Option"); + break; + } + } + break; + case No_Filement: + SERIAL_ECHOLN("\n No Filament"); + + if (recdat.data[0] == 1) //Filament is out, resume / resume selected on screen + { + if( + #if (FIL_RUNOUT_STATE == LOW) + #define FIL_RUNOUT_INVERTING true + #endif + #if DISABLED(FILAMENT_RUNOUT_SENSOR) || ENABLED(FILAMENT_MOTION_SENSOR) + true + #elif NUM_RUNOUT_SENSORS > 1 + (getActiveTool() == E0 && READ(FIL_RUNOUT_PIN) != FIL_RUNOUT_INVERTING) || (getActiveTool() == E1 && READ(FIL_RUNOUT2_PIN) != FIL_RUNOUT_INVERTING) + #else + getActiveTool() == E0 && READ(FIL_RUNOUT_PIN) != FIL_RUNOUT_INVERTING + #endif + ) { + SERIAL_ECHOLN("Resume Yes during print"); + setHostResponse(1); //Send Resume host prompt command + RTS_SndData(1 + CEIconGrap, IconPrintstatus); + PrintStatue[1] = 0; + PrinterStatusKey[1] = 3; + RTS_SndData(ExchangePageBase + 53, ExchangepageAddr); + FilementStatus[0] = 0; // recover the status waiting to check filements + } + } + else if (recdat.data[0] == 0) // Filamet is out, Cancel Selected + { + SERIAL_ECHOLN(" Filament Response No"); + if (FilementStatus[0] == 1) + { + SERIAL_ECHOLN("Filament Stat 0 - 1"); + RTS_SndData(ExchangePageBase + 46, ExchangepageAddr); + PrinterStatusKey[0] = 0; + setUserConfirmed(); + } + else if (FilementStatus[0] == 2) // like the pause + { + SERIAL_ECHOLN("Filament Stat 0 - 2"); + RTS_SndData(ExchangePageBase + 54, ExchangepageAddr); + setUserConfirmed(); + } + else if (FilementStatus[0] == 3) + { + SERIAL_ECHOLN("Filament Stat 0 - 3"); + RTS_SndData(ExchangePageBase + 65, ExchangepageAddr); + setUserConfirmed(); + } + FilementStatus[0] = 0; // recover the status waiting to check filements + stopPrint(); + } + break; + + #if ENABLED(POWER_LOSS_RECOVERY) + case PwrOffNoF: + if (recdat.data[0] == 1) // Yes:continue to print the 3Dmode during power-off. + { + injectCommands_P(PSTR("M1000")); + } + else if (recdat.data[0] == 2) // No + { + injectCommands_P(PSTR("M1000C")); + } + break; + #endif + case Volume: + if (recdat.data[0] < 0) + VolumeSet = 0; + else if (recdat.data[0] > 255) + VolumeSet = 0xFF; + else + VolumeSet = recdat.data[0]; + + if (VolumeSet == 0) + { + RTS_SndData(0, VolumeIcon); + RTS_SndData(9, SoundIcon); + } + else + { + RTS_SndData((VolumeSet + 1) / 32 - 1, VolumeIcon); + RTS_SndData(8, SoundIcon); + } + //eeprom_write_byte((unsigned char*)FONT_EEPROM+4, VolumeSet); + RTS_SndData(VolumeSet << 8, SoundAddr + 1); + break; + + case Filename: + SERIAL_ECHOLN("Filename"); + if (isMediaInserted() && recdat.addr == FilenameChs) + { + SERIAL_ECHOLN("Filename-Media"); + if (recdat.data[0] > (uint8_t)CardRecbuf.Filesum) + break; + + SERIAL_ECHOLN("Recdata"); + CardRecbuf.recordcount = recdat.data[0] - 1; + for (int j = 0; j < 10; j++) + RTS_SndData(0, Choosefilename + j); + int filelen = strlen(CardRecbuf.Cardshowfilename[(int)CardRecbuf.recordcount]); + filelen = (TEXTBYTELEN - filelen) / 2; + if (filelen > 0) + { + char buf[20]; + memset(buf, 0, sizeof(buf)); + strncpy(buf, " ", filelen); + strcpy(&buf[filelen], CardRecbuf.Cardshowfilename[(int)CardRecbuf.recordcount]); + RTS_SndData(buf, Choosefilename); + } + else + RTS_SndData(CardRecbuf.Cardshowfilename[(int)CardRecbuf.recordcount], Choosefilename); + + for (int j = 0; j < 8; j++) + RTS_SndData(0, FilenameCount + j); + char buf[20]; + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%d/%d", (int)recdat.data[0], CardRecbuf.Filesum); + RTS_SndData(buf, FilenameCount); + delay_ms(2); + for (int j = 1; j <= CardRecbuf.Filesum; j++) + { + RTS_SndData((unsigned long)0xFFFF, FilenameNature + j * 16); // white + RTS_SndData(10, FilenameIcon1 + j); //clean + } + + RTS_SndData((unsigned long)0x87F0, FilenameNature + recdat.data[0] * 16); // Change BG of selected line to Light Green + RTS_SndData(6, FilenameIcon1 + recdat.data[0]); // show frame + } + else if (recdat.addr == FilenamePlay) + { + if (recdat.data[0] == 1 && isMediaInserted()) //for sure + { + if (CardRecbuf.recordcount < 0) + break; + printFile(CardRecbuf.Cardfilename[(int)CardRecbuf.recordcount]); + + for (int j = 0; j < 10; j++) //clean screen. + RTS_SndData(0, Printfilename + j); + + int filelen = strlen(CardRecbuf.Cardshowfilename[(int)CardRecbuf.recordcount]); + filelen = (TEXTBYTELEN - filelen) / 2; + if (filelen > 0) + { + char buf[20]; + memset(buf, 0, sizeof(buf)); + strncpy(buf, " ", filelen); + strcpy(&buf[filelen], CardRecbuf.Cardshowfilename[(int)CardRecbuf.recordcount]); + RTS_SndData(buf, Printfilename); + } + else + RTS_SndData(CardRecbuf.Cardshowfilename[(int)CardRecbuf.recordcount], Printfilename); + delay_ms(2); + + #if FAN_COUNT > 0 + for (uint8_t i = 0; i < FAN_COUNT; i++) + setTargetFan_percent(FanOn, (fan_t)i); + #endif + FanStatus = false; + + RTS_SndData(1 + CEIconGrap, IconPrintstatus); // 1 for Heating + delay_ms(2); + RTS_SndData(ExchangePageBase + 53, ExchangepageAddr); + + TPShowStatus = InforShowStatus = true; + PrintStatue[1] = 0; + PrinterStatusKey[0] = 1; + PrinterStatusKey[1] = 3; + } + else if (recdat.data[0] == 0) // return to main page + { + InforShowStatus = true; + TPShowStatus = false; + } + } + break; + + default: + SERIAL_ECHOLN(PSTR("No Match :")); + break; + } + + memset(&recdat, 0, sizeof(recdat)); + recdat.head[0] = FHONE; + recdat.head[1] = FHTWO; +} + +void onPrinterKilled(PGM_P killMsg, PGM_P component) { + SERIAL_ECHOLN("***kill***"); + //First we send screen available on old versions of software + rtscheck.RTS_SndData(ExchangePageBase + 15, ExchangepageAddr); + //Then we send the new one Creality added in 1.70.1 + rtscheck.RTS_SndData(ExchangePageBase + 88, ExchangepageAddr); + int j = 0; + char outmsg[40]; + while (j<4) + { + outmsg[j] = '*'; + j++; + } + while (const char c = pgm_read_byte(killMsg++)) { + outmsg[j] = c; + j++; + } + while(j<40) + { + outmsg[j] = '*'; + j++; + } + rtscheck.RTS_SndData(outmsg, MacVersion); + delay_ms(10); +} + +void onMediaInserted() +{ + SERIAL_ECHOLN("***Initing card is OK***"); + rtscheck.RTS_SDCardUpate(false, true); +} + +void onMediaError() +{ + rtscheck.RTS_SDCardUpate(true, false); + SERIAL_ECHOLN("***Initing card fails***"); +} + +void onMediaRemoved() +{ + rtscheck.RTS_SDCardUpate(true, false); + SERIAL_ECHOLN("***Card Removed***"); +} + +void onPlayTone(const uint16_t frequency, const uint16_t duration) { + SERIAL_ECHOLN("***CPlay Tone***"); + rtscheck.RTS_SndData(StartSoundSet, SoundAddr); +} + +void onPrintTimerStarted() +{ + SERIAL_ECHOLN("==onPrintTimerStarted=="); + if ( waitway == 7 ) + return; + PrinterStatusKey[1] = 3; + InforShowStatus = true; + rtscheck.RTS_SndData(4 + CEIconGrap, IconPrintstatus); + delay_ms(1); + rtscheck.RTS_SndData(ExchangePageBase + 53, ExchangepageAddr); +} + +void onPrintTimerPaused() +{ + SERIAL_ECHOLN("==onPrintTimerPaused=="); + rtscheck.RTS_SndData(ExchangePageBase + 87, ExchangepageAddr); //Display Pause Screen +} +void onPrintTimerStopped() +{ + SERIAL_ECHOLN("==onPrintTimerStopped=="); + if(waitway == 3) + return; + +#if FAN_COUNT > 0 + for (uint8_t i = 0; i < FAN_COUNT; i++) + setTargetFan_percent(FanOff, (fan_t)i); +#endif + FanStatus = true; + + PrinterStatusKey[0] = 0; + InforShowStatus = true; + TPShowStatus = false; + rtscheck.RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); +} + +void onFilamentRunout() +{ + SERIAL_ECHOLN("==onFilamentRunout=="); + PrintStatue[1] = 1; // for returning the corresponding page + PrinterStatusKey[1] = 4; + TPShowStatus = false; + FilementStatus[0] = 2; + rtscheck.RTS_SndData(ExchangePageBase + 78, ExchangepageAddr); +} +void onFilamentRunout(extruder_t extruder) +{ + SERIAL_ECHOLN("==onFilamentRunout=="); + PrintStatue[1] = 1; // for returning the corresponding page + PrinterStatusKey[1] = 4; + TPShowStatus = false; + FilementStatus[0] = 2; + rtscheck.RTS_SndData(ExchangePageBase + 78, ExchangepageAddr); +} +void onUserConfirmRequired(const char *const msg) +{ + PrintStatue[1] = 1; // for returning the corresponding page + PrinterStatusKey[1] = 4; + TPShowStatus = false; + FilementStatus[0] = 2; + rtscheck.RTS_SndData(ExchangePageBase + 78, ExchangepageAddr); + SERIAL_ECHOLN("==onUserConfirmRequired=="); +} +void onStatusChanged(const char *const statMsg) +{ + for (int j = 0; j < 40; j++) // Clear old message + rtscheck.RTS_SndData(' ', StatusMessageString+j); + rtscheck.RTS_SndData(statMsg, StatusMessageString); +} +void onFactoryReset() +{ + onStartup(); + startprogress = 0; + InforShowStatus = true; + SERIAL_ECHOLN("==onFactoryReset=="); +} + +void onMeshUpdate(const int8_t xpos, const int8_t ypos, const ExtUI::probe_state_t state) { + onMeshUpdate(xpos, ypos, 0.0f); + } + +void onMeshUpdate(const int8_t xpos, const int8_t ypos, const float zval) +{ + if(waitway==3) + if(isPositionKnown() && (getActualTemp_celsius(BED) >= (getTargetTemp_celsius(BED)-1))) + rtscheck.RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + #if HAS_MESH + uint8_t abl_probe_index = 0; + for(uint8_t outer = 0; outer < GRID_MAX_POINTS_Y; outer++) + { + for (uint8_t inner = 0; inner < GRID_MAX_POINTS_X; inner++) + { + uint8_t x_Point = inner; + bool zig = (outer & 1); // != ((PR_OUTER_END) & 1); + if (zig) x_Point = (GRID_MAX_POINTS_X - 1) - inner; + xy_uint8_t point = {x_Point, outer}; + if(x_Point==xpos && outer ==ypos) + rtscheck.RTS_SndData(ExtUI::getMeshPoint(point) * 1000, AutolevelVal + (abl_probe_index * 2)); + ++abl_probe_index; + } + } + #endif +}; + +void onStoreSettings(char *buff) +{ + SERIAL_ECHOLN("==onStoreSettings=="); + // This is called when saving to EEPROM (i.e. M500). If the ExtUI needs + // permanent data to be stored, it can write up to eeprom_data_size bytes + // into buff. + + // Example: + // static_assert(sizeof(myDataStruct) <= ExtUI::eeprom_data_size); + // memcpy(buff, &myDataStruct, sizeof(myDataStruct)); +} + +void onLoadSettings(const char *buff) +{ + SERIAL_ECHOLN("==onLoadSettings=="); + // This is called while loading settings from EEPROM. If the ExtUI + // needs to retrieve data, it should copy up to eeprom_data_size bytes + // from buff + + // Example: + // static_assert(sizeof(myDataStruct) <= ExtUI::eeprom_data_size); + // memcpy(&myDataStruct, buff, sizeof(myDataStruct)); +} + +void onConfigurationStoreWritten(bool success) +{ + SERIAL_ECHOLN("==onConfigurationStoreWritten=="); + // This is called after the entire EEPROM has been written, + // whether successful or not. +} + +void onConfigurationStoreRead(bool success) +{ + SERIAL_ECHOLN("==onConfigurationStoreRead=="); + #if HAS_MESH && (ANY(MachineCR10SPro, MachineEnder5Plus, MachineCR10Max) || ENABLED(Force10SProDisplay)) + if (ExtUI::getMeshValid()) + { + uint8_t abl_probe_index = 0; + for(uint8_t outer = 0; outer < GRID_MAX_POINTS_Y; outer++) + { + for (uint8_t inner = 0; inner < GRID_MAX_POINTS_X; inner++) + { + uint8_t x_Point = inner; + bool zig = (outer & 1); + if (zig) x_Point = (GRID_MAX_POINTS_X - 1) - inner; + xy_uint8_t point = {x_Point, outer}; + rtscheck.RTS_SndData(ExtUI::getMeshPoint(point) * 1000, AutolevelVal + (abl_probe_index * 2)); + ++abl_probe_index; + } + } + + rtscheck.RTS_SndData(3, AutoLevelIcon); //2=On, 3=Off + setLevelingActive(true); + } + else + { + rtscheck.RTS_SndData(2, AutoLevelIcon); /*Off*/ + setLevelingActive(false); + } + #endif + + SERIAL_ECHOLNPAIR("\n init zprobe_zoffset = ", getZOffset_mm()); + rtscheck.RTS_SndData(getZOffset_mm() * 100, 0x1026); +} + +#if ENABLED(POWER_LOSS_RECOVERY) + void onPowerLossResume() { + SERIAL_ECHOLN("==OnPowerLossResume=="); + startprogress = 254; + InforShowStatus = true; + TPShowStatus = false; + reEntryPrevent = false; + rtscheck.RTS_SndData(ExchangePageBase + 76, ExchangepageAddr); + } +#endif + +#if HAS_PID_HEATING + void onPidTuning(const result_t rst) { + // Called for temperature PID tuning result + rtscheck.RTS_SndData(pid_hotendAutoTemp, HotendPID_AutoTmp); + rtscheck.RTS_SndData(pid_bedAutoTemp, BedPID_AutoTmp); + rtscheck.RTS_SndData((unsigned int)(getPIDValues_Kp(E0) * 10), HotendPID_P); + rtscheck.RTS_SndData((unsigned int)(getPIDValues_Ki(E0) * 10), HotendPID_I); + rtscheck.RTS_SndData((unsigned int)(getPIDValues_Kd(E0) * 10), HotendPID_D); + #if ENABLED(PIDTEMPBED) + rtscheck.RTS_SndData((unsigned int)(getBedPIDValues_Kp() * 10), BedPID_P); + rtscheck.RTS_SndData((unsigned int)(getBedPIDValues_Ki() * 10), BedPID_I); + rtscheck.RTS_SndData((unsigned int)(getBedPIDValues_Kd() * 10), BedPID_D); + #endif + } +#endif + +} // namespace ExtUI + +#endif \ No newline at end of file diff --git a/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h new file mode 100644 index 0000000000..fe48b52760 --- /dev/null +++ b/Marlin/src/lcd/extui/lib/Creality/Creality_DWIN.h @@ -0,0 +1,196 @@ +#pragma once + +#include "string.h" +#include +#include "../../ui_api.h" +#if ENABLED(EXTENSIBLE_UI) +namespace ExtUI { +/*********************************/ +#define FHONE (0x5A) +#define FHTWO (0xA5) +#define TEXTBYTELEN 18 +#define MaxFileNumber 20// 16 + +#define CEIconGrap 12 +#define FileNum MaxFileNumber +#define FileNameLen TEXTBYTELEN + +#define SizeofDatabuf 26 + +/*************Register and Variable addr*****************/ +#define RegAddr_W 0x80 +#define RegAddr_R 0x81 +#define VarAddr_W 0x82 +#define VarAddr_R 0x83 +#define ExchangePageBase (unsigned long)0x5A010000 //the first page ID. other page = first page ID + relevant num; +#define StartSoundSet ((unsigned long)0x060480A0) // 06,start-music; 04, 4 musics; 80, the volume value; 04, return value about music number. +#define FONT_EEPROM 90 +#define AutoLeve_EEPROM 100 +#define FanOn 255 +#define FanOff 0 + +/*variable addr*/ +#define ExchangepageAddr 0x0084 +#define SoundAddr 0x00A0 +#define StartIcon 0x1000 +#define FeedrateDisplay 0x1006 // Speed +#define Stopprint 0x1008 +#define Pauseprint 0x100A +#define Resumeprint 0x100C +#define PrintscheduleIcon 0x100E +#define Timehour 0x1010 +#define Timemin 0x1012 +#define IconPrintstatus 0x1014 +#define Percentage 0x1016 +#define FanKeyIcon 0x101E +#define Flowrate 0x1300 + +#define StepMM_X 0x1242 +#define StepMM_Y 0x1246 +#define StepMM_Z 0x124A +#define StepMM_E 0x124E + +#define ProbeOffset_X 0x1236 +#define ProbeOffset_Y 0x123A +#define ProbeOffset_Z 0x123E + +#define HotendPID_AutoTmp 0x1252 +#define BedPID_AutoTmp 0x1254 + +#define HotendPID_P 0x1256 +#define HotendPID_I 0x125A +#define HotendPID_D 0x125E + +#define BedPID_P 0x1262 +#define BedPID_I 0x1266 +#define BedPID_D 0x126A + +#define HeatPercentIcon 0x1024 + +#define NzBdSet 0x1032 +#define NozzlePreheat 0x1034 +#define NozzleTemp 0x1036 +#define BedPreheat 0x103A +#define Bedtemp 0x103C + +#define AutoZeroIcon 0x1042 +#define AutoLevelIcon 0x1045 +#define AutoZero 0x1046 +#define DisplayXaxis 0x1048 +#define DisplayYaxis 0x104A +#define DisplayZaxis 0x104C + +#define FilementUnit1 0x1054 +#define Exchfilement 0x1056 +#define FilementUnit2 0x1058 + +#define MacVersion 0x1060 +#define SoftVersion 0x106A +#define PrinterSize 0x1074 +#define CorpWebsite 0x107E +#define VolumeIcon 0x108A +#define SoundIcon 0x108C +#define AutolevelIcon 0x108D +#define ExchFlmntIcon 0x108E +#define AutolevelVal 0x1100 + +#define FilenameIcon 0x1200 +#define FilenameIcon1 0x1220 +#define Printfilename 0x2000 +#define SDFILE_ADDR 0x200A +#define FilenamePlay 0x20D2 +#define FilenameChs 0x20D3 +#define Choosefilename 0x20D4 +#define FilenameCount 0x20DE +#define FilenameNature 0x6003 + +#if ANY(MachineCR10SPro, MachineEnder5Plus, MachineCR10Max) || ENABLED(Force10SProDisplay) + #define StatusMessageString 0x3000 +#else + #define StatusMessageString 0x20E8 +#endif + +#if defined(MCU_LPC1769) || defined(MCU_LPC1768) + #define DWIN_SERIAL DGUS_SERIAL +#elif defined(TARGET_STM32F4) + #define DWIN_SERIAL Serial1 +#elif defined(__STM32F1__) + #define DWIN_SERIAL MSerial3 +#else + #define DWIN_SERIAL Serial2 +#endif + +/************struct**************/ + +typedef struct DataBuf +{ + unsigned char len; + unsigned char head[2]; + unsigned char command; + unsigned long addr; + unsigned long bytelen; + unsigned short data[32]; + unsigned char reserv[4]; +} DB; + +typedef struct CardRecord +{ + char recordcount; + int Filesum; + unsigned long addr[FileNum]; + char Cardshowfilename[FileNum][FileNameLen]; + char Cardfilename[FileNum][FileNameLen]; +}CRec; + +class RTSSHOW { + public: + RTSSHOW(); + int RTS_RecData(); + void RTS_SDCardInit(void); + void RTS_SDCardUpate(bool, bool); + int RTS_CheckFilement(int); + void RTS_SndData(void); + void RTS_SndData(const String &, unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(const char[], unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(char, unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(unsigned char*, unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(int, unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(float, unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(unsigned int,unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(long,unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(unsigned long,unsigned long, unsigned char = VarAddr_W); + void RTS_SDcard_Stop(); + void RTS_HandleData(); + void RTS_Init(); + + DB recdat; + DB snddat; + unsigned char databuf[SizeofDatabuf]; + }; + +static RTSSHOW rtscheck; + + #define Addvalue 3 + #define PrintChoice_Value (0+Addvalue) + #define Zoffset_Value (3+Addvalue) + #define Setting_Value (8+Addvalue) + #define XYZEaxis_Value (12+Addvalue) + #define Filement_Value (15+Addvalue) + #define Language_Value (18+Addvalue) + #define Filename_Value (22+Addvalue) + + enum PROC_COM {Printfile=0,Ajust,Feedrate,PrintChoice=PrintChoice_Value,Zoffset=Zoffset_Value,TempControl,ManualSetTemp,Setting=Setting_Value, + ReturnBack,Bedlevel,Autohome,XYZEaxis=XYZEaxis_Value,Filement=Filement_Value,LanguageChoice=Language_Value,No_Filement,PwrOffNoF,Volume,Filename=Filename_Value}; + + const unsigned long Addrbuf[] = {0x1002, 0x1004, 0x1006, 0x1008, 0x100A, 0x100C, 0x1026, 0x1030, 0x1032, 0x1034, 0x103A, + 0x103E, 0x1040, 0x1044, 0x1046, 0x1048, 0x104A, 0x104C, 0x1054, 0x1056, 0x1058, + 0x105C, 0x105E, 0x105F, 0x1088, 0}; + +void RTSUpdate(); +void RTSInit(); + +} +#ifndef USER_GCODE_1 + #define USER_GCODE_1 "G28" +#endif +#endif diff --git a/README.md b/README.md index f3c2afa874..320a5acbfb 100644 --- a/README.md +++ b/README.md @@ -1,128 +1,144 @@ -# Marlin 3D Printer Firmware +## Creality CR10S Pro, CR-X, CR10 Max and Ender 5 Plus Touch Screen supported firmware -![GitHub](https://img.shields.io/github/license/marlinfirmware/marlin.svg) -![GitHub contributors](https://img.shields.io/github/contributors/marlinfirmware/marlin.svg) -![GitHub Release Date](https://img.shields.io/github/release-date/marlinfirmware/marlin.svg) -[![Build Status](https://github.com/MarlinFirmware/Marlin/workflows/CI/badge.svg?branch=bugfix-2.0.x)](https://github.com/MarlinFirmware/Marlin/actions) +This branch adds support for the Creality touchscreen machines and was split off from the standard Creality branches due to specific custom changes not found upstream. This includes extensions to the EXTui framework among other smaller tweaks that we have been working towards getting submitted upstream. Machines supported here are : - +- [CR10S Pro](http://bit.ly/2rxZ6lP) +- [CR10 Max](http://bit.ly/2L6wZRy) +- [CR-X](http://bit.ly/2L6xsmM) +- [Ender 5 Plus](https://amzn.to/37TE8yH) +- [CR10 V2 ](http://bit.ly/37PaXfV) +- [CR20 and Pro](http://bit.ly/2Oxxruk) +- [CR10S](http://bit.ly/33AAaHv) +- [CR10S4 400mm](http://bit.ly/2XXCBmq) +- [CR10S5 500mm](http://bit.ly/35K4ZuR) -Additional documentation can be found at the [Marlin Home Page](https://marlinfw.org/). -Please test this firmware and let us know if it misbehaves in any way. Volunteers are standing by! +The CRX Has screen files with or without ABL. All other machines should use the same generic set. V2 is the current screen file version. -## Marlin 2.0 Bugfix Branch +Screen files are archived with [7-Zip](https://www.7-zip.org/) simply because it came out 1/5 the file size of a zip file. That added up fast! -__Not for production use. Use with caution!__ +Now that we have configured an auto build, we are able to provide quite a few HEX file configurations. There is an issue with Windows systems limiting path depth however so the file names need to be shorter than we would prefer. Therefore, here is a legend to decoding what they are : -Marlin 2.0 takes this popular RepRap firmware to the next level by adding support for much faster 32-bit and ARM-based boards while improving support for 8-bit AVR boards. Read about Marlin's decision to use a "Hardware Abstraction Layer" below. +- BLT = BLTouch +- BIL = Bilinear Leveling +- UBL - Unified Bed Leveling +- DZ = Dual Z Steppers +- Fil = FilamentRunout +- Slnt = Creality Silent Board +- H = E3D Hemera Extruder +- MC = Mosquito Creality mount +- ME = Mosquito E3D mount +- Melzi Host option disables local SD card to allow more features and buffer for Octoprint control +- NF = Noise filtering for machines with cable extensions - reduces homing accuracy! -This branch is for patches to the latest 2.0.x release version. Periodically this branch will form the basis for the next minor 2.0.x release. +## Primary notes for DW6 +- Power Loss Recovery is functional again +- Added screen for manual PID entry and custom tuning +- Added screen for Step/mm and probe offset editing +- Base bumped to Marlin 2.0.4.4 +- Tweaks to limit RAM consumption where possible -Download earlier versions of Marlin on the [Releases page](https://github.com/MarlinFirmware/Marlin/releases). +The default build button is now a batch Build All! If you want to build a custom stock 2560 environment, use the env:megaatmega2560 environment. For SKR boards use the LPC1768/9 environments as usual. + +## About Our Branches + +The firmware branches maintained here are made possible by the support of sponsors like [Tiny Machines 3D](https://www.tinymachines3d.com/?rfsn=3419592.cc302fe) as well as our customer base through our 3D printing Services. Maintaining and developing these branches takes a significant investment, made up of time and machines. To support continued development, please consider your next 3D Printer related purchase from Tiny Machines 3D and thank them for supporting open source development. Or, consider us for printing services outside of your machine’s capabilities. Print service requests can be sent to d.menzel@insanityautomation.com and we will respond typically within 1 working day. If you do not need anything printed or a 3D Printer but still want to contribute, you can support us through [Patreon](https://www.patreon.com/InsanityAutomation). + +## Setup + +All configuration options intended to be adjusted by end users have been placed in the top section of Configuration.h and have been documented there. There is typically a break line to segregate the standard configuration below. Anything aside from the upper options is intended for advanced users only. + +## Known Issues + - While auto leveling (measuring) is in progress pressing other buttons on the screen can abort portions of the script depending where it is + - - The process includes heating the bed before probing, probing then heating the nozzle before moving to Z0. + + - UBL functions differently than Bilinear. It currently probes 16 points and extrapolates where the probe cannot reach. This is because UBL is designed to build a mesh everywhere the nozzle can reach, where bilinear only works where the probe can reach. These points are intended to be manually tuned however the touchscreen has no interface to do so. We are working on a way to increase the mesh density and feed alternative points to the screen. This is especially important for the CR-10 Max. Please mind the differences with UBL during use. + + - There are some points where the screen accepts input before it's really ready to (Measuring on Auto Leveling for example, wait for message to Set Z Offset) so please be patient! Sending inputs (pressing buttons) essentially overwrites the existing command with the new one. + + - CR-X Non-Auto Leveling screens have the start of baby-stepping abilities on the adjust screen, however this has not been fully tested yet. Use with caution. + + +## Support + +This firmware is provided to the public as-is with no warranty or guarantee. It's based on a large open source project and there is no entitlement to support. That said, Tiny Machines 3D customers may obtain support through their normal support queue. I will provide support to Patreons as I am able. If you require more immediate support and are not a Tiny Machines customer, you may contact them at support@tinymachines3d.com about purchasing support hours. Aside from this, we are active many Facebook groups as well as several discord channels and typically help anyone we can when we come across them. + +3D Printing Discord - https://discord.gg/MZrsgVU +Marlin Discord - https://discord.gg/n5NJ59y + +## Future Goals + +For this branch, we still have some active goals open that we plan to continue working on provided there is continued interest in the project. +- SD Card sub directory traversal +- Volume and leveling state EEPROM storage +- Utilize a few more of the background screens (such as print finished) that are currently not in use but not necessary + + +## Firmware Branches + - 1.1.9 Firmware (Stable, EOL) [TM_CR10](https://github.com/InsanityAutomation/Marlin/tree/TM_CR10) + - 2.0 Firmware [Creality_Marlin2.0.x](https://github.com/InsanityAutomation/Marlin/tree/Creality_Marlin2.0.x) + - 2.0 Development Branch (Beta, but well tested) [Creality_2.0_Devel](https://github.com/InsanityAutomation/Marlin/tree/Creality_2.0_Devel) + - 2.0 Bleeding edge Branch (Here there be dragons!) [Creality_2.0_Bleeding](https://github.com/InsanityAutomation/Marlin/tree/Creality_2.0_Bleeding) + - Touchscreen Firmware (10SPro and CR-X 1.1.9 Stable) [Creality_DWINTest](https://github.com/InsanityAutomation/Marlin/tree/Creality_DWINTest) + - Touchscreen Firmware (10SPro and CR-X 2.0 Active Development) [CrealityDwin_2.0](https://github.com/InsanityAutomation/Marlin/tree/CrealityDwin_2.0) +## Formbot / Vivedino Firmware Branches + - Raptor 1 1.1.9 Firmware [TM_Raptor](https://github.com/InsanityAutomation/Marlin/tree/TM_Raptor) + - Raptor 1/2 2.0 Firmware [Raptor_2.0.X](https://github.com/InsanityAutomation/Marlin/tree/Raptor_2.0.X) + - Trex 2+/3 1.1.9 Firmware [Trex3_1.1.9](https://github.com/InsanityAutomation/Marlin/tree/Trex3_1.1.9) + - Trex 2+/3 2.0 Firmware (Be warned of layer shift issue below!) [TM_Trex2+_2.0.x](https://github.com/InsanityAutomation/Marlin/tree/TM_Trex2+_2.0.x) +## Mamorubot / HieHa Firmware Branches + - SX4 1.1.9 Firmware (Stable, EOL) [Mamorubot_SX4]( https://github.com/InsanityAutomation/Marlin/tree/Mamorubot_SX4) + - SX4 2.0 Firmware (Beta, but well tested) [TM_SX4_2.0](https://github.com/InsanityAutomation/Marlin/tree/TM_SX4_2.0) + - SX4 Development Branch [TM_SX4_2.0_Devel](https://github.com/InsanityAutomation/Marlin/tree/TM_SX4_2.0_Devel) +## Other Firmware + - Raise 3D N2+ (Dual) 2.0 [Raise3D-N2+-Dual](https://github.com/InsanityAutomation/Marlin/tree/Raise3D-N2+-Dual) + - Evnovo Artillery Sidewinder X1 2.0 [Evnovo X1](https://github.com/InsanityAutomation/Marlin/tree/ArtilleryX1_2.0_Devel) + +[Marlin Commit History](https://github.com/MarlinFirmware/Marlin/pulls?q=is%3Apr+is%3Aclosed+author%3AInsanityAutomation) + +## Active Projects + - [Tracing Marlin 2.0 Planner bug causing layer Shifting](https://github.com/MarlinFirmware/Marlin/issues/12403) + - Creality Dwin Touchscreen rewrite to ExtUI - DONE + - [IDEX drifting z offset on tool change with UBL](https://github.com/MarlinFirmware/Marlin/issues/13817) + - [Multiple touch homing](https://github.com/MarlinFirmware/Marlin/issues/9802) + - [Tool change offset changes](https://github.com/MarlinFirmware/Marlin/issues/12568) + - [Hotend offset adjustment clamping](https://github.com/MarlinFirmware/Marlin/pull/13669) + - [Filament width sensor hang on 32 bit](https://github.com/MarlinFirmware/Marlin/issues/13701) + - Probe point output for all leveling types matching incomplete ubl implementation - DONE + - SKR1.1 Pro integration to Trex2 with TMC2209 Drivers - Mostly done, blew an output... + - SKR1.3 Integration to Mamorubot SX4 - DONE + - Mosquito BMG-M integration to Raptor + - Porting Chithu Touchscreen board to Marlin 2.0 with ExtUI + - Anet A10 Delta STM32F103 board analysis + - Smoothing integration and vendor components of Marlin 2.0 (Revision to version.h handling, limit clamping, usability enhancements ect) + - Consolidate more probing functions, improve G33/4 and G28/29 handling + - G34 Z stepper reordering and automatic detection / adjustment of reversed stepper connections + - Video documentation of firmware branch configuration options and flashing with platformio +## Planned Projects + - Implement Virtual Tools + - Port Duet2 Wifi with Duex5 to Marlin 2.0 + - Further Gcode Parity with RRF + - Extend Host Prompt Support for Power Loss Recovery + - Improve native ESP32 web support + - Port M425 Auto backlash and offset calibration to IDEX + - Integrate 12 stepper LPC1778 PCB to configure ideXY quad head system as well as integrate 3 extruder mixing to IDEX + - Video walkthrough of each bed leveling system usage and all functions + +## Marlin +This is just one of many forks of Marlin. We don't try to bury that behind fancy marmarketingketting or anything else. As you can see from the links above, most of the work done here is submitted back to the mainstream Marlin branches. The end goal of every project is to get it to the point where it is merged and maintained there. See marlin resources, including how to contribute to the Marlin Project as well, down below. ## Building Marlin 2.0 -To build Marlin 2.0 you'll need [Arduino IDE 1.8.8 or newer](https://www.arduino.cc/en/main/software) or [PlatformIO](https://docs.platformio.org/en/latest/ide.html#platformio-ide). We've posted detailed instructions on [Building Marlin with Arduino](https://marlinfw.org/docs/basics/install_arduino.html) and [Building Marlin with PlatformIO for ReArm](https://marlinfw.org/docs/basics/install_rearm.html) (which applies well to other 32-bit boards). +To build Marlin 2.0 you'll need [Arduino IDE 1.8.8 or newer](https://www.arduino.cc/en/main/software) or [PlatformIO](http://docs.platformio.org/en/latest/ide.html#platformio-ide). We've posted detailed instructions on [Building Marlin with Arduino](http://marlinfw.org/docs/basics/install_arduino.html) and [Building Marlin with PlatformIO for ReArm](http://marlinfw.org/docs/basics/install_rearm.html) (which applies well to other 32-bit boards). -## Hardware Abstraction Layer (HAL) -Marlin 2.0 introduces a layer of abstraction so that all the existing high-level code can be built for 32-bit platforms while still retaining full 8-bit AVR compatibility. Retaining AVR compatibility and a single code-base is important to us, because we want to make sure that features and patches get as much testing and attention as possible, and that all platforms always benefit from the latest improvements. +## The current Marlin dev team consists of: -### Current HALs - - #### AVR (8-bit) - - board|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Arduino AVR](https://www.arduino.cc/)|ATmega, ATTiny, etc.|16-20MHz|64-256k|2-16k|5V|no - - #### DUE - - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Arduino Due](https://www.arduino.cc/en/Guide/ArduinoDue), [RAMPS-FD](https://www.reprap.org/wiki/RAMPS-FD), etc.|[SAM3X8E ARM-Cortex M3](https://www.microchip.com/wwwproducts/en/ATsam3x8e)|84MHz|512k|64+32k|3.3V|no - - #### ESP32 - - board|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview)|Tensilica Xtensa LX6|160-240MHz variants|---|---|3.3V|--- - - #### LPC1768 / LPC1769 - - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Re-ARM](https://www.kickstarter.com/projects/1245051645/re-arm-for-ramps-simple-32-bit-upgrade)|[LPC1768 ARM-Cortex M3](https://www.nxp.com/products/microcontrollers-and-processors/arm-based-processors-and-mcus/lpc-cortex-m-mcus/lpc1700-cortex-m3/512kb-flash-64kb-sram-ethernet-usb-lqfp100-package:LPC1768FBD100)|100MHz|512k|32+16+16k|3.3-5V|no - [MKS SBASE](https://reprap.org/forum/read.php?13,499322)|LPC1768 ARM-Cortex M3|100MHz|512k|32+16+16k|3.3-5V|no - [Selena Compact](https://github.com/Ales2-k/Selena)|LPC1768 ARM-Cortex M3|100MHz|512k|32+16+16k|3.3-5V|no - [Azteeg X5 GT](https://www.panucatt.com/azteeg_X5_GT_reprap_3d_printer_controller_p/ax5gt.htm)|LPC1769 ARM-Cortex M3|120MHz|512k|32+16+16k|3.3-5V|no - [Smoothieboard](https://reprap.org/wiki/Smoothieboard)|LPC1769 ARM-Cortex M3|120MHz|512k|64k|3.3-5V|no - - #### SAMD51 - - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Adafruit Grand Central M4](https://www.adafruit.com/product/4064)|[SAMD51P20A ARM-Cortex M4](https://www.microchip.com/wwwproducts/en/ATSAMD51P20A)|120MHz|1M|256k|3.3V|yes - - #### STM32F1 - - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Arduino STM32](https://github.com/rogerclarkmelbourne/Arduino_STM32)|[STM32F1](https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html) ARM-Cortex M3|72MHz|256-512k|48-64k|3.3V|no - [Geeetech3D GTM32](https://github.com/Geeetech3D/Diagram/blob/master/Rostock301/Hardware_GTM32_PRO_VB.pdf)|[STM32F1](https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html) ARM-Cortex M3|72MHz|256-512k|48-64k|3.3V|no - - #### STM32F4 - - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [STEVAL-3DP001V1](https://www.st.com/en/evaluation-tools/steval-3dp001v1.html)|[STM32F401VE Arm-Cortex M4](https://www.st.com/en/microcontrollers-microprocessors/stm32f401ve.html)|84MHz|512k|64+32k|3.3-5V|yes - - #### Teensy++ 2.0 - - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Teensy++ 2.0](https://www.microchip.com/wwwproducts/en/AT90USB1286)|[AT90USB1286](https://www.microchip.com/wwwproducts/en/AT90USB1286)|16MHz|128k|8k|5V|no - - #### Teensy 3.1 / 3.2 - - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Teensy 3.2](https://www.pjrc.com/store/teensy32.html)|[MK20DX256VLH7](https://www.mouser.com/ProductDetail/NXP-Freescale/MK20DX256VLH7) ARM-Cortex M4|72MHz|256k|32k|3.3V-5V|yes - - #### Teensy 3.5 / 3.6 - - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Teensy 3.5](https://www.pjrc.com/store/teensy35.html)|[MK64FX512VMD12](https://www.mouser.com/ProductDetail/NXP-Freescale/MK64FX512VMD12) ARM-Cortex M4|120MHz|512k|192k|3.3-5V|yes - [Teensy 3.6](https://www.pjrc.com/store/teensy36.html)|[MK66FX1M0VMD18](https://www.mouser.com/ProductDetail/NXP-Freescale/MK66FX1M0VMD18) ARM-Cortex M4|180MHz|1M|256k|3.3V|yes - - #### Teensy 4.0 / 4.1 - - boards|processor|speed|flash|sram|logic|fpu - ----|---------|-----|-----|----|-----|--- - [Teensy 4.0](https://www.pjrc.com/store/teensy40.html)|[IMXRT1062DVL6A](https://www.mouser.com/new/nxp-semiconductors/nxp-imx-rt1060-crossover-processor/) ARM-Cortex M7|600MHz|1M|2M|3.3V|yes - [Teensy 4.1](https://www.pjrc.com/store/teensy41.html)|[IMXRT1062DVJ6A](https://www.mouser.com/new/nxp-semiconductors/nxp-imx-rt1060-crossover-processor/) ARM-Cortex M7|600MHz|1M|2M|3.3V|yes - -## Submitting Patches - -Proposed patches should be submitted as a Pull Request against the ([bugfix-2.0.x](https://github.com/MarlinFirmware/Marlin/tree/bugfix-2.0.x)) branch. - -- This branch is for fixing bugs and integrating any new features for the duration of the Marlin 2.0.x life-cycle. -- Follow the [Coding Standards](https://marlinfw.org/docs/development/coding_standards.html) to gain points with the maintainers. -- Please submit your questions and concerns to the [Issue Queue](https://github.com/MarlinFirmware/Marlin/issues). - -### [RepRap.org Wiki Page](https://reprap.org/wiki/Marlin) - -## Credits - -The current Marlin dev team consists of: - - - Scott Lahteine [[@thinkyhead](https://github.com/thinkyhead)] - USA   [Donate](https://www.thinkyhead.com/donate-to-marlin) / Flattr: [![Flattr Scott](https://api.flattr.com/button/flattr-badge-small.png)](https://flattr.com/submit/auto?user_id=thinkyhead&url=https://github.com/MarlinFirmware/Marlin&title=Marlin&language=&tags=github&category=software) + - Scott Lahteine [[@thinkyhead](https://github.com/thinkyhead)] - USA   [![Flattr Scott](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=thinkyhead&url=https://github.com/MarlinFirmware/Marlin&title=Marlin&language=&tags=github&category=software) - Roxanne Neufeld [[@Roxy-3D](https://github.com/Roxy-3D)] - USA - - Chris Pepper [[@p3p](https://github.com/p3p)] - UK - Bob Kuhn [[@Bob-the-Kuhn](https://github.com/Bob-the-Kuhn)] - USA + - Chris Pepper [[@p3p](https://github.com/p3p)] - UK - João Brazio [[@jbrazio](https://github.com/jbrazio)] - Portugal - - Erik van der Zalm [[@ErikZalm](https://github.com/ErikZalm)] - Netherlands   [![Flattr Erik](https://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=ErikZalm&url=https://github.com/MarlinFirmware/Marlin&title=Marlin&language=&tags=github&category=software) + - Erik van der Zalm [[@ErikZalm](https://github.com/ErikZalm)] - Netherlands   [![Flattr Erik](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=ErikZalm&url=https://github.com/MarlinFirmware/Marlin&title=Marlin&language=&tags=github&category=software) ## License diff --git a/SingleExtruderScreens_V2Rev1.7z b/SingleExtruderScreens_V2Rev1.7z new file mode 100644 index 0000000000..390329f75d Binary files /dev/null and b/SingleExtruderScreens_V2Rev1.7z differ diff --git a/buildroot/share/PlatformIO/scripts/common-cxxflags.py b/buildroot/share/PlatformIO/scripts/common-cxxflags.py index a0a3b45043..4bdcc37251 100644 --- a/buildroot/share/PlatformIO/scripts/common-cxxflags.py +++ b/buildroot/share/PlatformIO/scripts/common-cxxflags.py @@ -20,3 +20,6 @@ env.Append(CXXFLAGS=[ # if env.GetBuildType() == "debug": env['BUILD_DIR'] = '$PROJECT_BUILD_DIR/$PIOENV/debug' +env_name = str(env["PIOENV"]) +env.Replace(PROGNAME="%s_DW7" % (env_name)) +print("Environment: %s" % (env_name)) diff --git a/platformio.ini b/platformio.ini index b052a26b58..aecf76dd6f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -18,7 +18,306 @@ [platformio] src_dir = Marlin boards_dir = buildroot/share/PlatformIO/boards -default_envs = mega2560 +default_envs = + 10SPro_BIL + 10SPro_BLT_BIL + CRX_BLT_UBL_NoFil + CRX_BLT_BIL_NoFil + E5PUBLSlntDZ + E5PBILSlntDZ + E5P_UBL_DZ + E5P_BIL_DZ + E5P_UBL_Slnt + E5P_BIL_Slnt + E5P_UBL + E5P_BIL + CR10Max_UBL + CR10Max_BIL + 10SProV2_UBL + 10SPro_BLT_UBL + 10SPro_UBL + CRX_BLT_UBL_Fil + CRX_BLT_BIL_Fil + 10SProV2_BIL + CRX_NoFil + CRX_Fil + E5PBILSlntDZH + E5P_BIL_DZH + E5P_UBL_SlntH + E5P_BIL_SlntH + E5P_UBLH + E5P_BILH + E5P_UBL_DZH + E5PUBLSlntDZH + 10SPro_BLT_UBL_Enc + S5_AC + S5_BLT + S5 + S5_BLT_AC + S4_BLT_AC + S4_AC + S4_BLT + S4 + CR2020 + CR10V2_BLT + CR10V2 + CR10S_BLT + CR10S + CR20_Pro + CR20_BLT + CR20 + Ender4_BLT + Ender4 + CR10_BLT_Host + CR10_BLT_SD + CR10 + CR10Mini_BLT_Host + CR10Mini_BLT_SD + CR10Mini + Ender5_BLT_Host + Ender5_BLT_SD + Ender5 + Ender2_BLT_Host + Ender2_BLT_SD + Ender2 + Ender3_BLT_Host + Ender3_BLT_SD + Ender3 + CR10S_BLT_UBL + CR20_Pro_UBL + CR10V2_UBL + CR10V2_BLT_UBL + S4_BLT_UBL + S4_BLT_AC_UBL + S5_BLT_UBL + S5_BLT_AC_UBL + 10SPro_BIL_MC + 10SPro_BLT_BIL_MC + 10SProV2_BIL_MC + 10SPro_UBL_MC + 10SPro_BLT_UBL_MC + 10SProV2_UBL_MC + CR10Max_BIL_MC + CR10Max_UBL_MC + E5P_BIL_MC + E5P_UBL_MC + E5P_BIL_Slnt_MC + E5P_UBL_Slnt_MC + E5P_BIL_DZ_MC + E5P_UBL_DZ_MC + E5PBILSlntDZ_MC + E5PUBLSlntDZ_MC + CRX_BLT_BILNoFilMC + CRX_BLT_UBLNoFilMC + CRX_BLT_BIL_Fil_MC + CRX_BLT_UBL_Fil_MC + CRX_NoFil_MC + CRX_Fil_MC + 10SProBLTUBLEncMC + Ender4_MC + Ender4_BLT_MC + Ender4_BLT_UBL_MC + CR20_MC + CR20_BLT_MC + CR20_BLT_UBL_MC + CR20_Pro_MC + CR20_Pro_UBL_MC + CR10S_MC + CR10S_BLT_MC + CR10V2_MC + CR10V2_BLT_MC + CR10S_BLT_UBL_MC + CR10V2_UBL_MC + CR10V2_BLT_UBL_MC + S4_MC + S4_BLT_UBL_MC + S4_AC_MC + S4_BLT_AC_UBL_MC + S5_MC + S5_BLT_UBL_MC + S5_AC_MC + S5_BLT_AC_UBL_MC + Ender3_MC + Ender3_BLT_SD_MC + Ender3_BLT_Host_MC + Ender2_MC + Ender2_BLT_SD_MC + Ender2_BLT_Host_MC + Ender5_MC + Ender5_BLT_SD_MC + Ender5_BLT_Host_MC + CR10Mini_MC + CR10Mini_BLT_SD_MC + CR10MiniBLTHostMC + CR10_MC + CR10_BLT_SD_MC + CR10_BLT_Host_MC + 10SPro_BIL_ME + 10SPro_BLT_BIL_ME + 10SProV2_BIL_ME + 10SPro_UBL_ME + 10SPro_BLT_UBL_ME + 10SProV2_UBL_ME + CR10Max_BIL_ME + CR10Max_UBL_ME + E5P_BIL_ME + E5P_UBL_ME + E5P_BIL_Slnt_ME + E5P_UBL_Slnt_ME + E5P_BIL_DZ_ME + E5P_UBL_DZ_ME + E5PBILSlntDZ_ME + E5PUBLSlntDZ_ME + CRX_BLTBILNoFilME + CRX_BLTUBLNoFilME + CRX_BLT_BIL_Fil_ME + CRX_BLT_UBL_Fil_ME + CRX_NoFil_ME + CRX_Fil_ME + 10SPro_BLTUBLEncME + Ender4_ME + Ender4_BLT_ME + Ender4_BLT_UBL_ME + CR20_ME + CR20_BLT_ME + CR20_BLT_UBL_ME + CR20_Pro_ME + CR20_Pro_UBL_ME + CR10S_ME + CR10S_BLT_ME + CR10V2_ME + CR10V2_BLT_ME + CR10S_BLT_UBL_ME + CR10V2_UBL_ME + CR10V2_BLT_UBL_ME + S4_ME + S4_BLT_UBL_ME + S4_AC_ME + S4_BLT_AC_UBL_ME + S5_ME + S5_BLT_UBL_ME + S5_AC_ME + S5_BLT_AC_UBL_ME + Ender3_ME + Ender3_BLT_SD_ME + Ender3_BLT_Host_ME + Ender2_ME + Ender2_BLT_SD_ME + Ender2_BLT_Host_ME + Ender5_ME + Ender5_BLT_SD_ME + Ender5_BLT_Host_ME + CR10Mini_ME + CR10Mini_BLT_SD_ME + CR10MiniBLTHostME + CR10_ME + CR10_BLT_SD_ME + CR10_BLT_Host_ME + Ender4_BLT_UBL + CR20_BLT_UBL + S4_BLT_MC + S4_BLT_AC_MC + S5_BLT_MC + S5_BLT_AC_MC + S4_BLT_ME + S4_BLT_AC_ME + S5_BLT_ME + S5_BLT_AC_ME + CR10S_NF + CR10S_BLT_NF + CR10V2_NF + CR10V2_BLT_NF + CR10S_BLT_UBL_NF + CR10V2_UBL_NF + CR10V2_BLT_UBL_NF + S4_NF + S4_BLT_UBL_NF + S4_BLT_NF + S4_AC_NF + S4_BLT_AC_NF + S4_BLT_AC_UBL_NF + S5_NF + S5_BLT_NF + S5_BLT_UBL_NF + S5_AC_NF + S5_BLT_AC_NF + S5_BLT_AC_UBL_NF + CR10S_MC_NF + CR10S_BLT_MC_NF + CR10V2_MC_NF + CR10V2_BLT_MC_NF + CR10S_BLT_UBL_MC_NF + CR10V2_UBL_MC_NF + CR10V2_BLT_UBL_MC_NF + S4_MC_NF + S4_BLT_MC_NF + S4_BLT_UBL_MC_NF + S4_AC_MC_NF + S4_BLT_AC_MC_NF + S4_BLT_AC_UBL_MC_NF + S5_MC_NF + S5_BLT_MC_NF + S5_BLT_UBL_MC_NF + S5_AC_MC_NF + S5_BLT_AC_MC_NF + S5_BLT_AC_UBL_MC_NF + CR10_MC_NF + CR10_BLT_SD_MC_NF + CR10_BLT_Host_MC_NF + CR10S_ME_NF + CR10S_BLT_ME_NF + CR10V2_ME_NF + CR10V2_BLT_ME_NF + CR10S_BLT_UBL_ME_NF + CR10V2_UBL_ME_NF + CR10V2_BLT_UBL_ME_NF + S4_ME_NF + S4_BLT_ME_NF + S4_BLT_UBL_ME_NF + S4_AC_ME_NF + S4_BLT_AC_ME_NF + S4_BLT_AC_UBL_ME_NF + S5_ME_NF + S5_BLT_ME_NF + S5_BLT_UBL_ME_NF + S5_AC_ME_NF + S5_BLT_AC_ME_NF + S5_BLT_AC_UBL_ME_NF + CR20_LR + CR20_BLT_LR + CR20_BLT_UBL_LR + CR20_Pro_LR + CR20_Pro_UBL_LR + CR10S_LR + CR10S_BLT_LR + S4_LR + S4_BLT_UBL_LR + S4_BLT_LR + S4_AC_LR + S4_BLT_AC_LR + S4_BLT_AC_UBL_LR + S5_LR + S5_BLT_LR + S5_BLT_UBL_LR + S5_AC_LR + S5_BLT_AC_LR + S5_BLT_AC_UBL_LR + CR10S_NF_LR + CR10S_BLT_NF_LR + CR10S_BLT_UBL_NF_LR + S4_NF_LR + S4_BLT_UBL_NF_LR + S4_BLT_NF_LR + S4_AC_NF_LR + S4_BLT_AC_NF_LR + S4_BLT_AC_UBL_NF_LR + S5_NF_LR + S5_BLT_NF_LR + S5_BLT_UBL_NF_LR + S5_AC_NF_LR + S5_BLT_AC_NF_LR + S5_BLT_AC_UBL_NF_LR + include_dir = Marlin # @@ -26,178 +325,18 @@ include_dir = Marlin # [common] default_src_filter = + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - + - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - extra_scripts = pre:buildroot/share/PlatformIO/scripts/common-dependencies.py pre:buildroot/share/PlatformIO/scripts/common-cxxflags.py - post:buildroot/share/PlatformIO/scripts/common-dependencies-post.py build_flags = -fmax-errors=5 -g -D__MARLIN_FIRMWARE__ -fmerge-all-constants lib_deps = @@ -205,184 +344,37 @@ lib_deps = # Feature Dependencies # [features] -HAS_TFT_LVGL_UI = lvgl=https://github.com/makerbase-mks/LVGL-6.1.1-MKS/archive/master.zip +HAS_TFT_LVGL_UI = lvgl=https://github.com/makerbase-mks/MKS-LittlevGL/archive/master.zip src_filter=+ extra_scripts=download_mks_assets.py HAS_TRINAMIC_CONFIG = TMCStepper@~0.7.1 - src_filter=+ + + + + -HAS_STEALTHCHOP = src_filter=+ + src_filter=+ SR_LCD_3W_NL = SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip -HAS_MOTOR_CURRENT_I2C = SlowSoftI2CMaster - src_filter=+ +DIGIPOT_MCP4... = SlowSoftI2CMaster HAS_TMC26X = TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip - src_filter=+ HAS_L64XX = Arduino-L6470@0.8.0 - src_filter=+ + + NEOPIXEL_LED = Adafruit NeoPixel@1.5.0 - src_filter=+ MAX6675_IS_MAX31865 = Adafruit MAX31865 library@~1.1.0 -USES_LIQUIDCRYSTAL = LiquidCrystal@1.5.0 -USES_LIQUIDCRYSTAL_I2C = marcoschwartz/LiquidCrystal_I2C@1.1.4 -USES_LIQUIDTWI2 = LiquidTWI2@1.2.7 -HAS_WIRED_LCD = src_filter=+ -HAS_MARLINUI_HD44780 = src_filter=+ -HAS_MARLINUI_U8GLIB = U8glib-HAL@~0.4.1 +HAS_GRAPHICAL_LCD = U8glib-HAL@0.4.1 src_filter=+ -HAS_(FSMC|SPI)_TFT = src_filter=+ + + -HAS_FSMC_TFT = src_filter=+ + -HAS_SPI_TFT = src_filter=+ + -HAS_GRAPHICAL_TFT = src_filter=+ +USES_LIQUIDCRYSTAL = LiquidCrystal@1.5.0 +USES_LIQUIDTWI2 = LiquidTWI2@1.2.7 DWIN_CREALITY_LCD = src_filter=+ -IS_TFTGLCD_PANEL = src_filter=+ -HAS_TOUCH_XPT2046 = src_filter=+ +HAS_CHARACTER_LCD = src_filter=+ +HAS_GRAPHICAL_TFT = src_filter=+ HAS_LCD_MENU = src_filter=+ -HAS_GAMES = src_filter=+ -MARLIN_BRICKOUT = src_filter=+ -MARLIN_INVADERS = src_filter=+ -MARLIN_MAZE = src_filter=+ -MARLIN_SNAKE = src_filter=+ -HAS_MENU_BACKLASH = src_filter=+ -HAS_MENU_BED_CORNERS = src_filter=+ -LCD_BED_LEVELING = src_filter=+ -HAS_MENU_CANCELOBJECT = src_filter=+ -HAS_MENU_DELTA_CALIBRATE = src_filter=+ -HAS_MENU_FILAMENT = src_filter=+ -LCD_INFO_MENU = src_filter=+ -HAS_MENU_JOB_RECOVERY = src_filter=+ -HAS_MENU_LED = src_filter=+ -HAS_MENU_MEDIA = src_filter=+ -HAS_MENU_MIXER = src_filter=+ -HAS_MENU_MMU2 = src_filter=+ -HAS_MENU_PASSWORD = src_filter=+ -HAS_MENU_POWER_MONITOR = src_filter=+ -HAS_MENU_CUTTER = src_filter=+ -HAS_MENU_TEMPERATURE = src_filter=+ -HAS_MENU_TMC = src_filter=+ -HAS_MENU_TOUCH_SCREEN = src_filter=+ -HAS_MENU_UBL = src_filter=+ -ANYCUBIC_LCD_CHIRON = src_filter=+ + -ANYCUBIC_LCD_I3MEGA = src_filter=+ + -HAS_DGUS_LCD = src_filter=+ + +HAS_DGUS_LCD = src_filter=+ TOUCH_UI_FTDI_EVE = src_filter=+ -EXTUI_EXAMPLE = src_filter=+ -MALYAN_LCD = src_filter=+ +ANYCUBIC_TFT_MODEL = src_filter=+ USB_FLASH_DRIVE_SUPPORT = src_filter=+ -AUTO_BED_LEVELING_BILINEAR = src_filter=+ -AUTO_BED_LEVELING_(3POINT|(BI)?LINEAR) = src_filter=+ +AUTO_BED_LEVELING_(3POINT|(BI)?LINEAR) = src_filter=+ + MESH_BED_LEVELING = src_filter=+ + AUTO_BED_LEVELING_UBL = src_filter=+ + -BACKLASH_COMPENSATION = src_filter=+ -BARICUDA = src_filter=+ + -BINARY_FILE_TRANSFER = src_filter=+ + -BLTOUCH = src_filter=+ -CANCEL_OBJECTS = src_filter=+ + -CASE_LIGHT_ENABLE = src_filter=+ + -EXTERNAL_CLOSED_LOOP_CONTROLLER = src_filter=+ + -USE_CONTROLLER_FAN = src_filter=+ -HAS_MOTOR_CURRENT_DAC = src_filter=+ -DIRECT_STEPPING = src_filter=+ + -EMERGENCY_PARSER = src_filter=+ - -I2C_POSITION_ENCODERS = src_filter=+ -IIC_BL24CXX_EEPROM = src_filter=+ -HAS_SPI_FLASH = src_filter=+ -HAS_ETHERNET = src_filter=+ -HAS_FANMUX = src_filter=+ -FILAMENT_WIDTH_SENSOR = src_filter=+ + -FWRETRACT = src_filter=+ + -HOST_ACTION_COMMANDS = src_filter=+ -HOTEND_IDLE_TIMEOUT = src_filter=+ -JOYSTICK = src_filter=+ -BLINKM = src_filter=+ -HAS_COLOR_LEDS = src_filter=+ + -PCA9533 = src_filter=+ -PCA9632 = src_filter=+ -PRINTER_EVENT_LEDS = src_filter=+ -TEMP_STAT_LEDS = src_filter=+ -MAX7219_DEBUG = src_filter=+ + -MIXING_EXTRUDER = src_filter=+ + -PRUSA_MMU2 = src_filter=+ + -PASSWORD_FEATURE = src_filter=+ + -ADVANCED_PAUSE_FEATURE = src_filter=+ + + -AUTO_POWER_CONTROL = src_filter=+ -HAS_POWER_MONITOR = src_filter=+ + -POWER_LOSS_RECOVERY = src_filter=+ + -PROBE_TEMP_COMPENSATION = src_filter=+ + -HAS_FILAMENT_SENSOR = src_filter=+ + -MK2_MULTIPLEXER = src_filter=+ -EXT_SOLENOID|MANUAL_SOLENOID_CONTROL = src_filter=+ + -HAS_CUTTER = src_filter=+ + -EXPERIMENTAL_I2CBUS = src_filter=+ + -MECHANICAL_GANTRY_CAL.+ = src_filter=+ -Z_STEPPER_AUTO_ALIGN = src_filter=+ + -G26_MESH_VALIDATION = src_filter=+ -ASSISTED_TRAMMING = src_filter=+ -HAS_MESH = src_filter=+ -HAS_LEVELING = src_filter=+ -DELTA_AUTO_CALIBRATION = src_filter=+ -CALIBRATION_GCODE = src_filter=+ -Z_MIN_PROBE_REPEATABILITY_TEST = src_filter=+ -M100_FREE_MEMORY_WATCHER = src_filter=+ -BACKLASH_GCODE = src_filter=+ -IS_KINEMATIC = src_filter=+ -HAS_EXTRA_ENDSTOPS = src_filter=+ -SKEW_CORRECTION_GCODE = src_filter=+ -DIRECT_PIN_CONTROL = src_filter=+ + -PINS_DEBUGGING = src_filter=+ -NO_VOLUMETRICS = src_filter=- -HAS_MULTI_EXTRUDER = src_filter=+ -HAS_HOTEND_OFFSET = src_filter=+ -EDITABLE_SERVO_ANGLES = src_filter=+ -PIDTEMP = src_filter=+ -PREVENT_COLD_EXTRUSION = src_filter=+ -PIDTEMPBED = src_filter=+ -HAS_USER_THERMISTORS = src_filter=+ -SD_ABORT_ON_ENDSTOP_HIT = src_filter=+ -BAUD_RATE_GCODE = src_filter=+ -HAS_SMART_EFF_MOD = src_filter=+ -COOLANT_CONTROL = src_filter=+ -HAS_SOFTWARE_ENDSTOPS = src_filter=+ -HAS_DUPLICATION_MODE = src_filter=+ -LIN_ADVANCE = src_filter=+ -PHOTO_GCODE = src_filter=+ -CONTROLLER_FAN_EDITABLE = src_filter=+ -GCODE_MACROS = src_filter=+ -GRADIENT_MIX = src_filter=+ -HAS_SAVED_POSITIONS = src_filter=+ + -PARK_HEAD_ON_PAUSE = src_filter=+ -FILAMENT_LOAD_UNLOAD_GCODES = src_filter=+ -CNC_WORKSPACE_PLANES = src_filter=+ -CNC_COORDINATE_SYSTEMS = src_filter=+ -HAS_M206_COMMAND = src_filter=+ -EXPECTED_PRINTER_CHECK = src_filter=+ -HOST_KEEPALIVE_FEATURE = src_filter=+ -REPETIER_GCODE_M360 = src_filter=+ -HAS_GCODE_M876 = src_filter=+ -HAS_RESUME_CONTINUE = src_filter=+ -HAS_LCD_CONTRAST = src_filter=+ -LCD_SET_PROGRESS_MANUALLY = src_filter=+ -TOUCH_SCREEN_CALIBRATION = src_filter=+ -ARC_SUPPORT = src_filter=+ -GCODE_MOTION_MODES = src_filter=+ -BABYSTEPPING = src_filter=+ + -Z_PROBE_SLED = src_filter=+ -G38_PROBE_TARGET = src_filter=+ -MAGNETIC_PARKING_EXTRUDER = src_filter=+ -SDSUPPORT = src_filter=+ -HAS_EXTRUDERS = src_filter=+ + -AUTO_REPORT_TEMPERATURES = src_filter=+ -INCH_MODE_SUPPORT = src_filter=+ -TEMPERATURE_UNITS_SUPPORT = src_filter=+ -NEED_HEX_PRINT = src_filter=+ -NEED_LSF = src_filter=+ -NOZZLE_PARK_FEATURE = src_filter=+ + -NOZZLE_CLEAN_FEATURE = src_filter=+ + -DELTA = src_filter=+ + -BEZIER_CURVE_SUPPORT = src_filter=+ + -PRINTCOUNTER = src_filter=+ -HAS_BED_PROBE = src_filter=+ + + + -IS_SCARA = src_filter=+ -MORGAN_SCARA = src_filter=+ -(ESP3D_)?WIFISUPPORT = AsyncTCP, ESP Async WebServer +DAC_STEPPER_CURRENT = src_filter=+ +HAS_I2C_DIGIPOT = src_filter=+ +HAS_LED_FEATURE = src_filter=+ +EXTENSIBLE_UI = src_filter=+ +(ESP3D_)?WIFISUPPORT = AsyncTCP, ESP Async WebServer ESP3DLib=https://github.com/luc-github/ESP3DLib.git arduinoWebSockets=https://github.com/Links2004/arduinoWebSockets.git ESP32SSDP=https://github.com/luc-github/ESP32SSDP.git @@ -434,24 +426,1984 @@ src_filter = ${common.default_src_filter} + # ATmega2560 # [env:mega2560] -platform = atmelavr -extends = common_avr8 -board = megaatmega2560 +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 + + +[env:10SPro_BIL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY + +[env:10SPro_BLT_BIL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY + +[env:10SProV2_BIL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SProV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY + +[env:10SPro_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL + +[env:10SPro_BLT_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL + +[env:10SProV2_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SProV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL + +[env:CR10Max_BIL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10Max -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY + +[env:CR10Max_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10Max -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL + +[env:E5P_BIL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay + +[env:E5P_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay + +[env:E5P_BIL_Slnt] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DCrealitySilentBoard + +[env:E5P_UBL_Slnt] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DCrealitySilentBoard + +[env:E5P_BIL_DZ] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DDualZ + +[env:E5P_UBL_DZ] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DDualZ + +[env:E5PBILSlntDZ] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DCrealitySilentBoard -DDualZ + +[env:E5PUBLSlntDZ] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DCrealitySilentBoard -DDualZ + +[env:E5P_BILH] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DE3DHemera + +[env:E5P_UBLH] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DE3DHemera + +[env:E5P_BIL_SlntH] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DCrealitySilentBoard -DE3DHemera + +[env:E5P_UBL_SlntH] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DCrealitySilentBoard -DE3DHemera + +[env:E5P_BIL_DZH] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DDualZ -DE3DHemera + +[env:E5P_UBL_DZH] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DDualZ -DE3DHemera + +[env:E5PBILSlntDZH] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DCrealitySilentBoard -DDualZ -DE3DHemera + +[env:E5PUBLSlntDZH] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DCrealitySilentBoard -DDualZ -DE3DHemera + +[env:CRX_BLT_BIL_NoFil] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DForce10SProDisplay + +[env:CRX_BLT_UBL_NoFil] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay + +[env:CRX_BLT_BIL_Fil] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DFilSensors + +[env:CRX_BLT_UBL_Fil] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DFilSensors + +[env:CRX_NoFil] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY + +[env:CRX_Fil] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DFilSensors + +[env:10SPro_BLT_UBL_Enc] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL -DFilamentEncoder + +[env:Ender4] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder4 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY + +[env:Ender4_BLT] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH + +[env:Ender4_BLT_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL + +[env:CR20] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY + +[env:CR20_BLT] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH + +[env:CR20_BLT_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL + +[env:CR20_Pro] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20Pro -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH + +[env:CR20_Pro_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20Pro -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL + +[env:CR10S] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY + +[env:CR10S_BLT] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH + +[env:CR10V2] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY + +[env:CR10V2_BLT] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH + +[env:CR10S_BLT_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL + +[env:CR10V2_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL + +[env:CR10V2_BLT_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL + +[env:CR2020] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR2020 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY + +[env:S4] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine + +[env:S4_BLT_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL + +[env:S4_BLT] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine + +[env:S4_AC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine + +[env:S4_BLT_AC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine + +[env:S4_BLT_AC_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL + +[env:S5] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine + +[env:S5_BLT] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme + +[env:S5_BLT_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL + +[env:S5_AC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine + +[env:S5_BLT_AC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme + +[env:S5_BLT_AC_UBL] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL + +[env:CR10S_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DCableExtensionNoiseFilter + +[env:CR10S_BLT_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DCableExtensionNoiseFilter + +[env:CR10V2_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DCableExtensionNoiseFilter + +[env:CR10V2_BLT_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DCableExtensionNoiseFilter + +[env:CR10S_BLT_UBL_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DCableExtensionNoiseFilter + +[env:CR10V2_UBL_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DCableExtensionNoiseFilter + +[env:CR10V2_BLT_UBL_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DCableExtensionNoiseFilter + +[env:S4_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DCableExtensionNoiseFilter + +[env:S4_BLT_UBL_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DCableExtensionNoiseFilter + +[env:S4_BLT_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DCableExtensionNoiseFilter + +[env:S4_AC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DCableExtensionNoiseFilter + +[env:S4_BLT_AC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DCableExtensionNoiseFilter + +[env:S4_BLT_AC_UBL_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DCableExtensionNoiseFilter + +[env:S5_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DCableExtensionNoiseFilter + +[env:S5_BLT_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DCableExtensionNoiseFilter + +[env:S5_BLT_UBL_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DCableExtensionNoiseFilter + +[env:S5_AC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DCableExtensionNoiseFilter + +[env:S5_BLT_AC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DCableExtensionNoiseFilter + +[env:S5_BLT_AC_UBL_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DCableExtensionNoiseFilter + +[env:Ender3] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder3 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender3_BLT_SD] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder3 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender3_BLT_Host] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder3 -DBedDC -DABL_BLTOUCH -DMelziHostOnly +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender2] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender2_BLT_SD] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender2_BLT_Host] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder2 -DBedDC -DABL_BLTOUCH -DMelziHostOnly +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender5] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder5 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender5_BLT_SD] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender5_BLT_Host] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder5 -DBedDC -DABL_BLTOUCH -DMelziHostOnly +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10Mini] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineMini -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10Mini_BLT_SD] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineMini -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10Mini_BLT_Host] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineMini -DBedDC -DABL_BLTOUCH -DMelziHostOnly +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineCR10 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10_BLT_SD] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineCR10 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10_BLT_Host] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineCR10 -DBedDC -DABL_BLTOUCH -DMelziHostOnly +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:10SPro_BIL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito + +[env:10SPro_BLT_BIL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DHotendMosquito + +[env:10SProV2_BIL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SProV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito + +[env:10SPro_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DHotendMosquito + +[env:10SPro_BLT_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL -DHotendMosquito + +[env:10SProV2_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SProV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DHotendMosquito + +[env:CR10Max_BIL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10Max -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DHotendMosquito + +[env:CR10Max_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10Max -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL -DHotendMosquito + +[env:E5P_BIL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DHotendMosquito + +[env:E5P_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DHotendMosquito + +[env:E5P_BIL_Slnt_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DCrealitySilentBoard -DHotendMosquito + +[env:E5P_UBL_Slnt_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DCrealitySilentBoard -DHotendMosquito + +[env:E5P_BIL_DZ_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DDualZ -DHotendMosquito + +[env:E5P_UBL_DZ_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DDualZ -DHotendMosquito + +[env:E5PBILSlntDZ_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DCrealitySilentBoard -DDualZ -DHotendMosquito + +[env:E5PUBLSlntDZ_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DCrealitySilentBoard -DDualZ -DHotendMosquito + +[env:CRX_BLT_BILNoFilMC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DHotendMosquito + +[env:CRX_BLT_UBLNoFilMC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DHotendMosquito + +[env:CRX_BLT_BIL_Fil_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DFilSensors -DHotendMosquito + +[env:CRX_BLT_UBL_Fil_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DFilSensors -DHotendMosquito + +[env:CRX_NoFil_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito + +[env:CRX_Fil_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DFilSensors -DHotendMosquito + +[env:10SProBLTUBLEncMC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL -DFilamentEncoder -DHotendMosquito + +[env:Ender4_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder4 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito + +[env:Ender4_BLT_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito + +[env:Ender4_BLT_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito + +[env:CR20_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito + +[env:CR20_BLT_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito + +[env:CR20_BLT_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito + +[env:CR20_Pro_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20Pro -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito + +[env:CR20_Pro_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20Pro -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito + +[env:CR10S_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito + +[env:CR10S_BLT_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito + +[env:CR10V2_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito + +[env:CR10V2_BLT_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito + +[env:CR10S_BLT_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito + +[env:CR10V2_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DHotendMosquito + +[env:CR10V2_BLT_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito + +[env:S4_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito + +[env:S4_BLT_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DHotendMosquito + +[env:S4_BLT_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DHotendMosquito + +[env:S4_AC_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito + +[env:S4_BLT_AC_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DHotendMosquito + +[env:S4_BLT_AC_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DHotendMosquito + +[env:S5_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito + +[env:S5_BLT_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DHotendMosquito + +[env:S5_BLT_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DHotendMosquito + +[env:S5_AC_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito + +[env:S5_BLT_AC_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DHotendMosquito + +[env:S5_BLT_AC_UBL_MC] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DHotendMosquito + +[env:Ender3_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder3 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender3_BLT_SD_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder3 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender3_BLT_Host_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder3 -DBedDC -DABL_BLTOUCH -DMelziHostOnly -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender2_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender2_BLT_SD_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender2_BLT_Host_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder2 -DBedDC -DABL_BLTOUCH -DMelziHostOnly -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender5_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder5 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender5_BLT_SD_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender5_BLT_Host_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder5 -DBedDC -DABL_BLTOUCH -DMelziHostOnly -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10Mini_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineMini -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10Mini_BLT_SD_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineMini -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10MiniBLTHostMC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineMini -DBedDC -DABL_BLTOUCH -DMelziHostOnly -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineCR10 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10_BLT_SD_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineCR10 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10_BLT_Host_MC] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineCR10 -DBedDC -DABL_BLTOUCH -DMelziHostOnly -DHotendMosquito +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:10SPro_BIL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D + +[env:10SPro_BLT_BIL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D + +[env:10SProV2_BIL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SProV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D + +[env:10SPro_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:10SPro_BLT_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:10SProV2_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SProV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:CR10Max_BIL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10Max -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D + +[env:CR10Max_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10Max -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:E5P_BIL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DHotendMosquito -DHotendE3D + +[env:E5P_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DHotendMosquito -DHotendE3D + +[env:E5P_BIL_Slnt_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DCrealitySilentBoard -DHotendMosquito -DHotendE3D + +[env:E5P_UBL_Slnt_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DCrealitySilentBoard -DHotendMosquito -DHotendE3D + +[env:E5P_BIL_DZ_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DDualZ -DHotendMosquito -DHotendE3D + +[env:E5P_UBL_DZ_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DDualZ -DHotendMosquito -DHotendE3D + +[env:E5PBILSlntDZ_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DCrealitySilentBoard -DDualZ -DHotendMosquito -DHotendE3D + +[env:E5PUBLSlntDZ_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder5Plus -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DCrealitySilentBoard -DDualZ -DHotendMosquito -DHotendE3D + +[env:CRX_BLTBILNoFilME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DHotendMosquito -DHotendE3D + +[env:CRX_BLTUBLNoFilME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DHotendMosquito -DHotendE3D + +[env:CRX_BLT_BIL_Fil_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DForce10SProDisplay -DFilSensors -DHotendMosquito -DHotendE3D + +[env:CRX_BLT_UBL_Fil_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL -DForce10SProDisplay -DFilSensors -DHotendMosquito -DHotendE3D + +[env:CRX_NoFil_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D + +[env:CRX_Fil_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCRX -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DFilSensors -DHotendMosquito -DHotendE3D + +[env:10SPro_BLTUBLEncME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SPro -DHotendAllMetal -DBedDC -DABL_BLTOUCH -DPOWER_LOSS_RECOVERY -DABL_UBL -DFilamentEncoder -DHotendMosquito -DHotendE3D + +[env:Ender4_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder4 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D + +[env:Ender4_BLT_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DHotendE3D + +[env:Ender4_BLT_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineEnder4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:CR20_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D + +[env:CR20_BLT_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DHotendE3D + +[env:CR20_BLT_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:CR20_Pro_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20Pro -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DHotendE3D + +[env:CR20_Pro_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20Pro -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:CR10S_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D + +[env:CR10S_BLT_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DHotendE3D + +[env:CR10V2_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D + +[env:CR10V2_BLT_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DHotendE3D + +[env:CR10S_BLT_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:CR10V2_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:CR10V2_BLT_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:S4_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito -DHotendE3D + +[env:S4_BLT_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DHotendMosquito -DHotendE3D + +[env:S4_BLT_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:S4_AC_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito -DHotendE3D + +[env:S4_BLT_AC_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DHotendMosquito -DHotendE3D + +[env:S4_BLT_AC_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:S5_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito -DHotendE3D + +[env:S5_BLT_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DHotendMosquito -DHotendE3D + +[env:S5_BLT_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:S5_AC_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito -DHotendE3D + +[env:S5_BLT_AC_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DHotendMosquito -DHotendE3D + +[env:S5_BLT_AC_UBL_ME] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DHotendMosquito -DHotendE3D + +[env:Ender3_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder3 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender3_BLT_SD_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder3 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender3_BLT_Host_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder3 -DBedDC -DABL_BLTOUCH -DMelziHostOnly -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender2_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender2_BLT_SD_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender2_BLT_Host_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder2 -DBedDC -DABL_BLTOUCH -DMelziHostOnly -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender5_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder5 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender5_BLT_SD_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:Ender5_BLT_Host_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineEnder5 -DBedDC -DABL_BLTOUCH -DMelziHostOnly -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10Mini_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineMini -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10Mini_BLT_SD_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineMini -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10MiniBLTHostME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineMini -DBedDC -DABL_BLTOUCH -DMelziHostOnly -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineCR10 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10_BLT_SD_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineCR10 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10_BLT_Host_ME] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineCR10 -DBedDC -DABL_BLTOUCH -DMelziHostOnly -DHotendMosquito -DHotendE3D +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10S_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DCableExtensionNoiseFilter + +[env:CR10S_BLT_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DCableExtensionNoiseFilter + +[env:CR10V2_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DCableExtensionNoiseFilter + +[env:CR10V2_BLT_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DCableExtensionNoiseFilter + +[env:CR10S_BLT_UBL_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito -DCableExtensionNoiseFilter + +[env:CR10V2_UBL_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DHotendMosquito -DCableExtensionNoiseFilter + +[env:CR10V2_BLT_UBL_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito -DCableExtensionNoiseFilter + +[env:S4_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito -DCableExtensionNoiseFilter + +[env:S4_BLT_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DHotendMosquito -DCableExtensionNoiseFilter + +[env:S4_BLT_UBL_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DHotendMosquito -DCableExtensionNoiseFilter + +[env:S4_AC_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito -DCableExtensionNoiseFilter + +[env:S4_BLT_AC_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DHotendMosquito -DCableExtensionNoiseFilter + +[env:S4_BLT_AC_UBL_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DHotendMosquito -DCableExtensionNoiseFilter + +[env:S5_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito -DCableExtensionNoiseFilter + +[env:S5_BLT_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DHotendMosquito -DCableExtensionNoiseFilter + +[env:S5_BLT_UBL_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DHotendMosquito -DCableExtensionNoiseFilter + +[env:S5_AC_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito -DCableExtensionNoiseFilter + +[env:S5_BLT_AC_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DHotendMosquito -DCableExtensionNoiseFilter + +[env:S5_BLT_AC_UBL_MC_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DHotendMosquito -DCableExtensionNoiseFilter + +[env:CR10_MC_NF] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineCR10 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DCableExtensionNoiseFilter +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10_BLT_SD_MC_NF] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineCR10 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DCableExtensionNoiseFilter +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10_BLT_Host_MC_NF] +platform = atmelavr +extends = common_avr8 +board = sanguino_atmega1284p +build_flags = ${common.build_flags} -DMachineCR10 -DBedDC -DABL_BLTOUCH -DMelziHostOnly -DHotendMosquito -DCableExtensionNoiseFilter +lib_ignore = TMCStepper +upload_speed = 57600 + +[env:CR10S_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:CR10S_BLT_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:CR10V2_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:CR10V2_BLT_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:CR10S_BLT_UBL_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:CR10V2_UBL_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DABL_UBL -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:CR10V2_BLT_UBL_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10SV2 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:S4_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:S4_BLT_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:S4_BLT_UBL_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:S4_AC_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:S4_BLT_AC_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:S4_BLT_AC_UBL_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:S5_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:S5_BLT_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:S5_BLT_UBL_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:S5_AC_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:S5_BLT_AC_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:S5_BLT_AC_UBL_ME_NF] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DHotendMosquito -DHotendE3D -DCableExtensionNoiseFilter + +[env:CR20_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DlerdgeFilSensor + +[env:CR20_BLT_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DlerdgeFilSensor + +[env:CR20_BLT_UBL_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DlerdgeFilSensor + +[env:CR20_Pro_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20Pro -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DlerdgeFilSensor + +[env:CR20_Pro_UBL_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR20Pro -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DlerdgeFilSensor + +[env:CR10S_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DlerdgeFilSensor + +[env:CR10S_BLT_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DlerdgeFilSensor + + +[env:S4_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DlerdgeFilSensor + +[env:S4_BLT_UBL_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DlerdgeFilSensor + +[env:S4_BLT_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DlerdgeFilSensor + +[env:S4_AC_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DlerdgeFilSensor + +[env:S4_BLT_AC_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DlerdgeFilSensor + +[env:S4_BLT_AC_UBL_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DlerdgeFilSensor + +[env:S5_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DlerdgeFilSensor + +[env:S5_BLT_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DlerdgeFilSensor + +[env:S5_BLT_UBL_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DlerdgeFilSensor + +[env:S5_AC_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DlerdgeFilSensor + +[env:S5_BLT_AC_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DlerdgeFilSensor + +[env:S5_BLT_AC_UBL_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DlerdgeFilSensor + +[env:CR10S_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DCableExtensionNoiseFilter -DlerdgeFilSensor + +[env:CR10S_BLT_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DCableExtensionNoiseFilter -DlerdgeFilSensor + + +[env:CR10S_BLT_UBL_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineCR10S -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DABL_UBL -DCableExtensionNoiseFilter -DlerdgeFilSensor + + +[env:S4_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DCableExtensionNoiseFilter -DlerdgeFilSensor + +[env:S4_BLT_UBL_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DCableExtensionNoiseFilter -DlerdgeFilSensor + +[env:S4_BLT_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DCableExtensionNoiseFilter -DlerdgeFilSensor + +[env:S4_AC_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DCableExtensionNoiseFilter -DlerdgeFilSensor + +[env:S4_BLT_AC_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DCableExtensionNoiseFilter -DlerdgeFilSensor + +[env:S4_BLT_AC_UBL_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS4 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshFine -DABL_UBL -DCableExtensionNoiseFilter -DlerdgeFilSensor + +[env:S5_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedDC -DPOWER_LOSS_RECOVERY -DMeshFine -DCableExtensionNoiseFilter -DlerdgeFilSensor + +[env:S5_BLT_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DCableExtensionNoiseFilter -DlerdgeFilSensor + +[env:S5_BLT_UBL_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedDC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DCableExtensionNoiseFilter -DlerdgeFilSensor + +[env:S5_AC_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DHotendAllMetal -DBedAC -DPOWER_LOSS_RECOVERY -DMeshFine -DCableExtensionNoiseFilter -DlerdgeFilSensor + +[env:S5_BLT_AC_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DCableExtensionNoiseFilter -DlerdgeFilSensor + +[env:S5_BLT_AC_UBL_NF_LR] +platform = atmelavr +extends = common_avr8 +board = megaatmega2560 +build_flags = ${common.build_flags} -DMachineS5 -DBedAC -DPOWER_LOSS_RECOVERY -DABL_BLTOUCH -DMeshExtreme -DABL_UBL -DCableExtensionNoiseFilter -DlerdgeFilSensor + + + +[env:Ender3V2] +platform = ${common_stm32f1.platform} +extends = common_stm32f1 +board = genericSTM32F103RC +build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py + ${common.build_flags} -std=gnu++14 -DSTM32_XL_DENSITY -DTEMP_TIMER_CHAN=4 -DMachineEnder3V2 +extra_scripts = ${common.extra_scripts} + pre:buildroot/share/PlatformIO/scripts/random-bin.py + buildroot/share/PlatformIO/scripts/creality.py +lib_ignore = ${common_stm32f1.lib_ignore} +debug_tool = jlink +upload_protocol = jlink +monitor_speed = 115200 + +[env:Ender3V2_BLT] +platform = ${common_stm32f1.platform} +extends = common_stm32f1 +board = genericSTM32F103RC +build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py + ${common.build_flags} -std=gnu++14 -DSTM32_XL_DENSITY -DTEMP_TIMER_CHAN=4 -DMachineEnder3V2 -DABL_BLTOUCH +extra_scripts = ${common.extra_scripts} + pre:buildroot/share/PlatformIO/scripts/random-bin.py + buildroot/share/PlatformIO/scripts/creality.py +lib_ignore = ${common_stm32f1.lib_ignore} +debug_tool = jlink +upload_protocol = jlink +monitor_speed = 115200 + +[env:Ender3_422] +platform = ${common_stm32f1.platform} +extends = common_stm32f1 +board = genericSTM32F103RC +build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py + ${common.build_flags} -std=gnu++14 -DSTM32_XL_DENSITY -DTEMP_TIMER_CHAN=4 -DMachineEnder3Pro422 +extra_scripts = ${common.extra_scripts} + pre:buildroot/share/PlatformIO/scripts/random-bin.py + buildroot/share/PlatformIO/scripts/creality.py +lib_ignore = ${common_stm32f1.lib_ignore} +debug_tool = jlink +upload_protocol = jlink +monitor_speed = 115200 + +[env:Ender3_422_BLT] +platform = ${common_stm32f1.platform} +extends = common_stm32f1 +board = genericSTM32F103RC +build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py + ${common.build_flags} -std=gnu++14 -DSTM32_XL_DENSITY -DTEMP_TIMER_CHAN=4 -DMachineEnder3Pro422 -DABL_BLTOUCH +extra_scripts = ${common.extra_scripts} + pre:buildroot/share/PlatformIO/scripts/random-bin.py + buildroot/share/PlatformIO/scripts/creality.py +lib_ignore = ${common_stm32f1.lib_ignore} +debug_tool = jlink +upload_protocol = jlink +monitor_speed = 115200 + +[env:Ender3_427] +platform = ${common_stm32f1.platform} +extends = common_stm32f1 +board = genericSTM32F103RC +build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py + ${common.build_flags} -std=gnu++14 -DSTM32_XL_DENSITY -DTEMP_TIMER_CHAN=4 -DMachineEnder3Pro427 +extra_scripts = ${common.extra_scripts} + pre:buildroot/share/PlatformIO/scripts/random-bin.py + buildroot/share/PlatformIO/scripts/creality.py +lib_ignore = ${common_stm32f1.lib_ignore} +debug_tool = jlink +upload_protocol = jlink +monitor_speed = 115200 + +[env:Ender3_427_BLT] +platform = ${common_stm32f1.platform} +extends = common_stm32f1 +board = genericSTM32F103RC +build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py + ${common.build_flags} -std=gnu++14 -DSTM32_XL_DENSITY -DTEMP_TIMER_CHAN=4 -DMachineEnder3Pro427 -DABL_BLTOUCH +extra_scripts = ${common.extra_scripts} + pre:buildroot/share/PlatformIO/scripts/random-bin.py + buildroot/share/PlatformIO/scripts/creality.py +lib_ignore = ${common_stm32f1.lib_ignore} +debug_tool = jlink +upload_protocol = jlink +monitor_speed = 115200 -# -# ATmega2560 with extended pins 70-85 defined -# BOARD_BQ_ZUM_MEGA_3D -# BOARD_ULTIMAIN_2 -# BOARD_MIGHTYBOARD_REVE -# BOARD_EINSTART_S -# -[env:mega2560ext] -platform = atmelavr -extends = env:mega2560 -board = megaatmega2560 -board_build.variant = megaextendedpins -extra_scripts = ${common.extra_scripts} - pre:buildroot/share/PlatformIO/scripts/copy_marlin_variant_to_framework.py # # ATmega1280 @@ -561,7 +2513,6 @@ build_unflags = -g -ggdb platform = teensy extends = common_avr8 board = at90usb1286 -lib_ignore = ${env:common_avr8.lib_ignore}, Teensy_ADC, NativeEthernet # # AT90USB1286 boards using DFU bootloader @@ -588,17 +2539,18 @@ extends = env:at90usb1286_cdc [env:DUE] platform = atmelsam board = due -src_filter = ${common.default_src_filter} + + +src_filter = ${common.default_src_filter} + [env:DUE_USB] platform = atmelsam -extends = env:DUE board = dueUSB +src_filter = ${common.default_src_filter} + [env:DUE_debug] # Used when WATCHDOG_RESET_MANUAL is enabled platform = atmelsam -extends = env:DUE +board = due +src_filter = ${common.default_src_filter} + build_flags = ${common.build_flags} -funwind-tables -mpoke-function-name @@ -608,11 +2560,10 @@ build_flags = ${common.build_flags} # [common_DUE_archim] platform = atmelsam -extends = env:DUE -board = archim +board = due +src_filter = ${common.default_src_filter} + build_flags = ${common.build_flags} -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__ -DUSBCON -board_build.variants_dir = buildroot/share/PlatformIO/variants/ extra_scripts = ${common.extra_scripts} Marlin/src/HAL/DUE/upload_extra_script.py @@ -644,7 +2595,7 @@ src_filter = ${common.default_src_filter} + lib_deps = ${common.lib_deps} SoftwareSerialM Adafruit SPIFlash -custom_marlin.SDSUPPORT = SdFat - Adafruit Fork + SdFat - Adafruit Fork debug_tool = jlink ################################# @@ -658,17 +2609,16 @@ debug_tool = jlink # [common_LPC] platform = https://github.com/p3p/pio-nxplpc-arduino-lpc176x/archive/0.1.3.zip -platform_packages = framework-arduino-lpc176x@^0.2.5 board = nxp_lpc1768 lib_ldf_mode = off lib_compat_mode = strict extra_scripts = ${common.extra_scripts} Marlin/src/HAL/LPC1768/upload_extra_script.py -src_filter = ${common.default_src_filter} + + +src_filter = ${common.default_src_filter} + lib_deps = ${common.lib_deps} Servo -custom_marlin.USES_LIQUIDCRYSTAL = LiquidCrystal@1.0.0 -custom_marlin.NEOPIXEL_LED = Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/1.5.0.zip + LiquidCrystal@1.0.0 + Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/1.5.0.zip build_flags = ${common.build_flags} -DU8G_HAL_LINKS -IMarlin/src/HAL/LPC1768/include -IMarlin/src/HAL/LPC1768/u8g # debug options for backtrace #-funwind-tables @@ -697,26 +2647,29 @@ board = nxp_lpc1769 # HAL/STM32 Base Environment values # [common_stm32] -platform = ststm32@~8.0 +platform = ststm32@~6.1.0 +platform_packages = framework-arduinoststm32@>=4.10700,<4.10800 +lib_ignore = SoftwareSerial build_flags = ${common.build_flags} - -std=gnu++14 + -IMarlin/src/HAL/STM32 -std=gnu++14 -DUSBCON -DUSBD_USE_CDC + -DUSBD_VID=0x0483 -DTIM_IRQ_PRIO=13 build_unflags = -std=gnu++11 -src_filter = ${common.default_src_filter} + + +src_filter = ${common.default_src_filter} + # # HAL/STM32F1 Common Environment values # [common_stm32f1] -platform = ststm32@~6.1 +platform = ${common_stm32.platform} build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py ${common.build_flags} -std=gnu++14 -DHAVE_SW_SERIAL build_unflags = -std=gnu11 -std=gnu++11 src_filter = ${common.default_src_filter} + lib_ignore = SPI lib_deps = ${common.lib_deps} - SoftwareSerialM + #SoftwareSerialM # # STM32F103RC @@ -748,9 +2701,9 @@ extra_scripts = ${common.extra_scripts} pre:buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py lib_deps = ${common.lib_deps} + Adafruit NeoPixel=https://github.com/ccccmagicboy/Adafruit_NeoPixel#meeb_3dp_use SoftwareSerialM USBComposite for STM32F1@0.91 -custom_marlin.NEOPIXEL_LED = Adafruit NeoPixel=https://github.com/ccccmagicboy/Adafruit_NeoPixel#meeb_3dp_use debug_tool = stlink upload_protocol = dfu @@ -775,11 +2728,6 @@ upload_protocol = serial # STM32F103RC_btt_512K ........ RCT6 with 512K # STM32F103RC_btt_512K_USB .... RCT6 with 512K (USB mass storage) # -# WARNING! If you have an SKR Mini v1.1 or an SKR Mini E3 1.0 / 1.2 / 2.0 / DIP -# and experience a printer freeze, re-flash Marlin using the regular (non-512K) -# build option. 256K chips may be re-branded 512K chips, but this means the -# upper 256K is sketchy, and failure is very likely. -# [env:STM32F103RC_btt] platform = ${common_stm32f1.platform} @@ -858,17 +2806,6 @@ board = remram_v1 build_flags = ${common.build_flags} -DUSE_STM32GENERIC -DSTM32GENERIC -DSTM32F7 -DMENU_USB_SERIAL -DMENU_SERIAL=SerialUSB -DHAL_IWDG_MODULE_ENABLED src_filter = ${common.default_src_filter} + - -# -# ST NUCLEO-F767ZI Development Board -# This environment is for testing purposes prior to control boards -# being readily available based on STM32F7 MCUs -# -[env:NUCLEO_F767ZI] -platform = ${common_stm32.platform} -extends = common_stm32 -board = nucleo_f767zi -build_flags = ${common_stm32.build_flags} -DTIMER_SERIAL=TIM9 - # # ARMED (STM32) # @@ -877,6 +2814,7 @@ platform = ${common_stm32.platform} extends = common_stm32 board = armed_v1 build_flags = ${common_stm32.build_flags} + '-DUSB_PRODUCT="ARMED_V1"' -O2 -ffreestanding -fsigned-char -fno-move-loop-invariants -fno-strict-aliasing # @@ -922,6 +2860,8 @@ build_flags = ${common_stm32f1.build_flags} # # MKS Robin Nano (STM32F103VET6) +# v1.2 - Emulated Graphical 128x64 (DOGM) UI and LVGL UI +# v2.0 - LVGL UI # [env:mks_robin_nano35] platform = ${common_stm32f1.platform} @@ -930,6 +2870,7 @@ board = genericSTM32F103VE platform_packages = tool-stm32duino extra_scripts = ${common.extra_scripts} buildroot/share/PlatformIO/scripts/mks_robin_nano35.py +lib_deps = ${common_stm32f1.lib_deps} build_flags = ${common_stm32f1.build_flags} -DMCU_STM32F103VE -DSS_TIMER=4 debug_tool = jlink @@ -978,13 +2919,13 @@ extends = env:mks_robin extra_scripts = ${common.extra_scripts} buildroot/share/PlatformIO/scripts/mks_robin_pro.py + # # TRIGORILLA PRO (STM32F103ZET6) # [env:trigorilla_pro] platform = ${common_stm32f1.platform} extends = env:mks_robin -extra_scripts = ${common.extra_scripts} # # MKS Robin E3D (STM32F103RCT6) and @@ -1000,22 +2941,6 @@ extra_scripts = ${common.extra_scripts} build_flags = ${common_stm32f1.build_flags} -DDEBUG_LEVEL=0 -DSS_TIMER=4 -# -# MKS Robin E3p (STM32F103VET6) -# - LVGL UI -# -[env:mks_robin_e3p] -platform = ${common_stm32f1.platform} -extends = common_stm32f1 -board = genericSTM32F103VE -platform_packages = tool-stm32duino -extra_scripts = ${common.extra_scripts} - buildroot/share/PlatformIO/scripts/mks_robin_e3p.py -build_flags = ${common_stm32f1.build_flags} - -DMCU_STM32F103VE -DSS_TIMER=4 -debug_tool = jlink -upload_protocol = jlink - # # MKS Robin Lite/Lite2 (STM32F103RCT6) # @@ -1026,6 +2951,7 @@ board = genericSTM32F103RC extra_scripts = ${common.extra_scripts} buildroot/share/PlatformIO/scripts/mks_robin_lite.py + # # MKS ROBIN LITE3 (STM32F103RCT6) # @@ -1068,29 +2994,20 @@ lib_ignore = ${common_stm32f1.lib_ignore} platform = ${common_stm32.platform} extends = common_stm32 board = malyanM200v2 -build_flags = ${common_stm32.build_flags} -DHAL_PCD_MODULE_ENABLED - -O2 -ffreestanding -fsigned-char -fno-move-loop-invariants -fno-strict-aliasing +build_flags = ${common_stm32.build_flags} -DSTM32F0xx -DUSB_PRODUCT=\"STM32F070RB\" -DHAL_PCD_MODULE_ENABLED + -O2 -ffreestanding -fsigned-char -fno-move-loop-invariants -fno-strict-aliasing -std=gnu11 -std=gnu++11 -DCUSTOM_STARTUP_FILE - -# -# Malyan M200 v2 (STM32F070CB) -# -[env:STM32F070CB_malyan] -platform = ${common_stm32.platform} -extends = common_stm32 -board = malyanm200_f070cb -build_flags = ${common_stm32.build_flags} - -DHAL_PCD_MODULE_ENABLED -DDISABLE_GENERIC_SERIALUSB -DHAL_UART_MODULE_ENABLED -DCUSTOM_STARTUP_FILE +lib_ignore = SoftwareSerial # # Malyan M300 (STM32F070CB) # [env:malyan_M300] -platform = ${common_stm32.platform} -extends = common_stm32 +platform = ststm32@>=6.1.0,<6.2.0 board = malyanm300_f070cb -build_flags = ${common_stm32.build_flags} - -DHAL_PCD_MODULE_ENABLED -DDISABLE_GENERIC_SERIALUSB -DHAL_UART_MODULE_ENABLED +build_flags = ${common.build_flags} + -DUSBCON -DUSBD_VID=0x0483 "-DUSB_MANUFACTURER=\"Unknown\"" "-DUSB_PRODUCT=\"MALYAN_M300\"" + -DHAL_PCD_MODULE_ENABLED -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB -DHAL_UART_MODULE_ENABLED src_filter = ${common.default_src_filter} + # @@ -1123,7 +3040,7 @@ build_flags = ${env:chitu_f103.build_flags} -DCHITU_V5_Z_MIN_BUGFIX [env:STM32F103RET6_creality] platform = ${common_stm32f1.platform} extends = common_stm32f1 -board = genericSTM32F103RE +board = genericSTM32F103RC build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py ${common.build_flags} -std=gnu++14 -DSTM32_XL_DENSITY -DTEMP_TIMER_CHAN=4 extra_scripts = ${common.extra_scripts} @@ -1134,21 +3051,6 @@ debug_tool = jlink upload_protocol = jlink monitor_speed = 115200 -# -# FLSUN QQ (STM32F103VET6) -# -[env:flsun_hispeed] -platform = ${common_stm32f1.platform} -extends = common_stm32f1 -board = genericSTM32F103VE -platform_packages = tool-stm32duino -extra_scripts = ${common.extra_scripts} - buildroot/share/PlatformIO/scripts/mks_robin_mini.py - buildroot/share/PlatformIO/scripts/add_nanolib.py -build_flags = ${common_stm32f1.build_flags} -DMCU_STM32F103VE -DSS_TIMER=4 -lib_deps = SoftwareSerialM - #Adafruit NeoPixel=https://github.com/Foxies-CSTL/Robin-NeoPixel-Lib/archive/master.zip - # # STM32F401VE # 'STEVAL-3DP001V1' STM32F401VE board - https://www.st.com/en/evaluation-tools/steval-3dp001v1.html @@ -1158,11 +3060,13 @@ platform = ${common_stm32.platform} extends = common_stm32 board = STEVAL_STM32F401VE build_flags = ${common_stm32.build_flags} - -DARDUINO_STEVAL -DSTM32F401xE + -DTARGET_STM32F4 -DARDUINO_STEVAL -DSTM32F401xE + -DUSB_PRODUCT=\"STEVAL_F401VE\" -DDISABLE_GENERIC_SERIALUSB -DUSBD_USE_CDC_COMPOSITE -DUSE_USB_FS extra_scripts = ${common.extra_scripts} pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py buildroot/share/PlatformIO/scripts/STEVAL__F401XX.py +lib_ignore = SoftwareSerial # # FLYF407ZG @@ -1172,36 +3076,25 @@ platform = ${common_stm32.platform} extends = common_stm32 board = FLYF407ZG build_flags = ${common_stm32.build_flags} - -DVECT_TAB_OFFSET=0x8000 + -DSTM32F4 -DUSB_PRODUCT=\"STM32F407ZG\" + -DTARGET_STM32F4 -DVECT_TAB_OFFSET=0x8000 extra_scripts = ${common.extra_scripts} pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py -# -# FLY MINI(stm32f103rct6) -# -[env:FLY_MINI] -platform = ${common_stm32f1.platform} -extends = common_stm32f1 -board = genericSTM32F103RC -platform_packages = tool-stm32duino -extra_scripts = ${common.extra_scripts} - buildroot/share/PlatformIO/scripts/fly_mini.py -build_flags = ${common_stm32f1.build_flags} - -DDEBUG_LEVEL=0 -DSS_TIMER=4 - # # FYSETC S6 (STM32F446VET6 ARM Cortex-M4) # [env:FYSETC_S6] platform = ${common_stm32.platform} extends = common_stm32 -platform_packages = tool-stm32duino -board = marlin_fysetc_s6 +platform_packages = ${common_stm32.platform_packages} + tool-stm32duino +board = fysetc_s6 build_flags = ${common_stm32.build_flags} - -DVECT_TAB_OFFSET=0x10000 - -DHAL_PCD_MODULE_ENABLED + -DTARGET_STM32F4 -DVECT_TAB_OFFSET=0x10000 + -DHAL_PCD_MODULE_ENABLED '-DUSB_PRODUCT="FYSETC_S6"' extra_scripts = ${common.extra_scripts} - pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py + pre:buildroot/share/PlatformIO/scripts/fysetc_STM32S6.py debug_tool = stlink upload_protocol = dfu upload_command = dfu-util -a 0 -s 0x08010000:leave -D "$SOURCE" @@ -1216,10 +3109,12 @@ platform = ${common_stm32.platform} extends = common_stm32 board = blackSTM32F407VET6 build_flags = ${common_stm32.build_flags} - -DARDUINO_BLACK_F407VE + -DTARGET_STM32F4 -DARDUINO_BLACK_F407VE + -DUSB_PRODUCT=\"BLACK_F407VE\" -DUSBD_USE_CDC_COMPOSITE -DUSE_USB_FS extra_scripts = ${common.extra_scripts} pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py +lib_ignore = SoftwareSerial # # BigTreeTech SKR Pro (STM32F407ZGT6 ARM Cortex-M4) @@ -1229,7 +3124,8 @@ platform = ${common_stm32.platform} extends = common_stm32 board = BigTree_SKR_Pro build_flags = ${common_stm32.build_flags} - -DSTM32F407_5ZX -DVECT_TAB_OFFSET=0x8000 + -DUSB_PRODUCT=\"STM32F407ZG\" + -DTARGET_STM32F4 -DSTM32F407_5ZX -DVECT_TAB_OFFSET=0x8000 extra_scripts = ${common.extra_scripts} pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py #upload_protocol = stlink @@ -1241,13 +3137,14 @@ debug_init_break = # Bigtreetech GTR V1.0 (STM32F407IGT6 ARM Cortex-M4) # [env:BIGTREE_GTR_V1_0] -platform = ${common_stm32.platform} +platform = ststm32@>=5.7.0,<6.2.0 extends = common_stm32 board = BigTree_GTR_v1 extra_scripts = ${common.extra_scripts} pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py build_flags = ${common_stm32.build_flags} - -DSTM32F407IX -DVECT_TAB_OFFSET=0x8000 + -DUSB_PRODUCT=\"STM32F407IG\" + -DTARGET_STM32F4 -DSTM32F407IX -DVECT_TAB_OFFSET=0x8000 # # BigTreeTech BTT002 V1.0 (STM32F407VGT6 ARM Cortex-M4) @@ -1257,7 +3154,8 @@ platform = ${common_stm32.platform} extends = common_stm32 board = BigTree_Btt002 build_flags = ${common_stm32.build_flags} - -DSTM32F407_5VX -DVECT_TAB_OFFSET=0x8000 + -DUSB_PRODUCT=\"STM32F407VG\" + -DTARGET_STM32F4 -DSTM32F407_5VX -DVECT_TAB_OFFSET=0x8000 -DHAVE_HWSERIAL2 -DHAVE_HWSERIAL3 -DPIN_SERIAL2_RX=PD_6 @@ -1310,39 +3208,17 @@ build_flags = ${lerdge_common.build_flags} # RUMBA32 # [env:rumba32] -platform = ${common_stm32.platform} -extends = common_stm32 -build_flags = ${common_stm32.build_flags} +platform = ${common_stm32.platform} +extends = common_stm32 +build_flags = ${common_stm32.build_flags} -Os + "-DUSB_PRODUCT=\"RUMBA32\"" -DHAL_PCD_MODULE_ENABLED -DDISABLE_GENERIC_SERIALUSB -DHAL_UART_MODULE_ENABLED - -DTIMER_SERIAL=TIM9 -board = rumba32_f446ve +board = rumba32_f446ve upload_protocol = dfu -monitor_speed = 500000 - -# -# MKS Robin Nano V1.2 and V2 using hal STM32 -# -[env:mks_robin_nano35_stm32] -platform = ${common_stm32.platform} -extends = common_stm32 -build_flags = ${common_stm32.build_flags} -DMCU_STM32F103VE -DSS_TIMER=4 -DENABLE_HWSERIAL3 -DTRANSFER_CLOCK_DIV=8 -board = genericSTM32F103VE -board_build.core = stm32 -board_build.variant = MARLIN_F103Vx -board_build.ldscript = ldscript.ld -board_build.offset = 0x7000 -board_build.firmware = Robin_nano35.bin -board_upload.offset_address = 0x08007000 -build_unflags = ${common_stm32.build_unflags} -DUSBCON -DUSBD_USE_CDC -debug_tool = jlink -upload_protocol = jlink -extra_scripts = ${common.extra_scripts} - pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py - buildroot/share/PlatformIO/scripts/stm32_bootloader.py - buildroot/share/PlatformIO/scripts/mks_encrypt.py +monitor_speed = 500000 ################################# # # @@ -1358,7 +3234,6 @@ platform = espressif32@1.11.2 board = esp32dev build_flags = ${common.build_flags} -DCORE_DEBUG_LEVEL=0 src_filter = ${common.default_src_filter} + -lib_ignore = NativeEthernet upload_speed = 115200 #upload_port = marlinesp.local #board_build.flash_mode = qio @@ -1370,7 +3245,6 @@ upload_speed = 115200 platform = teensy board = teensy31 src_filter = ${common.default_src_filter} + -lib_ignore = NativeEthernet # # Teensy 3.5 / 3.6 (ARM Cortex-M4) @@ -1379,21 +3253,6 @@ lib_ignore = NativeEthernet platform = teensy board = teensy35 src_filter = ${common.default_src_filter} + -lib_ignore = NativeEthernet - -[env:teensy36] -platform = teensy -board = teensy36 -src_filter = ${common.default_src_filter} + -lib_ignore = NativeEthernet - -# -# Teensy 4.0 / 4.1 (ARM Cortex-M7) -# -[env:teensy41] -platform = teensy -board = teensy41 -src_filter = ${common.default_src_filter} + # # Native