- Probe index (optional - defaults to 0
- */
- inline void gcode_M43() {
-
- if (parser.seen('T')) { // must be first or else its "S" and "E" parameters will execute endstop or servo test
- toggle_pins();
- return;
- }
-
- // Enable or disable endstop monitoring
- if (parser.seen('E')) {
- endstop_monitor_flag = parser.value_bool();
- SERIAL_PROTOCOLPGM("endstop monitor ");
- serialprintPGM(endstop_monitor_flag ? PSTR("en") : PSTR("dis"));
- SERIAL_PROTOCOLLNPGM("abled");
- return;
- }
-
- if (parser.seen('S')) {
- servo_probe_test();
- return;
- }
-
- // Get the range of pins to test or watch
- const pin_t first_pin = parser.byteval('P'),
- last_pin = parser.seenval('P') ? first_pin : NUM_DIGITAL_PINS - 1;
-
- if (first_pin > last_pin) return;
-
- const bool ignore_protection = parser.boolval('I');
-
- // Watch until click, M108, or reset
- if (parser.boolval('W')) {
- SERIAL_PROTOCOLLNPGM("Watching pins");
- byte pin_state[last_pin - first_pin + 1];
- for (pin_t pin = first_pin; pin <= last_pin; pin++) {
- if (pin_is_protected(pin) && !ignore_protection) continue;
- pinMode(pin, INPUT_PULLUP);
- delay(1);
- /*
- if (IS_ANALOG(pin))
- pin_state[pin - first_pin] = analogRead(pin - analogInputToDigitalPin(0)); // int16_t pin_state[...]
- else
- //*/
- pin_state[pin - first_pin] = digitalRead(pin);
- }
-
- #if HAS_RESUME_CONTINUE
- wait_for_user = true;
- KEEPALIVE_STATE(PAUSED_FOR_USER);
- #endif
-
- for (;;) {
- for (pin_t pin = first_pin; pin <= last_pin; pin++) {
- if (pin_is_protected(pin) && !ignore_protection) continue;
- const byte val =
- /*
- IS_ANALOG(pin)
- ? analogRead(pin - analogInputToDigitalPin(0)) : // int16_t val
- :
- //*/
- digitalRead(pin);
- if (val != pin_state[pin - first_pin]) {
- report_pin_state_extended(pin, ignore_protection, false);
- pin_state[pin - first_pin] = val;
- }
- }
-
- #if HAS_RESUME_CONTINUE
- if (!wait_for_user) {
- KEEPALIVE_STATE(IN_HANDLER);
- break;
- }
- #endif
-
- safe_delay(200);
- }
- return;
- }
-
- // Report current state of selected pin(s)
- for (pin_t pin = first_pin; pin <= last_pin; pin++)
- report_pin_state_extended(pin, ignore_protection, true);
- }
-
-#endif // PINS_DEBUGGING
-
-#if ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST)
-
- /**
- * M48: Z probe repeatability measurement function.
- *
- * Usage:
- * M48
- * P = Number of sampled points (4-50, default 10)
- * X = Sample X position
- * Y = Sample Y position
- * V = Verbose level (0-4, default=1)
- * E = Engage Z probe for each reading
- * L = Number of legs of movement before probe
- * S = Schizoid (Or Star if you prefer)
- *
- * This function requires the machine to be homed before invocation.
- */
- inline void gcode_M48() {
-
- if (axis_unhomed_error()) return;
-
- const int8_t verbose_level = parser.byteval('V', 1);
- if (!WITHIN(verbose_level, 0, 4)) {
- SERIAL_PROTOCOLLNPGM("?(V)erbose level is implausible (0-4).");
- return;
- }
-
- if (verbose_level > 0)
- SERIAL_PROTOCOLLNPGM("M48 Z-Probe Repeatability Test");
-
- const int8_t n_samples = parser.byteval('P', 10);
- if (!WITHIN(n_samples, 4, 50)) {
- SERIAL_PROTOCOLLNPGM("?Sample size not plausible (4-50).");
- return;
- }
-
- const ProbePtRaise raise_after = parser.boolval('E') ? PROBE_PT_STOW : PROBE_PT_RAISE;
-
- float X_current = current_position[X_AXIS],
- Y_current = current_position[Y_AXIS];
-
- const float X_probe_location = parser.linearval('X', X_current + X_PROBE_OFFSET_FROM_EXTRUDER),
- Y_probe_location = parser.linearval('Y', Y_current + Y_PROBE_OFFSET_FROM_EXTRUDER);
-
- if (!position_is_reachable_by_probe(X_probe_location, Y_probe_location)) {
- SERIAL_PROTOCOLLNPGM("? (X,Y) out of bounds.");
- return;
- }
-
- bool seen_L = parser.seen('L');
- uint8_t n_legs = seen_L ? parser.value_byte() : 0;
- if (n_legs > 15) {
- SERIAL_PROTOCOLLNPGM("?Number of legs in movement not plausible (0-15).");
- return;
- }
- if (n_legs == 1) n_legs = 2;
-
- const bool schizoid_flag = parser.boolval('S');
- if (schizoid_flag && !seen_L) n_legs = 7;
-
- /**
- * Now get everything to the specified probe point So we can safely do a
- * probe to get us close to the bed. If the Z-Axis is far from the bed,
- * we don't want to use that as a starting point for each probe.
- */
- if (verbose_level > 2)
- SERIAL_PROTOCOLLNPGM("Positioning the probe...");
-
- // Disable bed level correction in M48 because we want the raw data when we probe
-
- #if HAS_LEVELING
- const bool was_enabled = planner.leveling_active;
- set_bed_leveling_enabled(false);
- #endif
-
- setup_for_endstop_or_probe_move();
-
- double mean = 0.0, sigma = 0.0, min = 99999.9, max = -99999.9, sample_set[n_samples];
-
- // Move to the first point, deploy, and probe
- const float t = probe_pt(X_probe_location, Y_probe_location, raise_after, verbose_level);
- bool probing_good = !isnan(t);
-
- if (probing_good) {
- randomSeed(millis());
-
- for (uint8_t n = 0; n < n_samples; n++) {
- if (n_legs) {
- const int dir = (random(0, 10) > 5.0) ? -1 : 1; // clockwise or counter clockwise
- float angle = random(0.0, 360.0);
- const float radius = random(
- #if ENABLED(DELTA)
- 0.1250000000 * (DELTA_PRINTABLE_RADIUS),
- 0.3333333333 * (DELTA_PRINTABLE_RADIUS)
- #else
- 5.0, 0.125 * min(X_BED_SIZE, Y_BED_SIZE)
- #endif
- );
-
- if (verbose_level > 3) {
- SERIAL_ECHOPAIR("Starting radius: ", radius);
- SERIAL_ECHOPAIR(" angle: ", angle);
- SERIAL_ECHOPGM(" Direction: ");
- if (dir > 0) SERIAL_ECHOPGM("Counter-");
- SERIAL_ECHOLNPGM("Clockwise");
- }
-
- for (uint8_t l = 0; l < n_legs - 1; l++) {
- double delta_angle;
-
- if (schizoid_flag)
- // The points of a 5 point star are 72 degrees apart. We need to
- // skip a point and go to the next one on the star.
- delta_angle = dir * 2.0 * 72.0;
-
- else
- // If we do this line, we are just trying to move further
- // around the circle.
- delta_angle = dir * (float) random(25, 45);
-
- angle += delta_angle;
-
- while (angle > 360.0) // We probably do not need to keep the angle between 0 and 2*PI, but the
- angle -= 360.0; // Arduino documentation says the trig functions should not be given values
- while (angle < 0.0) // outside of this range. It looks like they behave correctly with
- angle += 360.0; // numbers outside of the range, but just to be safe we clamp them.
-
- X_current = X_probe_location - (X_PROBE_OFFSET_FROM_EXTRUDER) + cos(RADIANS(angle)) * radius;
- Y_current = Y_probe_location - (Y_PROBE_OFFSET_FROM_EXTRUDER) + sin(RADIANS(angle)) * radius;
-
- #if DISABLED(DELTA)
- X_current = constrain(X_current, X_MIN_POS, X_MAX_POS);
- Y_current = constrain(Y_current, Y_MIN_POS, Y_MAX_POS);
- #else
- // If we have gone out too far, we can do a simple fix and scale the numbers
- // back in closer to the origin.
- while (!position_is_reachable_by_probe(X_current, Y_current)) {
- X_current *= 0.8;
- Y_current *= 0.8;
- if (verbose_level > 3) {
- SERIAL_ECHOPAIR("Pulling point towards center:", X_current);
- SERIAL_ECHOLNPAIR(", ", Y_current);
- }
- }
- #endif
- if (verbose_level > 3) {
- SERIAL_PROTOCOLPGM("Going to:");
- SERIAL_ECHOPAIR(" X", X_current);
- SERIAL_ECHOPAIR(" Y", Y_current);
- SERIAL_ECHOLNPAIR(" Z", current_position[Z_AXIS]);
- }
- do_blocking_move_to_xy(X_current, Y_current);
- } // n_legs loop
- } // n_legs
-
- // Probe a single point
- sample_set[n] = probe_pt(X_probe_location, Y_probe_location, raise_after);
-
- // Break the loop if the probe fails
- probing_good = !isnan(sample_set[n]);
- if (!probing_good) break;
-
- /**
- * Get the current mean for the data points we have so far
- */
- double sum = 0.0;
- for (uint8_t j = 0; j <= n; j++) sum += sample_set[j];
- mean = sum / (n + 1);
-
- NOMORE(min, sample_set[n]);
- NOLESS(max, sample_set[n]);
-
- /**
- * Now, use that mean to calculate the standard deviation for the
- * data points we have so far
- */
- sum = 0.0;
- for (uint8_t j = 0; j <= n; j++)
- sum += sq(sample_set[j] - mean);
-
- sigma = SQRT(sum / (n + 1));
- if (verbose_level > 0) {
- if (verbose_level > 1) {
- SERIAL_PROTOCOL(n + 1);
- SERIAL_PROTOCOLPGM(" of ");
- SERIAL_PROTOCOL((int)n_samples);
- SERIAL_PROTOCOLPGM(": z: ");
- SERIAL_PROTOCOL_F(sample_set[n], 3);
- if (verbose_level > 2) {
- SERIAL_PROTOCOLPGM(" mean: ");
- SERIAL_PROTOCOL_F(mean, 4);
- SERIAL_PROTOCOLPGM(" sigma: ");
- SERIAL_PROTOCOL_F(sigma, 6);
- SERIAL_PROTOCOLPGM(" min: ");
- SERIAL_PROTOCOL_F(min, 3);
- SERIAL_PROTOCOLPGM(" max: ");
- SERIAL_PROTOCOL_F(max, 3);
- SERIAL_PROTOCOLPGM(" range: ");
- SERIAL_PROTOCOL_F(max-min, 3);
- }
- SERIAL_EOL();
- }
- }
-
- } // n_samples loop
- }
-
- STOW_PROBE();
-
- if (probing_good) {
- SERIAL_PROTOCOLLNPGM("Finished!");
-
- if (verbose_level > 0) {
- SERIAL_PROTOCOLPGM("Mean: ");
- SERIAL_PROTOCOL_F(mean, 6);
- SERIAL_PROTOCOLPGM(" Min: ");
- SERIAL_PROTOCOL_F(min, 3);
- SERIAL_PROTOCOLPGM(" Max: ");
- SERIAL_PROTOCOL_F(max, 3);
- SERIAL_PROTOCOLPGM(" Range: ");
- SERIAL_PROTOCOL_F(max-min, 3);
- SERIAL_EOL();
- }
-
- SERIAL_PROTOCOLPGM("Standard Deviation: ");
- SERIAL_PROTOCOL_F(sigma, 6);
- SERIAL_EOL();
- SERIAL_EOL();
- }
-
- clean_up_after_endstop_or_probe_move();
-
- // Re-enable bed level correction if it had been on
- #if HAS_LEVELING
- set_bed_leveling_enabled(was_enabled);
- #endif
-
- #ifdef Z_AFTER_PROBING
- move_z_after_probing();
- #endif
-
- report_current_position();
- }
-
-#endif // Z_MIN_PROBE_REPEATABILITY_TEST
-
-#if ENABLED(G26_MESH_VALIDATION)
-
- inline void gcode_M49() {
- g26_debug_flag ^= true;
- SERIAL_PROTOCOLPGM("G26 Debug ");
- serialprintPGM(g26_debug_flag ? PSTR("on.\n") : PSTR("off.\n"));
- }
-
-#endif // G26_MESH_VALIDATION
-
-#if ENABLED(ULTRA_LCD) && ENABLED(LCD_SET_PROGRESS_MANUALLY)
- /**
- * M73: Set percentage complete (for display on LCD)
- *
- * Example:
- * M73 P25 ; Set progress to 25%
- *
- * Notes:
- * This has no effect during an SD print job
- */
- inline void gcode_M73() {
- if (!IS_SD_PRINTING && parser.seen('P')) {
- progress_bar_percent = parser.value_byte();
- NOMORE(progress_bar_percent, 100);
- }
- }
-#endif // ULTRA_LCD && LCD_SET_PROGRESS_MANUALLY
-
-/**
- * M75: Start print timer
- */
-inline void gcode_M75() { print_job_timer.start(); }
-
-/**
- * M76: Pause print timer
- */
-inline void gcode_M76() { print_job_timer.pause(); }
-
-/**
- * M77: Stop print timer
- */
-inline void gcode_M77() { print_job_timer.stop(); }
-
-#if ENABLED(PRINTCOUNTER)
- /**
- * M78: Show print statistics
- */
- inline void gcode_M78() {
- // "M78 S78" will reset the statistics
- if (parser.intval('S') == 78)
- print_job_timer.initStats();
- else
- print_job_timer.showStats();
- }
-#endif
-
-/**
- * M104: Set hot end temperature
- */
-inline void gcode_M104() {
- if (get_target_extruder_from_command(104)) return;
- if (DEBUGGING(DRYRUN)) return;
-
- #if ENABLED(SINGLENOZZLE)
- if (target_extruder != active_extruder) return;
- #endif
-
- if (parser.seenval('S')) {
- const int16_t temp = parser.value_celsius();
- thermalManager.setTargetHotend(temp, target_extruder);
-
- #if ENABLED(DUAL_X_CARRIAGE)
- if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && target_extruder == 0)
- thermalManager.setTargetHotend(temp ? temp + duplicate_extruder_temp_offset : 0, 1);
- #endif
-
- #if ENABLED(PRINTJOB_TIMER_AUTOSTART)
- /**
- * Stop the timer at the end of print. Start is managed by 'heat and wait' M109.
- * We use half EXTRUDE_MINTEMP here to allow nozzles to be put into hot
- * standby mode, for instance in a dual extruder setup, without affecting
- * the running print timer.
- */
- if (parser.value_celsius() <= (EXTRUDE_MINTEMP) / 2) {
- print_job_timer.stop();
- LCD_MESSAGEPGM(WELCOME_MSG);
- }
- #endif
-
- #if ENABLED(ULTRA_LCD)
- if (parser.value_celsius() > thermalManager.degHotend(target_extruder))
- #if HOTENDS > 1
- lcd_status_printf_P(0, PSTR("E%i " MSG_HEATING), target_extruder + 1);
- #else
- LCD_MESSAGEPGM("E " MSG_HEATING);
- #endif
- #endif
- }
-
- #if ENABLED(AUTOTEMP)
- planner.autotemp_M104_M109();
- #endif
-}
-
-/**
- * M105: Read hot end and bed temperature
- */
-inline void gcode_M105() {
- if (get_target_extruder_from_command(105)) return;
-
- #if HAS_TEMP_SENSOR
- SERIAL_PROTOCOLPGM(MSG_OK);
- thermalManager.print_heaterstates();
- #else // !HAS_TEMP_SENSOR
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_NO_THERMISTORS);
- #endif
-
- SERIAL_EOL();
-}
-
-#if ENABLED(AUTO_REPORT_TEMPERATURES)
-
- /**
- * M155: Set temperature auto-report interval. M155 S
- */
- inline void gcode_M155() {
- if (parser.seenval('S'))
- thermalManager.set_auto_report_interval(parser.value_byte());
- }
-
-#endif // AUTO_REPORT_TEMPERATURES
-
-#if FAN_COUNT > 0
-
- /**
- * M106: Set Fan Speed
- *
- * S Speed between 0-255
- * P Fan index, if more than one fan
- *
- * With EXTRA_FAN_SPEED enabled:
- *
- * T Restore/Use/Set Temporary Speed:
- * 1 = Restore previous speed after T2
- * 2 = Use temporary speed set with T3-255
- * 3-255 = Set the speed for use with T2
- */
- inline void gcode_M106() {
- const uint8_t p = parser.byteval('P');
- if (p < FAN_COUNT) {
- #if ENABLED(EXTRA_FAN_SPEED)
- const int16_t t = parser.intval('T');
- if (t > 0) {
- switch (t) {
- case 1:
- fanSpeeds[p] = old_fanSpeeds[p];
- break;
- case 2:
- old_fanSpeeds[p] = fanSpeeds[p];
- fanSpeeds[p] = new_fanSpeeds[p];
- break;
- default:
- new_fanSpeeds[p] = min(t, 255);
- break;
- }
- return;
- }
- #endif // EXTRA_FAN_SPEED
- const uint16_t s = parser.ushortval('S', 255);
- fanSpeeds[p] = min(s, 255);
- }
- }
-
- /**
- * M107: Fan Off
- */
- inline void gcode_M107() {
- const uint16_t p = parser.ushortval('P');
- if (p < FAN_COUNT) fanSpeeds[p] = 0;
- }
-
-#endif // FAN_COUNT > 0
-
-#if DISABLED(EMERGENCY_PARSER)
-
- /**
- * M108: Stop the waiting for heaters in M109, M190, M303. Does not affect the target temperature.
- */
- inline void gcode_M108() { wait_for_heatup = false; }
-
-
- /**
- * M112: Emergency Stop
- */
- inline void gcode_M112() { kill(PSTR(MSG_KILLED)); }
-
-
- /**
- * M410: Quickstop - Abort all planned moves
- *
- * This will stop the carriages mid-move, so most likely they
- * will be out of sync with the stepper position after this.
- */
- inline void gcode_M410() { quickstop_stepper(); }
-
-#endif
-
-/**
- * M109: Sxxx Wait for extruder(s) to reach temperature. Waits only when heating.
- * Rxxx Wait for extruder(s) to reach temperature. Waits when heating and cooling.
- */
-
-#ifndef MIN_COOLING_SLOPE_DEG
- #define MIN_COOLING_SLOPE_DEG 1.50
-#endif
-#ifndef MIN_COOLING_SLOPE_TIME
- #define MIN_COOLING_SLOPE_TIME 60
-#endif
-
-inline void gcode_M109() {
-
- if (get_target_extruder_from_command(109)) return;
- if (DEBUGGING(DRYRUN)) return;
-
- #if ENABLED(SINGLENOZZLE)
- if (target_extruder != active_extruder) return;
- #endif
-
- const bool no_wait_for_cooling = parser.seenval('S');
- if (no_wait_for_cooling || parser.seenval('R')) {
- const int16_t temp = parser.value_celsius();
- thermalManager.setTargetHotend(temp, target_extruder);
-
- #if ENABLED(DUAL_X_CARRIAGE)
- if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && target_extruder == 0)
- thermalManager.setTargetHotend(temp ? temp + duplicate_extruder_temp_offset : 0, 1);
- #endif
-
- #if ENABLED(PRINTJOB_TIMER_AUTOSTART)
- /**
- * Use half EXTRUDE_MINTEMP to allow nozzles to be put into hot
- * standby mode, (e.g., in a dual extruder setup) without affecting
- * the running print timer.
- */
- if (parser.value_celsius() <= (EXTRUDE_MINTEMP) / 2) {
- print_job_timer.stop();
- LCD_MESSAGEPGM(WELCOME_MSG);
- }
- else
- print_job_timer.start();
- #endif
-
- #if ENABLED(ULTRA_LCD)
- const bool heating = thermalManager.isHeatingHotend(target_extruder);
- if (heating || !no_wait_for_cooling)
- #if HOTENDS > 1
- lcd_status_printf_P(0, heating ? PSTR("E%i " MSG_HEATING) : PSTR("E%i " MSG_COOLING), target_extruder + 1);
- #else
- lcd_setstatusPGM(heating ? PSTR("E " MSG_HEATING) : PSTR("E " MSG_COOLING));
- #endif
- #endif
- }
- else return;
-
- #if ENABLED(AUTOTEMP)
- planner.autotemp_M104_M109();
- #endif
-
- #if TEMP_RESIDENCY_TIME > 0
- millis_t residency_start_ms = 0;
- // Loop until the temperature has stabilized
- #define TEMP_CONDITIONS (!residency_start_ms || PENDING(now, residency_start_ms + (TEMP_RESIDENCY_TIME) * 1000UL))
- #else
- // Loop until the temperature is very close target
- #define TEMP_CONDITIONS (wants_to_cool ? thermalManager.isCoolingHotend(target_extruder) : thermalManager.isHeatingHotend(target_extruder))
- #endif
-
- float target_temp = -1.0, old_temp = 9999.0;
- bool wants_to_cool = false;
- wait_for_heatup = true;
- millis_t now, next_temp_ms = 0, next_cool_check_ms = 0;
-
- #if DISABLED(BUSY_WHILE_HEATING)
- KEEPALIVE_STATE(NOT_BUSY);
- #endif
-
- #if ENABLED(PRINTER_EVENT_LEDS)
- const float start_temp = thermalManager.degHotend(target_extruder);
- uint8_t old_blue = 0;
- #endif
-
- do {
- // Target temperature might be changed during the loop
- if (target_temp != thermalManager.degTargetHotend(target_extruder)) {
- wants_to_cool = thermalManager.isCoolingHotend(target_extruder);
- target_temp = thermalManager.degTargetHotend(target_extruder);
-
- // Exit if S, continue if S, R, or R
- if (no_wait_for_cooling && wants_to_cool) break;
- }
-
- now = millis();
- if (ELAPSED(now, next_temp_ms)) { //Print temp & remaining time every 1s while waiting
- next_temp_ms = now + 1000UL;
- thermalManager.print_heaterstates();
- #if TEMP_RESIDENCY_TIME > 0
- SERIAL_PROTOCOLPGM(" W:");
- if (residency_start_ms)
- SERIAL_PROTOCOL(long((((TEMP_RESIDENCY_TIME) * 1000UL) - (now - residency_start_ms)) / 1000UL));
- else
- SERIAL_PROTOCOLCHAR('?');
- #endif
- SERIAL_EOL();
- }
-
- idle();
- reset_stepper_timeout(); // Keep steppers powered
-
- const float temp = thermalManager.degHotend(target_extruder);
-
- #if ENABLED(PRINTER_EVENT_LEDS)
- // Gradually change LED strip from violet to red as nozzle heats up
- if (!wants_to_cool) {
- const uint8_t blue = map(constrain(temp, start_temp, target_temp), start_temp, target_temp, 255, 0);
- if (blue != old_blue) {
- old_blue = blue;
- leds.set_color(
- MakeLEDColor(255, 0, blue, 0, pixels.getBrightness())
- #if ENABLED(NEOPIXEL_IS_SEQUENTIAL)
- , true
- #endif
- );
- }
- }
- #endif
-
- #if TEMP_RESIDENCY_TIME > 0
-
- const float temp_diff = FABS(target_temp - temp);
-
- if (!residency_start_ms) {
- // Start the TEMP_RESIDENCY_TIME timer when we reach target temp for the first time.
- if (temp_diff < TEMP_WINDOW) residency_start_ms = now;
- }
- else if (temp_diff > TEMP_HYSTERESIS) {
- // Restart the timer whenever the temperature falls outside the hysteresis.
- residency_start_ms = now;
- }
-
- #endif
-
- // Prevent a wait-forever situation if R is misused i.e. M109 R0
- if (wants_to_cool) {
- // break after MIN_COOLING_SLOPE_TIME seconds
- // if the temperature did not drop at least MIN_COOLING_SLOPE_DEG
- if (!next_cool_check_ms || ELAPSED(now, next_cool_check_ms)) {
- if (old_temp - temp < MIN_COOLING_SLOPE_DEG) break;
- next_cool_check_ms = now + 1000UL * MIN_COOLING_SLOPE_TIME;
- old_temp = temp;
- }
- }
-
- } while (wait_for_heatup && TEMP_CONDITIONS);
-
- if (wait_for_heatup) {
- lcd_reset_status();
- #if ENABLED(PRINTER_EVENT_LEDS)
- leds.set_white();
- #endif
- }
-
- #if DISABLED(BUSY_WHILE_HEATING)
- KEEPALIVE_STATE(IN_HANDLER);
- #endif
-}
-
-#if HAS_HEATED_BED
-
- /**
- * M140: Set bed temperature
- */
- inline void gcode_M140() {
- if (DEBUGGING(DRYRUN)) return;
- if (parser.seenval('S')) thermalManager.setTargetBed(parser.value_celsius());
- }
-
- #ifndef MIN_COOLING_SLOPE_DEG_BED
- #define MIN_COOLING_SLOPE_DEG_BED 1.50
- #endif
- #ifndef MIN_COOLING_SLOPE_TIME_BED
- #define MIN_COOLING_SLOPE_TIME_BED 60
- #endif
-
- /**
- * M190: Sxxx Wait for bed current temp to reach target temp. Waits only when heating
- * Rxxx Wait for bed current temp to reach target temp. Waits when heating and cooling
- */
- inline void gcode_M190() {
- if (DEBUGGING(DRYRUN)) return;
-
- const bool no_wait_for_cooling = parser.seenval('S');
- if (no_wait_for_cooling || parser.seenval('R')) {
- thermalManager.setTargetBed(parser.value_celsius());
- #if ENABLED(PRINTJOB_TIMER_AUTOSTART)
- if (parser.value_celsius() > BED_MINTEMP)
- print_job_timer.start();
- #endif
- }
- else return;
-
- lcd_setstatusPGM(thermalManager.isHeatingBed() ? PSTR(MSG_BED_HEATING) : PSTR(MSG_BED_COOLING));
-
- #if TEMP_BED_RESIDENCY_TIME > 0
- millis_t residency_start_ms = 0;
- // Loop until the temperature has stabilized
- #define TEMP_BED_CONDITIONS (!residency_start_ms || PENDING(now, residency_start_ms + (TEMP_BED_RESIDENCY_TIME) * 1000UL))
- #else
- // Loop until the temperature is very close target
- #define TEMP_BED_CONDITIONS (wants_to_cool ? thermalManager.isCoolingBed() : thermalManager.isHeatingBed())
- #endif
-
- float target_temp = -1.0, old_temp = 9999.0;
- bool wants_to_cool = false;
- wait_for_heatup = true;
- millis_t now, next_temp_ms = 0, next_cool_check_ms = 0;
-
- #if DISABLED(BUSY_WHILE_HEATING)
- KEEPALIVE_STATE(NOT_BUSY);
- #endif
-
- target_extruder = active_extruder; // for print_heaterstates
-
- #if ENABLED(PRINTER_EVENT_LEDS)
- const float start_temp = thermalManager.degBed();
- uint8_t old_red = 127;
- #endif
-
- do {
- // Target temperature might be changed during the loop
- if (target_temp != thermalManager.degTargetBed()) {
- wants_to_cool = thermalManager.isCoolingBed();
- target_temp = thermalManager.degTargetBed();
-
- // Exit if S, continue if S, R, or R
- if (no_wait_for_cooling && wants_to_cool) break;
- }
-
- now = millis();
- if (ELAPSED(now, next_temp_ms)) { //Print Temp Reading every 1 second while heating up.
- next_temp_ms = now + 1000UL;
- thermalManager.print_heaterstates();
- #if TEMP_BED_RESIDENCY_TIME > 0
- SERIAL_PROTOCOLPGM(" W:");
- if (residency_start_ms)
- SERIAL_PROTOCOL(long((((TEMP_BED_RESIDENCY_TIME) * 1000UL) - (now - residency_start_ms)) / 1000UL));
- else
- SERIAL_PROTOCOLCHAR('?');
- #endif
- SERIAL_EOL();
- }
-
- idle();
- reset_stepper_timeout(); // Keep steppers powered
-
- const float temp = thermalManager.degBed();
-
- #if ENABLED(PRINTER_EVENT_LEDS)
- // Gradually change LED strip from blue to violet as bed heats up
- if (!wants_to_cool) {
- const uint8_t red = map(constrain(temp, start_temp, target_temp), start_temp, target_temp, 0, 255);
- if (red != old_red) {
- old_red = red;
- leds.set_color(
- MakeLEDColor(red, 0, 255, 0, pixels.getBrightness())
- #if ENABLED(NEOPIXEL_IS_SEQUENTIAL)
- , true
- #endif
- );
- }
- }
- #endif
-
- #if TEMP_BED_RESIDENCY_TIME > 0
-
- const float temp_diff = FABS(target_temp - temp);
-
- if (!residency_start_ms) {
- // Start the TEMP_BED_RESIDENCY_TIME timer when we reach target temp for the first time.
- if (temp_diff < TEMP_BED_WINDOW) residency_start_ms = now;
- }
- else if (temp_diff > TEMP_BED_HYSTERESIS) {
- // Restart the timer whenever the temperature falls outside the hysteresis.
- residency_start_ms = now;
- }
-
- #endif // TEMP_BED_RESIDENCY_TIME > 0
-
- // Prevent a wait-forever situation if R is misused i.e. M190 R0
- if (wants_to_cool) {
- // Break after MIN_COOLING_SLOPE_TIME_BED seconds
- // if the temperature did not drop at least MIN_COOLING_SLOPE_DEG_BED
- if (!next_cool_check_ms || ELAPSED(now, next_cool_check_ms)) {
- if (old_temp - temp < MIN_COOLING_SLOPE_DEG_BED) break;
- next_cool_check_ms = now + 1000UL * MIN_COOLING_SLOPE_TIME_BED;
- old_temp = temp;
- }
- }
-
- } while (wait_for_heatup && TEMP_BED_CONDITIONS);
-
- if (wait_for_heatup) lcd_reset_status();
- #if DISABLED(BUSY_WHILE_HEATING)
- KEEPALIVE_STATE(IN_HANDLER);
- #endif
- }
-
-#endif // HAS_HEATED_BED
-
-/**
- * M110: Set Current Line Number
- */
-inline void gcode_M110() {
- if (parser.seenval('N')) gcode_LastN = parser.value_long();
-}
-
-/**
- * M111: Set the debug level
- */
-inline void gcode_M111() {
- if (parser.seen('S')) marlin_debug_flags = parser.byteval('S');
-
- static const char str_debug_1[] PROGMEM = MSG_DEBUG_ECHO,
- str_debug_2[] PROGMEM = MSG_DEBUG_INFO,
- str_debug_4[] PROGMEM = MSG_DEBUG_ERRORS,
- str_debug_8[] PROGMEM = MSG_DEBUG_DRYRUN,
- str_debug_16[] PROGMEM = MSG_DEBUG_COMMUNICATION
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- , str_debug_32[] PROGMEM = MSG_DEBUG_LEVELING
- #endif
- ;
-
- static const char* const debug_strings[] PROGMEM = {
- str_debug_1, str_debug_2, str_debug_4, str_debug_8, str_debug_16
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- , str_debug_32
- #endif
- };
-
- SERIAL_ECHO_START();
- SERIAL_ECHOPGM(MSG_DEBUG_PREFIX);
- if (marlin_debug_flags) {
- uint8_t comma = 0;
- for (uint8_t i = 0; i < COUNT(debug_strings); i++) {
- if (TEST(marlin_debug_flags, i)) {
- if (comma++) SERIAL_CHAR(',');
- serialprintPGM((char*)pgm_read_ptr(&debug_strings[i]));
- }
- }
- }
- else {
- SERIAL_ECHOPGM(MSG_DEBUG_OFF);
- }
- SERIAL_EOL();
-}
-
-#if ENABLED(HOST_KEEPALIVE_FEATURE)
-
- /**
- * M113: Get or set Host Keepalive interval (0 to disable)
- *
- * S Optional. Set the keepalive interval.
- */
- inline void gcode_M113() {
- if (parser.seenval('S')) {
- host_keepalive_interval = parser.value_byte();
- NOMORE(host_keepalive_interval, 60);
- }
- else {
- SERIAL_ECHO_START();
- SERIAL_ECHOLNPAIR("M113 S", (unsigned long)host_keepalive_interval);
- }
- }
-
-#endif
-
-#if ENABLED(BARICUDA)
-
- #if HAS_HEATER_1
- /**
- * M126: Heater 1 valve open
- */
- inline void gcode_M126() { baricuda_valve_pressure = parser.byteval('S', 255); }
- /**
- * M127: Heater 1 valve close
- */
- inline void gcode_M127() { baricuda_valve_pressure = 0; }
- #endif
-
- #if HAS_HEATER_2
- /**
- * M128: Heater 2 valve open
- */
- inline void gcode_M128() { baricuda_e_to_p_pressure = parser.byteval('S', 255); }
- /**
- * M129: Heater 2 valve close
- */
- inline void gcode_M129() { baricuda_e_to_p_pressure = 0; }
- #endif
-
-#endif // BARICUDA
-
-#if ENABLED(ULTIPANEL)
-
- /**
- * M145: Set the heatup state for a material in the LCD menu
- *
- * S (0=PLA, 1=ABS)
- * H
- * B
- * F
- */
- inline void gcode_M145() {
- const uint8_t material = (uint8_t)parser.intval('S');
- if (material >= COUNT(lcd_preheat_hotend_temp)) {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_MATERIAL_INDEX);
- }
- else {
- int v;
- if (parser.seenval('H')) {
- v = parser.value_int();
- lcd_preheat_hotend_temp[material] = constrain(v, EXTRUDE_MINTEMP, HEATER_0_MAXTEMP - 15);
- }
- if (parser.seenval('F')) {
- v = parser.value_int();
- lcd_preheat_fan_speed[material] = constrain(v, 0, 255);
- }
- #if TEMP_SENSOR_BED != 0
- if (parser.seenval('B')) {
- v = parser.value_int();
- lcd_preheat_bed_temp[material] = constrain(v, BED_MINTEMP, BED_MAXTEMP - 15);
- }
- #endif
- }
- }
-
-#endif // ULTIPANEL
-
-#if ENABLED(TEMPERATURE_UNITS_SUPPORT)
- /**
- * M149: Set temperature units
- */
- inline void gcode_M149() {
- if (parser.seenval('C')) parser.set_input_temp_units(TEMPUNIT_C);
- else if (parser.seenval('K')) parser.set_input_temp_units(TEMPUNIT_K);
- else if (parser.seenval('F')) parser.set_input_temp_units(TEMPUNIT_F);
- }
-#endif
-
-#if HAS_POWER_SWITCH
-
- /**
- * M80 : Turn on the Power Supply
- * M80 S : Report the current state and exit
- */
- inline void gcode_M80() {
-
- // S: Report the current power supply state and exit
- if (parser.seen('S')) {
- serialprintPGM(powersupply_on ? PSTR("PS:1\n") : PSTR("PS:0\n"));
- return;
- }
-
- PSU_ON();
-
- /**
- * If you have a switch on suicide pin, this is useful
- * if you want to start another print with suicide feature after
- * a print without suicide...
- */
- #if HAS_SUICIDE
- OUT_WRITE(SUICIDE_PIN, HIGH);
- #endif
-
- #if DISABLED(AUTO_POWER_CONTROL)
- delay(100); // Wait for power to settle
- restore_stepper_drivers();
- #endif
-
- #if ENABLED(ULTIPANEL)
- LCD_MESSAGEPGM(WELCOME_MSG);
- #endif
- }
-
-#endif // HAS_POWER_SWITCH
-
-/**
- * M81: Turn off Power, including Power Supply, if there is one.
- *
- * This code should ALWAYS be available for EMERGENCY SHUTDOWN!
- */
-inline void gcode_M81() {
- thermalManager.disable_all_heaters();
- stepper.finish_and_disable();
-
- #if FAN_COUNT > 0
- for (uint8_t i = 0; i < FAN_COUNT; i++) fanSpeeds[i] = 0;
- #if ENABLED(PROBING_FANS_OFF)
- fans_paused = false;
- ZERO(paused_fanSpeeds);
- #endif
- #endif
-
- safe_delay(1000); // Wait 1 second before switching off
-
- #if HAS_SUICIDE
- suicide();
- #elif HAS_POWER_SWITCH
- PSU_OFF();
- #endif
-
- #if ENABLED(ULTIPANEL)
- LCD_MESSAGEPGM(MACHINE_NAME " " MSG_OFF ".");
- #endif
-}
-
-/**
- * M82: Set E codes absolute (default)
- */
-inline void gcode_M82() { axis_relative_modes[E_AXIS] = false; }
-
-/**
- * M83: Set E codes relative while in Absolute Coordinates (G90) mode
- */
-inline void gcode_M83() { axis_relative_modes[E_AXIS] = true; }
-
-/**
- * M18, M84: Disable stepper motors
- */
-inline void gcode_M18_M84() {
- if (parser.seenval('S')) {
- stepper_inactive_time = parser.value_millis_from_seconds();
- }
- else {
- bool all_axis = !(parser.seen('X') || parser.seen('Y') || parser.seen('Z') || parser.seen('E'));
- if (all_axis) {
- stepper.finish_and_disable();
- }
- else {
- stepper.synchronize();
- if (parser.seen('X')) disable_X();
- if (parser.seen('Y')) disable_Y();
- if (parser.seen('Z')) disable_Z();
- #if E0_ENABLE_PIN != X_ENABLE_PIN && E1_ENABLE_PIN != Y_ENABLE_PIN // Only disable on boards that have separate ENABLE_PINS
- if (parser.seen('E')) disable_e_steppers();
- #endif
- }
-
- #if ENABLED(AUTO_BED_LEVELING_UBL) && ENABLED(ULTIPANEL) // Only needed with an LCD
- if (ubl.lcd_map_control) ubl.lcd_map_control = defer_return_to_status = false;
- #endif
- }
-}
-
-/**
- * M85: Set inactivity shutdown timer with parameter S. To disable set zero (default)
- */
-inline void gcode_M85() {
- if (parser.seen('S')) max_inactive_time = parser.value_millis_from_seconds();
-}
-
-/**
- * Multi-stepper support for M92, M201, M203
- */
-#if ENABLED(DISTINCT_E_FACTORS)
- #define GET_TARGET_EXTRUDER(CMD) if (get_target_extruder_from_command(CMD)) return
- #define TARGET_EXTRUDER target_extruder
-#else
- #define GET_TARGET_EXTRUDER(CMD) NOOP
- #define TARGET_EXTRUDER 0
-#endif
-
-/**
- * M92: Set axis steps-per-unit for one or more axes, X, Y, Z, and E.
- * (Follows the same syntax as G92)
- *
- * With multiple extruders use T to specify which one.
- */
-inline void gcode_M92() {
-
- GET_TARGET_EXTRUDER(92);
-
- LOOP_XYZE(i) {
- if (parser.seen(axis_codes[i])) {
- if (i == E_AXIS) {
- const float value = parser.value_per_axis_unit((AxisEnum)(E_AXIS + TARGET_EXTRUDER));
- if (value < 20.0) {
- float factor = planner.axis_steps_per_mm[E_AXIS + TARGET_EXTRUDER] / value; // increase e constants if M92 E14 is given for netfab.
- planner.max_jerk[E_AXIS] *= factor;
- planner.max_feedrate_mm_s[E_AXIS + TARGET_EXTRUDER] *= factor;
- planner.max_acceleration_steps_per_s2[E_AXIS + TARGET_EXTRUDER] *= factor;
- }
- planner.axis_steps_per_mm[E_AXIS + TARGET_EXTRUDER] = value;
- }
- else {
- planner.axis_steps_per_mm[i] = parser.value_per_axis_unit((AxisEnum)i);
- }
- }
- }
- planner.refresh_positioning();
-}
-
-/**
- * Output the current position to serial
- */
-void report_current_position() {
- SERIAL_PROTOCOLPGM("X:");
- SERIAL_PROTOCOL(LOGICAL_X_POSITION(current_position[X_AXIS]));
- SERIAL_PROTOCOLPGM(" Y:");
- SERIAL_PROTOCOL(LOGICAL_Y_POSITION(current_position[Y_AXIS]));
- SERIAL_PROTOCOLPGM(" Z:");
- SERIAL_PROTOCOL(LOGICAL_Z_POSITION(current_position[Z_AXIS]));
- SERIAL_PROTOCOLPGM(" E:");
- SERIAL_PROTOCOL(current_position[E_AXIS]);
-
- stepper.report_positions();
-
- #if IS_SCARA
- SERIAL_PROTOCOLPAIR("SCARA Theta:", stepper.get_axis_position_degrees(A_AXIS));
- SERIAL_PROTOCOLLNPAIR(" Psi+Theta:", stepper.get_axis_position_degrees(B_AXIS));
- SERIAL_EOL();
- #endif
-}
-
-#ifdef M114_DETAIL
-
- void report_xyze(const float pos[], const uint8_t n = 4, const uint8_t precision = 3) {
- char str[12];
- for (uint8_t i = 0; i < n; i++) {
- SERIAL_CHAR(' ');
- SERIAL_CHAR(axis_codes[i]);
- SERIAL_CHAR(':');
- SERIAL_PROTOCOL(dtostrf(pos[i], 8, precision, str));
- }
- SERIAL_EOL();
- }
-
- inline void report_xyz(const float pos[]) { report_xyze(pos, 3); }
-
- void report_current_position_detail() {
-
- SERIAL_PROTOCOLPGM("\nLogical:");
- const float logical[XYZ] = {
- LOGICAL_X_POSITION(current_position[X_AXIS]),
- LOGICAL_Y_POSITION(current_position[Y_AXIS]),
- LOGICAL_Z_POSITION(current_position[Z_AXIS])
- };
- report_xyz(logical);
-
- SERIAL_PROTOCOLPGM("Raw: ");
- report_xyz(current_position);
-
- float leveled[XYZ] = { current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] };
-
- #if PLANNER_LEVELING
- SERIAL_PROTOCOLPGM("Leveled:");
- planner.apply_leveling(leveled);
- report_xyz(leveled);
-
- SERIAL_PROTOCOLPGM("UnLevel:");
- float unleveled[XYZ] = { leveled[X_AXIS], leveled[Y_AXIS], leveled[Z_AXIS] };
- planner.unapply_leveling(unleveled);
- report_xyz(unleveled);
- #endif
-
- #if IS_KINEMATIC
- #if IS_SCARA
- SERIAL_PROTOCOLPGM("ScaraK: ");
- #else
- SERIAL_PROTOCOLPGM("DeltaK: ");
- #endif
- inverse_kinematics(leveled); // writes delta[]
- report_xyz(delta);
- #endif
-
- stepper.synchronize();
-
- SERIAL_PROTOCOLPGM("Stepper:");
- LOOP_XYZE(i) {
- SERIAL_CHAR(' ');
- SERIAL_CHAR(axis_codes[i]);
- SERIAL_CHAR(':');
- SERIAL_PROTOCOL(stepper.position((AxisEnum)i));
- }
- SERIAL_EOL();
-
- #if IS_SCARA
- const float deg[XYZ] = {
- stepper.get_axis_position_degrees(A_AXIS),
- stepper.get_axis_position_degrees(B_AXIS)
- };
- SERIAL_PROTOCOLPGM("Degrees:");
- report_xyze(deg, 2);
- #endif
-
- SERIAL_PROTOCOLPGM("FromStp:");
- get_cartesian_from_steppers(); // writes cartes[XYZ] (with forward kinematics)
- const float from_steppers[XYZE] = { cartes[X_AXIS], cartes[Y_AXIS], cartes[Z_AXIS], stepper.get_axis_position_mm(E_AXIS) };
- report_xyze(from_steppers);
-
- const float diff[XYZE] = {
- from_steppers[X_AXIS] - leveled[X_AXIS],
- from_steppers[Y_AXIS] - leveled[Y_AXIS],
- from_steppers[Z_AXIS] - leveled[Z_AXIS],
- from_steppers[E_AXIS] - current_position[E_AXIS]
- };
- SERIAL_PROTOCOLPGM("Differ: ");
- report_xyze(diff);
- }
-#endif // M114_DETAIL
-
-/**
- * M114: Report current position to host
- */
-inline void gcode_M114() {
-
- #ifdef M114_DETAIL
- if (parser.seen('D')) {
- report_current_position_detail();
- return;
- }
- #endif
-
- stepper.synchronize();
- report_current_position();
-}
-
-/**
- * M115: Capabilities string
- */
-
-#if ENABLED(EXTENDED_CAPABILITIES_REPORT)
- static void cap_line(const char * const name, bool ena=false) {
- SERIAL_PROTOCOLPGM("Cap:");
- serialprintPGM(name);
- SERIAL_PROTOCOLPGM(":");
- SERIAL_PROTOCOLLN(int(ena ? 1 : 0));
- }
-#endif
-
-inline void gcode_M115() {
- SERIAL_PROTOCOLLNPGM(MSG_M115_REPORT);
-
- #if ENABLED(EXTENDED_CAPABILITIES_REPORT)
-
- // SERIAL_XON_XOFF
- cap_line(PSTR("SERIAL_XON_XOFF")
- #if ENABLED(SERIAL_XON_XOFF)
- , true
- #endif
- );
-
- // EEPROM (M500, M501)
- cap_line(PSTR("EEPROM")
- #if ENABLED(EEPROM_SETTINGS)
- , true
- #endif
- );
-
- // Volumetric Extrusion (M200)
- cap_line(PSTR("VOLUMETRIC")
- #if DISABLED(NO_VOLUMETRICS)
- , true
- #endif
- );
-
- // AUTOREPORT_TEMP (M155)
- cap_line(PSTR("AUTOREPORT_TEMP")
- #if ENABLED(AUTO_REPORT_TEMPERATURES)
- , true
- #endif
- );
-
- // PROGRESS (M530 S L, M531 , M532 X L)
- cap_line(PSTR("PROGRESS"));
-
- // Print Job timer M75, M76, M77
- cap_line(PSTR("PRINT_JOB"), true);
-
- // AUTOLEVEL (G29)
- cap_line(PSTR("AUTOLEVEL")
- #if HAS_AUTOLEVEL
- , true
- #endif
- );
-
- // Z_PROBE (G30)
- cap_line(PSTR("Z_PROBE")
- #if HAS_BED_PROBE
- , true
- #endif
- );
-
- // MESH_REPORT (M420 V)
- cap_line(PSTR("LEVELING_DATA")
- #if HAS_LEVELING
- , true
- #endif
- );
-
- // BUILD_PERCENT (M73)
- cap_line(PSTR("BUILD_PERCENT")
- #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
- , true
- #endif
- );
-
- // SOFTWARE_POWER (M80, M81)
- cap_line(PSTR("SOFTWARE_POWER")
- #if HAS_POWER_SWITCH
- , true
- #endif
- );
-
- // CASE LIGHTS (M355)
- cap_line(PSTR("TOGGLE_LIGHTS")
- #if HAS_CASE_LIGHT
- , true
- #endif
- );
- cap_line(PSTR("CASE_LIGHT_BRIGHTNESS")
- #if HAS_CASE_LIGHT
- , USEABLE_HARDWARE_PWM(CASE_LIGHT_PIN)
- #endif
- );
-
- // EMERGENCY_PARSER (M108, M112, M410)
- cap_line(PSTR("EMERGENCY_PARSER")
- #if ENABLED(EMERGENCY_PARSER)
- , true
- #endif
- );
-
- // AUTOREPORT_SD_STATUS (M27 extension)
- cap_line(PSTR("AUTOREPORT_SD_STATUS")
- #if ENABLED(AUTO_REPORT_SD_STATUS)
- , true
- #endif
- );
-
- // THERMAL_PROTECTION
- cap_line(PSTR("THERMAL_PROTECTION")
- #if ENABLED(THERMAL_PROTECTION_HOTENDS) && ENABLED(THERMAL_PROTECTION_BED)
- , true
- #endif
- );
-
- #endif // EXTENDED_CAPABILITIES_REPORT
-}
-
-/**
- * M117: Set LCD Status Message
- */
-inline void gcode_M117() {
- if (parser.string_arg[0])
- lcd_setstatus(parser.string_arg);
- else
- lcd_reset_status();
-}
-
-/**
- * M118: Display a message in the host console.
- *
- * A1 Append '// ' for an action command, as in OctoPrint
- * E1 Have the host 'echo:' the text
- */
-inline void gcode_M118() {
- bool hasE = false, hasA = false;
- char *p = parser.string_arg;
- for (uint8_t i = 2; i--;)
- if ((p[0] == 'A' || p[0] == 'E') && p[1] == '1') {
- if (p[0] == 'A') hasA = true;
- if (p[0] == 'E') hasE = true;
- p += 2;
- while (*p == ' ') ++p;
- }
- if (hasE) SERIAL_ECHO_START();
- if (hasA) SERIAL_ECHOPGM("// ");
- SERIAL_ECHOLN(p);
-}
-
-/**
- * M119: Output endstop states to serial output
- */
-inline void gcode_M119() { endstops.M119(); }
-
-/**
- * M120: Enable endstops and set non-homing endstop state to "enabled"
- */
-inline void gcode_M120() { endstops.enable_globally(true); }
-
-/**
- * M121: Disable endstops and set non-homing endstop state to "disabled"
- */
-inline void gcode_M121() { endstops.enable_globally(false); }
-
-#if ENABLED(PARK_HEAD_ON_PAUSE)
-
- /**
- * M125: Store current position and move to filament change position.
- * Called on pause (by M25) to prevent material leaking onto the
- * object. On resume (M24) the head will be moved back and the
- * print will resume.
- *
- * If Marlin is compiled without SD Card support, M125 can be
- * used directly to pause the print and move to park position,
- * resuming with a button click or M108.
- *
- * L = override retract length
- * X = override X
- * Y = override Y
- * Z = override Z raise
- */
- inline void gcode_M125() {
-
- // Initial retract before move to filament change position
- const float retract = -FABS(parser.seen('L') ? parser.value_axis_units(E_AXIS) : 0
- #ifdef PAUSE_PARK_RETRACT_LENGTH
- + (PAUSE_PARK_RETRACT_LENGTH)
- #endif
- );
-
- point_t park_point = NOZZLE_PARK_POINT;
-
- // Move XY axes to filament change position or given position
- if (parser.seenval('X')) park_point.x = parser.linearval('X');
- if (parser.seenval('Y')) park_point.y = parser.linearval('Y');
-
- // Lift Z axis
- if (parser.seenval('Z')) park_point.z = parser.linearval('Z');
-
- #if HOTENDS > 1 && DISABLED(DUAL_X_CARRIAGE) && DISABLED(DELTA)
- park_point.x += (active_extruder ? hotend_offset[X_AXIS][active_extruder] : 0);
- park_point.y += (active_extruder ? hotend_offset[Y_AXIS][active_extruder] : 0);
- #endif
-
- #if DISABLED(SDSUPPORT)
- const bool job_running = print_job_timer.isRunning();
- #endif
-
- if (pause_print(retract, park_point)) {
- #if DISABLED(SDSUPPORT)
- // Wait for lcd click or M108
- wait_for_filament_reload();
-
- // Return to print position and continue
- resume_print();
-
- if (job_running) print_job_timer.start();
- #endif
- }
- }
-
-#endif // PARK_HEAD_ON_PAUSE
-
-#if HAS_COLOR_LEDS
-
- /**
- * M150: Set Status LED Color - Use R-U-B-W for R-G-B-W
- * and Brightness - Use P (for NEOPIXEL only)
- *
- * Always sets all 3 or 4 components. If a component is left out, set to 0.
- * If brightness is left out, no value changed
- *
- * Examples:
- *
- * M150 R255 ; Turn LED red
- * M150 R255 U127 ; Turn LED orange (PWM only)
- * M150 ; Turn LED off
- * M150 R U B ; Turn LED white
- * M150 W ; Turn LED white using a white LED
- * M150 P127 ; Set LED 50% brightness
- * M150 P ; Set LED full brightness
- */
- inline void gcode_M150() {
- leds.set_color(MakeLEDColor(
- parser.seen('R') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
- parser.seen('U') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
- parser.seen('B') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
- parser.seen('W') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
- parser.seen('P') ? (parser.has_value() ? parser.value_byte() : 255) : pixels.getBrightness()
- ));
- }
-
-#endif // HAS_COLOR_LEDS
-
-#if DISABLED(NO_VOLUMETRICS)
-
- /**
- * M200: Set filament diameter and set E axis units to cubic units
- *
- * T - Optional extruder number. Current extruder if omitted.
- * D - Diameter of the filament. Use "D0" to switch back to linear units on the E axis.
- */
- inline void gcode_M200() {
-
- if (get_target_extruder_from_command(200)) return;
-
- if (parser.seen('D')) {
- // setting any extruder filament size disables volumetric on the assumption that
- // slicers either generate in extruder values as cubic mm or as as filament feeds
- // for all extruders
- if ( (parser.volumetric_enabled = (parser.value_linear_units() != 0.0)) )
- planner.set_filament_size(target_extruder, parser.value_linear_units());
- }
- planner.calculate_volumetric_multipliers();
- }
-
-#endif // !NO_VOLUMETRICS
-
-/**
- * M201: Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
- *
- * With multiple extruders use T to specify which one.
- */
-inline void gcode_M201() {
-
- GET_TARGET_EXTRUDER(201);
-
- LOOP_XYZE(i) {
- if (parser.seen(axis_codes[i])) {
- const uint8_t a = i + (i == E_AXIS ? TARGET_EXTRUDER : 0);
- planner.max_acceleration_mm_per_s2[a] = parser.value_axis_units((AxisEnum)a);
- }
- }
- // steps per sq second need to be updated to agree with the units per sq second (as they are what is used in the planner)
- planner.reset_acceleration_rates();
-}
-
-#if 0 // Not used for Sprinter/grbl gen6
- inline void gcode_M202() {
- LOOP_XYZE(i) {
- if (parser.seen(axis_codes[i])) axis_travel_steps_per_sqr_second[i] = parser.value_axis_units((AxisEnum)i) * planner.axis_steps_per_mm[i];
- }
- }
-#endif
-
-
-/**
- * M203: Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in units/sec
- *
- * With multiple extruders use T to specify which one.
- */
-inline void gcode_M203() {
-
- GET_TARGET_EXTRUDER(203);
-
- LOOP_XYZE(i)
- if (parser.seen(axis_codes[i])) {
- const uint8_t a = i + (i == E_AXIS ? TARGET_EXTRUDER : 0);
- planner.max_feedrate_mm_s[a] = parser.value_axis_units((AxisEnum)a);
- }
-}
-
-/**
- * M204: Set Accelerations in units/sec^2 (M204 P1200 R3000 T3000)
- *
- * P = Printing moves
- * R = Retract only (no X, Y, Z) moves
- * T = Travel (non printing) moves
- */
-inline void gcode_M204() {
- bool report = true;
- if (parser.seenval('S')) { // Kept for legacy compatibility. Should NOT BE USED for new developments.
- planner.travel_acceleration = planner.acceleration = parser.value_linear_units();
- report = false;
- }
- if (parser.seenval('P')) {
- planner.acceleration = parser.value_linear_units();
- report = false;
- }
- if (parser.seenval('R')) {
- planner.retract_acceleration = parser.value_linear_units();
- report = false;
- }
- if (parser.seenval('T')) {
- planner.travel_acceleration = parser.value_linear_units();
- report = false;
- }
- if (report) {
- SERIAL_ECHOPAIR("Acceleration: P", planner.acceleration);
- SERIAL_ECHOPAIR(" R", planner.retract_acceleration);
- SERIAL_ECHOLNPAIR(" T", planner.travel_acceleration);
- }
-}
-
-/**
- * M205: Set Advanced Settings
- *
- * S = Min Feed Rate (units/s)
- * T = Min Travel Feed Rate (units/s)
- * B = Min Segment Time (µs)
- * X = Max X Jerk (units/sec^2)
- * Y = Max Y Jerk (units/sec^2)
- * Z = Max Z Jerk (units/sec^2)
- * E = Max E Jerk (units/sec^2)
- */
-inline void gcode_M205() {
- if (parser.seen('S')) planner.min_feedrate_mm_s = parser.value_linear_units();
- if (parser.seen('T')) planner.min_travel_feedrate_mm_s = parser.value_linear_units();
- if (parser.seen('B')) planner.min_segment_time_us = parser.value_ulong();
- if (parser.seen('X')) planner.max_jerk[X_AXIS] = parser.value_linear_units();
- if (parser.seen('Y')) planner.max_jerk[Y_AXIS] = parser.value_linear_units();
- if (parser.seen('Z')) {
- planner.max_jerk[Z_AXIS] = parser.value_linear_units();
- #if HAS_MESH
- if (planner.max_jerk[Z_AXIS] <= 0.1)
- SERIAL_ECHOLNPGM("WARNING! Low Z Jerk may lead to unwanted pauses.");
- #endif
- }
- if (parser.seen('E')) planner.max_jerk[E_AXIS] = parser.value_linear_units();
-}
-
-#if HAS_M206_COMMAND
-
- /**
- * M206: Set Additional Homing Offset (X Y Z). SCARA aliases T=X, P=Y
- *
- * *** @thinkyhead: I recommend deprecating M206 for SCARA in favor of M665.
- * *** M206 for SCARA will remain enabled in 1.1.x for compatibility.
- * *** In the next 1.2 release, it will simply be disabled by default.
- */
- inline void gcode_M206() {
- LOOP_XYZ(i)
- if (parser.seen(axis_codes[i]))
- set_home_offset((AxisEnum)i, parser.value_linear_units());
-
- #if ENABLED(MORGAN_SCARA)
- if (parser.seen('T')) set_home_offset(A_AXIS, parser.value_float()); // Theta
- if (parser.seen('P')) set_home_offset(B_AXIS, parser.value_float()); // Psi
- #endif
-
- report_current_position();
- }
-
-#endif // HAS_M206_COMMAND
-
-#if ENABLED(DELTA)
- /**
- * M665: Set delta configurations
- *
- * H = delta height
- * L = diagonal rod
- * R = delta radius
- * S = segments per second
- * B = delta calibration radius
- * X = Alpha (Tower 1) angle trim
- * Y = Beta (Tower 2) angle trim
- * Z = Gamma (Tower 3) angle trim
- */
- inline void gcode_M665() {
- if (parser.seen('H')) delta_height = parser.value_linear_units();
- if (parser.seen('L')) delta_diagonal_rod = parser.value_linear_units();
- if (parser.seen('R')) delta_radius = parser.value_linear_units();
- if (parser.seen('S')) delta_segments_per_second = parser.value_float();
- if (parser.seen('B')) delta_calibration_radius = parser.value_float();
- if (parser.seen('X')) delta_tower_angle_trim[A_AXIS] = parser.value_float();
- if (parser.seen('Y')) delta_tower_angle_trim[B_AXIS] = parser.value_float();
- if (parser.seen('Z')) delta_tower_angle_trim[C_AXIS] = parser.value_float();
- recalc_delta_settings();
- }
- /**
- * M666: Set delta endstop adjustment
- */
- inline void gcode_M666() {
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOLNPGM(">>> gcode_M666");
- }
- #endif
- LOOP_XYZ(i) {
- if (parser.seen(axis_codes[i])) {
- if (parser.value_linear_units() * Z_HOME_DIR <= 0)
- delta_endstop_adj[i] = parser.value_linear_units();
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOPAIR("delta_endstop_adj[", axis_codes[i]);
- SERIAL_ECHOLNPAIR("] = ", delta_endstop_adj[i]);
- }
- #endif
- }
- }
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOLNPGM("<<< gcode_M666");
- }
- #endif
- }
-
-#elif IS_SCARA
-
- /**
- * M665: Set SCARA settings
- *
- * Parameters:
- *
- * S[segments-per-second] - Segments-per-second
- * P[theta-psi-offset] - Theta-Psi offset, added to the shoulder (A/X) angle
- * T[theta-offset] - Theta offset, added to the elbow (B/Y) angle
- *
- * A, P, and X are all aliases for the shoulder angle
- * B, T, and Y are all aliases for the elbow angle
- */
- inline void gcode_M665() {
- if (parser.seen('S')) delta_segments_per_second = parser.value_float();
-
- const bool hasA = parser.seen('A'), hasP = parser.seen('P'), hasX = parser.seen('X');
- const uint8_t sumAPX = hasA + hasP + hasX;
- if (sumAPX == 1)
- home_offset[A_AXIS] = parser.value_float();
- else if (sumAPX > 1) {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM("Only one of A, P, or X is allowed.");
- return;
- }
-
- const bool hasB = parser.seen('B'), hasT = parser.seen('T'), hasY = parser.seen('Y');
- const uint8_t sumBTY = hasB + hasT + hasY;
- if (sumBTY == 1)
- home_offset[B_AXIS] = parser.value_float();
- else if (sumBTY > 1) {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM("Only one of B, T, or Y is allowed.");
- return;
- }
- }
-
-#elif ENABLED(X_DUAL_ENDSTOPS) || ENABLED(Y_DUAL_ENDSTOPS) || ENABLED(Z_DUAL_ENDSTOPS)
-
- /**
- * M666: Set Dual Endstops offsets for X, Y, and/or Z.
- * With no parameters report current offsets.
- */
- inline void gcode_M666() {
- bool report = true;
- #if ENABLED(X_DUAL_ENDSTOPS)
- if (parser.seenval('X')) {
- endstops.x_endstop_adj = parser.value_linear_units();
- report = false;
- }
- #endif
- #if ENABLED(Y_DUAL_ENDSTOPS)
- if (parser.seenval('Y')) {
- endstops.y_endstop_adj = parser.value_linear_units();
- report = false;
- }
- #endif
- #if ENABLED(Z_DUAL_ENDSTOPS)
- if (parser.seenval('Z')) {
- endstops.z_endstop_adj = parser.value_linear_units();
- report = false;
- }
- #endif
- if (report) {
- SERIAL_ECHOPGM("Dual Endstop Adjustment (mm): ");
- #if ENABLED(X_DUAL_ENDSTOPS)
- SERIAL_ECHOPAIR(" X", endstops.x_endstop_adj);
- #endif
- #if ENABLED(Y_DUAL_ENDSTOPS)
- SERIAL_ECHOPAIR(" Y", endstops.y_endstop_adj);
- #endif
- #if ENABLED(Z_DUAL_ENDSTOPS)
- SERIAL_ECHOPAIR(" Z", endstops.z_endstop_adj);
- #endif
- SERIAL_EOL();
- }
- }
-
-#endif // X_DUAL_ENDSTOPS || Y_DUAL_ENDSTOPS || Z_DUAL_ENDSTOPS
-
-#if ENABLED(FWRETRACT)
-
- /**
- * M207: Set firmware retraction values
- *
- * S[+units] retract_length
- * W[+units] swap_retract_length (multi-extruder)
- * F[units/min] retract_feedrate_mm_s
- * Z[units] retract_zlift
- */
- inline void gcode_M207() {
- if (parser.seen('S')) fwretract.retract_length = parser.value_axis_units(E_AXIS);
- if (parser.seen('F')) fwretract.retract_feedrate_mm_s = MMM_TO_MMS(parser.value_axis_units(E_AXIS));
- if (parser.seen('Z')) fwretract.retract_zlift = parser.value_linear_units();
- if (parser.seen('W')) fwretract.swap_retract_length = parser.value_axis_units(E_AXIS);
- }
-
- /**
- * M208: Set firmware un-retraction values
- *
- * S[+units] retract_recover_length (in addition to M207 S*)
- * W[+units] swap_retract_recover_length (multi-extruder)
- * F[units/min] retract_recover_feedrate_mm_s
- * R[units/min] swap_retract_recover_feedrate_mm_s
- */
- inline void gcode_M208() {
- if (parser.seen('S')) fwretract.retract_recover_length = parser.value_axis_units(E_AXIS);
- if (parser.seen('F')) fwretract.retract_recover_feedrate_mm_s = MMM_TO_MMS(parser.value_axis_units(E_AXIS));
- if (parser.seen('R')) fwretract.swap_retract_recover_feedrate_mm_s = MMM_TO_MMS(parser.value_axis_units(E_AXIS));
- if (parser.seen('W')) fwretract.swap_retract_recover_length = parser.value_axis_units(E_AXIS);
- }
-
- /**
- * M209: Enable automatic retract (M209 S1)
- * For slicers that don't support G10/11, reversed extrude-only
- * moves will be classified as retraction.
- */
- inline void gcode_M209() {
- if (MIN_AUTORETRACT <= MAX_AUTORETRACT) {
- if (parser.seen('S')) {
- fwretract.autoretract_enabled = parser.value_bool();
- for (uint8_t i = 0; i < EXTRUDERS; i++) fwretract.retracted[i] = false;
- }
- }
- }
-
-#endif // FWRETRACT
-
-/**
- * M211: Enable, Disable, and/or Report software endstops
- *
- * Usage: M211 S1 to enable, M211 S0 to disable, M211 alone for report
- */
-inline void gcode_M211() {
- SERIAL_ECHO_START();
- #if HAS_SOFTWARE_ENDSTOPS
- if (parser.seen('S')) soft_endstops_enabled = parser.value_bool();
- SERIAL_ECHOPGM(MSG_SOFT_ENDSTOPS);
- serialprintPGM(soft_endstops_enabled ? PSTR(MSG_ON) : PSTR(MSG_OFF));
- #else
- SERIAL_ECHOPGM(MSG_SOFT_ENDSTOPS);
- SERIAL_ECHOPGM(MSG_OFF);
- #endif
- SERIAL_ECHOPGM(MSG_SOFT_MIN);
- SERIAL_ECHOPAIR( MSG_X, LOGICAL_X_POSITION(soft_endstop_min[X_AXIS]));
- SERIAL_ECHOPAIR(" " MSG_Y, LOGICAL_Y_POSITION(soft_endstop_min[Y_AXIS]));
- SERIAL_ECHOPAIR(" " MSG_Z, LOGICAL_Z_POSITION(soft_endstop_min[Z_AXIS]));
- SERIAL_ECHOPGM(MSG_SOFT_MAX);
- SERIAL_ECHOPAIR( MSG_X, LOGICAL_X_POSITION(soft_endstop_max[X_AXIS]));
- SERIAL_ECHOPAIR(" " MSG_Y, LOGICAL_Y_POSITION(soft_endstop_max[Y_AXIS]));
- SERIAL_ECHOLNPAIR(" " MSG_Z, LOGICAL_Z_POSITION(soft_endstop_max[Z_AXIS]));
-}
-
-#if HOTENDS > 1
-
- /**
- * M218 - Set/get hotend offset (in linear units)
- *
- * T
- * X
- * Y
- * Z - Available with DUAL_X_CARRIAGE and SWITCHING_NOZZLE
- */
- inline void gcode_M218() {
- if (get_target_extruder_from_command(218) || target_extruder == 0) return;
-
- bool report = true;
- if (parser.seenval('X')) {
- hotend_offset[X_AXIS][target_extruder] = parser.value_linear_units();
- report = false;
- }
- if (parser.seenval('Y')) {
- hotend_offset[Y_AXIS][target_extruder] = parser.value_linear_units();
- report = false;
- }
-
- #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_NOZZLE) || ENABLED(PARKING_EXTRUDER)
- if (parser.seenval('Z')) {
- hotend_offset[Z_AXIS][target_extruder] = parser.value_linear_units();
- report = false;
- }
- #endif
-
- if (report) {
- SERIAL_ECHO_START();
- SERIAL_ECHOPGM(MSG_HOTEND_OFFSET);
- HOTEND_LOOP() {
- SERIAL_CHAR(' ');
- SERIAL_ECHO(hotend_offset[X_AXIS][e]);
- SERIAL_CHAR(',');
- SERIAL_ECHO(hotend_offset[Y_AXIS][e]);
- #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_NOZZLE) || ENABLED(PARKING_EXTRUDER)
- SERIAL_CHAR(',');
- SERIAL_ECHO(hotend_offset[Z_AXIS][e]);
- #endif
- }
- SERIAL_EOL();
- }
-
- #if ENABLED(DELTA)
- if (target_extruder == active_extruder)
- do_blocking_move_to_xy(current_position[X_AXIS], current_position[Y_AXIS], planner.max_feedrate_mm_s[X_AXIS]);
- #endif
- }
-
-#endif // HOTENDS > 1
-
-/**
- * M220: Set speed percentage factor, aka "Feed Rate" (M220 S95)
- */
-inline void gcode_M220() {
- if (parser.seenval('S')) feedrate_percentage = parser.value_int();
-}
-
-/**
- * M221: Set extrusion percentage (M221 T0 S95)
- */
-inline void gcode_M221() {
- if (get_target_extruder_from_command(221)) return;
- if (parser.seenval('S')) {
- planner.flow_percentage[target_extruder] = parser.value_int();
- planner.refresh_e_factor(target_extruder);
- }
- else {
- SERIAL_ECHO_START();
- SERIAL_CHAR('E');
- SERIAL_CHAR('0' + target_extruder);
- SERIAL_ECHOPAIR(" Flow: ", planner.flow_percentage[target_extruder]);
- SERIAL_CHAR('%');
- SERIAL_EOL();
- }
-}
-
-/**
- * M226: Wait until the specified pin reaches the state required (M226 P S)
- */
-inline void gcode_M226() {
- if (parser.seen('P')) {
- const int pin = parser.value_int(),
- pin_state = parser.intval('S', -1); // required pin state - default is inverted
-
- if (WITHIN(pin_state, -1, 1) && pin > -1 && !pin_is_protected(pin)) {
-
- int target = LOW;
-
- stepper.synchronize();
-
- pinMode(pin, INPUT);
- switch (pin_state) {
- case 1:
- target = HIGH;
- break;
- case 0:
- target = LOW;
- break;
- case -1:
- target = !digitalRead(pin);
- break;
- }
-
- while (digitalRead(pin) != target) idle();
-
- } // pin_state -1 0 1 && pin > -1
- } // parser.seen('P')
-}
-
-#if ENABLED(EXPERIMENTAL_I2CBUS)
-
- /**
- * M260: Send data to a I2C slave device
- *
- * This is a PoC, the formating and arguments for the GCODE will
- * change to be more compatible, the current proposal is:
- *
- * M260 A ; Sets the I2C slave address the data will be sent to
- *
- * M260 B
- * M260 B
- * M260 B
- *
- * M260 S1 ; Send the buffered data and reset the buffer
- * M260 R1 ; Reset the buffer without sending data
- *
- */
- inline void gcode_M260() {
- // Set the target address
- if (parser.seen('A')) i2c.address(parser.value_byte());
-
- // Add a new byte to the buffer
- if (parser.seen('B')) i2c.addbyte(parser.value_byte());
-
- // Flush the buffer to the bus
- if (parser.seen('S')) i2c.send();
-
- // Reset and rewind the buffer
- else if (parser.seen('R')) i2c.reset();
- }
-
- /**
- * M261: Request X bytes from I2C slave device
- *
- * Usage: M261 A B
- */
- inline void gcode_M261() {
- if (parser.seen('A')) i2c.address(parser.value_byte());
-
- uint8_t bytes = parser.byteval('B', 1);
-
- if (i2c.addr && bytes && bytes <= TWIBUS_BUFFER_SIZE) {
- i2c.relay(bytes);
- }
- else {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM("Bad i2c request");
- }
- }
-
-#endif // EXPERIMENTAL_I2CBUS
-
-#if HAS_SERVOS
-
- /**
- * M280: Get or set servo position. P [S]
- */
- inline void gcode_M280() {
- if (!parser.seen('P')) return;
- const int servo_index = parser.value_int();
- if (WITHIN(servo_index, 0, NUM_SERVOS - 1)) {
- if (parser.seen('S'))
- MOVE_SERVO(servo_index, parser.value_int());
- else {
- SERIAL_ECHO_START();
- SERIAL_ECHOPAIR(" Servo ", servo_index);
- SERIAL_ECHOLNPAIR(": ", servo[servo_index].read());
- }
- }
- else {
- SERIAL_ERROR_START();
- SERIAL_ECHOPAIR("Servo ", servo_index);
- SERIAL_ECHOLNPGM(" out of range");
- }
- }
-
-#endif // HAS_SERVOS
-
-#if ENABLED(BABYSTEPPING)
-
- #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
- FORCE_INLINE void mod_zprobe_zoffset(const float &offs) {
- zprobe_zoffset += offs;
- SERIAL_ECHO_START();
- SERIAL_ECHOLNPAIR(MSG_PROBE_Z_OFFSET ": ", zprobe_zoffset);
- }
- #endif
-
- /**
- * M290: Babystepping
- */
- inline void gcode_M290() {
- #if ENABLED(BABYSTEP_XY)
- for (uint8_t a = X_AXIS; a <= Z_AXIS; a++)
- if (parser.seenval(axis_codes[a]) || (a == Z_AXIS && parser.seenval('S'))) {
- const float offs = constrain(parser.value_axis_units((AxisEnum)a), -2, 2);
- thermalManager.babystep_axis((AxisEnum)a, offs * planner.axis_steps_per_mm[a]);
- #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
- if (a == Z_AXIS && (!parser.seen('P') || parser.value_bool())) mod_zprobe_zoffset(offs);
- #endif
- }
- #else
- if (parser.seenval('Z') || parser.seenval('S')) {
- const float offs = constrain(parser.value_axis_units(Z_AXIS), -2, 2);
- thermalManager.babystep_axis(Z_AXIS, offs * planner.axis_steps_per_mm[Z_AXIS]);
- #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
- if (!parser.seen('P') || parser.value_bool()) mod_zprobe_zoffset(offs);
- #endif
- }
- #endif
- }
-
-#endif // BABYSTEPPING
-
-#if HAS_BUZZER
-
- /**
- * M300: Play beep sound S P
- */
- inline void gcode_M300() {
- uint16_t const frequency = parser.ushortval('S', 260);
- uint16_t duration = parser.ushortval('P', 1000);
-
- // Limits the tone duration to 0-5 seconds.
- NOMORE(duration, 5000);
-
- BUZZ(duration, frequency);
- }
-
-#endif // HAS_BUZZER
-
-#if ENABLED(PIDTEMP)
-
- /**
- * M301: Set PID parameters P I D (and optionally C, L)
- *
- * P[float] Kp term
- * I[float] Ki term (unscaled)
- * D[float] Kd term (unscaled)
- *
- * With PID_EXTRUSION_SCALING:
- *
- * C[float] Kc term
- * L[float] LPQ length
- */
- inline void gcode_M301() {
-
- // multi-extruder PID patch: M301 updates or prints a single extruder's PID values
- // default behaviour (omitting E parameter) is to update for extruder 0 only
- const uint8_t e = parser.byteval('E'); // extruder being updated
-
- if (e < HOTENDS) { // catch bad input value
- if (parser.seen('P')) PID_PARAM(Kp, e) = parser.value_float();
- if (parser.seen('I')) PID_PARAM(Ki, e) = scalePID_i(parser.value_float());
- if (parser.seen('D')) PID_PARAM(Kd, e) = scalePID_d(parser.value_float());
- #if ENABLED(PID_EXTRUSION_SCALING)
- if (parser.seen('C')) PID_PARAM(Kc, e) = parser.value_float();
- if (parser.seen('L')) lpq_len = parser.value_float();
- NOMORE(lpq_len, LPQ_MAX_LEN);
- #endif
-
- thermalManager.updatePID();
- SERIAL_ECHO_START();
- #if ENABLED(PID_PARAMS_PER_HOTEND)
- SERIAL_ECHOPAIR(" e:", e); // specify extruder in serial output
- #endif // PID_PARAMS_PER_HOTEND
- SERIAL_ECHOPAIR(" p:", PID_PARAM(Kp, e));
- SERIAL_ECHOPAIR(" i:", unscalePID_i(PID_PARAM(Ki, e)));
- SERIAL_ECHOPAIR(" d:", unscalePID_d(PID_PARAM(Kd, e)));
- #if ENABLED(PID_EXTRUSION_SCALING)
- //Kc does not have scaling applied above, or in resetting defaults
- SERIAL_ECHOPAIR(" c:", PID_PARAM(Kc, e));
- #endif
- SERIAL_EOL();
- }
- else {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_INVALID_EXTRUDER);
- }
- }
-
-#endif // PIDTEMP
-
-#if ENABLED(PIDTEMPBED)
-
- inline void gcode_M304() {
- if (parser.seen('P')) thermalManager.bedKp = parser.value_float();
- if (parser.seen('I')) thermalManager.bedKi = scalePID_i(parser.value_float());
- if (parser.seen('D')) thermalManager.bedKd = scalePID_d(parser.value_float());
-
- SERIAL_ECHO_START();
- SERIAL_ECHOPAIR(" p:", thermalManager.bedKp);
- SERIAL_ECHOPAIR(" i:", unscalePID_i(thermalManager.bedKi));
- SERIAL_ECHOLNPAIR(" d:", unscalePID_d(thermalManager.bedKd));
- }
-
-#endif // PIDTEMPBED
-
-#if defined(CHDK) || HAS_PHOTOGRAPH
-
- /**
- * M240: Trigger a camera by emulating a Canon RC-1
- * See http://www.doc-diy.net/photo/rc-1_hacked/
- */
- inline void gcode_M240() {
- #ifdef CHDK
-
- OUT_WRITE(CHDK, HIGH);
- chdkHigh = millis();
- chdkActive = true;
-
- #elif HAS_PHOTOGRAPH
-
- const uint8_t NUM_PULSES = 16;
- const float PULSE_LENGTH = 0.01524;
- for (int i = 0; i < NUM_PULSES; i++) {
- WRITE(PHOTOGRAPH_PIN, HIGH);
- _delay_ms(PULSE_LENGTH);
- WRITE(PHOTOGRAPH_PIN, LOW);
- _delay_ms(PULSE_LENGTH);
- }
- delay(7.33);
- for (int i = 0; i < NUM_PULSES; i++) {
- WRITE(PHOTOGRAPH_PIN, HIGH);
- _delay_ms(PULSE_LENGTH);
- WRITE(PHOTOGRAPH_PIN, LOW);
- _delay_ms(PULSE_LENGTH);
- }
-
- #endif // !CHDK && HAS_PHOTOGRAPH
- }
-
-#endif // CHDK || PHOTOGRAPH_PIN
-
-#if HAS_LCD_CONTRAST
-
- /**
- * M250: Read and optionally set the LCD contrast
- */
- inline void gcode_M250() {
- if (parser.seen('C')) set_lcd_contrast(parser.value_int());
- SERIAL_PROTOCOLPGM("lcd contrast value: ");
- SERIAL_PROTOCOL(lcd_contrast);
- SERIAL_EOL();
- }
-
-#endif // HAS_LCD_CONTRAST
-
-#if ENABLED(PREVENT_COLD_EXTRUSION)
-
- /**
- * M302: Allow cold extrudes, or set the minimum extrude temperature
- *
- * S sets the minimum extrude temperature
- * P enables (1) or disables (0) cold extrusion
- *
- * Examples:
- *
- * M302 ; report current cold extrusion state
- * M302 P0 ; enable cold extrusion checking
- * M302 P1 ; disables cold extrusion checking
- * M302 S0 ; always allow extrusion (disables checking)
- * M302 S170 ; only allow extrusion above 170
- * M302 S170 P1 ; set min extrude temp to 170 but leave disabled
- */
- inline void gcode_M302() {
- const bool seen_S = parser.seen('S');
- if (seen_S) {
- thermalManager.extrude_min_temp = parser.value_celsius();
- thermalManager.allow_cold_extrude = (thermalManager.extrude_min_temp == 0);
- }
-
- if (parser.seen('P'))
- thermalManager.allow_cold_extrude = (thermalManager.extrude_min_temp == 0) || parser.value_bool();
- else if (!seen_S) {
- // Report current state
- SERIAL_ECHO_START();
- SERIAL_ECHOPAIR("Cold extrudes are ", (thermalManager.allow_cold_extrude ? "en" : "dis"));
- SERIAL_ECHOPAIR("abled (min temp ", thermalManager.extrude_min_temp);
- SERIAL_ECHOLNPGM("C)");
- }
- }
-
-#endif // PREVENT_COLD_EXTRUSION
-
-/**
- * M303: PID relay autotune
- *
- * S sets the target temperature. (default 150C / 70C)
- * E (-1 for the bed) (default 0)
- * C
- * U with a non-zero value will apply the result to current settings
- */
-inline void gcode_M303() {
- #if HAS_PID_HEATING
- const int e = parser.intval('E'), c = parser.intval('C', 5);
- const bool u = parser.boolval('U');
-
- int16_t temp = parser.celsiusval('S', e < 0 ? 70 : 150);
-
- if (WITHIN(e, 0, HOTENDS - 1))
- target_extruder = e;
-
- #if DISABLED(BUSY_WHILE_HEATING)
- KEEPALIVE_STATE(NOT_BUSY);
- #endif
-
- thermalManager.PID_autotune(temp, e, c, u);
-
- #if DISABLED(BUSY_WHILE_HEATING)
- KEEPALIVE_STATE(IN_HANDLER);
- #endif
- #else
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_M303_DISABLED);
- #endif
-}
-
-#if ENABLED(MORGAN_SCARA)
-
- bool SCARA_move_to_cal(const uint8_t delta_a, const uint8_t delta_b) {
- if (IsRunning()) {
- forward_kinematics_SCARA(delta_a, delta_b);
- destination[X_AXIS] = cartes[X_AXIS];
- destination[Y_AXIS] = cartes[Y_AXIS];
- destination[Z_AXIS] = current_position[Z_AXIS];
- prepare_move_to_destination();
- return true;
- }
- return false;
- }
-
- /**
- * M360: SCARA calibration: Move to cal-position ThetaA (0 deg calibration)
- */
- inline bool gcode_M360() {
- SERIAL_ECHOLNPGM(" Cal: Theta 0");
- return SCARA_move_to_cal(0, 120);
- }
-
- /**
- * M361: SCARA calibration: Move to cal-position ThetaB (90 deg calibration - steps per degree)
- */
- inline bool gcode_M361() {
- SERIAL_ECHOLNPGM(" Cal: Theta 90");
- return SCARA_move_to_cal(90, 130);
- }
-
- /**
- * M362: SCARA calibration: Move to cal-position PsiA (0 deg calibration)
- */
- inline bool gcode_M362() {
- SERIAL_ECHOLNPGM(" Cal: Psi 0");
- return SCARA_move_to_cal(60, 180);
- }
-
- /**
- * M363: SCARA calibration: Move to cal-position PsiB (90 deg calibration - steps per degree)
- */
- inline bool gcode_M363() {
- SERIAL_ECHOLNPGM(" Cal: Psi 90");
- return SCARA_move_to_cal(50, 90);
- }
-
- /**
- * M364: SCARA calibration: Move to cal-position PsiC (90 deg to Theta calibration position)
- */
- inline bool gcode_M364() {
- SERIAL_ECHOLNPGM(" Cal: Theta-Psi 90");
- return SCARA_move_to_cal(45, 135);
- }
-
-#endif // SCARA
-
-#if ENABLED(EXT_SOLENOID)
-
- void enable_solenoid(const uint8_t num) {
- switch (num) {
- case 0:
- OUT_WRITE(SOL0_PIN, HIGH);
- break;
- #if HAS_SOLENOID_1 && EXTRUDERS > 1
- case 1:
- OUT_WRITE(SOL1_PIN, HIGH);
- break;
- #endif
- #if HAS_SOLENOID_2 && EXTRUDERS > 2
- case 2:
- OUT_WRITE(SOL2_PIN, HIGH);
- break;
- #endif
- #if HAS_SOLENOID_3 && EXTRUDERS > 3
- case 3:
- OUT_WRITE(SOL3_PIN, HIGH);
- break;
- #endif
- #if HAS_SOLENOID_4 && EXTRUDERS > 4
- case 4:
- OUT_WRITE(SOL4_PIN, HIGH);
- break;
- #endif
- default:
- SERIAL_ECHO_START();
- SERIAL_ECHOLNPGM(MSG_INVALID_SOLENOID);
- break;
- }
- }
-
- void enable_solenoid_on_active_extruder() { enable_solenoid(active_extruder); }
-
- void disable_all_solenoids() {
- OUT_WRITE(SOL0_PIN, LOW);
- #if HAS_SOLENOID_1 && EXTRUDERS > 1
- OUT_WRITE(SOL1_PIN, LOW);
- #endif
- #if HAS_SOLENOID_2 && EXTRUDERS > 2
- OUT_WRITE(SOL2_PIN, LOW);
- #endif
- #if HAS_SOLENOID_3 && EXTRUDERS > 3
- OUT_WRITE(SOL3_PIN, LOW);
- #endif
- #if HAS_SOLENOID_4 && EXTRUDERS > 4
- OUT_WRITE(SOL4_PIN, LOW);
- #endif
- }
-
- /**
- * M380: Enable solenoid on the active extruder
- */
- inline void gcode_M380() { enable_solenoid_on_active_extruder(); }
-
- /**
- * M381: Disable all solenoids
- */
- inline void gcode_M381() { disable_all_solenoids(); }
-
-#endif // EXT_SOLENOID
-
-/**
- * M400: Finish all moves
- */
-inline void gcode_M400() { stepper.synchronize(); }
-
-#if HAS_BED_PROBE
-
- /**
- * M401: Deploy and activate the Z probe
- */
- inline void gcode_M401() {
- DEPLOY_PROBE();
- report_current_position();
- }
-
- /**
- * M402: Deactivate and stow the Z probe
- */
- inline void gcode_M402() {
- STOW_PROBE();
- #ifdef Z_AFTER_PROBING
- move_z_after_probing();
- #endif
- report_current_position();
- }
-
-#endif // HAS_BED_PROBE
-
-#if ENABLED(FILAMENT_WIDTH_SENSOR)
-
- /**
- * M404: Display or set (in current units) the nominal filament width (3mm, 1.75mm ) W<3.0>
- */
- inline void gcode_M404() {
- if (parser.seen('W')) {
- filament_width_nominal = parser.value_linear_units();
- planner.volumetric_area_nominal = CIRCLE_AREA(filament_width_nominal * 0.5);
- }
- else {
- SERIAL_PROTOCOLPGM("Filament dia (nominal mm):");
- SERIAL_PROTOCOLLN(filament_width_nominal);
- }
- }
-
- /**
- * M405: Turn on filament sensor for control
- */
- inline void gcode_M405() {
- // This is technically a linear measurement, but since it's quantized to centimeters and is a different
- // unit than everything else, it uses parser.value_byte() instead of parser.value_linear_units().
- if (parser.seen('D')) {
- meas_delay_cm = parser.value_byte();
- NOMORE(meas_delay_cm, MAX_MEASUREMENT_DELAY);
- }
-
- if (filwidth_delay_index[1] == -1) { // Initialize the ring buffer if not done since startup
- const int8_t temp_ratio = thermalManager.widthFil_to_size_ratio();
-
- for (uint8_t i = 0; i < COUNT(measurement_delay); ++i)
- measurement_delay[i] = temp_ratio;
-
- filwidth_delay_index[0] = filwidth_delay_index[1] = 0;
- }
-
- filament_sensor = true;
- }
-
- /**
- * M406: Turn off filament sensor for control
- */
- inline void gcode_M406() {
- filament_sensor = false;
- planner.calculate_volumetric_multipliers(); // Restore correct 'volumetric_multiplier' value
- }
-
- /**
- * M407: Get measured filament diameter on serial output
- */
- inline void gcode_M407() {
- SERIAL_PROTOCOLPGM("Filament dia (measured mm):");
- SERIAL_PROTOCOLLN(filament_width_meas);
- }
-
-#endif // FILAMENT_WIDTH_SENSOR
-
-void quickstop_stepper() {
- stepper.quick_stop();
- stepper.synchronize();
- set_current_from_steppers_for_axis(ALL_AXES);
- SYNC_PLAN_POSITION_KINEMATIC();
-}
-
-#if HAS_LEVELING
-
- //#define M420_C_USE_MEAN
-
- /**
- * M420: Enable/Disable Bed Leveling and/or set the Z fade height.
- *
- * S[bool] Turns leveling on or off
- * Z[height] Sets the Z fade height (0 or none to disable)
- * V[bool] Verbose - Print the leveling grid
- *
- * With AUTO_BED_LEVELING_UBL only:
- *
- * L[index] Load UBL mesh from index (0 is default)
- * T[map] 0:Human-readable 1:CSV 2:"LCD" 4:Compact
- *
- * With mesh-based leveling only:
- *
- * C Center mesh on the mean of the lowest and highest
- */
- inline void gcode_M420() {
- const bool seen_S = parser.seen('S');
- bool to_enable = seen_S ? parser.value_bool() : planner.leveling_active;
-
- // If disabling leveling do it right away
- // (Don't disable for just M420 or M420 V)
- if (seen_S && !to_enable) set_bed_leveling_enabled(false);
-
- const float oldpos[] = { current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] };
-
- #if ENABLED(AUTO_BED_LEVELING_UBL)
-
- // L to load a mesh from the EEPROM
- if (parser.seen('L')) {
-
- set_bed_leveling_enabled(false);
-
- #if ENABLED(EEPROM_SETTINGS)
- const int8_t storage_slot = parser.has_value() ? parser.value_int() : ubl.storage_slot;
- const int16_t a = settings.calc_num_meshes();
-
- if (!a) {
- SERIAL_PROTOCOLLNPGM("?EEPROM storage not available.");
- return;
- }
-
- if (!WITHIN(storage_slot, 0, a - 1)) {
- SERIAL_PROTOCOLLNPGM("?Invalid storage slot.");
- SERIAL_PROTOCOLLNPAIR("?Use 0 to ", a - 1);
- return;
- }
-
- settings.load_mesh(storage_slot);
- ubl.storage_slot = storage_slot;
-
- #else
-
- SERIAL_PROTOCOLLNPGM("?EEPROM storage not available.");
- return;
-
- #endif
- }
-
- // L or V display the map info
- if (parser.seen('L') || parser.seen('V')) {
- ubl.display_map(parser.byteval('T'));
- SERIAL_ECHOLNPAIR("ubl.mesh_is_valid = ", ubl.mesh_is_valid());
- SERIAL_ECHOLNPAIR("ubl.storage_slot = ", ubl.storage_slot);
- }
-
- #endif // AUTO_BED_LEVELING_UBL
-
- #if HAS_MESH
-
- #if ENABLED(MESH_BED_LEVELING)
- #define Z_VALUES(X,Y) mbl.z_values[X][Y]
- #else
- #define Z_VALUES(X,Y) z_values[X][Y]
- #endif
-
- // Subtract the given value or the mean from all mesh values
- if (leveling_is_valid() && parser.seen('C')) {
- const float cval = parser.value_float();
- #if ENABLED(AUTO_BED_LEVELING_UBL)
-
- set_bed_leveling_enabled(false);
- ubl.adjust_mesh_to_mean(true, cval);
-
- #else
-
- #if ENABLED(M420_C_USE_MEAN)
-
- // Get the sum and average of all mesh values
- float mesh_sum = 0;
- for (uint8_t x = GRID_MAX_POINTS_X; x--;)
- for (uint8_t y = GRID_MAX_POINTS_Y; y--;)
- mesh_sum += Z_VALUES(x, y);
- const float zmean = mesh_sum / float(GRID_MAX_POINTS);
-
- #else
-
- // Find the low and high mesh values
- float lo_val = 100, hi_val = -100;
- for (uint8_t x = GRID_MAX_POINTS_X; x--;)
- for (uint8_t y = GRID_MAX_POINTS_Y; y--;) {
- const float z = Z_VALUES(x, y);
- NOMORE(lo_val, z);
- NOLESS(hi_val, z);
- }
- // Take the mean of the lowest and highest
- const float zmean = (lo_val + hi_val) / 2.0 + cval;
-
- #endif
-
- // If not very close to 0, adjust the mesh
- if (!NEAR_ZERO(zmean)) {
- set_bed_leveling_enabled(false);
- // Subtract the mean from all values
- for (uint8_t x = GRID_MAX_POINTS_X; x--;)
- for (uint8_t y = GRID_MAX_POINTS_Y; y--;)
- Z_VALUES(x, y) -= zmean;
- #if ENABLED(ABL_BILINEAR_SUBDIVISION)
- bed_level_virt_interpolate();
- #endif
- }
-
- #endif
- }
-
- #endif // HAS_MESH
-
- // V to print the matrix or mesh
- if (parser.seen('V')) {
- #if ABL_PLANAR
- planner.bed_level_matrix.debug(PSTR("Bed Level Correction Matrix:"));
- #else
- if (leveling_is_valid()) {
- #if ENABLED(AUTO_BED_LEVELING_BILINEAR)
- print_bilinear_leveling_grid();
- #if ENABLED(ABL_BILINEAR_SUBDIVISION)
- print_bilinear_leveling_grid_virt();
- #endif
- #elif ENABLED(MESH_BED_LEVELING)
- SERIAL_ECHOLNPGM("Mesh Bed Level data:");
- mbl.report_mesh();
- #endif
- }
- #endif
- }
-
- #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
- if (parser.seen('Z')) set_z_fade_height(parser.value_linear_units(), false);
- #endif
-
- // Enable leveling if specified, or if previously active
- set_bed_leveling_enabled(to_enable);
-
- // Error if leveling failed to enable or reenable
- if (to_enable && !planner.leveling_active) {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_M420_FAILED);
- }
-
- SERIAL_ECHO_START();
- SERIAL_ECHOLNPAIR("Bed Leveling ", planner.leveling_active ? MSG_ON : MSG_OFF);
-
- #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
- SERIAL_ECHO_START();
- SERIAL_ECHOPGM("Fade Height ");
- if (planner.z_fade_height > 0.0)
- SERIAL_ECHOLN(planner.z_fade_height);
- else
- SERIAL_ECHOLNPGM(MSG_OFF);
- #endif
-
- // Report change in position
- if (memcmp(oldpos, current_position, sizeof(oldpos)))
- report_current_position();
- }
-
-#endif // HAS_LEVELING
-
-#if ENABLED(MESH_BED_LEVELING)
-
- /**
- * M421: Set a single Mesh Bed Leveling Z coordinate
- *
- * Usage:
- * M421 X Y Z
- * M421 X Y Q
- * M421 I J Z
- * M421 I J Q
- */
- inline void gcode_M421() {
- const bool hasX = parser.seen('X'), hasI = parser.seen('I');
- const int8_t ix = hasI ? parser.value_int() : hasX ? mbl.probe_index_x(parser.value_linear_units()) : -1;
- const bool hasY = parser.seen('Y'), hasJ = parser.seen('J');
- const int8_t iy = hasJ ? parser.value_int() : hasY ? mbl.probe_index_y(parser.value_linear_units()) : -1;
- const bool hasZ = parser.seen('Z'), hasQ = !hasZ && parser.seen('Q');
-
- if (int(hasI && hasJ) + int(hasX && hasY) != 1 || !(hasZ || hasQ)) {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_M421_PARAMETERS);
- }
- else if (ix < 0 || iy < 0) {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_MESH_XY);
- }
- else
- mbl.set_z(ix, iy, parser.value_linear_units() + (hasQ ? mbl.z_values[ix][iy] : 0));
- }
-
-#elif ENABLED(AUTO_BED_LEVELING_BILINEAR)
-
- /**
- * M421: Set a single Mesh Bed Leveling Z coordinate
- *
- * Usage:
- * M421 I J Z
- * M421 I J Q
- */
- inline void gcode_M421() {
- int8_t ix = parser.intval('I', -1), iy = parser.intval('J', -1);
- const bool hasI = ix >= 0,
- hasJ = iy >= 0,
- hasZ = parser.seen('Z'),
- hasQ = !hasZ && parser.seen('Q');
-
- if (!hasI || !hasJ || !(hasZ || hasQ)) {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_M421_PARAMETERS);
- }
- else if (!WITHIN(ix, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1)) {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_MESH_XY);
- }
- else {
- z_values[ix][iy] = parser.value_linear_units() + (hasQ ? z_values[ix][iy] : 0);
- #if ENABLED(ABL_BILINEAR_SUBDIVISION)
- bed_level_virt_interpolate();
- #endif
- }
- }
-
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
-
- /**
- * M421: Set a single Mesh Bed Leveling Z coordinate
- *
- * Usage:
- * M421 I J Z
- * M421 I J Q
- * M421 I J N
- * M421 C Z
- * M421 C Q
- */
- inline void gcode_M421() {
- int8_t ix = parser.intval('I', -1), iy = parser.intval('J', -1);
- const bool hasI = ix >= 0,
- hasJ = iy >= 0,
- hasC = parser.seen('C'),
- hasN = parser.seen('N'),
- hasZ = parser.seen('Z'),
- hasQ = !hasZ && parser.seen('Q');
-
- if (hasC) {
- const mesh_index_pair location = ubl.find_closest_mesh_point_of_type(REAL, current_position[X_AXIS], current_position[Y_AXIS], USE_NOZZLE_AS_REFERENCE, NULL);
- ix = location.x_index;
- iy = location.y_index;
- }
-
- if (int(hasC) + int(hasI && hasJ) != 1 || !(hasZ || hasQ || hasN)) {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_M421_PARAMETERS);
- }
- else if (!WITHIN(ix, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1)) {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_MESH_XY);
- }
- else
- ubl.z_values[ix][iy] = hasN ? NAN : parser.value_linear_units() + (hasQ ? ubl.z_values[ix][iy] : 0);
- }
-
-#endif // AUTO_BED_LEVELING_UBL
-
-#if HAS_M206_COMMAND
-
- /**
- * M428: Set home_offset based on the distance between the
- * current_position and the nearest "reference point."
- * If an axis is past center its endstop position
- * is the reference-point. Otherwise it uses 0. This allows
- * the Z offset to be set near the bed when using a max endstop.
- *
- * M428 can't be used more than 2cm away from 0 or an endstop.
- *
- * Use M206 to set these values directly.
- */
- inline void gcode_M428() {
- if (axis_unhomed_error()) return;
-
- float diff[XYZ];
- LOOP_XYZ(i) {
- diff[i] = base_home_pos((AxisEnum)i) - current_position[i];
- if (!WITHIN(diff[i], -20, 20) && home_dir((AxisEnum)i) > 0)
- diff[i] = -current_position[i];
- if (!WITHIN(diff[i], -20, 20)) {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_M428_TOO_FAR);
- LCD_ALERTMESSAGEPGM("Err: Too far!");
- BUZZ(200, 40);
- return;
- }
- }
-
- LOOP_XYZ(i) set_home_offset((AxisEnum)i, diff[i]);
- report_current_position();
- LCD_MESSAGEPGM(MSG_HOME_OFFSETS_APPLIED);
- BUZZ(100, 659);
- BUZZ(100, 698);
- }
-
-#endif // HAS_M206_COMMAND
-
-/**
- * M500: Store settings in EEPROM
- */
-inline void gcode_M500() {
- (void)settings.save();
-}
-
-/**
- * M501: Read settings from EEPROM
- */
-inline void gcode_M501() {
- (void)settings.load();
-}
-
-/**
- * M502: Revert to default settings
- */
-inline void gcode_M502() {
- (void)settings.reset();
-}
-
-#if DISABLED(DISABLE_M503)
- /**
- * M503: print settings currently in memory
- */
- inline void gcode_M503() {
- (void)settings.report(parser.seen('S') && !parser.value_bool());
- }
-#endif
-
-#if ENABLED(EEPROM_SETTINGS)
- /**
- * M504: Validate EEPROM Contents
- */
- inline void gcode_M504() {
- if (settings.validate()) {
- SERIAL_ECHO_START();
- SERIAL_ECHOLNPGM("EEPROM OK");
- }
- }
-#endif
-
-#if ENABLED(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED)
-
- /**
- * M540: Set whether SD card print should abort on endstop hit (M540 S<0|1>)
- */
- inline void gcode_M540() {
- if (parser.seen('S')) stepper.abort_on_endstop_hit = parser.value_bool();
- }
-
-#endif // ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
-
-#if HAS_BED_PROBE
-
- inline void gcode_M851() {
- if (parser.seenval('Z')) {
- const float value = parser.value_linear_units();
- if (WITHIN(value, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX))
- zprobe_zoffset = value;
- else {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM("?Z out of range (" STRINGIFY(Z_PROBE_OFFSET_RANGE_MIN) " to " STRINGIFY(Z_PROBE_OFFSET_RANGE_MAX) ")");
- }
- return;
- }
- SERIAL_ECHO_START();
- SERIAL_ECHOPGM(MSG_PROBE_Z_OFFSET);
- SERIAL_ECHOLNPAIR(": ", zprobe_zoffset);
- }
-
-#endif // HAS_BED_PROBE
-
-#if ENABLED(SKEW_CORRECTION_GCODE)
-
- /**
- * M852: Get or set the machine skew factors. Reports current values with no arguments.
- *
- * S[xy_factor] - Alias for 'I'
- * I[xy_factor] - New XY skew factor
- * J[xz_factor] - New XZ skew factor
- * K[yz_factor] - New YZ skew factor
- */
- inline void gcode_M852() {
- uint8_t ijk = 0, badval = 0, setval = 0;
-
- if (parser.seen('I') || parser.seen('S')) {
- ++ijk;
- const float value = parser.value_linear_units();
- if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) {
- if (planner.xy_skew_factor != value) {
- planner.xy_skew_factor = value;
- ++setval;
- }
- }
- else
- ++badval;
- }
-
- #if ENABLED(SKEW_CORRECTION_FOR_Z)
-
- if (parser.seen('J')) {
- ++ijk;
- const float value = parser.value_linear_units();
- if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) {
- if (planner.xz_skew_factor != value) {
- planner.xz_skew_factor = value;
- ++setval;
- }
- }
- else
- ++badval;
- }
-
- if (parser.seen('K')) {
- ++ijk;
- const float value = parser.value_linear_units();
- if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) {
- if (planner.yz_skew_factor != value) {
- planner.yz_skew_factor = value;
- ++setval;
- }
- }
- else
- ++badval;
- }
-
- #endif
-
- if (badval)
- SERIAL_ECHOLNPGM(MSG_SKEW_MIN " " STRINGIFY(SKEW_FACTOR_MIN) " " MSG_SKEW_MAX " " STRINGIFY(SKEW_FACTOR_MAX));
-
- // When skew is changed the current position changes
- if (setval) {
- set_current_from_steppers_for_axis(ALL_AXES);
- SYNC_PLAN_POSITION_KINEMATIC();
- report_current_position();
- }
-
- if (!ijk) {
- SERIAL_ECHO_START();
- SERIAL_ECHOPGM(MSG_SKEW_FACTOR " XY: ");
- SERIAL_ECHO_F(planner.xy_skew_factor, 6);
- SERIAL_EOL();
- #if ENABLED(SKEW_CORRECTION_FOR_Z)
- SERIAL_ECHOPAIR(" XZ: ", planner.xz_skew_factor);
- SERIAL_ECHOLNPAIR(" YZ: ", planner.yz_skew_factor);
- #else
- SERIAL_EOL();
- #endif
- }
- }
-
-#endif // SKEW_CORRECTION_GCODE
-
-#if ENABLED(ADVANCED_PAUSE_FEATURE)
-
- /**
- * M600: Pause for filament change
- *
- * E[distance] - Retract the filament this far
- * Z[distance] - Move the Z axis by this distance
- * X[position] - Move to this X position, with Y
- * Y[position] - Move to this Y position, with X
- * U[distance] - Retract distance for removal (manual reload)
- * L[distance] - Extrude distance for insertion (manual reload)
- * B[count] - Number of times to beep, -1 for indefinite (if equipped with a buzzer)
- * T[toolhead] - Select extruder for filament change
- *
- * Default values are used for omitted arguments.
- */
- inline void gcode_M600() {
- point_t park_point = NOZZLE_PARK_POINT;
-
- if (get_target_extruder_from_command(600)) return;
-
- // Show initial message
- #if ENABLED(ULTIPANEL)
- lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT, ADVANCED_PAUSE_MODE_PAUSE_PRINT, target_extruder);
- #endif
-
- #if ENABLED(HOME_BEFORE_FILAMENT_CHANGE)
- // Don't allow filament change without homing first
- if (axis_unhomed_error()) home_all_axes();
- #endif
-
- #if EXTRUDERS > 1
- // Change toolhead if specified
- uint8_t active_extruder_before_filament_change = active_extruder;
- if (active_extruder != target_extruder)
- tool_change(target_extruder, 0, true);
- #endif
-
- // Initial retract before move to filament change position
- const float retract = -FABS(parser.seen('E') ? parser.value_axis_units(E_AXIS) : 0
- #ifdef PAUSE_PARK_RETRACT_LENGTH
- + (PAUSE_PARK_RETRACT_LENGTH)
- #endif
- );
-
- // Lift Z axis
- if (parser.seenval('Z')) park_point.z = parser.linearval('Z');
-
- // Move XY axes to filament change position or given position
- if (parser.seenval('X')) park_point.x = parser.linearval('X');
- if (parser.seenval('Y')) park_point.y = parser.linearval('Y');
-
- #if HOTENDS > 1 && DISABLED(DUAL_X_CARRIAGE) && DISABLED(DELTA)
- park_point.x += (active_extruder ? hotend_offset[X_AXIS][active_extruder] : 0);
- park_point.y += (active_extruder ? hotend_offset[Y_AXIS][active_extruder] : 0);
- #endif
-
- // Unload filament
- const float unload_length = -FABS(parser.seen('U') ? parser.value_axis_units(E_AXIS) :
- filament_change_unload_length[active_extruder]);
-
- // Slow load filament
- constexpr float slow_load_length = FILAMENT_CHANGE_SLOW_LOAD_LENGTH;
-
- // Fast load filament
- const float fast_load_length = FABS(parser.seen('L') ? parser.value_axis_units(E_AXIS) :
- filament_change_load_length[active_extruder]);
-
- const int beep_count = parser.intval('B',
- #ifdef FILAMENT_CHANGE_ALERT_BEEPS
- FILAMENT_CHANGE_ALERT_BEEPS
- #else
- -1
- #endif
- );
-
- const bool job_running = print_job_timer.isRunning();
-
- if (pause_print(retract, park_point, unload_length, true)) {
- wait_for_filament_reload(beep_count);
- resume_print(slow_load_length, fast_load_length, ADVANCED_PAUSE_PURGE_LENGTH, beep_count);
- }
-
- #if EXTRUDERS > 1
- // Restore toolhead if it was changed
- if (active_extruder_before_filament_change != active_extruder)
- tool_change(active_extruder_before_filament_change, 0, true);
- #endif
-
- // Resume the print job timer if it was running
- if (job_running) print_job_timer.start();
- }
-
- /**
- * M603: Configure filament change
- *
- * T[toolhead] - Select extruder to configure, active extruder if not specified
- * U[distance] - Retract distance for removal, for the specified extruder
- * L[distance] - Extrude distance for insertion, for the specified extruder
- *
- */
- inline void gcode_M603() {
-
- if (get_target_extruder_from_command(603)) return;
-
- // Unload length
- if (parser.seen('U')) {
- filament_change_unload_length[target_extruder] = FABS(parser.value_axis_units(E_AXIS));
- #if ENABLED(PREVENT_LENGTHY_EXTRUDE)
- NOMORE(filament_change_unload_length[target_extruder], EXTRUDE_MAXLENGTH);
- #endif
- }
-
- // Load length
- if (parser.seen('L')) {
- filament_change_load_length[target_extruder] = FABS(parser.value_axis_units(E_AXIS));
- #if ENABLED(PREVENT_LENGTHY_EXTRUDE)
- NOMORE(filament_change_load_length[target_extruder], EXTRUDE_MAXLENGTH);
- #endif
- }
- }
-
-#endif // ADVANCED_PAUSE_FEATURE
-
-#if ENABLED(MK2_MULTIPLEXER)
-
- inline void select_multiplexed_stepper(const uint8_t e) {
- stepper.synchronize();
- disable_e_steppers();
- WRITE(E_MUX0_PIN, TEST(e, 0) ? HIGH : LOW);
- WRITE(E_MUX1_PIN, TEST(e, 1) ? HIGH : LOW);
- WRITE(E_MUX2_PIN, TEST(e, 2) ? HIGH : LOW);
- safe_delay(100);
- }
-
-#endif // MK2_MULTIPLEXER
-
-#if ENABLED(DUAL_X_CARRIAGE)
-
- /**
- * M605: Set dual x-carriage movement mode
- *
- * M605 S0: Full control mode. The slicer has full control over x-carriage movement
- * M605 S1: Auto-park mode. The inactive head will auto park/unpark without slicer involvement
- * M605 S2 [Xnnn] [Rmmm]: Duplication mode. The second extruder will duplicate the first with nnn
- * units x-offset and an optional differential hotend temperature of
- * mmm degrees. E.g., with "M605 S2 X100 R2" the second extruder will duplicate
- * the first with a spacing of 100mm in the x direction and 2 degrees hotter.
- *
- * Note: the X axis should be homed after changing dual x-carriage mode.
- */
- inline void gcode_M605() {
- stepper.synchronize();
- if (parser.seen('S')) dual_x_carriage_mode = (DualXMode)parser.value_byte();
- switch (dual_x_carriage_mode) {
- case DXC_FULL_CONTROL_MODE:
- case DXC_AUTO_PARK_MODE:
- break;
- case DXC_DUPLICATION_MODE:
- if (parser.seen('X')) duplicate_extruder_x_offset = max(parser.value_linear_units(), X2_MIN_POS - x_home_pos(0));
- if (parser.seen('R')) duplicate_extruder_temp_offset = parser.value_celsius_diff();
- SERIAL_ECHO_START();
- SERIAL_ECHOPGM(MSG_HOTEND_OFFSET);
- SERIAL_CHAR(' ');
- SERIAL_ECHO(hotend_offset[X_AXIS][0]);
- SERIAL_CHAR(',');
- SERIAL_ECHO(hotend_offset[Y_AXIS][0]);
- SERIAL_CHAR(' ');
- SERIAL_ECHO(duplicate_extruder_x_offset);
- SERIAL_CHAR(',');
- SERIAL_ECHOLN(hotend_offset[Y_AXIS][1]);
- break;
- default:
- dual_x_carriage_mode = DEFAULT_DUAL_X_CARRIAGE_MODE;
- break;
- }
- active_extruder_parked = false;
- extruder_duplication_enabled = false;
- delayed_move_time = 0;
- }
-
-#elif ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
-
- inline void gcode_M605() {
- stepper.synchronize();
- extruder_duplication_enabled = parser.intval('S') == (int)DXC_DUPLICATION_MODE;
- SERIAL_ECHO_START();
- SERIAL_ECHOLNPAIR(MSG_DUPLICATION_MODE, extruder_duplication_enabled ? MSG_ON : MSG_OFF);
- }
-
-#endif // DUAL_NOZZLE_DUPLICATION_MODE
-
-#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
-
- /**
- * M701: Load filament
- *
- * T[extruder] - Optional extruder number. Current extruder if omitted.
- * Z[distance] - Move the Z axis by this distance
- * L[distance] - Extrude distance for insertion (positive value) (manual reload)
- *
- * Default values are used for omitted arguments.
- */
- inline void gcode_M701() {
- point_t park_point = NOZZLE_PARK_POINT;
-
- #if ENABLED(NO_MOTION_BEFORE_HOMING)
- // Only raise Z if the machine is homed
- if (axis_unhomed_error()) park_point.z = 0;
- #endif
-
- if (get_target_extruder_from_command(701)) return;
-
- // Z axis lift
- if (parser.seenval('Z')) park_point.z = parser.linearval('Z');
-
- // Show initial "wait for load" message
- #if ENABLED(ULTIPANEL)
- lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_LOAD, ADVANCED_PAUSE_MODE_LOAD_FILAMENT, target_extruder);
- #endif
-
- #if EXTRUDERS > 1
- // Change toolhead if specified
- uint8_t active_extruder_before_filament_change = active_extruder;
- if (active_extruder != target_extruder)
- tool_change(target_extruder, 0, true);
- #endif
-
- // Lift Z axis
- if (park_point.z > 0)
- do_blocking_move_to_z(min(current_position[Z_AXIS] + park_point.z, Z_MAX_POS), NOZZLE_PARK_Z_FEEDRATE);
-
- constexpr float slow_load_length = FILAMENT_CHANGE_SLOW_LOAD_LENGTH;
- const float fast_load_length = FABS(parser.seen('L') ? parser.value_axis_units(E_AXIS) : filament_change_load_length[active_extruder]);
- load_filament(slow_load_length, fast_load_length, ADVANCED_PAUSE_PURGE_LENGTH, FILAMENT_CHANGE_ALERT_BEEPS,
- true, thermalManager.wait_for_heating(target_extruder), ADVANCED_PAUSE_MODE_LOAD_FILAMENT);
-
- // Restore Z axis
- if (park_point.z > 0)
- do_blocking_move_to_z(max(current_position[Z_AXIS] - park_point.z, 0), NOZZLE_PARK_Z_FEEDRATE);
-
- #if EXTRUDERS > 1
- // Restore toolhead if it was changed
- if (active_extruder_before_filament_change != active_extruder)
- tool_change(active_extruder_before_filament_change, 0, true);
- #endif
-
- // Show status screen
- #if ENABLED(ULTIPANEL)
- lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS);
- #endif
- }
-
- /**
- * M702: Unload filament
- *
- * T[extruder] - Optional extruder number. If omitted, current extruder
- * (or ALL extruders with FILAMENT_UNLOAD_ALL_EXTRUDERS).
- * Z[distance] - Move the Z axis by this distance
- * U[distance] - Retract distance for removal (manual reload)
- *
- * Default values are used for omitted arguments.
- */
- inline void gcode_M702() {
- point_t park_point = NOZZLE_PARK_POINT;
-
- #if ENABLED(NO_MOTION_BEFORE_HOMING)
- // Only raise Z if the machine is homed
- if (axis_unhomed_error()) park_point.z = 0;
- #endif
-
- if (get_target_extruder_from_command(702)) return;
-
- // Z axis lift
- if (parser.seenval('Z')) park_point.z = parser.linearval('Z');
-
- // Show initial message
- #if ENABLED(ULTIPANEL)
- lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_UNLOAD, ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, target_extruder);
- #endif
-
- #if EXTRUDERS > 1
- // Change toolhead if specified
- uint8_t active_extruder_before_filament_change = active_extruder;
- if (active_extruder != target_extruder)
- tool_change(target_extruder, 0, true);
- #endif
-
- // Lift Z axis
- if (park_point.z > 0)
- do_blocking_move_to_z(min(current_position[Z_AXIS] + park_point.z, Z_MAX_POS), NOZZLE_PARK_Z_FEEDRATE);
-
- // Unload filament
- #if EXTRUDERS > 1 && ENABLED(FILAMENT_UNLOAD_ALL_EXTRUDERS)
- if (!parser.seenval('T')) {
- HOTEND_LOOP() {
- if (e != active_extruder) tool_change(e, 0, true);
- unload_filament(-filament_change_unload_length[e], true, ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT);
- }
- }
- else
- #endif
- {
- // Unload length
- const float unload_length = -FABS(parser.seen('U') ? parser.value_axis_units(E_AXIS) :
- filament_change_unload_length[target_extruder]);
-
- unload_filament(unload_length, true, ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT);
- }
-
- // Restore Z axis
- if (park_point.z > 0)
- do_blocking_move_to_z(max(current_position[Z_AXIS] - park_point.z, 0), NOZZLE_PARK_Z_FEEDRATE);
-
- #if EXTRUDERS > 1
- // Restore toolhead if it was changed
- if (active_extruder_before_filament_change != active_extruder)
- tool_change(active_extruder_before_filament_change, 0, true);
- #endif
-
- // Show status screen
- #if ENABLED(ULTIPANEL)
- lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS);
- #endif
- }
-
-#endif // FILAMENT_LOAD_UNLOAD_GCODES
-
-#if ENABLED(LIN_ADVANCE)
- /**
- * M900: Get or Set Linear Advance K-factor
- *
- * K Set advance K factor
- */
- inline void gcode_M900() {
- if (parser.seenval('K')) {
- const float newK = parser.floatval('K');
- if (WITHIN(newK, 0, 10)) {
- stepper.synchronize();
- planner.extruder_advance_K = newK;
- }
- else
- SERIAL_PROTOCOLLNPGM("?K value out of range (0-10).");
- }
- else {
- SERIAL_ECHO_START();
- SERIAL_ECHOLNPAIR("Advance K=", planner.extruder_advance_K);
- }
- }
-#endif // LIN_ADVANCE
-
-#if HAS_TRINAMIC
- #if ENABLED(TMC_DEBUG)
- inline void gcode_M122() {
- if (parser.seen('S'))
- tmc_set_report_status(parser.value_bool());
- else
- tmc_report_all();
- }
- #endif // TMC_DEBUG
-
- /**
- * M906: Set motor current in milliamps using axis codes X, Y, Z, E
- * Report driver currents when no axis specified
- */
- inline void gcode_M906() {
- #define TMC_SAY_CURRENT(Q) tmc_get_current(stepper##Q, TMC_##Q)
- #define TMC_SET_CURRENT(Q) tmc_set_current(stepper##Q, TMC_##Q, value)
-
- bool report = true;
- const uint8_t index = parser.byteval('I');
- LOOP_XYZE(i) if (uint16_t value = parser.intval(axis_codes[i])) {
- report = false;
- switch (i) {
- case X_AXIS:
- #if X_IS_TRINAMIC
- if (index == 0) TMC_SET_CURRENT(X);
- #endif
- #if X2_IS_TRINAMIC
- if (index == 1) TMC_SET_CURRENT(X2);
- #endif
- break;
- case Y_AXIS:
- #if Y_IS_TRINAMIC
- if (index == 0) TMC_SET_CURRENT(Y);
- #endif
- #if Y2_IS_TRINAMIC
- if (index == 1) TMC_SET_CURRENT(Y2);
- #endif
- break;
- case Z_AXIS:
- #if Z_IS_TRINAMIC
- if (index == 0) TMC_SET_CURRENT(Z);
- #endif
- #if Z2_IS_TRINAMIC
- if (index == 1) TMC_SET_CURRENT(Z2);
- #endif
- break;
- case E_AXIS: {
- if (get_target_extruder_from_command(906)) return;
- switch (target_extruder) {
- #if E0_IS_TRINAMIC
- case 0: TMC_SET_CURRENT(E0); break;
- #endif
- #if E1_IS_TRINAMIC
- case 1: TMC_SET_CURRENT(E1); break;
- #endif
- #if E2_IS_TRINAMIC
- case 2: TMC_SET_CURRENT(E2); break;
- #endif
- #if E3_IS_TRINAMIC
- case 3: TMC_SET_CURRENT(E3); break;
- #endif
- #if E4_IS_TRINAMIC
- case 4: TMC_SET_CURRENT(E4); break;
- #endif
- }
- } break;
- }
- }
-
- if (report) LOOP_XYZE(i) switch (i) {
- case X_AXIS:
- #if X_IS_TRINAMIC
- TMC_SAY_CURRENT(X);
- #endif
- #if X2_IS_TRINAMIC
- TMC_SAY_CURRENT(X2);
- #endif
- break;
- case Y_AXIS:
- #if Y_IS_TRINAMIC
- TMC_SAY_CURRENT(Y);
- #endif
- #if Y2_IS_TRINAMIC
- TMC_SAY_CURRENT(Y2);
- #endif
- break;
- case Z_AXIS:
- #if Z_IS_TRINAMIC
- TMC_SAY_CURRENT(Z);
- #endif
- #if Z2_IS_TRINAMIC
- TMC_SAY_CURRENT(Z2);
- #endif
- break;
- case E_AXIS:
- #if E0_IS_TRINAMIC
- TMC_SAY_CURRENT(E0);
- #endif
- #if E1_IS_TRINAMIC
- TMC_SAY_CURRENT(E1);
- #endif
- #if E2_IS_TRINAMIC
- TMC_SAY_CURRENT(E2);
- #endif
- #if E3_IS_TRINAMIC
- TMC_SAY_CURRENT(E3);
- #endif
- #if E4_IS_TRINAMIC
- TMC_SAY_CURRENT(E4);
- #endif
- break;
- }
- }
-
- /**
- * M911: Report TMC stepper driver overtemperature pre-warn flag
- * The flag is held by the library and persist until manually cleared by M912
- */
- inline void gcode_M911() {
- #if ENABLED(X_IS_TMC2130) || (ENABLED(X_IS_TMC2208) && PIN_EXISTS(X_SERIAL_RX)) || ENABLED(IS_TRAMS)
- tmc_report_otpw(stepperX, TMC_X);
- #endif
- #if ENABLED(Y_IS_TMC2130) || (ENABLED(Y_IS_TMC2208) && PIN_EXISTS(Y_SERIAL_RX)) || ENABLED(IS_TRAMS)
- tmc_report_otpw(stepperY, TMC_Y);
- #endif
- #if ENABLED(Z_IS_TMC2130) || (ENABLED(Z_IS_TMC2208) && PIN_EXISTS(Z_SERIAL_RX)) || ENABLED(IS_TRAMS)
- tmc_report_otpw(stepperZ, TMC_Z);
- #endif
- #if ENABLED(E0_IS_TMC2130) || (ENABLED(E0_IS_TMC2208) && PIN_EXISTS(E0_SERIAL_RX)) || ENABLED(IS_TRAMS)
- tmc_report_otpw(stepperE0, TMC_E0);
- #endif
- }
-
- /**
- * M912: Clear TMC stepper driver overtemperature pre-warn flag held by the library
- */
- inline void gcode_M912() {
- const bool clearX = parser.seen(axis_codes[X_AXIS]), clearY = parser.seen(axis_codes[Y_AXIS]), clearZ = parser.seen(axis_codes[Z_AXIS]), clearE = parser.seen(axis_codes[E_AXIS]),
- clearAll = (!clearX && !clearY && !clearZ && !clearE) || (clearX && clearY && clearZ && clearE);
- #if ENABLED(X_IS_TMC2130) || ENABLED(IS_TRAMS) || (ENABLED(X_IS_TMC2208) && PIN_EXISTS(X_SERIAL_RX))
- if (clearX || clearAll) tmc_clear_otpw(stepperX, TMC_X);
- #endif
- #if ENABLED(X2_IS_TMC2130) || (ENABLED(X2_IS_TMC2208) && PIN_EXISTS(X_SERIAL_RX))
- if (clearX || clearAll) tmc_clear_otpw(stepperX, TMC_X);
- #endif
-
- #if ENABLED(Y_IS_TMC2130) || (ENABLED(Y_IS_TMC2208) && PIN_EXISTS(Y_SERIAL_RX))
- if (clearY || clearAll) tmc_clear_otpw(stepperY, TMC_Y);
- #endif
-
- #if ENABLED(Z_IS_TMC2130) || (ENABLED(Z_IS_TMC2208) && PIN_EXISTS(Z_SERIAL_RX))
- if (clearZ || clearAll) tmc_clear_otpw(stepperZ, TMC_Z);
- #endif
-
- #if ENABLED(E0_IS_TMC2130) || (ENABLED(E0_IS_TMC2208) && PIN_EXISTS(E0_SERIAL_RX))
- if (clearE || clearAll) tmc_clear_otpw(stepperE0, TMC_E0);
- #endif
- }
-
- /**
- * M913: Set HYBRID_THRESHOLD speed.
- */
- #if ENABLED(HYBRID_THRESHOLD)
- inline void gcode_M913() {
- #define TMC_SAY_PWMTHRS(P,Q) tmc_get_pwmthrs(stepper##Q, TMC_##Q, planner.axis_steps_per_mm[P##_AXIS])
- #define TMC_SET_PWMTHRS(P,Q) tmc_set_pwmthrs(stepper##Q, TMC_##Q, value, planner.axis_steps_per_mm[P##_AXIS])
- #define TMC_SAY_PWMTHRS_E(E) do{ const uint8_t extruder = E; tmc_get_pwmthrs(stepperE##E, TMC_E##E, planner.axis_steps_per_mm[E_AXIS_N]); }while(0)
- #define TMC_SET_PWMTHRS_E(E) do{ const uint8_t extruder = E; tmc_set_pwmthrs(stepperE##E, TMC_E##E, value, planner.axis_steps_per_mm[E_AXIS_N]); }while(0)
-
- bool report = true;
- const uint8_t index = parser.byteval('I');
- LOOP_XYZE(i) if (int32_t value = parser.longval(axis_codes[i])) {
- report = false;
- switch (i) {
- case X_AXIS:
- #if X_IS_TRINAMIC
- if (index == 0) TMC_SET_PWMTHRS(X,X);
- #endif
- #if X2_IS_TRINAMIC
- if (index == 1) TMC_SET_PWMTHRS(X,X2);
- #endif
- break;
- case Y_AXIS:
- #if Y_IS_TRINAMIC
- if (index == 0) TMC_SET_PWMTHRS(Y,Y);
- #endif
- #if Y2_IS_TRINAMIC
- if (index == 1) TMC_SET_PWMTHRS(Y,Y2);
- #endif
- break;
- case Z_AXIS:
- #if Z_IS_TRINAMIC
- if (index == 0) TMC_SET_PWMTHRS(Z,Z);
- #endif
- #if Z2_IS_TRINAMIC
- if (index == 1) TMC_SET_PWMTHRS(Z,Z2);
- #endif
- break;
- case E_AXIS: {
- if (get_target_extruder_from_command(913)) return;
- switch (target_extruder) {
- #if E0_IS_TRINAMIC
- case 0: TMC_SET_PWMTHRS_E(0); break;
- #endif
- #if E_STEPPERS > 1 && E1_IS_TRINAMIC
- case 1: TMC_SET_PWMTHRS_E(1); break;
- #endif
- #if E_STEPPERS > 2 && E2_IS_TRINAMIC
- case 2: TMC_SET_PWMTHRS_E(2); break;
- #endif
- #if E_STEPPERS > 3 && E3_IS_TRINAMIC
- case 3: TMC_SET_PWMTHRS_E(3); break;
- #endif
- #if E_STEPPERS > 4 && E4_IS_TRINAMIC
- case 4: TMC_SET_PWMTHRS_E(4); break;
- #endif
- }
- } break;
- }
- }
-
- if (report) LOOP_XYZE(i) switch (i) {
- case X_AXIS:
- #if X_IS_TRINAMIC
- TMC_SAY_PWMTHRS(X,X);
- #endif
- #if X2_IS_TRINAMIC
- TMC_SAY_PWMTHRS(X,X2);
- #endif
- break;
- case Y_AXIS:
- #if Y_IS_TRINAMIC
- TMC_SAY_PWMTHRS(Y,Y);
- #endif
- #if Y2_IS_TRINAMIC
- TMC_SAY_PWMTHRS(Y,Y2);
- #endif
- break;
- case Z_AXIS:
- #if Z_IS_TRINAMIC
- TMC_SAY_PWMTHRS(Z,Z);
- #endif
- #if Z2_IS_TRINAMIC
- TMC_SAY_PWMTHRS(Z,Z2);
- #endif
- break;
- case E_AXIS:
- #if E0_IS_TRINAMIC
- TMC_SAY_PWMTHRS_E(0);
- #endif
- #if E_STEPPERS > 1 && E1_IS_TRINAMIC
- TMC_SAY_PWMTHRS_E(1);
- #endif
- #if E_STEPPERS > 2 && E2_IS_TRINAMIC
- TMC_SAY_PWMTHRS_E(2);
- #endif
- #if E_STEPPERS > 3 && E3_IS_TRINAMIC
- TMC_SAY_PWMTHRS_E(3);
- #endif
- #if E_STEPPERS > 4 && E4_IS_TRINAMIC
- TMC_SAY_PWMTHRS_E(4);
- #endif
- break;
- }
- }
- #endif // HYBRID_THRESHOLD
-
- /**
- * M914: Set SENSORLESS_HOMING sensitivity.
- */
- #if ENABLED(SENSORLESS_HOMING)
- inline void gcode_M914() {
- #define TMC_SAY_SGT(Q) tmc_get_sgt(stepper##Q, TMC_##Q)
- #define TMC_SET_SGT(Q) tmc_set_sgt(stepper##Q, TMC_##Q, value)
-
- bool report = true;
- const uint8_t index = parser.byteval('I');
- LOOP_XYZ(i) if (parser.seen(axis_codes[i])) {
- const int8_t value = (int8_t)constrain(parser.value_int(), -63, 64);
- report = false;
- switch (i) {
- case X_AXIS:
- #if ENABLED(X_IS_TMC2130) || ENABLED(IS_TRAMS)
- if (index == 0) TMC_SET_SGT(X);
- #endif
- #if ENABLED(X2_IS_TMC2130)
- if (index == 1) TMC_SET_SGT(X2);
- #endif
- break;
- case Y_AXIS:
- #if ENABLED(Y_IS_TMC2130) || ENABLED(IS_TRAMS)
- if (index == 0) TMC_SET_SGT(Y);
- #endif
- #if ENABLED(Y2_IS_TMC2130)
- if (index == 1) TMC_SET_SGT(Y2);
- #endif
- break;
- case Z_AXIS:
- #if ENABLED(Z_IS_TMC2130) || ENABLED(IS_TRAMS)
- if (index == 0) TMC_SET_SGT(Z);
- #endif
- #if ENABLED(Z2_IS_TMC2130)
- if (index == 1) TMC_SET_SGT(Z2);
- #endif
- break;
- }
- }
-
- if (report) LOOP_XYZ(i) switch (i) {
- case X_AXIS:
- #if ENABLED(X_IS_TMC2130) || ENABLED(IS_TRAMS)
- TMC_SAY_SGT(X);
- #endif
- #if ENABLED(X2_IS_TMC2130)
- TMC_SAY_SGT(X2);
- #endif
- break;
- case Y_AXIS:
- #if ENABLED(Y_IS_TMC2130) || ENABLED(IS_TRAMS)
- TMC_SAY_SGT(Y);
- #endif
- #if ENABLED(Y2_IS_TMC2130)
- TMC_SAY_SGT(Y2);
- #endif
- break;
- case Z_AXIS:
- #if ENABLED(Z_IS_TMC2130) || ENABLED(IS_TRAMS)
- TMC_SAY_SGT(Z);
- #endif
- #if ENABLED(Z2_IS_TMC2130)
- TMC_SAY_SGT(Z2);
- #endif
- break;
- }
- }
- #endif // SENSORLESS_HOMING
-
- /**
- * TMC Z axis calibration routine
- */
- #if ENABLED(TMC_Z_CALIBRATION)
- inline void gcode_M915() {
- const uint16_t _rms = parser.seenval('S') ? parser.value_int() : CALIBRATION_CURRENT,
- _z = parser.seenval('Z') ? parser.value_linear_units() : CALIBRATION_EXTRA_HEIGHT;
-
- if (!axis_known_position[Z_AXIS]) {
- SERIAL_ECHOLNPGM("\nPlease home Z axis first");
- return;
- }
-
- #if Z_IS_TRINAMIC
- const uint16_t Z_current_1 = stepperZ.getCurrent();
- stepperZ.setCurrent(_rms, R_SENSE, HOLD_MULTIPLIER);
- #endif
- #if Z2_IS_TRINAMIC
- const uint16_t Z2_current_1 = stepperZ2.getCurrent();
- stepperZ2.setCurrent(_rms, R_SENSE, HOLD_MULTIPLIER);
- #endif
-
- SERIAL_ECHOPAIR("\nCalibration current: Z", _rms);
-
- soft_endstops_enabled = false;
-
- do_blocking_move_to_z(Z_MAX_POS+_z);
-
- #if Z_IS_TRINAMIC
- stepperZ.setCurrent(Z_current_1, R_SENSE, HOLD_MULTIPLIER);
- #endif
- #if Z2_IS_TRINAMIC
- stepperZ2.setCurrent(Z2_current_1, R_SENSE, HOLD_MULTIPLIER);
- #endif
-
- do_blocking_move_to_z(Z_MAX_POS);
- soft_endstops_enabled = true;
-
- SERIAL_ECHOLNPGM("\nHoming Z due to lost steps");
- enqueue_and_echo_commands_P(PSTR("G28 Z"));
- }
- #endif
-
-#endif // HAS_TRINAMIC
-
-/**
- * M907: Set digital trimpot motor current using axis codes X, Y, Z, E, B, S
- */
-inline void gcode_M907() {
- #if HAS_DIGIPOTSS
-
- LOOP_XYZE(i) if (parser.seen(axis_codes[i])) stepper.digipot_current(i, parser.value_int());
- if (parser.seen('B')) stepper.digipot_current(4, parser.value_int());
- if (parser.seen('S')) for (uint8_t i = 0; i <= 4; i++) stepper.digipot_current(i, parser.value_int());
-
- #elif HAS_MOTOR_CURRENT_PWM
-
- #if PIN_EXISTS(MOTOR_CURRENT_PWM_XY)
- if (parser.seen('X')) stepper.digipot_current(0, parser.value_int());
- #endif
- #if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
- if (parser.seen('Z')) stepper.digipot_current(1, parser.value_int());
- #endif
- #if PIN_EXISTS(MOTOR_CURRENT_PWM_E)
- if (parser.seen('E')) stepper.digipot_current(2, parser.value_int());
- #endif
-
- #endif
-
- #if ENABLED(DIGIPOT_I2C)
- // this one uses actual amps in floating point
- LOOP_XYZE(i) if (parser.seen(axis_codes[i])) digipot_i2c_set_current(i, parser.value_float());
- // for each additional extruder (named B,C,D,E..., channels 4,5,6,7...)
- for (uint8_t i = NUM_AXIS; i < DIGIPOT_I2C_NUM_CHANNELS; i++) if (parser.seen('B' + i - (NUM_AXIS))) digipot_i2c_set_current(i, parser.value_float());
- #endif
-
- #if ENABLED(DAC_STEPPER_CURRENT)
- if (parser.seen('S')) {
- const float dac_percent = parser.value_float();
- for (uint8_t i = 0; i <= 4; i++) dac_current_percent(i, dac_percent);
- }
- LOOP_XYZE(i) if (parser.seen(axis_codes[i])) dac_current_percent(i, parser.value_float());
- #endif
-}
-
-#if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT)
-
- /**
- * M908: Control digital trimpot directly (M908 P S)
- */
- inline void gcode_M908() {
- #if HAS_DIGIPOTSS
- stepper.digitalPotWrite(
- parser.intval('P'),
- parser.intval('S')
- );
- #endif
- #ifdef DAC_STEPPER_CURRENT
- dac_current_raw(
- parser.byteval('P', -1),
- parser.ushortval('S', 0)
- );
- #endif
- }
-
- #if ENABLED(DAC_STEPPER_CURRENT) // As with Printrbot RevF
-
- inline void gcode_M909() { dac_print_values(); }
-
- inline void gcode_M910() { dac_commit_eeprom(); }
-
- #endif
-
-#endif // HAS_DIGIPOTSS || DAC_STEPPER_CURRENT
-
-#if HAS_MICROSTEPS
-
- // M350 Set microstepping mode. Warning: Steps per unit remains unchanged. S code sets stepping mode for all drivers.
- inline void gcode_M350() {
- if (parser.seen('S')) for (int i = 0; i <= 4; i++) stepper.microstep_mode(i, parser.value_byte());
- LOOP_XYZE(i) if (parser.seen(axis_codes[i])) stepper.microstep_mode(i, parser.value_byte());
- if (parser.seen('B')) stepper.microstep_mode(4, parser.value_byte());
- stepper.microstep_readings();
- }
-
- /**
- * M351: Toggle MS1 MS2 pins directly with axis codes X Y Z E B
- * S# determines MS1 or MS2, X# sets the pin high/low.
- */
- inline void gcode_M351() {
- if (parser.seenval('S')) switch (parser.value_byte()) {
- case 1:
- LOOP_XYZE(i) if (parser.seenval(axis_codes[i])) stepper.microstep_ms(i, parser.value_byte(), -1);
- if (parser.seenval('B')) stepper.microstep_ms(4, parser.value_byte(), -1);
- break;
- case 2:
- LOOP_XYZE(i) if (parser.seenval(axis_codes[i])) stepper.microstep_ms(i, -1, parser.value_byte());
- if (parser.seenval('B')) stepper.microstep_ms(4, -1, parser.value_byte());
- break;
- }
- stepper.microstep_readings();
- }
-
-#endif // HAS_MICROSTEPS
-
-#if HAS_CASE_LIGHT
-
- #ifndef INVERT_CASE_LIGHT
- #define INVERT_CASE_LIGHT false
- #endif
- uint8_t case_light_brightness; // LCD routine wants INT
- bool case_light_on;
-
- #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
- LEDColor case_light_color =
- #ifdef CASE_LIGHT_NEOPIXEL_COLOR
- CASE_LIGHT_NEOPIXEL_COLOR
- #else
- { 255, 255, 255, 255 }
- #endif
- ;
- #endif
-
- void update_case_light() {
- const uint8_t i = case_light_on ? case_light_brightness : 0, n10ct = INVERT_CASE_LIGHT ? 255 - i : i;
-
- #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
-
- leds.set_color(
- MakeLEDColor(case_light_color.r, case_light_color.g, case_light_color.b, case_light_color.w, n10ct),
- false
- );
-
- #else // !CASE_LIGHT_USE_NEOPIXEL
-
- SET_OUTPUT(CASE_LIGHT_PIN);
- if (USEABLE_HARDWARE_PWM(CASE_LIGHT_PIN))
- analogWrite(CASE_LIGHT_PIN, n10ct);
- else {
- const bool s = case_light_on ? !INVERT_CASE_LIGHT : INVERT_CASE_LIGHT;
- WRITE(CASE_LIGHT_PIN, s ? HIGH : LOW);
- }
-
- #endif // !CASE_LIGHT_USE_NEOPIXEL
- }
-#endif // HAS_CASE_LIGHT
-
-/**
- * M355: Turn case light on/off and set brightness
- *
- * P Set case light brightness (PWM pin required - ignored otherwise)
- *
- * S Set case light on/off
- *
- * When S turns on the light on a PWM pin then the current brightness level is used/restored
- *
- * M355 P200 S0 turns off the light & sets the brightness level
- * M355 S1 turns on the light with a brightness of 200 (assuming a PWM pin)
- */
-inline void gcode_M355() {
- #if HAS_CASE_LIGHT
- uint8_t args = 0;
- if (parser.seenval('P')) ++args, case_light_brightness = parser.value_byte();
- if (parser.seenval('S')) ++args, case_light_on = parser.value_bool();
- if (args) update_case_light();
-
- // always report case light status
- SERIAL_ECHO_START();
- if (!case_light_on) {
- SERIAL_ECHOLNPGM("Case light: off");
- }
- else {
- if (!USEABLE_HARDWARE_PWM(CASE_LIGHT_PIN)) SERIAL_ECHOLNPGM("Case light: on");
- else SERIAL_ECHOLNPAIR("Case light: ", (int)case_light_brightness);
- }
-
- #else
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_M355_NONE);
- #endif // HAS_CASE_LIGHT
-}
-
-#if ENABLED(MIXING_EXTRUDER)
-
- /**
- * M163: Set a single mix factor for a mixing extruder
- * This is called "weight" by some systems.
- *
- * S[index] The channel index to set
- * P[float] The mix value
- *
- */
- inline void gcode_M163() {
- const int mix_index = parser.intval('S');
- if (mix_index < MIXING_STEPPERS) {
- float mix_value = parser.floatval('P');
- NOLESS(mix_value, 0.0);
- mixing_factor[mix_index] = RECIPROCAL(mix_value);
- }
- }
-
- #if MIXING_VIRTUAL_TOOLS > 1
-
- /**
- * M164: Store the current mix factors as a virtual tool.
- *
- * S[index] The virtual tool to store
- *
- */
- inline void gcode_M164() {
- const int tool_index = parser.intval('S');
- if (tool_index < MIXING_VIRTUAL_TOOLS) {
- normalize_mix();
- for (uint8_t i = 0; i < MIXING_STEPPERS; i++)
- mixing_virtual_tool_mix[tool_index][i] = mixing_factor[i];
- }
- }
-
- #endif
-
- #if ENABLED(DIRECT_MIXING_IN_G1)
- /**
- * M165: Set multiple mix factors for a mixing extruder.
- * Factors that are left out will be set to 0.
- * All factors together must add up to 1.0.
- *
- * A[factor] Mix factor for extruder stepper 1
- * B[factor] Mix factor for extruder stepper 2
- * C[factor] Mix factor for extruder stepper 3
- * D[factor] Mix factor for extruder stepper 4
- * H[factor] Mix factor for extruder stepper 5
- * I[factor] Mix factor for extruder stepper 6
- *
- */
- inline void gcode_M165() { gcode_get_mix(); }
- #endif
-
-#endif // MIXING_EXTRUDER
-
-/**
- * M999: Restart after being stopped
- *
- * Default behaviour is to flush the serial buffer and request
- * a resend to the host starting on the last N line received.
- *
- * Sending "M999 S1" will resume printing without flushing the
- * existing command buffer.
- *
- */
-inline void gcode_M999() {
- Running = true;
- lcd_reset_alert_level();
-
- if (parser.boolval('S')) return;
-
- // gcode_LastN = Stopped_gcode_LastN;
- flush_and_request_resend();
-}
-
-#if ENABLED(SWITCHING_EXTRUDER)
- #if EXTRUDERS > 3
- #define REQ_ANGLES 4
- #define _SERVO_NR (e < 2 ? SWITCHING_EXTRUDER_SERVO_NR : SWITCHING_EXTRUDER_E23_SERVO_NR)
- #else
- #define REQ_ANGLES 2
- #define _SERVO_NR SWITCHING_EXTRUDER_SERVO_NR
- #endif
- inline void move_extruder_servo(const uint8_t e) {
- constexpr int16_t angles[] = SWITCHING_EXTRUDER_SERVO_ANGLES;
- static_assert(COUNT(angles) == REQ_ANGLES, "SWITCHING_EXTRUDER_SERVO_ANGLES needs " STRINGIFY(REQ_ANGLES) " angles.");
- stepper.synchronize();
- #if EXTRUDERS & 1
- if (e < EXTRUDERS - 1)
- #endif
- {
- MOVE_SERVO(_SERVO_NR, angles[e]);
- safe_delay(500);
- }
- }
-#endif // SWITCHING_EXTRUDER
-
-#if ENABLED(SWITCHING_NOZZLE)
- inline void move_nozzle_servo(const uint8_t e) {
- const int16_t angles[2] = SWITCHING_NOZZLE_SERVO_ANGLES;
- stepper.synchronize();
- MOVE_SERVO(SWITCHING_NOZZLE_SERVO_NR, angles[e]);
- safe_delay(500);
- }
-#endif
-
-inline void invalid_extruder_error(const uint8_t e) {
- SERIAL_ECHO_START();
- SERIAL_CHAR('T');
- SERIAL_ECHO_F(e, DEC);
- SERIAL_CHAR(' ');
- SERIAL_ECHOLNPGM(MSG_INVALID_EXTRUDER);
-}
-
-#if ENABLED(PARKING_EXTRUDER)
-
- #if ENABLED(PARKING_EXTRUDER_SOLENOIDS_INVERT)
- #define PE_MAGNET_ON_STATE !PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE
- #else
- #define PE_MAGNET_ON_STATE PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE
- #endif
-
- void pe_set_magnet(const uint8_t extruder_num, const uint8_t state) {
- switch (extruder_num) {
- case 1: OUT_WRITE(SOL1_PIN, state); break;
- default: OUT_WRITE(SOL0_PIN, state); break;
- }
- #if PARKING_EXTRUDER_SOLENOIDS_DELAY > 0
- dwell(PARKING_EXTRUDER_SOLENOIDS_DELAY);
- #endif
- }
-
- inline void pe_activate_magnet(const uint8_t extruder_num) { pe_set_magnet(extruder_num, PE_MAGNET_ON_STATE); }
- inline void pe_deactivate_magnet(const uint8_t extruder_num) { pe_set_magnet(extruder_num, !PE_MAGNET_ON_STATE); }
-
-#endif // PARKING_EXTRUDER
-
-#if HAS_FANMUX
-
- void fanmux_switch(const uint8_t e) {
- WRITE(FANMUX0_PIN, TEST(e, 0) ? HIGH : LOW);
- #if PIN_EXISTS(FANMUX1)
- WRITE(FANMUX1_PIN, TEST(e, 1) ? HIGH : LOW);
- #if PIN_EXISTS(FANMUX2)
- WRITE(FANMUX2, TEST(e, 2) ? HIGH : LOW);
- #endif
- #endif
- }
-
- FORCE_INLINE void fanmux_init(void) {
- SET_OUTPUT(FANMUX0_PIN);
- #if PIN_EXISTS(FANMUX1)
- SET_OUTPUT(FANMUX1_PIN);
- #if PIN_EXISTS(FANMUX2)
- SET_OUTPUT(FANMUX2_PIN);
- #endif
- #endif
- fanmux_switch(0);
- }
-
-#endif // HAS_FANMUX
-
-/**
- * Tool Change functions
- */
-
-#if ENABLED(MIXING_EXTRUDER) && MIXING_VIRTUAL_TOOLS > 1
-
- inline void mixing_tool_change(const uint8_t tmp_extruder) {
- if (tmp_extruder >= MIXING_VIRTUAL_TOOLS)
- return invalid_extruder_error(tmp_extruder);
-
- // T0-Tnnn: Switch virtual tool by changing the mix
- for (uint8_t j = 0; j < MIXING_STEPPERS; j++)
- mixing_factor[j] = mixing_virtual_tool_mix[tmp_extruder][j];
- }
-
-#endif // MIXING_EXTRUDER && MIXING_VIRTUAL_TOOLS > 1
-
-#if ENABLED(DUAL_X_CARRIAGE)
-
- inline void dualx_tool_change(const uint8_t tmp_extruder, bool &no_move) {
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOPGM("Dual X Carriage Mode ");
- switch (dual_x_carriage_mode) {
- case DXC_FULL_CONTROL_MODE: SERIAL_ECHOLNPGM("DXC_FULL_CONTROL_MODE"); break;
- case DXC_AUTO_PARK_MODE: SERIAL_ECHOLNPGM("DXC_AUTO_PARK_MODE"); break;
- case DXC_DUPLICATION_MODE: SERIAL_ECHOLNPGM("DXC_DUPLICATION_MODE"); break;
- }
- }
- #endif
-
- const float xhome = x_home_pos(active_extruder);
- if (dual_x_carriage_mode == DXC_AUTO_PARK_MODE
- && IsRunning()
- && (delayed_move_time || current_position[X_AXIS] != xhome)
- ) {
- float raised_z = current_position[Z_AXIS] + TOOLCHANGE_PARK_ZLIFT;
- #if ENABLED(MAX_SOFTWARE_ENDSTOPS)
- NOMORE(raised_z, soft_endstop_max[Z_AXIS]);
- #endif
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOLNPAIR("Raise to ", raised_z);
- SERIAL_ECHOLNPAIR("MoveX to ", xhome);
- SERIAL_ECHOLNPAIR("Lower to ", current_position[Z_AXIS]);
- }
- #endif
- // Park old head: 1) raise 2) move to park position 3) lower
- for (uint8_t i = 0; i < 3; i++)
- planner.buffer_line(
- i == 0 ? current_position[X_AXIS] : xhome,
- current_position[Y_AXIS],
- i == 2 ? current_position[Z_AXIS] : raised_z,
- current_position[E_AXIS],
- planner.max_feedrate_mm_s[i == 1 ? X_AXIS : Z_AXIS],
- active_extruder
- );
- stepper.synchronize();
- }
-
- // Apply Y & Z extruder offset (X offset is used as home pos with Dual X)
- current_position[Y_AXIS] -= hotend_offset[Y_AXIS][active_extruder] - hotend_offset[Y_AXIS][tmp_extruder];
- current_position[Z_AXIS] -= hotend_offset[Z_AXIS][active_extruder] - hotend_offset[Z_AXIS][tmp_extruder];
-
- // Activate the new extruder ahead of calling set_axis_is_at_home!
- active_extruder = tmp_extruder;
-
- // This function resets the max/min values - the current position may be overwritten below.
- set_axis_is_at_home(X_AXIS);
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) DEBUG_POS("New Extruder", current_position);
- #endif
-
- // Only when auto-parking are carriages safe to move
- if (dual_x_carriage_mode != DXC_AUTO_PARK_MODE) no_move = true;
-
- switch (dual_x_carriage_mode) {
- case DXC_FULL_CONTROL_MODE:
- // New current position is the position of the activated extruder
- current_position[X_AXIS] = inactive_extruder_x_pos;
- // Save the inactive extruder's position (from the old current_position)
- inactive_extruder_x_pos = destination[X_AXIS];
- break;
- case DXC_AUTO_PARK_MODE:
- // record raised toolhead position for use by unpark
- COPY(raised_parked_position, current_position);
- raised_parked_position[Z_AXIS] += TOOLCHANGE_UNPARK_ZLIFT;
- #if ENABLED(MAX_SOFTWARE_ENDSTOPS)
- NOMORE(raised_parked_position[Z_AXIS], soft_endstop_max[Z_AXIS]);
- #endif
- active_extruder_parked = true;
- delayed_move_time = 0;
- break;
- case DXC_DUPLICATION_MODE:
- // If the new extruder is the left one, set it "parked"
- // This triggers the second extruder to move into the duplication position
- active_extruder_parked = (active_extruder == 0);
- current_position[X_AXIS] = active_extruder_parked ? inactive_extruder_x_pos : destination[X_AXIS] + duplicate_extruder_x_offset;
- inactive_extruder_x_pos = destination[X_AXIS];
- extruder_duplication_enabled = false;
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOLNPAIR("Set inactive_extruder_x_pos=", inactive_extruder_x_pos);
- SERIAL_ECHOLNPGM("Clear extruder_duplication_enabled");
- }
- #endif
- break;
- }
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOLNPAIR("Active extruder parked: ", active_extruder_parked ? "yes" : "no");
- DEBUG_POS("New extruder (parked)", current_position);
- }
- #endif
-
- // No extra case for HAS_ABL in DUAL_X_CARRIAGE. Does that mean they don't work together?
- }
-
-#endif // DUAL_X_CARRIAGE
-
-#if ENABLED(PARKING_EXTRUDER)
-
- inline void parking_extruder_tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool no_move/*=false*/) {
- constexpr float z_raise = PARKING_EXTRUDER_SECURITY_RAISE;
-
- if (!no_move) {
-
- const float parkingposx[] = PARKING_EXTRUDER_PARKING_X,
- midpos = (parkingposx[0] + parkingposx[1]) * 0.5 + hotend_offset[X_AXIS][active_extruder],
- grabpos = parkingposx[tmp_extruder] + hotend_offset[X_AXIS][active_extruder]
- + (tmp_extruder == 0 ? -(PARKING_EXTRUDER_GRAB_DISTANCE) : PARKING_EXTRUDER_GRAB_DISTANCE);
- /**
- * Steps:
- * 1. Raise Z-Axis to give enough clearance
- * 2. Move to park position of old extruder
- * 3. Disengage magnetic field, wait for delay
- * 4. Move near new extruder
- * 5. Engage magnetic field for new extruder
- * 6. Move to parking incl. offset of new extruder
- * 7. Lower Z-Axis
- */
-
- // STEP 1
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- SERIAL_ECHOLNPGM("Starting Autopark");
- if (DEBUGGING(LEVELING)) DEBUG_POS("current position:", current_position);
- #endif
- current_position[Z_AXIS] += z_raise;
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- SERIAL_ECHOLNPGM("(1) Raise Z-Axis ");
- if (DEBUGGING(LEVELING)) DEBUG_POS("Moving to Raised Z-Position", current_position);
- #endif
- planner.buffer_line_kinematic(current_position, planner.max_feedrate_mm_s[Z_AXIS], active_extruder);
- stepper.synchronize();
-
- // STEP 2
- current_position[X_AXIS] = parkingposx[active_extruder] + hotend_offset[X_AXIS][active_extruder];
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- SERIAL_ECHOLNPAIR("(2) Park extruder ", active_extruder);
- if (DEBUGGING(LEVELING)) DEBUG_POS("Moving ParkPos", current_position);
- #endif
- planner.buffer_line_kinematic(current_position, planner.max_feedrate_mm_s[X_AXIS], active_extruder);
- stepper.synchronize();
-
- // STEP 3
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- SERIAL_ECHOLNPGM("(3) Disengage magnet ");
- #endif
- pe_deactivate_magnet(active_extruder);
-
- // STEP 4
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- SERIAL_ECHOLNPGM("(4) Move to position near new extruder");
- #endif
- current_position[X_AXIS] += (active_extruder == 0 ? 10 : -10); // move 10mm away from parked extruder
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) DEBUG_POS("Moving away from parked extruder", current_position);
- #endif
- planner.buffer_line_kinematic(current_position, planner.max_feedrate_mm_s[X_AXIS], active_extruder);
- stepper.synchronize();
-
- // STEP 5
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- SERIAL_ECHOLNPGM("(5) Engage magnetic field");
- #endif
-
- #if ENABLED(PARKING_EXTRUDER_SOLENOIDS_INVERT)
- pe_activate_magnet(active_extruder); //just save power for inverted magnets
- #endif
- pe_activate_magnet(tmp_extruder);
-
- // STEP 6
- current_position[X_AXIS] = grabpos + (tmp_extruder == 0 ? (+10) : (-10));
- planner.buffer_line_kinematic(current_position, planner.max_feedrate_mm_s[X_AXIS], active_extruder);
- current_position[X_AXIS] = grabpos;
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- SERIAL_ECHOLNPAIR("(6) Unpark extruder ", tmp_extruder);
- if (DEBUGGING(LEVELING)) DEBUG_POS("Move UnparkPos", current_position);
- #endif
- planner.buffer_line_kinematic(current_position, planner.max_feedrate_mm_s[X_AXIS]/2, active_extruder);
- stepper.synchronize();
-
- // Step 7
- current_position[X_AXIS] = midpos - hotend_offset[X_AXIS][tmp_extruder];
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- SERIAL_ECHOLNPGM("(7) Move midway between hotends");
- if (DEBUGGING(LEVELING)) DEBUG_POS("Move midway to new extruder", current_position);
- #endif
- planner.buffer_line_kinematic(current_position, planner.max_feedrate_mm_s[X_AXIS], active_extruder);
- stepper.synchronize();
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- SERIAL_ECHOLNPGM("Autopark done.");
- #endif
- }
- else { // nomove == true
- // Only engage magnetic field for new extruder
- pe_activate_magnet(tmp_extruder);
- #if ENABLED(PARKING_EXTRUDER_SOLENOIDS_INVERT)
- pe_activate_magnet(active_extruder); // Just save power for inverted magnets
- #endif
- }
- current_position[Z_AXIS] += hotend_offset[Z_AXIS][active_extruder] - hotend_offset[Z_AXIS][tmp_extruder];
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) DEBUG_POS("Applying Z-offset", current_position);
- #endif
- }
-
-#endif // PARKING_EXTRUDER
-
-/**
- * Perform a tool-change, which may result in moving the
- * previous tool out of the way and the new tool into place.
- */
-void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool no_move/*=false*/) {
- #if ENABLED(MIXING_EXTRUDER) && MIXING_VIRTUAL_TOOLS > 1
-
- mixing_tool_change(tmp_extruder);
-
- #else // !MIXING_EXTRUDER || MIXING_VIRTUAL_TOOLS <= 1
-
- if (tmp_extruder >= EXTRUDERS)
- return invalid_extruder_error(tmp_extruder);
-
- #if HOTENDS > 1
-
- const float old_feedrate_mm_s = fr_mm_s > 0.0 ? fr_mm_s : feedrate_mm_s;
-
- feedrate_mm_s = fr_mm_s > 0.0 ? fr_mm_s : XY_PROBE_FEEDRATE_MM_S;
-
- if (tmp_extruder != active_extruder) {
- if (!no_move && axis_unhomed_error()) {
- no_move = true;
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("No move on toolchange");
- #endif
- }
-
- // Save current position to destination, for use later
- set_destination_from_current();
-
- #if HAS_LEVELING
- // Set current position to the physical position
- const bool leveling_was_active = planner.leveling_active;
- set_bed_leveling_enabled(false);
- #endif
-
- #if ENABLED(DUAL_X_CARRIAGE)
-
- dualx_tool_change(tmp_extruder, no_move); // Can modify no_move
-
- #else // !DUAL_X_CARRIAGE
-
- #if ENABLED(PARKING_EXTRUDER) // Dual Parking extruder
- parking_extruder_tool_change(tmp_extruder, no_move);
- #endif
-
- #if ENABLED(SWITCHING_NOZZLE)
- // Always raise by at least 1 to avoid workpiece
- const float zdiff = hotend_offset[Z_AXIS][active_extruder] - hotend_offset[Z_AXIS][tmp_extruder];
- current_position[Z_AXIS] += (zdiff > 0.0 ? zdiff : 0.0) + 1;
- planner.buffer_line_kinematic(current_position, planner.max_feedrate_mm_s[Z_AXIS], active_extruder);
- move_nozzle_servo(tmp_extruder);
- #endif
-
- const float xdiff = hotend_offset[X_AXIS][tmp_extruder] - hotend_offset[X_AXIS][active_extruder],
- ydiff = hotend_offset[Y_AXIS][tmp_extruder] - hotend_offset[Y_AXIS][active_extruder];
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOPAIR("Offset Tool XY by { ", xdiff);
- SERIAL_ECHOPAIR(", ", ydiff);
- SERIAL_ECHOLNPGM(" }");
- }
- #endif
-
- // The newly-selected extruder XY is actually at...
- current_position[X_AXIS] += xdiff;
- current_position[Y_AXIS] += ydiff;
-
- // Set the new active extruder
- active_extruder = tmp_extruder;
-
- #endif // !DUAL_X_CARRIAGE
-
- #if ENABLED(SWITCHING_NOZZLE)
- // The newly-selected extruder Z is actually at...
- current_position[Z_AXIS] -= zdiff;
- #endif
-
- #if HAS_LEVELING
- // Restore leveling to re-establish the logical position
- set_bed_leveling_enabled(leveling_was_active);
- #endif
-
- // Tell the planner the new "current position"
- SYNC_PLAN_POSITION_KINEMATIC();
-
- #if ENABLED(DELTA)
- //LOOP_XYZ(i) update_software_endstops(i); // or modify the constrain function
- const bool safe_to_move = current_position[Z_AXIS] < delta_clip_start_height - 1;
- #else
- constexpr bool safe_to_move = true;
- #endif
-
- // Raise, move, and lower again
- if (safe_to_move && !no_move && IsRunning()) {
- #if DISABLED(SWITCHING_NOZZLE)
- // Do a small lift to avoid the workpiece in the move back (below)
- current_position[Z_AXIS] += 1.0;
- planner.buffer_line_kinematic(current_position, planner.max_feedrate_mm_s[Z_AXIS], active_extruder);
- #endif
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) DEBUG_POS("Move back", destination);
- #endif
- // Move back to the original (or tweaked) position
- do_blocking_move_to(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS]);
- }
- #if ENABLED(SWITCHING_NOZZLE)
- else {
- // Move back down. (Including when the new tool is higher.)
- do_blocking_move_to_z(destination[Z_AXIS], planner.max_feedrate_mm_s[Z_AXIS]);
- }
- #endif
- } // (tmp_extruder != active_extruder)
-
- stepper.synchronize();
-
- #if ENABLED(EXT_SOLENOID) && !ENABLED(PARKING_EXTRUDER)
- disable_all_solenoids();
- enable_solenoid_on_active_extruder();
- #endif
-
- feedrate_mm_s = old_feedrate_mm_s;
-
- #else // HOTENDS <= 1
-
- UNUSED(fr_mm_s);
- UNUSED(no_move);
-
- #if ENABLED(MK2_MULTIPLEXER)
- if (tmp_extruder >= E_STEPPERS)
- return invalid_extruder_error(tmp_extruder);
-
- select_multiplexed_stepper(tmp_extruder);
- #endif
-
- // Set the new active extruder
- active_extruder = tmp_extruder;
-
- #endif // HOTENDS <= 1
-
- #if DO_SWITCH_EXTRUDER
- stepper.synchronize();
- move_extruder_servo(active_extruder);
- #endif
-
- #if HAS_FANMUX
- fanmux_switch(active_extruder);
- #endif
-
- SERIAL_ECHO_START();
- SERIAL_ECHOLNPAIR(MSG_ACTIVE_EXTRUDER, (int)active_extruder);
-
- #endif // !MIXING_EXTRUDER || MIXING_VIRTUAL_TOOLS <= 1
-}
-
-/**
- * T0-T3: Switch tool, usually switching extruders
- *
- * F[units/min] Set the movement feedrate
- * S1 Don't move the tool in XY after change
- */
-inline void gcode_T(const uint8_t tmp_extruder) {
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOPAIR(">>> gcode_T(", tmp_extruder);
- SERIAL_CHAR(')');
- SERIAL_EOL();
- DEBUG_POS("BEFORE", current_position);
- }
- #endif
-
- #if HOTENDS == 1 || (ENABLED(MIXING_EXTRUDER) && MIXING_VIRTUAL_TOOLS > 1)
-
- tool_change(tmp_extruder);
-
- #elif HOTENDS > 1
-
- tool_change(
- tmp_extruder,
- MMM_TO_MMS(parser.linearval('F')),
- (tmp_extruder == active_extruder) || parser.boolval('S')
- );
-
- #endif
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- DEBUG_POS("AFTER", current_position);
- SERIAL_ECHOLNPGM("<<< gcode_T");
- }
- #endif
-}
-
-/**
- * Process the parsed command and dispatch it to its handler
- */
-void process_parsed_command() {
- KEEPALIVE_STATE(IN_HANDLER);
-
- // Handle a known G, M, or T
- switch (parser.command_letter) {
- case 'G': switch (parser.codenum) {
-
- case 0: case 1: gcode_G0_G1( // G0: Fast Move, G1: Linear Move
- #if IS_SCARA
- parser.codenum == 0
- #endif
- ); break;
-
- #if ENABLED(ARC_SUPPORT) && DISABLED(SCARA)
- case 2: case 3: gcode_G2_G3(parser.codenum == 2); break; // G2: CW ARC, G3: CCW ARC
- #endif
-
- case 4: gcode_G4(); break; // G4: Dwell
-
- #if ENABLED(BEZIER_CURVE_SUPPORT)
- case 5: gcode_G5(); break; // G5: Cubic B_spline
- #endif
-
- #if ENABLED(FWRETRACT)
- case 10: gcode_G10(); break; // G10: Retract
- case 11: gcode_G11(); break; // G11: Prime
- #endif
-
- #if ENABLED(NOZZLE_CLEAN_FEATURE)
- case 12: gcode_G12(); break; // G12: Clean Nozzle
- #endif
-
- #if ENABLED(CNC_WORKSPACE_PLANES)
- case 17: gcode_G17(); break; // G17: Select Plane XY
- case 18: gcode_G18(); break; // G18: Select Plane ZX
- case 19: gcode_G19(); break; // G19: Select Plane YZ
- #endif
-
- #if ENABLED(INCH_MODE_SUPPORT)
- case 20: gcode_G20(); break; // G20: Inch Units
- case 21: gcode_G21(); break; // G21: Millimeter Units
- #endif
-
- #if ENABLED(G26_MESH_VALIDATION)
- case 26: gcode_G26(); break; // G26: Mesh Validation Pattern
- #endif
-
- #if ENABLED(NOZZLE_PARK_FEATURE)
- case 27: gcode_G27(); break; // G27: Park Nozzle
- #endif
-
- case 28: gcode_G28(false); break; // G28: Home one or more axes
-
- #if HAS_LEVELING
- case 29: gcode_G29(); break; // G29: Detailed Z probe
- #endif
-
- #if HAS_BED_PROBE
- case 30: gcode_G30(); break; // G30: Single Z probe
- #endif
-
- #if ENABLED(Z_PROBE_SLED)
- case 31: gcode_G31(); break; // G31: Dock sled
- case 32: gcode_G32(); break; // G32: Undock sled
- #endif
-
- #if ENABLED(DELTA_AUTO_CALIBRATION)
- case 33: gcode_G33(); break; // G33: Delta Auto-Calibration
- #endif
-
- #if ENABLED(G38_PROBE_TARGET)
- case 38:
- if (parser.subcode == 2 || parser.subcode == 3)
- gcode_G38(parser.subcode == 2); // G38.2, G38.3: Probe towards object
- break;
- #endif
-
- #if HAS_MESH
- case 42: gcode_G42(); break; // G42: Move to mesh point
- #endif
-
- case 90: relative_mode = false; break; // G90: Absolute coordinates
- case 91: relative_mode = true; break; // G91: Relative coordinates
-
- case 92: gcode_G92(); break; // G92: Set Position
-
- #if ENABLED(DEBUG_GCODE_PARSER)
- case 800: parser.debug(); break; // G800: GCode Parser Test for G
- #endif
-
- default: parser.unknown_command_error();
- }
- break;
-
- case 'M': switch (parser.codenum) {
- #if HAS_RESUME_CONTINUE
- case 0: case 1: gcode_M0_M1(); break; // M0: Unconditional stop, M1: Conditional stop
- #endif
-
- #if ENABLED(SPINDLE_LASER_ENABLE)
- case 3: gcode_M3_M4(true); break; // M3: Laser/CW-Spindle Power
- case 4: gcode_M3_M4(false); break; // M4: Laser/CCW-Spindle Power
- case 5: gcode_M5(); break; // M5: Laser/Spindle OFF
- #endif
-
- case 17: gcode_M17(); break; // M17: Enable all steppers
-
- #if ENABLED(SDSUPPORT)
- case 20: gcode_M20(); break; // M20: List SD Card
- case 21: gcode_M21(); break; // M21: Init SD Card
- case 22: gcode_M22(); break; // M22: Release SD Card
- case 23: gcode_M23(); break; // M23: Select File
- case 24: gcode_M24(); break; // M24: Start SD Print
- case 25: gcode_M25(); break; // M25: Pause SD Print
- case 26: gcode_M26(); break; // M26: Set SD Index
- case 27: gcode_M27(); break; // M27: Get SD Status
- case 28: gcode_M28(); break; // M28: Start SD Write
- case 29: gcode_M29(); break; // M29: Stop SD Write
- case 30: gcode_M30(); break; // M30: Delete File
- case 32: gcode_M32(); break; // M32: Select file, Start SD Print
- #if ENABLED(LONG_FILENAME_HOST_SUPPORT)
- case 33: gcode_M33(); break; // M33: Report longname path
- #endif
- #if ENABLED(SDCARD_SORT_ALPHA) && ENABLED(SDSORT_GCODE)
- case 34: gcode_M34(); break; // M34: Set SD card sorting options
- #endif
- case 928: gcode_M928(); break; // M928: Start SD write
- #endif // SDSUPPORT
-
- case 31: gcode_M31(); break; // M31: Report print job elapsed time
-
- case 42: gcode_M42(); break; // M42: Change pin state
- #if ENABLED(PINS_DEBUGGING)
- case 43: gcode_M43(); break; // M43: Read/monitor pin and endstop states
- #endif
-
- #if ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST)
- case 48: gcode_M48(); break; // M48: Z probe repeatability test
- #endif
- #if ENABLED(G26_MESH_VALIDATION)
- case 49: gcode_M49(); break; // M49: Toggle the G26 Debug Flag
- #endif
-
- #if ENABLED(ULTRA_LCD) && ENABLED(LCD_SET_PROGRESS_MANUALLY)
- case 73: gcode_M73(); break; // M73: Set Print Progress %
- #endif
- case 75: gcode_M75(); break; // M75: Start Print Job Timer
- case 76: gcode_M76(); break; // M76: Pause Print Job Timer
- case 77: gcode_M77(); break; // M77: Stop Print Job Timer
- #if ENABLED(PRINTCOUNTER)
- case 78: gcode_M78(); break; // M78: Report Print Statistics
- #endif
-
- #if ENABLED(M100_FREE_MEMORY_WATCHER)
- case 100: gcode_M100(); break; // M100: Free Memory Report
- #endif
-
- case 104: gcode_M104(); break; // M104: Set Hotend Temperature
- case 110: gcode_M110(); break; // M110: Set Current Line Number
- case 111: gcode_M111(); break; // M111: Set Debug Flags
-
- #if DISABLED(EMERGENCY_PARSER)
- case 108: gcode_M108(); break; // M108: Cancel Waiting
- case 112: gcode_M112(); break; // M112: Emergency Stop
- case 410: gcode_M410(); break; // M410: Quickstop. Abort all planned moves
- #endif
-
- #if ENABLED(HOST_KEEPALIVE_FEATURE)
- case 113: gcode_M113(); break; // M113: Set Host Keepalive Interval
- #endif
-
- case 105: gcode_M105(); KEEPALIVE_STATE(NOT_BUSY); return; // M105: Report Temperatures (and say "ok")
-
- #if ENABLED(AUTO_REPORT_TEMPERATURES)
- case 155: gcode_M155(); break; // M155: Set Temperature Auto-report Interval
- #endif
-
- case 109: gcode_M109(); break; // M109: Set Hotend Temperature. Wait for target.
-
- #if HAS_HEATED_BED
- case 140: gcode_M140(); break; // M140: Set Bed Temperature
- case 190: gcode_M190(); break; // M190: Set Bed Temperature. Wait for target.
- #endif
-
- #if FAN_COUNT > 0
- case 106: gcode_M106(); break; // M106: Set Fan Speed
- case 107: gcode_M107(); break; // M107: Fan Off
- #endif
-
- #if ENABLED(PARK_HEAD_ON_PAUSE)
- case 125: gcode_M125(); break; // M125: Park (for Filament Change)
- #endif
-
- #if ENABLED(BARICUDA)
- #if HAS_HEATER_1
- case 126: gcode_M126(); break; // M126: Valve 1 Open
- case 127: gcode_M127(); break; // M127: Valve 1 Closed
- #endif
- #if HAS_HEATER_2
- case 128: gcode_M128(); break; // M128: Valve 2 Open
- case 129: gcode_M129(); break; // M129: Valve 2 Closed
- #endif
- #endif
-
- #if HAS_POWER_SWITCH
- case 80: gcode_M80(); break; // M80: Turn on Power Supply
- #endif
- case 81: gcode_M81(); break; // M81: Turn off Power and Power Supply
-
- case 82: gcode_M82(); break; // M82: Disable Relative E-Axis
- case 83: gcode_M83(); break; // M83: Set Relative E-Axis
- case 18: case 84: gcode_M18_M84(); break; // M18/M84: Disable Steppers / Set Timeout
- case 85: gcode_M85(); break; // M85: Set inactivity stepper shutdown timeout
- case 92: gcode_M92(); break; // M92: Set steps-per-unit
- case 114: gcode_M114(); break; // M114: Report Current Position
- case 115: gcode_M115(); break; // M115: Capabilities Report
- case 117: gcode_M117(); break; // M117: Set LCD message text
- case 118: gcode_M118(); break; // M118: Print a message in the host console
- case 119: gcode_M119(); break; // M119: Report Endstop states
- case 120: gcode_M120(); break; // M120: Enable Endstops
- case 121: gcode_M121(); break; // M121: Disable Endstops
-
- #if ENABLED(ULTIPANEL)
- case 145: gcode_M145(); break; // M145: Set material heatup parameters
- #endif
-
- #if ENABLED(TEMPERATURE_UNITS_SUPPORT)
- case 149: gcode_M149(); break; // M149: Set Temperature Units, C F K
- #endif
-
- #if HAS_COLOR_LEDS
- case 150: gcode_M150(); break; // M150: Set Status LED Color
- #endif
-
- #if ENABLED(MIXING_EXTRUDER)
- case 163: gcode_M163(); break; // M163: Set Mixing Component
- #if MIXING_VIRTUAL_TOOLS > 1
- case 164: gcode_M164(); break; // M164: Save Current Mix
- #endif
- #if ENABLED(DIRECT_MIXING_IN_G1)
- case 165: gcode_M165(); break; // M165: Set Multiple Mixing Components
- #endif
- #endif
-
- #if DISABLED(NO_VOLUMETRICS)
- case 200: gcode_M200(); break; // M200: Set Filament Diameter, Volumetric Extrusion
- #endif
-
- case 201: gcode_M201(); break; // M201: Set Max Printing Acceleration (units/sec^2)
- #if 0
- case 202: gcode_M202(); break; // M202: Not used for Sprinter/grbl gen6
- #endif
- case 203: gcode_M203(); break; // M203: Set Max Feedrate (units/sec)
- case 204: gcode_M204(); break; // M204: Set Acceleration
- case 205: gcode_M205(); break; // M205: Set Advanced settings
-
- #if HAS_M206_COMMAND
- case 206: gcode_M206(); break; // M206: Set Home Offsets
- case 428: gcode_M428(); break; // M428: Set Home Offsets based on current position
- #endif
-
- #if ENABLED(FWRETRACT)
- case 207: gcode_M207(); break; // M207: Set Retract Length, Feedrate, Z lift
- case 208: gcode_M208(); break; // M208: Set Additional Prime Length and Feedrate
- case 209:
- if (MIN_AUTORETRACT <= MAX_AUTORETRACT) gcode_M209(); // M209: Turn Auto-Retract on/off
- break;
- #endif
-
- case 211: gcode_M211(); break; // M211: Enable/Disable/Report Software Endstops
-
- #if HOTENDS > 1
- case 218: gcode_M218(); break; // M218: Set Tool Offset
- #endif
-
- case 220: gcode_M220(); break; // M220: Set Feedrate Percentage
- case 221: gcode_M221(); break; // M221: Set Flow Percentage
- case 226: gcode_M226(); break; // M226: Wait for Pin State
-
- #if defined(CHDK) || HAS_PHOTOGRAPH
- case 240: gcode_M240(); break; // M240: Trigger Camera
- #endif
-
- #if HAS_LCD_CONTRAST
- case 250: gcode_M250(); break; // M250: Set LCD Contrast
- #endif
-
- #if ENABLED(EXPERIMENTAL_I2CBUS)
- case 260: gcode_M260(); break; // M260: Send Data to i2c slave
- case 261: gcode_M261(); break; // M261: Request Data from i2c slave
- #endif
-
- #if HAS_SERVOS
- case 280: gcode_M280(); break; // M280: Set Servo Position
- #endif
-
- #if ENABLED(BABYSTEPPING)
- case 290: gcode_M290(); break; // M290: Babystepping
- #endif
-
- #if HAS_BUZZER
- case 300: gcode_M300(); break; // M300: Add Tone/Buzz to Queue
- #endif
-
- #if ENABLED(PIDTEMP)
- case 301: gcode_M301(); break; // M301: Set Hotend PID parameters
- #endif
-
- #if ENABLED(PREVENT_COLD_EXTRUSION)
- case 302: gcode_M302(); break; // M302: Set Minimum Extrusion Temp
- #endif
-
- case 303: gcode_M303(); break; // M303: PID Autotune
-
- #if ENABLED(PIDTEMPBED)
- case 304: gcode_M304(); break; // M304: Set Bed PID parameters
- #endif
-
- #if HAS_MICROSTEPS
- case 350: gcode_M350(); break; // M350: Set microstepping mode. Warning: Steps per unit remains unchanged. S code sets stepping mode for all drivers.
- case 351: gcode_M351(); break; // M351: Toggle MS1 MS2 pins directly, S# determines MS1 or MS2, X# sets the pin high/low.
- #endif
-
- case 355: gcode_M355(); break; // M355: Set Case Light brightness
-
- #if ENABLED(MORGAN_SCARA)
- case 360: if (gcode_M360()) return; break; // M360: SCARA Theta pos1
- case 361: if (gcode_M361()) return; break; // M361: SCARA Theta pos2
- case 362: if (gcode_M362()) return; break; // M362: SCARA Psi pos1
- case 363: if (gcode_M363()) return; break; // M363: SCARA Psi pos2
- case 364: if (gcode_M364()) return; break; // M364: SCARA Psi pos3 (90 deg to Theta)
- #endif
-
- case 400: gcode_M400(); break; // M400: Synchronize. Wait for moves to finish.
-
- #if HAS_BED_PROBE
- case 401: gcode_M401(); break; // M401: Deploy Probe
- case 402: gcode_M402(); break; // M402: Stow Probe
- #endif
-
- #if ENABLED(FILAMENT_WIDTH_SENSOR)
- case 404: gcode_M404(); break; // M404: Set/Report Nominal Filament Width
- case 405: gcode_M405(); break; // M405: Enable Filament Width Sensor
- case 406: gcode_M406(); break; // M406: Disable Filament Width Sensor
- case 407: gcode_M407(); break; // M407: Report Measured Filament Width
- #endif
-
- #if HAS_LEVELING
- case 420: gcode_M420(); break; // M420: Set Bed Leveling Enabled / Fade
- #endif
-
- #if HAS_MESH
- case 421: gcode_M421(); break; // M421: Set a Mesh Z value
- #endif
-
- case 500: gcode_M500(); break; // M500: Store Settings in EEPROM
- case 501: gcode_M501(); break; // M501: Read Settings from EEPROM
- case 502: gcode_M502(); break; // M502: Revert Settings to defaults
- #if DISABLED(DISABLE_M503)
- case 503: gcode_M503(); break; // M503: Report Settings (in SRAM)
- #endif
- #if ENABLED(EEPROM_SETTINGS)
- case 504: gcode_M504(); break; // M504: Validate EEPROM
- #endif
-
- #if ENABLED(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED)
- case 540: gcode_M540(); break; // M540: Set Abort on Endstop Hit for SD Printing
- #endif
-
- #if ENABLED(ADVANCED_PAUSE_FEATURE)
- case 600: gcode_M600(); break; // M600: Pause for Filament Change
- case 603: gcode_M603(); break; // M603: Configure Filament Change
- #endif
-
- #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
- case 605: gcode_M605(); break; // M605: Set Dual X Carriage movement mode
- #endif
-
- #if ENABLED(DELTA)
- case 665: gcode_M665(); break; // M665: Delta Configuration
- #endif
- #if ENABLED(DELTA) || ENABLED(X_DUAL_ENDSTOPS) || ENABLED(Y_DUAL_ENDSTOPS) || ENABLED(Z_DUAL_ENDSTOPS)
- case 666: gcode_M666(); break; // M666: DELTA/Dual Endstop Adjustment
- #endif
-
- #if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
- case 701: gcode_M701(); break; // M701: Load Filament
- case 702: gcode_M702(); break; // M702: Unload Filament
- #endif
-
- #if ENABLED(DEBUG_GCODE_PARSER)
- case 800: parser.debug(); break; // M800: GCode Parser Test for M
- #endif
-
- #if HAS_BED_PROBE
- case 851: gcode_M851(); break; // M851: Set Z Probe Z Offset
- #endif
-
- #if ENABLED(SKEW_CORRECTION_GCODE)
- case 852: gcode_M852(); break; // M852: Set Skew factors
- #endif
-
- #if ENABLED(I2C_POSITION_ENCODERS)
- case 860: gcode_M860(); break; // M860: Report encoder module position
- case 861: gcode_M861(); break; // M861: Report encoder module status
- case 862: gcode_M862(); break; // M862: Perform axis test
- case 863: gcode_M863(); break; // M863: Calibrate steps/mm
- case 864: gcode_M864(); break; // M864: Change module address
- case 865: gcode_M865(); break; // M865: Check module firmware version
- case 866: gcode_M866(); break; // M866: Report axis error count
- case 867: gcode_M867(); break; // M867: Toggle error correction
- case 868: gcode_M868(); break; // M868: Set error correction threshold
- case 869: gcode_M869(); break; // M869: Report axis error
- #endif
-
- #if ENABLED(LIN_ADVANCE)
- case 900: gcode_M900(); break; // M900: Set Linear Advance K factor
- #endif
-
- case 907: gcode_M907(); break; // M907: Set Digital Trimpot Motor Current using axis codes.
-
- #if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT)
- case 908: gcode_M908(); break; // M908: Direct Control Digital Trimpot
- #if ENABLED(DAC_STEPPER_CURRENT)
- case 909: gcode_M909(); break; // M909: Print Digipot/DAC current value (As with Printrbot RevF)
- case 910: gcode_M910(); break; // M910: Commit Digipot/DAC value to External EEPROM (As with Printrbot RevF)
- #endif
- #endif
-
- #if ENABLED(HAVE_TMC2130) || ENABLED(HAVE_TMC2208)
- #if ENABLED(TMC_DEBUG)
- case 122: gcode_M122(); break; // M122: Debug TMC steppers
- #endif
- case 906: gcode_M906(); break; // M906: Set motor current in milliamps using axis codes X, Y, Z, E
- case 911: gcode_M911(); break; // M911: Report TMC prewarn triggered flags
- case 912: gcode_M912(); break; // M911: Clear TMC prewarn triggered flags
- #if ENABLED(HYBRID_THRESHOLD)
- case 913: gcode_M913(); break; // M913: Set HYBRID_THRESHOLD speed.
- #endif
- #if ENABLED(SENSORLESS_HOMING)
- case 914: gcode_M914(); break; // M914: Set SENSORLESS_HOMING sensitivity.
- #endif
- #if ENABLED(TMC_Z_CALIBRATION)
- case 915: gcode_M915(); break; // M915: TMC Z axis calibration routine
- #endif
- #endif
-
- case 999: gcode_M999(); break; // M999: Restart after being Stopped
-
- default: parser.unknown_command_error();
- }
- break;
-
- case 'T': gcode_T(parser.codenum); break; // T: Tool Select
-
- default: parser.unknown_command_error();
- }
-
- KEEPALIVE_STATE(NOT_BUSY);
- ok_to_send();
-}
-
-void process_next_command() {
- char * const current_command = command_queue[cmd_queue_index_r];
-
- if (DEBUGGING(ECHO)) {
- SERIAL_ECHO_START();
- SERIAL_ECHOLN(current_command);
- #if ENABLED(M100_FREE_MEMORY_WATCHER)
- SERIAL_ECHOPAIR("slot:", cmd_queue_index_r);
- M100_dump_routine(" Command Queue:", (const char*)command_queue, (const char*)(command_queue + sizeof(command_queue)));
- #endif
- }
-
- reset_stepper_timeout(); // Keep steppers powered
-
- // Parse the next command in the queue
- parser.parse(current_command);
- process_parsed_command();
-}
-
-/**
- * Send a "Resend: nnn" message to the host to
- * indicate that a command needs to be re-sent.
- */
-void flush_and_request_resend() {
- //char command_queue[cmd_queue_index_r][100]="Resend:";
- SERIAL_FLUSH();
- SERIAL_PROTOCOLPGM(MSG_RESEND);
- SERIAL_PROTOCOLLN(gcode_LastN + 1);
- ok_to_send();
-}
-
-/**
- * Send an "ok" message to the host, indicating
- * that a command was successfully processed.
- *
- * If ADVANCED_OK is enabled also include:
- * N Line number of the command, if any
- * P Planner space remaining
- * B Block queue space remaining
- */
-void ok_to_send() {
- if (!send_ok[cmd_queue_index_r]) return;
- SERIAL_PROTOCOLPGM(MSG_OK);
- #if ENABLED(ADVANCED_OK)
- char* p = command_queue[cmd_queue_index_r];
- if (*p == 'N') {
- SERIAL_PROTOCOL(' ');
- SERIAL_ECHO(*p++);
- while (NUMERIC_SIGNED(*p))
- SERIAL_ECHO(*p++);
- }
- SERIAL_PROTOCOLPGM(" P"); SERIAL_PROTOCOL(int(BLOCK_BUFFER_SIZE - planner.movesplanned() - 1));
- SERIAL_PROTOCOLPGM(" B"); SERIAL_PROTOCOL(BUFSIZE - commands_in_queue);
- #endif
- SERIAL_EOL();
-}
-
-#if HAS_SOFTWARE_ENDSTOPS
-
- /**
- * Constrain the given coordinates to the software endstops.
- *
- * For DELTA/SCARA the XY constraint is based on the smallest
- * radius within the set software endstops.
- */
- void clamp_to_software_endstops(float target[XYZ]) {
- if (!soft_endstops_enabled) return;
- #if IS_KINEMATIC
- const float dist_2 = HYPOT2(target[X_AXIS], target[Y_AXIS]);
- if (dist_2 > soft_endstop_radius_2) {
- const float ratio = soft_endstop_radius / SQRT(dist_2); // 200 / 300 = 0.66
- target[X_AXIS] *= ratio;
- target[Y_AXIS] *= ratio;
- }
- #else
- #if ENABLED(MIN_SOFTWARE_ENDSTOP_X)
- NOLESS(target[X_AXIS], soft_endstop_min[X_AXIS]);
- #endif
- #if ENABLED(MIN_SOFTWARE_ENDSTOP_Y)
- NOLESS(target[Y_AXIS], soft_endstop_min[Y_AXIS]);
- #endif
- #if ENABLED(MAX_SOFTWARE_ENDSTOP_X)
- NOMORE(target[X_AXIS], soft_endstop_max[X_AXIS]);
- #endif
- #if ENABLED(MAX_SOFTWARE_ENDSTOP_Y)
- NOMORE(target[Y_AXIS], soft_endstop_max[Y_AXIS]);
- #endif
- #endif
- #if ENABLED(MIN_SOFTWARE_ENDSTOP_Z)
- NOLESS(target[Z_AXIS], soft_endstop_min[Z_AXIS]);
- #endif
- #if ENABLED(MAX_SOFTWARE_ENDSTOP_Z)
- NOMORE(target[Z_AXIS], soft_endstop_max[Z_AXIS]);
- #endif
- }
-
-#endif
-
-#if ENABLED(AUTO_BED_LEVELING_BILINEAR)
-
- // Get the Z adjustment for non-linear bed leveling
- float bilinear_z_offset(const float raw[XYZ]) {
-
- static float z1, d2, z3, d4, L, D, ratio_x, ratio_y,
- last_x = -999.999, last_y = -999.999;
-
- // Whole units for the grid line indices. Constrained within bounds.
- static int8_t gridx, gridy, nextx, nexty,
- last_gridx = -99, last_gridy = -99;
-
- // XY relative to the probed area
- const float rx = raw[X_AXIS] - bilinear_start[X_AXIS],
- ry = raw[Y_AXIS] - bilinear_start[Y_AXIS];
-
- #if ENABLED(EXTRAPOLATE_BEYOND_GRID)
- // Keep using the last grid box
- #define FAR_EDGE_OR_BOX 2
- #else
- // Just use the grid far edge
- #define FAR_EDGE_OR_BOX 1
- #endif
-
- if (last_x != rx) {
- last_x = rx;
- ratio_x = rx * ABL_BG_FACTOR(X_AXIS);
- const float gx = constrain(FLOOR(ratio_x), 0, ABL_BG_POINTS_X - FAR_EDGE_OR_BOX);
- ratio_x -= gx; // Subtract whole to get the ratio within the grid box
-
- #if DISABLED(EXTRAPOLATE_BEYOND_GRID)
- // Beyond the grid maintain height at grid edges
- NOLESS(ratio_x, 0); // Never < 0.0. (> 1.0 is ok when nextx==gridx.)
- #endif
-
- gridx = gx;
- nextx = min(gridx + 1, ABL_BG_POINTS_X - 1);
- }
-
- if (last_y != ry || last_gridx != gridx) {
-
- if (last_y != ry) {
- last_y = ry;
- ratio_y = ry * ABL_BG_FACTOR(Y_AXIS);
- const float gy = constrain(FLOOR(ratio_y), 0, ABL_BG_POINTS_Y - FAR_EDGE_OR_BOX);
- ratio_y -= gy;
-
- #if DISABLED(EXTRAPOLATE_BEYOND_GRID)
- // Beyond the grid maintain height at grid edges
- NOLESS(ratio_y, 0); // Never < 0.0. (> 1.0 is ok when nexty==gridy.)
- #endif
-
- gridy = gy;
- nexty = min(gridy + 1, ABL_BG_POINTS_Y - 1);
- }
-
- if (last_gridx != gridx || last_gridy != gridy) {
- last_gridx = gridx;
- last_gridy = gridy;
- // Z at the box corners
- z1 = ABL_BG_GRID(gridx, gridy); // left-front
- d2 = ABL_BG_GRID(gridx, nexty) - z1; // left-back (delta)
- z3 = ABL_BG_GRID(nextx, gridy); // right-front
- d4 = ABL_BG_GRID(nextx, nexty) - z3; // right-back (delta)
- }
-
- // Bilinear interpolate. Needed since ry or gridx has changed.
- L = z1 + d2 * ratio_y; // Linear interp. LF -> LB
- const float R = z3 + d4 * ratio_y; // Linear interp. RF -> RB
-
- D = R - L;
- }
-
- const float offset = L + ratio_x * D; // the offset almost always changes
-
- /*
- static float last_offset = 0;
- if (FABS(last_offset - offset) > 0.2) {
- SERIAL_ECHOPGM("Sudden Shift at ");
- SERIAL_ECHOPAIR("x=", rx);
- SERIAL_ECHOPAIR(" / ", bilinear_grid_spacing[X_AXIS]);
- SERIAL_ECHOLNPAIR(" -> gridx=", gridx);
- SERIAL_ECHOPAIR(" y=", ry);
- SERIAL_ECHOPAIR(" / ", bilinear_grid_spacing[Y_AXIS]);
- SERIAL_ECHOLNPAIR(" -> gridy=", gridy);
- SERIAL_ECHOPAIR(" ratio_x=", ratio_x);
- SERIAL_ECHOLNPAIR(" ratio_y=", ratio_y);
- SERIAL_ECHOPAIR(" z1=", z1);
- SERIAL_ECHOPAIR(" z2=", z2);
- SERIAL_ECHOPAIR(" z3=", z3);
- SERIAL_ECHOLNPAIR(" z4=", z4);
- SERIAL_ECHOPAIR(" L=", L);
- SERIAL_ECHOPAIR(" R=", R);
- SERIAL_ECHOLNPAIR(" offset=", offset);
- }
- last_offset = offset;
- //*/
-
- return offset;
- }
-
-#endif // AUTO_BED_LEVELING_BILINEAR
-
-#if ENABLED(DELTA)
-
- /**
- * Recalculate factors used for delta kinematics whenever
- * settings have been changed (e.g., by M665).
- */
- void recalc_delta_settings() {
- const float trt[ABC] = DELTA_RADIUS_TRIM_TOWER,
- drt[ABC] = DELTA_DIAGONAL_ROD_TRIM_TOWER;
- delta_tower[A_AXIS][X_AXIS] = cos(RADIANS(210 + delta_tower_angle_trim[A_AXIS])) * (delta_radius + trt[A_AXIS]); // front left tower
- delta_tower[A_AXIS][Y_AXIS] = sin(RADIANS(210 + delta_tower_angle_trim[A_AXIS])) * (delta_radius + trt[A_AXIS]);
- delta_tower[B_AXIS][X_AXIS] = cos(RADIANS(330 + delta_tower_angle_trim[B_AXIS])) * (delta_radius + trt[B_AXIS]); // front right tower
- delta_tower[B_AXIS][Y_AXIS] = sin(RADIANS(330 + delta_tower_angle_trim[B_AXIS])) * (delta_radius + trt[B_AXIS]);
- delta_tower[C_AXIS][X_AXIS] = cos(RADIANS( 90 + delta_tower_angle_trim[C_AXIS])) * (delta_radius + trt[C_AXIS]); // back middle tower
- delta_tower[C_AXIS][Y_AXIS] = sin(RADIANS( 90 + delta_tower_angle_trim[C_AXIS])) * (delta_radius + trt[C_AXIS]);
- delta_diagonal_rod_2_tower[A_AXIS] = sq(delta_diagonal_rod + drt[A_AXIS]);
- delta_diagonal_rod_2_tower[B_AXIS] = sq(delta_diagonal_rod + drt[B_AXIS]);
- delta_diagonal_rod_2_tower[C_AXIS] = sq(delta_diagonal_rod + drt[C_AXIS]);
- update_software_endstops(Z_AXIS);
- axis_homed[X_AXIS] = axis_homed[Y_AXIS] = axis_homed[Z_AXIS] = false;
- }
-
- #if ENABLED(DELTA_FAST_SQRT)
- /**
- * Fast inverse sqrt from Quake III Arena
- * See: https://en.wikipedia.org/wiki/Fast_inverse_square_root
- */
- float Q_rsqrt(const float number) {
- long i;
- float x2, y;
- const float threehalfs = 1.5f;
- x2 = number * 0.5f;
- y = number;
- i = * ( long * ) &y; // evil floating point bit level hacking
- i = 0x5F3759DF - ( i >> 1 ); // what the f***?
- y = * ( float * ) &i;
- y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
- // y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed
- return y;
- }
-
- #endif
-
- /**
- * Delta Inverse Kinematics
- *
- * Calculate the tower positions for a given machine
- * position, storing the result in the delta[] array.
- *
- * This is an expensive calculation, requiring 3 square
- * roots per segmented linear move, and strains the limits
- * of a Mega2560 with a Graphical Display.
- *
- * Suggested optimizations include:
- *
- * - Disable the home_offset (M206) and/or position_shift (G92)
- * features to remove up to 12 float additions.
- *
- * - Use a fast-inverse-sqrt function and add the reciprocal.
- * (see above)
- */
-
- #define DELTA_DEBUG(VAR) do { \
- SERIAL_ECHOPAIR("cartesian X:", VAR[X_AXIS]); \
- SERIAL_ECHOPAIR(" Y:", VAR[Y_AXIS]); \
- SERIAL_ECHOLNPAIR(" Z:", VAR[Z_AXIS]); \
- SERIAL_ECHOPAIR("delta A:", delta[A_AXIS]); \
- SERIAL_ECHOPAIR(" B:", delta[B_AXIS]); \
- SERIAL_ECHOLNPAIR(" C:", delta[C_AXIS]); \
- }while(0)
-
- void inverse_kinematics(const float raw[XYZ]) {
- #if HOTENDS > 1
- // Delta hotend offsets must be applied in Cartesian space with no "spoofing"
- const float pos[XYZ] = {
- raw[X_AXIS] - hotend_offset[X_AXIS][active_extruder],
- raw[Y_AXIS] - hotend_offset[Y_AXIS][active_extruder],
- raw[Z_AXIS]
- };
- DELTA_IK(pos);
- //DELTA_DEBUG(pos);
- #else
- DELTA_IK(raw);
- //DELTA_DEBUG(raw);
- #endif
- }
-
- /**
- * Calculate the highest Z position where the
- * effector has the full range of XY motion.
- */
- float delta_safe_distance_from_top() {
- float cartesian[XYZ] = { 0, 0, 0 };
- inverse_kinematics(cartesian);
- const float centered_extent = delta[A_AXIS];
- cartesian[Y_AXIS] = DELTA_PRINTABLE_RADIUS;
- inverse_kinematics(cartesian);
- return FABS(centered_extent - delta[A_AXIS]);
- }
-
- /**
- * Delta Forward Kinematics
- *
- * See the Wikipedia article "Trilateration"
- * https://en.wikipedia.org/wiki/Trilateration
- *
- * Establish a new coordinate system in the plane of the
- * three carriage points. This system has its origin at
- * tower1, with tower2 on the X axis. Tower3 is in the X-Y
- * plane with a Z component of zero.
- * We will define unit vectors in this coordinate system
- * in our original coordinate system. Then when we calculate
- * the Xnew, Ynew and Znew values, we can translate back into
- * the original system by moving along those unit vectors
- * by the corresponding values.
- *
- * Variable names matched to Marlin, c-version, and avoid the
- * use of any vector library.
- *
- * by Andreas Hardtung 2016-06-07
- * based on a Java function from "Delta Robot Kinematics V3"
- * by Steve Graves
- *
- * The result is stored in the cartes[] array.
- */
- void forward_kinematics_DELTA(float z1, float z2, float z3) {
- // Create a vector in old coordinates along x axis of new coordinate
- const float p12[] = {
- delta_tower[B_AXIS][X_AXIS] - delta_tower[A_AXIS][X_AXIS],
- delta_tower[B_AXIS][Y_AXIS] - delta_tower[A_AXIS][Y_AXIS],
- z2 - z1
- },
-
- // Get the Magnitude of vector.
- d = SQRT(sq(p12[0]) + sq(p12[1]) + sq(p12[2])),
-
- // Create unit vector by dividing by magnitude.
- ex[3] = { p12[0] / d, p12[1] / d, p12[2] / d },
-
- // Get the vector from the origin of the new system to the third point.
- p13[3] = {
- delta_tower[C_AXIS][X_AXIS] - delta_tower[A_AXIS][X_AXIS],
- delta_tower[C_AXIS][Y_AXIS] - delta_tower[A_AXIS][Y_AXIS],
- z3 - z1
- },
-
- // Use the dot product to find the component of this vector on the X axis.
- i = ex[0] * p13[0] + ex[1] * p13[1] + ex[2] * p13[2],
-
- // Create a vector along the x axis that represents the x component of p13.
- iex[] = { ex[0] * i, ex[1] * i, ex[2] * i };
-
- // Subtract the X component from the original vector leaving only Y. We use the
- // variable that will be the unit vector after we scale it.
- float ey[3] = { p13[0] - iex[0], p13[1] - iex[1], p13[2] - iex[2] };
-
- // The magnitude of Y component
- const float j = SQRT(sq(ey[0]) + sq(ey[1]) + sq(ey[2]));
-
- // Convert to a unit vector
- ey[0] /= j; ey[1] /= j; ey[2] /= j;
-
- // The cross product of the unit x and y is the unit z
- // float[] ez = vectorCrossProd(ex, ey);
- const float ez[3] = {
- ex[1] * ey[2] - ex[2] * ey[1],
- ex[2] * ey[0] - ex[0] * ey[2],
- ex[0] * ey[1] - ex[1] * ey[0]
- },
- // We now have the d, i and j values defined in Wikipedia.
- // Plug them into the equations defined in Wikipedia for Xnew, Ynew and Znew
- Xnew = (delta_diagonal_rod_2_tower[A_AXIS] - delta_diagonal_rod_2_tower[B_AXIS] + sq(d)) / (d * 2),
- Ynew = ((delta_diagonal_rod_2_tower[A_AXIS] - delta_diagonal_rod_2_tower[C_AXIS] + HYPOT2(i, j)) / 2 - i * Xnew) / j,
- Znew = SQRT(delta_diagonal_rod_2_tower[A_AXIS] - HYPOT2(Xnew, Ynew));
-
- // Start from the origin of the old coordinates and add vectors in the
- // old coords that represent the Xnew, Ynew and Znew to find the point
- // in the old system.
- cartes[X_AXIS] = delta_tower[A_AXIS][X_AXIS] + ex[0] * Xnew + ey[0] * Ynew - ez[0] * Znew;
- cartes[Y_AXIS] = delta_tower[A_AXIS][Y_AXIS] + ex[1] * Xnew + ey[1] * Ynew - ez[1] * Znew;
- cartes[Z_AXIS] = z1 + ex[2] * Xnew + ey[2] * Ynew - ez[2] * Znew;
- }
-
- void forward_kinematics_DELTA(float point[ABC]) {
- forward_kinematics_DELTA(point[A_AXIS], point[B_AXIS], point[C_AXIS]);
- }
-
-#endif // DELTA
-
-/**
- * Get the stepper positions in the cartes[] array.
- * Forward kinematics are applied for DELTA and SCARA.
- *
- * The result is in the current coordinate space with
- * leveling applied. The coordinates need to be run through
- * unapply_leveling to obtain machine coordinates suitable
- * for current_position, etc.
- */
-void get_cartesian_from_steppers() {
- #if ENABLED(DELTA)
- forward_kinematics_DELTA(
- stepper.get_axis_position_mm(A_AXIS),
- stepper.get_axis_position_mm(B_AXIS),
- stepper.get_axis_position_mm(C_AXIS)
- );
- #else
- #if IS_SCARA
- forward_kinematics_SCARA(
- stepper.get_axis_position_degrees(A_AXIS),
- stepper.get_axis_position_degrees(B_AXIS)
- );
- #else
- cartes[X_AXIS] = stepper.get_axis_position_mm(X_AXIS);
- cartes[Y_AXIS] = stepper.get_axis_position_mm(Y_AXIS);
- #endif
- cartes[Z_AXIS] = stepper.get_axis_position_mm(Z_AXIS);
- #endif
-}
-
-/**
- * Set the current_position for an axis based on
- * the stepper positions, removing any leveling that
- * may have been applied.
- *
- * To prevent small shifts in axis position always call
- * SYNC_PLAN_POSITION_KINEMATIC after updating axes with this.
- *
- * To keep hosts in sync, always call report_current_position
- * after updating the current_position.
- */
-void set_current_from_steppers_for_axis(const AxisEnum axis) {
- get_cartesian_from_steppers();
- #if PLANNER_LEVELING
- planner.unapply_leveling(cartes);
- #endif
- if (axis == ALL_AXES)
- COPY(current_position, cartes);
- else
- current_position[axis] = cartes[axis];
-}
-
-#if IS_CARTESIAN
-#if ENABLED(SEGMENT_LEVELED_MOVES)
-
- /**
- * Prepare a segmented move on a CARTESIAN setup.
- *
- * This calls planner.buffer_line several times, adding
- * small incremental moves. This allows the planner to
- * apply more detailed bed leveling to the full move.
- */
- inline void segmented_line_to_destination(const float &fr_mm_s, const float segment_size=LEVELED_SEGMENT_LENGTH) {
-
- const float xdiff = destination[X_AXIS] - current_position[X_AXIS],
- ydiff = destination[Y_AXIS] - current_position[Y_AXIS];
-
- // If the move is only in Z/E don't split up the move
- if (!xdiff && !ydiff) {
- planner.buffer_line_kinematic(destination, fr_mm_s, active_extruder);
- return;
- }
-
- // Remaining cartesian distances
- const float zdiff = destination[Z_AXIS] - current_position[Z_AXIS],
- ediff = destination[E_AXIS] - current_position[E_AXIS];
-
- // Get the linear distance in XYZ
- // If the move is very short, check the E move distance
- // No E move either? Game over.
- float cartesian_mm = SQRT(sq(xdiff) + sq(ydiff) + sq(zdiff));
- if (UNEAR_ZERO(cartesian_mm)) cartesian_mm = FABS(ediff);
- if (UNEAR_ZERO(cartesian_mm)) return;
-
- // The length divided by the segment size
- // At least one segment is required
- uint16_t segments = cartesian_mm / segment_size;
- NOLESS(segments, 1);
-
- // The approximate length of each segment
- const float inv_segments = 1.0 / float(segments),
- cartesian_segment_mm = cartesian_mm * inv_segments,
- segment_distance[XYZE] = {
- xdiff * inv_segments,
- ydiff * inv_segments,
- zdiff * inv_segments,
- ediff * inv_segments
- };
-
- // SERIAL_ECHOPAIR("mm=", cartesian_mm);
- // SERIAL_ECHOLNPAIR(" segments=", segments);
- // SERIAL_ECHOLNPAIR(" segment_mm=", cartesian_segment_mm);
-
- // Get the raw current position as starting point
- float raw[XYZE];
- COPY(raw, current_position);
-
- // Calculate and execute the segments
- while (--segments) {
- static millis_t next_idle_ms = millis() + 200UL;
- thermalManager.manage_heater(); // This returns immediately if not really needed.
- if (ELAPSED(millis(), next_idle_ms)) {
- next_idle_ms = millis() + 200UL;
- idle();
- }
- LOOP_XYZE(i) raw[i] += segment_distance[i];
- planner.buffer_line_kinematic(raw, fr_mm_s, active_extruder, cartesian_segment_mm);
- }
-
- // Since segment_distance is only approximate,
- // the final move must be to the exact destination.
- planner.buffer_line_kinematic(destination, fr_mm_s, active_extruder, cartesian_segment_mm);
- }
-
-#elif ENABLED(MESH_BED_LEVELING)
-
- /**
- * Prepare a mesh-leveled linear move in a Cartesian setup,
- * splitting the move where it crosses mesh borders.
- */
- void mesh_line_to_destination(const float fr_mm_s, uint8_t x_splits=0xFF, uint8_t y_splits=0xFF) {
- // Get current and destination cells for this line
- int cx1 = mbl.cell_index_x(current_position[X_AXIS]),
- cy1 = mbl.cell_index_y(current_position[Y_AXIS]),
- cx2 = mbl.cell_index_x(destination[X_AXIS]),
- cy2 = mbl.cell_index_y(destination[Y_AXIS]);
- NOMORE(cx1, GRID_MAX_POINTS_X - 2);
- NOMORE(cy1, GRID_MAX_POINTS_Y - 2);
- NOMORE(cx2, GRID_MAX_POINTS_X - 2);
- NOMORE(cy2, GRID_MAX_POINTS_Y - 2);
-
- // Start and end in the same cell? No split needed.
- if (cx1 == cx2 && cy1 == cy2) {
- buffer_line_to_destination(fr_mm_s);
- set_current_from_destination();
- return;
- }
-
- #define MBL_SEGMENT_END(A) (current_position[A ##_AXIS] + (destination[A ##_AXIS] - current_position[A ##_AXIS]) * normalized_dist)
-
- float normalized_dist, end[XYZE];
- const int8_t gcx = max(cx1, cx2), gcy = max(cy1, cy2);
-
- // Crosses on the X and not already split on this X?
- // The x_splits flags are insurance against rounding errors.
- if (cx2 != cx1 && TEST(x_splits, gcx)) {
- // Split on the X grid line
- CBI(x_splits, gcx);
- COPY(end, destination);
- destination[X_AXIS] = mbl.index_to_xpos[gcx];
- normalized_dist = (destination[X_AXIS] - current_position[X_AXIS]) / (end[X_AXIS] - current_position[X_AXIS]);
- destination[Y_AXIS] = MBL_SEGMENT_END(Y);
- }
- // Crosses on the Y and not already split on this Y?
- else if (cy2 != cy1 && TEST(y_splits, gcy)) {
- // Split on the Y grid line
- CBI(y_splits, gcy);
- COPY(end, destination);
- destination[Y_AXIS] = mbl.index_to_ypos[gcy];
- normalized_dist = (destination[Y_AXIS] - current_position[Y_AXIS]) / (end[Y_AXIS] - current_position[Y_AXIS]);
- destination[X_AXIS] = MBL_SEGMENT_END(X);
- }
- else {
- // Must already have been split on these border(s)
- buffer_line_to_destination(fr_mm_s);
- set_current_from_destination();
- return;
- }
-
- destination[Z_AXIS] = MBL_SEGMENT_END(Z);
- destination[E_AXIS] = MBL_SEGMENT_END(E);
-
- // Do the split and look for more borders
- mesh_line_to_destination(fr_mm_s, x_splits, y_splits);
-
- // Restore destination from stack
- COPY(destination, end);
- mesh_line_to_destination(fr_mm_s, x_splits, y_splits);
- }
-
-#elif ENABLED(AUTO_BED_LEVELING_BILINEAR)
-
- #define CELL_INDEX(A,V) ((V - bilinear_start[A##_AXIS]) * ABL_BG_FACTOR(A##_AXIS))
-
- /**
- * Prepare a bilinear-leveled linear move on Cartesian,
- * splitting the move where it crosses grid borders.
- */
- void bilinear_line_to_destination(const float fr_mm_s, uint16_t x_splits=0xFFFF, uint16_t y_splits=0xFFFF) {
- // Get current and destination cells for this line
- int cx1 = CELL_INDEX(X, current_position[X_AXIS]),
- cy1 = CELL_INDEX(Y, current_position[Y_AXIS]),
- cx2 = CELL_INDEX(X, destination[X_AXIS]),
- cy2 = CELL_INDEX(Y, destination[Y_AXIS]);
- cx1 = constrain(cx1, 0, ABL_BG_POINTS_X - 2);
- cy1 = constrain(cy1, 0, ABL_BG_POINTS_Y - 2);
- cx2 = constrain(cx2, 0, ABL_BG_POINTS_X - 2);
- cy2 = constrain(cy2, 0, ABL_BG_POINTS_Y - 2);
-
- // Start and end in the same cell? No split needed.
- if (cx1 == cx2 && cy1 == cy2) {
- buffer_line_to_destination(fr_mm_s);
- set_current_from_destination();
- return;
- }
-
- #define LINE_SEGMENT_END(A) (current_position[A ##_AXIS] + (destination[A ##_AXIS] - current_position[A ##_AXIS]) * normalized_dist)
-
- float normalized_dist, end[XYZE];
- const int8_t gcx = max(cx1, cx2), gcy = max(cy1, cy2);
-
- // Crosses on the X and not already split on this X?
- // The x_splits flags are insurance against rounding errors.
- if (cx2 != cx1 && TEST(x_splits, gcx)) {
- // Split on the X grid line
- CBI(x_splits, gcx);
- COPY(end, destination);
- destination[X_AXIS] = bilinear_start[X_AXIS] + ABL_BG_SPACING(X_AXIS) * gcx;
- normalized_dist = (destination[X_AXIS] - current_position[X_AXIS]) / (end[X_AXIS] - current_position[X_AXIS]);
- destination[Y_AXIS] = LINE_SEGMENT_END(Y);
- }
- // Crosses on the Y and not already split on this Y?
- else if (cy2 != cy1 && TEST(y_splits, gcy)) {
- // Split on the Y grid line
- CBI(y_splits, gcy);
- COPY(end, destination);
- destination[Y_AXIS] = bilinear_start[Y_AXIS] + ABL_BG_SPACING(Y_AXIS) * gcy;
- normalized_dist = (destination[Y_AXIS] - current_position[Y_AXIS]) / (end[Y_AXIS] - current_position[Y_AXIS]);
- destination[X_AXIS] = LINE_SEGMENT_END(X);
- }
- else {
- // Must already have been split on these border(s)
- buffer_line_to_destination(fr_mm_s);
- set_current_from_destination();
- return;
- }
-
- destination[Z_AXIS] = LINE_SEGMENT_END(Z);
- destination[E_AXIS] = LINE_SEGMENT_END(E);
-
- // Do the split and look for more borders
- bilinear_line_to_destination(fr_mm_s, x_splits, y_splits);
-
- // Restore destination from stack
- COPY(destination, end);
- bilinear_line_to_destination(fr_mm_s, x_splits, y_splits);
- }
-
-#endif // AUTO_BED_LEVELING_BILINEAR
-#endif // IS_CARTESIAN
-
-#if !UBL_SEGMENTED
-#if IS_KINEMATIC
-
- #if IS_SCARA
- /**
- * Before raising this value, use M665 S[seg_per_sec] to decrease
- * the number of segments-per-second. Default is 200. Some deltas
- * do better with 160 or lower. It would be good to know how many
- * segments-per-second are actually possible for SCARA on AVR.
- *
- * Longer segments result in less kinematic overhead
- * but may produce jagged lines. Try 0.5mm, 1.0mm, and 2.0mm
- * and compare the difference.
- */
- #define SCARA_MIN_SEGMENT_LENGTH 0.5
- #endif
-
- /**
- * Prepare a linear move in a DELTA or SCARA setup.
- *
- * This calls planner.buffer_line several times, adding
- * small incremental moves for DELTA or SCARA.
- *
- * For Unified Bed Leveling (Delta or Segmented Cartesian)
- * the ubl.prepare_segmented_line_to method replaces this.
- */
- inline bool prepare_kinematic_move_to(const float (&rtarget)[XYZE]) {
-
- // Get the top feedrate of the move in the XY plane
- const float _feedrate_mm_s = MMS_SCALED(feedrate_mm_s);
-
- const float xdiff = rtarget[X_AXIS] - current_position[X_AXIS],
- ydiff = rtarget[Y_AXIS] - current_position[Y_AXIS];
-
- // If the move is only in Z/E don't split up the move
- if (!xdiff && !ydiff) {
- planner.buffer_line_kinematic(rtarget, _feedrate_mm_s, active_extruder);
- return false; // caller will update current_position
- }
-
- // Fail if attempting move outside printable radius
- if (!position_is_reachable(rtarget[X_AXIS], rtarget[Y_AXIS])) return true;
-
- // Remaining cartesian distances
- const float zdiff = rtarget[Z_AXIS] - current_position[Z_AXIS],
- ediff = rtarget[E_AXIS] - current_position[E_AXIS];
-
- // Get the linear distance in XYZ
- // If the move is very short, check the E move distance
- // No E move either? Game over.
- float cartesian_mm = SQRT(sq(xdiff) + sq(ydiff) + sq(zdiff));
- if (UNEAR_ZERO(cartesian_mm)) cartesian_mm = FABS(ediff);
- if (UNEAR_ZERO(cartesian_mm)) return true;
-
- // Minimum number of seconds to move the given distance
- const float seconds = cartesian_mm / _feedrate_mm_s;
-
- // The number of segments-per-second times the duration
- // gives the number of segments
- uint16_t segments = delta_segments_per_second * seconds;
-
- // For SCARA enforce a minimum segment size
- #if IS_SCARA
- NOMORE(segments, cartesian_mm * (1.0 / SCARA_MIN_SEGMENT_LENGTH));
- #endif
-
- // At least one segment is required
- NOLESS(segments, 1);
-
- // The approximate length of each segment
- const float inv_segments = 1.0 / float(segments),
- segment_distance[XYZE] = {
- xdiff * inv_segments,
- ydiff * inv_segments,
- zdiff * inv_segments,
- ediff * inv_segments
- };
-
- #if DISABLED(SCARA_FEEDRATE_SCALING)
- const float cartesian_segment_mm = cartesian_mm * inv_segments;
- #endif
-
- /*
- SERIAL_ECHOPAIR("mm=", cartesian_mm);
- SERIAL_ECHOPAIR(" seconds=", seconds);
- SERIAL_ECHOPAIR(" segments=", segments);
- #if DISABLED(SCARA_FEEDRATE_SCALING)
- SERIAL_ECHOLNPAIR(" segment_mm=", cartesian_segment_mm);
- #else
- SERIAL_EOL();
- #endif
- //*/
-
- #if ENABLED(SCARA_FEEDRATE_SCALING)
- // SCARA needs to scale the feed rate from mm/s to degrees/s
- // i.e., Complete the angular vector in the given time.
- const float segment_length = cartesian_mm * inv_segments,
- inv_segment_length = 1.0 / segment_length, // 1/mm/segs
- inverse_secs = inv_segment_length * _feedrate_mm_s;
-
- float oldA = planner.position_float[A_AXIS],
- oldB = planner.position_float[B_AXIS];
-
- /*
- SERIAL_ECHOPGM("Scaled kinematic move: ");
- SERIAL_ECHOPAIR(" segment_length (inv)=", segment_length);
- SERIAL_ECHOPAIR(" (", inv_segment_length);
- SERIAL_ECHOPAIR(") _feedrate_mm_s=", _feedrate_mm_s);
- SERIAL_ECHOPAIR(" inverse_secs=", inverse_secs);
- SERIAL_ECHOPAIR(" oldA=", oldA);
- SERIAL_ECHOLNPAIR(" oldB=", oldB);
- safe_delay(5);
- //*/
- #endif
-
- // Get the current position as starting point
- float raw[XYZE];
- COPY(raw, current_position);
-
- // Calculate and execute the segments
- while (--segments) {
-
- static millis_t next_idle_ms = millis() + 200UL;
- thermalManager.manage_heater(); // This returns immediately if not really needed.
- if (ELAPSED(millis(), next_idle_ms)) {
- next_idle_ms = millis() + 200UL;
- idle();
- }
-
- LOOP_XYZE(i) raw[i] += segment_distance[i];
- #if ENABLED(DELTA) && HOTENDS < 2
- DELTA_IK(raw); // Delta can inline its kinematics
- #else
- inverse_kinematics(raw);
- #endif
-
- ADJUST_DELTA(raw); // Adjust Z if bed leveling is enabled
-
- #if ENABLED(SCARA_FEEDRATE_SCALING)
- // For SCARA scale the feed rate from mm/s to degrees/s
- // i.e., Complete the angular vector in the given time.
- planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], raw[Z_AXIS], raw[E_AXIS], HYPOT(delta[A_AXIS] - oldA, delta[B_AXIS] - oldB) * inverse_secs, active_extruder);
- /*
- SERIAL_ECHO(segments);
- SERIAL_ECHOPAIR(": X=", raw[X_AXIS]); SERIAL_ECHOPAIR(" Y=", raw[Y_AXIS]);
- SERIAL_ECHOPAIR(" A=", delta[A_AXIS]); SERIAL_ECHOPAIR(" B=", delta[B_AXIS]);
- SERIAL_ECHOLNPAIR(" F", HYPOT(delta[A_AXIS] - oldA, delta[B_AXIS] - oldB) * inverse_secs * 60);
- safe_delay(5);
- //*/
- oldA = delta[A_AXIS]; oldB = delta[B_AXIS];
- #else
- planner.buffer_line(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], raw[E_AXIS], _feedrate_mm_s, active_extruder, cartesian_segment_mm);
- #endif
- }
-
- // Ensure last segment arrives at target location.
- #if ENABLED(SCARA_FEEDRATE_SCALING)
- inverse_kinematics(rtarget);
- ADJUST_DELTA(rtarget);
- const float diff2 = HYPOT2(delta[A_AXIS] - oldA, delta[B_AXIS] - oldB);
- if (diff2) {
- planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], rtarget[Z_AXIS], rtarget[E_AXIS], SQRT(diff2) * inverse_secs, active_extruder);
- /*
- SERIAL_ECHOPAIR("final: A=", delta[A_AXIS]); SERIAL_ECHOPAIR(" B=", delta[B_AXIS]);
- SERIAL_ECHOPAIR(" adiff=", delta[A_AXIS] - oldA); SERIAL_ECHOPAIR(" bdiff=", delta[B_AXIS] - oldB);
- SERIAL_ECHOLNPAIR(" F", (SQRT(diff2) * inverse_secs) * 60);
- SERIAL_EOL();
- safe_delay(5);
- //*/
- }
- #else
- planner.buffer_line_kinematic(rtarget, _feedrate_mm_s, active_extruder, cartesian_segment_mm);
- #endif
-
- return false; // caller will update current_position
- }
-
-#else // !IS_KINEMATIC
-
- /**
- * Prepare a linear move in a Cartesian setup.
- *
- * When a mesh-based leveling system is active, moves are segmented
- * according to the configuration of the leveling system.
- *
- * Returns true if current_position[] was set to destination[]
- */
- inline bool prepare_move_to_destination_cartesian() {
- #if HAS_MESH
- if (planner.leveling_active && planner.leveling_active_at_z(destination[Z_AXIS])) {
- #if ENABLED(AUTO_BED_LEVELING_UBL)
- ubl.line_to_destination_cartesian(MMS_SCALED(feedrate_mm_s), active_extruder); // UBL's motion routine needs to know about
- return true; // all moves, including Z-only moves.
- #elif ENABLED(SEGMENT_LEVELED_MOVES)
- segmented_line_to_destination(MMS_SCALED(feedrate_mm_s));
- return false; // caller will update current_position
- #else
- /**
- * For MBL and ABL-BILINEAR only segment moves when X or Y are involved.
- * Otherwise fall through to do a direct single move.
- */
- if (current_position[X_AXIS] != destination[X_AXIS] || current_position[Y_AXIS] != destination[Y_AXIS]) {
- #if ENABLED(MESH_BED_LEVELING)
- mesh_line_to_destination(MMS_SCALED(feedrate_mm_s));
- #elif ENABLED(AUTO_BED_LEVELING_BILINEAR)
- bilinear_line_to_destination(MMS_SCALED(feedrate_mm_s));
- #endif
- return true;
- }
- #endif
- }
- #endif // HAS_MESH
-
- buffer_line_to_destination(MMS_SCALED(feedrate_mm_s));
- return false; // caller will update current_position
- }
-
-#endif // !IS_KINEMATIC
-#endif // !UBL_SEGMENTED
-
-#if ENABLED(DUAL_X_CARRIAGE)
-
- /**
- * Unpark the carriage, if needed
- */
- inline bool dual_x_carriage_unpark() {
- if (active_extruder_parked)
- switch (dual_x_carriage_mode) {
-
- case DXC_FULL_CONTROL_MODE: break;
-
- case DXC_AUTO_PARK_MODE:
- if (current_position[E_AXIS] == destination[E_AXIS]) {
- // This is a travel move (with no extrusion)
- // Skip it, but keep track of the current position
- // (so it can be used as the start of the next non-travel move)
- if (delayed_move_time != 0xFFFFFFFFUL) {
- set_current_from_destination();
- NOLESS(raised_parked_position[Z_AXIS], destination[Z_AXIS]);
- delayed_move_time = millis();
- return true;
- }
- }
- // unpark extruder: 1) raise, 2) move into starting XY position, 3) lower
- for (uint8_t i = 0; i < 3; i++)
- planner.buffer_line(
- i == 0 ? raised_parked_position[X_AXIS] : current_position[X_AXIS],
- i == 0 ? raised_parked_position[Y_AXIS] : current_position[Y_AXIS],
- i == 2 ? current_position[Z_AXIS] : raised_parked_position[Z_AXIS],
- current_position[E_AXIS],
- i == 1 ? PLANNER_XY_FEEDRATE() : planner.max_feedrate_mm_s[Z_AXIS],
- active_extruder
- );
- delayed_move_time = 0;
- active_extruder_parked = false;
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("Clear active_extruder_parked");
- #endif
- break;
-
- case DXC_DUPLICATION_MODE:
- if (active_extruder == 0) {
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOPAIR("Set planner X", inactive_extruder_x_pos);
- SERIAL_ECHOLNPAIR(" ... Line to X", current_position[X_AXIS] + duplicate_extruder_x_offset);
- }
- #endif
- // move duplicate extruder into correct duplication position.
- planner.set_position_mm(
- inactive_extruder_x_pos,
- current_position[Y_AXIS],
- current_position[Z_AXIS],
- current_position[E_AXIS]
- );
- planner.buffer_line(
- current_position[X_AXIS] + duplicate_extruder_x_offset,
- current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS],
- planner.max_feedrate_mm_s[X_AXIS], 1
- );
- stepper.synchronize();
- SYNC_PLAN_POSITION_KINEMATIC();
- extruder_duplication_enabled = true;
- active_extruder_parked = false;
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("Set extruder_duplication_enabled\nClear active_extruder_parked");
- #endif
- }
- else {
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("Active extruder not 0");
- #endif
- }
- break;
- }
- return false;
- }
-
-#endif // DUAL_X_CARRIAGE
-
-/**
- * Prepare a single move and get ready for the next one
- *
- * This may result in several calls to planner.buffer_line to
- * do smaller moves for DELTA, SCARA, mesh moves, etc.
- *
- * Make sure current_position[E] and destination[E] are good
- * before calling or cold/lengthy extrusion may get missed.
- */
-void prepare_move_to_destination() {
- clamp_to_software_endstops(destination);
-
- #if ENABLED(PREVENT_COLD_EXTRUSION) || ENABLED(PREVENT_LENGTHY_EXTRUDE)
-
- if (!DEBUGGING(DRYRUN)) {
- if (destination[E_AXIS] != current_position[E_AXIS]) {
- #if ENABLED(PREVENT_COLD_EXTRUSION)
- if (thermalManager.tooColdToExtrude(active_extruder)) {
- current_position[E_AXIS] = destination[E_AXIS]; // Behave as if the move really took place, but ignore E part
- SERIAL_ECHO_START();
- SERIAL_ECHOLNPGM(MSG_ERR_COLD_EXTRUDE_STOP);
- }
- #endif // PREVENT_COLD_EXTRUSION
- #if ENABLED(PREVENT_LENGTHY_EXTRUDE)
- if (FABS(destination[E_AXIS] - current_position[E_AXIS]) * planner.e_factor[active_extruder] > (EXTRUDE_MAXLENGTH)) {
- current_position[E_AXIS] = destination[E_AXIS]; // Behave as if the move really took place, but ignore E part
- SERIAL_ECHO_START();
- SERIAL_ECHOLNPGM(MSG_ERR_LONG_EXTRUDE_STOP);
- }
- #endif // PREVENT_LENGTHY_EXTRUDE
- }
- }
-
- #endif
-
- #if ENABLED(DUAL_X_CARRIAGE)
- if (dual_x_carriage_unpark()) return;
- #endif
-
- if (
- #if UBL_SEGMENTED
- ubl.prepare_segmented_line_to(destination, MMS_SCALED(feedrate_mm_s))
- #elif IS_KINEMATIC
- prepare_kinematic_move_to(destination)
- #else
- prepare_move_to_destination_cartesian()
- #endif
- ) return;
-
- set_current_from_destination();
-}
-
-#if ENABLED(ARC_SUPPORT)
-
- #if N_ARC_CORRECTION < 1
- #undef N_ARC_CORRECTION
- #define N_ARC_CORRECTION 1
- #endif
-
- /**
- * Plan an arc in 2 dimensions
- *
- * The arc is approximated by generating many small linear segments.
- * The length of each segment is configured in MM_PER_ARC_SEGMENT (Default 1mm)
- * Arcs should only be made relatively large (over 5mm), as larger arcs with
- * larger segments will tend to be more efficient. Your slicer should have
- * options for G2/G3 arc generation. In future these options may be GCode tunable.
- */
- void plan_arc(
- const float (&cart)[XYZE], // Destination position
- const float (&offset)[2], // Center of rotation relative to current_position
- const bool clockwise // Clockwise?
- ) {
- #if ENABLED(CNC_WORKSPACE_PLANES)
- AxisEnum p_axis, q_axis, l_axis;
- switch (workspace_plane) {
- default:
- case PLANE_XY: p_axis = X_AXIS; q_axis = Y_AXIS; l_axis = Z_AXIS; break;
- case PLANE_ZX: p_axis = Z_AXIS; q_axis = X_AXIS; l_axis = Y_AXIS; break;
- case PLANE_YZ: p_axis = Y_AXIS; q_axis = Z_AXIS; l_axis = X_AXIS; break;
- }
- #else
- constexpr AxisEnum p_axis = X_AXIS, q_axis = Y_AXIS, l_axis = Z_AXIS;
- #endif
-
- // Radius vector from center to current location
- float r_P = -offset[0], r_Q = -offset[1];
-
- const float radius = HYPOT(r_P, r_Q),
- center_P = current_position[p_axis] - r_P,
- center_Q = current_position[q_axis] - r_Q,
- rt_X = cart[p_axis] - center_P,
- rt_Y = cart[q_axis] - center_Q,
- linear_travel = cart[l_axis] - current_position[l_axis],
- extruder_travel = cart[E_AXIS] - current_position[E_AXIS];
-
- // CCW angle of rotation between position and target from the circle center. Only one atan2() trig computation required.
- float angular_travel = ATAN2(r_P * rt_Y - r_Q * rt_X, r_P * rt_X + r_Q * rt_Y);
- if (angular_travel < 0) angular_travel += RADIANS(360);
- if (clockwise) angular_travel -= RADIANS(360);
-
- // Make a circle if the angular rotation is 0 and the target is current position
- if (angular_travel == 0 && current_position[p_axis] == cart[p_axis] && current_position[q_axis] == cart[q_axis])
- angular_travel = RADIANS(360);
-
- const float flat_mm = radius * angular_travel,
- mm_of_travel = linear_travel ? HYPOT(flat_mm, linear_travel) : FABS(flat_mm);
- if (mm_of_travel < 0.001) return;
-
- uint16_t segments = FLOOR(mm_of_travel / (MM_PER_ARC_SEGMENT));
- NOLESS(segments, 1);
-
- /**
- * Vector rotation by transformation matrix: r is the original vector, r_T is the rotated vector,
- * and phi is the angle of rotation. Based on the solution approach by Jens Geisler.
- * r_T = [cos(phi) -sin(phi);
- * sin(phi) cos(phi)] * r ;
- *
- * For arc generation, the center of the circle is the axis of rotation and the radius vector is
- * defined from the circle center to the initial position. Each line segment is formed by successive
- * vector rotations. This requires only two cos() and sin() computations to form the rotation
- * matrix for the duration of the entire arc. Error may accumulate from numerical round-off, since
- * all double numbers are single precision on the Arduino. (True double precision will not have
- * round off issues for CNC applications.) Single precision error can accumulate to be greater than
- * tool precision in some cases. Therefore, arc path correction is implemented.
- *
- * Small angle approximation may be used to reduce computation overhead further. This approximation
- * holds for everything, but very small circles and large MM_PER_ARC_SEGMENT values. In other words,
- * theta_per_segment would need to be greater than 0.1 rad and N_ARC_CORRECTION would need to be large
- * to cause an appreciable drift error. N_ARC_CORRECTION~=25 is more than small enough to correct for
- * numerical drift error. N_ARC_CORRECTION may be on the order a hundred(s) before error becomes an
- * issue for CNC machines with the single precision Arduino calculations.
- *
- * This approximation also allows plan_arc to immediately insert a line segment into the planner
- * without the initial overhead of computing cos() or sin(). By the time the arc needs to be applied
- * a correction, the planner should have caught up to the lag caused by the initial plan_arc overhead.
- * This is important when there are successive arc motions.
- */
- // Vector rotation matrix values
- float raw[XYZE];
- const float theta_per_segment = angular_travel / segments,
- linear_per_segment = linear_travel / segments,
- extruder_per_segment = extruder_travel / segments,
- sin_T = theta_per_segment,
- cos_T = 1 - 0.5 * sq(theta_per_segment); // Small angle approximation
-
- // Initialize the linear axis
- raw[l_axis] = current_position[l_axis];
-
- // Initialize the extruder axis
- raw[E_AXIS] = current_position[E_AXIS];
-
- const float fr_mm_s = MMS_SCALED(feedrate_mm_s);
-
- millis_t next_idle_ms = millis() + 200UL;
-
- #if ENABLED(SCARA_FEEDRATE_SCALING)
- // SCARA needs to scale the feed rate from mm/s to degrees/s
- const float inv_segment_length = 1.0 / (MM_PER_ARC_SEGMENT),
- inverse_secs = inv_segment_length * fr_mm_s;
- float oldA = planner.position_float[A_AXIS],
- oldB = planner.position_float[B_AXIS];
- #endif
-
- #if N_ARC_CORRECTION > 1
- int8_t arc_recalc_count = N_ARC_CORRECTION;
- #endif
-
- for (uint16_t i = 1; i < segments; i++) { // Iterate (segments-1) times
-
- thermalManager.manage_heater();
- if (ELAPSED(millis(), next_idle_ms)) {
- next_idle_ms = millis() + 200UL;
- idle();
- }
-
- #if N_ARC_CORRECTION > 1
- if (--arc_recalc_count) {
- // Apply vector rotation matrix to previous r_P / 1
- const float r_new_Y = r_P * sin_T + r_Q * cos_T;
- r_P = r_P * cos_T - r_Q * sin_T;
- r_Q = r_new_Y;
- }
- else
- #endif
- {
- #if N_ARC_CORRECTION > 1
- arc_recalc_count = N_ARC_CORRECTION;
- #endif
-
- // Arc correction to radius vector. Computed only every N_ARC_CORRECTION increments.
- // Compute exact location by applying transformation matrix from initial radius vector(=-offset).
- // To reduce stuttering, the sin and cos could be computed at different times.
- // For now, compute both at the same time.
- const float cos_Ti = cos(i * theta_per_segment), sin_Ti = sin(i * theta_per_segment);
- r_P = -offset[0] * cos_Ti + offset[1] * sin_Ti;
- r_Q = -offset[0] * sin_Ti - offset[1] * cos_Ti;
- }
-
- // Update raw location
- raw[p_axis] = center_P + r_P;
- raw[q_axis] = center_Q + r_Q;
- raw[l_axis] += linear_per_segment;
- raw[E_AXIS] += extruder_per_segment;
-
- clamp_to_software_endstops(raw);
-
- #if ENABLED(SCARA_FEEDRATE_SCALING)
- // For SCARA scale the feed rate from mm/s to degrees/s
- // i.e., Complete the angular vector in the given time.
- inverse_kinematics(raw);
- ADJUST_DELTA(raw);
- planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], raw[Z_AXIS], raw[E_AXIS], HYPOT(delta[A_AXIS] - oldA, delta[B_AXIS] - oldB) * inverse_secs, active_extruder);
- oldA = delta[A_AXIS]; oldB = delta[B_AXIS];
- #elif HAS_UBL_AND_CURVES
- float pos[XYZ] = { raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS] };
- planner.apply_leveling(pos);
- planner.buffer_segment(pos[X_AXIS], pos[Y_AXIS], pos[Z_AXIS], raw[E_AXIS], fr_mm_s, active_extruder);
- #else
- planner.buffer_line_kinematic(raw, fr_mm_s, active_extruder);
- #endif
- }
-
- // Ensure last segment arrives at target location.
- #if ENABLED(SCARA_FEEDRATE_SCALING)
- inverse_kinematics(cart);
- ADJUST_DELTA(cart);
- const float diff2 = HYPOT2(delta[A_AXIS] - oldA, delta[B_AXIS] - oldB);
- if (diff2)
- planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], cart[Z_AXIS], cart[E_AXIS], SQRT(diff2) * inverse_secs, active_extruder);
- #elif HAS_UBL_AND_CURVES
- float pos[XYZ] = { cart[X_AXIS], cart[Y_AXIS], cart[Z_AXIS] };
- planner.apply_leveling(pos);
- planner.buffer_segment(pos[X_AXIS], pos[Y_AXIS], pos[Z_AXIS], cart[E_AXIS], fr_mm_s, active_extruder);
- #else
- planner.buffer_line_kinematic(cart, fr_mm_s, active_extruder);
- #endif
-
- // As far as the parser is concerned, the position is now == target. In reality the
- // motion control system might still be processing the action and the real tool position
- // in any intermediate location.
- set_current_from_destination();
- } // plan_arc
-
-#endif // ARC_SUPPORT
-
-#if ENABLED(BEZIER_CURVE_SUPPORT)
-
- void plan_cubic_move(const float (&offset)[4]) {
- cubic_b_spline(current_position, destination, offset, MMS_SCALED(feedrate_mm_s), active_extruder);
-
- // As far as the parser is concerned, the position is now == destination. In reality the
- // motion control system might still be processing the action and the real tool position
- // in any intermediate location.
- set_current_from_destination();
- }
-
-#endif // BEZIER_CURVE_SUPPORT
-
-#if ENABLED(USE_CONTROLLER_FAN)
-
- void controllerFan() {
- static millis_t lastMotorOn = 0, // Last time a motor was turned on
- nextMotorCheck = 0; // Last time the state was checked
- const millis_t ms = millis();
- if (ELAPSED(ms, nextMotorCheck)) {
- nextMotorCheck = ms + 2500UL; // Not a time critical function, so only check every 2.5s
- if (X_ENABLE_READ == X_ENABLE_ON || Y_ENABLE_READ == Y_ENABLE_ON || Z_ENABLE_READ == Z_ENABLE_ON
- #if HAS_HEATED_BED
- || thermalManager.soft_pwm_amount_bed > 0
- #endif
- || E0_ENABLE_READ == E_ENABLE_ON // If any of the drivers are enabled...
- #if E_STEPPERS > 1
- || E1_ENABLE_READ == E_ENABLE_ON
- #if HAS_X2_ENABLE
- || X2_ENABLE_READ == X_ENABLE_ON
- #endif
- #if E_STEPPERS > 2
- || E2_ENABLE_READ == E_ENABLE_ON
- #if E_STEPPERS > 3
- || E3_ENABLE_READ == E_ENABLE_ON
- #if E_STEPPERS > 4
- || E4_ENABLE_READ == E_ENABLE_ON
- #endif // E_STEPPERS > 4
- #endif // E_STEPPERS > 3
- #endif // E_STEPPERS > 2
- #endif // E_STEPPERS > 1
- ) {
- lastMotorOn = ms; //... set time to NOW so the fan will turn on
- }
-
- // Fan off if no steppers have been enabled for CONTROLLERFAN_SECS seconds
- const uint8_t speed = (lastMotorOn && PENDING(ms, lastMotorOn + (CONTROLLERFAN_SECS) * 1000UL)) ? CONTROLLERFAN_SPEED : 0;
- controllerFanSpeed = speed;
-
- // allows digital or PWM fan output to be used (see M42 handling)
- WRITE(CONTROLLER_FAN_PIN, speed);
- analogWrite(CONTROLLER_FAN_PIN, speed);
- }
- }
-
-#endif // USE_CONTROLLER_FAN
-
-#if ENABLED(MORGAN_SCARA)
-
- /**
- * Morgan SCARA Forward Kinematics. Results in cartes[].
- * Maths and first version by QHARLEY.
- * Integrated into Marlin and slightly restructured by Joachim Cerny.
- */
- void forward_kinematics_SCARA(const float &a, const float &b) {
-
- float a_sin = sin(RADIANS(a)) * L1,
- a_cos = cos(RADIANS(a)) * L1,
- b_sin = sin(RADIANS(b)) * L2,
- b_cos = cos(RADIANS(b)) * L2;
-
- cartes[X_AXIS] = a_cos + b_cos + SCARA_OFFSET_X; //theta
- cartes[Y_AXIS] = a_sin + b_sin + SCARA_OFFSET_Y; //theta+phi
-
- /*
- SERIAL_ECHOPAIR("SCARA FK Angle a=", a);
- SERIAL_ECHOPAIR(" b=", b);
- SERIAL_ECHOPAIR(" a_sin=", a_sin);
- SERIAL_ECHOPAIR(" a_cos=", a_cos);
- SERIAL_ECHOPAIR(" b_sin=", b_sin);
- SERIAL_ECHOLNPAIR(" b_cos=", b_cos);
- SERIAL_ECHOPAIR(" cartes[X_AXIS]=", cartes[X_AXIS]);
- SERIAL_ECHOLNPAIR(" cartes[Y_AXIS]=", cartes[Y_AXIS]);
- //*/
- }
-
- /**
- * Morgan SCARA Inverse Kinematics. Results in delta[].
- *
- * See http://forums.reprap.org/read.php?185,283327
- *
- * Maths and first version by QHARLEY.
- * Integrated into Marlin and slightly restructured by Joachim Cerny.
- */
- void inverse_kinematics(const float raw[XYZ]) {
-
- static float C2, S2, SK1, SK2, THETA, PSI;
-
- float sx = raw[X_AXIS] - SCARA_OFFSET_X, // Translate SCARA to standard X Y
- sy = raw[Y_AXIS] - SCARA_OFFSET_Y; // With scaling factor.
-
- if (L1 == L2)
- C2 = HYPOT2(sx, sy) / L1_2_2 - 1;
- else
- C2 = (HYPOT2(sx, sy) - (L1_2 + L2_2)) / (2.0 * L1 * L2);
-
- S2 = SQRT(1 - sq(C2));
-
- // Unrotated Arm1 plus rotated Arm2 gives the distance from Center to End
- SK1 = L1 + L2 * C2;
-
- // Rotated Arm2 gives the distance from Arm1 to Arm2
- SK2 = L2 * S2;
-
- // Angle of Arm1 is the difference between Center-to-End angle and the Center-to-Elbow
- THETA = ATAN2(SK1, SK2) - ATAN2(sx, sy);
-
- // Angle of Arm2
- PSI = ATAN2(S2, C2);
-
- delta[A_AXIS] = DEGREES(THETA); // theta is support arm angle
- delta[B_AXIS] = DEGREES(THETA + PSI); // equal to sub arm angle (inverted motor)
- delta[C_AXIS] = raw[Z_AXIS];
-
- /*
- DEBUG_POS("SCARA IK", raw);
- DEBUG_POS("SCARA IK", delta);
- SERIAL_ECHOPAIR(" SCARA (x,y) ", sx);
- SERIAL_ECHOPAIR(",", sy);
- SERIAL_ECHOPAIR(" C2=", C2);
- SERIAL_ECHOPAIR(" S2=", S2);
- SERIAL_ECHOPAIR(" Theta=", THETA);
- SERIAL_ECHOLNPAIR(" Phi=", PHI);
- //*/
- }
-
-#endif // MORGAN_SCARA
-
-#if ENABLED(TEMP_STAT_LEDS)
-
- static bool red_led = false;
- static millis_t next_status_led_update_ms = 0;
-
- void handle_status_leds(void) {
- if (ELAPSED(millis(), next_status_led_update_ms)) {
- next_status_led_update_ms += 500; // Update every 0.5s
- float max_temp = 0.0;
- #if HAS_HEATED_BED
- max_temp = MAX3(max_temp, thermalManager.degTargetBed(), thermalManager.degBed());
- #endif
- HOTEND_LOOP()
- max_temp = MAX3(max_temp, thermalManager.degHotend(e), thermalManager.degTargetHotend(e));
- const bool new_led = (max_temp > 55.0) ? true : (max_temp < 54.0) ? false : red_led;
- if (new_led != red_led) {
- red_led = new_led;
- #if PIN_EXISTS(STAT_LED_RED)
- WRITE(STAT_LED_RED_PIN, new_led ? HIGH : LOW);
- #if PIN_EXISTS(STAT_LED_BLUE)
- WRITE(STAT_LED_BLUE_PIN, new_led ? LOW : HIGH);
- #endif
- #else
- WRITE(STAT_LED_BLUE_PIN, new_led ? HIGH : LOW);
- #endif
- }
- }
- }
-
-#endif
-
-void enable_all_steppers() {
- #if ENABLED(AUTO_POWER_CONTROL)
- powerManager.power_on();
- #endif
- enable_X();
- enable_Y();
- enable_Z();
- enable_E0();
- enable_E1();
- enable_E2();
- enable_E3();
- enable_E4();
-}
-
-void disable_e_stepper(const uint8_t e) {
- switch (e) {
- case 0: disable_E0(); break;
- case 1: disable_E1(); break;
- case 2: disable_E2(); break;
- case 3: disable_E3(); break;
- case 4: disable_E4(); break;
- }
-}
-
-void disable_e_steppers() {
- disable_E0();
- disable_E1();
- disable_E2();
- disable_E3();
- disable_E4();
-}
-
-void disable_all_steppers() {
- disable_X();
- disable_Y();
- disable_Z();
- disable_e_steppers();
-}
-
-/**
- * Manage several activities:
- * - Check for Filament Runout
- * - Keep the command buffer full
- * - Check for maximum inactive time between commands
- * - Check for maximum inactive time between stepper commands
- * - Check if pin CHDK needs to go LOW
- * - Check for KILL button held down
- * - Check for HOME button held down
- * - Check if cooling fan needs to be switched on
- * - Check if an idle but hot extruder needs filament extruded (EXTRUDER_RUNOUT_PREVENT)
- */
-void manage_inactivity(const bool ignore_stepper_queue/*=false*/) {
-
- #if ENABLED(FILAMENT_RUNOUT_SENSOR)
- runout.run();
- #endif
-
- if (commands_in_queue < BUFSIZE) get_available_commands();
-
- const millis_t ms = millis();
-
- if (max_inactive_time && ELAPSED(ms, previous_move_ms + max_inactive_time)) {
- SERIAL_ERROR_START();
- SERIAL_ECHOLNPAIR(MSG_KILL_INACTIVE_TIME, parser.command_ptr);
- kill(PSTR(MSG_KILLED));
- }
-
- // Prevent steppers timing-out in the middle of M600
- #if ENABLED(ADVANCED_PAUSE_FEATURE) && ENABLED(PAUSE_PARK_NO_STEPPER_TIMEOUT)
- #define MOVE_AWAY_TEST !did_pause_print
- #else
- #define MOVE_AWAY_TEST true
- #endif
-
- if (stepper_inactive_time) {
- if (planner.has_blocks_queued())
- previous_move_ms = ms; // reset_stepper_timeout to keep steppers powered
- else if (MOVE_AWAY_TEST && !ignore_stepper_queue && ELAPSED(ms, previous_move_ms + stepper_inactive_time)) {
- #if ENABLED(DISABLE_INACTIVE_X)
- disable_X();
- #endif
- #if ENABLED(DISABLE_INACTIVE_Y)
- disable_Y();
- #endif
- #if ENABLED(DISABLE_INACTIVE_Z)
- disable_Z();
- #endif
- #if ENABLED(DISABLE_INACTIVE_E)
- disable_e_steppers();
- #endif
- #if ENABLED(AUTO_BED_LEVELING_UBL) && ENABLED(ULTIPANEL) // Only needed with an LCD
- if (ubl.lcd_map_control) ubl.lcd_map_control = defer_return_to_status = false;
- #endif
- }
- }
-
- #ifdef CHDK // Check if pin should be set to LOW after M240 set it to HIGH
- if (chdkActive && ELAPSED(ms, chdkHigh + CHDK_DELAY)) {
- chdkActive = false;
- WRITE(CHDK, LOW);
- }
- #endif
-
- #if HAS_KILL
-
- // Check if the kill button was pressed and wait just in case it was an accidental
- // key kill key press
- // -------------------------------------------------------------------------------
- static int killCount = 0; // make the inactivity button a bit less responsive
- const int KILL_DELAY = 750;
- if (!READ(KILL_PIN))
- killCount++;
- else if (killCount > 0)
- killCount--;
-
- // Exceeded threshold and we can confirm that it was not accidental
- // KILL the machine
- // ----------------------------------------------------------------
- if (killCount >= KILL_DELAY) {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_KILL_BUTTON);
- kill(PSTR(MSG_KILLED));
- }
- #endif
-
- #if HAS_HOME
- // Check to see if we have to home, use poor man's debouncer
- // ---------------------------------------------------------
- static int homeDebounceCount = 0; // poor man's debouncing count
- const int HOME_DEBOUNCE_DELAY = 2500;
- if (!IS_SD_PRINTING && !READ(HOME_PIN)) {
- if (!homeDebounceCount) {
- enqueue_and_echo_commands_P(PSTR("G28"));
- LCD_MESSAGEPGM(MSG_AUTO_HOME);
- }
- if (homeDebounceCount < HOME_DEBOUNCE_DELAY)
- homeDebounceCount++;
- else
- homeDebounceCount = 0;
- }
- #endif
-
- #if ENABLED(USE_CONTROLLER_FAN)
- controllerFan(); // Check if fan should be turned on to cool stepper drivers down
- #endif
-
- #if ENABLED(AUTO_POWER_CONTROL)
- powerManager.check();
- #endif
-
- #if ENABLED(EXTRUDER_RUNOUT_PREVENT)
- if (thermalManager.degHotend(active_extruder) > EXTRUDER_RUNOUT_MINTEMP
- && ELAPSED(ms, previous_move_ms + (EXTRUDER_RUNOUT_SECONDS) * 1000UL)
- && !planner.has_blocks_queued()
- ) {
- #if ENABLED(SWITCHING_EXTRUDER)
- const bool oldstatus = E0_ENABLE_READ;
- enable_E0();
- #else // !SWITCHING_EXTRUDER
- bool oldstatus;
- switch (active_extruder) {
- default: oldstatus = E0_ENABLE_READ; enable_E0(); break;
- #if E_STEPPERS > 1
- case 1: oldstatus = E1_ENABLE_READ; enable_E1(); break;
- #if E_STEPPERS > 2
- case 2: oldstatus = E2_ENABLE_READ; enable_E2(); break;
- #if E_STEPPERS > 3
- case 3: oldstatus = E3_ENABLE_READ; enable_E3(); break;
- #if E_STEPPERS > 4
- case 4: oldstatus = E4_ENABLE_READ; enable_E4(); break;
- #endif // E_STEPPERS > 4
- #endif // E_STEPPERS > 3
- #endif // E_STEPPERS > 2
- #endif // E_STEPPERS > 1
- }
- #endif // !SWITCHING_EXTRUDER
-
- const float olde = current_position[E_AXIS];
- current_position[E_AXIS] += EXTRUDER_RUNOUT_EXTRUDE;
- planner.buffer_line_kinematic(current_position, MMM_TO_MMS(EXTRUDER_RUNOUT_SPEED), active_extruder);
- current_position[E_AXIS] = olde;
- planner.set_e_position_mm(olde);
-
- stepper.synchronize();
- #if ENABLED(SWITCHING_EXTRUDER)
- E0_ENABLE_WRITE(oldstatus);
- #else
- switch (active_extruder) {
- case 0: E0_ENABLE_WRITE(oldstatus); break;
- #if E_STEPPERS > 1
- case 1: E1_ENABLE_WRITE(oldstatus); break;
- #if E_STEPPERS > 2
- case 2: E2_ENABLE_WRITE(oldstatus); break;
- #if E_STEPPERS > 3
- case 3: E3_ENABLE_WRITE(oldstatus); break;
- #if E_STEPPERS > 4
- case 4: E4_ENABLE_WRITE(oldstatus); break;
- #endif // E_STEPPERS > 4
- #endif // E_STEPPERS > 3
- #endif // E_STEPPERS > 2
- #endif // E_STEPPERS > 1
- }
- #endif // !SWITCHING_EXTRUDER
-
- previous_move_ms = ms; // reset_stepper_timeout to keep steppers powered
- }
- #endif // EXTRUDER_RUNOUT_PREVENT
-
- #if ENABLED(DUAL_X_CARRIAGE)
- // handle delayed move timeout
- if (delayed_move_time && ELAPSED(ms, delayed_move_time + 1000UL) && IsRunning()) {
- // travel moves have been received so enact them
- delayed_move_time = 0xFFFFFFFFUL; // force moves to be done
- set_destination_from_current();
- prepare_move_to_destination();
- }
- #endif
-
- #if ENABLED(TEMP_STAT_LEDS)
- handle_status_leds();
- #endif
-
- #if ENABLED(MONITOR_DRIVER_STATUS)
- monitor_tmc_driver();
- #endif
-
- planner.check_axes_activity();
-}
-
-/**
- * Standard idle routine keeps the machine alive
- */
-void idle(
- #if ENABLED(ADVANCED_PAUSE_FEATURE)
- bool no_stepper_sleep/*=false*/
- #endif
-) {
- #if ENABLED(MAX7219_DEBUG)
- Max7219_idle_tasks();
- #endif // MAX7219_DEBUG
-
- lcd_update();
-
- host_keepalive();
-
- manage_inactivity(
- #if ENABLED(ADVANCED_PAUSE_FEATURE)
- no_stepper_sleep
- #endif
- );
-
- thermalManager.manage_heater();
-
- #if ENABLED(PRINTCOUNTER)
- print_job_timer.tick();
- #endif
-
- #if HAS_BUZZER && DISABLED(LCD_USE_I2C_BUZZER)
- buzzer.tick();
- #endif
-
- #if ENABLED(I2C_POSITION_ENCODERS)
- static millis_t i2cpem_next_update_ms;
- if (planner.has_blocks_queued() && ELAPSED(millis(), i2cpem_next_update_ms)) {
- I2CPEM.update();
- i2cpem_next_update_ms = millis() + I2CPE_MIN_UPD_TIME_MS;
- }
- #endif
-
- #if HAS_AUTO_REPORTING
- if (!suspend_auto_report) {
- #if ENABLED(AUTO_REPORT_TEMPERATURES)
- thermalManager.auto_report_temperatures();
- #endif
- #if ENABLED(AUTO_REPORT_SD_STATUS)
- card.auto_report_sd_status();
- #endif
- }
- #endif
-}
-
-/**
- * Kill all activity and lock the machine.
- * After this the machine will need to be reset.
- */
-void kill(const char* lcd_msg) {
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_KILLED);
-
- thermalManager.disable_all_heaters();
- disable_all_steppers();
-
- #if ENABLED(ULTRA_LCD)
- kill_screen(lcd_msg);
- #else
- UNUSED(lcd_msg);
- #endif
-
- _delay_ms(600); // Wait a short time (allows messages to get out before shutting down.
- cli(); // Stop interrupts
-
- _delay_ms(250); //Wait to ensure all interrupts routines stopped
- thermalManager.disable_all_heaters(); //turn off heaters again
-
- #ifdef ACTION_ON_KILL
- SERIAL_ECHOLNPGM("//action:" ACTION_ON_KILL);
- #endif
-
- #if HAS_POWER_SWITCH
- PSU_OFF();
- #endif
-
- suicide();
- while (1) {
- #if ENABLED(USE_WATCHDOG)
- watchdog_reset();
- #endif
- } // Wait for reset
-}
-
-/**
- * Turn off heaters and stop the print in progress
- * After a stop the machine may be resumed with M999
- */
-void stop() {
- thermalManager.disable_all_heaters(); // 'unpause' taken care of in here
-
- #if ENABLED(PROBING_FANS_OFF)
- if (fans_paused) fans_pause(false); // put things back the way they were
- #endif
-
- if (IsRunning()) {
- Stopped_gcode_LastN = gcode_LastN; // Save last g_code for restart
- SERIAL_ERROR_START();
- SERIAL_ERRORLNPGM(MSG_ERR_STOPPED);
- LCD_MESSAGEPGM(MSG_STOPPED);
- safe_delay(350); // allow enough time for messages to get out before stopping
- Running = false;
- }
-}
-
-/**
- * Marlin entry-point: Set up before the program loop
- * - Set up the kill pin, filament runout, power hold
- * - Start the serial port
- * - Print startup messages and diagnostics
- * - Get EEPROM or default settings
- * - Initialize managers for:
- * • temperature
- * • planner
- * • watchdog
- * • stepper
- * • photo pin
- * • servos
- * • LCD controller
- * • Digipot I2C
- * • Z probe sled
- * • status LEDs
- */
-void setup() {
-
- #if ENABLED(MAX7219_DEBUG)
- Max7219_init();
- #endif
-
- #if ENABLED(DISABLE_JTAG)
- // Disable JTAG on AT90USB chips to free up pins for IO
- MCUCR = 0x80;
- MCUCR = 0x80;
- #endif
-
- #if ENABLED(FILAMENT_RUNOUT_SENSOR)
- runout.setup();
- #endif
-
- setup_killpin();
-
- setup_powerhold();
-
- #if HAS_STEPPER_RESET
- disableStepperDrivers();
- #endif
-
- MYSERIAL0.begin(BAUDRATE);
- SERIAL_PROTOCOLLNPGM("start");
- SERIAL_ECHO_START();
-
- // Prepare communication for TMC drivers
- #if ENABLED(HAVE_TMC2130)
- tmc_init_cs_pins();
- #endif
- #if ENABLED(HAVE_TMC2208)
- tmc2208_serial_begin();
- #endif
-
- // Check startup - does nothing if bootloader sets MCUSR to 0
- byte mcu = MCUSR;
- if (mcu & 1) SERIAL_ECHOLNPGM(MSG_POWERUP);
- if (mcu & 2) SERIAL_ECHOLNPGM(MSG_EXTERNAL_RESET);
- if (mcu & 4) SERIAL_ECHOLNPGM(MSG_BROWNOUT_RESET);
- if (mcu & 8) SERIAL_ECHOLNPGM(MSG_WATCHDOG_RESET);
- if (mcu & 32) SERIAL_ECHOLNPGM(MSG_SOFTWARE_RESET);
- MCUSR = 0;
-
- SERIAL_ECHOPGM(MSG_MARLIN);
- SERIAL_CHAR(' ');
- SERIAL_ECHOLNPGM(SHORT_BUILD_VERSION);
- SERIAL_EOL();
-
- #if defined(STRING_DISTRIBUTION_DATE) && defined(STRING_CONFIG_H_AUTHOR)
- SERIAL_ECHO_START();
- SERIAL_ECHOPGM(MSG_CONFIGURATION_VER);
- SERIAL_ECHOPGM(STRING_DISTRIBUTION_DATE);
- SERIAL_ECHOLNPGM(MSG_AUTHOR STRING_CONFIG_H_AUTHOR);
- SERIAL_ECHO_START();
- SERIAL_ECHOLNPGM("Compiled: " __DATE__);
- #endif
-
- SERIAL_ECHO_START();
- SERIAL_ECHOPAIR(MSG_FREE_MEMORY, freeMemory());
- SERIAL_ECHOLNPAIR(MSG_PLANNER_BUFFER_BYTES, (int)sizeof(block_t)*BLOCK_BUFFER_SIZE);
-
- // Send "ok" after commands by default
- for (int8_t i = 0; i < BUFSIZE; i++) send_ok[i] = true;
-
- // Load data from EEPROM if available (or use defaults)
- // This also updates variables in the planner, elsewhere
- (void)settings.load();
-
- #if HAS_M206_COMMAND
- // Initialize current position based on home_offset
- COPY(current_position, home_offset);
- #else
- ZERO(current_position);
- #endif
-
- // Vital to init stepper/planner equivalent for current_position
- SYNC_PLAN_POSITION_KINEMATIC();
-
- thermalManager.init(); // Initialize temperature loop
-
- print_job_timer.init(); // Initial setup of print job timer
-
- stepper.init(); // Initialize stepper, this enables interrupts!
-
- servo_init(); // Initialize all servos, stow servo probe
-
- #if HAS_PHOTOGRAPH
- OUT_WRITE(PHOTOGRAPH_PIN, LOW);
- #endif
-
- #if HAS_CASE_LIGHT
- case_light_on = CASE_LIGHT_DEFAULT_ON;
- case_light_brightness = CASE_LIGHT_DEFAULT_BRIGHTNESS;
- update_case_light();
- #endif
-
- #if ENABLED(SPINDLE_LASER_ENABLE)
- OUT_WRITE(SPINDLE_LASER_ENABLE_PIN, !SPINDLE_LASER_ENABLE_INVERT); // init spindle to off
- #if SPINDLE_DIR_CHANGE
- OUT_WRITE(SPINDLE_DIR_PIN, SPINDLE_INVERT_DIR ? 255 : 0); // init rotation to clockwise (M3)
- #endif
- #if ENABLED(SPINDLE_LASER_PWM)
- SET_OUTPUT(SPINDLE_LASER_PWM_PIN);
- analogWrite(SPINDLE_LASER_PWM_PIN, SPINDLE_LASER_PWM_INVERT ? 255 : 0); // set to lowest speed
- #endif
- #endif
-
- #if HAS_BED_PROBE
- endstops.enable_z_probe(false);
- #endif
-
- #if ENABLED(USE_CONTROLLER_FAN)
- SET_OUTPUT(CONTROLLER_FAN_PIN); //Set pin used for driver cooling fan
- #endif
-
- #if HAS_STEPPER_RESET
- enableStepperDrivers();
- #endif
-
- #if ENABLED(DIGIPOT_I2C)
- digipot_i2c_init();
- #endif
-
- #if ENABLED(DAC_STEPPER_CURRENT)
- dac_init();
- #endif
-
- #if (ENABLED(Z_PROBE_SLED) || ENABLED(SOLENOID_PROBE)) && HAS_SOLENOID_1
- OUT_WRITE(SOL1_PIN, LOW); // turn it off
- #endif
-
- #if HAS_HOME
- SET_INPUT_PULLUP(HOME_PIN);
- #endif
-
- #if PIN_EXISTS(STAT_LED_RED)
- OUT_WRITE(STAT_LED_RED_PIN, LOW); // turn it off
- #endif
-
- #if PIN_EXISTS(STAT_LED_BLUE)
- OUT_WRITE(STAT_LED_BLUE_PIN, LOW); // turn it off
- #endif
-
- #if HAS_COLOR_LEDS
- leds.setup();
- #endif
-
- #if ENABLED(RGB_LED) || ENABLED(RGBW_LED)
- SET_OUTPUT(RGB_LED_R_PIN);
- SET_OUTPUT(RGB_LED_G_PIN);
- SET_OUTPUT(RGB_LED_B_PIN);
- #if ENABLED(RGBW_LED)
- SET_OUTPUT(RGB_LED_W_PIN);
- #endif
- #endif
-
- #if ENABLED(MK2_MULTIPLEXER)
- SET_OUTPUT(E_MUX0_PIN);
- SET_OUTPUT(E_MUX1_PIN);
- SET_OUTPUT(E_MUX2_PIN);
- #endif
-
- #if HAS_FANMUX
- fanmux_init();
- #endif
-
- lcd_init();
- LCD_MESSAGEPGM(WELCOME_MSG);
-
- #if ENABLED(SHOW_BOOTSCREEN)
- lcd_bootscreen();
- #endif
-
- #if ENABLED(MIXING_EXTRUDER) && MIXING_VIRTUAL_TOOLS > 1
- // Virtual Tools 0, 1, 2, 3 = Filament 1, 2, 3, 4, etc.
- for (uint8_t t = 0; t < MIXING_VIRTUAL_TOOLS && t < MIXING_STEPPERS; t++)
- for (uint8_t i = 0; i < MIXING_STEPPERS; i++)
- mixing_virtual_tool_mix[t][i] = (t == i) ? 1.0 : 0.0;
-
- // Remaining virtual tools are 100% filament 1
- #if MIXING_STEPPERS < MIXING_VIRTUAL_TOOLS
- for (uint8_t t = MIXING_STEPPERS; t < MIXING_VIRTUAL_TOOLS; t++)
- for (uint8_t i = 0; i < MIXING_STEPPERS; i++)
- mixing_virtual_tool_mix[t][i] = (i == 0) ? 1.0 : 0.0;
- #endif
-
- // Initialize mixing to tool 0 color
- for (uint8_t i = 0; i < MIXING_STEPPERS; i++)
- mixing_factor[i] = mixing_virtual_tool_mix[0][i];
- #endif
-
- #if ENABLED(BLTOUCH)
- // Make sure any BLTouch error condition is cleared
- bltouch_command(BLTOUCH_RESET);
- set_bltouch_deployed(true);
- set_bltouch_deployed(false);
- #endif
-
- #if ENABLED(I2C_POSITION_ENCODERS)
- I2CPEM.init();
- #endif
-
- #if ENABLED(EXPERIMENTAL_I2CBUS) && I2C_SLAVE_ADDRESS > 0
- i2c.onReceive(i2c_on_receive);
- i2c.onRequest(i2c_on_request);
- #endif
-
- #if ENABLED(ENDSTOP_INTERRUPTS_FEATURE)
- setup_endstop_interrupts();
- #endif
-
- #if DO_SWITCH_EXTRUDER
- move_extruder_servo(0); // Initialize extruder servo
- #endif
-
- #if ENABLED(SWITCHING_NOZZLE)
- move_nozzle_servo(0); // Initialize nozzle servo
- #endif
-
- #if ENABLED(PARKING_EXTRUDER)
- #if ENABLED(PARKING_EXTRUDER_SOLENOIDS_INVERT)
- pe_activate_magnet(0);
- pe_activate_magnet(1);
- #else
- pe_deactivate_magnet(0);
- pe_deactivate_magnet(1);
- #endif
- #endif
-
- #if ENABLED(POWER_LOSS_RECOVERY)
- do_print_job_recovery();
- #endif
-
- #if ENABLED(USE_WATCHDOG)
- watchdog_init();
- #endif
-}
-
-/**
- * The main Marlin program loop
- *
- * - Abort SD printing if flagged
- * - Save or log commands to SD
- * - Process available commands (if not saving)
- * - Call heater manager
- * - Call inactivity manager
- * - Call endstop manager
- * - Call LCD update
- */
-void loop() {
-
- #if ENABLED(SDSUPPORT)
-
- card.checkautostart();
-
- #if ENABLED(ULTIPANEL)
- if (abort_sd_printing) {
- abort_sd_printing = false;
- card.stopSDPrint(
- #if SD_RESORT
- true
- #endif
- );
- clear_command_queue();
- quickstop_stepper();
- print_job_timer.stop();
- thermalManager.disable_all_heaters();
- #if FAN_COUNT > 0
- for (uint8_t i = 0; i < FAN_COUNT; i++) fanSpeeds[i] = 0;
- #endif
- wait_for_heatup = false;
- }
- #endif
-
- #endif // SDSUPPORT
-
- if (commands_in_queue < BUFSIZE) get_available_commands();
-
- if (commands_in_queue) {
-
- #if ENABLED(SDSUPPORT)
-
- if (card.saving) {
- char* command = command_queue[cmd_queue_index_r];
- if (strstr_P(command, PSTR("M29"))) {
- // M29 closes the file
- card.closefile();
- SERIAL_PROTOCOLLNPGM(MSG_FILE_SAVED);
-
- #if !(defined(__AVR__) && defined(USBCON))
- #if ENABLED(SERIAL_STATS_DROPPED_RX)
- SERIAL_ECHOLNPAIR("Dropped bytes: ", customizedSerial.dropped());
- #endif
-
- #if ENABLED(SERIAL_STATS_MAX_RX_QUEUED)
- SERIAL_ECHOLNPAIR("Max RX Queue Size: ", customizedSerial.rxMaxEnqueued());
- #endif
- #endif // !(__AVR__ && USBCON)
-
- ok_to_send();
- }
- else {
- // Write the string from the read buffer to SD
- card.write_command(command);
- if (card.logging)
- process_next_command(); // The card is saving because it's logging
- else
- ok_to_send();
- }
- }
- else {
- process_next_command();
- #if ENABLED(POWER_LOSS_RECOVERY)
- if (card.cardOK && card.sdprinting) save_job_recovery_info();
- #endif
- }
-
- #else
-
- process_next_command();
-
- #endif // SDSUPPORT
-
- // The queue may be reset by a command handler or by code invoked by idle() within a handler
- if (commands_in_queue) {
- --commands_in_queue;
- if (++cmd_queue_index_r >= BUFSIZE) cmd_queue_index_r = 0;
- }
- }
- endstops.report_state();
- idle();
-}
diff --git a/Marlin/SdFatUtil.cpp b/Marlin/SdFatUtil.cpp
deleted file mode 100644
index 2bd471bc67..0000000000
--- a/Marlin/SdFatUtil.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- * Arduino SdFat Library
- * Copyright (C) 2008 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-#include "MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "SdFatUtil.h"
-#include "serial.h"
-
-/**
- * Amount of free RAM
- * \return The number of free bytes.
- */
-#ifdef __arm__
-extern "C" char* sbrk(int incr);
-int SdFatUtil::FreeRam() {
- char top;
- return &top - reinterpret_cast(sbrk(0));
-}
-#else // __arm__
-extern char* __brkval;
-extern char __bss_end;
-/**
- * Amount of free RAM
- * \return The number of free bytes.
- */
-int SdFatUtil::FreeRam() {
- char top;
- return __brkval ? &top - __brkval : &top - &__bss_end;
-}
-#endif // __arm
-
-/**
- * %Print a string in flash memory.
- *
- * \param[in] pr Print object for output.
- * \param[in] str Pointer to string stored in flash memory.
- */
-void SdFatUtil::print_P(PGM_P str) {
- for (uint8_t c; (c = pgm_read_byte(str)); str++) SERIAL_CHAR(c);
-}
-
-/**
- * %Print a string in flash memory followed by a CR/LF.
- *
- * \param[in] pr Print object for output.
- * \param[in] str Pointer to string stored in flash memory.
- */
-void SdFatUtil::println_P(PGM_P str) { print_P(str); SERIAL_EOL(); }
-
-/**
- * %Print a string in flash memory to Serial.
- *
- * \param[in] str Pointer to string stored in flash memory.
- */
-void SdFatUtil::SerialPrint_P(PGM_P str) { print_P(str); }
-
-/**
- * %Print a string in flash memory to Serial followed by a CR/LF.
- *
- * \param[in] str Pointer to string stored in flash memory.
- */
-void SdFatUtil::SerialPrintln_P(PGM_P str) { println_P(str); }
-
-#endif // SDSUPPORT
diff --git a/Marlin/_Bootscreen.h b/Marlin/_Bootscreen.h
new file mode 100644
index 0000000000..cf8c657d66
--- /dev/null
+++ b/Marlin/_Bootscreen.h
@@ -0,0 +1,106 @@
+/**
+ * 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
+ */
+#include
+
+#define CUSTOM_BOOTSCREEN_TIMEOUT 2500
+#define CUSTOM_BOOTSCREEN_BMPWIDTH 128
+#define CUSTOM_BOOTSCREEN_BMPHEIGHT 64
+
+const unsigned char custom_start_bmp[] PROGMEM = {
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFD, 0x55, 0x55, 0x55, 0x55, 0x55, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFD, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFE, 0x07, 0xC0, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFC, 0x0A, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFE, 0x14, 0x10, 0x05, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFC, 0x28, 0x08, 0x06, 0x07, 0xC0, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x5F, 0xFF, 0xFF, 0xFF,
+0xFE, 0x54, 0x04, 0x04, 0x0A, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF,
+0xFC, 0x60, 0x04, 0x06, 0x14, 0x10, 0x05, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFE, 0x50, 0x04, 0x04, 0x28, 0x08, 0x06, 0x07, 0xC0, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x5F,
+0xFC, 0x60, 0x04, 0x06, 0x54, 0x04, 0x04, 0x0A, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
+0xFE, 0x54, 0x04, 0x1C, 0x60, 0x04, 0x06, 0x14, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+0xFC, 0x28, 0x08, 0x2E, 0x50, 0x04, 0x04, 0x28, 0x08, 0x06, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x3F,
+0xFE, 0x14, 0x10, 0x54, 0x60, 0x04, 0x06, 0x54, 0x04, 0x04, 0x0A, 0x20, 0x00, 0x02, 0x08, 0x1F,
+0xFC, 0x0A, 0x20, 0x66, 0x54, 0x04, 0x1C, 0x60, 0x04, 0x06, 0x14, 0x10, 0x00, 0x05, 0x04, 0x3F,
+0xFE, 0x07, 0xC0, 0x54, 0x28, 0x08, 0x2E, 0x50, 0x04, 0x04, 0x28, 0x08, 0x00, 0x0A, 0x02, 0x1F,
+0xFC, 0x00, 0x00, 0x2E, 0x14, 0x10, 0x54, 0x60, 0x04, 0x06, 0x54, 0x04, 0x00, 0x15, 0x01, 0x3F,
+0xFE, 0x00, 0x00, 0x1C, 0x0A, 0x20, 0x66, 0x54, 0x04, 0x1C, 0x60, 0x04, 0x00, 0x18, 0x01, 0x1F,
+0xFC, 0x00, 0x00, 0x06, 0x07, 0xC0, 0x54, 0x28, 0x08, 0x2E, 0x50, 0x04, 0x00, 0x14, 0x01, 0x3F,
+0xFE, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2E, 0x14, 0x10, 0x54, 0x60, 0x04, 0x00, 0x18, 0x01, 0x1F,
+0xFC, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1C, 0x0A, 0x20, 0x66, 0x54, 0x04, 0x1C, 0x15, 0x01, 0x3F,
+0xFE, 0xD5, 0x55, 0x54, 0x00, 0x00, 0x06, 0x07, 0xC0, 0x54, 0x28, 0x08, 0x2A, 0x0A, 0x02, 0x1F,
+0xFC, 0x84, 0x10, 0x46, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2E, 0x14, 0x10, 0x51, 0x05, 0x04, 0x3F,
+0xFE, 0xC4, 0x10, 0x44, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1C, 0x0A, 0x20, 0x61, 0x02, 0x88, 0x1F,
+0xFC, 0x84, 0x10, 0x46, 0xD5, 0x55, 0x54, 0x00, 0x00, 0x06, 0x07, 0xC0, 0x51, 0x01, 0xF0, 0x3F,
+0xFE, 0x84, 0x10, 0x44, 0x84, 0x10, 0x46, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x1F,
+0xFC, 0xC4, 0x10, 0x46, 0xC4, 0x10, 0x44, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x3F,
+0xFE, 0x84, 0x10, 0x44, 0x84, 0x10, 0x46, 0xD5, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+0xFC, 0xD5, 0x55, 0x56, 0x84, 0x10, 0x44, 0x84, 0x10, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
+0xFC, 0xFF, 0xFF, 0xFC, 0xC4, 0x10, 0x46, 0xC4, 0x10, 0x44, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F,
+0xFE, 0x00, 0x00, 0x06, 0x84, 0x10, 0x44, 0x84, 0x10, 0x46, 0xD5, 0x55, 0x55, 0x55, 0x55, 0xBF,
+0xFD, 0x55, 0x55, 0x54, 0xD5, 0x55, 0x56, 0x84, 0x10, 0x44, 0x84, 0x10, 0x41, 0x04, 0x10, 0x9F,
+0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xC4, 0x10, 0x46, 0xC4, 0x10, 0x41, 0x04, 0x11, 0xBF,
+0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x06, 0x84, 0x10, 0x44, 0x84, 0x10, 0x41, 0x04, 0x10, 0x9F,
+0xFF, 0xFF, 0xFF, 0xFD, 0x55, 0x55, 0x54, 0xD5, 0x55, 0x56, 0x84, 0x10, 0x41, 0x04, 0x10, 0x9F,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xC4, 0x10, 0x41, 0x04, 0x11, 0xBF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x06, 0x84, 0x10, 0x41, 0x04, 0x10, 0x9F,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x55, 0x55, 0x54, 0xD5, 0x55, 0x55, 0x55, 0x55, 0xBF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x55, 0x55, 0x55, 0x55, 0x55, 0x5F,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xE0, 0x2E, 0xFB, 0x7D, 0xFB, 0xFB, 0xCF, 0xC1, 0xDF, 0xBB, 0x3E, 0xC0, 0xE1, 0xFE, 0x3C, 0x1F,
+0xFD, 0xEE, 0x7B, 0x39, 0xF9, 0xF3, 0xCF, 0x9E, 0xDF, 0xBB, 0x3E, 0xDF, 0xDE, 0xFC, 0xDD, 0xE7,
+0xFD, 0xEE, 0x3B, 0xBB, 0xF9, 0xEB, 0xD7, 0xBF, 0x5F, 0xBB, 0x5E, 0xDF, 0xDE, 0xFD, 0xED, 0xF7,
+0xFD, 0xEE, 0xBB, 0xD3, 0xFA, 0xEB, 0xB7, 0x3F, 0xDF, 0xBB, 0x4E, 0xDF, 0xDF, 0xFF, 0xCD, 0xF3,
+0xFD, 0xEE, 0xDB, 0xC7, 0xFA, 0xEB, 0xBB, 0x7F, 0xC0, 0x3B, 0x6E, 0xC0, 0xE3, 0xFF, 0x1D, 0xF3,
+0xFD, 0xEE, 0xCB, 0xEF, 0xFA, 0xDB, 0xBB, 0x7F, 0xDF, 0xBB, 0x66, 0xDF, 0xF8, 0xFF, 0xCD, 0xF3,
+0xFD, 0xEE, 0xEB, 0xEF, 0xFB, 0x5B, 0x03, 0x3F, 0x5F, 0xBB, 0x76, 0xDF, 0xFE, 0x7F, 0xED, 0xF3,
+0xFD, 0xEE, 0xF3, 0xEF, 0xFB, 0x5B, 0x79, 0xBE, 0xDF, 0xBB, 0x7A, 0xDF, 0xDE, 0x7D, 0xED, 0xF7,
+0xFD, 0xEE, 0xF3, 0xEF, 0xFB, 0xBA, 0xFD, 0x9E, 0xDF, 0xBB, 0x7C, 0xDF, 0xDE, 0xFD, 0xCD, 0xE7,
+0xFD, 0xEE, 0xFB, 0xEF, 0xFB, 0xBA, 0xFD, 0xC1, 0xDF, 0xBB, 0x7E, 0xC0, 0xE0, 0xFE, 0x1C, 0x1F,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+};
+
+
+
diff --git a/Marlin/_statusscreen.h b/Marlin/_statusscreen.h
new file mode 100644
index 0000000000..515aa97792
--- /dev/null
+++ b/Marlin/_statusscreen.h
@@ -0,0 +1,472 @@
+/**
+ * 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
+ */
+//#include "MarlinConfig.h"
+
+//============================================
+
+#define STATUS_SCREENWIDTH 128
+
+#define STATUS_SCREEN_HOTEND_TEXT_X(E) (41 + (E) * 20)
+
+#define STATUS_SCREEN_BED_TEXT_X (HOTENDS > 1 ? 81 : 73)
+
+#define FAN_ANIM_FRAMES 3
+#define STATUS_SCREEN_FAN_TEXT_X (FAN_ANIM_FRAMES == 3 ? 103 : 105)
+#define STATUS_SCREEN_FAN_TEXT_Y (FAN_ANIM_FRAMES > 2 ? 28 : 27)
+
+//============================================
+
+#if HOTENDS < 2
+
+ #if FAN_ANIM_FRAMES <= 2
+
+ const unsigned char status_screen0_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B00000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00111111,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110000,B01111110,B00011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110000,B01111100,B00011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101000,B01111100,B00001000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101100,B00111000,B00001000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00101111,B00111001,B11001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00101111,B11111111,B11101000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00101111,B11000111,B11101000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00101111,B11111111,B11101000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00100111,B00111001,B11101000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00100000,B00111000,B01101000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00100000,B01111100,B00101000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00110000,B01111100,B00011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00110000,B11111100,B00011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111001,B11111000,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111110,B00000000,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111111,B11111111,B11111000
+};
+ const unsigned char status_screen1_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B10000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111001,B10000000,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110111,B10000001,B11011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110111,B11000011,B11011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100111,B11000111,B11101000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100011,B11000111,B11111000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00100001,B11111111,B10001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00100000,B01101100,B00001000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00100000,B01101100,B00001000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00100000,B01101100,B00001000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00100011,B11111111,B00001000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00111111,B11000111,B10001000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00101111,B11000111,B11001000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00110111,B10000111,B11011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00110111,B00000011,B11011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00000011,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111110,B00000010,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111111,B11111111,B11111000
+};
+
+ #elif FAN_ANIM_FRAMES == 3
+
+
+const unsigned char status_screen0_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B00000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00111111,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110000,B01111110,B00011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110000,B01111100,B00011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101000,B01111100,B00001000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101100,B00111000,B00001000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00101111,B00111001,B11001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00101111,B11111111,B11101000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00101111,B11000111,B11101000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00101111,B11111111,B11101000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00100111,B00111001,B11101000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00100000,B00111000,B01101000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00100000,B01111100,B00101000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00110000,B01111100,B00011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00110000,B11111100,B00011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111001,B11111000,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111110,B00000000,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111111,B11111111,B11111000
+};
+
+
+ const unsigned char status_screen1_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B00000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00001111,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110100,B00011111,B11011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110110,B00011111,B10011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101111,B00011111,B00001000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101111,B10011110,B00001000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00101111,B11111100,B00001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00101111,B11011100,B00001000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00100111,B11101111,B11001000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00100000,B01110111,B11101000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00100000,B01111111,B11101000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00100000,B11110011,B11101000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00100001,B11110001,B11101000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00110011,B11110000,B11011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00110111,B11110000,B01011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111001,B11100000,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111110,B00000000,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111111,B11111111,B11111000
+};
+ const unsigned char status_screen2_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B10000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111001,B10000000,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110111,B10000001,B11011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110111,B11000011,B11011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100111,B11000111,B11101000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100011,B11000111,B11111000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00100001,B11111111,B10001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00100000,B01101100,B00001000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00100000,B01101100,B00001000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00100000,B01101100,B00001000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00100011,B11111111,B00001000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00111111,B11000111,B10001000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00101111,B11000111,B11001000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00110111,B10000111,B11011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00110111,B00000011,B11011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00000011,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111110,B00000010,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111111,B11111111,B11111000
+};
+
+ #elif FAN_ANIM_FRAMES == 4
+
+const unsigned char status_screen0_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B00000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00111111,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110000,B01111110,B00011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110000,B01111100,B00011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101000,B01111100,B00001000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101100,B00111000,B00001000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00101111,B00111001,B11001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00101111,B11111111,B11101000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00101111,B11000111,B11101000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00101111,B11111111,B11101000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00100111,B00111001,B11101000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00100000,B00111000,B01101000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00100000,B01111100,B00101000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00110000,B01111100,B00011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00110000,B11111100,B00011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111001,B11111000,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111110,B00000000,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111111,B11111111,B11111000
+};
+
+const unsigned char status_screen1_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B00000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00001111,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110100,B00011111,B11011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110110,B00011111,B10011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101111,B00011111,B00001000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101111,B10011110,B00001000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00101111,B11111100,B00001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00101111,B11011100,B00001000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00100111,B11101111,B11001000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00100000,B01110111,B11101000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00100000,B01111111,B11101000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00100000,B11110011,B11101000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00100001,B11110001,B11101000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00110011,B11110000,B11011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00110111,B11110000,B01011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111001,B11100000,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111110,B00000000,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111111,B11111111,B11111000
+};
+
+const unsigned char status_screen2_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B10000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111001,B10000000,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110111,B10000001,B11011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110111,B11000011,B11011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100111,B11000111,B11101000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100011,B11000111,B11111000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00100001,B11111111,B10001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00100000,B01101100,B00001000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00100000,B01101100,B00001000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00100000,B01101100,B00001000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00100011,B11111111,B00001000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00111111,B11000111,B10001000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00101111,B11000111,B11001000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00110111,B10000111,B11011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00110111,B00000011,B11011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00000011,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111110,B00000010,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111111,B11111111,B11111000
+};
+
+
+const unsigned char status_screen3_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B00000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111001,B11110000,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110001,B11100000,B00011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110001,B11100000,B00011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100001,B11100001,B11101000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100000,B11110011,B11101000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00100000,B01111111,B11101000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00100000,B01110111,B11101000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000100,B00010000,B01000000,B00000000,B00101000,B11101110,B00101000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00101111,B11011100,B00001000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00101111,B11111100,B00001000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011111,B11100000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00101111,B10011110,B00001000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00100000,B10000010,B00000000,B00000000,B00101111,B00001111,B00001000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00010000,B01000001,B00000000,B00000000,B00110000,B00001111,B00011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000000,B00000000,B00001000,B00100000,B10000000,B00000000,B00110000,B00001111,B00011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00011111,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111110,B00000000,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00111111,B11111111,B11111000
+};
+
+
+ #endif
+
+#else // HOTENDS >= 2
+
+ #if FAN_ANIM_FRAMES <= 2
+
+const unsigned char status_screen0_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B00000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00111111,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110000,B01111110,B00011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110000,B01111100,B00011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101000,B01111100,B00001000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101100,B00111000,B00001000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000001,B11111110,B00000000,B00001000,B00100000,B10000000,B00101111,B00111001,B11001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111110,B11110000,B00000011,B11001111,B00000000,B00000100,B00010000,B01000000,B00101111,B11111111,B11101000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111100,B11110000,B00000011,B10110111,B00000000,B00000100,B00010000,B01000000,B00101111,B11000111,B11101000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111010,B11110000,B00000011,B11110111,B00000000,B00001000,B00100000,B10000000,B00101111,B11111111,B11101000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011110,B11100000,B00000001,B11101110,B00000000,B00010000,B01000001,B00000000,B00100111,B00111001,B11101000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011110,B11100000,B00000001,B11011110,B00000000,B00100000,B10000010,B00000000,B00100000,B00111000,B01101000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10111111,B00000000,B00100000,B10000010,B00000000,B00100000,B01111100,B00101000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10000111,B00000000,B00010000,B01000001,B00000000,B00110000,B01111100,B00011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000011,B11111111,B00000000,B00001000,B00100000,B10000000,B00110000,B11111100,B00011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B11111100,B00000000,B00000000,B00000000,B00000000,B00111001,B11111000,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B01111000,B00000000,B11111111,B11111111,B11000000,B00111110,B00000000,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00110000,B00000000,B11111111,B11111111,B11000000,B00111111,B11111111,B11111000
+};
+
+
+const unsigned char status_screen1_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B00000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00001111,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110100,B00011111,B11011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110110,B00011111,B10011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101111,B00011111,B00001000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101111,B10011110,B00001000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000001,B11111110,B00000000,B00001000,B00100000,B10000000,B00101111,B11111100,B00001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111110,B11110000,B00000011,B11001111,B00000000,B00000100,B00010000,B01000000,B00101111,B11011100,B00001000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111100,B11110000,B00000011,B10110111,B00000000,B00000100,B00010000,B01000000,B00100111,B11101111,B11001000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111010,B11110000,B00000011,B11110111,B00000000,B00001000,B00100000,B10000000,B00100000,B01110111,B11101000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011110,B11100000,B00000001,B11101110,B00000000,B00010000,B01000001,B00000000,B00100000,B01111111,B11101000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011110,B11100000,B00000001,B11011110,B00000000,B00100000,B10000010,B00000000,B00100000,B11110011,B11101000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10111111,B00000000,B00100000,B10000010,B00000000,B00100001,B11110001,B11101000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10000111,B00000000,B00010000,B01000001,B00000000,B00110011,B11110000,B11011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000011,B11111111,B00000000,B00001000,B00100000,B10000000,B00110111,B11110000,B01011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B11111100,B00000000,B00000000,B00000000,B00000000,B00111001,B11100000,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B01111000,B00000000,B11111111,B11111111,B11000000,B00111110,B00000000,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00110000,B00000000,B11111111,B11111111,B11000000,B00111111,B11111111,B11111000
+};
+
+
+ #elif FAN_ANIM_FRAMES == 3
+
+ const unsigned char status_screen0_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B00000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00111111,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110000,B01111110,B00011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110000,B01111100,B00011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101000,B01111100,B00001000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101100,B00111000,B00001000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000001,B11111110,B00000000,B00001000,B00100000,B10000000,B00101111,B00111001,B11001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111110,B11110000,B00000011,B11001111,B00000000,B00000100,B00010000,B01000000,B00101111,B11111111,B11101000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111100,B11110000,B00000011,B10110111,B00000000,B00000100,B00010000,B01000000,B00101111,B11000111,B11101000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111010,B11110000,B00000011,B11110111,B00000000,B00001000,B00100000,B10000000,B00101111,B11111111,B11101000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011110,B11100000,B00000001,B11101110,B00000000,B00010000,B01000001,B00000000,B00100111,B00111001,B11101000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011110,B11100000,B00000001,B11011110,B00000000,B00100000,B10000010,B00000000,B00100000,B00111000,B01101000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10111111,B00000000,B00100000,B10000010,B00000000,B00100000,B01111100,B00101000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10000111,B00000000,B00010000,B01000001,B00000000,B00110000,B01111100,B00011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000011,B11111111,B00000000,B00001000,B00100000,B10000000,B00110000,B11111100,B00011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B11111100,B00000000,B00000000,B00000000,B00000000,B00111001,B11111000,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B01111000,B00000000,B11111111,B11111111,B11000000,B00111110,B00000000,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00110000,B00000000,B11111111,B11111111,B11000000,B00111111,B11111111,B11111000
+};
+
+
+const unsigned char status_screen1_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B00000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00001111,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110100,B00011111,B11011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110110,B00011111,B10011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101111,B00011111,B00001000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101111,B10011110,B00001000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000001,B11111110,B00000000,B00001000,B00100000,B10000000,B00101111,B11111100,B00001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111110,B11110000,B00000011,B11001111,B00000000,B00000100,B00010000,B01000000,B00101111,B11011100,B00001000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111100,B11110000,B00000011,B10110111,B00000000,B00000100,B00010000,B01000000,B00100111,B11101111,B11001000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111010,B11110000,B00000011,B11110111,B00000000,B00001000,B00100000,B10000000,B00100000,B01110111,B11101000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011110,B11100000,B00000001,B11101110,B00000000,B00010000,B01000001,B00000000,B00100000,B01111111,B11101000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011110,B11100000,B00000001,B11011110,B00000000,B00100000,B10000010,B00000000,B00100000,B11110011,B11101000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10111111,B00000000,B00100000,B10000010,B00000000,B00100001,B11110001,B11101000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10000111,B00000000,B00010000,B01000001,B00000000,B00110011,B11110000,B11011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000011,B11111111,B00000000,B00001000,B00100000,B10000000,B00110111,B11110000,B01011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B11111100,B00000000,B00000000,B00000000,B00000000,B00111001,B11100000,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B01111000,B00000000,B11111111,B11111111,B11000000,B00111110,B00000000,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00110000,B00000000,B11111111,B11111111,B11000000,B00111111,B11111111,B11111000
+};
+
+const unsigned char status_screen2_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B10000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111001,B10000000,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110111,B10000001,B11011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110111,B11000011,B11011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100111,B11000111,B11101000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100011,B11000111,B11111000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000001,B11111110,B00000000,B00001000,B00100000,B10000000,B00100001,B11111111,B10001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111110,B11110000,B00000011,B11001111,B00000000,B00000100,B00010000,B01000000,B00100000,B01101100,B00001000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111100,B11110000,B00000011,B10110111,B00000000,B00000100,B00010000,B01000000,B00100000,B01101100,B00001000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111010,B11110000,B00000011,B11110111,B00000000,B00001000,B00100000,B10000000,B00100000,B01101100,B00001000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011110,B11100000,B00000001,B11101110,B00000000,B00010000,B01000001,B00000000,B00100011,B11111111,B00001000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011110,B11100000,B00000001,B11011110,B00000000,B00100000,B10000010,B00000000,B00111111,B11000111,B10001000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10111111,B00000000,B00100000,B10000010,B00000000,B00101111,B11000111,B11001000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10000111,B00000000,B00010000,B01000001,B00000000,B00110111,B10000111,B11011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000011,B11111111,B00000000,B00001000,B00100000,B10000000,B00110111,B00000011,B11011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B11111100,B00000000,B00000000,B00000000,B00000000,B00111000,B00000011,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B01111000,B00000000,B11111111,B11111111,B11000000,B00111110,B00000010,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00110000,B00000000,B11111111,B11111111,B11000000,B00111111,B11111111,B11111000
+};
+
+
+ #elif FAN_ANIM_FRAMES == 4
+
+ const unsigned char status_screen0_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B00000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00111111,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110000,B01111110,B00011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110000,B01111100,B00011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101000,B01111100,B00001000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101100,B00111000,B00001000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000001,B11111110,B00000000,B00001000,B00100000,B10000000,B00101111,B00111001,B11001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111110,B11110000,B00000011,B11001111,B00000000,B00000100,B00010000,B01000000,B00101111,B11111111,B11101000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111100,B11110000,B00000011,B10110111,B00000000,B00000100,B00010000,B01000000,B00101111,B11000111,B11101000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111010,B11110000,B00000011,B11110111,B00000000,B00001000,B00100000,B10000000,B00101111,B11111111,B11101000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011110,B11100000,B00000001,B11101110,B00000000,B00010000,B01000001,B00000000,B00100111,B00111001,B11101000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011110,B11100000,B00000001,B11011110,B00000000,B00100000,B10000010,B00000000,B00100000,B00111000,B01101000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10111111,B00000000,B00100000,B10000010,B00000000,B00100000,B01111100,B00101000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10000111,B00000000,B00010000,B01000001,B00000000,B00110000,B01111100,B00011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000011,B11111111,B00000000,B00001000,B00100000,B10000000,B00110000,B11111100,B00011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B11111100,B00000000,B00000000,B00000000,B00000000,B00111001,B11111000,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B01111000,B00000000,B11111111,B11111111,B11000000,B00111110,B00000000,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00110000,B00000000,B11111111,B11111111,B11000000,B00111111,B11111111,B11111000
+};
+
+
+const unsigned char status_screen1_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B00000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111000,B00001111,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110100,B00011111,B11011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110110,B00011111,B10011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101111,B00011111,B00001000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00101111,B10011110,B00001000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000001,B11111110,B00000000,B00001000,B00100000,B10000000,B00101111,B11111100,B00001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111110,B11110000,B00000011,B11001111,B00000000,B00000100,B00010000,B01000000,B00101111,B11011100,B00001000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111100,B11110000,B00000011,B10110111,B00000000,B00000100,B00010000,B01000000,B00100111,B11101111,B11001000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111010,B11110000,B00000011,B11110111,B00000000,B00001000,B00100000,B10000000,B00100000,B01110111,B11101000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011110,B11100000,B00000001,B11101110,B00000000,B00010000,B01000001,B00000000,B00100000,B01111111,B11101000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011110,B11100000,B00000001,B11011110,B00000000,B00100000,B10000010,B00000000,B00100000,B11110011,B11101000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10111111,B00000000,B00100000,B10000010,B00000000,B00100001,B11110001,B11101000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10000111,B00000000,B00010000,B01000001,B00000000,B00110011,B11110000,B11011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000011,B11111111,B00000000,B00001000,B00100000,B10000000,B00110111,B11110000,B01011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B11111100,B00000000,B00000000,B00000000,B00000000,B00111001,B11100000,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B01111000,B00000000,B11111111,B11111111,B11000000,B00111110,B00000000,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00110000,B00000000,B11111111,B11111111,B11000000,B00111111,B11111111,B11111000
+};
+
+const unsigned char status_screen2_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B10000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111001,B10000000,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110111,B10000001,B11011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110111,B11000011,B11011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100111,B11000111,B11101000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100011,B11000111,B11111000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000001,B11111110,B00000000,B00001000,B00100000,B10000000,B00100001,B11111111,B10001000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111110,B11110000,B00000011,B11001111,B00000000,B00000100,B00010000,B01000000,B00100000,B01101100,B00001000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111100,B11110000,B00000011,B10110111,B00000000,B00000100,B00010000,B01000000,B00100000,B01101100,B00001000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111010,B11110000,B00000011,B11110111,B00000000,B00001000,B00100000,B10000000,B00100000,B01101100,B00001000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011110,B11100000,B00000001,B11101110,B00000000,B00010000,B01000001,B00000000,B00100011,B11111111,B00001000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011110,B11100000,B00000001,B11011110,B00000000,B00100000,B10000010,B00000000,B00111111,B11000111,B10001000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10111111,B00000000,B00100000,B10000010,B00000000,B00101111,B11000111,B11001000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10000111,B00000000,B00010000,B01000001,B00000000,B00110111,B10000111,B11011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000011,B11111111,B00000000,B00001000,B00100000,B10000000,B00110111,B00000011,B11011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B11111100,B00000000,B00000000,B00000000,B00000000,B00111000,B00000011,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B01111000,B00000000,B11111111,B11111111,B11000000,B00111110,B00000010,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00110000,B00000000,B11111111,B11111111,B11000000,B00111111,B11111111,B11111000
+};
+
+const unsigned char status_screen3_bmp[] PROGMEM = {
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111110,B00000000,B11111000,
+ B10001110,B00000000,B11100001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111001,B11110000,B00111000,
+ B10011111,B00000000,B11110001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110001,B11100000,B00011000,
+ B10010011,B10000001,B00111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00110001,B11100000,B00011000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100001,B11100001,B11101000,
+ B10011111,B10000001,B11111001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100000,B11110011,B11101000,
+ B10011111,B10111001,B11110001,B00000000,B00000000,B00011111,B11100000,B00000001,B11111110,B00000000,B00001000,B00100000,B10000000,B00100000,B01111111,B11101000,
+ B10001111,B00101000,B11110001,B00000000,B00000000,B00111110,B11110000,B00000011,B11001111,B00000000,B00000100,B00010000,B01000000,B00100000,B01110111,B11101000,
+ B10000000,B00111000,B00000001,B00000000,B00000000,B00111100,B11110000,B00000011,B10110111,B00000000,B00000100,B00010000,B01000000,B00101000,B11101110,B00101000,
+ B10000000,B00000000,B00000001,B00000000,B00000000,B00111010,B11110000,B00000011,B11110111,B00000000,B00001000,B00100000,B10000000,B00101111,B11011100,B00001000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00011110,B11100000,B00000001,B11101110,B00000000,B00010000,B01000001,B00000000,B00101111,B11111100,B00001000,
+ B10010001,B01110100,B10011001,B00000000,B00000000,B00011110,B11100000,B00000001,B11011110,B00000000,B00100000,B10000010,B00000000,B00101111,B10011110,B00001000,
+ B10011011,B00000110,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10111111,B00000000,B00100000,B10000010,B00000000,B00101111,B00001111,B00001000,
+ B10011011,B01010100,B10101001,B00000000,B00000000,B00111110,B11110000,B00000011,B10000111,B00000000,B00010000,B01000001,B00000000,B00110000,B00001111,B00011000,
+ B10011011,B01010110,B10101001,B00000000,B00000000,B00111111,B11110000,B00000011,B11111111,B00000000,B00001000,B00100000,B10000000,B00110000,B00001111,B00011000,
+ B10011011,B01010100,B10011001,B00000000,B00000000,B00001111,B11000000,B00000000,B11111100,B00000000,B00000000,B00000000,B00000000,B00111000,B00011111,B00111000,
+ B10011111,B11111111,B11111001,B00000000,B00000000,B00000111,B10000000,B00000000,B01111000,B00000000,B11111111,B11111111,B11000000,B00111110,B00000000,B11111000,
+ B11111111,B11111111,B11111111,B00000000,B00000000,B00000011,B00000000,B00000000,B00110000,B00000000,B11111111,B11111111,B11000000,B00111111,B11111111,B11111000
+};
+
+
+ #endif
+
+#endif // HOTENDS >= 2
diff --git a/Marlin/dogm_font_data_HD44780_C.h b/Marlin/dogm_font_data_HD44780_C.h
deleted file mode 100644
index 21d4aaabe2..0000000000
--- a/Marlin/dogm_font_data_HD44780_C.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- Fontname: HD44780_C v1.2
- Copyright: A. Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h= 8 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 8
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t HD44780_C_5x7[2522] U8G_SECTION(".progmem.HD44780_C_5x7") = {
- 0, 6, 9, 0, 254, 7, 1, 145, 3, 34, 32, 255, 255, 8, 255, 7,
- 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
- 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
- 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
- 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
- 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
- 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
- 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
- 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
- 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
- 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
- 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
- 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
- 48, 64, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5,
- 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
- 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
- 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
- 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
- 8, 16, 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0,
- 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144,
- 136, 136, 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
- 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5,
- 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6,
- 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128,
- 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
- 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136,
- 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7,
- 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0,
- 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136,
- 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128,
- 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0,
- 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32,
- 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136,
- 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5,
- 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6,
- 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136,
- 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32,
- 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224,
- 5, 7, 7, 6, 0, 0, 32, 112, 160, 160, 168, 112, 32, 3, 7, 7,
- 6, 1, 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4,
- 32, 80, 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5,
- 128, 64, 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7,
- 6, 0, 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0,
- 112, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136,
- 136, 120, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7,
- 6, 0, 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255,
- 112, 136, 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200,
- 136, 136, 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128,
- 3, 8, 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7,
- 7, 6, 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1,
- 0, 192, 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168,
- 168, 168, 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5,
- 5, 6, 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240,
- 136, 136, 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8,
- 8, 5, 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6,
- 0, 0, 112, 128, 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224,
- 64, 64, 72, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5,
- 5, 5, 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0,
- 136, 136, 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136,
- 5, 6, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6,
- 0, 0, 248, 16, 32, 64, 248, 5, 5, 5, 6, 0, 2, 184, 168, 168,
- 168, 184, 5, 5, 5, 6, 0, 2, 184, 136, 184, 160, 184, 5, 5, 5,
- 6, 0, 2, 184, 160, 184, 136, 184, 5, 6, 6, 6, 0, 1, 8, 40,
- 72, 248, 64, 32, 5, 5, 5, 6, 0, 0, 56, 112, 224, 136, 240, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 5,
- 7, 7, 6, 0, 0, 248, 136, 128, 240, 136, 136, 240, 5, 7, 7, 6,
- 0, 0, 248, 136, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 80,
- 0, 248, 128, 240, 128, 248, 5, 7, 7, 6, 0, 0, 168, 168, 168, 112,
- 168, 168, 168, 5, 7, 7, 6, 0, 0, 240, 8, 8, 112, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 136, 136, 152, 168, 200, 136, 136, 5, 8, 8,
- 6, 0, 0, 80, 32, 136, 152, 168, 168, 200, 136, 5, 7, 7, 6, 0,
- 0, 120, 40, 40, 40, 40, 168, 72, 5, 7, 7, 6, 0, 0, 248, 136,
- 136, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 136, 136, 136, 80, 32,
- 64, 128, 5, 7, 7, 6, 0, 0, 32, 112, 168, 168, 168, 112, 32, 5,
- 7, 7, 6, 0, 0, 136, 136, 136, 120, 8, 8, 8, 5, 7, 7, 6,
- 0, 0, 168, 168, 168, 168, 168, 168, 248, 5, 7, 7, 6, 0, 0, 192,
- 64, 64, 112, 72, 72, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 200,
- 168, 168, 200, 5, 7, 7, 6, 0, 0, 112, 136, 8, 56, 8, 136, 112,
- 5, 7, 7, 6, 0, 0, 144, 168, 168, 232, 168, 168, 144, 5, 7, 7,
- 6, 0, 0, 120, 136, 136, 120, 40, 72, 136, 5, 7, 7, 6, 0, 0,
- 24, 96, 128, 240, 136, 136, 112, 4, 5, 5, 6, 0, 0, 224, 144, 224,
- 144, 224, 5, 5, 5, 6, 0, 0, 248, 136, 128, 128, 128, 5, 7, 7,
- 6, 0, 0, 80, 0, 112, 136, 248, 128, 112, 5, 5, 5, 6, 0, 0,
- 168, 168, 112, 168, 168, 5, 5, 5, 6, 0, 0, 240, 8, 48, 8, 240,
- 5, 5, 5, 6, 0, 0, 136, 152, 168, 200, 136, 5, 7, 7, 6, 0,
- 0, 80, 32, 136, 152, 168, 200, 136, 4, 5, 5, 6, 0, 0, 144, 160,
- 192, 160, 144, 5, 5, 5, 6, 0, 0, 248, 40, 40, 168, 72, 5, 5,
- 5, 6, 0, 0, 136, 216, 168, 136, 136, 5, 5, 5, 6, 0, 0, 136,
- 136, 248, 136, 136, 5, 5, 5, 6, 0, 0, 248, 136, 136, 136, 136, 5,
- 5, 5, 6, 0, 0, 248, 32, 32, 32, 32, 5, 5, 5, 6, 0, 0,
- 136, 136, 120, 8, 8, 5, 5, 5, 6, 0, 0, 168, 168, 168, 168, 248,
- 5, 5, 5, 6, 0, 0, 192, 64, 112, 72, 112, 5, 5, 5, 6, 0,
- 0, 136, 136, 200, 168, 200, 4, 5, 5, 6, 0, 0, 128, 128, 224, 144,
- 224, 5, 5, 5, 6, 0, 0, 112, 136, 56, 136, 112, 5, 5, 5, 6,
- 0, 0, 144, 168, 232, 168, 144, 5, 5, 5, 6, 0, 0, 120, 136, 120,
- 40, 72, 5, 5, 5, 6, 0, 1, 32, 72, 144, 72, 32, 5, 5, 5,
- 6, 0, 1, 32, 144, 72, 144, 32, 5, 3, 3, 6, 0, 0, 72, 144,
- 216, 5, 3, 3, 6, 0, 4, 216, 72, 144, 5, 7, 7, 6, 0, 0,
- 144, 208, 176, 144, 56, 40, 56, 5, 7, 7, 6, 0, 0, 32, 0, 32,
- 64, 128, 136, 112, 5, 7, 7, 6, 0, 0, 24, 32, 32, 112, 32, 32,
- 192, 5, 7, 7, 6, 0, 0, 32, 80, 64, 240, 64, 64, 120, 1, 2,
- 2, 6, 2, 0, 128, 128, 1, 4, 4, 6, 2, 0, 128, 128, 128, 128,
- 3, 5, 5, 6, 1, 0, 160, 160, 160, 0, 224, 3, 5, 5, 6, 1,
- 0, 160, 160, 160, 0, 160, 5, 7, 7, 6, 0, 0, 160, 0, 232, 16,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 216, 112, 32, 112, 216, 5, 7,
- 7, 6, 0, 0, 160, 64, 168, 16, 32, 64, 128, 3, 6, 6, 6, 1,
- 1, 224, 64, 64, 64, 64, 224, 5, 6, 6, 6, 0, 1, 248, 80, 80,
- 80, 80, 248, 5, 7, 7, 6, 0, 0, 32, 112, 168, 32, 32, 32, 32,
- 5, 7, 7, 6, 0, 0, 32, 32, 32, 32, 168, 112, 32, 5, 7, 7,
- 6, 0, 0, 128, 144, 176, 248, 176, 144, 128, 5, 7, 7, 6, 0, 0,
- 8, 72, 104, 248, 104, 72, 8, 5, 7, 7, 6, 0, 0, 128, 136, 168,
- 248, 168, 136, 128, 5, 7, 7, 6, 0, 0, 128, 224, 136, 16, 32, 64,
- 128, 2, 2, 2, 6, 2, 2, 192, 192, 5, 8, 8, 6, 0, 255, 120,
- 40, 40, 40, 72, 136, 248, 136, 5, 8, 8, 6, 0, 255, 136, 136, 136,
- 136, 136, 136, 248, 8, 5, 8, 8, 6, 0, 255, 168, 168, 168, 168, 168,
- 168, 248, 8, 5, 6, 6, 6, 0, 255, 120, 40, 72, 136, 248, 136, 5,
- 7, 7, 6, 0, 255, 32, 32, 112, 168, 168, 112, 32, 5, 6, 6, 6,
- 0, 255, 136, 136, 136, 136, 248, 8, 5, 6, 6, 6, 0, 255, 168, 168,
- 168, 168, 248, 8, 2, 2, 2, 6, 2, 6, 64, 128, 3, 1, 1, 6,
- 1, 7, 160, 5, 2, 2, 6, 0, 6, 72, 176, 5, 8, 8, 6, 0,
- 0, 16, 32, 0, 112, 136, 248, 128, 112, 5, 6, 6, 6, 0, 255, 112,
- 128, 136, 112, 32, 96, 3, 7, 7, 6, 1, 0, 160, 0, 160, 160, 160,
- 32, 192, 5, 6, 6, 6, 0, 1, 32, 112, 112, 112, 248, 32, 5, 5,
- 5, 6, 0, 1, 80, 0, 136, 0, 80, 5, 5, 5, 6, 0, 1, 112,
- 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 136, 144, 168, 88, 184, 8,
- 8, 5, 7, 7, 6, 0, 0, 136, 144, 184, 72, 184, 8, 56, 5, 7,
- 7, 6, 0, 0, 136, 144, 184, 72, 152, 32, 56, 5, 8, 8, 6, 0,
- 0, 192, 64, 192, 72, 216, 56, 8, 8, 5, 7, 7, 6, 0, 0, 136,
- 248, 136, 248, 136, 248, 136, 4, 5, 5, 6, 0, 2, 192, 0, 48, 0,
- 96, 5, 8, 8, 6, 0, 0, 64, 160, 224, 168, 8, 40, 120, 32, 5,
- 8, 8, 6, 0, 0, 64, 112, 64, 120, 64, 112, 64, 224, 5, 8, 8,
- 6, 0, 0, 32, 112, 32, 248, 32, 112, 32, 112, 5, 7, 7, 6, 0,
- 0, 104, 0, 232, 0, 104, 16, 56, 5, 8, 8, 6, 0, 0, 16, 112,
- 16, 240, 16, 112, 16, 56, 5, 7, 7, 6, 0, 1, 32, 112, 32, 248,
- 32, 112, 32, 5, 8, 8, 6, 0, 0, 16, 144, 80, 48, 80, 144, 16,
- 56, 5, 8, 8, 6, 0, 0, 48, 72, 32, 80, 80, 32, 144, 96, 5,
- 7, 7, 6, 0, 0, 120, 168, 168, 120, 40, 40, 40, 5, 8, 8, 6,
- 0, 0, 248, 248, 248, 248, 248, 248, 248, 248
-};
diff --git a/Marlin/dogm_font_data_HD44780_J.h b/Marlin/dogm_font_data_HD44780_J.h
deleted file mode 100644
index e4884c7cbc..0000000000
--- a/Marlin/dogm_font_data_HD44780_J.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- Fontname: HD44780_J
- Copyright: A. Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 6 h=10 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 8
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-2 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-2
-*/
-#include
-const u8g_fntpgm_uint8_t HD44780_J_5x7[2492] U8G_SECTION(".progmem.HD44780_J_5x7") = {
- 0, 6, 9, 0, 254, 7, 1, 145, 3, 34, 32, 255, 255, 8, 254, 7,
- 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
- 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
- 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
- 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
- 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
- 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
- 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
- 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
- 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
- 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
- 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
- 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
- 48, 64, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5,
- 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
- 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
- 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
- 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
- 8, 16, 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0,
- 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144,
- 136, 136, 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
- 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5,
- 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6,
- 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128,
- 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
- 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136,
- 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7,
- 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0,
- 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136,
- 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128,
- 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0,
- 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32,
- 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136,
- 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5,
- 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6,
- 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136,
- 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32,
- 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224,
- 5, 7, 7, 6, 0, 0, 136, 80, 248, 32, 248, 32, 32, 3, 7, 7,
- 6, 1, 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4,
- 32, 80, 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5,
- 128, 64, 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7,
- 6, 0, 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0,
- 112, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136,
- 136, 120, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7,
- 6, 0, 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255,
- 112, 136, 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200,
- 136, 136, 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128,
- 3, 8, 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7,
- 7, 6, 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1,
- 0, 192, 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168,
- 168, 168, 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5,
- 5, 6, 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240,
- 136, 136, 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8,
- 8, 5, 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6,
- 0, 0, 112, 128, 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224,
- 64, 64, 72, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5,
- 5, 5, 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0,
- 136, 136, 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136,
- 5, 6, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6,
- 0, 0, 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64,
- 128, 64, 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128,
- 128, 3, 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 5,
- 5, 6, 0, 1, 32, 16, 248, 16, 32, 5, 5, 5, 6, 0, 1, 32,
- 64, 248, 64, 32, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 3, 3, 3, 6, 0, 0,
- 224, 160, 224, 3, 4, 4, 6, 2, 3, 224, 128, 128, 128, 3, 4, 4,
- 6, 0, 0, 32, 32, 32, 224, 3, 3, 3, 6, 0, 0, 128, 64, 32,
- 2, 2, 2, 6, 1, 2, 192, 192, 5, 6, 6, 6, 0, 0, 248, 8,
- 248, 8, 16, 32, 5, 5, 5, 6, 0, 0, 248, 8, 48, 32, 64, 4,
- 5, 5, 6, 0, 0, 16, 32, 96, 160, 32, 5, 5, 5, 6, 0, 0,
- 32, 248, 136, 8, 48, 5, 4, 4, 6, 0, 0, 248, 32, 32, 248, 5,
- 5, 5, 6, 0, 0, 16, 248, 48, 80, 144, 5, 5, 5, 6, 0, 0,
- 64, 248, 72, 80, 64, 5, 4, 4, 6, 0, 0, 112, 16, 16, 248, 4,
- 5, 5, 6, 0, 0, 240, 16, 240, 16, 240, 5, 4, 4, 6, 0, 0,
- 168, 168, 8, 48, 5, 1, 1, 6, 0, 3, 248, 5, 7, 7, 6, 0,
- 0, 248, 8, 40, 48, 32, 32, 64, 5, 7, 7, 6, 0, 0, 8, 16,
- 32, 96, 160, 32, 32, 5, 7, 7, 6, 0, 0, 32, 248, 136, 136, 8,
- 16, 32, 5, 6, 6, 6, 0, 0, 248, 32, 32, 32, 32, 248, 5, 7,
- 7, 6, 0, 0, 16, 248, 16, 48, 80, 144, 16, 5, 7, 7, 6, 0,
- 0, 64, 248, 72, 72, 72, 72, 144, 5, 7, 7, 6, 0, 0, 32, 248,
- 32, 248, 32, 32, 32, 5, 6, 6, 6, 0, 0, 120, 72, 136, 8, 16,
- 96, 5, 7, 7, 6, 0, 0, 64, 120, 144, 16, 16, 16, 32, 5, 6,
- 6, 6, 0, 0, 248, 8, 8, 8, 8, 248, 5, 7, 7, 6, 0, 0,
- 80, 248, 80, 80, 16, 32, 64, 5, 6, 6, 6, 0, 0, 192, 8, 200,
- 8, 16, 224, 5, 6, 6, 6, 0, 0, 248, 8, 16, 32, 80, 136, 5,
- 7, 7, 6, 0, 0, 64, 248, 72, 80, 64, 64, 56, 5, 6, 6, 6,
- 0, 0, 136, 136, 72, 8, 16, 96, 5, 6, 6, 6, 0, 0, 120, 72,
- 168, 24, 16, 96, 5, 7, 7, 6, 0, 0, 16, 224, 32, 248, 32, 32,
- 64, 5, 6, 6, 6, 0, 0, 168, 168, 168, 8, 16, 32, 5, 7, 7,
- 6, 0, 0, 112, 0, 248, 32, 32, 32, 64, 3, 7, 7, 6, 1, 0,
- 128, 128, 128, 192, 160, 128, 128, 5, 7, 7, 6, 0, 0, 32, 32, 248,
- 32, 32, 64, 128, 5, 6, 6, 6, 0, 0, 112, 0, 0, 0, 0, 248,
- 5, 6, 6, 6, 0, 0, 248, 8, 80, 32, 80, 128, 5, 7, 7, 6,
- 0, 0, 32, 248, 16, 32, 112, 168, 32, 3, 7, 7, 6, 1, 0, 32,
- 32, 32, 32, 32, 64, 128, 5, 6, 6, 6, 0, 0, 32, 16, 136, 136,
- 136, 136, 5, 7, 7, 6, 0, 0, 128, 128, 248, 128, 128, 128, 120, 5,
- 6, 6, 6, 0, 0, 248, 8, 8, 8, 16, 96, 5, 5, 5, 6, 0,
- 1, 64, 160, 16, 8, 8, 5, 7, 7, 6, 0, 0, 32, 248, 32, 32,
- 168, 168, 32, 5, 6, 6, 6, 0, 0, 248, 8, 8, 80, 32, 16, 4,
- 6, 6, 6, 1, 0, 224, 0, 224, 0, 224, 16, 5, 6, 6, 6, 0,
- 0, 32, 64, 128, 136, 248, 8, 5, 6, 6, 6, 0, 0, 8, 8, 80,
- 32, 80, 128, 5, 6, 6, 6, 0, 0, 248, 64, 248, 64, 64, 56, 5,
- 7, 7, 6, 0, 0, 64, 64, 248, 72, 80, 64, 64, 5, 7, 7, 6,
- 0, 0, 112, 16, 16, 16, 16, 16, 248, 5, 6, 6, 6, 0, 0, 248,
- 8, 248, 8, 8, 248, 5, 7, 7, 6, 0, 0, 112, 0, 248, 8, 8,
- 16, 32, 4, 7, 7, 6, 0, 0, 144, 144, 144, 144, 16, 32, 64, 5,
- 6, 6, 6, 0, 0, 32, 160, 160, 168, 168, 176, 5, 7, 7, 6, 0,
- 0, 128, 128, 128, 136, 144, 160, 192, 5, 6, 6, 6, 0, 0, 248, 136,
- 136, 136, 136, 248, 5, 6, 6, 6, 0, 0, 248, 136, 136, 8, 16, 32,
- 5, 6, 6, 6, 0, 0, 192, 0, 8, 8, 16, 224, 4, 3, 3, 6,
- 0, 4, 32, 144, 64, 3, 3, 3, 6, 0, 4, 224, 160, 224, 5, 5,
- 5, 6, 0, 1, 72, 168, 144, 144, 104, 5, 7, 7, 6, 0, 0, 80,
- 0, 112, 8, 120, 136, 120, 4, 8, 8, 6, 1, 255, 96, 144, 144, 224,
- 144, 144, 224, 128, 5, 5, 5, 6, 0, 0, 112, 128, 96, 136, 112, 5,
- 6, 6, 6, 0, 255, 136, 136, 152, 232, 136, 128, 5, 5, 5, 6, 0,
- 0, 120, 160, 144, 136, 112, 5, 7, 7, 6, 0, 254, 48, 72, 136, 136,
- 240, 128, 128, 5, 8, 8, 6, 0, 254, 120, 136, 136, 136, 120, 8, 8,
- 112, 5, 5, 5, 6, 0, 1, 56, 32, 32, 160, 64, 4, 3, 3, 6,
- 0, 3, 16, 208, 16, 4, 8, 8, 6, 0, 255, 16, 0, 48, 16, 16,
- 16, 144, 96, 3, 3, 3, 6, 0, 4, 160, 64, 160, 5, 7, 7, 6,
- 0, 0, 32, 112, 160, 160, 168, 112, 32, 5, 7, 7, 6, 0, 0, 64,
- 64, 224, 64, 224, 64, 120, 5, 7, 7, 6, 0, 0, 112, 0, 176, 200,
- 136, 136, 136, 5, 7, 7, 6, 0, 0, 80, 0, 112, 136, 136, 136, 112,
- 5, 7, 7, 6, 0, 255, 176, 200, 136, 136, 240, 128, 128, 5, 7, 7,
- 6, 0, 255, 104, 152, 136, 136, 120, 8, 8, 5, 6, 6, 6, 0, 0,
- 112, 136, 248, 136, 136, 112, 5, 3, 3, 6, 0, 2, 88, 168, 208, 5,
- 5, 5, 6, 0, 0, 112, 136, 136, 80, 216, 5, 7, 7, 6, 0, 0,
- 80, 0, 136, 136, 136, 152, 104, 5, 7, 7, 6, 0, 0, 248, 128, 64,
- 32, 64, 128, 248, 5, 5, 5, 6, 0, 0, 248, 80, 80, 80, 152, 5,
- 7, 7, 6, 0, 0, 248, 0, 136, 80, 32, 80, 136, 5, 7, 7, 6,
- 0, 255, 136, 136, 136, 136, 120, 8, 112, 5, 6, 6, 6, 0, 0, 8,
- 240, 32, 248, 32, 32, 5, 5, 5, 6, 0, 0, 248, 64, 120, 72, 136,
- 5, 5, 5, 6, 0, 0, 248, 168, 248, 136, 136, 5, 5, 5, 6, 0,
- 1, 32, 0, 248, 0, 32, 0, 0, 0, 6, 0, 0, 6, 10, 10, 6,
- 0, 254, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252
-};
diff --git a/Marlin/dogm_font_data_HD44780_W.h b/Marlin/dogm_font_data_HD44780_W.h
deleted file mode 100644
index 86b4bf4bff..0000000000
--- a/Marlin/dogm_font_data_HD44780_W.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- Fontname: HD44780_W
- Copyright: A.Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h= 9 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 9
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t HD44780_W_5x7[3034] U8G_SECTION(".progmem.HD44780_W_5x7") = {
- 0, 6, 9, 0, 254, 7, 2, 79, 3, 222, 16, 255, 255, 8, 255, 7,
- 255, 4, 7, 7, 6, 0, 0, 16, 48, 112, 240, 112, 48, 16, 4, 7,
- 7, 6, 1, 0, 128, 192, 224, 240, 224, 192, 128, 5, 3, 3, 6, 0,
- 4, 216, 72, 144, 5, 3, 3, 6, 0, 4, 216, 144, 72, 5, 7, 7,
- 6, 0, 0, 32, 112, 248, 0, 32, 112, 248, 5, 7, 7, 6, 0, 0,
- 248, 112, 32, 0, 248, 112, 32, 5, 5, 5, 6, 0, 1, 112, 248, 248,
- 248, 112, 5, 7, 7, 6, 0, 0, 8, 8, 40, 72, 248, 64, 32, 5,
- 7, 7, 6, 0, 0, 32, 112, 168, 32, 32, 32, 32, 5, 7, 7, 6,
- 0, 0, 32, 32, 32, 32, 168, 112, 32, 5, 5, 5, 6, 0, 1, 32,
- 64, 248, 64, 32, 5, 5, 5, 6, 0, 1, 32, 16, 248, 16, 32, 5,
- 7, 7, 6, 0, 0, 16, 32, 64, 32, 16, 0, 248, 5, 7, 7, 6,
- 0, 0, 64, 32, 16, 32, 64, 0, 248, 5, 5, 5, 6, 0, 1, 32,
- 32, 112, 112, 248, 5, 5, 5, 6, 0, 0, 248, 112, 112, 32, 32, 0,
- 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128,
- 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6, 0, 0,
- 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32, 120, 160,
- 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32, 64, 152,
- 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104, 2, 3,
- 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32, 64, 128,
- 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32, 32, 64,
- 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5, 5, 6,
- 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192, 64, 128,
- 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192, 192, 5,
- 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0,
- 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64, 192, 64,
- 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112, 128, 128,
- 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240, 5, 7,
- 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7, 6, 0,
- 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0, 48, 64,
- 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32, 32,
- 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136, 112, 5,
- 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5, 5, 6,
- 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192, 192, 0,
- 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64, 32, 16,
- 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1, 0, 128,
- 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136, 8, 16,
- 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168, 112, 5,
- 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7, 7, 6,
- 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0, 0, 112,
- 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144, 136, 136,
- 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 248,
- 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5, 7, 7,
- 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6, 0, 0,
- 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16, 16, 144,
- 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136, 5, 7,
- 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7, 6, 0,
- 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 136, 136,
- 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 136,
- 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128, 128, 5,
- 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7, 7, 6,
- 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0, 0, 120,
- 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32, 32, 32,
- 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 136, 112,
- 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5, 7, 7,
- 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6, 0, 0,
- 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136, 136, 136,
- 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32, 64, 128,
- 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224, 5, 5,
- 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6, 1, 0, 224,
- 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32, 80, 136, 5,
- 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128, 64, 5, 5,
- 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6, 0, 0, 128,
- 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112, 128, 128, 136,
- 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136, 120, 5, 5,
- 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6, 0, 0, 48,
- 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112, 136, 136, 120,
- 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136, 136, 136, 1,
- 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3, 8, 8, 6,
- 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7, 6, 0, 0,
- 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0, 192, 64, 64,
- 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168, 168, 168, 5,
- 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5, 6, 0, 0,
- 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136, 136, 240, 128,
- 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8, 5, 5, 5,
- 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0, 0, 112, 128,
- 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224, 64, 64, 72, 48,
- 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5, 5, 6, 0,
- 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136, 136, 168, 168,
- 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5, 6, 6, 6,
- 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0, 0, 248, 16,
- 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128, 64, 64, 32,
- 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128, 3, 7, 7,
- 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 6, 6, 6, 0, 1,
- 8, 40, 72, 248, 64, 32, 5, 7, 7, 6, 0, 0, 32, 80, 136, 136,
- 136, 136, 248, 5, 7, 7, 6, 0, 0, 248, 136, 128, 240, 136, 136, 240,
- 5, 8, 8, 6, 0, 255, 120, 40, 40, 40, 72, 136, 248, 136, 5, 7,
- 7, 6, 0, 0, 168, 168, 168, 112, 168, 168, 168, 5, 7, 7, 6, 0,
- 0, 240, 8, 8, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 136, 136,
- 152, 168, 200, 136, 136, 5, 8, 8, 6, 0, 0, 80, 32, 136, 152, 168,
- 168, 200, 136, 5, 7, 7, 6, 0, 0, 120, 40, 40, 40, 40, 168, 72,
- 5, 7, 7, 6, 0, 0, 248, 136, 136, 136, 136, 136, 136, 5, 7, 7,
- 6, 0, 0, 136, 136, 136, 80, 32, 64, 128, 5, 8, 8, 6, 0, 255,
- 136, 136, 136, 136, 136, 136, 248, 8, 5, 7, 7, 6, 0, 0, 136, 136,
- 136, 120, 8, 8, 8, 5, 7, 7, 6, 0, 0, 168, 168, 168, 168, 168,
- 168, 248, 5, 8, 8, 6, 0, 255, 168, 168, 168, 168, 168, 168, 248, 8,
- 5, 7, 7, 6, 0, 0, 192, 64, 64, 112, 72, 72, 112, 5, 7, 7,
- 6, 0, 0, 136, 136, 136, 200, 168, 168, 200, 5, 7, 7, 6, 0, 0,
- 112, 136, 40, 80, 8, 136, 112, 5, 5, 5, 6, 0, 0, 64, 160, 144,
- 144, 104, 5, 7, 7, 6, 0, 0, 32, 48, 40, 40, 32, 224, 224, 5,
- 7, 7, 6, 0, 0, 248, 136, 128, 128, 128, 128, 128, 5, 5, 5, 6,
- 0, 0, 248, 80, 80, 80, 152, 5, 7, 7, 6, 0, 0, 248, 128, 64,
- 32, 64, 128, 248, 5, 5, 5, 6, 0, 0, 120, 144, 144, 144, 96, 5,
- 7, 7, 6, 0, 0, 48, 40, 56, 40, 200, 216, 24, 5, 6, 6, 6,
- 0, 0, 8, 112, 160, 32, 32, 16, 5, 6, 6, 6, 0, 1, 32, 112,
- 112, 112, 248, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136,
- 112, 5, 5, 5, 6, 0, 0, 112, 136, 136, 80, 216, 5, 7, 7, 6,
- 0, 0, 48, 72, 32, 80, 136, 136, 112, 5, 3, 3, 6, 0, 2, 88,
- 168, 208, 5, 6, 6, 6, 0, 0, 80, 248, 248, 248, 112, 32, 5, 5,
- 5, 6, 0, 0, 112, 128, 96, 136, 112, 5, 7, 7, 6, 0, 0, 112,
- 136, 136, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 216, 216, 216, 216,
- 216, 216, 216, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128,
- 5, 7, 7, 6, 0, 0, 32, 112, 160, 160, 168, 112, 32, 5, 7, 7,
- 6, 0, 0, 48, 64, 64, 224, 64, 80, 168, 5, 5, 5, 6, 0, 0,
- 136, 112, 80, 112, 136, 5, 7, 7, 6, 0, 0, 136, 80, 248, 32, 248,
- 32, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 0, 128, 128, 128, 5,
- 8, 8, 6, 0, 0, 48, 72, 32, 80, 80, 32, 144, 96, 5, 7, 7,
- 6, 0, 0, 24, 32, 32, 112, 32, 32, 192, 5, 7, 7, 6, 0, 0,
- 248, 136, 184, 184, 184, 136, 248, 5, 7, 7, 6, 0, 0, 112, 8, 120,
- 136, 120, 0, 248, 5, 5, 5, 6, 0, 1, 40, 80, 160, 80, 40, 5,
- 7, 7, 6, 0, 0, 144, 168, 168, 232, 168, 168, 144, 5, 7, 7, 6,
- 0, 0, 120, 136, 136, 120, 40, 72, 136, 5, 7, 7, 6, 0, 0, 248,
- 136, 168, 136, 152, 168, 248, 2, 3, 3, 6, 2, 4, 64, 128, 192, 4,
- 5, 5, 6, 0, 3, 96, 144, 144, 144, 96, 5, 7, 7, 6, 0, 0,
- 32, 32, 248, 32, 32, 0, 248, 4, 5, 5, 6, 0, 3, 96, 144, 32,
- 64, 240, 3, 5, 5, 6, 0, 3, 224, 32, 224, 32, 224, 5, 8, 8,
- 6, 0, 0, 224, 144, 224, 128, 144, 184, 144, 24, 5, 8, 8, 6, 0,
- 255, 136, 136, 136, 136, 152, 232, 128, 128, 5, 7, 7, 6, 0, 0, 120,
- 152, 152, 120, 24, 24, 24, 2, 2, 2, 6, 2, 2, 192, 192, 5, 5,
- 5, 6, 0, 0, 80, 136, 168, 168, 80, 3, 5, 5, 6, 0, 3, 64,
- 192, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 112, 0,
- 248, 5, 5, 5, 6, 0, 1, 160, 80, 40, 80, 160, 5, 7, 7, 6,
- 0, 0, 136, 144, 168, 88, 184, 8, 8, 5, 7, 7, 6, 0, 0, 136,
- 144, 184, 72, 152, 32, 56, 5, 8, 8, 6, 0, 0, 192, 64, 192, 72,
- 216, 56, 8, 8, 5, 7, 7, 6, 0, 0, 32, 0, 32, 64, 128, 136,
- 112, 5, 8, 8, 6, 0, 0, 64, 32, 32, 80, 136, 248, 136, 136, 5,
- 8, 8, 6, 0, 0, 16, 32, 32, 80, 136, 248, 136, 136, 5, 8, 8,
- 6, 0, 0, 32, 80, 0, 112, 136, 248, 136, 136, 5, 8, 8, 6, 0,
- 0, 104, 144, 0, 112, 136, 248, 136, 136, 5, 8, 8, 6, 0, 0, 80,
- 0, 32, 80, 136, 248, 136, 136, 5, 8, 8, 6, 0, 0, 32, 80, 32,
- 112, 136, 248, 136, 136, 5, 7, 7, 6, 0, 0, 56, 96, 160, 184, 224,
- 160, 184, 5, 8, 8, 6, 0, 255, 112, 136, 128, 128, 136, 112, 32, 96,
- 5, 8, 8, 6, 0, 0, 64, 32, 0, 248, 128, 240, 128, 248, 5, 8,
- 8, 6, 0, 0, 8, 16, 0, 248, 128, 240, 128, 248, 5, 8, 8, 6,
- 0, 0, 32, 80, 0, 248, 128, 240, 128, 248, 5, 7, 7, 6, 0, 0,
- 80, 0, 248, 128, 240, 128, 248, 3, 8, 8, 6, 1, 0, 128, 64, 0,
- 224, 64, 64, 64, 224, 3, 8, 8, 6, 1, 0, 32, 64, 0, 224, 64,
- 64, 64, 224, 3, 8, 8, 6, 1, 0, 64, 160, 0, 224, 64, 64, 64,
- 224, 3, 7, 7, 6, 1, 0, 160, 0, 224, 64, 64, 64, 224, 5, 7,
- 7, 6, 0, 0, 112, 72, 72, 232, 72, 72, 112, 5, 8, 8, 6, 0,
- 0, 104, 144, 0, 136, 200, 168, 152, 136, 5, 8, 8, 6, 0, 0, 64,
- 32, 112, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 16, 32, 112,
- 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80, 0, 112, 136,
- 136, 136, 112, 5, 8, 8, 6, 0, 0, 104, 144, 0, 112, 136, 136, 136,
- 112, 5, 8, 8, 6, 0, 0, 80, 0, 112, 136, 136, 136, 136, 112, 5,
- 5, 5, 6, 0, 1, 136, 80, 32, 80, 136, 5, 7, 7, 6, 0, 0,
- 112, 32, 112, 168, 112, 32, 112, 5, 8, 8, 6, 0, 0, 64, 32, 136,
- 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 16, 32, 136, 136, 136,
- 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80, 0, 136, 136, 136, 136,
- 112, 5, 8, 8, 6, 0, 0, 80, 0, 136, 136, 136, 136, 136, 112, 5,
- 8, 8, 6, 0, 0, 16, 32, 136, 80, 32, 32, 32, 32, 5, 8, 8,
- 6, 0, 0, 192, 64, 112, 72, 72, 112, 64, 224, 5, 7, 7, 6, 0,
- 0, 48, 72, 72, 112, 72, 72, 176, 5, 8, 8, 6, 0, 0, 64, 32,
- 0, 112, 8, 120, 136, 120, 5, 8, 8, 6, 0, 0, 16, 32, 0, 112,
- 8, 120, 136, 120, 5, 8, 8, 6, 0, 0, 32, 80, 0, 112, 8, 120,
- 136, 120, 5, 8, 8, 6, 0, 0, 104, 144, 0, 112, 8, 120, 136, 120,
- 5, 7, 7, 6, 0, 0, 80, 0, 112, 8, 120, 136, 120, 5, 8, 8,
- 6, 0, 0, 32, 80, 32, 112, 8, 120, 136, 120, 5, 6, 6, 6, 0,
- 0, 208, 40, 120, 160, 168, 80, 5, 6, 6, 6, 0, 255, 112, 128, 136,
- 112, 32, 96, 5, 8, 8, 6, 0, 0, 64, 32, 0, 112, 136, 248, 128,
- 112, 5, 8, 8, 6, 0, 0, 16, 32, 0, 112, 136, 248, 128, 112, 5,
- 8, 8, 6, 0, 0, 32, 80, 0, 112, 136, 248, 128, 112, 5, 7, 7,
- 6, 0, 0, 80, 0, 112, 136, 248, 128, 112, 3, 8, 8, 6, 1, 0,
- 128, 64, 0, 64, 192, 64, 64, 224, 3, 8, 8, 6, 1, 0, 32, 64,
- 0, 64, 192, 64, 64, 224, 3, 8, 8, 6, 1, 0, 64, 160, 0, 64,
- 192, 64, 64, 224, 3, 7, 7, 6, 1, 0, 160, 0, 64, 192, 64, 64,
- 224, 5, 7, 7, 6, 0, 0, 160, 64, 160, 16, 120, 136, 112, 5, 8,
- 8, 6, 0, 0, 104, 144, 0, 176, 200, 136, 136, 136, 5, 8, 8, 6,
- 0, 0, 64, 32, 0, 112, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0,
- 16, 32, 0, 112, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80,
- 0, 112, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 104, 144, 0, 112,
- 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 80, 0, 112, 136, 136, 136,
- 112, 5, 5, 5, 6, 0, 1, 32, 0, 248, 0, 32, 5, 7, 7, 6,
- 0, 0, 16, 32, 112, 168, 112, 32, 64, 5, 8, 8, 6, 0, 0, 64,
- 32, 0, 136, 136, 136, 152, 104, 5, 8, 8, 6, 0, 0, 16, 32, 0,
- 136, 136, 136, 152, 104, 5, 8, 8, 6, 0, 0, 32, 80, 0, 136, 136,
- 136, 152, 104, 5, 7, 7, 6, 0, 0, 80, 0, 136, 136, 136, 152, 104,
- 5, 9, 9, 6, 0, 255, 16, 32, 0, 136, 136, 136, 248, 8, 112, 4,
- 7, 7, 6, 1, 0, 192, 64, 96, 80, 96, 64, 224, 5, 8, 8, 6,
- 0, 255, 80, 0, 136, 136, 136, 248, 8, 112
-};
diff --git a/Marlin/dogm_font_data_ISO10646_1.h b/Marlin/dogm_font_data_ISO10646_1.h
deleted file mode 100644
index 5e12ea86ff..0000000000
--- a/Marlin/dogm_font_data_ISO10646_1.h
+++ /dev/null
@@ -1,286 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- Fontname: ISO10646-1
- Copyright: A.Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h= 9 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 9
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-
-#if defined(__AVR__) && ENABLED(NOT_EXTENDED_ISO10646_1_5X7)
-
- //
- // Reduced font (only symbols 32 - 127) - About 1400 bytes smaller
- //
- const u8g_fntpgm_uint8_t ISO10646_1_5x7[] U8G_SECTION(".progmem.ISO10646_1_5x7") = {
- 0,6,9,0,254,7,1,146,3,33,32,127,255,7,255,7,
- 255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128,
- 128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
- 0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
- 120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
- 64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
- 2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
- 64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
- 32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
- 5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
- 64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
- 192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
- 0,0,112,136,136,136,136,136,112,3,7,7,6,1,0,64,
- 192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
- 128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
- 5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
- 6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
- 112,128,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
- 32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
- 112,5,7,7,6,0,0,112,136,136,120,8,8,112,2,5,
- 5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
- 192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
- 32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1,
- 0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
- 8,16,32,0,32,5,7,7,6,0,0,112,136,8,104,168,
- 168,112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,
- 7,7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,
- 0,0,112,136,128,128,128,136,112,5,7,7,6,0,0,240,
- 136,136,136,136,136,240,5,7,7,6,0,0,248,128,128,240,
- 128,128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,
- 5,7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,
- 6,0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,
- 128,128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,
- 16,16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,
- 136,5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,
- 7,6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,
- 0,136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,
- 136,136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,
- 128,128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,
- 7,7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,
- 0,0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,
- 32,32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,
- 136,136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,
- 5,7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,
- 6,0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,
- 136,136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,
- 32,64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,
- 224,5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,
- 1,0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,
- 80,136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,
- 64,5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,
- 0,0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,
- 128,128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,
- 120,5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,
- 0,0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,
- 136,136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,
- 136,136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,
- 8,8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,
- 6,0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,
- 192,64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,
- 168,168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,
- 6,0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,
- 136,240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,
- 5,5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,
- 0,112,128,112,8,240,4,7,7,6,0,0,64,64,224,64,
- 64,64,48,5,5,5,6,0,0,136,136,136,152,104,5,5,
- 5,6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,
- 136,168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,
- 6,6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,
- 0,248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,
- 64,64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,
- 3,7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,
- 6,0,2,104,144,0,0,0,6,0,0};
-
-#else
-
- //
- // Extended (original) font (symbols 32 - 255)
- //
- const u8g_fntpgm_uint8_t ISO10646_1_5x7[] U8G_SECTION(".progmem.ISO10646_1_5x7") = {
- 0, 6, 9, 0, 254, 7, 1, 146, 3, 33, 32, 255, 255, 8, 255, 7,
- 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
- 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
- 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
- 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
- 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
- 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
- 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
- 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
- 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
- 0, 0, 112, 136, 136, 136, 136, 136, 112, 3, 7, 7, 6, 1, 0, 64,
- 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
- 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
- 112, 128, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 8, 112, 2, 5,
- 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
- 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
- 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
- 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
- 8, 16, 32, 0, 32, 5, 7, 7, 6, 0, 0, 112, 136, 8, 104, 168,
- 168, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5,
- 7, 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6,
- 0, 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 240,
- 136, 136, 136, 136, 136, 240, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128,
- 5, 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7,
- 6, 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0,
- 128, 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16,
- 16, 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144,
- 136, 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7,
- 7, 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0,
- 0, 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136,
- 136, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128,
- 128, 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5,
- 7, 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6,
- 0, 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248,
- 32, 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136,
- 136, 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32,
- 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7,
- 6, 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0,
- 136, 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128,
- 224, 5, 5, 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6,
- 1, 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32,
- 80, 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128,
- 64, 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6,
- 0, 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112,
- 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136,
- 120, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6,
- 0, 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112,
- 136, 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136,
- 136, 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3,
- 8, 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7,
- 6, 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0,
- 192, 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168,
- 168, 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5,
- 6, 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136,
- 136, 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8,
- 5, 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0,
- 0, 112, 128, 112, 8, 240, 4, 7, 7, 6, 0, 0, 64, 64, 224, 64,
- 64, 64, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5,
- 5, 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136,
- 136, 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5,
- 6, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0,
- 0, 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128,
- 64, 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128,
- 3, 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 2, 2,
- 6, 0, 2, 104, 144, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 5, 7,
- 7, 6, 0, 0, 32, 112, 168, 160, 168, 112, 32, 5, 7, 7, 6, 0,
- 0, 48, 64, 64, 224, 64, 80, 168, 5, 5, 5, 6, 0, 0, 136, 112,
- 80, 112, 136, 5, 7, 7, 6, 0, 0, 136, 80, 32, 248, 32, 248, 32,
- 1, 7, 7, 6, 2, 0, 128, 128, 128, 0, 128, 128, 128, 5, 8, 8,
- 6, 0, 0, 48, 72, 32, 80, 80, 32, 144, 96, 3, 1, 1, 6, 1,
- 7, 160, 5, 7, 7, 6, 0, 0, 248, 136, 184, 184, 184, 136, 248, 5,
- 7, 7, 6, 0, 1, 112, 8, 120, 136, 120, 0, 248, 5, 5, 5, 6,
- 0, 1, 40, 80, 160, 80, 40, 5, 3, 3, 6, 0, 1, 248, 8, 8,
- 2, 2, 2, 6, 2, 6, 64, 128, 5, 7, 7, 6, 0, 0, 248, 136,
- 168, 136, 152, 168, 248, 5, 1, 1, 6, 0, 6, 248, 4, 4, 4, 6,
- 0, 3, 96, 144, 144, 96, 5, 7, 7, 6, 0, 0, 32, 32, 248, 32,
- 32, 0, 248, 4, 5, 5, 6, 0, 3, 96, 144, 32, 64, 240, 3, 5,
- 5, 6, 0, 3, 224, 32, 224, 32, 224, 2, 2, 2, 6, 2, 6, 64,
- 128, 5, 8, 8, 6, 0, 255, 136, 136, 136, 136, 152, 232, 128, 128, 5,
- 7, 7, 6, 0, 0, 120, 152, 152, 120, 24, 24, 24, 2, 2, 2, 6,
- 2, 2, 192, 192, 2, 2, 2, 6, 2, 255, 64, 128, 3, 5, 5, 6,
- 0, 3, 64, 192, 64, 64, 224, 5, 7, 7, 6, 0, 1, 112, 136, 136,
- 136, 112, 0, 248, 5, 5, 5, 6, 0, 1, 160, 80, 40, 80, 160, 5,
- 7, 7, 6, 0, 0, 136, 144, 168, 88, 184, 8, 8, 5, 7, 7, 6,
- 0, 0, 136, 144, 184, 72, 152, 32, 56, 5, 8, 8, 6, 0, 0, 192,
- 64, 192, 72, 216, 56, 8, 8, 5, 7, 7, 6, 0, 0, 32, 0, 32,
- 64, 128, 136, 112, 5, 8, 8, 6, 0, 0, 64, 32, 0, 112, 136, 248,
- 136, 136, 5, 8, 8, 6, 0, 0, 16, 32, 0, 112, 136, 248, 136, 136,
- 5, 8, 8, 6, 0, 0, 32, 80, 0, 112, 136, 248, 136, 136, 5, 8,
- 8, 6, 0, 0, 104, 144, 0, 112, 136, 248, 136, 136, 5, 8, 8, 6,
- 0, 0, 80, 0, 112, 136, 136, 248, 136, 136, 5, 8, 8, 6, 0, 0,
- 32, 80, 32, 112, 136, 248, 136, 136, 5, 7, 7, 6, 0, 0, 56, 96,
- 160, 184, 224, 160, 184, 5, 8, 8, 6, 0, 255, 112, 136, 128, 128, 136,
- 112, 32, 96, 5, 8, 8, 6, 0, 0, 64, 32, 0, 248, 128, 240, 128,
- 248, 5, 8, 8, 6, 0, 0, 8, 16, 0, 248, 128, 240, 128, 248, 5,
- 8, 8, 6, 0, 0, 32, 80, 0, 248, 128, 240, 128, 248, 5, 7, 7,
- 6, 0, 0, 80, 0, 248, 128, 240, 128, 248, 3, 8, 8, 6, 1, 0,
- 128, 64, 0, 224, 64, 64, 64, 224, 3, 8, 8, 6, 1, 0, 32, 64,
- 0, 224, 64, 64, 64, 224, 3, 8, 8, 6, 1, 0, 64, 160, 0, 224,
- 64, 64, 64, 224, 3, 7, 7, 6, 1, 0, 160, 0, 224, 64, 64, 64,
- 224, 5, 7, 7, 6, 0, 0, 112, 72, 72, 232, 72, 72, 112, 5, 8,
- 8, 6, 0, 0, 104, 144, 0, 136, 200, 168, 152, 136, 5, 8, 8, 6,
- 0, 0, 64, 32, 112, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0,
- 16, 32, 112, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80,
- 0, 112, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 104, 144, 0, 112,
- 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 80, 0, 112, 136, 136, 136,
- 136, 112, 5, 5, 5, 6, 0, 1, 136, 80, 32, 80, 136, 5, 8, 8,
- 6, 0, 255, 16, 112, 168, 168, 168, 168, 112, 64, 5, 8, 8, 6, 0,
- 0, 64, 32, 136, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 16,
- 32, 136, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80, 0,
- 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 80, 0, 136, 136, 136,
- 136, 136, 112, 5, 8, 8, 6, 0, 0, 16, 32, 136, 80, 32, 32, 32,
- 32, 5, 9, 9, 6, 0, 255, 192, 64, 112, 72, 72, 112, 64, 64, 224,
- 4, 8, 8, 6, 1, 255, 96, 144, 144, 160, 144, 144, 224, 128, 5, 8,
- 8, 6, 0, 0, 64, 32, 0, 112, 8, 120, 136, 120, 5, 8, 8, 6,
- 0, 0, 16, 32, 0, 112, 8, 120, 136, 120, 5, 8, 8, 6, 0, 0,
- 32, 80, 0, 112, 8, 120, 136, 120, 5, 8, 8, 6, 0, 0, 104, 144,
- 0, 112, 8, 120, 136, 120, 5, 7, 7, 6, 0, 0, 80, 0, 112, 8,
- 120, 136, 120, 5, 8, 8, 6, 0, 0, 32, 80, 32, 112, 8, 120, 136,
- 120, 5, 6, 6, 6, 0, 0, 208, 40, 120, 160, 168, 80, 5, 6, 6,
- 6, 0, 255, 112, 128, 136, 112, 32, 96, 5, 8, 8, 6, 0, 0, 64,
- 32, 0, 112, 136, 248, 128, 112, 5, 8, 8, 6, 0, 0, 16, 32, 0,
- 112, 136, 248, 128, 112, 5, 8, 8, 6, 0, 0, 32, 80, 0, 112, 136,
- 248, 128, 112, 5, 7, 7, 6, 0, 0, 80, 0, 112, 136, 248, 128, 112,
- 3, 8, 8, 6, 1, 0, 128, 64, 0, 64, 192, 64, 64, 224, 3, 8,
- 8, 6, 1, 0, 32, 64, 0, 64, 192, 64, 64, 224, 3, 8, 8, 6,
- 1, 0, 64, 160, 0, 64, 192, 64, 64, 224, 3, 7, 7, 6, 1, 0,
- 160, 0, 64, 192, 64, 64, 224, 5, 7, 7, 6, 0, 0, 160, 64, 160,
- 16, 120, 136, 112, 5, 8, 8, 6, 0, 0, 104, 144, 0, 176, 200, 136,
- 136, 136, 5, 8, 8, 6, 0, 0, 64, 32, 0, 112, 136, 136, 136, 112,
- 5, 8, 8, 6, 0, 0, 16, 32, 0, 112, 136, 136, 136, 112, 5, 8,
- 8, 6, 0, 0, 32, 80, 0, 112, 136, 136, 136, 112, 5, 8, 8, 6,
- 0, 0, 104, 144, 0, 112, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0,
- 80, 0, 112, 136, 136, 136, 112, 5, 5, 5, 6, 0, 1, 32, 0, 248,
- 0, 32, 5, 7, 7, 6, 0, 255, 16, 112, 168, 168, 168, 112, 64, 5,
- 8, 8, 6, 0, 0, 64, 32, 0, 136, 136, 136, 152, 104, 5, 8, 8,
- 6, 0, 0, 16, 32, 0, 136, 136, 136, 152, 104, 5, 8, 8, 6, 0,
- 0, 32, 80, 0, 136, 136, 136, 152, 104, 5, 7, 7, 6, 0, 0, 80,
- 0, 136, 136, 136, 152, 104, 5, 9, 9, 6, 0, 255, 16, 32, 0, 136,
- 136, 136, 248, 8, 112, 4, 7, 7, 6, 1, 255, 192, 64, 96, 80, 96,
- 64, 224, 5, 8, 8, 6, 0, 255, 80, 0, 136, 136, 136, 120, 8, 112
- };
-
-#endif
diff --git a/Marlin/dogm_font_data_ISO10646_1_PL.h b/Marlin/dogm_font_data_ISO10646_1_PL.h
deleted file mode 100644
index 47b0bbb065..0000000000
--- a/Marlin/dogm_font_data_ISO10646_1_PL.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- Fontname: ISO10646-1-PL
- Copyright: A.Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h= 9 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 9
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-2 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-2
-*/
-#include
-const u8g_fntpgm_uint8_t ISO10646_1_PL_5x7[2732] U8G_FONT_SECTION(".progmem.ISO10646_1_PL_5x7") = {
- 0,6,9,0,254,7,1,146,3,33,32,255,255,8,254,7,
- 255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128,
- 128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
- 0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
- 120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
- 64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
- 2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
- 64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
- 32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
- 5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
- 64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
- 192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
- 0,0,112,136,136,136,136,136,112,3,7,7,6,1,0,64,
- 192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
- 128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
- 5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
- 6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
- 112,128,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
- 32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
- 112,5,7,7,6,0,0,112,136,136,120,8,8,112,2,5,
- 5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
- 192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
- 32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1,
- 0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
- 8,16,32,0,32,5,7,7,6,0,0,112,136,8,104,168,
- 168,112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,
- 7,7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,
- 0,0,112,136,128,128,128,136,112,5,7,7,6,0,0,240,
- 136,136,136,136,136,240,5,7,7,6,0,0,248,128,128,240,
- 128,128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,
- 5,7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,
- 6,0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,
- 128,128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,
- 16,16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,
- 136,5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,
- 7,6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,
- 0,136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,
- 136,136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,
- 128,128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,
- 7,7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,
- 0,0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,
- 32,32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,
- 136,136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,
- 5,7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,
- 6,0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,
- 136,136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,
- 32,64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,
- 224,5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,
- 1,0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,
- 80,136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,
- 64,5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,
- 0,0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,
- 128,128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,
- 120,5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,
- 0,0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,
- 136,136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,
- 136,136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,
- 8,8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,
- 6,0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,
- 192,64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,
- 168,168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,
- 6,0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,
- 136,240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,
- 5,5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,
- 0,112,128,112,8,240,4,7,7,6,0,0,64,64,224,64,
- 64,64,48,5,5,5,6,0,0,136,136,136,152,104,5,5,
- 5,6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,
- 136,168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,
- 6,6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,
- 0,248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,
- 64,64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,
- 3,7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,
- 6,0,2,104,144,0,0,0,6,0,0,5,9,9,6,0,
- 254,112,136,136,248,136,136,136,16,32,5,7,7,6,0,254,
- 112,8,120,136,120,16,32,5,8,8,6,0,0,16,32,112,
- 136,128,128,136,112,5,7,7,6,0,0,16,32,112,128,128,
- 136,112,5,9,9,6,0,254,248,128,128,240,128,128,248,8,
- 16,5,7,7,6,0,254,112,136,248,128,112,16,32,5,7,
- 7,6,0,0,128,144,160,192,128,128,248,5,7,7,6,0,
- 0,96,40,48,96,160,32,112,5,8,8,6,0,0,16,168,
- 136,200,168,152,136,136,5,8,8,6,0,0,8,16,0,176,
- 200,136,136,136,5,8,8,6,0,0,16,32,112,136,136,136,
- 136,112,5,8,8,6,0,0,16,32,0,112,136,136,136,112,
- 5,8,8,6,0,0,16,120,128,128,112,8,8,240,5,8,
- 8,6,0,0,16,32,0,112,128,112,8,240,5,8,8,6,
- 0,0,32,248,8,16,32,64,128,248,5,8,8,6,0,0,
- 16,32,0,248,16,32,64,248,5,7,7,6,0,0,248,8,
- 16,248,64,128,248,5,8,8,6,0,0,48,48,0,248,16,
- 32,64,248,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,1,7,7,
- 6,2,0,128,0,128,128,128,128,128,5,7,7,6,0,0,
- 32,112,168,160,168,112,32,5,7,7,6,0,0,48,64,64,
- 224,64,80,168,5,5,5,6,0,0,136,112,80,112,136,5,
- 7,7,6,0,0,136,80,32,248,32,248,32,1,7,7,6,
- 2,0,128,128,128,0,128,128,128,5,8,8,6,0,0,48,
- 72,32,80,80,32,144,96,3,1,1,6,1,7,160,5,7,
- 7,6,0,0,248,136,184,184,184,136,248,5,7,7,6,0,
- 1,112,8,120,136,120,0,248,5,5,5,6,0,1,40,80,
- 160,80,40,5,3,3,6,0,1,248,8,8,2,2,2,6,
- 2,6,64,128,5,7,7,6,0,0,248,136,168,136,152,168,
- 248,5,1,1,6,0,6,248,4,4,4,6,0,3,96,144,
- 144,96,5,7,7,6,0,0,32,32,248,32,32,0,248,4,
- 5,5,6,0,3,96,144,32,64,240,3,5,5,6,0,3,
- 224,32,224,32,224,2,2,2,6,2,6,64,128,5,8,8,
- 6,0,255,136,136,136,136,152,232,128,128,5,7,7,6,0,
- 0,120,152,152,120,24,24,24,2,2,2,6,2,2,192,192,
- 2,2,2,6,2,255,64,128,3,5,5,6,0,3,64,192,
- 64,64,224,5,7,7,6,0,1,112,136,136,136,112,0,248,
- 5,5,5,6,0,1,160,80,40,80,160,5,7,7,6,0,
- 0,136,144,168,88,184,8,8,5,7,7,6,0,0,136,144,
- 184,72,152,32,56,5,8,8,6,0,0,192,64,192,72,216,
- 56,8,8,5,7,7,6,0,0,32,0,32,64,128,136,112,
- 5,8,8,6,0,0,64,32,0,112,136,248,136,136,5,8,
- 8,6,0,0,16,32,0,112,136,248,136,136,5,8,8,6,
- 0,0,32,80,0,112,136,248,136,136,5,8,8,6,0,0,
- 104,144,0,112,136,248,136,136,5,8,8,6,0,0,80,0,
- 112,136,136,248,136,136,5,8,8,6,0,0,32,80,32,112,
- 136,248,136,136,5,7,7,6,0,0,56,96,160,184,224,160,
- 184,5,8,8,6,0,255,112,136,128,128,136,112,32,96,5,
- 8,8,6,0,0,64,32,0,248,128,240,128,248,5,8,8,
- 6,0,0,8,16,0,248,128,240,128,248,5,8,8,6,0,
- 0,32,80,0,248,128,240,128,248,5,7,7,6,0,0,80,
- 0,248,128,240,128,248,3,8,8,6,1,0,128,64,0,224,
- 64,64,64,224,3,8,8,6,1,0,32,64,0,224,64,64,
- 64,224,3,8,8,6,1,0,64,160,0,224,64,64,64,224,
- 3,7,7,6,1,0,160,0,224,64,64,64,224,5,7,7,
- 6,0,0,112,72,72,232,72,72,112,5,8,8,6,0,0,
- 104,144,0,136,200,168,152,136,5,8,8,6,0,0,64,32,
- 112,136,136,136,136,112,5,8,8,6,0,0,16,32,112,136,
- 136,136,136,112,5,8,8,6,0,0,32,80,0,112,136,136,
- 136,112,5,8,8,6,0,0,104,144,0,112,136,136,136,112,
- 5,8,8,6,0,0,80,0,112,136,136,136,136,112,5,5,
- 5,6,0,1,136,80,32,80,136,5,8,8,6,0,255,16,
- 112,168,168,168,168,112,64,5,8,8,6,0,0,64,32,136,
- 136,136,136,136,112,5,8,8,6,0,0,16,32,136,136,136,
- 136,136,112,5,8,8,6,0,0,32,80,0,136,136,136,136,
- 112,5,8,8,6,0,0,80,0,136,136,136,136,136,112,5,
- 8,8,6,0,0,16,32,136,80,32,32,32,32,5,9,9,
- 6,0,255,192,64,112,72,72,112,64,64,224,4,8,8,6,
- 1,255,96,144,144,160,144,144,224,128,5,8,8,6,0,0,
- 64,32,0,112,8,120,136,120,5,8,8,6,0,0,16,32,
- 0,112,8,120,136,120,5,8,8,6,0,0,32,80,0,112,
- 8,120,136,120,5,8,8,6,0,0,104,144,0,112,8,120,
- 136,120,5,7,7,6,0,0,80,0,112,8,120,136,120,5,
- 8,8,6,0,0,32,80,32,112,8,120,136,120,5,6,6,
- 6,0,0,208,40,120,160,168,80,5,6,6,6,0,255,112,
- 128,136,112,32,96,5,8,8,6,0,0,64,32,0,112,136,
- 248,128,112,5,8,8,6,0,0,16,32,0,112,136,248,128,
- 112,5,8,8,6,0,0,32,80,0,112,136,248,128,112,5,
- 7,7,6,0,0,80,0,112,136,248,128,112,3,8,8,6,
- 1,0,128,64,0,64,192,64,64,224,3,8,8,6,1,0,
- 32,64,0,64,192,64,64,224,3,8,8,6,1,0,64,160,
- 0,64,192,64,64,224,3,7,7,6,1,0,160,0,64,192,
- 64,64,224,5,7,7,6,0,0,160,64,160,16,120,136,112,
- 5,8,8,6,0,0,104,144,0,176,200,136,136,136,5,8,
- 8,6,0,0,64,32,0,112,136,136,136,112,5,8,8,6,
- 0,0,16,32,0,112,136,136,136,112,5,8,8,6,0,0,
- 32,80,0,112,136,136,136,112,5,8,8,6,0,0,104,144,
- 0,112,136,136,136,112,5,7,7,6,0,0,80,0,112,136,
- 136,136,112,5,5,5,6,0,1,32,0,248,0,32,5,7,
- 7,6,0,255,16,112,168,168,168,112,64,5,8,8,6,0,
- 0,64,32,0,136,136,136,152,104,5,8,8,6,0,0,16,
- 32,0,136,136,136,152,104,5,8,8,6,0,0,32,80,0,
- 136,136,136,152,104,5,7,7,6,0,0,80,0,136,136,136,
- 152,104,5,9,9,6,0,255,16,32,0,136,136,136,248,8,
- 112,4,7,7,6,1,255,192,64,96,80,96,64,224,5,8,
- 8,6,0,255,80,0,136,136,136,120,8,112};
diff --git a/Marlin/dogm_font_data_ISO10646_1_tr.h b/Marlin/dogm_font_data_ISO10646_1_tr.h
deleted file mode 100644
index e32f59f958..0000000000
--- a/Marlin/dogm_font_data_ISO10646_1_tr.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/*
- Fontname: ISO10646-1-tr
- Copyright: public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h= 9 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 9
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t ISO10646_TR[2591] U8G_SECTION(".progmem.ISO10646_TR") = {
- 0,6,9,0,254,7,1,146,3,33,32,255,255,8,255,7,
- 255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128,
- 128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
- 0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
- 120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
- 64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
- 2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
- 64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
- 32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
- 5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
- 64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
- 192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
- 0,0,112,136,136,136,136,136,112,3,7,7,6,1,0,64,
- 192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
- 128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
- 5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
- 6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
- 112,128,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
- 32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
- 112,5,7,7,6,0,0,112,136,136,120,8,8,112,2,5,
- 5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
- 192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
- 32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1,
- 0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
- 8,16,32,0,32,5,7,7,6,0,0,112,136,8,104,168,
- 168,112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,
- 7,7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,
- 0,0,112,136,128,128,128,136,112,5,7,7,6,0,0,240,
- 136,136,136,136,136,240,5,7,7,6,0,0,248,128,128,240,
- 128,128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,
- 5,7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,
- 6,0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,
- 128,128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,
- 16,16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,
- 136,5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,
- 7,6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,
- 0,136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,
- 136,136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,
- 128,128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,
- 7,7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,
- 0,0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,
- 32,32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,
- 136,136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,
- 5,7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,
- 6,0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,
- 136,136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,
- 32,64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,
- 224,5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,
- 1,0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,
- 80,136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,
- 64,5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,
- 0,0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,
- 128,128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,
- 120,5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,
- 0,0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,
- 136,136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,
- 136,136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,
- 8,8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,
- 6,0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,
- 192,64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,
- 168,168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,
- 6,0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,
- 136,240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,
- 5,5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,
- 0,112,128,112,8,240,4,7,7,6,0,0,64,64,224,64,
- 64,64,48,5,5,5,6,0,0,136,136,136,152,104,5,5,
- 5,6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,
- 136,168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,
- 6,6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,
- 0,248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,
- 64,64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,
- 3,7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,
- 6,0,2,104,144,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,1,7,7,6,2,0,128,0,128,128,128,128,128,5,7,
- 7,6,0,0,32,112,168,160,168,112,32,5,7,7,6,0,
- 0,48,64,64,224,64,80,168,5,5,5,6,0,0,136,112,
- 80,112,136,5,7,7,6,0,0,136,80,32,248,32,248,32,
- 1,7,7,6,2,0,128,128,128,0,128,128,128,5,8,8,
- 6,0,0,48,72,32,80,80,32,144,96,3,1,1,6,1,
- 7,160,5,7,7,6,0,0,248,136,184,184,184,136,248,5,
- 7,7,6,0,1,112,8,120,136,120,0,248,5,5,5,6,
- 0,1,40,80,160,80,40,5,3,3,6,0,1,248,8,8,
- 2,2,2,6,2,6,64,128,5,7,7,6,0,0,248,136,
- 168,136,152,168,248,5,1,1,6,0,6,248,4,4,4,6,
- 0,3,96,144,144,96,5,7,7,6,0,0,32,32,248,32,
- 32,0,248,4,5,5,6,0,3,96,144,32,64,240,3,5,
- 5,6,0,3,224,32,224,32,224,2,2,2,6,2,6,64,
- 128,5,8,8,6,0,255,136,136,136,136,152,232,128,128,5,
- 7,7,6,0,0,120,152,152,120,24,24,24,2,2,2,6,
- 2,2,192,192,2,2,2,6,2,255,64,128,3,5,5,6,
- 0,3,64,192,64,64,224,5,7,7,6,0,1,112,136,136,
- 136,112,0,248,5,5,5,6,0,1,160,80,40,80,160,5,
- 7,7,6,0,0,136,144,168,88,184,8,8,5,7,7,6,
- 0,0,136,144,184,72,152,32,56,5,8,8,6,0,0,192,
- 64,192,72,216,56,8,8,5,7,7,6,0,0,32,0,32,
- 64,128,136,112,5,8,8,6,0,0,64,32,0,112,136,248,
- 136,136,5,8,8,6,0,0,16,32,0,112,136,248,136,136,
- 5,8,8,6,0,0,32,80,0,112,136,248,136,136,5,8,
- 8,6,0,0,104,144,0,112,136,248,136,136,5,8,8,6,
- 0,0,80,0,112,136,136,248,136,136,5,8,8,6,0,0,
- 32,80,32,112,136,248,136,136,5,7,7,6,0,0,56,96,
- 160,184,224,160,184,5,8,8,6,0,255,112,136,128,128,136,
- 112,32,96,5,8,8,6,0,0,64,32,0,248,128,240,128,
- 248,5,8,8,6,0,0,8,16,0,248,128,240,128,248,5,
- 8,8,6,0,0,32,80,0,248,128,240,128,248,5,7,7,
- 6,0,0,80,0,248,128,240,128,248,3,8,8,6,1,0,
- 128,64,0,224,64,64,64,224,3,8,8,6,1,0,32,64,
- 0,224,64,64,64,224,3,8,8,6,1,0,64,160,0,224,
- 64,64,64,224,3,7,7,6,1,0,160,0,224,64,64,64,
- 224,5,9,9,6,0,255,80,32,112,136,128,184,136,136,112,
- 5,8,8,6,0,0,104,144,0,136,200,168,152,136,5,8,
- 8,6,0,0,64,32,112,136,136,136,136,112,5,8,8,6,
- 0,0,16,32,112,136,136,136,136,112,5,8,8,6,0,0,
- 32,80,0,112,136,136,136,112,5,8,8,6,0,0,104,144,
- 0,112,136,136,136,112,5,8,8,6,0,0,80,0,112,136,
- 136,136,136,112,5,5,5,6,0,1,136,80,32,80,136,5,
- 8,8,6,0,255,16,112,168,168,168,168,112,64,5,8,8,
- 6,0,0,64,32,136,136,136,136,136,112,5,8,8,6,0,
- 0,16,32,136,136,136,136,136,112,5,8,8,6,0,0,32,
- 80,0,136,136,136,136,112,5,8,8,6,0,0,80,0,136,
- 136,136,136,136,112,1,7,7,6,2,0,128,0,128,128,128,
- 128,128,5,9,9,6,0,255,120,128,128,112,8,8,240,32,
- 96,4,8,8,6,1,255,96,144,144,160,144,144,224,128,5,
- 8,8,6,0,0,64,32,0,112,8,120,136,120,5,8,8,
- 6,0,0,16,32,0,112,8,120,136,120,5,8,8,6,0,
- 0,32,80,0,112,8,120,136,120,5,8,8,6,0,0,104,
- 144,0,112,8,120,136,120,5,7,7,6,0,0,80,0,112,
- 8,120,136,120,5,8,8,6,0,0,32,80,32,112,8,120,
- 136,120,5,6,6,6,0,0,208,40,120,160,168,80,5,7,
- 7,6,0,255,112,128,128,136,112,32,96,5,8,8,6,0,
- 0,64,32,0,112,136,248,128,112,5,8,8,6,0,0,16,
- 32,0,112,136,248,128,112,5,8,8,6,0,0,32,80,0,
- 112,136,248,128,112,5,7,7,6,0,0,80,0,112,136,248,
- 128,112,3,8,8,6,1,0,128,64,0,64,192,64,64,224,
- 3,8,8,6,1,0,32,64,0,64,192,64,64,224,3,8,
- 8,6,1,0,64,160,0,64,192,64,64,224,3,7,7,6,
- 1,0,160,0,64,192,64,64,224,5,8,8,6,0,255,80,
- 32,112,136,136,120,8,112,5,8,8,6,0,0,104,144,0,
- 176,200,136,136,136,5,8,8,6,0,0,64,32,0,112,136,
- 136,136,112,5,8,8,6,0,0,16,32,0,112,136,136,136,
- 112,5,8,8,6,0,0,32,80,0,112,136,136,136,112,5,
- 8,8,6,0,0,104,144,0,112,136,136,136,112,5,7,7,
- 6,0,0,80,0,112,136,136,136,112,5,5,5,6,0,1,
- 32,0,248,0,32,5,7,7,6,0,255,16,112,168,168,168,
- 112,64,5,8,8,6,0,0,64,32,0,136,136,136,152,104,
- 5,8,8,6,0,0,16,32,0,136,136,136,152,104,5,8,
- 8,6,0,0,32,80,0,136,136,136,152,104,5,7,7,6,
- 0,0,80,0,136,136,136,152,104,1,5,5,6,2,0,128,
- 128,128,128,128,5,7,7,6,0,255,112,128,112,8,240,32,
- 96,5,8,8,6,0,255,80,0,136,136,136,120,8,112};
diff --git a/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h b/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h
deleted file mode 100644
index 75e779fd0f..0000000000
--- a/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- Fontname: ISO10646_5_Cyrillic
- Copyright: A. Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h= 9 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 9
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t ISO10646_5_Cyrillic_5x7[2560] U8G_SECTION(".progmem.ISO10646_5_Cyrillic_5x7") = {
- 0, 6, 9, 0, 254, 7, 1, 145, 3, 32, 32, 255, 255, 8, 255, 7,
- 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
- 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
- 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
- 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
- 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
- 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
- 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
- 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
- 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
- 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
- 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
- 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
- 48, 64, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5,
- 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
- 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
- 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
- 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
- 8, 16, 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0,
- 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144,
- 136, 136, 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
- 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5,
- 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6,
- 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128,
- 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
- 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136,
- 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7,
- 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0,
- 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136,
- 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128,
- 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0,
- 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32,
- 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136,
- 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5,
- 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6,
- 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136,
- 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32,
- 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224,
- 5, 5, 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6, 1,
- 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32, 80,
- 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128, 64,
- 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6, 0,
- 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112, 128,
- 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136, 120,
- 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6, 0,
- 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112, 136,
- 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136, 136,
- 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3, 8,
- 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7, 6,
- 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0, 192,
- 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168, 168,
- 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5, 6,
- 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136, 136,
- 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8, 5,
- 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0, 0,
- 112, 128, 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224, 64, 64,
- 72, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5, 5,
- 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136, 136,
- 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5, 6,
- 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0, 0,
- 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128, 64,
- 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128, 3,
- 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 2, 2, 6,
- 0, 3, 104, 144, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 5, 8, 8, 6, 0, 0,
- 64, 248, 128, 128, 240, 128, 128, 248, 5, 8, 8, 6, 0, 0, 80, 248,
- 128, 128, 240, 128, 128, 248, 5, 7, 7, 6, 0, 0, 224, 64, 64, 112,
- 72, 72, 112, 5, 8, 8, 6, 0, 0, 16, 32, 248, 136, 128, 128, 128,
- 128, 5, 7, 7, 6, 0, 0, 48, 72, 128, 224, 128, 72, 48, 5, 7,
- 7, 6, 0, 0, 112, 136, 128, 112, 8, 136, 112, 3, 7, 7, 6, 1,
- 0, 224, 64, 64, 64, 64, 64, 224, 3, 8, 8, 6, 1, 0, 160, 0,
- 224, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
- 16, 144, 96, 5, 7, 7, 6, 0, 0, 160, 160, 160, 184, 168, 168, 184,
- 5, 7, 7, 6, 0, 0, 160, 160, 160, 248, 168, 168, 184, 4, 7, 7,
- 6, 0, 0, 224, 64, 112, 80, 80, 80, 80, 5, 8, 8, 6, 0, 0,
- 16, 32, 136, 144, 160, 224, 144, 136, 5, 8, 8, 6, 0, 0, 64, 32,
- 136, 152, 168, 200, 136, 136, 5, 9, 9, 6, 0, 255, 80, 32, 136, 136,
- 136, 80, 32, 32, 32, 5, 8, 8, 6, 0, 255, 136, 136, 136, 136, 136,
- 136, 248, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136,
- 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 136, 136, 240, 5, 7, 7,
- 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0, 0,
- 248, 136, 128, 128, 128, 128, 128, 5, 8, 8, 6, 0, 255, 120, 40, 40,
- 40, 72, 136, 248, 136, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
- 128, 248, 5, 7, 7, 6, 0, 0, 168, 168, 168, 112, 168, 168, 168, 5,
- 7, 7, 6, 0, 0, 240, 8, 8, 112, 8, 8, 240, 5, 7, 7, 6,
- 0, 0, 136, 136, 152, 168, 200, 136, 136, 5, 8, 8, 6, 0, 0, 80,
- 32, 136, 152, 168, 168, 200, 136, 5, 7, 7, 6, 0, 0, 136, 144, 160,
- 192, 160, 144, 136, 5, 7, 7, 6, 0, 0, 120, 40, 40, 40, 40, 168,
- 72, 5, 7, 7, 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7,
- 7, 6, 0, 0, 136, 136, 136, 248, 136, 136, 136, 5, 7, 7, 6, 0,
- 0, 112, 136, 136, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 136,
- 136, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128,
- 128, 128, 5, 7, 7, 6, 0, 0, 112, 136, 128, 128, 128, 136, 112, 5,
- 7, 7, 6, 0, 0, 248, 32, 32, 32, 32, 32, 32, 5, 7, 7, 6,
- 0, 0, 136, 136, 136, 80, 32, 64, 128, 5, 7, 7, 6, 0, 0, 32,
- 112, 168, 168, 168, 112, 32, 5, 7, 7, 6, 0, 0, 136, 136, 80, 32,
- 80, 136, 136, 5, 8, 8, 6, 0, 255, 136, 136, 136, 136, 136, 136, 248,
- 8, 5, 7, 7, 6, 0, 0, 136, 136, 136, 152, 104, 8, 8, 5, 7,
- 7, 6, 0, 0, 168, 168, 168, 168, 168, 168, 248, 5, 8, 8, 6, 0,
- 255, 168, 168, 168, 168, 168, 168, 248, 8, 5, 7, 7, 6, 0, 0, 192,
- 64, 64, 112, 72, 72, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 200,
- 168, 168, 200, 5, 7, 7, 6, 0, 0, 128, 128, 128, 240, 136, 136, 240,
- 5, 7, 7, 6, 0, 0, 112, 136, 8, 56, 8, 136, 112, 5, 7, 7,
- 6, 0, 0, 144, 168, 168, 232, 168, 168, 144, 5, 7, 7, 6, 0, 0,
- 120, 136, 136, 120, 40, 72, 136, 5, 5, 5, 6, 0, 0, 112, 8, 120,
- 136, 120, 5, 7, 7, 6, 0, 0, 24, 96, 128, 240, 136, 136, 112, 4,
- 5, 5, 6, 0, 0, 224, 144, 224, 144, 224, 5, 5, 5, 6, 0, 0,
- 248, 136, 128, 128, 128, 5, 6, 6, 6, 0, 255, 120, 40, 72, 136, 248,
- 136, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 5, 5, 6,
- 0, 0, 168, 168, 112, 168, 168, 5, 5, 5, 6, 0, 0, 240, 8, 48,
- 8, 240, 5, 5, 5, 6, 0, 0, 136, 152, 168, 200, 136, 5, 7, 7,
- 6, 0, 0, 80, 32, 136, 152, 168, 200, 136, 4, 5, 5, 6, 0, 0,
- 144, 160, 192, 160, 144, 5, 5, 5, 6, 0, 0, 248, 40, 40, 168, 72,
- 5, 5, 5, 6, 0, 0, 136, 216, 168, 136, 136, 5, 5, 5, 6, 0,
- 0, 136, 136, 248, 136, 136, 5, 5, 5, 6, 0, 0, 112, 136, 136, 136,
- 112, 5, 5, 5, 6, 0, 0, 248, 136, 136, 136, 136, 5, 6, 6, 6,
- 0, 255, 240, 136, 136, 240, 128, 128, 5, 5, 5, 6, 0, 0, 112, 128,
- 128, 136, 112, 5, 5, 5, 6, 0, 0, 248, 32, 32, 32, 32, 5, 6,
- 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 6, 6, 6, 0, 0,
- 32, 112, 168, 168, 112, 32, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80,
- 136, 5, 6, 6, 6, 0, 255, 136, 136, 136, 136, 248, 8, 5, 5, 5,
- 6, 0, 0, 136, 136, 248, 8, 8, 5, 5, 5, 6, 0, 0, 168, 168,
- 168, 168, 248, 5, 6, 6, 6, 0, 255, 168, 168, 168, 168, 248, 8, 5,
- 5, 5, 6, 0, 0, 192, 64, 112, 72, 112, 5, 5, 5, 6, 0, 0,
- 136, 136, 200, 168, 200, 3, 5, 5, 6, 1, 0, 128, 128, 192, 160, 192,
- 5, 5, 5, 6, 0, 0, 112, 136, 56, 136, 112, 5, 5, 5, 6, 0,
- 0, 144, 168, 232, 168, 144, 5, 5, 5, 6, 0, 0, 120, 136, 120, 40,
- 72, 5, 8, 8, 6, 0, 0, 64, 32, 0, 112, 136, 248, 128, 112, 5,
- 7, 7, 6, 0, 0, 80, 0, 112, 136, 248, 128, 112, 5, 9, 9, 6,
- 0, 255, 64, 224, 64, 64, 120, 72, 72, 72, 16, 5, 8, 8, 6, 0,
- 0, 16, 32, 0, 248, 136, 128, 128, 128, 5, 5, 5, 6, 0, 0, 112,
- 136, 96, 136, 112, 5, 5, 5, 6, 0, 0, 112, 128, 112, 8, 240, 1,
- 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3, 7, 7, 6,
- 1, 0, 160, 0, 64, 64, 64, 64, 64, 3, 8, 8, 6, 1, 255, 32,
- 0, 32, 32, 32, 32, 160, 64, 5, 5, 5, 6, 0, 0, 160, 160, 184,
- 168, 184, 5, 5, 5, 6, 0, 0, 160, 160, 248, 168, 184, 5, 6, 6,
- 6, 0, 0, 64, 224, 64, 120, 72, 72, 4, 8, 8, 6, 0, 0, 16,
- 32, 0, 144, 160, 192, 160, 144, 5, 8, 8, 6, 0, 0, 64, 32, 0,
- 136, 152, 168, 200, 136, 5, 9, 9, 6, 0, 255, 80, 32, 0, 136, 136,
- 136, 120, 8, 112, 5, 6, 6, 6, 0, 255, 136, 136, 136, 136, 248, 32
-};
diff --git a/Marlin/dogm_font_data_ISO10646_CN.h b/Marlin/dogm_font_data_ISO10646_CN.h
deleted file mode 100644
index 11fdb2240b..0000000000
--- a/Marlin/dogm_font_data_ISO10646_CN.h
+++ /dev/null
@@ -1,293 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- Fontname: ISO10646_CN
- Copyright: A. Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w=11 h=11 x= 2 y=10 dx=12 dy= 0 ascent=10 len=22
- Font Bounding box w=12 h=11 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent =10 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t ISO10646_CN[4105] U8G_SECTION(".progmem.ISO10646_CN") = {
- 0, 12, 11, 0, 254, 7, 1, 146, 3, 33, 32, 255, 255, 10, 255, 7,
- 255, 0, 0, 0, 6, 0, 10, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
- 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
- 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
- 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
- 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
- 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
- 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
- 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
- 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
- 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
- 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
- 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
- 112, 128, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 8, 112, 2, 5,
- 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
- 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
- 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 0,
- 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
- 8, 16, 32, 0, 32, 5, 7, 7, 6, 0, 0, 112, 136, 8, 104, 168,
- 168, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5,
- 7, 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6,
- 0, 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 240,
- 136, 136, 136, 136, 136, 240, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128,
- 5, 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7,
- 6, 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0,
- 128, 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16,
- 16, 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144,
- 136, 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7,
- 7, 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0,
- 0, 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136,
- 136, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128,
- 128, 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5,
- 7, 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6,
- 0, 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248,
- 32, 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136,
- 136, 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32,
- 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7,
- 6, 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0,
- 136, 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 64, 128, 248, 3, 7, 7, 6, 0, 0, 224, 128, 128, 128, 128, 128,
- 224, 5, 5, 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6,
- 0, 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32,
- 80, 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128,
- 64, 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6,
- 0, 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112,
- 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136,
- 120, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6,
- 0, 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112,
- 136, 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136,
- 136, 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3,
- 8, 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7,
- 6, 1, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0,
- 192, 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168,
- 168, 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5,
- 6, 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136,
- 136, 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8,
- 5, 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0,
- 0, 112, 128, 112, 8, 240, 4, 7, 7, 6, 0, 0, 64, 64, 224, 64,
- 64, 64, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5,
- 5, 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136,
- 136, 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5,
- 6, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0,
- 0, 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128,
- 64, 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128,
- 3, 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 2, 2,
- 6, 0, 3, 104, 144, 0, 0, 0, 6, 0, 10, 0, 0, 0, 12, 0,
- 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0,
- 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0,
- 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0,
- 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0,
- 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0,
- 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0,
- 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0,
- 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0,
- 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0,
- 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0,
- 12, 0, 10, 0, 0, 0, 12, 0, 10, 11, 11, 22, 12, 0, 255, 255,
- 224, 2, 0, 2, 0, 4, 0, 13, 0, 20, 128, 36, 64, 196, 32, 4,
- 0, 4, 0, 4, 0, 11, 11, 22, 12, 0, 255, 249, 0, 138, 0, 171,
- 224, 172, 64, 170, 64, 170, 64, 170, 64, 170, 128, 33, 0, 82, 128, 140,
- 96, 11, 11, 22, 12, 0, 255, 36, 0, 36, 0, 63, 128, 68, 0, 132,
- 0, 4, 0, 255, 224, 10, 0, 17, 0, 32, 128, 192, 96, 11, 11, 22,
- 12, 0, 255, 36, 0, 36, 0, 63, 192, 68, 0, 4, 0, 255, 224, 9,
- 0, 9, 0, 17, 32, 33, 32, 64, 224, 11, 11, 22, 12, 0, 255, 32,
- 0, 61, 224, 81, 32, 145, 32, 17, 32, 255, 32, 17, 32, 41, 32, 37,
- 224, 69, 32, 128, 0, 11, 11, 22, 12, 0, 255, 32, 128, 127, 192, 8,
- 64, 255, 224, 17, 0, 32, 128, 95, 64, 128, 32, 63, 128, 0, 0, 127,
- 192, 11, 11, 22, 12, 0, 255, 34, 64, 71, 224, 148, 128, 228, 128, 47,
- 224, 68, 128, 244, 128, 7, 224, 52, 128, 196, 128, 7, 224, 11, 11, 22,
- 12, 0, 255, 4, 128, 143, 224, 73, 0, 25, 0, 47, 192, 9, 0, 9,
- 0, 47, 192, 73, 0, 137, 0, 15, 224, 11, 11, 22, 12, 0, 255, 16,
- 0, 63, 128, 81, 0, 14, 0, 49, 128, 192, 96, 63, 128, 36, 128, 63,
- 128, 36, 128, 63, 128, 11, 11, 22, 12, 0, 255, 34, 128, 250, 64, 7,
- 224, 250, 128, 138, 128, 138, 128, 250, 128, 34, 128, 178, 128, 170, 160, 100,
- 224, 11, 11, 22, 12, 0, 255, 34, 32, 71, 64, 146, 128, 239, 224, 34,
- 0, 71, 192, 236, 64, 7, 192, 52, 64, 199, 192, 4, 64, 11, 11, 22,
- 12, 0, 255, 8, 0, 15, 192, 8, 0, 8, 0, 255, 224, 8, 0, 14,
- 0, 9, 128, 8, 64, 8, 0, 8, 0, 10, 11, 22, 12, 0, 255, 255,
- 128, 0, 128, 0, 128, 128, 128, 128, 128, 255, 128, 128, 0, 128, 0, 128,
- 64, 128, 64, 127, 192, 11, 11, 22, 12, 0, 255, 71, 192, 65, 0, 239,
- 224, 65, 0, 69, 0, 105, 96, 201, 32, 77, 96, 73, 32, 79, 224, 200,
- 32, 11, 11, 22, 12, 0, 255, 8, 0, 4, 0, 4, 0, 10, 0, 10,
- 0, 10, 0, 17, 0, 17, 0, 32, 128, 64, 64, 128, 32, 11, 11, 22,
- 12, 0, 255, 34, 64, 34, 0, 247, 224, 34, 0, 35, 224, 53, 32, 229,
- 32, 37, 64, 40, 128, 41, 64, 114, 32, 11, 10, 20, 12, 0, 0, 68,
- 64, 68, 64, 68, 64, 127, 192, 4, 0, 4, 0, 132, 32, 132, 32, 132,
- 32, 255, 224, 11, 11, 22, 12, 0, 255, 4, 0, 0, 0, 127, 192, 4,
- 0, 4, 0, 4, 0, 127, 192, 4, 0, 4, 0, 4, 0, 255, 224, 11,
- 11, 22, 12, 0, 255, 255, 224, 17, 0, 1, 192, 254, 0, 72, 128, 37,
- 0, 4, 0, 255, 224, 21, 0, 36, 128, 196, 96, 11, 11, 22, 12, 0,
- 255, 17, 0, 127, 192, 68, 64, 127, 192, 68, 64, 127, 192, 4, 0, 255,
- 224, 4, 0, 4, 0, 4, 0, 9, 11, 22, 12, 0, 255, 16, 0, 255,
- 128, 128, 128, 128, 128, 255, 128, 128, 128, 128, 128, 255, 128, 128, 128, 128,
- 128, 255, 128, 11, 11, 22, 12, 0, 255, 113, 0, 1, 0, 3, 224, 249,
- 32, 33, 32, 65, 32, 81, 32, 137, 32, 250, 32, 2, 32, 4, 192, 11,
- 11, 22, 12, 0, 255, 127, 192, 17, 0, 17, 0, 17, 0, 17, 0, 255,
- 224, 17, 0, 17, 0, 33, 0, 33, 0, 65, 0, 11, 11, 22, 12, 0,
- 255, 33, 0, 34, 0, 244, 64, 87, 224, 80, 32, 87, 192, 148, 64, 84,
- 64, 36, 64, 87, 192, 148, 64, 11, 11, 22, 12, 0, 255, 17, 0, 10,
- 0, 127, 192, 4, 0, 4, 0, 255, 224, 4, 0, 10, 0, 17, 0, 32,
- 128, 192, 96, 10, 11, 22, 12, 0, 255, 95, 192, 0, 64, 132, 64, 132,
- 64, 191, 64, 132, 64, 140, 64, 148, 64, 164, 64, 140, 64, 129, 192, 11,
- 11, 22, 12, 0, 255, 36, 0, 39, 192, 36, 0, 36, 0, 255, 224, 0,
- 0, 20, 64, 36, 128, 71, 0, 12, 0, 112, 0, 11, 11, 22, 12, 0,
- 255, 36, 128, 4, 128, 15, 192, 228, 128, 36, 128, 63, 224, 36, 128, 36,
- 128, 40, 128, 80, 0, 143, 224, 11, 11, 22, 12, 0, 255, 8, 0, 8,
- 0, 255, 128, 136, 128, 136, 128, 255, 128, 136, 128, 136, 128, 255, 160, 136,
- 32, 7, 224, 11, 11, 22, 12, 0, 255, 39, 128, 36, 128, 244, 128, 36,
- 128, 116, 128, 108, 128, 164, 128, 36, 128, 36, 160, 40, 160, 48, 96, 10,
- 11, 22, 12, 0, 255, 255, 192, 128, 64, 128, 64, 158, 64, 146, 64, 146,
- 64, 158, 64, 128, 64, 128, 64, 255, 192, 128, 64, 11, 11, 22, 12, 0,
- 255, 127, 192, 68, 0, 95, 192, 80, 64, 95, 192, 80, 64, 95, 192, 66,
- 0, 74, 128, 82, 64, 166, 32, 11, 11, 22, 12, 0, 255, 4, 0, 7,
- 224, 4, 0, 127, 192, 64, 64, 64, 64, 64, 64, 127, 192, 0, 0, 82,
- 64, 137, 32, 11, 11, 22, 12, 0, 255, 71, 128, 36, 128, 4, 128, 4,
- 128, 232, 96, 32, 0, 47, 192, 36, 64, 34, 128, 49, 0, 38, 192, 11,
- 11, 22, 12, 0, 255, 127, 192, 74, 64, 127, 192, 4, 0, 255, 224, 4,
- 0, 63, 128, 32, 128, 36, 128, 36, 128, 255, 224, 11, 11, 22, 12, 0,
- 255, 34, 0, 79, 224, 72, 32, 79, 224, 200, 0, 79, 224, 74, 160, 90,
- 160, 111, 224, 74, 160, 72, 96, 11, 11, 22, 12, 0, 255, 243, 192, 36,
- 64, 42, 128, 241, 0, 34, 128, 101, 224, 114, 32, 165, 64, 32, 128, 35,
- 0, 44, 0, 11, 11, 22, 12, 0, 255, 4, 0, 255, 224, 128, 32, 0,
- 0, 255, 224, 4, 0, 36, 0, 39, 192, 36, 0, 84, 0, 143, 224, 11,
- 11, 22, 12, 0, 255, 115, 224, 16, 128, 81, 0, 35, 224, 250, 32, 42,
- 160, 34, 160, 34, 160, 32, 128, 33, 64, 98, 32, 11, 11, 22, 12, 0,
- 255, 34, 0, 247, 128, 34, 128, 54, 128, 226, 160, 37, 160, 36, 96, 104,
- 32, 0, 0, 82, 64, 137, 32, 11, 11, 22, 12, 0, 255, 115, 192, 66,
- 0, 66, 0, 123, 224, 74, 64, 74, 64, 122, 64, 74, 64, 66, 64, 68,
- 64, 136, 64, 11, 11, 22, 12, 0, 255, 8, 0, 255, 224, 8, 0, 31,
- 192, 48, 64, 95, 192, 144, 64, 31, 192, 16, 64, 16, 64, 16, 192, 11,
- 11, 22, 12, 0, 255, 2, 0, 127, 224, 66, 0, 66, 0, 95, 192, 66,
- 0, 71, 0, 74, 128, 82, 64, 98, 32, 130, 0, 11, 11, 22, 12, 0,
- 255, 243, 192, 150, 64, 145, 128, 166, 96, 161, 0, 151, 192, 145, 0, 149,
- 0, 231, 224, 129, 0, 129, 0, 11, 11, 22, 12, 0, 255, 15, 128, 136,
- 128, 79, 128, 8, 128, 143, 128, 64, 0, 31, 192, 53, 64, 85, 64, 149,
- 64, 63, 224, 11, 11, 22, 12, 0, 255, 39, 224, 32, 128, 248, 128, 32,
- 128, 32, 128, 56, 128, 224, 128, 32, 128, 32, 128, 32, 128, 97, 128, 11,
- 11, 22, 12, 0, 255, 31, 224, 145, 0, 87, 192, 20, 64, 23, 192, 148,
- 64, 87, 192, 17, 0, 85, 64, 153, 32, 35, 0, 11, 11, 22, 12, 0,
- 255, 32, 128, 39, 224, 242, 64, 33, 128, 34, 64, 52, 32, 226, 64, 34,
- 64, 34, 64, 34, 64, 100, 64, 11, 11, 22, 12, 0, 255, 65, 0, 65,
- 0, 79, 224, 233, 32, 73, 32, 73, 32, 111, 224, 201, 32, 73, 32, 73,
- 32, 207, 224, 11, 11, 22, 12, 0, 255, 33, 0, 241, 0, 79, 224, 169,
- 32, 249, 32, 47, 224, 57, 32, 233, 32, 41, 32, 47, 224, 40, 32, 11,
- 11, 22, 12, 0, 255, 143, 224, 73, 32, 9, 32, 203, 160, 73, 32, 79,
- 224, 72, 32, 75, 160, 74, 160, 107, 160, 80, 224, 11, 11, 22, 12, 0,
- 255, 127, 192, 4, 0, 68, 64, 36, 64, 36, 128, 4, 0, 255, 224, 4,
- 0, 4, 0, 4, 0, 4, 0, 11, 11, 22, 12, 0, 255, 130, 0, 66,
- 0, 31, 224, 194, 0, 95, 192, 82, 64, 95, 192, 71, 0, 74, 128, 82,
- 64, 191, 224, 11, 11, 22, 12, 0, 255, 4, 0, 127, 224, 72, 128, 127,
- 224, 72, 128, 79, 128, 64, 0, 95, 192, 72, 64, 71, 128, 152, 96, 11,
- 11, 22, 12, 0, 255, 1, 0, 239, 224, 161, 0, 164, 64, 175, 224, 164,
- 64, 175, 224, 169, 32, 233, 32, 2, 128, 12, 96, 11, 11, 22, 12, 0,
- 255, 20, 192, 246, 160, 188, 96, 167, 128, 168, 128, 191, 224, 169, 32, 239,
- 224, 9, 32, 15, 224, 9, 32, 11, 11, 22, 12, 0, 255, 127, 128, 64,
- 128, 66, 128, 98, 128, 84, 128, 72, 128, 72, 128, 84, 160, 98, 160, 64,
- 96, 128, 32, 11, 11, 22, 12, 0, 255, 4, 0, 127, 224, 64, 32, 127,
- 224, 64, 0, 125, 224, 84, 32, 76, 160, 84, 96, 100, 160, 141, 96, 11,
- 11, 22, 12, 0, 255, 130, 0, 95, 224, 4, 0, 8, 64, 159, 224, 64,
- 32, 10, 128, 10, 128, 74, 160, 146, 160, 34, 96, 11, 11, 22, 12, 0,
- 255, 65, 0, 79, 224, 232, 32, 66, 128, 68, 64, 104, 32, 199, 192, 65,
- 0, 65, 0, 65, 0, 207, 224, 11, 11, 22, 12, 0, 255, 80, 32, 125,
- 32, 145, 32, 255, 32, 17, 32, 125, 32, 85, 32, 85, 32, 84, 32, 92,
- 32, 16, 224, 11, 11, 22, 12, 0, 255, 63, 128, 32, 128, 63, 128, 32,
- 128, 255, 224, 72, 0, 123, 192, 73, 64, 121, 64, 72, 128, 251, 96, 11,
- 11, 22, 12, 0, 255, 4, 0, 4, 0, 4, 0, 36, 128, 36, 64, 68,
- 64, 68, 32, 132, 32, 4, 0, 4, 0, 28, 0, 11, 11, 22, 12, 0,
- 255, 4, 0, 4, 0, 4, 0, 255, 224, 4, 0, 10, 0, 10, 0, 17,
- 0, 17, 0, 32, 128, 192, 96, 9, 10, 20, 10, 0, 0, 136, 128, 73,
- 0, 8, 0, 255, 128, 0, 128, 0, 128, 127, 128, 0, 128, 0, 128, 255,
- 128, 11, 11, 22, 12, 0, 255, 33, 0, 18, 0, 255, 224, 0, 0, 120,
- 128, 74, 128, 122, 128, 74, 128, 122, 128, 72, 128, 89, 128, 11, 11, 22,
- 12, 0, 255, 39, 192, 0, 0, 0, 0, 239, 224, 33, 0, 34, 0, 36,
- 64, 47, 224, 32, 32, 80, 0, 143, 224, 11, 11, 22, 12, 0, 255, 32,
- 128, 39, 0, 249, 0, 33, 192, 119, 0, 33, 0, 249, 224, 39, 0, 113,
- 32, 169, 32, 32, 224, 11, 11, 22, 12, 0, 255, 16, 64, 16, 64, 253,
- 224, 16, 64, 56, 192, 53, 64, 82, 64, 148, 64, 16, 64, 16, 64, 16,
- 192, 11, 11, 22, 12, 0, 255, 0, 64, 248, 64, 11, 224, 8, 64, 136,
- 64, 82, 64, 81, 64, 33, 64, 80, 64, 72, 64, 137, 192, 10, 11, 22,
- 12, 0, 255, 132, 0, 132, 64, 132, 128, 245, 0, 134, 0, 132, 0, 132,
- 0, 148, 0, 164, 64, 196, 64, 131, 192, 11, 11, 22, 12, 0, 255, 17,
- 32, 125, 0, 17, 0, 255, 224, 41, 0, 253, 64, 73, 64, 124, 128, 8,
- 160, 253, 96, 10, 32, 11, 11, 22, 12, 0, 255, 23, 192, 36, 64, 36,
- 64, 103, 192, 161, 0, 47, 224, 33, 0, 35, 128, 37, 64, 41, 32, 33,
- 0, 11, 11, 22, 12, 0, 255, 8, 0, 255, 224, 16, 0, 39, 192, 32,
- 128, 97, 0, 175, 224, 33, 0, 33, 0, 33, 0, 35, 0, 11, 11, 22,
- 12, 0, 255, 36, 0, 47, 224, 180, 0, 164, 128, 164, 160, 170, 192, 42,
- 128, 40, 128, 41, 64, 50, 64, 36, 32, 11, 11, 22, 12, 0, 255, 127,
- 224, 128, 0, 63, 192, 32, 64, 63, 192, 16, 0, 31, 192, 16, 64, 40,
- 128, 71, 0, 56, 224, 11, 11, 22, 12, 0, 255, 127, 224, 64, 0, 64,
- 0, 64, 0, 64, 0, 64, 0, 64, 0, 64, 0, 64, 0, 64, 0, 128,
- 0, 11, 11, 22, 12, 0, 255, 255, 224, 4, 0, 127, 192, 68, 64, 127,
- 192, 68, 64, 127, 192, 68, 0, 36, 0, 24, 0, 231, 224, 11, 11, 22,
- 12, 0, 255, 17, 224, 253, 0, 69, 0, 41, 224, 253, 64, 17, 64, 125,
- 64, 17, 64, 85, 64, 146, 64, 52, 64, 11, 11, 22, 12, 0, 255, 33,
- 0, 95, 224, 64, 0, 207, 192, 64, 0, 79, 192, 64, 0, 79, 192, 72,
- 64, 79, 192, 72, 64, 11, 11, 22, 12, 0, 255, 4, 0, 127, 192, 64,
- 64, 127, 192, 64, 64, 127, 192, 64, 64, 127, 192, 4, 64, 82, 32, 191,
- 160, 11, 11, 22, 12, 0, 255, 127, 192, 68, 64, 127, 192, 68, 64, 127,
- 192, 4, 0, 27, 0, 224, 224, 17, 0, 17, 0, 97, 0, 11, 11, 22,
- 12, 0, 255, 255, 224, 4, 0, 8, 0, 127, 224, 73, 32, 79, 32, 73,
- 32, 79, 32, 73, 32, 73, 32, 127, 224, 11, 11, 22, 12, 0, 255, 253,
- 224, 86, 64, 121, 64, 56, 128, 85, 64, 146, 32, 255, 224, 4, 0, 39,
- 192, 36, 0, 255, 224, 11, 11, 22, 12, 0, 255, 251, 128, 82, 0, 123,
- 224, 18, 64, 250, 64, 20, 64, 63, 128, 32, 128, 63, 128, 32, 128, 63,
- 128, 11, 11, 22, 12, 0, 255, 31, 224, 32, 0, 39, 192, 100, 64, 167,
- 192, 32, 0, 47, 224, 40, 32, 39, 192, 33, 0, 35, 0, 11, 11, 22,
- 12, 0, 255, 243, 224, 130, 32, 130, 32, 250, 32, 130, 32, 130, 32, 138,
- 32, 178, 32, 194, 224, 2, 0, 2, 0, 11, 11, 22, 12, 0, 255, 36,
- 128, 70, 160, 149, 192, 228, 128, 39, 224, 68, 128, 245, 192, 6, 160, 52,
- 128, 196, 128, 7, 224, 11, 11, 22, 12, 0, 255, 39, 192, 65, 0, 135,
- 224, 224, 32, 34, 128, 69, 128, 242, 128, 15, 224, 48, 128, 193, 64, 2,
- 32, 11, 11, 22, 12, 0, 255, 2, 0, 2, 0, 34, 0, 35, 192, 34,
- 0, 34, 0, 34, 0, 34, 0, 34, 0, 34, 0, 255, 224, 9, 11, 22,
- 12, 0, 255, 8, 0, 8, 0, 255, 128, 136, 128, 136, 128, 136, 128, 255,
- 128, 136, 128, 136, 128, 136, 128, 255, 128, 11, 11, 22, 12, 0, 255, 33,
- 0, 83, 160, 65, 0, 247, 224, 81, 0, 83, 192, 86, 64, 83, 192, 90,
- 64, 83, 192, 66, 64, 11, 11, 22, 12, 0, 255, 127, 192, 4, 0, 4,
- 0, 4, 0, 255, 224, 10, 0, 10, 0, 18, 0, 34, 32, 66, 32, 129,
- 224, 11, 11, 22, 12, 0, 255, 17, 0, 33, 0, 47, 224, 97, 0, 163,
- 128, 35, 128, 37, 64, 37, 64, 41, 32, 33, 0, 33, 0, 11, 11, 22,
- 12, 0, 255, 247, 224, 148, 32, 244, 32, 151, 224, 148, 128, 244, 128, 151,
- 224, 148, 128, 244, 160, 150, 96, 4, 32, 11, 11, 22, 12, 0, 255, 123,
- 224, 148, 128, 4, 0, 127, 192, 4, 0, 255, 224, 1, 0, 255, 224, 33,
- 0, 17, 0, 7, 0, 11, 11, 22, 12, 0, 255, 33, 0, 71, 192, 145,
- 0, 47, 224, 96, 128, 175, 224, 32, 128, 36, 128, 34, 128, 32, 128, 35,
- 128, 11, 11, 22, 12, 0, 255, 39, 192, 36, 64, 247, 192, 46, 224, 42,
- 160, 62, 224, 225, 0, 47, 224, 35, 128, 37, 64, 105, 32, 11, 11, 22,
- 12, 0, 255, 20, 0, 39, 224, 42, 0, 98, 0, 163, 192, 34, 0, 34,
- 0, 35, 224, 34, 0, 34, 0, 34, 0
-};
diff --git a/Marlin/dogm_font_data_ISO10646_CZ.h b/Marlin/dogm_font_data_ISO10646_CZ.h
deleted file mode 100644
index 671ad8ea2d..0000000000
--- a/Marlin/dogm_font_data_ISO10646_CZ.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- Fontname: ISO10646_CZ
- Copyright: A. Hardtung, public domain
- Modified for Czech accents by Petr Zahradnik, http://www.zahradniksebavi.cz
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 6 h= 9 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 9
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t ISO10646_CZ[2832] U8G_SECTION(".progmem.ISO10646_CZ") = {
- 0,6,9,0,254,7,1,146,3,33,32,255,255,8,255,7,
- 255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128,
- 128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
- 0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
- 120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
- 64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
- 2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
- 64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
- 32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
- 5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
- 64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
- 192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
- 0,0,112,136,136,136,136,136,112,3,7,7,6,1,0,64,
- 192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
- 128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
- 5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
- 6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
- 112,128,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
- 32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
- 112,5,7,7,6,0,0,112,136,136,120,8,8,112,2,5,
- 5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
- 192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
- 32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1,
- 0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
- 8,16,32,0,32,5,7,7,6,0,0,112,136,8,104,168,
- 168,112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,
- 7,7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,
- 0,0,112,136,128,128,128,136,112,5,7,7,6,0,0,240,
- 136,136,136,136,136,240,5,7,7,6,0,0,248,128,128,240,
- 128,128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,
- 5,7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,
- 6,0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,
- 128,128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,
- 16,16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,
- 136,5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,
- 7,6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,
- 0,136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,
- 136,136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,
- 128,128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,
- 7,7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,
- 0,0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,
- 32,32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,
- 136,136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,
- 5,7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,
- 6,0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,
- 136,136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,
- 32,64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,
- 224,5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,
- 1,0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,
- 80,136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,
- 64,5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,
- 0,0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,
- 128,128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,
- 120,5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,
- 0,0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,
- 136,136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,
- 136,136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,
- 8,8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,
- 6,0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,
- 192,64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,
- 168,168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,
- 6,0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,
- 136,240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,
- 5,5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,
- 0,112,128,112,8,240,4,7,7,6,0,0,64,64,224,64,
- 64,64,48,5,5,5,6,0,0,136,136,136,152,104,5,5,
- 5,6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,
- 136,168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,
- 6,6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,
- 0,248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,
- 64,64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,
- 3,7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,
- 6,0,2,104,144,0,0,0,6,0,0,5,8,8,6,0,
- 0,16,32,112,136,136,248,136,136,5,8,8,6,0,0,8,
- 16,248,128,128,240,128,248,3,8,8,6,1,0,32,64,224,
- 64,64,64,64,224,5,8,8,6,0,0,16,32,112,136,136,
- 136,136,112,5,8,8,6,0,0,16,32,136,136,136,136,136,
- 112,5,8,8,6,0,0,16,32,136,136,80,32,32,32,5,
- 8,8,6,0,0,16,32,0,112,8,120,136,120,5,8,8,
- 6,0,0,16,32,0,112,136,248,128,112,2,8,8,6,2,
- 0,64,128,0,128,128,128,128,128,5,8,8,6,0,0,16,
- 32,0,112,136,136,136,112,5,8,8,6,0,0,16,32,0,
- 136,136,136,152,104,5,9,9,6,0,255,16,32,0,136,136,
- 136,120,8,112,5,8,8,6,0,0,80,32,112,136,128,128,
- 136,112,5,8,8,6,0,0,80,32,0,112,128,128,136,112,
- 5,8,8,6,0,0,80,32,240,136,136,136,136,240,6,8,
- 8,6,0,0,4,20,24,112,144,144,144,112,5,8,8,6,
- 0,0,80,32,248,128,128,240,128,248,5,8,8,6,0,0,
- 80,32,0,112,136,248,128,112,5,8,8,6,0,0,80,32,
- 136,200,168,152,136,136,5,8,8,6,0,0,80,32,0,176,
- 200,136,136,136,5,8,8,6,0,0,80,32,240,136,240,160,
- 144,136,5,8,8,6,0,0,80,32,0,176,200,128,128,128,
- 5,8,8,6,0,0,80,32,120,128,128,112,8,240,5,8,
- 8,6,0,0,80,32,0,112,128,112,8,240,5,8,8,6,
- 0,0,80,32,248,32,32,32,32,32,6,8,8,6,0,0,
- 4,68,72,224,64,64,64,48,5,8,8,6,0,0,32,80,
- 168,136,136,136,136,112,5,8,8,6,0,0,32,80,32,136,
- 136,136,152,104,5,8,8,6,0,0,80,32,248,8,48,64,
- 128,248,5,8,8,6,0,0,80,32,0,248,16,32,64,248,
- 0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,
- 0,0,1,7,7,6,2,0,128,0,128,128,128,128,128,5,
- 7,7,6,0,0,32,112,168,160,168,112,32,5,7,7,6,
- 0,0,48,64,64,224,64,80,168,5,5,5,6,0,0,136,
- 112,80,112,136,5,7,7,6,0,0,136,80,32,248,32,248,
- 32,1,7,7,6,2,0,128,128,128,0,128,128,128,5,8,
- 8,6,0,0,48,72,32,80,80,32,144,96,3,1,1,6,
- 1,7,160,5,7,7,6,0,0,248,136,184,184,184,136,248,
- 5,7,7,6,0,1,112,8,120,136,120,0,248,5,5,5,
- 6,0,1,40,80,160,80,40,5,3,3,6,0,1,248,8,
- 8,2,2,2,6,2,6,64,128,5,7,7,6,0,0,248,
- 136,168,136,152,168,248,5,1,1,6,0,6,248,4,4,4,
- 6,0,3,96,144,144,96,5,7,7,6,0,0,32,32,248,
- 32,32,0,248,4,5,5,6,0,3,96,144,32,64,240,3,
- 5,5,6,0,3,224,32,224,32,224,2,2,2,6,2,6,
- 64,128,5,8,8,6,0,255,136,136,136,136,152,232,128,128,
- 5,7,7,6,0,0,120,152,152,120,24,24,24,2,2,2,
- 6,2,2,192,192,2,2,2,6,2,255,64,128,3,5,5,
- 6,0,3,64,192,64,64,224,5,7,7,6,0,1,112,136,
- 136,136,112,0,248,5,5,5,6,0,1,160,80,40,80,160,
- 5,7,7,6,0,0,136,144,168,88,184,8,8,5,7,7,
- 6,0,0,136,144,184,72,152,32,56,5,8,8,6,0,0,
- 192,64,192,72,216,56,8,8,5,7,7,6,0,0,32,0,
- 32,64,128,136,112,5,8,8,6,0,0,64,32,0,112,136,
- 248,136,136,5,8,8,6,0,0,16,32,0,112,136,248,136,
- 136,5,8,8,6,0,0,32,80,0,112,136,248,136,136,5,
- 8,8,6,0,0,104,144,0,112,136,248,136,136,5,8,8,
- 6,0,0,80,0,112,136,136,248,136,136,5,8,8,6,0,
- 0,32,80,32,112,136,248,136,136,5,7,7,6,0,0,56,
- 96,160,184,224,160,184,5,8,8,6,0,255,112,136,128,128,
- 136,112,32,96,5,8,8,6,0,0,64,32,0,248,128,240,
- 128,248,5,8,8,6,0,0,8,16,0,248,128,240,128,248,
- 5,8,8,6,0,0,32,80,0,248,128,240,128,248,5,7,
- 7,6,0,0,80,0,248,128,240,128,248,3,8,8,6,1,
- 0,128,64,0,224,64,64,64,224,3,8,8,6,1,0,32,
- 64,0,224,64,64,64,224,3,8,8,6,1,0,64,160,0,
- 224,64,64,64,224,3,7,7,6,1,0,160,0,224,64,64,
- 64,224,5,9,9,6,0,255,80,32,112,136,128,184,136,136,
- 112,5,8,8,6,0,0,104,144,0,136,200,168,152,136,5,
- 8,8,6,0,0,64,32,112,136,136,136,136,112,5,8,8,
- 6,0,0,16,32,112,136,136,136,136,112,5,8,8,6,0,
- 0,32,80,0,112,136,136,136,112,5,8,8,6,0,0,104,
- 144,0,112,136,136,136,112,5,8,8,6,0,0,80,0,112,
- 136,136,136,136,112,5,5,5,6,0,1,136,80,32,80,136,
- 5,8,8,6,0,255,16,112,168,168,168,168,112,64,5,8,
- 8,6,0,0,64,32,136,136,136,136,136,112,5,8,8,6,
- 0,0,16,32,136,136,136,136,136,112,5,8,8,6,0,0,
- 32,80,0,136,136,136,136,112,5,8,8,6,0,0,80,0,
- 136,136,136,136,136,112,1,7,7,6,2,0,128,0,128,128,
- 128,128,128,5,9,9,6,0,255,120,128,128,112,8,8,240,
- 32,96,4,8,8,6,1,255,96,144,144,160,144,144,224,128,
- 5,8,8,6,0,0,64,32,0,112,8,120,136,120,5,8,
- 8,6,0,0,16,32,0,112,8,120,136,120,5,8,8,6,
- 0,0,32,80,0,112,8,120,136,120,5,8,8,6,0,0,
- 104,144,0,112,8,120,136,120,5,7,7,6,0,0,80,0,
- 112,8,120,136,120,5,8,8,6,0,0,32,80,32,112,8,
- 120,136,120,5,6,6,6,0,0,208,40,120,160,168,80,5,
- 7,7,6,0,255,112,128,128,136,112,32,96,5,8,8,6,
- 0,0,64,32,0,112,136,248,128,112,5,8,8,6,0,0,
- 16,32,0,112,136,248,128,112,5,8,8,6,0,0,32,80,
- 0,112,136,248,128,112,5,7,7,6,0,0,80,0,112,136,
- 248,128,112,3,8,8,6,1,0,128,64,0,64,192,64,64,
- 224,3,8,8,6,1,0,32,64,0,64,192,64,64,224,3,
- 8,8,6,1,0,64,160,0,64,192,64,64,224,3,7,7,
- 6,1,0,160,0,64,192,64,64,224,5,8,8,6,0,255,
- 80,32,112,136,136,120,8,112,5,8,8,6,0,0,104,144,
- 0,176,200,136,136,136,5,8,8,6,0,0,64,32,0,112,
- 136,136,136,112,5,8,8,6,0,0,16,32,0,112,136,136,
- 136,112,5,8,8,6,0,0,32,80,0,112,136,136,136,112,
- 5,8,8,6,0,0,104,144,0,112,136,136,136,112,5,7,
- 7,6,0,0,80,0,112,136,136,136,112,5,5,5,6,0,
- 1,32,0,248,0,32,5,7,7,6,0,255,16,112,168,168,
- 168,112,64,5,8,8,6,0,0,64,32,0,136,136,136,152,
- 104,5,8,8,6,0,0,16,32,0,136,136,136,152,104,5,
- 8,8,6,0,0,32,80,0,136,136,136,152,104,5,7,7,
- 6,0,0,80,0,136,136,136,152,104,1,5,5,6,2,0,
- 128,128,128,128,128,5,7,7,6,0,255,112,128,112,8,240,
- 32,96,5,8,8,6,0,255,80,0,136,136,136,120,8,112
- };
diff --git a/Marlin/dogm_font_data_ISO10646_Greek.h b/Marlin/dogm_font_data_ISO10646_Greek.h
deleted file mode 100644
index efe44f3cc1..0000000000
--- a/Marlin/dogm_font_data_ISO10646_Greek.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/*
- Fontname: ISO10646_4_Greek
- Copyright: A. Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h= 9 x= 2 y= 6 dx= 6 dy= 0 ascent= 8 len= 9
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t ISO10646_Greek_5x7[2715] U8G_SECTION(".progmem.ISO10646_Greek_5x7") = {
- 0,6,9,0,254,7,1,145,3,32,32,255,255,8,255,7,
- 255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128,
- 128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
- 0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
- 120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
- 64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
- 2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
- 64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
- 32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
- 5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
- 64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
- 192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
- 0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64,
- 192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
- 128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
- 5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
- 6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
- 48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
- 32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
- 112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5,
- 5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
- 192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
- 32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1,
- 0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
- 8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168,
- 112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7,
- 7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0,
- 0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144,
- 136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128,
- 128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5,
- 7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6,
- 0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128,
- 128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16,
- 16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136,
- 5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7,
- 6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0,
- 136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136,
- 136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128,
- 128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7,
- 7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0,
- 0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32,
- 32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136,
- 136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5,
- 7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6,
- 0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136,
- 136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32,
- 64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224,
- 5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,1,
- 0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,80,
- 136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,64,
- 5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,0,
- 0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,128,
- 128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,120,
- 5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,0,
- 0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,136,
- 136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,136,
- 136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,8,
- 8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,6,
- 0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,192,
- 64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,168,
- 168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,6,
- 0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,136,
- 240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,5,
- 5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,0,
- 112,128,112,8,240,5,7,7,6,0,0,64,64,224,64,64,
- 72,48,5,5,5,6,0,0,136,136,136,152,104,5,5,5,
- 6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,136,
- 168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,6,
- 6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,0,
- 248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,64,
- 64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,3,
- 7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,6,
- 0,3,104,144,0,0,0,6,0,0,0,0,0,6,0,0,
- 0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,
- 0,0,2,2,2,6,1,6,64,128,3,3,3,6,1,5,
- 32,64,160,5,8,8,6,0,0,64,160,80,80,136,248,136,
- 136,2,2,2,6,1,2,192,192,5,8,8,6,0,0,64,
- 128,248,128,240,128,128,248,5,8,8,6,0,0,64,128,136,
- 136,248,136,136,136,4,8,8,6,0,0,64,128,112,32,32,
- 32,32,112,0,0,0,6,0,0,5,8,8,6,0,0,64,
- 128,112,136,136,136,136,112,0,0,0,6,0,0,5,8,8,
- 6,0,0,64,128,8,136,112,32,32,32,5,8,8,6,0,
- 0,64,128,112,136,136,136,80,216,3,8,8,6,1,0,32,
- 64,160,0,64,64,64,32,5,7,7,6,0,0,32,80,136,
- 136,248,136,136,5,7,7,6,0,0,240,72,72,112,72,72,
- 240,5,7,7,6,0,0,248,128,128,128,128,128,128,5,6,
- 6,6,0,0,32,80,80,136,136,248,5,7,7,6,0,0,
- 248,128,128,240,128,128,248,5,7,7,6,0,0,248,8,16,
- 32,64,128,248,5,7,7,6,0,0,136,136,136,248,136,136,
- 136,5,7,7,6,0,0,112,136,136,168,136,136,112,3,7,
- 7,6,1,0,224,64,64,64,64,64,224,5,7,7,6,0,
- 0,136,144,160,192,160,144,136,5,7,7,6,0,0,32,80,
- 136,136,136,136,136,5,7,7,6,0,0,136,216,168,168,136,
- 136,136,5,7,7,6,0,0,136,200,200,168,152,152,136,5,
- 7,7,6,0,0,248,0,0,112,0,0,248,5,7,7,6,
- 0,0,112,136,136,136,136,136,112,5,7,7,6,0,0,248,
- 80,80,80,80,80,80,5,7,7,6,0,0,240,136,136,240,
- 128,128,128,0,0,0,6,0,0,5,7,7,6,0,0,248,
- 128,64,32,64,128,248,5,7,7,6,0,0,248,32,32,32,
- 32,32,32,5,7,7,6,0,0,136,136,80,32,32,32,32,
- 5,7,7,6,0,0,112,32,112,168,112,32,112,5,7,7,
- 6,0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,
- 168,168,168,168,112,32,32,5,6,6,6,0,0,112,136,136,
- 80,80,216,3,8,8,6,1,0,160,0,224,64,64,64,64,
- 224,5,8,8,6,0,0,80,0,136,136,136,80,32,32,5,
- 8,8,6,0,0,32,64,8,104,152,144,144,104,5,8,8,
- 6,0,0,32,64,0,112,136,224,136,112,5,9,9,6,0,
- 255,32,64,0,112,136,136,136,136,8,2,8,8,6,1,0,
- 64,128,0,128,128,128,128,64,5,8,8,6,0,0,16,32,
- 80,0,136,136,136,112,5,6,6,6,0,0,8,104,152,144,
- 144,104,4,6,6,6,0,255,96,144,240,144,224,128,5,6,
- 6,6,0,255,136,72,80,32,32,64,5,6,6,6,0,0,
- 48,64,112,136,136,112,5,5,5,6,0,0,112,136,224,136,
- 112,5,8,8,6,0,255,128,112,64,128,128,112,8,112,5,
- 6,6,6,0,255,184,200,136,136,136,8,5,5,5,6,0,
- 0,112,136,248,136,112,3,5,5,6,1,0,128,128,128,128,
- 96,4,5,5,6,0,0,144,160,192,160,144,5,6,6,6,
- 0,0,64,32,32,80,80,136,5,6,6,6,0,255,136,136,
- 136,216,168,128,5,5,5,6,0,0,136,136,80,96,32,5,
- 9,9,6,0,255,128,224,128,112,32,64,240,8,112,5,5,
- 5,6,0,0,112,136,136,136,112,5,5,5,6,0,0,248,
- 80,80,80,80,5,6,6,6,0,255,112,136,136,200,176,128,
- 5,7,7,6,0,255,48,64,128,64,48,8,112,5,5,5,
- 6,0,0,104,144,144,144,96,4,5,5,6,0,0,240,64,
- 64,64,48,5,5,5,6,0,0,136,136,144,144,224,5,7,
- 7,6,0,255,32,168,168,168,112,32,32,5,6,6,6,0,
- 255,136,80,32,32,80,136,5,6,6,6,0,255,168,168,168,
- 168,112,32,5,5,5,6,0,0,80,136,136,168,112,4,7,
- 7,6,0,0,160,0,64,64,64,64,48,5,7,7,6,0,
- 0,80,0,136,136,144,144,224,4,8,8,6,0,0,32,64,
- 0,96,144,144,144,96,5,8,8,6,0,0,32,64,0,136,
- 136,144,144,96,5,8,8,6,0,0,32,64,0,80,136,136,
- 168,112,5,7,7,6,0,255,144,160,192,160,144,136,16,5,
- 8,8,6,0,0,96,144,160,128,240,136,136,112,5,7,7,
- 6,0,0,112,80,56,144,144,144,96,5,6,6,6,0,0,
- 152,80,32,32,32,32,5,8,8,6,0,0,64,128,152,80,
- 32,32,32,32,5,8,8,6,0,0,80,0,152,80,32,32,
- 32,32,5,7,7,6,0,255,48,168,168,168,168,112,32,5,
- 5,5,6,0,0,248,80,80,80,88,5,6,6,6,0,255,
- 136,80,112,80,136,16,5,7,7,6,0,255,112,136,136,136,
- 112,32,112,5,6,6,6,0,255,112,136,136,112,32,112,5,
- 6,6,6,0,0,112,136,128,112,32,112,5,7,7,6,0,
- 255,8,8,112,128,112,16,96,5,6,6,6,0,0,248,128,
- 128,240,128,128,4,5,5,6,0,0,240,128,224,128,128,5,
- 6,6,6,0,0,248,0,0,112,0,248,4,5,5,6,0,
- 0,64,128,240,16,32,5,7,7,6,0,0,224,80,40,40,
- 8,8,16,5,7,7,6,0,0,192,32,80,40,8,8,8,
- 5,7,7,6,0,255,168,168,168,168,88,8,112,5,6,6,
- 6,0,255,168,168,168,88,8,112,5,6,6,6,0,0,104,
- 136,136,120,8,8,5,6,6,6,0,255,104,136,136,120,8,
- 8,4,8,8,6,0,255,128,224,144,144,144,144,32,192,5,
- 5,5,6,0,0,104,144,112,16,224,5,6,6,6,0,0,
- 96,144,16,96,136,112,4,6,6,6,0,0,96,144,16,96,
- 128,112,5,6,6,6,0,0,136,80,32,80,136,248,5,5,
- 5,6,0,0,136,80,32,80,112,5,6,6,6,0,0,120,
- 128,240,136,136,112,4,5,5,6,0,0,240,128,224,144,96,
- 3,6,6,6,1,0,64,224,64,64,64,64,3,6,6,6,
- 1,255,64,224,64,64,64,128,5,5,5,6,0,0,136,80,
- 112,80,136,5,6,6,6,0,255,112,136,136,240,128,112,4,
- 5,5,6,0,0,112,128,128,128,112,2,8,8,6,1,255,
- 64,0,192,64,64,64,64,128,5,7,7,6,0,0,112,136,
- 136,248,136,136,112,4,5,5,6,0,0,112,128,224,128,112,
- 4,5,5,6,0,0,224,16,112,16,224,5,7,7,6,0,
- 0,128,240,136,136,136,240,128,4,7,7,6,0,255,128,224,
- 144,144,144,224,128,5,6,6,6,0,0,112,136,128,128,136,
- 112,5,6,6,6,0,0,136,216,168,136,136,136,5,6,6,
- 6,0,255,136,216,168,136,136,128,5,8,8,6,0,255,112,
- 136,136,136,112,64,224,64,5,6,6,6,0,0,112,136,8,
- 8,136,112,5,6,6,6,0,0,112,136,160,128,136,112,5,
- 6,6,6,0,0,112,136,40,8,136,112};
diff --git a/Marlin/dogm_font_data_ISO10646_Kana.h b/Marlin/dogm_font_data_ISO10646_Kana.h
deleted file mode 100644
index 69683740c3..0000000000
--- a/Marlin/dogm_font_data_ISO10646_Kana.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- Fontname: ISO10646_Kana
- Copyright: A. Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h= 8 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 8
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t ISO10646_Kana_5x7[2482] U8G_SECTION(".progmem.ISO10646_Kana_5x7") = {
- 0, 6, 9, 0, 254, 7, 1, 145, 3, 32, 32, 255, 255, 8, 255, 7,
- 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
- 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
- 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
- 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
- 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
- 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
- 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
- 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
- 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
- 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
- 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
- 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
- 48, 64, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5,
- 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
- 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
- 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
- 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
- 8, 16, 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0,
- 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144,
- 136, 136, 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
- 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5,
- 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6,
- 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128,
- 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
- 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136,
- 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7,
- 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0,
- 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136,
- 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128,
- 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0,
- 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32,
- 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136,
- 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5,
- 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6,
- 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136,
- 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32,
- 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224,
- 5, 5, 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6, 1,
- 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32, 80,
- 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128, 64,
- 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6, 0,
- 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112, 128,
- 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136, 120,
- 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6, 0,
- 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112, 136,
- 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136, 136,
- 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3, 8,
- 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7, 6,
- 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0, 192,
- 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168, 168,
- 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5, 6,
- 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136, 136,
- 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8, 5,
- 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0, 0,
- 112, 128, 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224, 64, 64,
- 72, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5, 5,
- 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136, 136,
- 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5, 6,
- 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0, 0,
- 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128, 64,
- 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128, 3,
- 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 2, 2, 6,
- 0, 3, 104, 144, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 5, 3, 3, 6, 0, 1,
- 248, 0, 248, 4, 4, 4, 6, 0, 0, 240, 16, 96, 64, 5, 6, 6,
- 6, 0, 0, 248, 8, 40, 48, 32, 64, 3, 4, 4, 6, 1, 0, 32,
- 64, 192, 64, 4, 6, 6, 6, 0, 0, 16, 32, 96, 160, 32, 32, 4,
- 4, 4, 6, 0, 0, 32, 240, 144, 32, 5, 6, 6, 6, 0, 0, 32,
- 248, 136, 8, 16, 32, 3, 4, 4, 6, 1, 0, 224, 64, 64, 224, 5,
- 5, 5, 6, 0, 0, 248, 32, 32, 32, 248, 4, 4, 4, 6, 0, 0,
- 32, 240, 96, 160, 5, 6, 6, 6, 0, 0, 16, 248, 48, 80, 144, 16,
- 5, 6, 6, 6, 0, 0, 64, 248, 72, 72, 72, 144, 5, 8, 8, 6,
- 0, 0, 40, 0, 64, 248, 72, 72, 72, 144, 5, 6, 6, 6, 0, 0,
- 32, 248, 32, 248, 32, 32, 5, 8, 8, 6, 0, 0, 40, 0, 32, 248,
- 32, 248, 32, 32, 4, 5, 5, 6, 0, 0, 112, 144, 16, 32, 192, 5,
- 7, 7, 6, 0, 0, 40, 0, 112, 144, 16, 32, 192, 5, 6, 6, 6,
- 0, 0, 64, 120, 144, 16, 16, 32, 5, 8, 8, 6, 0, 0, 40, 0,
- 64, 120, 144, 16, 16, 32, 5, 5, 5, 6, 0, 0, 248, 8, 8, 8,
- 248, 5, 7, 7, 6, 0, 0, 40, 0, 248, 8, 8, 8, 248, 5, 6,
- 6, 6, 0, 0, 80, 248, 80, 16, 32, 64, 5, 8, 8, 6, 0, 0,
- 40, 0, 80, 248, 80, 16, 32, 64, 5, 5, 5, 6, 0, 0, 192, 8,
- 200, 16, 224, 5, 7, 7, 6, 0, 0, 40, 0, 192, 8, 200, 16, 224,
- 5, 5, 5, 6, 0, 0, 248, 16, 32, 80, 136, 5, 7, 7, 6, 0,
- 0, 40, 0, 248, 16, 32, 80, 136, 5, 6, 6, 6, 0, 0, 64, 248,
- 72, 80, 64, 56, 5, 8, 8, 6, 0, 0, 40, 0, 64, 248, 72, 80,
- 64, 56, 5, 5, 5, 6, 0, 0, 136, 136, 72, 16, 96, 5, 7, 7,
- 6, 0, 0, 40, 0, 136, 136, 72, 16, 96, 5, 5, 5, 6, 0, 0,
- 120, 72, 168, 16, 96, 5, 7, 7, 6, 0, 0, 40, 0, 120, 72, 168,
- 16, 96, 5, 6, 6, 6, 0, 0, 16, 224, 32, 248, 32, 64, 5, 8,
- 8, 6, 0, 0, 40, 0, 16, 224, 32, 248, 32, 64, 5, 4, 4, 6,
- 0, 0, 168, 168, 8, 48, 5, 5, 5, 6, 0, 0, 168, 168, 8, 16,
- 32, 5, 7, 7, 6, 0, 0, 40, 0, 168, 168, 8, 16, 32, 5, 6,
- 6, 6, 0, 0, 112, 0, 248, 32, 32, 64, 5, 8, 8, 6, 0, 0,
- 40, 0, 112, 0, 248, 32, 32, 64, 3, 6, 6, 6, 1, 0, 128, 128,
- 192, 160, 128, 128, 4, 8, 8, 6, 1, 0, 80, 0, 128, 128, 192, 160,
- 128, 128, 5, 6, 6, 6, 0, 0, 32, 248, 32, 32, 64, 128, 5, 5,
- 5, 6, 0, 0, 112, 0, 0, 0, 248, 5, 5, 5, 6, 0, 0, 248,
- 8, 80, 32, 208, 5, 6, 6, 6, 0, 0, 32, 248, 16, 32, 112, 168,
- 3, 6, 6, 6, 1, 0, 32, 32, 32, 32, 64, 128, 5, 5, 5, 6,
- 0, 0, 16, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 40, 0, 16,
- 136, 136, 136, 136, 5, 8, 8, 6, 0, 0, 24, 24, 0, 16, 136, 136,
- 136, 136, 5, 6, 6, 6, 0, 0, 128, 128, 248, 128, 128, 120, 5, 7,
- 7, 6, 0, 0, 40, 128, 128, 248, 128, 128, 120, 5, 7, 7, 6, 0,
- 0, 24, 152, 128, 248, 128, 128, 120, 5, 5, 5, 6, 0, 0, 248, 8,
- 8, 16, 96, 5, 7, 7, 6, 0, 0, 40, 0, 248, 8, 8, 16, 96,
- 5, 8, 8, 6, 0, 0, 24, 24, 0, 248, 8, 8, 16, 96, 5, 4,
- 4, 6, 0, 1, 64, 160, 16, 8, 5, 6, 6, 6, 0, 1, 40, 0,
- 64, 160, 16, 8, 5, 6, 6, 6, 0, 1, 24, 24, 64, 160, 16, 8,
- 5, 6, 6, 6, 0, 0, 32, 248, 32, 168, 168, 32, 5, 8, 8, 6,
- 0, 0, 40, 0, 32, 248, 32, 168, 168, 32, 5, 8, 8, 6, 0, 0,
- 24, 24, 32, 248, 32, 168, 168, 32, 5, 5, 5, 6, 0, 0, 248, 8,
- 80, 32, 16, 4, 5, 5, 6, 1, 0, 224, 0, 224, 0, 240, 5, 5,
- 5, 6, 0, 0, 32, 64, 136, 248, 8, 5, 5, 5, 6, 0, 0, 8,
- 40, 16, 40, 192, 5, 5, 5, 6, 0, 0, 248, 64, 248, 64, 56, 5,
- 4, 4, 6, 0, 0, 64, 248, 80, 64, 5, 6, 6, 6, 0, 0, 64,
- 248, 72, 80, 64, 64, 4, 4, 4, 6, 0, 0, 96, 32, 32, 240, 5,
- 5, 5, 6, 0, 0, 112, 16, 16, 16, 248, 4, 5, 5, 6, 0, 0,
- 240, 16, 240, 16, 240, 5, 5, 5, 6, 0, 0, 248, 8, 248, 8, 248,
- 5, 6, 6, 6, 0, 0, 112, 0, 248, 8, 16, 32, 4, 6, 6, 6,
- 0, 0, 144, 144, 144, 144, 16, 32, 5, 5, 5, 6, 0, 0, 32, 160,
- 168, 168, 176, 4, 5, 5, 6, 0, 0, 128, 128, 144, 160, 192, 5, 5,
- 5, 6, 0, 0, 248, 136, 136, 136, 248, 4, 4, 4, 6, 0, 0, 240,
- 144, 16, 32, 5, 5, 5, 6, 0, 0, 248, 136, 8, 16, 32, 5, 6,
- 6, 6, 0, 0, 16, 248, 80, 80, 248, 16, 5, 5, 5, 6, 0, 0,
- 248, 8, 48, 32, 248, 5, 5, 5, 6, 0, 0, 248, 8, 248, 8, 48,
- 5, 5, 5, 6, 0, 0, 192, 8, 8, 16, 224, 5, 8, 8, 6, 0,
- 0, 40, 0, 32, 248, 136, 8, 16, 32, 4, 4, 4, 6, 0, 0, 64,
- 240, 80, 160, 4, 4, 4, 6, 0, 0, 64, 240, 32, 64, 5, 7, 7,
- 6, 0, 0, 40, 0, 248, 136, 8, 16, 96, 5, 8, 8, 6, 0, 0,
- 40, 0, 16, 248, 80, 80, 248, 16, 5, 7, 7, 6, 0, 0, 40, 0,
- 248, 8, 48, 32, 248, 5, 7, 7, 6, 0, 0, 40, 0, 248, 8, 248,
- 8, 48, 2, 2, 2, 6, 2, 2, 192, 192, 5, 1, 1, 6, 0, 2,
- 248, 5, 4, 4, 6, 0, 1, 128, 96, 16, 8, 5, 5, 5, 6, 0,
- 1, 40, 128, 96, 16, 8, 5, 6, 6, 6, 0, 0, 248, 8, 8, 8,
- 8, 8
-};
diff --git a/Marlin/dogm_font_data_ISO10646_SK.h b/Marlin/dogm_font_data_ISO10646_SK.h
deleted file mode 100644
index 7a460858d8..0000000000
--- a/Marlin/dogm_font_data_ISO10646_SK.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- Fontname: ISO10646_SK
- Copyright: A. Hardtung, modified by Roman Moravcik
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 6 h= 9 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 9
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t ISO10646_SK[2203] U8G_SECTION(".progmem.ISO10646_SK") = {
- 0,6,9,0,254,7,1,146,3,33,32,255,255,8,255,7,
- 255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128,
- 128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
- 0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
- 120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
- 64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
- 2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
- 64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
- 32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
- 5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
- 64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
- 192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
- 0,0,112,136,136,136,136,136,112,3,7,7,6,1,0,64,
- 192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
- 128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
- 5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
- 6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
- 112,128,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
- 32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
- 112,5,7,7,6,0,0,112,136,136,120,8,8,112,2,5,
- 5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
- 192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
- 32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1,
- 0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
- 8,16,32,0,32,5,7,7,6,0,0,112,136,8,104,168,
- 168,112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,
- 7,7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,
- 0,0,112,136,128,128,128,136,112,5,7,7,6,0,0,240,
- 136,136,136,136,136,240,5,7,7,6,0,0,248,128,128,240,
- 128,128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,
- 5,7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,
- 6,0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,
- 128,128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,
- 16,16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,
- 136,5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,
- 7,6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,
- 0,136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,
- 136,136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,
- 128,128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,
- 7,7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,
- 0,0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,
- 32,32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,
- 136,136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,
- 5,7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,
- 6,0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,
- 136,136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,
- 32,64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,
- 224,5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,
- 1,0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,
- 80,136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,
- 64,5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,
- 0,0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,
- 128,128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,
- 120,5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,
- 0,0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,
- 136,136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,
- 136,136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,
- 8,8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,
- 6,0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,
- 192,64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,
- 168,168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,
- 6,0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,
- 136,240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,
- 5,5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,
- 0,112,128,112,8,240,4,7,7,6,0,0,64,64,224,64,
- 64,64,48,5,5,5,6,0,0,136,136,136,152,104,5,5,
- 5,6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,
- 136,168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,
- 6,6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,
- 0,248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,
- 64,64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,
- 3,7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,
- 6,0,2,104,144,0,0,0,6,0,0,5,8,8,6,0,
- 0,16,32,112,136,136,248,136,136,5,8,8,6,0,0,80,
- 0,112,136,136,248,136,136,5,8,8,6,0,0,8,16,248,
- 128,128,240,128,248,3,8,8,6,1,0,32,64,224,64,64,
- 64,64,224,5,8,8,6,0,0,16,32,112,136,136,136,136,
- 112,5,8,8,6,0,0,32,80,112,136,136,136,136,112,5,
- 8,8,6,0,0,16,32,136,136,136,136,136,112,5,8,8,
- 6,0,0,16,32,136,136,80,32,32,32,5,8,8,6,0,
- 0,16,32,0,112,8,120,136,120,5,7,7,6,0,0,80,
- 0,112,8,120,136,120,5,8,8,6,0,0,16,32,0,112,
- 136,248,128,112,2,8,8,6,2,0,64,128,0,128,128,128,
- 128,128,5,8,8,6,0,0,16,32,0,112,136,136,136,112,
- 5,8,8,6,0,0,32,80,0,112,136,136,136,112,5,8,
- 8,6,0,0,16,32,0,136,136,136,152,104,5,9,9,6,
- 0,255,16,32,0,136,136,136,120,8,112,5,8,8,6,0,
- 0,80,32,112,136,128,128,136,112,5,8,8,6,0,0,80,
- 32,0,112,128,128,136,112,5,8,8,6,0,0,80,32,240,
- 136,136,136,136,240,6,8,8,6,0,0,4,20,24,112,144,
- 144,144,112,5,8,8,6,0,0,16,32,128,128,128,128,128,
- 248,3,8,8,6,1,0,32,64,0,192,64,64,64,224,5,
- 8,8,6,0,0,16,144,160,128,128,128,128,248,5,8,8,
- 6,1,0,8,200,80,64,64,64,64,224,5,8,8,6,0,
- 0,80,32,136,200,168,152,136,136,5,8,8,6,0,0,80,
- 32,0,176,200,136,136,136,5,8,8,6,0,0,16,32,240,
- 136,240,160,144,136,5,8,8,6,0,0,16,32,0,176,200,
- 128,128,128,5,8,8,6,0,0,80,32,120,128,128,112,8,
- 240,5,8,8,6,0,0,80,32,0,112,128,112,8,240,5,
- 8,8,6,0,0,80,32,248,32,32,32,32,32,6,8,8,
- 6,0,0,4,68,72,224,64,64,64,48,5,8,8,6,0,
- 0,80,32,248,8,48,64,128,248,5,8,8,6,0,0,80,
- 32,0,248,16,32,64,248,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
- 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
- 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
- 0,0,6,0,0,0,0,0,6,0,0};
diff --git a/Marlin/dogm_font_data_Marlin_symbols.h b/Marlin/dogm_font_data_Marlin_symbols.h
deleted file mode 100644
index ad9b983b20..0000000000
--- a/Marlin/dogm_font_data_Marlin_symbols.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- Fontname: Marlin_symbols
- Copyright: Created with Fony 1.4.7
- Capital A Height: 0, '1' Height: 0
- Calculated Max Values w= 5 h=10 x= 0 y= 3 dx= 6 dy= 0 ascent= 8 len=10
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-2 dx= 0 dy= 0
- Pure Font ascent = 0 descent= 0
- X Font ascent = 0 descent= 0
- Max Font ascent = 8 descent=-2
-*/
-#include
-const u8g_fntpgm_uint8_t Marlin_symbols[140] U8G_SECTION(".progmem.Marlin_symbols") = {
- 0, 6, 9, 0, 254, 0, 0, 0, 0, 0, 1, 9, 0, 8, 254, 0,
- 0, 5, 8, 8, 6, 0, 0, 64, 240, 200, 136, 136, 152, 120, 16, 5,
- 8, 8, 6, 0, 0, 192, 248, 136, 136, 136, 136, 136, 248, 5, 5, 5,
- 6, 0, 1, 32, 48, 248, 48, 32, 5, 8, 8, 6, 0, 0, 32, 112,
- 248, 32, 32, 32, 32, 224, 5, 9, 9, 6, 0, 255, 32, 112, 168, 168,
- 184, 136, 136, 112, 32, 5, 9, 9, 6, 0, 255, 224, 128, 192, 176, 168,
- 40, 48, 40, 40, 5, 9, 9, 6, 0, 255, 248, 168, 136, 136, 136, 136,
- 136, 168, 248, 5, 10, 10, 6, 0, 254, 32, 80, 80, 80, 80, 136, 168,
- 168, 136, 112, 3, 3, 3, 6, 0, 3, 64, 160, 64
-};
diff --git a/Marlin/endstops.cpp b/Marlin/endstops.cpp
deleted file mode 100644
index f51a11b8af..0000000000
--- a/Marlin/endstops.cpp
+++ /dev/null
@@ -1,544 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- * endstops.cpp - A singleton object to manage endstops
- */
-
-#include "Marlin.h"
-#include "cardreader.h"
-#include "endstops.h"
-#include "temperature.h"
-#include "stepper.h"
-#include "ultralcd.h"
-
-// TEST_ENDSTOP: test the old and the current status of an endstop
-#define TEST_ENDSTOP(ENDSTOP) (TEST(current_endstop_bits & old_endstop_bits, ENDSTOP))
-
-Endstops endstops;
-
-// public:
-
-bool Endstops::enabled, Endstops::enabled_globally; // Initialized by settings.load()
-volatile char Endstops::endstop_hit_bits; // use X_MIN, Y_MIN, Z_MIN and Z_MIN_PROBE as BIT value
-
-Endstops::esbits_t Endstops::current_endstop_bits = 0,
- Endstops::old_endstop_bits = 0;
-
-#if HAS_BED_PROBE
- volatile bool Endstops::z_probe_enabled = false;
-#endif
-
-// Initialized by settings.load()
-#if ENABLED(X_DUAL_ENDSTOPS)
- float Endstops::x_endstop_adj;
-#endif
-#if ENABLED(Y_DUAL_ENDSTOPS)
- float Endstops::y_endstop_adj;
-#endif
-#if ENABLED(Z_DUAL_ENDSTOPS)
- float Endstops::z_endstop_adj;
-#endif
-
-/**
- * Class and Instance Methods
- */
-
-void Endstops::init() {
-
- #if HAS_X_MIN
- #if ENABLED(ENDSTOPPULLUP_XMIN)
- SET_INPUT_PULLUP(X_MIN_PIN);
- #else
- SET_INPUT(X_MIN_PIN);
- #endif
- #endif
-
- #if HAS_X2_MIN
- #if ENABLED(ENDSTOPPULLUP_XMIN)
- SET_INPUT_PULLUP(X2_MIN_PIN);
- #else
- SET_INPUT(X2_MIN_PIN);
- #endif
- #endif
-
- #if HAS_Y_MIN
- #if ENABLED(ENDSTOPPULLUP_YMIN)
- SET_INPUT_PULLUP(Y_MIN_PIN);
- #else
- SET_INPUT(Y_MIN_PIN);
- #endif
- #endif
-
- #if HAS_Y2_MIN
- #if ENABLED(ENDSTOPPULLUP_YMIN)
- SET_INPUT_PULLUP(Y2_MIN_PIN);
- #else
- SET_INPUT(Y2_MIN_PIN);
- #endif
- #endif
-
- #if HAS_Z_MIN
- #if ENABLED(ENDSTOPPULLUP_ZMIN)
- SET_INPUT_PULLUP(Z_MIN_PIN);
- #else
- SET_INPUT(Z_MIN_PIN);
- #endif
- #endif
-
- #if HAS_Z2_MIN
- #if ENABLED(ENDSTOPPULLUP_ZMIN)
- SET_INPUT_PULLUP(Z2_MIN_PIN);
- #else
- SET_INPUT(Z2_MIN_PIN);
- #endif
- #endif
-
- #if HAS_X_MAX
- #if ENABLED(ENDSTOPPULLUP_XMAX)
- SET_INPUT_PULLUP(X_MAX_PIN);
- #else
- SET_INPUT(X_MAX_PIN);
- #endif
- #endif
-
- #if HAS_X2_MAX
- #if ENABLED(ENDSTOPPULLUP_XMAX)
- SET_INPUT_PULLUP(X2_MAX_PIN);
- #else
- SET_INPUT(X2_MAX_PIN);
- #endif
- #endif
-
- #if HAS_Y_MAX
- #if ENABLED(ENDSTOPPULLUP_YMAX)
- SET_INPUT_PULLUP(Y_MAX_PIN);
- #else
- SET_INPUT(Y_MAX_PIN);
- #endif
- #endif
-
- #if HAS_Y2_MAX
- #if ENABLED(ENDSTOPPULLUP_YMAX)
- SET_INPUT_PULLUP(Y2_MAX_PIN);
- #else
- SET_INPUT(Y2_MAX_PIN);
- #endif
- #endif
-
- #if HAS_Z_MAX
- #if ENABLED(ENDSTOPPULLUP_ZMAX)
- SET_INPUT_PULLUP(Z_MAX_PIN);
- #else
- SET_INPUT(Z_MAX_PIN);
- #endif
- #endif
-
- #if HAS_Z2_MAX
- #if ENABLED(ENDSTOPPULLUP_ZMAX)
- SET_INPUT_PULLUP(Z2_MAX_PIN);
- #else
- SET_INPUT(Z2_MAX_PIN);
- #endif
- #endif
-
- #if ENABLED(Z_MIN_PROBE_ENDSTOP)
- #if ENABLED(ENDSTOPPULLUP_ZMIN_PROBE)
- SET_INPUT_PULLUP(Z_MIN_PROBE_PIN);
- #else
- SET_INPUT(Z_MIN_PROBE_PIN);
- #endif
- #endif
-
-} // Endstops::init
-
-void Endstops::report_state() {
- if (endstop_hit_bits) {
- #if ENABLED(ULTRA_LCD)
- char chrX = ' ', chrY = ' ', chrZ = ' ', chrP = ' ';
- #define _SET_STOP_CHAR(A,C) (chr## A = C)
- #else
- #define _SET_STOP_CHAR(A,C) ;
- #endif
-
- #define _ENDSTOP_HIT_ECHO(A,C) do{ \
- SERIAL_ECHOPAIR(" " STRINGIFY(A) ":", stepper.triggered_position_mm(A ##_AXIS)); \
- _SET_STOP_CHAR(A,C); }while(0)
-
- #define _ENDSTOP_HIT_TEST(A,C) \
- if (TEST(endstop_hit_bits, A ##_MIN) || TEST(endstop_hit_bits, A ##_MAX)) \
- _ENDSTOP_HIT_ECHO(A,C)
-
- #define ENDSTOP_HIT_TEST_X() _ENDSTOP_HIT_TEST(X,'X')
- #define ENDSTOP_HIT_TEST_Y() _ENDSTOP_HIT_TEST(Y,'Y')
- #define ENDSTOP_HIT_TEST_Z() _ENDSTOP_HIT_TEST(Z,'Z')
-
- SERIAL_ECHO_START();
- SERIAL_ECHOPGM(MSG_ENDSTOPS_HIT);
- ENDSTOP_HIT_TEST_X();
- ENDSTOP_HIT_TEST_Y();
- ENDSTOP_HIT_TEST_Z();
-
- #if ENABLED(Z_MIN_PROBE_ENDSTOP)
- #define P_AXIS Z_AXIS
- if (TEST(endstop_hit_bits, Z_MIN_PROBE)) _ENDSTOP_HIT_ECHO(P, 'P');
- #endif
- SERIAL_EOL();
-
- #if ENABLED(ULTRA_LCD)
- lcd_status_printf_P(0, PSTR(MSG_LCD_ENDSTOPS " %c %c %c %c"), chrX, chrY, chrZ, chrP);
- #endif
-
- hit_on_purpose();
-
- #if ENABLED(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) && ENABLED(SDSUPPORT)
- if (stepper.abort_on_endstop_hit) {
- card.sdprinting = false;
- card.closefile();
- quickstop_stepper();
- thermalManager.disable_all_heaters(); // switch off all heaters.
- }
- #endif
- }
-} // Endstops::report_state
-
-void Endstops::M119() {
- SERIAL_PROTOCOLLNPGM(MSG_M119_REPORT);
- #define ES_REPORT(AXIS) do{ \
- SERIAL_PROTOCOLPGM(MSG_##AXIS); \
- SERIAL_PROTOCOLLN(((READ(AXIS##_PIN)^AXIS##_ENDSTOP_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN)); \
- }while(0)
- #if HAS_X_MIN
- ES_REPORT(X_MIN);
- #endif
- #if HAS_X2_MIN
- ES_REPORT(X2_MIN);
- #endif
- #if HAS_X_MAX
- ES_REPORT(X_MAX);
- #endif
- #if HAS_X2_MAX
- ES_REPORT(X2_MAX);
- #endif
- #if HAS_Y_MIN
- ES_REPORT(Y_MIN);
- #endif
- #if HAS_Y2_MIN
- ES_REPORT(Y2_MIN);
- #endif
- #if HAS_Y_MAX
- ES_REPORT(Y_MAX);
- #endif
- #if HAS_Y2_MAX
- ES_REPORT(Y2_MAX);
- #endif
- #if HAS_Z_MIN
- ES_REPORT(Z_MIN);
- #endif
- #if HAS_Z2_MIN
- ES_REPORT(Z2_MIN);
- #endif
- #if HAS_Z_MAX
- ES_REPORT(Z_MAX);
- #endif
- #if HAS_Z2_MAX
- ES_REPORT(Z2_MAX);
- #endif
- #if ENABLED(Z_MIN_PROBE_ENDSTOP)
- SERIAL_PROTOCOLPGM(MSG_Z_PROBE);
- SERIAL_PROTOCOLLN(((READ(Z_MIN_PROBE_PIN)^Z_MIN_PROBE_ENDSTOP_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN));
- #endif
- #if ENABLED(FILAMENT_RUNOUT_SENSOR)
- SERIAL_PROTOCOLPGM(MSG_FILAMENT_RUNOUT_SENSOR);
- SERIAL_PROTOCOLLN(((READ(FIL_RUNOUT_PIN)^FIL_RUNOUT_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN));
- #endif
-} // Endstops::M119
-
-#if ENABLED(X_DUAL_ENDSTOPS)
- void Endstops::test_dual_x_endstops(const EndstopEnum es1, const EndstopEnum es2) {
- const byte x_test = TEST_ENDSTOP(es1) | (TEST_ENDSTOP(es2) << 1); // bit 0 for X, bit 1 for X2
- if (x_test && stepper.current_block->steps[X_AXIS] > 0) {
- SBI(endstop_hit_bits, X_MIN);
- if (!stepper.performing_homing || (x_test == 0x3)) //if not performing home or if both endstops were trigged during homing...
- stepper.kill_current_block();
- }
- }
-#endif
-#if ENABLED(Y_DUAL_ENDSTOPS)
- void Endstops::test_dual_y_endstops(const EndstopEnum es1, const EndstopEnum es2) {
- const byte y_test = TEST_ENDSTOP(es1) | (TEST_ENDSTOP(es2) << 1); // bit 0 for Y, bit 1 for Y2
- if (y_test && stepper.current_block->steps[Y_AXIS] > 0) {
- SBI(endstop_hit_bits, Y_MIN);
- if (!stepper.performing_homing || (y_test == 0x3)) //if not performing home or if both endstops were trigged during homing...
- stepper.kill_current_block();
- }
- }
-#endif
-#if ENABLED(Z_DUAL_ENDSTOPS)
- void Endstops::test_dual_z_endstops(const EndstopEnum es1, const EndstopEnum es2) {
- const byte z_test = TEST_ENDSTOP(es1) | (TEST_ENDSTOP(es2) << 1); // bit 0 for Z, bit 1 for Z2
- if (z_test && stepper.current_block->steps[Z_AXIS] > 0) {
- SBI(endstop_hit_bits, Z_MIN);
- if (!stepper.performing_homing || (z_test == 0x3)) //if not performing home or if both endstops were trigged during homing...
- stepper.kill_current_block();
- }
- }
-#endif
-
-// Check endstops - Called from ISR!
-void Endstops::update() {
-
- #define _ENDSTOP(AXIS, MINMAX) AXIS ##_## MINMAX
- #define _ENDSTOP_PIN(AXIS, MINMAX) AXIS ##_## MINMAX ##_PIN
- #define _ENDSTOP_INVERTING(AXIS, MINMAX) AXIS ##_## MINMAX ##_ENDSTOP_INVERTING
- #define _ENDSTOP_HIT(AXIS, MINMAX) SBI(endstop_hit_bits, _ENDSTOP(AXIS, MINMAX))
-
- #define SET_BIT(N,B,TF) do{ if (TF) SBI(N,B); else CBI(N,B); }while(0)
- // UPDATE_ENDSTOP_BIT: set the current endstop bits for an endstop to its status
- #define UPDATE_ENDSTOP_BIT(AXIS, MINMAX) SET_BIT(current_endstop_bits, _ENDSTOP(AXIS, MINMAX), (READ(_ENDSTOP_PIN(AXIS, MINMAX)) != _ENDSTOP_INVERTING(AXIS, MINMAX)))
- // COPY_BIT: copy the value of SRC_BIT to DST_BIT in DST
- #define COPY_BIT(DST, SRC_BIT, DST_BIT) SET_BIT(DST, DST_BIT, TEST(DST, SRC_BIT))
-
- #define UPDATE_ENDSTOP(AXIS,MINMAX) do { \
- UPDATE_ENDSTOP_BIT(AXIS, MINMAX); \
- if (TEST_ENDSTOP(_ENDSTOP(AXIS, MINMAX))) { \
- _ENDSTOP_HIT(AXIS, MINMAX); \
- stepper.endstop_triggered(_AXIS(AXIS)); \
- } \
- }while(0)
-
- #if ENABLED(G38_PROBE_TARGET) && PIN_EXISTS(Z_MIN_PROBE) && !(CORE_IS_XY || CORE_IS_XZ)
- // If G38 command is active check Z_MIN_PROBE for ALL movement
- if (G38_move) {
- UPDATE_ENDSTOP_BIT(Z, MIN_PROBE);
- if (TEST_ENDSTOP(_ENDSTOP(Z, MIN_PROBE))) {
- if (stepper.current_block->steps[_AXIS(X)] > 0) { _ENDSTOP_HIT(X, MIN); stepper.endstop_triggered(_AXIS(X)); }
- else if (stepper.current_block->steps[_AXIS(Y)] > 0) { _ENDSTOP_HIT(Y, MIN); stepper.endstop_triggered(_AXIS(Y)); }
- else if (stepper.current_block->steps[_AXIS(Z)] > 0) { _ENDSTOP_HIT(Z, MIN); stepper.endstop_triggered(_AXIS(Z)); }
- G38_endstop_hit = true;
- }
- }
- #endif
-
- /**
- * Define conditions for checking endstops
- */
-
- #if IS_CORE
- #define S_(N) stepper.current_block->steps[CORE_AXIS_##N]
- #define D_(N) stepper.motor_direction(CORE_AXIS_##N)
- #endif
-
- #if CORE_IS_XY || CORE_IS_XZ
- /**
- * Head direction in -X axis for CoreXY and CoreXZ bots.
- *
- * If steps differ, both axes are moving.
- * If DeltaA == -DeltaB, the movement is only in the 2nd axis (Y or Z, handled below)
- * If DeltaA == DeltaB, the movement is only in the 1st axis (X)
- */
- #if ENABLED(COREXY) || ENABLED(COREXZ)
- #define X_CMP ==
- #else
- #define X_CMP !=
- #endif
- #define X_MOVE_TEST ( S_(1) != S_(2) || (S_(1) > 0 && D_(1) X_CMP D_(2)) )
- #define X_AXIS_HEAD X_HEAD
- #else
- #define X_MOVE_TEST stepper.current_block->steps[X_AXIS] > 0
- #define X_AXIS_HEAD X_AXIS
- #endif
-
- #if CORE_IS_XY || CORE_IS_YZ
- /**
- * Head direction in -Y axis for CoreXY / CoreYZ bots.
- *
- * If steps differ, both axes are moving
- * If DeltaA == DeltaB, the movement is only in the 1st axis (X or Y)
- * If DeltaA == -DeltaB, the movement is only in the 2nd axis (Y or Z)
- */
- #if ENABLED(COREYX) || ENABLED(COREYZ)
- #define Y_CMP ==
- #else
- #define Y_CMP !=
- #endif
- #define Y_MOVE_TEST ( S_(1) != S_(2) || (S_(1) > 0 && D_(1) Y_CMP D_(2)) )
- #define Y_AXIS_HEAD Y_HEAD
- #else
- #define Y_MOVE_TEST stepper.current_block->steps[Y_AXIS] > 0
- #define Y_AXIS_HEAD Y_AXIS
- #endif
-
- #if CORE_IS_XZ || CORE_IS_YZ
- /**
- * Head direction in -Z axis for CoreXZ or CoreYZ bots.
- *
- * If steps differ, both axes are moving
- * If DeltaA == DeltaB, the movement is only in the 1st axis (X or Y, already handled above)
- * If DeltaA == -DeltaB, the movement is only in the 2nd axis (Z)
- */
- #if ENABLED(COREZX) || ENABLED(COREZY)
- #define Z_CMP ==
- #else
- #define Z_CMP !=
- #endif
- #define Z_MOVE_TEST ( S_(1) != S_(2) || (S_(1) > 0 && D_(1) Z_CMP D_(2)) )
- #define Z_AXIS_HEAD Z_HEAD
- #else
- #define Z_MOVE_TEST stepper.current_block->steps[Z_AXIS] > 0
- #define Z_AXIS_HEAD Z_AXIS
- #endif
-
- // With Dual X, endstops are only checked in the homing direction for the active extruder
- #if ENABLED(DUAL_X_CARRIAGE)
- #define E0_ACTIVE stepper.current_block->active_extruder == 0
- #define X_MIN_TEST ((X_HOME_DIR < 0 && E0_ACTIVE) || (X2_HOME_DIR < 0 && !E0_ACTIVE))
- #define X_MAX_TEST ((X_HOME_DIR > 0 && E0_ACTIVE) || (X2_HOME_DIR > 0 && !E0_ACTIVE))
- #else
- #define X_MIN_TEST true
- #define X_MAX_TEST true
- #endif
-
- /**
- * Check and update endstops according to conditions
- */
- if (stepper.current_block) {
-
- if (X_MOVE_TEST) {
- if (stepper.motor_direction(X_AXIS_HEAD)) { // -direction
- #if HAS_X_MIN
- #if ENABLED(X_DUAL_ENDSTOPS)
- UPDATE_ENDSTOP_BIT(X, MIN);
- #if HAS_X2_MIN
- UPDATE_ENDSTOP_BIT(X2, MIN);
- #else
- COPY_BIT(current_endstop_bits, X_MIN, X2_MIN);
- #endif
- test_dual_x_endstops(X_MIN, X2_MIN);
- #else
- if (X_MIN_TEST) UPDATE_ENDSTOP(X, MIN);
- #endif
- #endif
- }
- else { // +direction
- #if HAS_X_MAX
- #if ENABLED(X_DUAL_ENDSTOPS)
- UPDATE_ENDSTOP_BIT(X, MAX);
- #if HAS_X2_MAX
- UPDATE_ENDSTOP_BIT(X2, MAX);
- #else
- COPY_BIT(current_endstop_bits, X_MAX, X2_MAX);
- #endif
- test_dual_x_endstops(X_MAX, X2_MAX);
- #else
- if (X_MAX_TEST) UPDATE_ENDSTOP(X, MAX);
- #endif
- #endif
- }
- }
-
- if (Y_MOVE_TEST) {
- if (stepper.motor_direction(Y_AXIS_HEAD)) { // -direction
- #if HAS_Y_MIN
- #if ENABLED(Y_DUAL_ENDSTOPS)
- UPDATE_ENDSTOP_BIT(Y, MIN);
- #if HAS_Y2_MIN
- UPDATE_ENDSTOP_BIT(Y2, MIN);
- #else
- COPY_BIT(current_endstop_bits, Y_MIN, Y2_MIN);
- #endif
- test_dual_y_endstops(Y_MIN, Y2_MIN);
- #else
- UPDATE_ENDSTOP(Y, MIN);
- #endif
- #endif
- }
- else { // +direction
- #if HAS_Y_MAX
- #if ENABLED(Y_DUAL_ENDSTOPS)
- UPDATE_ENDSTOP_BIT(Y, MAX);
- #if HAS_Y2_MAX
- UPDATE_ENDSTOP_BIT(Y2, MAX);
- #else
- COPY_BIT(current_endstop_bits, Y_MAX, Y2_MAX);
- #endif
- test_dual_y_endstops(Y_MAX, Y2_MAX);
- #else
- UPDATE_ENDSTOP(Y, MAX);
- #endif
- #endif
- }
- }
-
- if (Z_MOVE_TEST) {
- if (stepper.motor_direction(Z_AXIS_HEAD)) { // Z -direction. Gantry down, bed up.
- #if HAS_Z_MIN
- #if ENABLED(Z_DUAL_ENDSTOPS)
- UPDATE_ENDSTOP_BIT(Z, MIN);
- #if HAS_Z2_MIN
- UPDATE_ENDSTOP_BIT(Z2, MIN);
- #else
- COPY_BIT(current_endstop_bits, Z_MIN, Z2_MIN);
- #endif
- test_dual_z_endstops(Z_MIN, Z2_MIN);
- #else
- #if ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
- if (z_probe_enabled) UPDATE_ENDSTOP(Z, MIN);
- #else
- UPDATE_ENDSTOP(Z, MIN);
- #endif
- #endif
- #endif
-
- // When closing the gap check the enabled probe
- #if ENABLED(Z_MIN_PROBE_ENDSTOP)
- if (z_probe_enabled) {
- UPDATE_ENDSTOP(Z, MIN_PROBE);
- if (TEST_ENDSTOP(Z_MIN_PROBE)) SBI(endstop_hit_bits, Z_MIN_PROBE);
- }
- #endif
- }
- else { // Z +direction. Gantry up, bed down.
- #if HAS_Z_MAX
- // Check both Z dual endstops
- #if ENABLED(Z_DUAL_ENDSTOPS)
- UPDATE_ENDSTOP_BIT(Z, MAX);
- #if HAS_Z2_MAX
- UPDATE_ENDSTOP_BIT(Z2, MAX);
- #else
- COPY_BIT(current_endstop_bits, Z_MAX, Z2_MAX);
- #endif
- test_dual_z_endstops(Z_MAX, Z2_MAX);
- // If this pin is not hijacked for the bed probe
- // then it belongs to the Z endstop
- #elif DISABLED(Z_MIN_PROBE_ENDSTOP) || Z_MAX_PIN != Z_MIN_PROBE_PIN
- UPDATE_ENDSTOP(Z, MAX);
- #endif
- #endif
- }
- }
-
- } // stepper.current_block
-
- old_endstop_bits = current_endstop_bits;
-
-} // Endstops::update()
diff --git a/Marlin/enum.h b/Marlin/enum.h
deleted file mode 100644
index 378e47f320..0000000000
--- a/Marlin/enum.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/**
- * 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 .
- *
- */
-
-#ifndef __ENUM_H__
-#define __ENUM_H__
-
-#include "MarlinConfig.h"
-
-/**
- * Axis indices as enumerated constants
- *
- * Special axis:
- * - A_AXIS and B_AXIS are used by COREXY printers
- * - X_HEAD and Y_HEAD is used for systems that don't have a 1:1 relationship
- * between X_AXIS and X Head movement, like CoreXY bots
- */
-enum AxisEnum : unsigned char {
- X_AXIS = 0,
- A_AXIS = 0,
- Y_AXIS = 1,
- B_AXIS = 1,
- Z_AXIS = 2,
- C_AXIS = 2,
- E_AXIS = 3,
- X_HEAD = 4,
- Y_HEAD = 5,
- Z_HEAD = 6,
- ALL_AXES = 0xFE,
- NO_AXIS = 0xFF
-};
-
-#define LOOP_S_LE_N(VAR, S, N) for (uint8_t VAR=S; VAR<=N; VAR++)
-#define LOOP_S_L_N(VAR, S, N) for (uint8_t VAR=S; VAR.
- *
- */
-
-#include "MarlinConfig.h"
-#include "parser.h"
-
-#if ENABLED(AUTO_BED_LEVELING_UBL) || ENABLED(M100_FREE_MEMORY_WATCHER) || ENABLED(DEBUG_GCODE_PARSER)
-
-#include "Marlin.h"
-#include "hex_print_routines.h"
-
-static char _hex[7] = "0x0000";
-
-char* hex_byte(const uint8_t b) {
- _hex[4] = hex_nybble(b >> 4);
- _hex[5] = hex_nybble(b);
- return &_hex[4];
-}
-
-char* hex_word(const uint16_t w) {
- _hex[2] = hex_nybble(w >> 12);
- _hex[3] = hex_nybble(w >> 8);
- _hex[4] = hex_nybble(w >> 4);
- _hex[5] = hex_nybble(w);
- return &_hex[2];
-}
-
-char* hex_address(const void * const w) {
- (void)hex_word((uint16_t)w);
- return _hex;
-}
-
-void print_hex_nybble(const uint8_t n) { SERIAL_CHAR(hex_nybble(n)); }
-void print_hex_byte(const uint8_t b) { SERIAL_ECHO(hex_byte(b)); }
-void print_hex_word(const uint16_t w) { SERIAL_ECHO(hex_word(w)); }
-void print_hex_address(const void * const w) { SERIAL_ECHO(hex_address(w)); }
-
-#endif // AUTO_BED_LEVELING_UBL || M100_FREE_MEMORY_WATCHER || DEBUG_GCODE_PARSER
diff --git a/Marlin/language_cn.h b/Marlin/language_cn.h
deleted file mode 100644
index 96c6f666d5..0000000000
--- a/Marlin/language_cn.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- * Chinese
- *
- * LCD Menu Messages
- * See also http://marlinfw.org/docs/development/lcd_language.html
- *
- */
-#ifndef LANGUAGE_CN_H
-#define LANGUAGE_CN_H
-
-#define DISPLAY_CHARSET_ISO10646_CN
-#define CHARSIZE 2
-
-#define WELCOME_MSG "\xa4\xa5\xa6\xa7"
-#define MSG_SD_INSERTED "\xa8\xa9\xaa\xab"
-#define MSG_SD_REMOVED "\xa8\xa9\xac\xad"
-#define MSG_MAIN "\xae\xaf\xb0"
-#define MSG_AUTOSTART "\xb1\xb2\xb3\xb4"
-#define MSG_DISABLE_STEPPERS "\xb5\xb6\xb7\xb8\xb9\xba"
-#define MSG_AUTO_HOME "\xbb\xbc\xbd"
-#define MSG_LEVEL_BED_HOMING "Homing XYZ"
-#define MSG_LEVEL_BED_WAITING "Click to Begin"
-#define MSG_LEVEL_BED_DONE "Leveling Done!"
-#define MSG_SET_HOME_OFFSETS "\xbe\xbf\xbb\xbc\xbd\xc0\xc1"
-#define MSG_HOME_OFFSETS_APPLIED "Offsets applied"
-#define MSG_SET_ORIGIN "\xbe\xbf\xbc\xbd"
-#define MSG_PREHEAT_1 "\xc3\xc4 PLA"
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 " "
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 " \xc5\xc6"
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 " \xc4\xc7"
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 " \xbe\xbf"
-#define MSG_PREHEAT_2 "\xc3\xc4 ABS"
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 " "
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 " \xc5\xc6"
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 " \xbe\xc6"
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 " \xbe\xbf"
-#define MSG_COOLDOWN "\xc8\xc9"
-#define MSG_SWITCH_PS_ON "\xb9\xcb\xca\xb3"
-#define MSG_SWITCH_PS_OFF "\xb9\xcb\xb5\xb6"
-#define MSG_EXTRUDE "\xcc\xad"
-#define MSG_RETRACT "\xbb\xcd"
-#define MSG_MOVE_AXIS "\xc1\xb2\xce"
-#define MSG_BED_LEVELING "\xcf\xe0\xc4\xc7"
-#define MSG_LEVEL_BED "\xcf\xe0\xc4\xc7"
-#define MSG_MOVE_X "\xc1\xb2 X"
-#define MSG_MOVE_Y "\xc1\xb2 Y"
-#define MSG_MOVE_Z "\xc1\xb2 Z"
-#define MSG_MOVE_E "\xcc\xad\xba"
-#define MSG_MOVE_01MM "\xc1\xb2 0.1mm"
-#define MSG_MOVE_1MM "\xc1\xb2 1mm"
-#define MSG_MOVE_10MM "\xc1\xb2 10mm"
-#define MSG_SPEED "\xd1\xd2"
-#define MSG_NOZZLE "\xd3\xd4"
-#define MSG_BED "\xc4\xc7"
-#define MSG_FAN_SPEED "\xd5\xd6\xd1\xd2"
-#define MSG_FLOW "\xcc\xad\xd1\xd2"
-#define MSG_CONTROL "\xd8\xd9"
-#define MSG_MIN LCD_STR_THERMOMETER " \xda\xdb"
-#define MSG_MAX LCD_STR_THERMOMETER " \xda\xdc"
-#define MSG_FACTOR LCD_STR_THERMOMETER " \xdd\xde"
-#define MSG_AUTOTEMP "\xb1\xb2\xd8\xc9"
-#define MSG_ON "\xb3 " // intentional space to shift wide symbol to the left
-#define MSG_OFF "\xb5 " // intentional space to shift wide symbol to the left
-#define MSG_PID_P "PID-P"
-#define MSG_PID_I "PID-I"
-#define MSG_PID_D "PID-D"
-#define MSG_PID_C "PID-C"
-#define MSG_ACC "Accel"
-#define MSG_JERK "Jerk"
-#if IS_KINEMATIC
- #define MSG_VA_JERK "Va-jerk"
- #define MSG_VB_JERK "Vb-jerk"
- #define MSG_VC_JERK "Vc-jerk"
-#else
- #define MSG_VA_JERK "Vx-jerk"
- #define MSG_VB_JERK "Vy-jerk"
- #define MSG_VC_JERK "Vz-jerk"
-#endif
-#define MSG_VE_JERK "Ve-jerk"
-#define MSG_VMAX "Vmax "
-#define MSG_VMIN "Vmin"
-#define MSG_VTRAV_MIN "VTrav min"
-#define MSG_AMAX "Amax "
-#define MSG_A_RETRACT "A-retract"
-#define MSG_A_TRAVEL "A-travel"
-#define MSG_STEPS_PER_MM "Steps/mm"
-#define MSG_ESTEPS "Esteps/mm"
-#define MSG_E1STEPS "E1steps/mm"
-#define MSG_E2STEPS "E2steps/mm"
-#define MSG_E3STEPS "E3steps/mm"
-#define MSG_E4STEPS "E4steps/mm"
-#define MSG_E5STEPS "E5steps/mm"
-#define MSG_TEMPERATURE "\xc9\xd2"
-#define MSG_MOTION "\xdf\xb2"
-#define MSG_FILAMENT "Filament"
-#define MSG_VOLUMETRIC_ENABLED "E in mm3"
-#define MSG_FILAMENT_DIAM "Fil. Dia."
-#define MSG_CONTRAST "LCD contrast"
-#define MSG_STORE_EEPROM "Store memory"
-#define MSG_LOAD_EEPROM "Load memory"
-#define MSG_RESTORE_FAILSAFE "Restore failsafe"
-#define MSG_REFRESH "Refresh"
-#define MSG_WATCH "\xec\xed\xee\xef"
-#define MSG_PREPARE "\xa4\xa5"
-#define MSG_TUNE "\xcf\xf0"
-#define MSG_PAUSE_PRINT "\xf1\xf2\xca\xf3"
-#define MSG_RESUME_PRINT "\xf4\xf5\xca\xf3"
-#define MSG_STOP_PRINT "\xf2\xf6\xca\xf3"
-#define MSG_CARD_MENU "\xaf\xb0"
-#define MSG_NO_CARD "\xf9\xa8"
-#define MSG_DWELL "Sleep..."
-#define MSG_USERWAIT "Wait for user..."
-#define MSG_PRINT_ABORTED "Print aborted"
-#define MSG_NO_MOVE "No move."
-#define MSG_KILLED "KILLED. "
-#define MSG_STOPPED "STOPPED. "
-#define MSG_CONTROL_RETRACT "Retract mm"
-#define MSG_CONTROL_RETRACT_SWAP "Swap Re.mm"
-#define MSG_CONTROL_RETRACTF "Retract V"
-#define MSG_CONTROL_RETRACT_ZLIFT "Hop mm"
-#define MSG_CONTROL_RETRACT_RECOVER "UnRet mm"
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP "S UnRet mm"
-#define MSG_CONTROL_RETRACT_RECOVERF "UnRet V"
-#define MSG_AUTORETRACT "AutoRetr."
-#define MSG_FILAMENTCHANGE "Change filament"
-#define MSG_INIT_SDCARD "Init. SD card"
-#define MSG_CNG_SDCARD "Change SD card"
-#define MSG_ZPROBE_OUT "Z probe out. bed"
-#define MSG_HOME "Home" // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST
-#define MSG_FIRST "first"
-#define MSG_ZPROBE_ZOFFSET "Z Offset"
-#define MSG_BABYSTEP_X "Babystep X"
-#define MSG_BABYSTEP_Y "Babystep Y"
-#define MSG_BABYSTEP_Z "Babystep Z"
-#define MSG_ENDSTOP_ABORT "Endstop abort"
-#define MSG_HEATING_FAILED_LCD "Heating failed"
-#define MSG_ERR_REDUNDANT_TEMP "Err: REDUNDANT TEMP"
-#define MSG_THERMAL_RUNAWAY "THERMAL RUNAWAY"
-#define MSG_ERR_MAXTEMP "Err: MAXTEMP"
-#define MSG_ERR_MINTEMP "Err: MINTEMP"
-#define MSG_ERR_MAXTEMP_BED "Err: MAXTEMP BED"
-#define MSG_DELTA_CALIBRATE "Delta Calibration"
-#define MSG_DELTA_CALIBRATE_X "Calibrate X"
-#define MSG_DELTA_CALIBRATE_Y "Calibrate Y"
-#define MSG_DELTA_CALIBRATE_Z "Calibrate Z"
-#define MSG_DELTA_CALIBRATE_CENTER "Calibrate Center"
-
-#endif // LANGUAGE_CN_H
diff --git a/Marlin/language_cz.h b/Marlin/language_cz.h
deleted file mode 100644
index 95f3cdfba0..0000000000
--- a/Marlin/language_cz.h
+++ /dev/null
@@ -1,399 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- * Czech
- *
- * LCD Menu Messages
- * See also http://marlinfw.org/docs/development/lcd_language.html
- *
- * Translated by Petr Zahradnik, Computer Laboratory
- * Blog and video blog Zahradnik se bavi
- * http://www.zahradniksebavi.cz
- *
- */
-#ifndef LANGUAGE_CZ_H
-#define LANGUAGE_CZ_H
-
-#define DISPLAY_CHARSET_ISO10646_1
-
-#define WELCOME_MSG MACHINE_NAME _UxGT(" pripraven.")
-#define MSG_BACK _UxGT("Zpet")
-#define MSG_SD_INSERTED _UxGT("Karta vlozena")
-#define MSG_SD_REMOVED _UxGT("Karta vyjmuta")
-#define MSG_LCD_ENDSTOPS _UxGT("Endstopy") // max 8 znaku
-#define MSG_MAIN _UxGT("Hlavni nabidka")
-#define MSG_AUTOSTART _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS _UxGT("Uvolnit motory")
-#define MSG_DEBUG_MENU _UxGT("Nabidka ladeni")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Test uk.prubehu")
-#define MSG_AUTO_HOME _UxGT("Domovska pozice")
-#define MSG_AUTO_HOME_X _UxGT("Domu osa X")
-#define MSG_AUTO_HOME_Y _UxGT("Domu osa Y")
-#define MSG_AUTO_HOME_Z _UxGT("Domu osa Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Mereni podlozky")
-#define MSG_LEVEL_BED_WAITING _UxGT("Kliknutim spustte")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Dalsi bod")
-#define MSG_LEVEL_BED_DONE _UxGT("Mereni hotovo!")
-#define MSG_Z_FADE_HEIGHT _UxGT("Vyska srovnavani")
-#define MSG_SET_HOME_OFFSETS _UxGT("Nastavit ofsety")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Ofsety nastaveny")
-#define MSG_SET_ORIGIN _UxGT("Nastavit pocatek")
-#define MSG_PREHEAT_1 _UxGT("Zahrat PLA")
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" vse")
-#define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" hotend")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" podloz")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" nast")
-#define MSG_PREHEAT_2 _UxGT("Zahrat ABS")
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" vse")
-#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" hotend")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" podloz")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" nast")
-#define MSG_COOLDOWN _UxGT("Zchladit")
-#define MSG_SWITCH_PS_ON _UxGT("Zapnout napajeni")
-#define MSG_SWITCH_PS_OFF _UxGT("Vypnout napajeni")
-#define MSG_EXTRUDE _UxGT("Vytlacit (extr.)")
-#define MSG_RETRACT _UxGT("Zatlacit (retr.)")
-#define MSG_MOVE_AXIS _UxGT("Posunout osy")
-#define MSG_BED_LEVELING _UxGT("Vyrovnat podlozku")
-#define MSG_LEVEL_BED _UxGT("Vyrovnat podlozku")
-#define MSG_LEVEL_CORNERS _UxGT("Vyrovnat rohy")
-#define MSG_NEXT_CORNER _UxGT("Dalsi roh")
-#define MSG_EDITING_STOPPED _UxGT("Konec uprav site")
-
-#define MSG_UBL_DOING_G29 _UxGT("Provadim G29")
-#define MSG_UBL_UNHOMED _UxGT("Prejedte domu")
-#define MSG_UBL_TOOLS _UxGT("UBL nastroje")
-#define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling")
-#define MSG_UBL_MANUAL_MESH _UxGT("Manualni sit bodu")
-#define MSG_UBL_BC_INSERT _UxGT("Vlozte kartu, zmerte")
-#define MSG_UBL_BC_INSERT2 _UxGT("Zmerte")
-#define MSG_UBL_BC_REMOVE _UxGT("Odstrante a zmerte")
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("Presoun na dalsi")
-#define MSG_UBL_ACTIVATE_MESH _UxGT("Aktivovat UBL")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("Deaktivovat UBL")
-#define MSG_UBL_SET_BED_TEMP _UxGT("Teplota podlozky")
-#define MSG_UBL_CUSTOM_BED_TEMP MSG_UBL_SET_BED_TEMP
-#define MSG_UBL_SET_HOTEND_TEMP _UxGT("Teplota hotendu")
-#define MSG_UBL_CUSTOM_HOTEND_TEMP MSG_UBL_SET_HOTEND_TEMP
-#define MSG_UBL_MESH_EDIT _UxGT("Uprava site bodu")
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Upravit vlastni sit")
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("Doladit sit bodu")
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Konec uprav site")
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Vlastni sit")
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Vytvorit sit")
-#define MSG_UBL_BUILD_PLA_MESH _UxGT("Sit bodu PLA")
-#define MSG_UBL_BUILD_ABS_MESH _UxGT("Sit bodu ABS")
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Studena sit bodu")
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Upravit vysku site")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Vyska")
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Zkontrolovat sit")
-#define MSG_UBL_VALIDATE_PLA_MESH _UxGT("Kontrola site PLA")
-#define MSG_UBL_VALIDATE_ABS_MESH _UxGT("Kontrola site ABS")
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Kontrola vlast. site")
-#define MSG_UBL_CONTINUE_MESH _UxGT("Pokracovat v siti")
-#define MSG_UBL_MESH_LEVELING _UxGT("Sitove rovnani")
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("3-bodove rovnani")
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Mrizkove rovnani")
-#define MSG_UBL_MESH_LEVEL _UxGT("Srovnat podlozku")
-#define MSG_UBL_SIDE_POINTS _UxGT("Postranni body")
-#define MSG_UBL_MAP_TYPE _UxGT("Typ site bodu")
-#define MSG_UBL_OUTPUT_MAP _UxGT("Exportovat sit")
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Exportovat do PC")
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Exportovat do CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Zaloha do PC")
-#define MSG_UBL_INFO_UBL _UxGT("Info o UBL do PC")
-#define MSG_UBL_EDIT_MESH_MENU _UxGT("Upravit sit dobu")
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("Hustota mrizky")
-#define MSG_UBL_MANUAL_FILLIN _UxGT("Rucni hustota")
-#define MSG_UBL_SMART_FILLIN _UxGT("Chytra hustota")
-#define MSG_UBL_FILLIN_MESH _UxGT("Zaplnit mrizku")
-#define MSG_UBL_INVALIDATE_ALL _UxGT("Zrusit vsechno")
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Zrusit posledni")
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("Upravit vsechny")
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Upravit posledni")
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Uloziste siti")
-#define MSG_UBL_STORAGE_SLOT _UxGT("Pametovy slot")
-#define MSG_UBL_LOAD_MESH _UxGT("Nacist sit bodu")
-#define MSG_UBL_SAVE_MESH _UxGT("Ulozit sit bodu")
-#define MSG_MESH_LOADED _UxGT("Sit %i nactena")
-#define MSG_NO_STORAGE _UxGT("Nedostatek mista")
-#define MSG_MESH_SAVED _UxGT("Sit %i ulozena")
-#define MSG_UBL_SAVE_ERROR _UxGT("Err: Ulozit UBL")
-#define MSG_UBL_RESTORE_ERROR _UxGT("Err: Obnovit UBL")
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Konec Z-Offsetu")
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("UBL Postupne")
-
-#define MSG_LED_CONTROL _UxGT("LED Nastaveni")
-#define MSG_LEDS_ON _UxGT("Svetla Zap")
-#define MSG_LEDS_OFF _UxGT("Svetla Vyp")
-#define MSG_LED_PRESETS _UxGT("Svetla Predvolby")
-#define MSG_SET_LEDS_RED _UxGT("Cervena")
-#define MSG_SET_LEDS_ORANGE _UxGT("Oranzova")
-#define MSG_SET_LEDS_YELLOW _UxGT("Zluta")
-#define MSG_SET_LEDS_GREEN _UxGT("Zelena")
-#define MSG_SET_LEDS_BLUE _UxGT("Modra")
-#define MSG_SET_LEDS_INDIGO _UxGT("Indigo")
-#define MSG_SET_LEDS_VIOLET _UxGT("Fialova")
-#define MSG_SET_LEDS_WHITE _UxGT("Bila")
-#define MSG_SET_LEDS_DEFAULT _UxGT("Vychozi")
-#define MSG_CUSTOM_LEDS _UxGT("Vlastni svetla")
-#define MSG_INTENSITY_R _UxGT("Cervena intenzita")
-#define MSG_INTENSITY_G _UxGT("Zelena intezita")
-#define MSG_INTENSITY_B _UxGT("Modra intenzita")
-#define MSG_INTENSITY_W _UxGT("Bila intenzita")
-#define MSG_LED_BRIGHTNESS _UxGT("Jas")
-
-#define MSG_USER_MENU _UxGT("Vlastni prikazy")
-#define MSG_MOVING _UxGT("Posouvani...")
-#define MSG_FREE_XY _UxGT("Uvolnit XY")
-#define MSG_MOVE_X _UxGT("Posunout X")
-#define MSG_MOVE_Y _UxGT("Posunout Y")
-#define MSG_MOVE_Z _UxGT("Posunout Z")
-#define MSG_MOVE_E _UxGT("Extruder")
-#define MSG_MOVE_01MM _UxGT("Posunout o 0,1mm")
-#define MSG_MOVE_1MM _UxGT("Posunout o 1mm")
-#define MSG_MOVE_10MM _UxGT("Posunout o 10mm")
-#define MSG_SPEED _UxGT("Rychlost")
-#define MSG_BED_Z _UxGT("Vyska podl.")
-#define MSG_NOZZLE _UxGT("Tryska")
-#define MSG_BED _UxGT("Podlozka")
-#define MSG_FAN_SPEED _UxGT("Rychlost vent.")
-#define MSG_EXTRA_FAN_SPEED _UxGT("Rychlost ex. vent.")
-#define MSG_FLOW _UxGT("Prutok")
-#define MSG_CONTROL _UxGT("Ovladani")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fakt")
-#define MSG_AUTOTEMP _UxGT("Autoteplota")
-#define MSG_ON _UxGT("Zap")
-#define MSG_OFF _UxGT("Vyp")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Vybrat")
-#define MSG_ACC _UxGT("Zrychl")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-jerk")
- #define MSG_VB_JERK _UxGT("Vb-jerk")
- #define MSG_VC_JERK _UxGT("Vc-jerk")
-#else
- #define MSG_VA_JERK _UxGT("Vx-jerk")
- #define MSG_VB_JERK _UxGT("Vy-jerk")
- #define MSG_VC_JERK _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-jerk")
-#define MSG_VELOCITY _UxGT("Rychlost")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("VTrav min")
-#define MSG_ACCELERATION _UxGT("Akcelerace")
-#define MSG_AMAX _UxGT("Amax ")
-#define MSG_A_RETRACT _UxGT("A-retrakt")
-#define MSG_A_TRAVEL _UxGT("A-prejezd")
-#define MSG_STEPS_PER_MM _UxGT("Kroku/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Akroku/mm")
- #define MSG_BSTEPS _UxGT("Bkroku/mm")
- #define MSG_CSTEPS _UxGT("Ckroku/mm")
-#else
- #define MSG_ASTEPS _UxGT("Xkroku/mm")
- #define MSG_BSTEPS _UxGT("Ykroku/mm")
- #define MSG_CSTEPS _UxGT("Zkroku/mm")
-#endif
-#define MSG_ESTEPS _UxGT("Ekroku/mm")
-#define MSG_E1STEPS _UxGT("E1kroku/mm")
-#define MSG_E2STEPS _UxGT("E2kroku/mm")
-#define MSG_E3STEPS _UxGT("E3kroku/mm")
-#define MSG_E4STEPS _UxGT("E4kroku/mm")
-#define MSG_E5STEPS _UxGT("E5kroku/mm")
-#define MSG_TEMPERATURE _UxGT("Teplota")
-#define MSG_MOTION _UxGT("Pohyb")
-#define MSG_FILAMENT _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E na mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Fil. Prum.")
-#define MSG_FILAMENT_UNLOAD _UxGT("Vysunout mm")
-#define MSG_FILAMENT_LOAD _UxGT("Zavest mm")
-#define MSG_ADVANCE_K _UxGT("K pro posun")
-#define MSG_CONTRAST _UxGT("Kontrast LCD")
-#define MSG_STORE_EEPROM _UxGT("Ulozit nastaveni")
-#define MSG_LOAD_EEPROM _UxGT("Nacist nastaveni")
-#define MSG_RESTORE_FAILSAFE _UxGT("Obnovit vychozi")
-#define MSG_INIT_EEPROM _UxGT("Inic. EEPROM")
-#define MSG_REFRESH _UxGT("Obnovit")
-#define MSG_WATCH _UxGT("Info obrazovka")
-#define MSG_PREPARE _UxGT("Priprava tisku")
-#define MSG_TUNE _UxGT("Doladeni tisku")
-#define MSG_PAUSE_PRINT _UxGT("Pozastavit tisk")
-#define MSG_RESUME_PRINT _UxGT("Obnovit tisk")
-#define MSG_STOP_PRINT _UxGT("Zastavit tisk")
-#define MSG_CARD_MENU _UxGT("Tisknout z SD")
-#define MSG_NO_CARD _UxGT("Zadna SD karta")
-#define MSG_DWELL _UxGT("Uspano...")
-#define MSG_USERWAIT _UxGT("Cekani na uziv...")
-#define MSG_PRINT_PAUSED _UxGT("Tisk pozastaven")
-#define MSG_PRINT_ABORTED _UxGT("Tisk zrusen")
-#define MSG_NO_MOVE _UxGT("Zadny pohyb.")
-#define MSG_KILLED _UxGT("PRERUSENO. ")
-#define MSG_STOPPED _UxGT("ZASTAVENO. ")
-#define MSG_CONTROL_RETRACT _UxGT("Retrakt mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Vymena Re.mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Retraktovat V")
-#define MSG_CONTROL_RETRACT_ZLIFT _UxGT("Zvednuti Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("S UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V")
-#define MSG_AUTORETRACT _UxGT("AutoRetr.")
-#define MSG_FILAMENTCHANGE _UxGT("Vymenit filament")
-#define MSG_FILAMENTLOAD _UxGT("Zavest filament")
-#define MSG_FILAMENTUNLOAD _UxGT("Vysunout filament")
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("Vysunout vse")
-
-#define MSG_INIT_SDCARD _UxGT("Nacist SD kartu")
-#define MSG_CNG_SDCARD _UxGT("Vymenit SD kartu")
-#define MSG_ZPROBE_OUT _UxGT("Sonda Z mimo podl")
-#define MSG_SKEW_FACTOR _UxGT("Faktor zkoseni")
-#define MSG_BLTOUCH _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Self-Test")
-#define MSG_BLTOUCH_RESET _UxGT("BLTouch Reset")
-#define MSG_BLTOUCH_DEPLOY _UxGT("BLTouch Vysunout")
-#define MSG_BLTOUCH_STOW _UxGT("BLTouch Zasunout")
-#define MSG_HOME _UxGT("Domu") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST
-#define MSG_FIRST _UxGT("prvni")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Z ofset")
-#define MSG_BABYSTEP_X _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Endstop abort")
-#define MSG_HEATING_FAILED_LCD _UxGT("Chyba zahrivani")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("REDUND. TEPLOTA")
-#define MSG_THERMAL_RUNAWAY _UxGT("TEPLOTNI SKOK")
-#define MSG_ERR_MAXTEMP _UxGT("VYSOKA TEPLOTA")
-#define MSG_ERR_MINTEMP _UxGT("NIZKA TEPLOTA")
-#define MSG_ERR_MAXTEMP_BED _UxGT("VYS. TEPL. PODL.")
-#define MSG_ERR_MINTEMP_BED _UxGT("NIZ. TEPL. PODL.")
-#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST
-#define MSG_HALTED _UxGT("TISK. ZASTAVENA")
-#define MSG_PLEASE_RESET _UxGT("Provedte reset")
-#define MSG_SHORT_DAY _UxGT("d")
-#define MSG_SHORT_HOUR _UxGT("h")
-#define MSG_SHORT_MINUTE _UxGT("m")
-#define MSG_HEATING _UxGT("Zahrivani...")
-#define MSG_BED_HEATING _UxGT("Zahrivani podl...")
-#define MSG_DELTA_CALIBRATE _UxGT("Delta Kalibrace")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Kalibrovat X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Kalibrovat Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Kalibrovat Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Kalibrovat Stred")
-#define MSG_DELTA_SETTINGS _UxGT("Delta nastaveni")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Autokalibrace")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Nast.vysku delty")
-#define MSG_DELTA_DIAG_ROD _UxGT("Diag rameno")
-#define MSG_DELTA_HEIGHT _UxGT("Vyska")
-#define MSG_DELTA_RADIUS _UxGT("Polomer")
-#define MSG_INFO_MENU _UxGT("O tiskarne")
-#define MSG_INFO_PRINTER_MENU _UxGT("Info o tiskarne")
-#define MSG_3POINT_LEVELING _UxGT("3-bodove rovnani")
-#define MSG_LINEAR_LEVELING _UxGT("Linearni rovnani")
-#define MSG_BILINEAR_LEVELING _UxGT("Bilinearni rovnani")
-#define MSG_UBL_LEVELING _UxGT("Unified Bed Leveling")
-#define MSG_MESH_LEVELING _UxGT("Mrizkove rovnani")
-#define MSG_INFO_STATS_MENU _UxGT("Statistika")
-#define MSG_INFO_BOARD_MENU _UxGT("Info o desce")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Termistory")
-#define MSG_INFO_EXTRUDERS _UxGT("Extrudery")
-#define MSG_INFO_BAUDRATE _UxGT("Rychlost")
-#define MSG_INFO_PROTOCOL _UxGT("Protokol")
-#define MSG_CASE_LIGHT _UxGT("Osvetleni")
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Jas svetla")
-
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Pocet tisku")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Dokonceno")
- #define MSG_INFO_PRINT_TIME _UxGT("Celkovy cas")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Nejdelsi tisk")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Celkem vytlaceno")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Tisky")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Hotovo")
- #define MSG_INFO_PRINT_TIME _UxGT("Cas")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Nejdelsi")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Vytlaceno")
-#endif
-
-#define MSG_INFO_MIN_TEMP _UxGT("Teplota min")
-#define MSG_INFO_MAX_TEMP _UxGT("Teplota max")
-#define MSG_INFO_PSU _UxGT("Nap. zdroj")
-#define MSG_DRIVE_STRENGTH _UxGT("Buzeni motoru")
-#define MSG_DAC_PERCENT _UxGT("Motor %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Ulozit do EEPROM")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("TISK POZASTAVEN")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("ZAVEDENI FILAMENTU")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("VYSUNUTI FILAMENTU")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("MOZNOSTI OBNOVENI:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Vytlacit vic")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Obnovit tisk")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Tryska: ")
-#define MSG_ERR_HOMING_FAILED _UxGT("Parkovani selhalo")
-#define MSG_ERR_PROBING_FAILED _UxGT("Kalibrace selhala")
-#define MSG_M600_TOO_COLD _UxGT("M600: Moc studeny")
-
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Cekejte prosim")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("na zahajeni")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("vymeny filamentu")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Cekejte prosim")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("na vysunuti")
- #define MSG_FILAMENT_CHANGE_UNLOAD_3 _UxGT("filamentu")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Vlozte filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("a stisknete")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("tlacitko...")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Kliknete pro")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("nahrati trysky")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Cekejte prosim")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("na nahrati tr.")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Cekejte prosim")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("na zavedeni")
- #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("filamentu")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Vyckejte na")
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("vytlaceni")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Cekejte prosim")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("na pokracovani")
- #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("tisku")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Cekejte...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Vysouvani...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Vlozte, kliknete")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Nahrivani...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Zavadeni...")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Vytlacovani...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Pokracovani...")
-#endif // LCD_HEIGHT < 4
-
-#endif // LANGUAGE_CZ_H
diff --git a/Marlin/language_es_utf8.h b/Marlin/language_es_utf8.h
deleted file mode 100644
index 57ac43b82f..0000000000
--- a/Marlin/language_es_utf8.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- * Spanish
- *
- * LCD Menu Messages
- * See also http://marlinfw.org/docs/development/lcd_language.html
- *
- */
-#ifndef LANGUAGE_ES_UTF_H
-#define LANGUAGE_ES_UTF_H
-
-#define MAPPER_C2C3
-#define DISPLAY_CHARSET_ISO10646_1
-#define CHARSIZE 2
-
-#define WELCOME_MSG MACHINE_NAME _UxGT(" lista.")
-#define MSG_BACK _UxGT("Atrás")
-#define MSG_SD_INSERTED _UxGT("Tarjeta colocada")
-#define MSG_SD_REMOVED _UxGT("Tarjeta retirada")
-#define MSG_LCD_ENDSTOPS _UxGT("Endstops") // Max length 8 characters
-#define MSG_MAIN _UxGT("Menú principal")
-#define MSG_AUTOSTART _UxGT("Inicio automático")
-#define MSG_DISABLE_STEPPERS _UxGT("Apagar motores")
-#define MSG_DEBUG_MENU _UxGT("Menú depurar")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Prueba barra avance")
-#define MSG_AUTO_HOME _UxGT("Llevar al origen")
-#define MSG_AUTO_HOME_X _UxGT("Origen X")
-#define MSG_AUTO_HOME_Y _UxGT("Origen Y")
-#define MSG_AUTO_HOME_Z _UxGT("Origen Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Origen XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Iniciar (Presione)")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Siguiente punto")
-#define MSG_LEVEL_BED_DONE _UxGT("Nivelación lista!")
-#define MSG_SET_HOME_OFFSETS _UxGT("Ajustar desfases")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Desfase aplicado")
-#define MSG_SET_ORIGIN _UxGT("Establecer origen")
-#define MSG_PREHEAT_1 _UxGT("Precalentar PLA")
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" Todo")
-#define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" End")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" Cama")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" Config")
-#define MSG_PREHEAT_2 _UxGT("Precalentar ABS")
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" Todo")
-#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" End")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" Cama")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" Config")
-#define MSG_COOLDOWN _UxGT("Enfriar")
-#define MSG_SWITCH_PS_ON _UxGT("Encender")
-#define MSG_SWITCH_PS_OFF _UxGT("Apagar")
-#define MSG_EXTRUDE _UxGT("Extruir")
-#define MSG_RETRACT _UxGT("Retraer")
-#define MSG_MOVE_AXIS _UxGT("Mover ejes")
-#define MSG_BED_LEVELING _UxGT("Nivelar cama")
-#define MSG_LEVEL_BED _UxGT("Nivelar cama")
-#define MSG_MOVING _UxGT("Moviendo...")
-#define MSG_FREE_XY _UxGT("Libre XY")
-#define MSG_MOVE_X _UxGT("Mover X")
-#define MSG_MOVE_Y _UxGT("Mover Y")
-#define MSG_MOVE_Z _UxGT("Mover Z")
-#define MSG_MOVE_E _UxGT("Extrusor")
-#define MSG_MOVE_01MM _UxGT("Mover 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Mover 1mm")
-#define MSG_MOVE_10MM _UxGT("Mover 10mm")
-#define MSG_SPEED _UxGT("Velocidad")
-#define MSG_BED_Z _UxGT("Cama Z")
-#define MSG_NOZZLE _UxGT("Boquilla")
-#define MSG_BED _UxGT("Cama")
-#define MSG_FAN_SPEED _UxGT("Ventilador")
-#define MSG_FLOW _UxGT("Flujo")
-#define MSG_CONTROL _UxGT("Control")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP _UxGT("Temperatura Auto.")
-#define MSG_ON _UxGT("Encender")
-#define MSG_OFF _UxGT("Apagar")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Seleccionar")
-#define MSG_ACC _UxGT("Aceleración")
-#define MSG_JERK _UxGT("Jerk")
-#define MSG_VX_JERK _UxGT("Vx-jerk")
-#define MSG_VY_JERK _UxGT("Vy-jerk")
-#define MSG_VZ_JERK _UxGT("Vz-jerk")
-#define MSG_VE_JERK _UxGT("Ve-jerk")
-#define MSG_VMAX _UxGT("Vmax")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("Vel. viaje min")
-#define MSG_ACCELERATION MSG_ACC
-#define MSG_AMAX _UxGT("Acel. max")
-#define MSG_A_RETRACT _UxGT("Acel. retrac.")
-#define MSG_A_TRAVEL _UxGT("Acel. Viaje")
-#define MSG_STEPS_PER_MM _UxGT("Pasos/mm")
-#if IS_SCARA
- #define MSG_ASTEPS _UxGT("A pasos/mm")
- #define MSG_BSTEPS _UxGT("B pasos/mm")
- #define MSG_CSTEPS _UxGT("Z pasos/mm")
-#elif IS_DELTA
- #define MSG_ASTEPS _UxGT("A pasos/mm")
- #define MSG_BSTEPS _UxGT("B pasos/mm")
- #define MSG_CSTEPS _UxGT("C pasos/mm")
-#else
- #define MSG_ASTEPS _UxGT("X pasos/mm")
- #define MSG_BSTEPS _UxGT("Y pasos/mm")
- #define MSG_CSTEPS _UxGT("Z pasos/mm")
-#endif
-#define MSG_ESTEPS _UxGT("E pasos/mm")
-#define MSG_E1STEPS _UxGT("E1 pasos/mm")
-#define MSG_E2STEPS _UxGT("E2 pasos/mm")
-#define MSG_E3STEPS _UxGT("E3 pasos/mm")
-#define MSG_E4STEPS _UxGT("E4 pasos/mm")
-#define MSG_E5STEPS _UxGT("E5 pasos/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatura")
-#define MSG_MOTION _UxGT("Movimiento")
-#define MSG_FILAMENT _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E in mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Fil. Dia.")
-#define MSG_ADVANCE_K _UxGT("Avance K")
-#define MSG_CONTRAST _UxGT("Contraste")
-#define MSG_STORE_EEPROM _UxGT("Guardar memoria")
-#define MSG_LOAD_EEPROM _UxGT("Cargar memoria")
-#define MSG_RESTORE_FAILSAFE _UxGT("Restaurar memoria")
-#define MSG_REFRESH _UxGT("Volver a cargar")
-#define MSG_WATCH _UxGT("Información")
-#define MSG_PREPARE _UxGT("Preparar")
-#define MSG_TUNE _UxGT("Ajustar")
-#define MSG_PAUSE_PRINT _UxGT("Pausar impresión")
-#define MSG_RESUME_PRINT _UxGT("Reanudar impresión")
-#define MSG_STOP_PRINT _UxGT("Detener impresión")
-#define MSG_CARD_MENU _UxGT("Menú de SD")
-#define MSG_NO_CARD _UxGT("No hay tarjeta SD")
-#define MSG_DWELL _UxGT("Reposo...")
-#define MSG_USERWAIT _UxGT("Esperando órdenes")
-#define MSG_PRINT_ABORTED _UxGT("Impresión cancelada")
-#define MSG_NO_MOVE _UxGT("Sin movimiento")
-#define MSG_KILLED _UxGT("Parada de emergencia")
-#define MSG_STOPPED _UxGT("Detenida")
-#define MSG_CONTROL_RETRACT _UxGT("Retraer mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Interc. Retraer mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Retraer V")
-#define MSG_CONTROL_RETRACT_ZLIFT _UxGT("Levantar mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Interc. DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("DesRet V")
-#define MSG_AUTORETRACT _UxGT("Retracción Auto.")
-#define MSG_FILAMENTCHANGE _UxGT("Cambiar filamento")
-#define MSG_INIT_SDCARD _UxGT("Iniciando tarjeta")
-#define MSG_CNG_SDCARD _UxGT("Cambiar tarjeta")
-#define MSG_ZPROBE_OUT _UxGT("Sonda Z fuera")
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Auto-Prueba")
-#define MSG_BLTOUCH_RESET _UxGT("Reiniciar BLTouch")
-#define MSG_HOME _UxGT("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST
-#define MSG_FIRST _UxGT("primero")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Desfase Z")
-#define MSG_BABYSTEP_X _UxGT("Micropaso X")
-#define MSG_BABYSTEP_Y _UxGT("Micropaso Y")
-#define MSG_BABYSTEP_Z _UxGT("Micropaso Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Cancelado - Endstop")
-#define MSG_HEATING_FAILED_LCD _UxGT("Error: al calentar")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Error: temperatura")
-#define MSG_THERMAL_RUNAWAY _UxGT("Error: temperatura")
-#define MSG_ERR_MAXTEMP _UxGT("Error: Temp Máxima")
-#define MSG_ERR_MINTEMP _UxGT("Error: Temp MÃnima")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Error: Temp Max Cama")
-#define MSG_ERR_MINTEMP_BED _UxGT("Error: Temp Min Cama")
-#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST
-#define MSG_HALTED _UxGT("IMPRESORA PARADA")
-#define MSG_PLEASE_RESET _UxGT("Por favor, reinicie")
-#define MSG_SHORT_DAY _UxGT("d") // One character only
-#define MSG_SHORT_HOUR _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE _UxGT("m") // One character only
-#define MSG_HEATING _UxGT("Calentando...")
-#define MSG_BED_HEATING _UxGT("Calentando Cama...")
-#define MSG_DELTA_CALIBRATE _UxGT("Calibración Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Calibrar X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Calibrar Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Calibrar Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Calibrar Centro")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Auto Calibración")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Est. Altura Delta")
-#define MSG_INFO_MENU _UxGT("Inf. Impresora")
-#define MSG_INFO_PRINTER_MENU _UxGT("Inf. Impresora")
-#define MSG_INFO_STATS_MENU _UxGT("EstadÃsticas Imp.")
-#define MSG_INFO_BOARD_MENU _UxGT("Inf. Controlador")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Termistores")
-#define MSG_INFO_EXTRUDERS _UxGT("Extrusores")
-#define MSG_INFO_BAUDRATE _UxGT("Baudios")
-#define MSG_INFO_PROTOCOL _UxGT("Protocolo")
-#define MSG_CASE_LIGHT _UxGT("Luz cabina")
-
-#if LCD_WIDTH > 19
- #define MSG_INFO_PRINT_COUNT _UxGT("Conteo de impresión")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Completadas")
- #define MSG_INFO_PRINT_TIME _UxGT("Tiempo total de imp.")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Impresión más larga")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Total de Extrusión")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Impresiones")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Completadas")
- #define MSG_INFO_PRINT_TIME _UxGT("Total")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Más larga")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Extrusión")
-#endif
-
-#define MSG_INFO_MIN_TEMP _UxGT("Temperatura mÃnima")
-#define MSG_INFO_MAX_TEMP _UxGT("Temperatura máxima")
-#define MSG_INFO_PSU _UxGT("Fuente de poder")
-#define MSG_DRIVE_STRENGTH _UxGT("Potencia driver")
-#define MSG_DAC_PERCENT _UxGT("Driver %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Escribe DAC EEPROM")
-
-#define MSG_FILAMENT_CHANGE_HEADER _UxGT("IMPR. PAUSADA")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("OPC. REINICIO:")
-#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruir más")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resumir imp.")
-
-#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Temp MÃnima es ")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Boquilla: ")
-
-#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Esperando iniciar")
-
-#define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Inserte filamento")
-#define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("y presione el botón")
-
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("del filamento")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("cambiar")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("para continuar...")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("del fil. cambiar")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Inserte filamento")
-#endif // LCD_HEIGHT < 4
-
-#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Esperado por")
-#define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("filamento expulsado")
-#define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Esperado por")
-#define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("Cargar filamento")
-#define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Esperado por")
-#define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("Extruir filamento")
-#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Esperando imp.")
-#define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("para resumir")
-#define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Oprima botón para")
-#define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("Calentar la boquilla")
-#define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Calentando boquilla")
-#define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Espere por favor")
-
-#endif // LANGUAGE_ES_UTF_H
diff --git a/Marlin/language_fr.h b/Marlin/language_fr.h
deleted file mode 100644
index 5da9084169..0000000000
--- a/Marlin/language_fr.h
+++ /dev/null
@@ -1,394 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- * French
- *
- * LCD Menu Messages
- * See also http://marlinfw.org/docs/development/lcd_language.html
- *
- */
-#ifndef LANGUAGE_FR_H
-#define LANGUAGE_FR_H
-
-#define MAPPER_NON
-#define NOT_EXTENDED_ISO10646_1_5X7
-
-#define WELCOME_MSG MACHINE_NAME _UxGT(" prete.")
-#define MSG_BACK _UxGT("Retour")
-#define MSG_SD_INSERTED _UxGT("Carte inseree")
-#define MSG_SD_REMOVED _UxGT("Carte retiree")
-#define MSG_LCD_ENDSTOPS _UxGT("Butees") // Max length 8 characters
-#define MSG_MAIN _UxGT("Menu principal")
-#define MSG_AUTOSTART _UxGT("Demarrage auto")
-#define MSG_DISABLE_STEPPERS _UxGT("Arreter moteurs")
-#define MSG_DEBUG_MENU _UxGT("Menu debug")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Test barre progress.")
-#define MSG_AUTO_HOME _UxGT("Origine auto.")
-#define MSG_AUTO_HOME_X _UxGT("Origine X Auto.")
-#define MSG_AUTO_HOME_Y _UxGT("Origine Y Auto.")
-#define MSG_AUTO_HOME_Z _UxGT("Origine Z Auto.")
-#define MSG_LEVEL_BED_HOMING _UxGT("Origine XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Clic pour commencer")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Point suivant")
-#define MSG_LEVEL_BED_DONE _UxGT("Mise a niveau OK!")
-#define MSG_Z_FADE_HEIGHT _UxGT("Hauteur lissee")
-#define MSG_SET_HOME_OFFSETS _UxGT("Regl. decal. origine")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Decalages appliques")
-#define MSG_SET_ORIGIN _UxGT("Regler origine")
-#define MSG_PREHEAT_1 _UxGT("Prechauffage PLA")
-#define MSG_PREHEAT_1_N _UxGT("Prechauff. PLA ")
-#define MSG_PREHEAT_1_ALL _UxGT("Prech. PLA Tout")
-#define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" fini")
-#define MSG_PREHEAT_1_BEDONLY _UxGT("Prech. PLA lit")
-#define MSG_PREHEAT_1_SETTINGS _UxGT("Regl. prech. PLA")
-#define MSG_PREHEAT_2 _UxGT("Prechauffage ABS")
-#define MSG_PREHEAT_2_N _UxGT("Prechauff. ABS ")
-#define MSG_PREHEAT_2_ALL _UxGT("Prech. ABS Tout")
-#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" fini")
-#define MSG_PREHEAT_2_BEDONLY _UxGT("Prech. ABS lit")
-#define MSG_PREHEAT_2_SETTINGS _UxGT("Regl. prech. ABS")
-#define MSG_COOLDOWN _UxGT("Refroidir")
-#define MSG_SWITCH_PS_ON _UxGT("Allumer alim.")
-#define MSG_SWITCH_PS_OFF _UxGT("Eteindre alim.")
-#define MSG_EXTRUDE _UxGT("Extrusion")
-#define MSG_RETRACT _UxGT("Retrait")
-#define MSG_MOVE_AXIS _UxGT("Deplacer un axe")
-#define MSG_BED_LEVELING _UxGT("Regl. Niv. lit")
-#define MSG_LEVEL_BED _UxGT("Regl. Niv. lit")
-#define MSG_LEVEL_CORNERS _UxGT("Niveau coins")
-#define MSG_NEXT_CORNER _UxGT("Coin suivant")
-#define MSG_EDITING_STOPPED _UxGT("Arret edit. maillage")
-#define MSG_USER_MENU _UxGT("Commandes perso")
-
-#define MSG_UBL_DOING_G29 _UxGT("G29 en cours")
-#define MSG_UBL_UNHOMED _UxGT("Origine XYZ d'abord")
-#define MSG_UBL_TOOLS _UxGT("Outils UBL")
-#define MSG_UBL_LEVEL_BED _UxGT("Niveau lit unifie")
-#define MSG_UBL_MANUAL_MESH _UxGT("Maillage manuel")
-#define MSG_UBL_BC_INSERT _UxGT("Poser cale & mesurer")
-#define MSG_UBL_BC_INSERT2 _UxGT("Mesure")
-#define MSG_UBL_BC_REMOVE _UxGT("Oter et mesurer lit")
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("Aller au suivant")
-#define MSG_UBL_ACTIVATE_MESH _UxGT("Activer l'UBL")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("Desactiver l'UBL")
-#define MSG_UBL_SET_BED_TEMP _UxGT("Temperature lit")
-#define MSG_UBL_CUSTOM_BED_TEMP MSG_UBL_SET_BED_TEMP
-#define MSG_UBL_SET_HOTEND_TEMP _UxGT("Temperature buse")
-#define MSG_UBL_CUSTOM_HOTEND_TEMP MSG_UBL_SET_HOTEND_TEMP
-#define MSG_UBL_MESH_EDIT _UxGT("Editer maille")
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Editer maille perso")
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("Reglage fin maille")
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Terminer maille")
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Creer maille perso")
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Creer maille")
-#define MSG_UBL_BUILD_PLA_MESH _UxGT("Creer maille PLA")
-#define MSG_UBL_BUILD_ABS_MESH _UxGT("Creer maille ABS")
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Creer maille froide")
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Ajuster haut. maille")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Hauteur")
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Valider maille")
-#define MSG_UBL_VALIDATE_PLA_MESH _UxGT("Valider maille PLA")
-#define MSG_UBL_VALIDATE_ABS_MESH _UxGT("Valider maille ABS")
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Valider maille perso")
-#define MSG_UBL_CONTINUE_MESH _UxGT("Continuer maille")
-#define MSG_UBL_MESH_LEVELING _UxGT("Niveau par maille")
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("Niveau a 3 points")
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Niveau grille")
-#define MSG_UBL_MESH_LEVEL _UxGT("Maille de niveau")
-#define MSG_UBL_SIDE_POINTS _UxGT("Point lateral")
-#define MSG_UBL_MAP_TYPE _UxGT("Type de carte")
-#define MSG_UBL_OUTPUT_MAP _UxGT("Voir maille")
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Voir pour hote")
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Voir pour CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Voir pour sauveg.")
-#define MSG_UBL_INFO_UBL _UxGT("Voir info UBL")
-#define MSG_UBL_EDIT_MESH_MENU _UxGT("Modifier maille")
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("Taux de remplissage")
-#define MSG_UBL_MANUAL_FILLIN _UxGT("Remplissage manuel")
-#define MSG_UBL_SMART_FILLIN _UxGT("Remplissage auto")
-#define MSG_UBL_FILLIN_MESH _UxGT("Maille remplissage")
-#define MSG_UBL_INVALIDATE_ALL _UxGT("Tout annuler")
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Annuler le plus pres")
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("Reglage fin (tous)")
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Reglage fin (proche)")
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Stockage maille")
-#define MSG_UBL_STORAGE_SLOT _UxGT("Slot memoire")
-#define MSG_UBL_LOAD_MESH _UxGT("Charger maille")
-#define MSG_UBL_SAVE_MESH _UxGT("Sauver maille")
-#define MSG_MESH_LOADED _UxGT("Maille %i charg.")
-#define MSG_MESH_SAVED _UxGT("Maille %i enreg.")
-#define MSG_NO_STORAGE _UxGT("Pas de memoire")
-#define MSG_UBL_SAVE_ERROR _UxGT("Err: Enreg. UBL")
-#define MSG_UBL_RESTORE_ERROR _UxGT("Err: Ouvrir UBL")
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Decal. Z arrete")
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("UBL Pas a pas")
-
-#define MSG_LED_CONTROL _UxGT("Controle LED")
-#define MSG_LEDS_ON _UxGT("Lumiere ON")
-#define MSG_LEDS_OFF _UxGT("Lumiere OFF")
-#define MSG_LED_PRESETS _UxGT("Preregl. LED.")
-#define MSG_SET_LEDS_RED _UxGT("Rouge")
-#define MSG_SET_LEDS_ORANGE _UxGT("Orange")
-#define MSG_SET_LEDS_YELLOW _UxGT("Jaune")
-#define MSG_SET_LEDS_GREEN _UxGT("Vert")
-#define MSG_SET_LEDS_BLUE _UxGT("Bleu")
-#define MSG_SET_LEDS_INDIGO _UxGT("Indigo")
-#define MSG_SET_LEDS_VIOLET _UxGT("Violet")
-#define MSG_SET_LEDS_WHITE _UxGT("Blanc")
-#define MSG_SET_LEDS_DEFAULT _UxGT("Defaut")
-#define MSG_CUSTOM_LEDS _UxGT("Lum. perso.")
-#define MSG_INTENSITY_R _UxGT("Intensite rouge")
-#define MSG_INTENSITY_G _UxGT("Intensite vert")
-#define MSG_INTENSITY_B _UxGT("Intensite bleu")
-#define MSG_INTENSITY_W _UxGT("Intensite blanc")
-#define MSG_LED_BRIGHTNESS _UxGT("Luminosite")
-
-#define MSG_MOVING _UxGT("Deplacement...")
-#define MSG_FREE_XY _UxGT("Debloquer XY")
-#define MSG_MOVE_X _UxGT("Depl. X")
-#define MSG_MOVE_Y _UxGT("Depl. Y")
-#define MSG_MOVE_Z _UxGT("Depl. Z")
-#define MSG_MOVE_E _UxGT("Extrudeur")
-#define MSG_MOVE_01MM _UxGT("Depl. 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Depl. 1mm")
-#define MSG_MOVE_10MM _UxGT("Depl. 10mm")
-#define MSG_SPEED _UxGT("Vitesse")
-#define MSG_BED_Z _UxGT("Lit Z")
-#define MSG_NOZZLE _UxGT("Buse")
-#define MSG_BED _UxGT("Lit")
-#define MSG_FAN_SPEED _UxGT("Vitesse ventil.")
-#define MSG_EXTRA_FAN_SPEED _UxGT("Extra V ventil.")
-
-#define MSG_FLOW _UxGT("Flux")
-#define MSG_CONTROL _UxGT("Controler")
-#define MSG_MIN LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR LCD_STR_THERMOMETER _UxGT(" Facteur")
-#define MSG_AUTOTEMP _UxGT("Temp. Auto.")
-#define MSG_ON _UxGT("Marche")
-#define MSG_OFF _UxGT("Arret")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Selectionner")
-#define MSG_ACC _UxGT("Acceleration")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va jerk")
- #define MSG_VB_JERK _UxGT("Vb jerk")
- #define MSG_VC_JERK _UxGT("Vc jerk")
-#else
- #define MSG_VA_JERK _UxGT("Vx jerk")
- #define MSG_VB_JERK _UxGT("Vy jerk")
- #define MSG_VC_JERK _UxGT("Vz jerk")
-#endif
-#define MSG_VE_JERK _UxGT("Ve jerk")
-#define MSG_VELOCITY _UxGT("Velocite")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin ")
-#define MSG_VTRAV_MIN _UxGT("V depl. min")
-#define MSG_ACCELERATION _UxGT("Acceleration")
-#define MSG_AMAX _UxGT("Amax ")
-#define MSG_A_RETRACT _UxGT("A retrait")
-#define MSG_A_TRAVEL _UxGT("A Depl.")
-#define MSG_STEPS_PER_MM _UxGT("Pas/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("A pas/mm")
- #define MSG_BSTEPS _UxGT("B pas/mm")
- #define MSG_CSTEPS _UxGT("C pas/mm")
-#else
- #define MSG_ASTEPS _UxGT("X pas/mm")
- #define MSG_BSTEPS _UxGT("Y pas/mm")
- #define MSG_CSTEPS _UxGT("Z pas/mm")
-#endif
-#define MSG_ESTEPS _UxGT("E pas/mm")
-#define MSG_E1STEPS _UxGT("E1 pas/mm")
-#define MSG_E2STEPS _UxGT("E2 pas/mm")
-#define MSG_E3STEPS _UxGT("E3 pas/mm")
-#define MSG_E4STEPS _UxGT("E4 pas/mm")
-#define MSG_E5STEPS _UxGT("E5 pas/mm")
-#define MSG_TEMPERATURE _UxGT("Temperature")
-#define MSG_MOTION _UxGT("Mouvement")
-#define MSG_FILAMENT _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E en mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Diam. Fil.")
-#define MSG_FILAMENT_UNLOAD _UxGT("Decharger mm")
-#define MSG_FILAMENT_LOAD _UxGT("Charger mm")
-#define MSG_ADVANCE_K _UxGT("Avance K")
-#define MSG_CONTRAST _UxGT("Contraste LCD")
-#define MSG_STORE_EEPROM _UxGT("Sauver config")
-#define MSG_LOAD_EEPROM _UxGT("Lire config")
-#define MSG_RESTORE_FAILSAFE _UxGT("Restaurer defauts")
-#define MSG_INIT_EEPROM _UxGT("Initialiser EEPROM")
-#define MSG_REFRESH _UxGT("Actualiser")
-#define MSG_WATCH _UxGT("Surveiller")
-#define MSG_PREPARE _UxGT("Preparer")
-#define MSG_TUNE _UxGT("Regler")
-#define MSG_PAUSE_PRINT _UxGT("Interrompre impr.")
-#define MSG_RESUME_PRINT _UxGT("Reprendre impr.")
-#define MSG_STOP_PRINT _UxGT("Arreter impr.")
-#define MSG_CARD_MENU _UxGT("Impr. depuis SD")
-#define MSG_NO_CARD _UxGT("Pas de carte")
-#define MSG_DWELL _UxGT("Repos...")
-#define MSG_USERWAIT _UxGT("Atten. de l'util.")
-#define MSG_PRINT_PAUSED _UxGT("Impr. en pause")
-#define MSG_PRINT_ABORTED _UxGT("Impr. Annulee")
-#define MSG_NO_MOVE _UxGT("Moteurs bloques.")
-#define MSG_KILLED _UxGT("MORT.")
-#define MSG_STOPPED _UxGT("STOPPE.")
-#define MSG_CONTROL_RETRACT _UxGT("Retrait mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Ech. Retr. mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Retrait V")
-#define MSG_CONTROL_RETRACT_ZLIFT _UxGT("Saut Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("Rappel mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Ech. Rapp. mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("Rappel V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("Ech. Rappel V")
-#define MSG_AUTORETRACT _UxGT("Retrait. Auto.")
-#define MSG_FILAMENTCHANGE _UxGT("Changer filament")
-#define MSG_FILAMENTLOAD _UxGT("Charger fil.")
-#define MSG_FILAMENTUNLOAD _UxGT("Decharger fil.")
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("Decharger tout")
-#define MSG_INIT_SDCARD _UxGT("Init. la carte SD")
-#define MSG_CNG_SDCARD _UxGT("Changer de carte")
-#define MSG_ZPROBE_OUT _UxGT("Z sonde hors lit")
-#define MSG_SKEW_FACTOR _UxGT("Facteur ecart")
-#define MSG_BLTOUCH _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST _UxGT("Autotest BLTouch")
-#define MSG_BLTOUCH_RESET _UxGT("RaZ BLTouch")
-#define MSG_BLTOUCH_DEPLOY _UxGT("Deployer BLTouch")
-#define MSG_BLTOUCH_STOW _UxGT("Ranger BLTouch")
-#define MSG_HOME _UxGT("Origine") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST
-#define MSG_FIRST _UxGT("Premier")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Decalage Z")
-#define MSG_BABYSTEP_X _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Butee abandon")
-#define MSG_HEATING_FAILED_LCD _UxGT("Erreur de chauffe")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: TEMP. REDONDANTE")
-#define MSG_THERMAL_RUNAWAY _UxGT("EMBALLEMENT THERM.")
-#define MSG_ERR_MAXTEMP _UxGT("Err: TEMP. MAX")
-#define MSG_ERR_MINTEMP _UxGT("Err: TEMP. MIN")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Err: TEMP. MAX LIT")
-#define MSG_ERR_MINTEMP_BED _UxGT("Err: TEMP. MIN LIT")
-#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST
-#define MSG_HALTED _UxGT("IMPR. STOPPEE")
-#define MSG_PLEASE_RESET _UxGT("RaZ. SVP")
-#define MSG_SHORT_DAY _UxGT("j") // One character only
-#define MSG_SHORT_HOUR _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE _UxGT("m") // One character only
-
-#define MSG_HEATING _UxGT("En chauffe...")
-#define MSG_BED_HEATING _UxGT("Lit en chauffe...")
-#define MSG_DELTA_CALIBRATE _UxGT("Calibration Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Calibrer X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Calibrer Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Calibrer Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Calibrer centre")
-#define MSG_DELTA_SETTINGS _UxGT("Reglages Delta")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Calibration Auto")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Hauteur Delta")
-#define MSG_DELTA_DIAG_ROD _UxGT("Diagonale")
-#define MSG_DELTA_HEIGHT _UxGT("Hauteur")
-#define MSG_DELTA_RADIUS _UxGT("Rayon")
-
-#define MSG_INFO_MENU _UxGT("Infos imprimante")
-#define MSG_INFO_PRINTER_MENU _UxGT("Infos imprimante")
-#define MSG_3POINT_LEVELING _UxGT("Niveau a 3 points")
-#define MSG_LINEAR_LEVELING _UxGT("Niveau lineaire")
-#define MSG_BILINEAR_LEVELING _UxGT("Niveau bilineaire")
-#define MSG_UBL_LEVELING _UxGT("Niveau lit unifie")
-#define MSG_MESH_LEVELING _UxGT("Niveau maillage")
-#define MSG_INFO_STATS_MENU _UxGT("Stats. imprimante")
-#define MSG_INFO_BOARD_MENU _UxGT("Infos carte")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Thermistors")
-#define MSG_INFO_EXTRUDERS _UxGT("Extrudeurs")
-#define MSG_INFO_BAUDRATE _UxGT("Baud")
-#define MSG_INFO_PROTOCOL _UxGT("Protocole")
-#define MSG_CASE_LIGHT _UxGT("Lumiere caisson")
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Luminosite")
-
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Nbre impressions")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Terminees")
- #define MSG_INFO_PRINT_TIME _UxGT("Tps impr. total")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Impr. la + longue")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Total filament")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Impressions")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Terminees")
- #define MSG_INFO_PRINT_TIME _UxGT("Total")
- #define MSG_INFO_PRINT_LONGEST _UxGT("+ long")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Filament")
-#endif
-
-#define MSG_INFO_MIN_TEMP _UxGT("Temp Min")
-#define MSG_INFO_MAX_TEMP _UxGT("Temp Max")
-#define MSG_INFO_PSU _UxGT("Alimentation")
-#define MSG_DRIVE_STRENGTH _UxGT("Puiss. moteur ")
-#define MSG_DAC_PERCENT _UxGT("Driver %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM sauv.")
-
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("IMPR. PAUSE")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("CHARGER FIL")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("DECHARGER FIL")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("OPTIONS REPRISE:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Purger encore")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Reprendre impr.")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Buse: ")
-#define MSG_ERR_HOMING_FAILED _UxGT("Echec origine")
-#define MSG_ERR_PROBING_FAILED _UxGT("Echec sonde")
-#define MSG_M600_TOO_COLD _UxGT("M600: Trop froid")
-
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Attente Demarrage")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("du filament")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("changer")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Attente de")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("decharger filament")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Inserer filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("et app. bouton")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("pour continuer...")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Presser le bouton...")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("Pr chauffer la buse")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Buse en chauffe")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Patientez SVP...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Attente de")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("chargement filament")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Attente")
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("Purger filament")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Attente impression")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("pour reprendre")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Patientez...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejection...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Inserer et clic")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Chargement...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Reprise...")
-#endif // LCD_HEIGHT < 4
-
-#endif // LANGUAGE_FR_H
diff --git a/Marlin/language_kana.h b/Marlin/language_kana.h
deleted file mode 100644
index 4989ebf1bc..0000000000
--- a/Marlin/language_kana.h
+++ /dev/null
@@ -1,339 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- * Japanese (Kana)
- *
- * LCD Menu Messages
- * See also http://marlinfw.org/docs/development/lcd_language.html
- *
- */
-
-#ifndef LANGUAGE_KANA_H
-#define LANGUAGE_KANA_H
-
-// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
-#define SIMULATE_ROMFONT
-#define DISPLAY_CHARSET_ISO10646_KANA
-#define CHARSIZE 2
-
-// 片仮å表示定義
-#define WELCOME_MSG MACHINE_NAME " ready."
-#define MSG_SD_INSERTED "\xb6\xb0\xc4\xde\xb6\xde\xbf\xb3\xc6\xad\xb3\xbb\xda\xcf\xbc\xc0" // "カードガソウニï½ï½³ï½»ï¾šï¾ï½¼ï¾€" ("Card inserted")
-#define MSG_SD_REMOVED "\xb6\xb0\xc4\xde\xb6\xde\xb1\xd8\xcf\xbe\xdd" // "カードガアリï¾ï½¾ï¾" ("Card removed")
-#define MSG_LCD_ENDSTOPS "Endstops" // Max length 8 characters
-#define MSG_MAIN "\xd2\xb2\xdd" // "ï¾’ï½²ï¾" ("Main")
-#define MSG_AUTOSTART "\xbc\xde\xc4\xde\xb3\xb6\xb2\xbc" // "ジドウカイシ" ("Autostart")
-#define MSG_DISABLE_STEPPERS "\xd3\xb0\xc0\xb0\xc3\xde\xdd\xb9\xde\xdd\x20\xb5\xcc" // "モーターデï¾ï½¹ï¾žï¾ オフ" ("Disable steppers")
-#define MSG_DEBUG_MENU "\xc3\xde\xca\xde\xaf\xb8\xde\xd2\xc6\xad\xb0" // "デバッグメニï½ï½°" ("Debug Menu")
-#define MSG_PROGRESS_BAR_TEST "\xcc\xdf\xdb\xb8\xde\xda\xbd\xca\xde\xb0\x20\xc3\xbd\xc4" // "プログレスバー テスト" ("Progress Bar Test")
-#define MSG_AUTO_HOME "\xb9\xde\xdd\xc3\xdd\xcc\xaf\xb7" // "ゲï¾ï¾ƒï¾ï¾Œï½¯ï½·" ("Auto home")
-#define MSG_AUTO_HOME_X "X\xbc\xde\xb8\x20\xb9\xde\xdd\xc3\xdd\xcc\xaf\xb7" // "Xジク ゲï¾ï¾ƒï¾ï¾Œï½¯ï½·" ("Home X")
-#define MSG_AUTO_HOME_Y "Y\xbc\xde\xb8\x20\xb9\xde\xdd\xc3\xdd\xcc\xaf\xb7" // "Yジク ゲï¾ï¾ƒï¾ï¾Œï½¯ï½·" ("Home Y")
-#define MSG_AUTO_HOME_Z "Z\xbc\xde\xb8\x20\xb9\xde\xdd\xc3\xdd\xcc\xaf\xb7" // "Zジク ゲï¾ï¾ƒï¾ï¾Œï½¯ï½·" ("Home Z")
-#define MSG_LEVEL_BED_HOMING "\xb9\xde\xdd\xc3\xdd\xcc\xaf\xb7\xc1\xad\xb3" // "ゲï¾ï¾ƒï¾ï¾Œï½¯ï½·ï¾ï½ï½³" ("Homing XYZ")
-#define MSG_LEVEL_BED_WAITING "\xda\xcd\xde\xd8\xdd\xb8\xde\xb6\xb2\xbc" // "レï¾ï¾žï¾˜ï¾ï½¸ï¾žï½¶ï½²ï½¼" ("Click to Begin")
-#define MSG_LEVEL_BED_NEXT_POINT "\xc2\xb7\xde\xc9\xbf\xb8\xc3\xb2\xc3\xdd\xcd" // "ツギノソクテイテï¾ï¾" ("Next Point")
-#define MSG_LEVEL_BED_DONE "\xda\xcd\xde\xd8\xdd\xb8\xde\xb6\xdd\xd8\xae\xb3" // "レï¾ï¾žï¾˜ï¾ï½¸ï¾žï½¶ï¾ï¾˜ï½®ï½³" ("Leveling Done!")
-#define MSG_SET_HOME_OFFSETS "\xb7\xbc\xde\xad\xdd\xb5\xcc\xbe\xaf\xc4\xbe\xaf\xc3\xb2" // "キジï½ï¾ï½µï¾Œï½¾ï½¯ï¾„セッテイ" ("Set home offsets")
-#define MSG_HOME_OFFSETS_APPLIED "\xb5\xcc\xbe\xaf\xc4\xb6\xde\xc3\xb7\xd6\xb3\xbb\xda\xcf\xbc\xc0" // "オフセットガテキヨウサレï¾ï½¼ï¾€" ("Offsets applied")
-#define MSG_SET_ORIGIN "\xb7\xbc\xde\xad\xdd\xbe\xaf\xc4" // "キジï½ï¾ï½¾ï½¯ï¾„" ("Set origin")
-#define MSG_PREHEAT_1 "PLA \xd6\xc8\xc2" // "PLA ヨネツ" ("Preheat PLA")
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 " "
-#define MSG_PREHEAT_1_ALL "PLA \xbd\xcd\xde\xc3\xd6\xc8\xc2" // "PLA ï½½ï¾ï¾žï¾ƒï¾–ネツ" (" All")
-#define MSG_PREHEAT_1_BEDONLY "PLA \xcd\xde\xaf\xc4\xde\xd6\xc8\xc2" // "PLA ï¾ï¾žï½¯ï¾„゙ヨネツ" (" Bed")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 "\xbe\xaf\xc3\xb2" // "セッテイ" (" conf")
-#define MSG_PREHEAT_2 "ABS \xd6\xc8\xc2" // "ABS ヨネツ" ("Preheat ABS")
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 " "
-#define MSG_PREHEAT_2_ALL "ABS \xbd\xcd\xde\xc3\xd6\xc8\xc2" // "ABS ï½½ï¾ï¾žï¾ƒï¾–ネツ" (" All")
-#define MSG_PREHEAT_2_BEDONLY "ABS \xcd\xde\xaf\xc4\xde\xd6\xc8\xc2" // "ABS ï¾ï¾žï½¯ï¾„゙ヨネツ" (" Bed")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 "\xbe\xaf\xc3\xb2" // "セッテイ" (" conf")
-#define MSG_COOLDOWN "\xb6\xc8\xc2\xc3\xb2\xbc" // "カネツテイシ" ("Cooldown")
-#define MSG_SWITCH_PS_ON "\xc3\xde\xdd\xb9\xde\xdd\x20\xb5\xdd" // "デï¾ï½¹ï¾žï¾ ï½µï¾" ("Switch power on")
-#define MSG_SWITCH_PS_OFF "\xc3\xde\xdd\xb9\xde\xdd\x20\xb5\xcc" // "デï¾ï½¹ï¾žï¾ オフ" ("Switch power off")
-#define MSG_EXTRUDE "\xb5\xbc\xc0\xde\xbc" // "オシダシ" ("Extrude")
-#define MSG_RETRACT "\xcb\xb7\xba\xd0\xbe\xaf\xc3\xb2" // "ヒキコï¾ï½¾ï½¯ï¾ƒï½²" ("Retract")
-#define MSG_MOVE_AXIS "\xbc\xde\xb8\xb2\xc4\xde\xb3" // "ジクイドウ" ("Move axis")
-#define MSG_BED_LEVELING "\xcd\xde\xaf\xc4\xde\xda\xcd\xde\xd8\xdd\xb8\xde" // "ï¾ï¾žï½¯ï¾„゙レï¾ï¾žï¾˜ï¾ï½¸ï¾ž" ("Bed Leveling")
-#define MSG_LEVEL_BED "\xcd\xde\xaf\xc4\xde\xda\xcd\xde\xd8\xdd\xb8\xde" // "ï¾ï¾žï½¯ï¾„゙レï¾ï¾žï¾˜ï¾ï½¸ï¾ž" ("Level bed")
-#define MSG_MOVING "\xb2\xc4\xde\xb3\xc1\xad\xb3" // "イドウï¾ï½ï½³" ("Moving...")
-#define MSG_FREE_XY "XY\xbc\xde\xb8\x20\xb6\xb2\xce\xb3" // "XYジク カイホウ" ("Free XY")
-#define MSG_MOVE_X "X\xbc\xde\xb8\x20\xb2\xc4\xde\xb3" // "Xジク イドウ" ("Move X")
-#define MSG_MOVE_Y "Y\xbc\xde\xb8\x20\xb2\xc4\xde\xb3" // "Yジク イドウ" ("Move Y")
-#define MSG_MOVE_Z "Z\xbc\xde\xb8\x20\xb2\xc4\xde\xb3" // "Zジク イドウ" ("Move Z")
-#define MSG_MOVE_E "\xb4\xb8\xbd\xc4\xd9\xb0\xc0\xde\xb0" // "エクストルーダー" ("Extruder")
-#define MSG_MOVE_01MM "0.1mm \xb2\xc4\xde\xb3" // "0.1mm イドウ" ("Move 0.1mm")
-#define MSG_MOVE_1MM " 1mm \xb2\xc4\xde\xb3" // " 1mm イドウ" ("Move 1mm")
-#define MSG_MOVE_10MM " 10mm \xb2\xc4\xde\xb3" // " 10mm イドウ" ("Move 10mm")
-#define MSG_SPEED "\xbf\xb8\xc4\xde" // "ソクド" ("Speed")
-#define MSG_BED_Z "Z\xb5\xcc\xbe\xaf\xc4" // "Zオフセット" ("Bed Z")
-#define MSG_NOZZLE "\xc9\xbd\xde\xd9" // "ノズル" ("Nozzle")
-#define MSG_BED "\xcd\xde\xaf\xc4\xde" // "ï¾ï¾žï½¯ï¾„゙" ("Bed")
-#define MSG_FAN_SPEED "\xcc\xa7\xdd\xbf\xb8\xc4\xde" // "ファï¾ï½¿ï½¸ï¾„゙" ("Fan speed")
-#define MSG_FLOW "\xc4\xbc\xad\xc2\xd8\xae\xb3" // "トシï½ï¾‚リョウ" ("Flow")
-#define MSG_CONTROL "\xbe\xb2\xb7\xde\xae" // "セイギョ" ("Control")
-#define MSG_MIN LCD_STR_THERMOMETER " \xbb\xb2\xc3\xb2" // " サイテイ" (" Min")
-#define MSG_MAX LCD_STR_THERMOMETER " \xbb\xb2\xba\xb3" // " サイコウ" (" Max")
-#define MSG_FACTOR LCD_STR_THERMOMETER " \xcc\xa7\xb8\xc0\xb0" // " ファクター" (" Fact")
-#if LCD_WIDTH >= 20
- #define MSG_AUTOTEMP "\xbc\xde\xc4\xde\xb3\xb5\xdd\xc4\xde\xbe\xb2\xb7\xde\xae" // "ジドウオï¾ï¾„゙セイギョ" ("Autotemp")
-#else
- #define MSG_AUTOTEMP "\xbc\xde\xc4\xde\xb3\xb5\xdd\xc4\xde" // "ジドウオï¾ï¾„゙" ("Autotemp")
-#endif
-#define MSG_ON "\xb5\xdd " // "ï½µï¾ " ("On ")
-#define MSG_OFF "\xb5\xcc " // "オフ " ("Off")
-#define MSG_PID_P "PID-P"
-#define MSG_PID_I "PID-I"
-#define MSG_PID_D "PID-D"
-#define MSG_PID_C "PID-C"
-#define MSG_SELECT "\xbe\xdd\xc0\xb8" // "ï½¾ï¾ï¾€ï½¸" ("Select")
-#define MSG_JERK "\xbc\xde\xb8\x20\xd4\xb8\xc4\xde mm/s" // ヤクド mm/s ("Jerk")
-#if LCD_WIDTH >= 20
- #define MSG_ACC "\xb6\xbf\xb8\xc4\xde mm/s2" // "カソクド mm/s2" ("Accel")
- #if IS_KINEMATIC
- #define MSG_VA_JERK "A\xbc\xde\xb8\x20\xd4\xb8\xc4\xde mm/s" // "Aジク ヤクド mm/s" ("Va-jerk")
- #define MSG_VB_JERK "B\xbc\xde\xb8\x20\xd4\xb8\xc4\xde mm/s" // "Bジク ヤクド mm/s" ("Vb-jerk")
- #define MSG_VC_JERK "C\xbc\xde\xb8\x20\xd4\xb8\xc4\xde mm/s" // "Cジク ヤクド mm/s" ("Vc-jerk")
- #else
- #define MSG_VA_JERK "X\xbc\xde\xb8\x20\xd4\xb8\xc4\xde mm/s" // "Xジク ヤクド mm/s" ("Vx-jerk")
- #define MSG_VB_JERK "Y\xbc\xde\xb8\x20\xd4\xb8\xc4\xde mm/s" // "Yジク ヤクド mm/s" ("Vy-jerk")
- #define MSG_VC_JERK "Z\xbc\xde\xb8\x20\xd4\xb8\xc4\xde mm/s" // "Zジク ヤクド mm/s" ("Vz-jerk")
- #endif
- #define MSG_VE_JERK "\xb4\xb8\xbd\xc4\xd9\xb0\xc0\xde\xb0\x20\xd4\xb8\xc4\xde" // "エクストルーダー ヤクド" ("Ve-jerk")
- #define MSG_VMAX "\xbb\xb2\xc0\xde\xb2\xb5\xb8\xd8\xbf\xb8\xc4\xde " // "サイダイオクリソクド " ("Vmax ")
- #define MSG_VMIN "\xbb\xb2\xbc\xae\xb3\xb5\xb8\xd8\xbf\xb8\xc4\xde" // "サイショウオクリソクド" ("Vmin")
- #define MSG_VTRAV_MIN "\xbb\xb2\xbc\xae\xb3\xb2\xc4\xde\xb3\xbf\xb8\xc4\xde" // "サイショウイドウソクド" ("VTrav min")
- #define MSG_AMAX "\xbb\xb2\xc0\xde\xb2\xb6\xbf\xb8\xc4\xde " // "サイダイカソクド " ("Amax ")
-#else
- #define MSG_ACC "\xb6\xbf\xb8\xc4\xde" // "カソクド" ("Accel")
- #if IS_KINEMATIC
- #define MSG_VA_JERK "A\x20\xd4\xb8\xc4\xde" // "Aジク ヤクド" ("Va-jerk")
- #define MSG_VB_JERK "B\x20\xd4\xb8\xc4\xde" // "Bジク ヤクド" ("Vb-jerk")
- #define MSG_VC_JERK "C\x20\xd4\xb8\xc4\xde" // "Cジク ヤクド" ("Vc-jerk")
- #else
- #define MSG_VA_JERK "X\x20\xd4\xb8\xc4\xde" // "Xジク ヤクド" ("Vx-jerk")
- #define MSG_VB_JERK "Y\x20\xd4\xb8\xc4\xde" // "Yジク ヤクド" ("Vy-jerk")
- #define MSG_VC_JERK "Z\x20\xd4\xb8\xc4\xde" // "Zジク ヤクド" ("Vz-jerk")
- #endif
- #define MSG_VE_JERK "E\x20\xd4\xb8\xc4\xde" // "E ヤクド" ("Ve-jerk")
- #define MSG_VMAX "max\xb5\xb8\xd8\xbf\xb8\xc4\xde " // "maxオクリソクド" ("Vmax ")
- #define MSG_VMIN "min\xb5\xb8\xd8\xbf\xb8\xc4\xde" // "minオクリソクド" ("Vmin")
- #define MSG_VTRAV_MIN "min\xb2\xc4\xde\xb3\xbf\xb8\xc4\xde" // "minイドウソクド" ("VTrav min")
- #define MSG_AMAX "max\xb6\xbf\xb8 " // "maxカソク " ("Amax ")
-#endif
-#define MSG_A_RETRACT "\xcb\xb7\xba\xd0\xb6\xbf\xb8\xc4\xde" // "ヒキコï¾ï½¶ï½¿ï½¸ï¾„゙" ("A-retract")
-#define MSG_A_TRAVEL "\xb2\xc4\xde\xb3\xb6\xbf\xb8\xc4\xde" // "イドウカソクド" ("A-travel")
-#if LCD_WIDTH >= 20
- #define MSG_STEPS_PER_MM "Steps/mm"
- #if IS_KINEMATIC
- #define MSG_ASTEPS "Asteps/mm"
- #define MSG_BSTEPS "Bsteps/mm"
- #define MSG_CSTEPS "Csteps/mm"
- #else
- #define MSG_ASTEPS "Xsteps/mm"
- #define MSG_BSTEPS "Ysteps/mm"
- #define MSG_CSTEPS "Zsteps/mm"
- #endif
- #define MSG_ESTEPS "Esteps/mm"
- #define MSG_E1STEPS "E1steps/mm"
- #define MSG_E2STEPS "E2steps/mm"
- #define MSG_E3STEPS "E3steps/mm"
- #define MSG_E4STEPS "E4steps/mm"
- #define MSG_E5STEPS "E5steps/mm"
-#else
- #define MSG_STEPS_PER_MM "Steps"
- #if IS_KINEMATIC
- #define MSG_ASTEPS "Asteps"
- #define MSG_BSTEPS "Bsteps"
- #define MSG_CSTEPS "Csteps"
- #else
- #define MSG_ASTEPS "Xsteps"
- #define MSG_BSTEPS "Ysteps"
- #define MSG_CSTEPS "Zsteps"
- #endif
- #define MSG_ESTEPS "Esteps"
- #define MSG_E1STEPS "E1steps"
- #define MSG_E2STEPS "E2steps"
- #define MSG_E3STEPS "E3steps"
- #define MSG_E4STEPS "E4steps"
- #define MSG_E5STEPS "E5steps"
-#endif
-#define MSG_TEMPERATURE "\xb5\xdd\xc4\xde" // "ï½µï¾ï¾„゙" ("Temperature")
-#define MSG_MOTION "\xb3\xba\xde\xb7\xbe\xaf\xc3\xb2" // "ウゴキセッテイ" ("Motion")
-#define MSG_FILAMENT "\xcc\xa8\xd7\xd2\xdd\xc4" // "フィラメï¾ï¾„" ("Filament")
-#define MSG_VOLUMETRIC_ENABLED "E in mm3"
-#if LCD_WIDTH >= 20
- #define MSG_FILAMENT_DIAM "\xcc\xa8\xd7\xd2\xdd\xc4\xc1\xae\xaf\xb9\xb2" // "フィラメï¾ï¾„ï¾ï½®ï½¯ï½¹ï½²" ("Fil. Dia.")
-#else
- #define MSG_FILAMENT_DIAM "\xcc\xa8\xd7\xd2\xdd\xc4\xb9\xb2" // "フィラメï¾ï¾„ケイ" ("Fil. Dia.")
-#endif
-#define MSG_CONTRAST "LCD\xba\xdd\xc4\xd7\xbd\xc4" // "LCDコï¾ï¾„ラスト" ("LCD contrast")
-#define MSG_STORE_EEPROM "\xd2\xd3\xd8\xcd\xb6\xb8\xc9\xb3" // "メモリï¾ï½¶ï½¸ï¾‰ï½³" ("Store memory")
-#define MSG_LOAD_EEPROM "\xd2\xd3\xd8\xb6\xd7\xd6\xd0\xba\xd0" // "メモリカラヨï¾ï½ºï¾" ("Load memory")
-#define MSG_RESTORE_FAILSAFE "\xbe\xaf\xc3\xb2\xd8\xbe\xaf\xc4" // "セッテイリセット" ("Restore failsafe")
-#define MSG_REFRESH "\xd8\xcc\xda\xaf\xbc\xad" // "リフレッシï½" ("Refresh")
-#define MSG_WATCH "\xbc\xde\xae\xb3\xce\xb3\xb6\xde\xd2\xdd" // "ジョウホウガメï¾" ("Info screen")
-#define MSG_PREPARE "\xbc\xde\xad\xdd\xcb\xde\xbe\xaf\xc3\xb2" // "ジï½ï¾ï¾‹ï¾žï½¾ï½¯ï¾ƒï½²" ("Prepare")
-#define MSG_TUNE "\xc1\xae\xb3\xbe\xb2" // "ï¾ï½®ï½³ï½¾ï½²" ("Tune")
-#define MSG_PAUSE_PRINT "\xb2\xc1\xbc\xde\xc3\xb2\xbc" // "ï½²ï¾ï½¼ï¾žï¾ƒï½²ï½¼" ("Pause print")
-#define MSG_RESUME_PRINT "\xcc\xdf\xd8\xdd\xc4\xbb\xb2\xb6\xb2" // "プリï¾ï¾„サイカイ" ("Resume print")
-#define MSG_STOP_PRINT "\xcc\xdf\xd8\xdd\xc4\xc3\xb2\xbc" // "プリï¾ï¾„テイシ" ("Stop print")
-#define MSG_CARD_MENU "SD\xb6\xb0\xc4\xde\xb6\xd7\xcc\xdf\xd8\xdd\xc4" // "SDカードカラプリï¾ï¾„" ("Print from SD")
-#define MSG_NO_CARD "SD\xb6\xb0\xc4\xde\xb6\xde\xb1\xd8\xcf\xbe\xdd" // "SDカードガアリï¾ï½¾ï¾" ("No SD card")
-#define MSG_DWELL "\xb7\xad\xb3\xbc" // "ï½·ï½ï½³ï½¼" ("Sleep...")
-#define MSG_USERWAIT "\xbc\xca\xde\xd7\xb8\xb5\xcf\xc1\xb8\xc0\xde\xbb\xb2" // "シバラクオï¾ï¾ï½¸ï¾€ï¾žï½»ï½²" ("Wait for user...")
-#define MSG_PRINT_ABORTED "\xcc\xdf\xd8\xdd\xc4\xb6\xde\xc1\xad\xb3\xbc\xbb\xda\xcf\xbc\xc0" // "プリï¾ï¾„ガï¾ï½ï½³ï½¼ï½»ï¾šï¾ï½¼ï¾€" ("Print aborted")
-#define MSG_NO_MOVE "\xb3\xba\xde\xb7\xcf\xbe\xdd" // "ウゴキï¾ï½¾ï¾" ("No move.")
-#define MSG_KILLED "\xcb\xbc\xde\xae\xb3\xc3\xb2\xbc" // "ヒジョウテイシ" ("KILLED. ")
-#define MSG_STOPPED "\xc3\xb2\xbc\xbc\xcf\xbc\xc0" // "テイシシï¾ï½¼ï¾€" ("STOPPED. ")
-#if LCD_WIDTH >= 20
- #define MSG_CONTROL_RETRACT "\xcb\xb7\xba\xd0\xd8\xae\xb3 mm" // "ヒキコï¾ï¾˜ï½®ï½³ mm" ("Retract mm")
- #define MSG_CONTROL_RETRACT_SWAP "\xcb\xb7\xba\xd0\xd8\xae\xb3S mm" // "ヒキコï¾ï¾˜ï½®ï½³S mm" ("Swap Re.mm")
- #define MSG_CONTROL_RETRACTF "\xcb\xb7\xba\xd0\xbf\xb8\xc4\xde mm/s" // "ヒキコï¾ï½¿ï½¸ï¾„゙ mm/s" ("Retract V")
- #define MSG_CONTROL_RETRACT_ZLIFT "\xc9\xbd\xde\xd9\xc0\xb2\xcb mm" // "ノズルタイヒ mm" ("Hop mm")
- #define MSG_CONTROL_RETRACT_RECOVER "\xce\xbc\xae\xb3\xd8\xae\xb3 mm" // "ホショウリョウ mm" ("UnRet mm")
- #define MSG_CONTROL_RETRACT_RECOVER_SWAP "\xce\xbc\xae\xb3\xd8\xae\xb3S mm" // "ホショウリョウS mm" ("S UnRet mm")
- #define MSG_CONTROL_RETRACT_RECOVERF "\xce\xbc\xae\xb3\xbf\xb8\xc4\xde mm/s" // "ホショウソクド mm/s" ("UnRet V")
-#else
- #define MSG_CONTROL_RETRACT "\xcb\xb7\xba\xd0\xd8\xae\xb3" // "ヒキコï¾ï¾˜ï½®ï½³" ("Retract mm")
- #define MSG_CONTROL_RETRACT_SWAP "\xcb\xb7\xba\xd0\xd8\xae\xb3S" // "ヒキコï¾ï¾˜ï½®ï½³S" ("Swap Re.mm")
- #define MSG_CONTROL_RETRACTF "\xcb\xb7\xba\xd0\xbf\xb8\xc4\xde" // "ヒキコï¾ï½¿ï½¸ï¾„゙" ("Retract V")
- #define MSG_CONTROL_RETRACT_ZLIFT "\xc9\xbd\xde\xd9\xc0\xb2\xcb" // "ノズルタイヒ" ("Hop mm")
- #define MSG_CONTROL_RETRACT_RECOVER "\xce\xbc\xae\xb3\xd8\xae\xb3" // "ホショウリョウ" ("UnRet mm")
- #define MSG_CONTROL_RETRACT_RECOVER_SWAP "\xce\xbc\xae\xb3\xd8\xae\xb3S" // "ホショウリョウS" ("S UnRet mm")
- #define MSG_CONTROL_RETRACT_RECOVERF "\xce\xbc\xae\xb3\xbf\xb8\xc4\xde" // "ホショウソクド" ("UnRet V")
-#endif
-#define MSG_AUTORETRACT "\xbc\xde\xc4\xde\xb3\xcb\xb7\xba\xd0" // "ジドウヒキコï¾" ("AutoRetr.")
-#define MSG_FILAMENTCHANGE "\xcc\xa8\xd7\xd2\xdd\xc4\xba\xb3\xb6\xdd" // "フィラメï¾ï¾„コウカï¾" ("Change filament")
-#define MSG_INIT_SDCARD "SD\xb6\xb0\xc4\xde\xbb\xb2\xd6\xd0\xba\xd0" // "SDカードサイヨï¾ï½ºï¾" ("Init. SD card")
-#define MSG_CNG_SDCARD "SD\xb6\xb0\xc4\xde\xba\xb3\xb6\xdd" // "SDカードコウカï¾" ("Change SD card")
-#define MSG_ZPROBE_OUT "Z\xcc\xdf\xdb\xb0\xcc\xde\x20\xcd\xde\xaf\xc4\xde\xb6\xde\xb2" // "Zプローブ ï¾ï¾žï½¯ï¾„゙ガイ" ("Z probe out. bed")
-#if LCD_WIDTH >= 20
- #define MSG_BLTOUCH_SELFTEST "BLTouch \xbc\xde\xba\xbc\xdd\xc0\xde\xdd" // "BLTouch ジコシï¾ï¾€ï¾žï¾" ("BLTouch Self-Test")
-#else
- #define MSG_BLTOUCH_SELFTEST "BLTouch \xbe\xd9\xcc\xc3\xbd\xc4" // "BLTouch セルフテスト" ("BLTouch Self-Test")
-#endif
-#define MSG_BLTOUCH_RESET "BLTouch \xd8\xbe\xaf\xc4" // "BLTouch リセット" ("Reset BLTouch")
-#define MSG_HOME "\xbb\xb7\xc6" // "サキニ" ("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST
-#if LCD_WIDTH >= 20
- #define MSG_FIRST "\xa6\xcc\xaf\xb7\xbb\xbe\xc3\xb8\xc0\xde\xbb\xb2" // "ヲフッキサセテクダサイ" ("first")
-#else
- #define MSG_FIRST "\xa6\xcc\xaf\xb7\xbb\xbe\xd6" // "ヲフッキサセヨ" ("first")
-#endif
-#define MSG_ZPROBE_ZOFFSET "Z\xb5\xcc\xbe\xaf\xc4" // "Zオフセット" ("Z Offset")
-#define MSG_BABYSTEP_X "X\xbc\xde\xb8\x20\xcb\xde\xc4\xde\xb3" // "Xジク ビドウ" ("Babystep X")
-#define MSG_BABYSTEP_Y "Y\xbc\xde\xb8\x20\xcb\xde\xc4\xde\xb3" // "Yジク ビドウ" ("Babystep Y")
-#define MSG_BABYSTEP_Z "Z\xbc\xde\xb8\x20\xcb\xde\xc4\xde\xb3" // "Zジク ビドウ" ("Babystep Z")
-#if LCD_WIDTH >= 20
- #define MSG_ENDSTOP_ABORT "\xb2\xc4\xde\xb3\xb9\xde\xdd\xb6\xb2\xb9\xdd\xc1\xb7\xc9\xb3" // "イドウゲï¾ï½¶ï½²ï½¹ï¾ï¾ï½·ï¾‰ï½³" ("Endstop abort")
-#else
- #define MSG_ENDSTOP_ABORT "\xb2\xc4\xde\xb3\xb9\xde\xdd\xb6\xb2\xb9\xdd\xc1" // "イドウゲï¾ï½¶ï½²ï½¹ï¾ï¾" ("Endstop abort")
-#endif
-#define MSG_HEATING_FAILED_LCD "\xb6\xc8\xc2\xbc\xaf\xca\xdf\xb2" // "カネツシッパイ" ("Heating failed")
-#if LCD_WIDTH >= 20
- #define MSG_ERR_REDUNDANT_TEMP "\xb4\xd7\xb0:\xbc\xde\xae\xb3\xc1\xae\xb3\xbb\xb0\xd0\xbd\xc0\xb0\xb7\xc9\xb3" // "ï½´ï¾—ï½°:ジョウï¾ï½®ï½³ï½»ï½°ï¾ï½½ï¾€ï½°ï½·ï¾‰ï½³" ("Err: REDUNDANT TEMP")
-#else
- #define MSG_ERR_REDUNDANT_TEMP "\xb4\xd7\xb0:\xbc\xde\xae\xb3\xc1\xae\xb3\xbb\xb0\xd0\xbd\xc0" // "ï½´ï¾—ï½°:ジョウï¾ï½®ï½³ï½»ï½°ï¾ï½½ï¾€" ("Err: REDUNDANT TEMP")
-#endif
-#define MSG_THERMAL_RUNAWAY "\xc8\xc2\xce\xde\xb3\xbf\xb3" // "ネツボウソウ" ("THERMAL RUNAWAY")
-#define MSG_ERR_MAXTEMP "\xb4\xd7\xb0:\xbb\xb2\xba\xb3\xb5\xdd\xc1\xae\xb3\xb6" // "ï½´ï¾—ï½°:サイコウオï¾ï¾ï½®ï½³ï½¶" ("Err: MAXTEMP")
-#define MSG_ERR_MINTEMP "\xb4\xd7\xb0:\xbb\xb2\xc3\xb2\xb5\xdd\xd0\xcf\xdd" // "ï½´ï¾—ï½°:サイテイオï¾ï¾ï¾ï¾" ("Err: MINTEMP")
-#if LCD_WIDTH >= 20
- #define MSG_ERR_MAXTEMP_BED "\xb4\xd7\xb0:\xcd\xde\xaf\xc4\xde\x20\xbb\xb2\xba\xb3\xb5\xdd\xc1\xae\xb3\xb6" // "ï½´ï¾—ï½°:ï¾ï¾žï½¯ï¾„゙ サイコウオï¾ï¾ï½®ï½³ï½¶" ("Err: MAXTEMP BED")
- #define MSG_ERR_MINTEMP_BED "\xb4\xd7\xb0:\xcd\xde\xaf\xc4\xde\x20\xbb\xb2\xc3\xb2\xb5\xdd\xd0\xcf\xdd" // "ï½´ï¾—ï½°:ï¾ï¾žï½¯ï¾„゙ サイテイオï¾ï¾ï¾ï¾" ("Err: MINTEMP BED")
-#else
- #define MSG_ERR_MAXTEMP_BED "\xb4\xd7\xb0:\xcd\xde\xaf\xc4\xde\x20\xbb\xb2\xba\xb3\xb5\xdd" // "ï½´ï¾—ï½°:ï¾ï¾žï½¯ï¾„゙ サイコウオï¾" ("Err: MAXTEMP BED")
- #define MSG_ERR_MINTEMP_BED "\xb4\xd7\xb0:\xcd\xde\xaf\xc4\xde\x20\xbb\xb2\xc3\xb2\xb5\xdd" // "ï½´ï¾—ï½°:ï¾ï¾žï½¯ï¾„゙ サイテイオï¾" ("Err: MINTEMP BED")
-#endif
-#define MSG_ERR_Z_HOMING MSG_HOME " " MSG_X MSG_Y " " MSG_FIRST // "サキニ XY ヲフッキサセテクダサイ" or "サキニ XY ヲフッキサセヨ" ("G28 Z Forbidden")
-#define MSG_HALTED "\xcc\xdf\xd8\xdd\xc0\xb0\xca\xc3\xb2\xbc\xbc\xcf\xbc\xc0" // "プリï¾ï¾€ï½°ï¾Šï¾ƒï½²ï½¼ï½¼ï¾ï½¼ï¾€" ("PRINTER HALTED")
-#define MSG_PLEASE_RESET "\xd8\xbe\xaf\xc4\xbc\xc3\xb8\xc0\xde\xbb\xb2" // "リセットシテクダサイ" ("Please reset")
-#define MSG_SHORT_DAY "d" // One character only
-#define MSG_SHORT_HOUR "h" // One character only
-#define MSG_SHORT_MINUTE "m" // One character only
-#define MSG_HEATING "\xb6\xc8\xc2\xc1\xad\xb3" // "カネツï¾ï½ï½³" ("Heating...")
-#define MSG_BED_HEATING "\xcd\xde\xaf\xc4\xde\x20\xb6\xc8\xc2\xc1\xad\xb3" // "ï¾ï¾žï½¯ï¾„゙ カネツï¾ï½ï½³" ("Bed Heating...")
-#define MSG_DELTA_CALIBRATE "\xc3\xde\xd9\xc0\x20\xba\xb3\xbe\xb2" // "デルタ コウセイ" ("Delta Calibration")
-#define MSG_DELTA_CALIBRATE_X "X\xbc\xde\xb8\x20\xba\xb3\xbe\xb2" // "Xジク コウセイ" ("Calibrate X")
-#define MSG_DELTA_CALIBRATE_Y "Y\xbc\xde\xb8\x20\xba\xb3\xbe\xb2" // "Yジク コウセイ" ("Calibrate Y")
-#define MSG_DELTA_CALIBRATE_Z "Z\xbc\xde\xb8\x20\xba\xb3\xbe\xb2" // "Zジク コウセイ" ("Calibrate Z")
-#define MSG_DELTA_CALIBRATE_CENTER "\xc1\xad\xb3\xbc\xdd\x20\xba\xb3\xbe\xb2" // "ï¾ï½ï½³ï½¼ï¾ コウセイ" ("Calibrate Center")
-#define MSG_INFO_MENU "\xba\xc9\xcc\xdf\xd8\xdd\xc0\xb0\xc6\xc2\xb2\xc3" // "コノプリï¾ï¾€ï½°ï¾†ï¾‚イテ" ("About Printer")
-#define MSG_INFO_PRINTER_MENU "\xcc\xdf\xd8\xdd\xc0\xb0\xbc\xde\xae\xb3\xce\xb3" // "プリï¾ï¾€ï½°ï½¼ï¾žï½®ï½³ï¾Žï½³" ("Printer Info")
-#define MSG_INFO_STATS_MENU "\xcc\xdf\xd8\xdd\xc4\xbc\xde\xae\xb3\xb7\xae\xb3" // "プリï¾ï¾„ジョウキョウ" ("Printer Stats")
-#define MSG_INFO_BOARD_MENU "\xbe\xb2\xb7\xde\xae\xb9\xb2\xbc\xde\xae\xb3\xce\xb3" // "セイギョケイジョウホウ" ("Board Info")
-#define MSG_INFO_THERMISTOR_MENU "\xbb\xb0\xd0\xbd\xc0\xb0" // "サーï¾ï½½ï¾€ï½°" ("Thermistors")
-#define MSG_INFO_EXTRUDERS "\xb4\xb8\xbd\xc4\xd9\xb0\xc0\xde\xb0\xbd\xb3" // "エクストルーダースウ" ("Extruders")
-#define MSG_INFO_BAUDRATE "\xce\xde\xb0\xda\xb0\xc4" // "ボーレート" ("Baud")
-#define MSG_INFO_PROTOCOL "\xcc\xdf\xdb\xc4\xba\xd9" // "プロトコル" ("Protocol")
-#define MSG_CASE_LIGHT "\xb7\xae\xb3\xc0\xb2\xc5\xb2\xbc\xae\xb3\xd2\xb2" // "キョウタイナイショウメイ" ("Case light")
-#define MSG_INFO_PRINT_COUNT "\xcc\xdf\xd8\xdd\xc4\xbd\xb3" // "プリï¾ï¾„スウ" ("Print Count")
-#define MSG_INFO_COMPLETED_PRINTS "\xb6\xdd\xd8\xae\xb3\xbd\xb3" // "ï½¶ï¾ï¾˜ï½®ï½³ï½½ï½³" ("Completed")
-#define MSG_INFO_PRINT_TIME "\xcc\xdf\xd8\xdd\xc4\xbc\xde\xb6\xdd\xd9\xb2\xb9\xb2" // "プリï¾ï¾„ジカï¾ï¾™ï½²ï½¹ï½²" ("Total print time")
-#define MSG_INFO_PRINT_LONGEST "\xbb\xb2\xc1\xae\xb3\xcc\xdf\xd8\xdd\xc4\xbc\xde\xb6\xdd" // "サイï¾ï½®ï½³ï¾Œï¾Ÿï¾˜ï¾ï¾„ジカï¾" ("Longest job time")
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_FILAMENT "\xcc\xa8\xd7\xd2\xdd\xc4\xbc\xd6\xb3\xd8\xae\xb3\xd9\xb2\xb9\xb2" // "フィラメï¾ï¾„シヨウリョウルイケイ" ("Extruded total")
-#else
- #define MSG_INFO_PRINT_FILAMENT "\xcc\xa8\xd7\xd2\xdd\xc4\xbf\xb3\xbc\xd6\xb3\xd8\xae\xb3" // "フィラメï¾ï¾„ソウシヨウリョウ" ("Extruded")
-#endif
-#define MSG_INFO_MIN_TEMP "\xbe\xaf\xc3\xb2\xbb\xb2\xc3\xb2\xb5\xdd" // "セッテイサイテイオï¾" ("Min Temp")
-#define MSG_INFO_MAX_TEMP "\xbe\xaf\xc3\xb2\xbb\xb2\xba\xb3\xb5\xdd" // "セッテイサイコウオï¾" ("Max Temp")
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PSU "\xc3\xde\xdd\xb9\xde\xdd\xbc\xad\xcd\xde\xc2" // "デï¾ï½¹ï¾žï¾ï½¼ï½ï¾ï¾žï¾‚" ("Power Supply")
-#else
- #define MSG_INFO_PSU "\xc3\xde\xdd\xb9\xde\xdd" // "デï¾ï½¹ï¾žï¾" ("Power Supply")
-#endif
-#define MSG_DRIVE_STRENGTH "\xd3\xb0\xc0\xb0\xb8\xc4\xde\xb3\xd8\xae\xb8" // "モータークドウリョク" ("Drive Strength")
-#if LCD_WIDTH >= 20
- #define MSG_DAC_PERCENT "DAC\xbc\xad\xc2\xd8\xae\xb8 %" // "DACï½¼ï½ï¾‚リョク %" ("Driver %")
-#else
- #define MSG_DAC_PERCENT "DAC\xbc\xad\xc2\xd8\xae\xb8" // "DACï½¼ï½ï¾‚リョク" ("Driver %")
-#endif
-#define MSG_DAC_EEPROM_WRITE MSG_STORE_EEPROM // "メモリï¾ï½¶ï½¸ï¾‰ï½³" ("DAC EEPROM Write")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME "\xcc\xdf\xd8\xdd\xc4\xbb\xb2\xb6\xb2" // "プリï¾ï¾„サイカイ" ("Resume print")
-
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 "\xba\xb3\xb6\xdd\xa6\xb6\xb2\xbc\xbc\xcf\xbd" // "コウカï¾ï½¦ï½¶ï½²ï½¼ï½¼ï¾ï½½" ("Wait for start")
- #define MSG_FILAMENT_CHANGE_INIT_2 "\xbc\xca\xde\xd7\xb8\xb5\xcf\xc1\xb8\xc0\xde\xbb\xb2" // "シバラクオï¾ï¾ï½¸ï¾€ï¾žï½»ï½²" ("of the filament")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 "\xcc\xa8\xd7\xd2\xdd\xc4\xc7\xb7\xc0\xde\xbc\xc1\xad\xb3" // "フィラメï¾ï¾„ヌキダシï¾ï½ï½³" ("Wait for")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 "\xbc\xca\xde\xd7\xb8\xb5\xcf\xc1\xb8\xc0\xde\xbb\xb2" // "シバラクオï¾ï¾ï½¸ï¾€ï¾žï½»ï½²" ("filament unload")
- #define MSG_FILAMENT_CHANGE_INSERT_1 "\xcc\xa8\xd7\xd2\xdd\xc4\xa6\xbf\xb3\xc6\xad\xb3\xbc," // "フィラメï¾ï¾„ヲソウニï½ï½³ï½¼," ("Insert filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 "\xb8\xd8\xaf\xb8\xbd\xd9\xc4\xbf\xde\xaf\xba\xb3\xbc\xcf\xbd" // "クリックスルトゾッコウシï¾ï½½" ("and press button")
- #define MSG_FILAMENT_CHANGE_LOAD_1 "\xcc\xa8\xd7\xd2\xdd\xc4\xbf\xb3\xc3\xdd\xc1\xad\xb3" // "フィラメï¾ï¾„ソウテï¾ï¾ï½ï½³" ("Wait for")
- #define MSG_FILAMENT_CHANGE_LOAD_2 "\xbc\xca\xde\xd7\xb8\xb5\xcf\xc1\xb8\xc0\xde\xbb\xb2" // "シバラクオï¾ï¾ï½¸ï¾€ï¾žï½»ï½²" ("filament load")
- #define MSG_FILAMENT_CHANGE_RESUME_1 "\xcc\xdf\xd8\xdd\xc4\xa6\xbb\xb2\xb6\xb2\xbc\xcf\xbd" // "プリï¾ï¾„ヲサイカイシï¾ï½½" ("Wait for print")
- #define MSG_FILAMENT_CHANGE_RESUME_2 "\xbc\xca\xde\xd7\xb8\xb5\xcf\xc1\xb8\xc0\xde\xbb\xb2" // "シバラクオï¾ï¾ï½¸ï¾€ï¾žï½»ï½²" ("to resume")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 "\xba\xb3\xb6\xdd\xa6\xb6\xb2\xbc\xbc\xcf\xbd" // "コウカï¾ï½¦ï½¶ï½²ï½¼ï½¼ï¾ï½½" ("Please wait...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 "\xcc\xa8\xd7\xd2\xdd\xc4\xc7\xb7\xc0\xde\xbc\xc1\xad\xb3" // "フィラメï¾ï¾„ヌキダシï¾ï½ï½³" ("Ejecting...")
- #if LCD_WIDTH >= 20
- #define MSG_FILAMENT_CHANGE_INSERT_1 "\xbf\xb3\xc6\xad\xb3\xbc\x2c\xb8\xd8\xaf\xb8\xbc\xc3\xb8\xc0\xde\xbb\xb2" // "ソウニï½ï½³ï½¼,クリックシテクダサイ" ("Insert and Click")
- #else
- #define MSG_FILAMENT_CHANGE_INSERT_1 "\xbf\xb3\xc6\xad\xb3\xbc\x2c\xb8\xd8\xaf\xb8\xbe\xd6" // "ソウニï½ï½³ï½¼,クリックセヨ" ("Insert and Click")
- #endif
- #define MSG_FILAMENT_CHANGE_LOAD_1 "\xcc\xa8\xd7\xd2\xdd\xc4\xbf\xb3\xc3\xdd\xc1\xad\xb3" // "フィラメï¾ï¾„ソウテï¾ï¾ï½ï½³" ("Loading...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 "\xcc\xdf\xd8\xdd\xc4\xa6\xbb\xb2\xb6\xb2\xbc\xcf\xbd" // "プリï¾ï¾„ヲサイカイシï¾ï½½" ("Resuming...")
-#endif // LCD_HEIGHT < 4
-
-#endif // LANGUAGE_KANA_H
diff --git a/Marlin/language_pl-HD44780.h b/Marlin/language_pl-HD44780.h
deleted file mode 100644
index 6968fc8a37..0000000000
--- a/Marlin/language_pl-HD44780.h
+++ /dev/null
@@ -1,275 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- * Polish for HD44780 display - no accented characters
- */
-
-#ifndef LANGUAGE_PL_HD44780_H
-#define LANGUAGE_PL_HD44780_H
-
-#define NOT_EXTENDED_ISO10646_1_5X7
-
-#define WELCOME_MSG MACHINE_NAME _UxGT(" gotowy.")
-#define MSG_SD_INSERTED _UxGT("Karta wlozona")
-#define MSG_SD_REMOVED _UxGT("Karta usunieta")
-#define MSG_LCD_ENDSTOPS _UxGT("Krancow.") // Max length 8 characters
-#define MSG_MAIN _UxGT("Menu glowne")
-#define MSG_AUTOSTART _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS _UxGT("Wylacz silniki")
-#define MSG_AUTO_HOME _UxGT("Pozycja zerowa")
-#define MSG_AUTO_HOME_X _UxGT("Zeruj X")
-#define MSG_AUTO_HOME_Y _UxGT("Zeruj Y")
-#define MSG_AUTO_HOME_Z _UxGT("Zeruj Z")
-#define MSG_LEVEL_BED _UxGT("Poziom. stolu")
-#define MSG_LEVEL_BED_HOMING _UxGT("Pozycja zerowa")
-#define MSG_LEVEL_BED_WAITING _UxGT("Kliknij by rozp.")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Nastepny punkt")
-#define MSG_LEVEL_BED_DONE _UxGT("Wypoziomowano!")
-#define MSG_USER_MENU _UxGT("Wlasne Polecenia")
-#define MSG_SET_HOME_OFFSETS _UxGT("Ust. poz. zer.")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Poz. zerowa ust.")
-#define MSG_SET_ORIGIN _UxGT("Ustaw punkt zero")
-#define MSG_PREHEAT_1 _UxGT("Rozgrzej PLA")
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" wsz.")
-#define MSG_PREHEAT_1_BEDONLY _UxGT("Rozgrzej stol PLA")
-#define MSG_PREHEAT_1_SETTINGS _UxGT("Ustaw. rozg. PLA")
-#define MSG_PREHEAT_2 _UxGT("Rozgrzej ABS")
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" wsz.")
-#define MSG_PREHEAT_2_BEDONLY _UxGT("Rozgrzej stol ABS")
-#define MSG_PREHEAT_2_SETTINGS _UxGT("Ustaw. rozg. ABS")
-#define MSG_COOLDOWN _UxGT("Chlodzenie")
-#define MSG_SWITCH_PS_ON _UxGT("Wlacz zasilacz")
-#define MSG_SWITCH_PS_OFF _UxGT("Wylacz zasilacz")
-#define MSG_EXTRUDE _UxGT("Ekstruzja")
-#define MSG_RETRACT _UxGT("Wycofanie")
-#define MSG_MOVE_AXIS _UxGT("Ruch osi")
-#define MSG_BED_LEVELING _UxGT("Poziom. stolu")
-#define MSG_MOVE_X _UxGT("Przesun w X")
-#define MSG_MOVE_Y _UxGT("Przesun w Y")
-#define MSG_MOVE_Z _UxGT("Przesun w Z")
-#define MSG_MOVE_E _UxGT("Ekstruzja (os E)")
-#define MSG_MOVE_01MM _UxGT("Przesun co .1mm")
-#define MSG_MOVE_1MM _UxGT("Przesun co 1mm")
-#define MSG_MOVE_10MM _UxGT("Przesun co 10mm")
-#define MSG_SPEED _UxGT("Predkosc")
-#define MSG_BED_Z _UxGT("Stol Z")
-#define MSG_NOZZLE _UxGT("Dysza")
-#define MSG_BED _UxGT("Stol")
-#define MSG_FAN_SPEED _UxGT("Obroty wiatraka")
-#define MSG_FLOW _UxGT("Przeplyw")
-#define MSG_CONTROL _UxGT("Ustawienia")
-#define MSG_MIN LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR LCD_STR_THERMOMETER _UxGT(" Mnoznik")
-#define MSG_AUTOTEMP _UxGT("Auto. temperatura")
-#define MSG_ON _UxGT("Wl. ")
-#define MSG_OFF _UxGT("Wyl.")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Select")
-#define MSG_ACC _UxGT("Przyspieszenie")
-#define MSG_JERK _UxGT("Zryw")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Zryw Va")
- #define MSG_VB_JERK _UxGT("Zryw Vb")
- #define MSG_VC_JERK _UxGT("Zryw Vc")
-#else
- #define MSG_VA_JERK _UxGT("Zryw Vx")
- #define MSG_VB_JERK _UxGT("Zryw Vy")
- #define MSG_VC_JERK _UxGT("Zryw Vz")
-#endif
-#define MSG_VE_JERK _UxGT("Zryw Ve")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("Vskok min")
-#define MSG_ACCELERATION MSG_ACC
-#define MSG_AMAX _UxGT("Amax")
-#define MSG_A_RETRACT _UxGT("A-wycofanie")
-#define MSG_A_TRAVEL _UxGT("A-przesun.")
-#define MSG_STEPS_PER_MM _UxGT("kroki/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("krokiA/mm")
- #define MSG_BSTEPS _UxGT("krokiB/mm")
- #define MSG_CSTEPS _UxGT("krokiC/mm")
-#else
- #define MSG_ASTEPS _UxGT("krokiX/mm")
- #define MSG_BSTEPS _UxGT("krokiY/mm")
- #define MSG_CSTEPS _UxGT("krokiZ/mm")
-#endif
-#define MSG_ESTEPS _UxGT("krokiE/mm")
-#define MSG_E1STEPS _UxGT("krokiE1/mm")
-#define MSG_E2STEPS _UxGT("krokiE2/mm")
-#define MSG_E3STEPS _UxGT("krokiE3/mm")
-#define MSG_E4STEPS _UxGT("krokiE4/mm")
-#define MSG_E5STEPS _UxGT("krokiE5/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatura")
-#define MSG_MOTION _UxGT("Ruch")
-#define MSG_FILAMENT _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E w mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Sr. fil.")
-#define MSG_CONTRAST _UxGT("Kontrast LCD")
-#define MSG_STORE_EEPROM _UxGT("Zapisz w pamieci")
-#define MSG_LOAD_EEPROM _UxGT("Wczytaj z pamieci")
-#define MSG_RESTORE_FAILSAFE _UxGT("Ustaw. fabryczne")
-#define MSG_REFRESH _UxGT("Odswiez")
-#define MSG_WATCH _UxGT("Ekran glowny")
-#define MSG_PREPARE _UxGT("Przygotuj")
-#define MSG_TUNE _UxGT("Strojenie")
-#define MSG_PAUSE_PRINT _UxGT("Pauza")
-#define MSG_RESUME_PRINT _UxGT("Wznowienie")
-#define MSG_STOP_PRINT _UxGT("Stop")
-#define MSG_CARD_MENU _UxGT("Karta SD")
-#define MSG_NO_CARD _UxGT("Brak karty")
-#define MSG_DWELL _UxGT("Uspij...")
-#define MSG_USERWAIT _UxGT("Oczekiwanie...")
-#define MSG_PRINT_ABORTED _UxGT("Druk przerwany")
-#define MSG_NO_MOVE _UxGT("Brak ruchu")
-#define MSG_KILLED _UxGT("Ubity. ")
-#define MSG_STOPPED _UxGT("Zatrzymany. ")
-#define MSG_CONTROL_RETRACT _UxGT("Wycofaj mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Z Wycof. mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Wycofaj V")
-#define MSG_CONTROL_RETRACT_ZLIFT _UxGT("Skok Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("Cof. wycof. mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Z Cof. wyc. mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("Cof. wycof. V")
-#define MSG_AUTORETRACT _UxGT("Auto. wycofanie")
-#define MSG_FILAMENTCHANGE _UxGT("Zmien filament")
-#define MSG_INIT_SDCARD _UxGT("Inicjal. karty SD")
-#define MSG_CNG_SDCARD _UxGT("Zmiana karty SD")
-#define MSG_ZPROBE_OUT _UxGT("Sonda Z za stolem")
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Self-Test")
-#define MSG_BLTOUCH_RESET _UxGT("Reset BLTouch")
-#define MSG_HOME _UxGT("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST
-#define MSG_FIRST _UxGT("first")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Offset Z")
-#define MSG_BABYSTEP_X _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Blad krancowki")
-#define MSG_HEATING_FAILED_LCD _UxGT("Rozgrz. nieudane")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Blad temperatury")
-#define MSG_THERMAL_RUNAWAY _UxGT("Zanik temp.")
-#define MSG_ERR_MAXTEMP _UxGT("Err max temp")
-#define MSG_ERR_MINTEMP _UxGT("Err min temp")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Err max temp stolu")
-#define MSG_ERR_MINTEMP_BED _UxGT("Err min temp stolu")
-#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST
-#define MSG_HALTED _UxGT("Drukarka zatrzym.")
-#define MSG_PLEASE_RESET _UxGT("Prosze zresetowac")
-#define MSG_SHORT_DAY _UxGT("d") // One character only
-#define MSG_SHORT_HOUR _UxGT("g") // One character only
-#define MSG_SHORT_MINUTE _UxGT("m") // One character only
-#define MSG_HEATING _UxGT("Rozgrzewanie...")
-#define MSG_BED_HEATING _UxGT("Rozgrzewanie stolu...")
-#define MSG_DELTA_CALIBRATE _UxGT("Kalibrowanie Delty")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Kalibruj X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Kalibruj Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Kalibruj Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Kalibruj srodek")
-
-#define MSG_INFO_MENU _UxGT("O drukarce")
-#define MSG_INFO_PRINTER_MENU _UxGT("Info drukarki")
-#define MSG_INFO_STATS_MENU _UxGT("Statystyki")
-#define MSG_INFO_BOARD_MENU _UxGT("Board Info")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Thermistory")
-#define MSG_INFO_EXTRUDERS _UxGT("Ekstrudery")
-#define MSG_INFO_BAUDRATE _UxGT("Predkosc USB")
-#define MSG_INFO_PROTOCOL _UxGT("Protokol")
-#define MSG_CASE_LIGHT _UxGT("Oswietlenie")
-
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Wydrukowano")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Ukonczono")
- #define MSG_INFO_PRINT_TIME _UxGT("Czas druku")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Najdl. druk")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Uzyty fil.")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Wydrukowano")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Ukonczono")
- #define MSG_INFO_PRINT_TIME _UxGT("Razem")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Najdl. druk")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Uzyty fil.")
-#endif
-
-#define MSG_INFO_MIN_TEMP _UxGT("Min Temp")
-#define MSG_INFO_MAX_TEMP _UxGT("Max Temp")
-#define MSG_INFO_PSU _UxGT("Zasilacz")
-
-#define MSG_DRIVE_STRENGTH _UxGT("Sila silnika")
-#define MSG_DAC_PERCENT _UxGT("Sila %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Zapisz DAC EEPROM")
-
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("ZMIEN FILAMENT")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ZMIEN OPCJE:")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Wznow drukowanie")
-
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Czekam na ")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("zmiane filamentu")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Czekam na")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("wyjecie filamentu")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Wloz filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("i nacisnij przycisk")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("aby kontynuowac...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Czekam na")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("wlozenie filamentu")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Czekam na")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("wznowienie druku")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Prosze czekac...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Wysuwanie...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Wloz i nacisnij prz.")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Ladowanie...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wznowienie...")
-#endif // LCD_HEIGHT < 4
-
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Czekam na ")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("zmiane filamentu")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Czekam na")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("wyjecie filamentu")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Wloz filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("i nacisnij przycisk")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("aby kontynuowac...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Czekam na")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("wlozenie filamentu")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Czekam na")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("wznowienie druku")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Prosze czekac...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Wysuwanie...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Wloz i nacisnij prz.")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Ladowanie...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wznowienie...")
-#endif // LCD_HEIGHT < 4
-
-#endif // LANGUAGE_PL_HD44780_H
diff --git a/Marlin/language_pt-br_utf8.h b/Marlin/language_pt-br_utf8.h
deleted file mode 100644
index 2e481e4810..0000000000
--- a/Marlin/language_pt-br_utf8.h
+++ /dev/null
@@ -1,384 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- * Portuguese (Brazil)
- * UTF-8 for Graphical Display
- *
- * LCD Menu Messages
- * See also http://marlinfw.org/docs/development/lcd_language.html
- *
- */
-#ifndef LANGUAGE_PT_BR_UTF_H
-#define LANGUAGE_PT_BR_UTF_H
-
-#define MAPPER_C2C3
-#define DISPLAY_CHARSET_ISO10646_1
-#define CHARSIZE 2
-
-#define WELCOME_MSG MACHINE_NAME _UxGT(" pronto.")
-
-#define MSG_BACK _UxGT("Voltar")
-#define MSG_SD_INSERTED _UxGT("Cartão inserido")
-#define MSG_SD_REMOVED _UxGT("Cartão removido")
-#define MSG_LCD_ENDSTOPS _UxGT("Finais")
-#define MSG_MAIN _UxGT("Menu principal")
-#define MSG_AUTOSTART _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS _UxGT("Desabi. motores")
-#define MSG_DEBUG_MENU _UxGT("Menu Debug")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Testar Barra de Prog")//resso
-#define MSG_AUTO_HOME_X _UxGT("Ir na origem X")
-#define MSG_AUTO_HOME_Y _UxGT("Ir na origem Y")
-#define MSG_AUTO_HOME_Z _UxGT("Ir na origem Z")
-#define MSG_AUTO_HOME _UxGT("Ir na origem XYZ")
-#define MSG_LEVEL_BED_HOMING _UxGT("Indo para origem")
-#define MSG_LEVEL_BED_WAITING _UxGT("Clique para Iniciar")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Próximo Ponto")
-#define MSG_LEVEL_BED_DONE _UxGT("Fim nivelação!")
-#define MSG_Z_FADE_HEIGHT _UxGT("Suavizar altura")
-#define MSG_SET_HOME_OFFSETS _UxGT("Compensar origem")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Alteração feita")
-#define MSG_SET_ORIGIN _UxGT("Ajustar Origem")
-#define MSG_PREHEAT_1 _UxGT("Pre-aquecer PLA")
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL _UxGT("Pre-aq.Todo PLA")
-#define MSG_PREHEAT_1_END _UxGT("Pre-aq.Extrusora")
-#define MSG_PREHEAT_1_BEDONLY _UxGT("Pre-aq.Mesa PLA")
-#define MSG_PREHEAT_1_SETTINGS _UxGT("Ajustar PLA")
-#define MSG_PREHEAT_2 _UxGT("Pre-aquecer ABS")
-#define MSG_PREHEAT_2_N _UxGT("Pre-aquecer ABS")
-#define MSG_PREHEAT_2_ALL _UxGT("Pre-aq.Todo ABS")
-#define MSG_PREHEAT_2_BEDONLY _UxGT("Pre-aq.Mesa ABS")
-#define MSG_PREHEAT_2_END _UxGT("Pre-aq.Extrusora")
-#define MSG_PREHEAT_2_SETTINGS _UxGT("Ajustar ABS")
-#define MSG_COOLDOWN _UxGT("Esfriar")
-#define MSG_SWITCH_PS_ON _UxGT("Ligar")
-#define MSG_SWITCH_PS_OFF _UxGT("Desligar")
-#define MSG_EXTRUDE _UxGT("Extrusar")
-#define MSG_RETRACT _UxGT("Retrair")
-#define MSG_MOVE_AXIS _UxGT("Mover eixo")
-#define MSG_BED_LEVELING _UxGT("Nivelação Mesa")
-#define MSG_LEVEL_BED _UxGT("Nivelar Mesa")
-#define MSG_LEVEL_CORNERS _UxGT("Nivelar Cantos")
-#define MSG_NEXT_CORNER _UxGT("Próximo Canto")
-#define MSG_EDITING_STOPPED _UxGT("Fim da Edição")
-
-#define MSG_USER_MENU _UxGT("Comando customizado")
-#define MSG_UBL_DOING_G29 _UxGT("Executando G29")
-#define MSG_UBL_UNHOMED _UxGT("Fora da Origam")
-#define MSG_UBL_TOOLS _UxGT("Ferramentas UBL")
-#define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling")
-#define MSG_UBL_MANUAL_MESH _UxGT("Fazer malha manual")
-#define MSG_UBL_BC_INSERT _UxGT("Calçar e calibrar")
-#define MSG_UBL_BC_INSERT2 _UxGT("Medir")
-#define MSG_UBL_BC_REMOVE _UxGT("Remover e calibrar")
-
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("Indo para o Próximo")
-#define MSG_UBL_ACTIVATE_MESH _UxGT("Ativar UBL")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("Desativar UBL")
-#define MSG_UBL_SET_BED_TEMP _UxGT("Temp. Mesa")
-#define MSG_UBL_CUSTOM_BED_TEMP MSG_UBL_SET_BED_TEMP
-#define MSG_UBL_SET_HOTEND_TEMP _UxGT("Temp. Extrusora")
-#define MSG_UBL_CUSTOM_HOTEND_TEMP MSG_UBL_SET_HOTEND_TEMP
-#define MSG_UBL_MESH_EDIT _UxGT("Editar Malha")
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Editar Malha Custom")
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("Ajuste Fino da Malha")
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Fim da Edição")
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Montar Customi")
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Montar ")
-#define MSG_UBL_BUILD_PLA_MESH _UxGT("Montar PLA")
-#define MSG_UBL_BUILD_ABS_MESH _UxGT("Montar ABS")
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Montar fria")
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Ajustar Altura")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Tamanho da Elevação")
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Validar Malha")
-#define MSG_UBL_VALIDATE_PLA_MESH _UxGT("Checar PLA")
-#define MSG_UBL_VALIDATE_ABS_MESH _UxGT("Checar ABS")
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Validar Malha Custom")
-#define MSG_UBL_CONTINUE_MESH _UxGT("Continuar Malha")
-#define MSG_UBL_MESH_LEVELING _UxGT("Nivelação da Malha")
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("Nivelação 3 pontos")
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Nivelação Grid")
-#define MSG_UBL_MESH_LEVEL _UxGT("Nivelar Malha")
-#define MSG_UBL_SIDE_POINTS _UxGT("Cantos")
-#define MSG_UBL_MAP_TYPE _UxGT("Tipo de Mapa")
-#define MSG_UBL_OUTPUT_MAP _UxGT("Salvar Mapa da Malha")
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Enviar Para Host")
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Salvar Malha CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Salvar Backup")
-#define MSG_UBL_INFO_UBL _UxGT("Informação do UBL")
-#define MSG_UBL_EDIT_MESH_MENU _UxGT("Editar Malha")
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("Qtd de Enchimento")
-#define MSG_UBL_MANUAL_FILLIN _UxGT("Enchimento Manual")
-#define MSG_UBL_SMART_FILLIN _UxGT("Enchimento Smart")
-#define MSG_UBL_FILLIN_MESH _UxGT("Preencher malha")
-#define MSG_UBL_INVALIDATE_ALL _UxGT("Invalidar tudo")
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Invalidar próximo")
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("Ajuste Fino de Todos")
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Ajuar Mais Próximo")
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Armazenamento Malha")
-#define MSG_UBL_STORAGE_SLOT _UxGT("Slot de Memória")
-#define MSG_UBL_LOAD_MESH _UxGT("Ler Malha")
-#define MSG_UBL_SAVE_MESH _UxGT("Salvar Malha")
-#define MSG_MESH_LOADED _UxGT("Malha %i carregada")
-#define MSG_MESH_SAVED _UxGT("Malha %i salva")
-#define MSG_NO_STORAGE _UxGT("Sem armazenamento")
-#define MSG_UBL_SAVE_ERROR _UxGT("Erro ao salvar UBL")
-#define MSG_UBL_RESTORE_ERROR _UxGT("Erro no restauro UBL")
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Compensação Z parou")
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("UBL passo a passo")
-#define MSG_LED_CONTROL _UxGT("Controle do LED")
-#define MSG_LEDS_ON _UxGT("Luz Acesa")
-#define MSG_LEDS_OFF _UxGT("Luz Apagada")
-#define MSG_LED_PRESETS _UxGT("Configuração da Luz")
-#define MSG_SET_LEDS_RED _UxGT("Luz Vermelha")
-#define MSG_SET_LEDS_ORANGE _UxGT("Luz Laranja")
-#define MSG_SET_LEDS_YELLOW _UxGT("Luz Amarela")
-#define MSG_SET_LEDS_GREEN _UxGT("Luz Verde")
-#define MSG_SET_LEDS_BLUE _UxGT("Luz Azul")
-#define MSG_SET_LEDS_INDIGO _UxGT("Luz Indigo")
-#define MSG_SET_LEDS_VIOLET _UxGT("Luz Violeta")
-#define MSG_SET_LEDS_WHITE _UxGT("Luz Branca")
-#define MSG_SET_LEDS_DEFAULT _UxGT("Luz Padrão")
-#define MSG_CUSTOM_LEDS _UxGT("Luz Customizada")
-#define MSG_INTENSITY_R _UxGT("Intensidade Vermelho")
-#define MSG_INTENSITY_G _UxGT("Intensidade Verde")
-#define MSG_INTENSITY_B _UxGT("Intensidade Azul")
-#define MSG_INTENSITY_W _UxGT("Intensidade Branco")
-#define MSG_LED_BRIGHTNESS _UxGT("Brilho")
-
-#define MSG_MOVING _UxGT("Movendo...")
-#define MSG_FREE_XY _UxGT("Liberar XY")
-#define MSG_MOVE_X _UxGT("Mover X")
-#define MSG_MOVE_Y _UxGT("Mover Y")
-#define MSG_MOVE_Z _UxGT("Mover Z")
-#define MSG_MOVE_E _UxGT("Mover Extrusor")
-#define MSG_MOVE_01MM _UxGT("Mover 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Mover 1mm")
-#define MSG_MOVE_10MM _UxGT("Mover 10mm")
-#define MSG_SPEED _UxGT("Velocidade")
-#define MSG_BED_Z _UxGT("Base Z")
-#define MSG_NOZZLE _UxGT("Bocal")
-#define MSG_BED _UxGT("Mesa")
-#define MSG_FAN_SPEED _UxGT("Vel. Ventoinha")
-#define MSG_FLOW _UxGT("Vazão")
-#define MSG_CONTROL _UxGT("Controle")
-#define MSG_MIN LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR LCD_STR_THERMOMETER _UxGT(" Fator")
-#define MSG_AUTOTEMP _UxGT("Temp. Automática")
-#define MSG_ON _UxGT("Ligado ")
-#define MSG_OFF _UxGT("Desligado")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Selecionar")
-#define MSG_ACC _UxGT("Acel.")
-#define MSG_JERK _UxGT("Jogo")
-#if IS_SCARA
- #define MSG_VA_JERK _UxGT("jogo VA")
- #define MSG_VB_JERK _UxGT("jogo VB")
- #define MSG_VC_JERK _UxGT("jogo VZ")
-#elif IS_DELTA
- #define MSG_VA_JERK _UxGT("jogo VA")
- #define MSG_VB_JERK _UxGT("jogo VB")
- #define MSG_VC_JERK _UxGT("jogo VC")
-#else
- #define MSG_VA_JERK _UxGT("jogo VX")
- #define MSG_VB_JERK _UxGT("jogo VY")
- #define MSG_VC_JERK _UxGT("jogo VZ")
-#endif
-#define MSG_VE_JERK _UxGT("jogo VE")
-#define MSG_VELOCITY _UxGT("Velocidade")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("VDeslocamento min")
-#define MSG_AMAX _UxGT("Amax ")
-#define MSG_A_RETRACT _UxGT("Retrair A")
-#define MSG_A_TRAVEL _UxGT("Movimento A")
-#define MSG_STEPS_PER_MM _UxGT("Passo/mm")
-#if IS_SCARA
- #define MSG_ASTEPS _UxGT("Passo A/deg")
- #define MSG_BSTEPS _UxGT("Passo B/deg")
- #define MSG_CSTEPS _UxGT("Passo Z/mm")
-#elif IS_DELTA
- #define MSG_ASTEPS _UxGT("Passo A/mm")
- #define MSG_BSTEPS _UxGT("Passo B/mm")
- #define MSG_CSTEPS _UxGT("Passo C/mm")
-#else
- #define MSG_ASTEPS _UxGT("Passo X/mm")
- #define MSG_BSTEPS _UxGT("Passo Y/mm")
- #define MSG_CSTEPS _UxGT("Passo Z/mm")
-#endif
-#define MSG_ESTEPS _UxGT("E/mm")
-#define MSG_E1STEPS _UxGT("E1/mm")
-#define MSG_E2STEPS _UxGT("E2/mm")
-#define MSG_E3STEPS _UxGT("E3/mm")
-#define MSG_E4STEPS _UxGT("E4/mm")
-#define MSG_E5STEPS _UxGT("E5/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatura")
-#define MSG_MOTION _UxGT("Movimento")
-#define MSG_FILAMENT _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("Extrusão em mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Diâmetro Fil.")
-#define MSG_ADVANCE_K _UxGT("Avançar K")
-#define MSG_CONTRAST _UxGT("Contraste")
-#define MSG_STORE_EEPROM _UxGT("Salvar Configuração")
-#define MSG_LOAD_EEPROM _UxGT("Ler Configuração")
-#define MSG_RESTORE_FAILSAFE _UxGT("Restauro seguro")
-#define MSG_INIT_EEPROM _UxGT("Iniciar EEPROM")
-#define MSG_REFRESH LCD_STR_REFRESH _UxGT(" Atualização")
-#define MSG_WATCH _UxGT("Informações")
-#define MSG_PREPARE _UxGT("Preparar")
-#define MSG_TUNE _UxGT("Ajustar")
-#define MSG_PAUSE_PRINT _UxGT("Pausar impressão")
-#define MSG_RESUME_PRINT _UxGT("Resumir impressão")
-#define MSG_STOP_PRINT _UxGT("Parar impressão")
-#define MSG_CARD_MENU _UxGT("Imprimir do SD")
-#define MSG_NO_CARD _UxGT("Sem cartão SD")
-#define MSG_DWELL _UxGT("ZzZzZz...")
-#define MSG_USERWAIT _UxGT("Clique para retomar")
-#define MSG_PRINT_ABORTED _UxGT("Impressão Abortada")
-#define MSG_NO_MOVE _UxGT("Sem movimento")
-#define MSG_KILLED _UxGT("PARADA DE EMERGÊNCIA")
-#define MSG_STOPPED _UxGT("PAROU. ")
-#define MSG_CONTROL_RETRACT _UxGT("Retrair mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Retrair Troca mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Retrair V")
-#define MSG_CONTROL_RETRACT_ZLIFT _UxGT("Saltar mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("Des-Retrair mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Des-RetTroca mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("Des-Retrair V")
-#define MSG_AUTORETRACT _UxGT("Retração Automática")
-#define MSG_FILAMENTCHANGE _UxGT("Trocar Filamento")
-#define MSG_INIT_SDCARD _UxGT("Iniciar SD")
-#define MSG_CNG_SDCARD _UxGT("Trocar SD")
-#define MSG_ZPROBE_OUT _UxGT("Sonda fora da mesa")
-#define MSG_SKEW_FACTOR _UxGT("Fator de Cisalho")
-#define MSG_BLTOUCH _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST _UxGT("Testar BLTouch")
-#define MSG_BLTOUCH_RESET _UxGT("Reiniciar BLTouch")
-#define MSG_BLTOUCH_DEPLOY _UxGT("Implantar BLTouch")
-#define MSG_BLTOUCH_STOW _UxGT("Condicionar BLTouch")
-
-#define MSG_HOME _UxGT("Home")
-#define MSG_FIRST _UxGT("Primeiro")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Compensar Sonda em Z")
-#define MSG_BABYSTEP_X _UxGT("Passinho X")
-#define MSG_BABYSTEP_Y _UxGT("Passinho Y")
-#define MSG_BABYSTEP_Z _UxGT("Passinho Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Fim de Curso")
-#define MSG_HEATING_FAILED_LCD _UxGT("Aquecimento falhou")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Erro:Temp Redundante")
-#define MSG_THERMAL_RUNAWAY _UxGT("ESCAPE TÉRMICO")
-#define MSG_ERR_MAXTEMP _UxGT("Erro:Temp Máxima")
-#define MSG_ERR_MINTEMP _UxGT("Erro:Temp MÃnima")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Erro:Temp Mesa Máx")
-#define MSG_ERR_MINTEMP_BED _UxGT("Erro:Temp Mesa MÃn")
-#define MSG_HEATING _UxGT("Aquecendo...")
-#define MSG_BED_HEATING _UxGT("Aquecendo base...")
-#define MSG_DELTA_CALIBRATE _UxGT("Calibrar Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Calibrar X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Calibrar Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Calibrar Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Calibrar Centro")
-
-#define MSG_DELTA_SETTINGS _UxGT("Configuração Delta")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Auto-Calibração")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Calibrar Altura")
-#define MSG_DELTA_DIAG_ROD _UxGT("Haste Diagonal")
-#define MSG_DELTA_HEIGHT _UxGT("Altura")
-#define MSG_DELTA_RADIUS _UxGT("Raio")
-#define MSG_INFO_MENU _UxGT("Sobre")
-#define MSG_INFO_PRINTER_MENU _UxGT("Impressora")
-#define MSG_3POINT_LEVELING _UxGT("Nivelamento 3 pontos")
-#define MSG_LINEAR_LEVELING _UxGT("Nivelamento Linear")
-#define MSG_BILINEAR_LEVELING _UxGT("Nivelamento Bilinear")
-#define MSG_UBL_LEVELING _UxGT("Nivelamento UBL")
-#define MSG_MESH_LEVELING _UxGT("Nivelamento da Malha")
-#define MSG_INFO_STATS_MENU _UxGT("EstatÃsticas")
-#define MSG_INFO_BOARD_MENU _UxGT("Info. da Placa")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Thermistors")
-#define MSG_INFO_EXTRUDERS _UxGT("Extrusoras")
-#define MSG_INFO_BAUDRATE _UxGT("Frequência Baud")
-#define MSG_INFO_PROTOCOL _UxGT("Protocolo")
-#define MSG_CASE_LIGHT _UxGT("Luz da Estrutura")
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Intensidade Brilho")
-#define MSG_INFO_PRINT_COUNT _UxGT("Qtd Impressões")
-#define MSG_INFO_COMPLETED_PRINTS _UxGT("Completas")
-#define MSG_INFO_PRINT_TIME _UxGT("Tempo de Imprimindo")
-#define MSG_INFO_PRINT_LONGEST _UxGT("Impressão Mais Longa")
-#define MSG_INFO_PRINT_FILAMENT _UxGT("Depositado")
-#define MSG_INFO_MIN_TEMP _UxGT("Temp Min")
-#define MSG_INFO_MAX_TEMP _UxGT("Temp Max")
-#define MSG_INFO_PSU _UxGT("PSU")
-#define MSG_DRIVE_STRENGTH _UxGT("Força do Motor")
-#define MSG_DAC_PERCENT _UxGT("Driver %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Escrever Eeprom DAC")
-
-#define MSG_FILAMENT_CHANGE_HEADER _UxGT("Troca de Filamento")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("Config. de Retomada")
-#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrusar Mais")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Continuar Impressão")
-#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Temp. MÃnima é ")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Bocal: ")
-#define MSG_ERR_HOMING_FAILED _UxGT("Falha ao ir à origem")
-#define MSG_ERR_PROBING_FAILED _UxGT("Falha ao sondar")
-
-#if LCD_HEIGHT >= 4
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Esperando o")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("inicio da")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("troca de Filamento")
-
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Esperando")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("remoção de filamento")
-
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Coloque Filamento")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("pressione o botão")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("para continuar...")
-
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Pressione o botão")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("p/ Aquecer o Bocal")
-
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Aquecendo o Bocal")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Aguarde...")
-
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Esperando")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filamento")
-
- #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Esperando extrusão")
- #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("de filamento")
-
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Esperando impressão")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("continuar")
-#else LCD_HEIGHT < 4
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Aguarde...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejetando...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insira e Clique")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Aquecendo...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Carregando...")
- #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Extrusando...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Continuando...")
-#endif
-
-#endif // LANGUAGE_PT_BR_UTF_H
diff --git a/Marlin/language_pt.h b/Marlin/language_pt.h
deleted file mode 100644
index c314cc80da..0000000000
--- a/Marlin/language_pt.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- * Portuguese
- *
- * LCD Menu Messages
- * See also http://marlinfw.org/docs/development/lcd_language.html
- *
- */
-#ifndef LANGUAGE_PT_H
-#define LANGUAGE_PT_H
-
-#define DISPLAY_CHARSET_ISO10646_1
-#define NOT_EXTENDED_ISO10646_1_5X7
-
-#define WELCOME_MSG MACHINE_NAME " pronta."
-#define MSG_SD_INSERTED "Cartao inserido"
-#define MSG_SD_REMOVED "Cartao removido"
-#define MSG_MAIN "Menu principal"
-#define MSG_AUTOSTART "Autostart"
-#define MSG_DISABLE_STEPPERS "Desactivar motores"
-#define MSG_AUTO_HOME "Ir para origem"
-#define MSG_AUTO_HOME_X "Ir para origem X"
-#define MSG_AUTO_HOME_Y "Ir para origem Y"
-#define MSG_AUTO_HOME_Z "Ir para origem Z"
-#define MSG_LEVEL_BED_HOMING "Indo para origem"
-#define MSG_LEVEL_BED_WAITING "Click para iniciar"
-#define MSG_LEVEL_BED_NEXT_POINT "Proximo ponto"
-#define MSG_LEVEL_BED_DONE "Pronto !"
-#define MSG_SET_HOME_OFFSETS "Definir desvio"
-#define MSG_HOME_OFFSETS_APPLIED "Offsets applied"
-#define MSG_SET_ORIGIN "Definir origem"
-#define MSG_PREHEAT_1 "Pre-aquecer PLA"
-#define MSG_PREHEAT_1_N "Pre-aquecer PLA"
-#define MSG_PREHEAT_1_ALL "Pre-aq. PLA Tudo"
-#define MSG_PREHEAT_1_BEDONLY "Pre-aq. PLA " LCD_STR_THERMOMETER "Base"
-#define MSG_PREHEAT_1_SETTINGS "Definicoes PLA"
-#define MSG_PREHEAT_2 "Pre-aquecer ABS"
-#define MSG_PREHEAT_2_N "Pre-aquecer ABS "
-#define MSG_PREHEAT_2_ALL "Pre-aq. ABS Tudo"
-#define MSG_PREHEAT_2_BEDONLY "Pre-aq. ABS " LCD_STR_THERMOMETER "Base"
-#define MSG_PREHEAT_2_SETTINGS "Definicoes ABS"
-#define MSG_COOLDOWN "Arrefecer"
-#define MSG_SWITCH_PS_ON "Ligar"
-#define MSG_SWITCH_PS_OFF "Desligar"
-#define MSG_EXTRUDE "Extrudir"
-#define MSG_RETRACT "Retrair"
-#define MSG_MOVE_AXIS "Mover eixo"
-#define MSG_MOVE_X "Mover X"
-#define MSG_MOVE_Y "Mover Y"
-#define MSG_MOVE_Z "Mover Z"
-#define MSG_MOVE_E "Mover Extrusor"
-#define MSG_MOVE_01MM "Mover 0.1mm"
-#define MSG_MOVE_1MM "Mover 1mm"
-#define MSG_MOVE_10MM "Mover 10mm"
-#define MSG_SPEED "Velocidade"
-#define MSG_BED_Z "Base Z"
-#define MSG_NOZZLE LCD_STR_THERMOMETER " Bico"
-#define MSG_BED LCD_STR_THERMOMETER " Base"
-#define MSG_FAN_SPEED "Vel. ventoinha"
-#define MSG_FLOW "Fluxo"
-#define MSG_CONTROL "Controlo"
-#define MSG_MIN LCD_STR_THERMOMETER " Min"
-#define MSG_MAX LCD_STR_THERMOMETER " Max"
-#define MSG_FACTOR LCD_STR_THERMOMETER " Fact"
-#define MSG_AUTOTEMP "Temp. Automatica"
-#define MSG_ON "On "
-#define MSG_OFF "Off"
-#define MSG_PID_P "PID-P"
-#define MSG_PID_I "PID-I"
-#define MSG_PID_D "PID-D"
-#define MSG_PID_C "PID-C"
-#define MSG_ACC "Acc"
-#define MSG_JERK "Jerk"
-#if IS_KINEMATIC
- #define MSG_VA_JERK "Va-jerk"
- #define MSG_VB_JERK "Vb-jerk"
- #define MSG_VC_JERK "Vc-jerk"
-#else
- #define MSG_VA_JERK "Vx-jerk"
- #define MSG_VB_JERK "Vy-jerk"
- #define MSG_VC_JERK "Vz-jerk"
-#endif
-#define MSG_VE_JERK "Ve-jerk"
-#define MSG_VMAX " Vmax "
-#define MSG_VMIN "Vmin"
-#define MSG_VTRAV_MIN "VTrav min"
-#define MSG_AMAX "Amax "
-#define MSG_A_RETRACT "A-retraccao"
-#define MSG_A_TRAVEL "A-movimento"
-#define MSG_STEPS_PER_MM "Passo/mm"
-#if IS_KINEMATIC
- #define MSG_ASTEPS "A passo/mm"
- #define MSG_BSTEPS "B passo/mm"
- #define MSG_CSTEPS "C passo/mm"
-#else
- #define MSG_ASTEPS "X passo/mm"
- #define MSG_BSTEPS "Y passo/mm"
- #define MSG_CSTEPS "Z passo/mm"
-#endif
-#define MSG_ESTEPS "E passo/mm"
-#define MSG_E1STEPS "E1 passo/mm"
-#define MSG_E2STEPS "E2 passo/mm"
-#define MSG_E3STEPS "E3 passo/mm"
-#define MSG_E4STEPS "E4 passo/mm"
-#define MSG_E5STEPS "E5 passo/mm"
-#define MSG_TEMPERATURE "Temperatura"
-#define MSG_MOTION "Movimento"
-#define MSG_FILAMENT "Filamento"
-#define MSG_VOLUMETRIC_ENABLED "E em mm3"
-#define MSG_FILAMENT_DIAM "Fil. Diam."
-#define MSG_CONTRAST "Contraste"
-#define MSG_STORE_EEPROM "Guardar na memoria"
-#define MSG_LOAD_EEPROM "Carregar da memoria"
-#define MSG_RESTORE_FAILSAFE "Rest. de emergen."
-#define MSG_REFRESH LCD_STR_REFRESH " Recarregar"
-#define MSG_WATCH "Monitorizar"
-#define MSG_PREPARE "Preparar"
-#define MSG_TUNE "Afinar"
-#define MSG_PAUSE_PRINT "Pausar impressao"
-#define MSG_RESUME_PRINT "Retomar impressao"
-#define MSG_STOP_PRINT "Parar impressao"
-#define MSG_CARD_MENU "Imprimir do SD"
-#define MSG_NO_CARD "Sem cartao SD"
-#define MSG_DWELL "Em espera..."
-#define MSG_USERWAIT "A espera de ordem"
-#define MSG_PRINT_ABORTED "Impressao cancelada"
-#define MSG_NO_MOVE "Sem movimento"
-#define MSG_KILLED "EMERGENCIA. "
-#define MSG_STOPPED "PARADO. "
-#define MSG_CONTROL_RETRACT " Retrair mm"
-#define MSG_CONTROL_RETRACT_SWAP "Troca Retrair mm"
-#define MSG_CONTROL_RETRACTF " Retrair V"
-#define MSG_CONTROL_RETRACT_ZLIFT " Levantar mm"
-#define MSG_CONTROL_RETRACT_RECOVER " DesRet mm"
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP "Troca DesRet mm"
-#define MSG_CONTROL_RETRACT_RECOVERF " DesRet V"
-#define MSG_AUTORETRACT " AutoRetr."
-#define MSG_FILAMENTCHANGE "Trocar filamento"
-#define MSG_INIT_SDCARD "Inici. cartao SD"
-#define MSG_CNG_SDCARD "Trocar cartao SD"
-#define MSG_ZPROBE_OUT "Sensor fora/base"
-#define MSG_HOME "Home" // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST
-#define MSG_FIRST "first"
-#define MSG_ZPROBE_ZOFFSET "Desvio Z"
-#define MSG_BABYSTEP_X "Babystep X"
-#define MSG_BABYSTEP_Y "Babystep Y"
-#define MSG_BABYSTEP_Z "Babystep Z"
-#define MSG_ENDSTOP_ABORT "Fim de curso"
-#define MSG_HEATING_FAILED_LCD "Aquecimento falhou"
-#define MSG_ERR_REDUNDANT_TEMP "Err: REDUNDANT TEMP"
-#define MSG_THERMAL_RUNAWAY "THERMAL RUNAWAY"
-#define MSG_ERR_MAXTEMP "Err: T Maxima"
-#define MSG_ERR_MINTEMP "Err: T Minima"
-#define MSG_ERR_MAXTEMP_BED "Err: T Base Maxima"
-#define MSG_ERR_MINTEMP_BED "Err: T Base Minima"
-#define MSG_HEATING "Aquecendo..."
-#define MSG_BED_HEATING "Aquecendo base.."
-#define MSG_DELTA_CALIBRATE "Calibracao Delta"
-#define MSG_DELTA_CALIBRATE_X "Calibrar X"
-#define MSG_DELTA_CALIBRATE_Y "Calibrar Y"
-#define MSG_DELTA_CALIBRATE_Z "Calibrar Z"
-#define MSG_DELTA_CALIBRATE_CENTER "Calibrar Centro"
-
-#define MSG_LCD_ENDSTOPS "Fim de curso"
-
-#endif // LANGUAGE_PT_H
diff --git a/Marlin/mesh_bed_leveling.cpp b/Marlin/mesh_bed_leveling.cpp
deleted file mode 100644
index cc2ee6ac45..0000000000
--- a/Marlin/mesh_bed_leveling.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * 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 .
- *
- */
-
-#include "MarlinConfig.h"
-
-#if ENABLED(MESH_BED_LEVELING)
-
- #include "mesh_bed_leveling.h"
- #include "Marlin.h"
- #include "serial.h"
-
- mesh_bed_leveling mbl;
-
- float mesh_bed_leveling::z_offset,
- mesh_bed_leveling::z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y],
- mesh_bed_leveling::index_to_xpos[GRID_MAX_POINTS_X],
- mesh_bed_leveling::index_to_ypos[GRID_MAX_POINTS_Y];
-
- mesh_bed_leveling::mesh_bed_leveling() {
- for (uint8_t i = 0; i < GRID_MAX_POINTS_X; ++i)
- index_to_xpos[i] = MESH_MIN_X + i * (MESH_X_DIST);
- for (uint8_t i = 0; i < GRID_MAX_POINTS_Y; ++i)
- index_to_ypos[i] = MESH_MIN_Y + i * (MESH_Y_DIST);
- reset();
- }
-
- void mesh_bed_leveling::reset() {
- z_offset = 0;
- ZERO(z_values);
- }
-
- void mesh_bed_leveling::report_mesh() {
- SERIAL_PROTOCOLLNPGM("Num X,Y: " STRINGIFY(GRID_MAX_POINTS_X) "," STRINGIFY(GRID_MAX_POINTS_Y));
- SERIAL_PROTOCOLPGM("Z offset: "); SERIAL_PROTOCOL_F(z_offset, 5);
- SERIAL_PROTOCOLLNPGM("\nMeasured points:");
- print_2d_array(GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y, 5,
- [](const uint8_t ix, const uint8_t iy) { return z_values[ix][iy]; }
- );
- }
-
-#endif // MESH_BED_LEVELING
diff --git a/Marlin/pins_RUMBA.h b/Marlin/pins_RUMBA.h
deleted file mode 100644
index e604301545..0000000000
--- a/Marlin/pins_RUMBA.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * 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 .
- *
- */
-
-/**
- * RUMBA pin assignments
- */
-
-#ifndef __AVR_ATmega2560__
- #error "Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu."
-#endif
-
-#if HOTENDS > 3 || E_STEPPERS > 3
- #error "RUMBA supports up to 3 hotends / E-steppers. Comment out this line to continue."
-#endif
-
-#define DEFAULT_MACHINE_NAME "Rumba"
-#define BOARD_NAME "Rumba"
-
-//
-// Servos
-//
-#define SERVO0_PIN 5
-
-//
-// Limit Switches
-//
-#define X_MIN_PIN 37
-#define X_MAX_PIN 36
-#define Y_MIN_PIN 35
-#define Y_MAX_PIN 34
-#define Z_MIN_PIN 33
-#define Z_MAX_PIN 32
-
-//
-// Z Probe (when not Z_MIN_PIN)
-//
-#ifndef Z_MIN_PROBE_PIN
- #define Z_MIN_PROBE_PIN 32
-#endif
-
-//
-// Steppers
-//
-#define X_STEP_PIN 17
-#define X_DIR_PIN 16
-#define X_ENABLE_PIN 48
-
-#define Y_STEP_PIN 54
-#define Y_DIR_PIN 47
-#define Y_ENABLE_PIN 55
-
-#define Z_STEP_PIN 57
-#define Z_DIR_PIN 56
-#define Z_ENABLE_PIN 62
-
-#define E0_STEP_PIN 23
-#define E0_DIR_PIN 22
-#define E0_ENABLE_PIN 24
-
-#define E1_STEP_PIN 26
-#define E1_DIR_PIN 25
-#define E1_ENABLE_PIN 27
-
-#define E2_STEP_PIN 29
-#define E2_DIR_PIN 28
-#define E2_ENABLE_PIN 39
-
-//
-// Temperature Sensors
-//
-#if TEMP_SENSOR_0 == -1
- #define TEMP_0_PIN 6 // Analog Input (connector *K1* on RUMBA thermocouple ADD ON is used)
-#else
- #define TEMP_0_PIN 15 // Analog Input (default connector for thermistor *T0* on rumba board is used)
-#endif
-
-#if TEMP_SENSOR_1 == -1
- #define TEMP_1_PIN 5 // Analog Input (connector *K2* on RUMBA thermocouple ADD ON is used)
-#else
- #define TEMP_1_PIN 14 // Analog Input (default connector for thermistor *T1* on rumba board is used)
-#endif
-
-#if TEMP_SENSOR_2 == -1
- #define TEMP_2_PIN 7 // Analog Input (connector *K3* on RUMBA thermocouple ADD ON is used <-- this can't be used when TEMP_SENSOR_BED is defined as thermocouple)
-#else
- #define TEMP_2_PIN 13 // Analog Input (default connector for thermistor *T2* on rumba board is used)
-#endif
-
-// optional for extruder 4 or chamber:
-//#define TEMP_X_PIN 12 // Analog Input (default connector for thermistor *T3* on rumba board is used)
-//#define TEMP_CHAMBER_PIN 12 // Analog Input (default connector for thermistor *T3* on rumba board is used)
-
-#if TEMP_SENSOR_BED == -1
- #define TEMP_BED_PIN 7 // Analog Input (connector *K3* on RUMBA thermocouple ADD ON is used <-- this can't be used when TEMP_SENSOR_2 is defined as thermocouple)
-#else
- #define TEMP_BED_PIN 11 // Analog Input (default connector for thermistor *THB* on rumba board is used)
-#endif
-
-//
-// Heaters / Fans
-//
-#define HEATER_0_PIN 2
-#define HEATER_1_PIN 3
-#define HEATER_2_PIN 6
-#define HEATER_3_PIN 8
-#define HEATER_BED_PIN 9
-
-#define FAN_PIN 7
-#define FAN1_PIN 8
-
-//
-// Misc. Functions
-//
-#define SDSS 53
-#define LED_PIN 13
-#define PS_ON_PIN 45
-#define KILL_PIN 46
-#define CASE_LIGHT_PIN 45
-
-//
-// M3/M4/M5 - Spindle/Laser Control
-//
-#ifndef SPINDLE_LASER_PWM_PIN
- #define SPINDLE_LASER_PWM_PIN 4 // MUST BE HARDWARE PWM. Pin 4 interrupts OC0* and OC1* always in use?
-#endif
-#ifndef SPINDLE_LASER_ENABLE_PIN
- #define SPINDLE_LASER_ENABLE_PIN 14 // Pin should have a pullup!
-#endif
-#ifndef SPINDLE_DIR_PIN
- #define SPINDLE_DIR_PIN 15
-#endif
-
-//
-// LCD / Controller
-//
-#define SD_DETECT_PIN 49
-#define BEEPER_PIN 44
-#define LCD_PINS_D7 40
-#define BTN_EN1 11
-#define BTN_EN2 12
-#define BTN_ENC 43
-
-#if ENABLED(MKS_12864OLED) || ENABLED(MKS_12864OLED_SSD1306)
- #define LCD_PINS_DC 38 // Set as output on init
- #define LCD_PINS_RS 41 // Pull low for 1s to init
- // DOGM SPI LCD Support
- #define DOGLCD_CS 19
- #define DOGLCD_MOSI 42
- #define DOGLCD_SCK 18
- #define DOGLCD_A0 LCD_PINS_DC
-#else
- #define LCD_PINS_RS 19
- #define LCD_PINS_ENABLE 42
- #define LCD_PINS_D4 18
- #define LCD_PINS_D5 38
- #define LCD_PINS_D6 41
-#endif
diff --git a/Marlin/serial.cpp b/Marlin/serial.cpp
deleted file mode 100644
index 8b6a1c2b49..0000000000
--- a/Marlin/serial.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 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 .
- *
- */
-
-#include "serial.h"
-
-const char errormagic[] PROGMEM = "Error:";
-const char echomagic[] PROGMEM = "echo:";
-
-void serial_echopair_PGM(const char* s_P, const char *v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
-void serial_echopair_PGM(const char* s_P, char v) { serialprintPGM(s_P); SERIAL_CHAR(v); }
-void serial_echopair_PGM(const char* s_P, int v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
-void serial_echopair_PGM(const char* s_P, long v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
-void serial_echopair_PGM(const char* s_P, float v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
-void serial_echopair_PGM(const char* s_P, double v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
-void serial_echopair_PGM(const char* s_P, unsigned long v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
-
-void serial_spaces(uint8_t count) { count *= (PROPORTIONAL_FONT_RATIO); while (count--) SERIAL_CHAR(' '); }
diff --git a/Marlin/serial.h b/Marlin/serial.h
deleted file mode 100644
index dc1da87353..0000000000
--- a/Marlin/serial.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * 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 .
- *
- */
-
-#ifndef __SERIAL_H__
-#define __SERIAL_H__
-
-#include "MarlinConfig.h"
-
-#if defined(__AVR__) && defined(USBCON)
- #include
- #if ENABLED(BLUETOOTH)
- extern HardwareSerial bluetoothSerial;
- #define MYSERIAL0 bluetoothSerial
- #else
- #define MYSERIAL0 Serial
- #endif // BLUETOOTH
-#else
- #include "MarlinSerial.h"
- #define MYSERIAL0 customizedSerial
-#endif
-
-extern const char echomagic[] PROGMEM;
-extern const char errormagic[] PROGMEM;
-
-#define SERIAL_CHAR(x) ((void)MYSERIAL0.write(x))
-#define SERIAL_EOL() SERIAL_CHAR('\n')
-
-#define SERIAL_PRINT(x,b) MYSERIAL0.print(x,b)
-#define SERIAL_PRINTLN(x,b) MYSERIAL0.println(x,b)
-#define SERIAL_PRINTF(args...) MYSERIAL0.printf(args)
-
-#define SERIAL_FLUSH() MYSERIAL0.flush()
-#if TX_BUFFER_SIZE > 0
- #define SERIAL_FLUSHTX() MYSERIAL0.flushTX()
-#endif
-
-#define SERIAL_PROTOCOLCHAR(x) SERIAL_CHAR(x)
-#define SERIAL_PROTOCOL(x) MYSERIAL0.print(x)
-#define SERIAL_PROTOCOL_F(x,y) MYSERIAL0.print(x,y)
-#define SERIAL_PROTOCOLPGM(x) serialprintPGM(PSTR(x))
-#define SERIAL_PROTOCOLLN(x) do{ MYSERIAL0.print(x); SERIAL_EOL(); }while(0)
-#define SERIAL_PROTOCOLLNPGM(x) serialprintPGM(PSTR(x "\n"))
-#define SERIAL_PROTOCOLPAIR(name, value) serial_echopair_PGM(PSTR(name),(value))
-#define SERIAL_PROTOCOLLNPAIR(name, value) do{ SERIAL_PROTOCOLPAIR(name, value); SERIAL_EOL(); }while(0)
-
-#define SERIAL_ECHO_START() serialprintPGM(echomagic)
-#define SERIAL_ECHO(x) SERIAL_PROTOCOL(x)
-#define SERIAL_ECHOPGM(x) SERIAL_PROTOCOLPGM(x)
-#define SERIAL_ECHOLN(x) SERIAL_PROTOCOLLN(x)
-#define SERIAL_ECHOLNPGM(x) SERIAL_PROTOCOLLNPGM(x)
-#define SERIAL_ECHOPAIR(pre,value) SERIAL_PROTOCOLPAIR(pre, value)
-#define SERIAL_ECHOLNPAIR(pre,value) SERIAL_PROTOCOLLNPAIR(pre, value)
-#define SERIAL_ECHO_F(x,y) SERIAL_PROTOCOL_F(x,y)
-
-#define SERIAL_ERROR_START() serialprintPGM(errormagic)
-#define SERIAL_ERROR(x) SERIAL_PROTOCOL(x)
-#define SERIAL_ERRORPGM(x) SERIAL_PROTOCOLPGM(x)
-#define SERIAL_ERRORLN(x) SERIAL_PROTOCOLLN(x)
-#define SERIAL_ERRORLNPGM(x) SERIAL_PROTOCOLLNPGM(x)
-
-// These macros compensate for float imprecision
-#define SERIAL_PROTOCOLPAIR_F(pre, value) SERIAL_PROTOCOLPAIR(pre, FIXFLOAT(value))
-#define SERIAL_PROTOCOLLNPAIR_F(pre, value) SERIAL_PROTOCOLLNPAIR(pre, FIXFLOAT(value))
-#define SERIAL_ECHOPAIR_F(pre,value) SERIAL_ECHOPAIR(pre, FIXFLOAT(value))
-#define SERIAL_ECHOLNPAIR_F(pre, value) SERIAL_ECHOLNPAIR(pre, FIXFLOAT(value))
-
-//
-// Functions for serial printing from PROGMEM. (Saves loads of SRAM.)
-//
-FORCE_INLINE void serialprintPGM(const char* str) {
- while (char ch = pgm_read_byte(str++)) SERIAL_CHAR(ch);
-}
-
-void serial_echopair_PGM(const char* s_P, const char *v);
-void serial_echopair_PGM(const char* s_P, char v);
-void serial_echopair_PGM(const char* s_P, int v);
-void serial_echopair_PGM(const char* s_P, long v);
-void serial_echopair_PGM(const char* s_P, float v);
-void serial_echopair_PGM(const char* s_P, double v);
-void serial_echopair_PGM(const char* s_P, unsigned int v);
-void serial_echopair_PGM(const char* s_P, unsigned long v);
-FORCE_INLINE void serial_echopair_PGM(const char* s_P, uint8_t v) { serial_echopair_PGM(s_P, (int)v); }
-FORCE_INLINE void serial_echopair_PGM(const char* s_P, uint16_t v) { serial_echopair_PGM(s_P, (int)v); }
-FORCE_INLINE void serial_echopair_PGM(const char* s_P, bool v) { serial_echopair_PGM(s_P, (int)v); }
-FORCE_INLINE void serial_echopair_PGM(const char* s_P, void *v) { serial_echopair_PGM(s_P, (unsigned long)v); }
-
-void serial_spaces(uint8_t count);
-#define SERIAL_ECHO_SP(C) serial_spaces(C)
-#define SERIAL_ERROR_SP(C) serial_spaces(C)
-#define SERIAL_PROTOCOL_SP(C) serial_spaces(C)
-
-#endif // __SERIAL_H__
diff --git a/Marlin/servo.h b/Marlin/servo.h
deleted file mode 100644
index 16496461e4..0000000000
--- a/Marlin/servo.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/**
- * 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