Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix Chiron new TFT SD print after reset #23855

Merged
merged 14 commits into from
Mar 12, 2022
6 changes: 4 additions & 2 deletions Marlin/src/gcode/bedlevel/mbl/G29.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,11 @@ void GcodeSuite::G29() {
// For each G29 S2...
if (mbl_probe_index == 0) {
// Move close to the bed before the first point
do_blocking_move_to_z(0.4f
do_blocking_move_to_z(
#ifdef MANUAL_PROBE_START_Z
+ (MANUAL_PROBE_START_Z) - 0.4f
MANUAL_PROBE_START_Z
#else
0.4f
#endif
);
}
Expand Down
4 changes: 2 additions & 2 deletions Marlin/src/lcd/extui/anycubic_chiron/FileNavigator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ void FileNavigator::skiptofileindex(uint16_t skip) {

if (currentindex == 0 && currentfolderdepth > 0) { // Add a link to go up a folder
// The new panel ignores entries that don't end in .GCO or .gcode so add and pad them.
if (paneltype == AC_panel_new) {
if (paneltype <= AC_panel_new) {
TFTSer.println("<<.GCO");
Chiron.SendtoTFTLN(F(".. .gcode"));
}
Expand All @@ -177,7 +177,7 @@ void FileNavigator::skiptofileindex(uint16_t skip) {
void FileNavigator::sendFile(panel_type_t paneltype) {
if (filelist.isDir()) {
// Add mandatory tags for new panel otherwise lines are ignored.
if (paneltype == AC_panel_new) {
if (paneltype <= AC_panel_new) {
TFTSer.print(filelist.shortFilename());
TFTSer.println(".GCO");
TFTSer.print(filelist.shortFilename());
Expand Down
30 changes: 16 additions & 14 deletions Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,7 @@ void ChironTFT::SendFileList(int8_t startindex) {
}

void ChironTFT::SelectFile() {
if (panel_type == AC_panel_new) {
if (panel_type <= AC_panel_new) {
strncpy(selectedfile, panel_command + 4, command_len - 3);
selectedfile[command_len - 4] = '\0';
}
Expand All @@ -465,7 +465,7 @@ void ChironTFT::SelectFile() {
break;
default: // enter sub folder
// for new panel remove the '.GCO' tag that was added to the end of the path
if (panel_type == AC_panel_new)
if (panel_type <= AC_panel_new)
selectedfile[strlen(selectedfile) - 4] = '\0';
filenavigator.changeDIR(selectedfile);
SendtoTFTLN(AC_msg_sd_file_open_failed);
Expand All @@ -478,8 +478,8 @@ void ChironTFT::ProcessPanelRequest() {
// Break these up into logical blocks // as its easier to navigate than one huge switch case!
int8_t tpos = FindToken('A');
// Panel request are 'A0' - 'A36'
if (tpos != -1) {
const int8_t req = atoi(&panel_command[tpos+1]);
if (tpos >= 0) {
const int8_t req = atoi(&panel_command[tpos + 1]);

// Information requests A0 - A8 and A33
if (req <= 8 || req == 33) PanelInfo(req);
Expand All @@ -495,16 +495,18 @@ void ChironTFT::ProcessPanelRequest() {
// This may be a response to a panel type detection query
if (panel_type == AC_panel_unknown) {
tpos = FindToken('S'); // old panel will respond to 'SIZE' with 'SXY 480 320'
if (tpos != -1) {
if (panel_command[tpos+1]== 'X' && panel_command[tpos+2]=='Y') {
if (tpos >= 0) {
if (panel_command[tpos + 1] == 'X' && panel_command[tpos + 2] =='Y') {
panel_type = AC_panel_standard;
SERIAL_ECHOLNF(AC_msg_old_panel_detected);
}
}
else {
tpos = FindToken('['); // new panel will respond to 'J200' with '[0]=0'
if (tpos != -1) {
if (panel_command[tpos+1]== '0' && panel_command[tpos+2]==']') {
// new panel will respond to 'J200' with '[0]=0'
// it seems only after a power cycle so detection assumes a new panel
tpos = FindToken('[');
if (tpos >= 0) {
if (panel_command[tpos + 1] == '0' && panel_command[tpos + 2] ==']') {
panel_type = AC_panel_new;
SERIAL_ECHOLNF(AC_msg_new_panel_detected);
}
Expand Down Expand Up @@ -811,7 +813,7 @@ void ChironTFT::PanelProcess(uint8_t req) {
} break;

case 30: // A30 Auto leveling
if (FindToken('S') != -1) { // Start probing New panel adds spaces..
if (FindToken('S') >= 0) { // Start probing New panel adds spaces..
// Ignore request if printing
if (isPrinting())
SendtoTFTLN(AC_msg_probing_not_allowed); // forbid auto leveling
Expand All @@ -828,15 +830,15 @@ void ChironTFT::PanelProcess(uint8_t req) {
case 31: // A31 Adjust all Probe Points
// The tokens can occur in different places on the new panel so we need to find it.

if (FindToken('C') != -1) { // Restore and apply original offsets
if (FindToken('C') >= 0) { // Restore and apply original offsets
if (!isPrinting()) {
injectCommands(F("M501\nM420 S1"));
selectedmeshpoint.x = selectedmeshpoint.y = 99;
SERIAL_ECHOLNF(AC_msg_mesh_changes_abandoned);
}
}

else if (FindToken('D') != -1) { // Save Z Offset tables and restore leveling state
else if (FindToken('D') >= 0) { // Save Z Offset tables and restore leveling state
if (!isPrinting()) {
setAxisPosition_mm(1.0,Z); // Lift nozzle before any further movements are made
injectCommands(F("M500"));
Expand All @@ -845,7 +847,7 @@ void ChironTFT::PanelProcess(uint8_t req) {
}
}

else if (FindToken('G') != -1) { // Get current offset
else if (FindToken('G') >= 0) { // Get current offset
SendtoTFT(F("A31V "));
// When printing use the live z Offset position
// we will use babystepping to move the print head
Expand All @@ -859,7 +861,7 @@ void ChironTFT::PanelProcess(uint8_t req) {

else {
int8_t tokenpos = FindToken('S');
if (tokenpos != -1) { // Set offset (adjusts all points by value)
if (tokenpos >= 0) { // Set offset (adjusts all points by value)
float Zshift = atof(&panel_command[tokenpos+1]);
setSoftEndstopState(false); // disable endstops
// Allow temporary Z position nudging during print
Expand Down
10 changes: 7 additions & 3 deletions Marlin/src/lcd/extui/anycubic_chiron/chiron_tft_defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,10 @@
#define AC_msg_mesh_changes_saved F("Mesh changes saved.")
#define AC_msg_old_panel_detected F("Standard TFT panel detected!")
#define AC_msg_new_panel_detected F("New TFT panel detected!")
#define AC_msg_auto_panel_detection F("Auto detect panel type (assuming new panel)")
#define AC_msg_old_panel_set F("Set for standard TFT panel.")
#define AC_msg_new_panel_set F("Set for new TFT panel.")

#define AC_msg_powerloss_recovery F("Resuming from power outage! select the same SD file then press resume")
// Error messages must not contain spaces
#define AC_msg_error_bed_temp F("Abnormal_bed_temp")
Expand Down Expand Up @@ -161,10 +165,10 @@ namespace Anycubic {
AC_menu_change_to_file,
AC_menu_change_to_command
};
enum panel_type_t : uint8_t {
enum panel_type_t : uint8_t { // order is important here as we assume new panel if type is unknown
AC_panel_unknown,
AC_panel_standard,
AC_panel_new
AC_panel_new,
AC_panel_standard
};
enum last_error_t : uint8_t {
AC_error_none,
Expand Down