| 46 | */ |
| 47 | |
| 48 | void GcodeSuite::M303() { |
| 49 | |
| 50 | #if HAS_PID_DEBUG |
| 51 | if (parser.seen_test('D')) { |
| 52 | FLIP(thermalManager.pid_debug_flag); |
| 53 | SERIAL_ECHO_MSG("PID Debug ", ON_OFF(thermalManager.pid_debug_flag)); |
| 54 | return; |
| 55 | } |
| 56 | #endif |
| 57 | |
| 58 | const heater_id_t hid = (heater_id_t)parser.intval('E'); |
| 59 | celsius_t default_temp; |
| 60 | switch (hid) { |
| 61 | OPTCODE(PIDTEMP, case 0 ... HOTENDS - 1: default_temp = PREHEAT_1_TEMP_HOTEND; break) |
| 62 | OPTCODE(PIDTEMPBED, case H_BED: default_temp = PREHEAT_1_TEMP_BED; break) |
| 63 | OPTCODE(PIDTEMPCHAMBER, case H_CHAMBER: default_temp = PREHEAT_1_TEMP_CHAMBER; break) |
| 64 | default: |
| 65 | SERIAL_ECHOPGM(STR_PID_AUTOTUNE); |
| 66 | SERIAL_ECHOLNPGM(STR_PID_BAD_HEATER_ID); |
| 67 | TERN_(EXTENSIBLE_UI, ExtUI::onPIDTuning(ExtUI::pidresult_t::PID_BAD_HEATER_ID)); |
| 68 | return; |
| 69 | } |
| 70 | |
| 71 | const bool seenC = parser.seenval('C'); |
| 72 | const int c = seenC ? parser.value_int() : 5; |
| 73 | const bool seenS = parser.seenval('S'); |
| 74 | const celsius_t temp = seenS ? parser.value_celsius() : default_temp; |
| 75 | const bool u = parser.boolval('U'); |
| 76 | |
| 77 | TERN_(EXTENSIBLE_UI, ExtUI::onStartM303(c, hid, temp)); |
| 78 | |
| 79 | IF_DISABLED(BUSY_WHILE_HEATING, KEEPALIVE_STATE(NOT_BUSY)); |
| 80 | |
| 81 | LCD_MESSAGE(MSG_PID_AUTOTUNE); |
| 82 | thermalManager.PID_autotune(temp, hid, c, u); |
| 83 | ui.reset_status(); |
| 84 | |
| 85 | queue.flush_rx(); |
| 86 | } |
| 87 | |
| 88 | #endif // HAS_PID_HEATING |
nothing calls this directly
no test coverage detected