Merge remote-tracking branch 'upstream/bugfix-2.0.x' into bugfix-2.0.x

This commit is contained in:
Foxies 2020-11-09 04:32:31 +01:00
commit 85ed5d3e42
327 changed files with 2213 additions and 839 deletions

View file

@ -83,6 +83,7 @@ jobs:
- STM32F103RET6_creality - STM32F103RET6_creality
- LERDGEX - LERDGEX
- mks_robin_nano35 - mks_robin_nano35
- mks_robin_nano35_stm32
- NUCLEO_F767ZI - NUCLEO_F767ZI
# Put lengthy tests last # Put lengthy tests last

View file

@ -2095,9 +2095,10 @@
// //
// Anet 128x64 full graphics lcd with rotary encoder as used on Anet A6 // Anet 128x64 full graphics lcd with rotary encoder as used on Anet A6
// A clone of the RepRapDiscount full graphics display but with // A clone of the RepRapDiscount full graphics display but with
// different pins/wiring (see pins_ANET_10.h). // different pins/wiring (see pins_ANET_10.h). Enable one of these.
// //
//#define ANET_FULL_GRAPHICS_LCD //#define ANET_FULL_GRAPHICS_LCD
//#define ANET_FULL_GRAPHICS_LCD_ALT_WIRING
// //
// AZSMZ 12864 LCD with SD // AZSMZ 12864 LCD with SD
@ -2342,6 +2343,10 @@
//#define XPT2046_Y_CALIBRATION -8981 //#define XPT2046_Y_CALIBRATION -8981
//#define XPT2046_X_OFFSET -43 //#define XPT2046_X_OFFSET -43
//#define XPT2046_Y_OFFSET 257 //#define XPT2046_Y_OFFSET 257
#if ENABLED(TFT_COLOR_UI)
//#define SINGLE_TOUCH_NAVIGATION
#endif
#endif #endif
// //

View file

@ -808,7 +808,9 @@
#define RESTORE_LEVELING_AFTER_G35 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G35 // Enable to restore leveling setup after operation
//#define REPORT_TRAMMING_MM // Report Z deviation (mm) for each point relative to the first //#define REPORT_TRAMMING_MM // Report Z deviation (mm) for each point relative to the first
//#define ASSISTED_TRAMMING_MENU_ITEM // Add a menu item for Assisted Tramming
//#define ASSISTED_TRAMMING_MENU_ITEM // Add a menu item to run G35 Assisted Tramming (MarlinUI)
//#define ASSISTED_TRAMMING_WIZARD // Make the menu item open a Tramming Wizard sub-menu
/** /**
* Screw thread: * Screw thread:

View file

@ -36,7 +36,7 @@ void watchdogSetup() {
#if ENABLED(USE_WATCHDOG) #if ENABLED(USE_WATCHDOG)
// 4 seconds timeout // 4 seconds timeout
uint32_t timeout = 4000; uint32_t timeout = TERN(WATCHDOG_DURATION_8S, 8000, 4000);
// Calculate timeout value in WDT counter ticks: This assumes // Calculate timeout value in WDT counter ticks: This assumes
// the slow clock is running at 32.768 kHz watchdog // the slow clock is running at 32.768 kHz watchdog

View file

@ -25,6 +25,8 @@
#if ENABLED(USE_WATCHDOG) #if ENABLED(USE_WATCHDOG)
#define WDT_TIMEOUT_US TERN(WATCHDOG_DURATION_8S, 8000000, 4000000) // 4 or 8 second timeout
#include "watchdog.h" #include "watchdog.h"
void watchdogSetup() { void watchdogSetup() {

View file

@ -27,6 +27,8 @@
#include "watchdog.h" #include "watchdog.h"
#define WDT_TIMEOUT_US TERN(WATCHDOG_DURATION_8S, 8000000, 4000000) // 4 or 8 second timeout
void watchdog_init() {} void watchdog_init() {}
void HAL_watchdog_refresh() {} void HAL_watchdog_refresh() {}

View file

@ -21,7 +21,5 @@
*/ */
#pragma once #pragma once
#define WDT_TIMEOUT 4000000 // 4 second timeout
void watchdog_init(); void watchdog_init();
void HAL_watchdog_refresh(); void HAL_watchdog_refresh();

View file

@ -127,11 +127,9 @@
for (uint16_t i = 0; i < nbyte; i++) doio(buf[i]); for (uint16_t i = 0; i < nbyte; i++) doio(buf[i]);
} }
void spiSend(uint32_t chan, byte b) { void spiSend(uint32_t chan, byte b) {}
}
void spiSend(uint32_t chan, const uint8_t* buf, size_t nbyte) { void spiSend(uint32_t chan, const uint8_t* buf, size_t nbyte) {}
}
// Read single byte from SPI // Read single byte from SPI
uint8_t spiRec() { return doio(0xFF); } uint8_t spiRec() { return doio(0xFF); }
@ -143,9 +141,7 @@
for (uint16_t i = 0; i < nbyte; i++) buf[i] = doio(0xFF); for (uint16_t i = 0; i < nbyte; i++) buf[i] = doio(0xFF);
} }
uint8_t spiTransfer(uint8_t b) { uint8_t spiTransfer(uint8_t b) { return doio(b); }
return doio(b);
}
// Write from buffer to SPI // Write from buffer to SPI
void spiSendBlock(uint8_t token, const uint8_t* buf) { void spiSendBlock(uint8_t token, const uint8_t* buf) {
@ -201,6 +197,15 @@ SPIClass::SPIClass(uint8_t device) {
GPDMA_Init(); GPDMA_Init();
} }
SPIClass::SPIClass(pin_t mosi, pin_t miso, pin_t sclk, pin_t ssel) {
#if BOARD_NR_SPI >= 1
if (mosi == BOARD_SPI1_MOSI_PIN) SPIClass(1);
#endif
#if BOARD_NR_SPI >= 2
if (mosi == BOARD_SPI2_MOSI_PIN) SPIClass(2);
#endif
}
void SPIClass::begin() { void SPIClass::begin() {
// Init the SPI pins in the first begin call // Init the SPI pins in the first begin call
if ((_currentSetting->spi_d == LPC_SSP0 && spiInitialised[0] == false) || if ((_currentSetting->spi_d == LPC_SSP0 && spiInitialised[0] == false) ||
@ -331,25 +336,15 @@ void SPIClass::read(uint8_t *buf, uint32_t len) {
for (uint16_t i = 0; i < len; i++) buf[i] = transfer(0xFF); for (uint16_t i = 0; i < len; i++) buf[i] = transfer(0xFF);
} }
void SPIClass::setClock(uint32_t clock) { void SPIClass::setClock(uint32_t clock) { _currentSetting->clock = clock; }
_currentSetting->clock = clock;
}
void SPIClass::setModule(uint8_t device) { void SPIClass::setModule(uint8_t device) { _currentSetting = &_settings[device - 1]; } // SPI channels are called 1, 2, and 3 but the array is zero-indexed
_currentSetting = &_settings[device - 1];// SPI channels are called 1 2 and 3 but the array is zero indexed
}
void SPIClass::setBitOrder(uint8_t bitOrder) { void SPIClass::setBitOrder(uint8_t bitOrder) { _currentSetting->bitOrder = bitOrder; }
_currentSetting->bitOrder = bitOrder;
}
void SPIClass::setDataMode(uint8_t dataMode) { void SPIClass::setDataMode(uint8_t dataMode) { _currentSetting->dataMode = dataMode; }
_currentSetting->dataMode = dataMode;
}
void SPIClass::setDataSize(uint32_t ds) { void SPIClass::setDataSize(uint32_t dataSize) { _currentSetting->dataSize = dataSize; }
_currentSetting->dataSize = ds;
}
/** /**
* Set up/tear down * Set up/tear down

View file

@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware * Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] * Copyright (c) 2020 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 * 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 * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
@ -18,27 +21,25 @@
*/ */
#pragma once #pragma once
#include <stdint.h> #include <SPI.h>
#ifndef HAVE_SW_SERIAL /**
#define SW_SERIAL_PLACEHOLDER 1 * Marlin currently requires 3 SPI classes:
#endif *
* SPIClass:
* This class is normally provided by frameworks and has a semi-default interface.
* This is needed because some libraries reference it globally.
*
* SPISettings:
* Container for SPI configs for SPIClass. As above, libraries may reference it globally.
*
* These two classes are often provided by frameworks so we cannot extend them to add
* useful methods for Marlin.
*
* MarlinSPI:
* Provides the default SPIClass interface plus some Marlin goodies such as a simplified
* interface for SPI DMA transfer.
*
*/
class SoftwareSerial { using MarlinSPI = SPIClass;
public:
SoftwareSerial(int8_t RX_pin, int8_t TX_pin);
void begin(const uint32_t baudrate);
bool available();
uint8_t read();
uint16_t write(uint8_t byte);
void flush();
void listen();
void stopListening();
protected:
bool listening;
};

View file

@ -126,6 +126,11 @@ public:
*/ */
SPIClass(uint8_t spiPortNumber); SPIClass(uint8_t spiPortNumber);
/**
* Init using pins
*/
SPIClass(pin_t mosi, pin_t miso, pin_t sclk, pin_t ssel = (pin_t)-1);
/** /**
* Select and configure the current selected SPI device to use * Select and configure the current selected SPI device to use
*/ */

View file

@ -1,6 +1,9 @@
/** /**
* Marlin 3D Printer Firmware * Marlin 3D Printer Firmware
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] * Copyright (c) 2020 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 * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,9 @@
/** /**
* Marlin 3D Printer Firmware * Marlin 3D Printer Firmware
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] * Copyright (c) 2020 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 * 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 * it under the terms of the GNU General Public License as published by

View file

@ -28,6 +28,8 @@
#include <lpc17xx_wdt.h> #include <lpc17xx_wdt.h>
#include "watchdog.h" #include "watchdog.h"
#define WDT_TIMEOUT_US TERN(WATCHDOG_DURATION_8S, 8000000, 4000000) // 4 or 8 second timeout
void watchdog_init() { void watchdog_init() {
#if ENABLED(WATCHDOG_RESET_MANUAL) #if ENABLED(WATCHDOG_RESET_MANUAL)
// We enable the watchdog timer, but only for the interrupt. // We enable the watchdog timer, but only for the interrupt.
@ -52,7 +54,7 @@ void watchdog_init() {
#else #else
WDT_Init(WDT_CLKSRC_IRC, WDT_MODE_RESET); WDT_Init(WDT_CLKSRC_IRC, WDT_MODE_RESET);
#endif #endif
WDT_Start(WDT_TIMEOUT); WDT_Start(WDT_TIMEOUT_US);
} }
void HAL_watchdog_refresh() { void HAL_watchdog_refresh() {

View file

@ -21,8 +21,6 @@
*/ */
#pragma once #pragma once
#define WDT_TIMEOUT 4000000 // 4 second timeout
void watchdog_init(); void watchdog_init();
void HAL_watchdog_refresh(); void HAL_watchdog_refresh();

View file

@ -26,6 +26,8 @@
#include "watchdog.h" #include "watchdog.h"
#define WDT_TIMEOUT_REG TERN(WATCHDOG_DURATION_8S, WDT_CONFIG_PER_CYC8192, WDT_CONFIG_PER_CYC4096) // 4 or 8 second timeout
void watchdog_init() { void watchdog_init() {
// The low-power oscillator used by the WDT runs at 32,768 Hz with // The low-power oscillator used by the WDT runs at 32,768 Hz with
// a 1:32 prescale, thus 1024 Hz, though probably not super precise. // a 1:32 prescale, thus 1024 Hz, though probably not super precise.
@ -39,7 +41,7 @@
SYNC(WDT->SYNCBUSY.bit.ENABLE); SYNC(WDT->SYNCBUSY.bit.ENABLE);
WDT->INTENCLR.reg = WDT_INTENCLR_EW; // Disable early warning interrupt WDT->INTENCLR.reg = WDT_INTENCLR_EW; // Disable early warning interrupt
WDT->CONFIG.reg = WDT_CONFIG_PER_CYC4096; // Set at least 4s period for chip reset WDT->CONFIG.reg = WDT_TIMEOUT_REG; // Set a 4s or 8s period for chip reset
HAL_watchdog_refresh(); HAL_watchdog_refresh();

View file

@ -185,3 +185,20 @@ typedef void (*systickCallback_t)(void);
void systick_attach_callback(systickCallback_t cb); void systick_attach_callback(systickCallback_t cb);
void HAL_SYSTICK_Callback(); void HAL_SYSTICK_Callback();
extern volatile uint32_t systick_uptime_millis; extern volatile uint32_t systick_uptime_millis;
#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment
/**
* set_pwm_frequency
* Set the frequency of the timer corresponding to the provided pin
* All Timer PWM pins run at the same frequency
*/
void set_pwm_frequency(const pin_t pin, int f_desired);
/**
* set_pwm_duty
* Set the PWM duty cycle of the provided pin to the provided value
* Optionally allows inverting the duty cycle [default = false]
* Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255]
*/
void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false);

View file

@ -0,0 +1,161 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 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 <https://www.gnu.org/licenses/>.
*
*/
#include "MarlinSPI.h"
static void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb, uint32_t dataSize) {
spi_init(obj, speed, mode, msb);
// spi_init set 8bit always
// TODO: copy the code from spi_init and handle data size, to avoid double init always!!
if (dataSize != SPI_DATASIZE_8BIT) {
obj->handle.Init.DataSize = dataSize;
HAL_SPI_Init(&obj->handle);
__HAL_SPI_ENABLE(&obj->handle);
}
}
void MarlinSPI::setClockDivider(uint8_t _div) {
_speed = spi_getClkFreq(&_spi);// / _div;
_clockDivider = _div;
}
void MarlinSPI::begin(void) {
//TODO: only call spi_init if any parameter changed!!
spi_init(&_spi, _speed, _dataMode, _bitOrder, _dataSize);
}
void MarlinSPI::setupDma(SPI_HandleTypeDef &_spiHandle, DMA_HandleTypeDef &_dmaHandle, uint32_t direction, bool minc) {
_dmaHandle.Init.Direction = direction;
_dmaHandle.Init.PeriphInc = DMA_PINC_DISABLE;
_dmaHandle.Init.Mode = DMA_NORMAL;
_dmaHandle.Init.Priority = DMA_PRIORITY_LOW;
_dmaHandle.Init.MemInc = minc ? DMA_MINC_ENABLE : DMA_MINC_DISABLE;
if (_dataSize == DATA_SIZE_8BIT) {
_dmaHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
_dmaHandle.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
}
else {
_dmaHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
_dmaHandle.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
}
#ifdef STM32F4xx
_dmaHandle.Init.Channel = DMA_CHANNEL_3;
_dmaHandle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
#endif
// start DMA hardware
// TODO: check if hardware is already enabled
#ifdef SPI1_BASE
if (_spiHandle.Instance == SPI1) {
#ifdef STM32F1xx
__HAL_RCC_DMA1_CLK_ENABLE();
_dmaHandle.Instance = (direction == DMA_MEMORY_TO_PERIPH) ? DMA1_Channel3 : DMA1_Channel2;
#elif defined(STM32F4xx)
__HAL_RCC_DMA2_CLK_ENABLE();
_dmaHandle.Instance = DMA2_Stream3;
#endif
}
#endif
#ifdef SPI2_BASE
if (_spiHandle.Instance == SPI2) {
#ifdef STM32F1xx
__HAL_RCC_DMA1_CLK_ENABLE();
_dmaHandle.Instance = (direction == DMA_MEMORY_TO_PERIPH) ? DMA1_Channel5 : DMA1_Channel4;
#elif defined(STM32F4xx)
//TODO: f4 dma config
#endif
}
#endif
#ifdef SPI3_BASE
if (_spiHandle.Instance == SPI3) {
#ifdef STM32F1xx
__HAL_RCC_DMA2_CLK_ENABLE();
_dmaHandle.Instance = (direction == DMA_MEMORY_TO_PERIPH) ? DMA2_Channel2 : DMA2_Channel1;
#elif defined(STM32F4xx)
//TODO: f4 dma config
#endif
}
#endif
HAL_DMA_Init(&_dmaHandle);
}
byte MarlinSPI::transfer(uint8_t _data) {
uint8_t rxData = 0xFF;
HAL_SPI_TransmitReceive(&_spi.handle, &_data, &rxData, 1, HAL_MAX_DELAY);
return rxData;
}
uint8_t MarlinSPI::dmaTransfer(const void *transmitBuf, void *receiveBuf, uint16_t length) {
const uint8_t ff = 0xFF;
//if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) //only enable if disabled
__HAL_SPI_ENABLE(&_spi.handle);
if (receiveBuf) {
setupDma(_spi.handle, _dmaRx, DMA_PERIPH_TO_MEMORY, true);
HAL_DMA_Start(&_dmaRx, (uint32_t)&(_spi.handle.Instance->DR), (uint32_t)receiveBuf, length);
SET_BIT(_spi.handle.Instance->CR2, SPI_CR2_RXDMAEN); /* Enable Rx DMA Request */
}
// check for 2 lines transfer
bool mincTransmit = true;
if (transmitBuf == nullptr && _spi.handle.Init.Direction == SPI_DIRECTION_2LINES && _spi.handle.Init.Mode == SPI_MODE_MASTER) {
transmitBuf = &ff;
mincTransmit = false;
}
if (transmitBuf) {
setupDma(_spi.handle, _dmaTx, DMA_MEMORY_TO_PERIPH, mincTransmit);
HAL_DMA_Start(&_dmaTx, (uint32_t)transmitBuf, (uint32_t)&(_spi.handle.Instance->DR), length);
SET_BIT(_spi.handle.Instance->CR2, SPI_CR2_TXDMAEN); /* Enable Tx DMA Request */
}
if (transmitBuf) {
HAL_DMA_PollForTransfer(&_dmaTx, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY);
HAL_DMA_Abort(&_dmaTx);
HAL_DMA_DeInit(&_dmaTx);
}
// while ((_spi.handle.Instance->SR & SPI_FLAG_RXNE) != SPI_FLAG_RXNE) {}
if (receiveBuf) {
HAL_DMA_PollForTransfer(&_dmaRx, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY);
HAL_DMA_Abort(&_dmaRx);
HAL_DMA_DeInit(&_dmaRx);
}
return 1;
}
uint8_t MarlinSPI::dmaSend(const void * transmitBuf, uint16_t length, bool minc) {
setupDma(_spi.handle, _dmaTx, DMA_MEMORY_TO_PERIPH, minc);
HAL_DMA_Start(&_dmaTx, (uint32_t)transmitBuf, (uint32_t)&(_spi.handle.Instance->DR), length);
__HAL_SPI_ENABLE(&_spi.handle);
SET_BIT(_spi.handle.Instance->CR2, SPI_CR2_TXDMAEN); /* Enable Tx DMA Request */
HAL_DMA_PollForTransfer(&_dmaTx, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY);
HAL_DMA_Abort(&_dmaTx);
// DeInit objects
HAL_DMA_DeInit(&_dmaTx);
return 1;
}

View file

@ -0,0 +1,107 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 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 <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "HAL.h"
#include <SPI.h>
extern "C" {
#include <utility/spi_com.h>
}
/**
* Marlin currently requires 3 SPI classes:
*
* SPIClass:
* This class is normally provided by frameworks and has a semi-default interface.
* This is needed because some libraries reference it globally.
*
* SPISettings:
* Container for SPI configs for SPIClass. As above, libraries may reference it globally.
*
* These two classes are often provided by frameworks so we cannot extend them to add
* useful methods for Marlin.
*
* MarlinSPI:
* Provides the default SPIClass interface plus some Marlin goodies such as a simplified
* interface for SPI DMA transfer.
*
*/
#define DATA_SIZE_8BIT SPI_DATASIZE_8BIT
#define DATA_SIZE_16BIT SPI_DATASIZE_16BIT
class MarlinSPI {
public:
MarlinSPI() : MarlinSPI(NC, NC, NC, NC) {}
MarlinSPI(pin_t mosi, pin_t miso, pin_t sclk, pin_t ssel = (pin_t)NC) : _mosiPin(mosi), _misoPin(miso), _sckPin(sclk), _ssPin(ssel) {
_spi.pin_miso = digitalPinToPinName(_misoPin);
_spi.pin_mosi = digitalPinToPinName(_mosiPin);
_spi.pin_sclk = digitalPinToPinName(_sckPin);
_spi.pin_ssel = digitalPinToPinName(_ssPin);
_dataSize = DATA_SIZE_8BIT;
_bitOrder = MSBFIRST;
_dataMode = SPI_MODE_0;
_spi.handle.State = HAL_SPI_STATE_RESET;
setClockDivider(SPI_SPEED_CLOCK_DIV2_MHZ);
}
void begin(void);
void end(void) {}
byte transfer(uint8_t _data);
uint8_t dmaTransfer(const void *transmitBuf, void *receiveBuf, uint16_t length);
uint8_t dmaSend(const void * transmitBuf, uint16_t length, bool minc = true);
/* These methods are deprecated and kept for compatibility.
* Use SPISettings with SPI.beginTransaction() to configure SPI parameters.
*/
void setBitOrder(BitOrder _order) { _bitOrder = _order; }
void setDataMode(uint8_t _mode) {
switch (_mode) {
case SPI_MODE0: _dataMode = SPI_MODE_0; break;
case SPI_MODE1: _dataMode = SPI_MODE_1; break;
case SPI_MODE2: _dataMode = SPI_MODE_2; break;
case SPI_MODE3: _dataMode = SPI_MODE_3; break;
}
}
void setClockDivider(uint8_t _div);
private:
void setupDma(SPI_HandleTypeDef &_spiHandle, DMA_HandleTypeDef &_dmaHandle, uint32_t direction, bool minc = false);
spi_t _spi;
DMA_HandleTypeDef _dmaTx;
DMA_HandleTypeDef _dmaRx;
BitOrder _bitOrder;
spi_mode_e _dataMode;
uint8_t _clockDivider;
uint32_t _speed;
uint32_t _dataSize;
pin_t _mosiPin;
pin_t _misoPin;
pin_t _sckPin;
pin_t _ssPin;
};

View file

@ -113,7 +113,7 @@ bool PersistentStore::access_start() {
// This must be the first time since power on that we have accessed the storage, or someone // This must be the first time since power on that we have accessed the storage, or someone
// loaded and called write_data and never called access_finish. // loaded and called write_data and never called access_finish.
// Lets go looking for the slot that holds our configuration. // Lets go looking for the slot that holds our configuration.
if (eeprom_data_written) DEBUG_ECHOLN("Dangling EEPROM write_data"); if (eeprom_data_written) DEBUG_ECHOLNPGM("Dangling EEPROM write_data");
uint32_t address = FLASH_ADDRESS_START; uint32_t address = FLASH_ADDRESS_START;
while (address <= FLASH_ADDRESS_END) { while (address <= FLASH_ADDRESS_END) {
uint32_t address_value = (*(__IO uint32_t*)address); uint32_t address_value = (*(__IO uint32_t*)address);

View file

@ -0,0 +1,57 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 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 <https://www.gnu.org/licenses/>.
*
*/
#include "../../inc/MarlinConfigPre.h"
#if NEEDS_HARDWARE_PWM
#include "HAL.h"
#include "timers.h"
void set_pwm_frequency(const pin_t pin, int f_desired) {
if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer
PinName pin_name = digitalPinToPinName(pin);
TIM_TypeDef *Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance
LOOP_S_L_N(i, 0, NUM_HARDWARE_TIMERS) // Protect used timers
if (timer_instance[i] && timer_instance[i]->getHandle()->Instance == Instance)
return;
pwm_start(pin_name, f_desired, 0, RESOLUTION_8B_COMPARE_FORMAT);
}
void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) {
PinName pin_name = digitalPinToPinName(pin);
TIM_TypeDef *Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM);
uint16_t adj_val = Instance->ARR * v / v_size;
if (invert) adj_val = Instance->ARR - adj_val;
switch (get_pwm_channel(pin_name)) {
case TIM_CHANNEL_1: LL_TIM_OC_SetCompareCH1(Instance, adj_val); break;
case TIM_CHANNEL_2: LL_TIM_OC_SetCompareCH2(Instance, adj_val); break;
case TIM_CHANNEL_3: LL_TIM_OC_SetCompareCH3(Instance, adj_val); break;
case TIM_CHANNEL_4: LL_TIM_OC_SetCompareCH4(Instance, adj_val); break;
}
}
#endif // NEEDS_HARDWARE_PWM

View file

@ -28,9 +28,6 @@
// #error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector" // #error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector"
//#endif //#endif
#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_FREQUENCY
#error "Features requiring Hardware PWM (FAST_PWM_FAN, SPINDLE_LASER_FREQUENCY) are not yet supported on STM32."
#endif
#if ENABLED(SDCARD_EEPROM_EMULATION) && DISABLED(SDSUPPORT) #if ENABLED(SDCARD_EEPROM_EMULATION) && DISABLED(SDSUPPORT)
#undef SDCARD_EEPROM_EMULATION // Avoid additional error noise #undef SDCARD_EEPROM_EMULATION // Avoid additional error noise

View file

@ -21,12 +21,16 @@
*/ */
#pragma once #pragma once
#include "../../../inc/MarlinConfig.h"
#ifdef STM32F1xx #ifdef STM32F1xx
#include "stm32f1xx_hal.h" #include "stm32f1xx_hal.h"
#define __IS_DMA_ENABLED(__HANDLE__) ((__HANDLE__)->Instance->CCR & DMA_CCR_EN)
#elif defined(STM32F4xx) #elif defined(STM32F4xx)
#include "stm32f4xx_hal.h" #include "stm32f4xx_hal.h"
#define __IS_DMA_ENABLED(__HANDLE__) ((__HANDLE__)->Instance->CR & DMA_SxCR_EN)
#else #else
#error FSMC TFT is currently only supported on STM32F1 and STM32F4 hardware. #error "FSMC TFT is currently only supported on STM32F1 and STM32F4 hardware."
#endif #endif
#ifndef LCD_READ_ID #ifndef LCD_READ_ID
@ -40,12 +44,6 @@
#define DATASIZE_16BIT SPI_DATASIZE_16BIT #define DATASIZE_16BIT SPI_DATASIZE_16BIT
#define TFT_IO_DRIVER TFT_FSMC #define TFT_IO_DRIVER TFT_FSMC
#ifdef STM32F1xx
#define __IS_DMA_ENABLED(__HANDLE__) ((__HANDLE__)->Instance->CCR & DMA_CCR_EN)
#elif defined(STM32F4xx)
#define __IS_DMA_ENABLED(__HANDLE__) ((__HANDLE__)->Instance->CR & DMA_SxCR_EN)
#endif
typedef struct { typedef struct {
__IO uint16_t REG; __IO uint16_t REG;
__IO uint16_t RAM; __IO uint16_t RAM;

View file

@ -1,6 +1,9 @@
/** /**
* Marlin 3D Printer Firmware * Marlin 3D Printer Firmware
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] * Copyright (c) 2020 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 * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,9 @@
/** /**
* Marlin 3D Printer Firmware * Marlin 3D Printer Firmware
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] * Copyright (c) 2020 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 * 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 * it under the terms of the GNU General Public License as published by

View file

@ -27,7 +27,6 @@
// Local defines // Local defines
// ------------------------ // ------------------------
#define NUM_HARDWARE_TIMERS 2
// Default timer priorities. Override by specifying alternate priorities in the board pins file. // Default timer priorities. Override by specifying alternate priorities in the board pins file.
// The TONE timer is not present here, as it currently cannot be set programmatically. It is set // The TONE timer is not present here, as it currently cannot be set programmatically. It is set

View file

@ -43,6 +43,8 @@
#define hal_timer_t uint32_t #define hal_timer_t uint32_t
#define HAL_TIMER_TYPE_MAX UINT16_MAX #define HAL_TIMER_TYPE_MAX UINT16_MAX
#define NUM_HARDWARE_TIMERS 2
#ifndef STEP_TIMER_NUM #ifndef STEP_TIMER_NUM
#define STEP_TIMER_NUM 0 // Timer Index for Stepper #define STEP_TIMER_NUM 0 // Timer Index for Stepper
#endif #endif
@ -103,7 +105,7 @@ void SetTimerInterruptPriorities();
// FORCE_INLINE because these are used in performance-critical situations // FORCE_INLINE because these are used in performance-critical situations
FORCE_INLINE bool HAL_timer_initialized(const uint8_t timer_num) { FORCE_INLINE bool HAL_timer_initialized(const uint8_t timer_num) {
return timer_instance[timer_num] != NULL; return timer_instance[timer_num] != nullptr;
} }
FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) { FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) {
return HAL_timer_initialized(timer_num) ? timer_instance[timer_num]->getCount() : 0; return HAL_timer_initialized(timer_num) ? timer_instance[timer_num]->getCount() : 0;

View file

@ -25,6 +25,8 @@
#if ENABLED(USE_WATCHDOG) #if ENABLED(USE_WATCHDOG)
#define WDT_TIMEOUT_US TERN(WATCHDOG_DURATION_8S, 8000000, 4000000) // 4 or 8 second timeout
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
#include "watchdog.h" #include "watchdog.h"
@ -32,7 +34,7 @@
void watchdog_init() { void watchdog_init() {
#if DISABLED(DISABLE_WATCHDOG_INIT) #if DISABLED(DISABLE_WATCHDOG_INIT)
IWatchdog.begin(4000000); // 4 sec timeout IWatchdog.begin(WDT_TIMEOUT_US);
#endif #endif
} }
@ -44,4 +46,5 @@
} }
#endif // USE_WATCHDOG #endif // USE_WATCHDOG
#endif // ARDUINO_ARCH_STM32 && !STM32GENERIC #endif // ARDUINO_ARCH_STM32 && !STM32GENERIC

View file

@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware * Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] * Copyright (c) 2020 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 * 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 * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
@ -16,45 +19,27 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
#if defined(__STM32F1__) && !defined(HAVE_SW_SERIAL) #pragma once
#include <SPI.h>
/** /**
* Empty class for Software Serial implementation (Custom RX/TX pins) * Marlin currently requires 3 SPI classes:
*
* SPIClass:
* This class is normally provided by frameworks and has a semi-default interface.
* This is needed because some libraries reference it globally.
*
* SPISettings:
* Container for SPI configs for SPIClass. As above, libraries may reference it globally.
*
* These two classes are often provided by frameworks so we cannot extend them to add
* useful methods for Marlin.
*
* MarlinSPI:
* Provides the default SPIClass interface plus some Marlin goodies such as a simplified
* interface for SPI DMA transfer.
* *
* TODO: Optionally use https://github.com/FYSETC/SoftwareSerialM if TMC UART is wanted
*/ */
#include "SoftwareSerial.h" using MarlinSPI = SPIClass;
// Constructor
SoftwareSerial::SoftwareSerial(int8_t RX_pin, int8_t TX_pin) {}
// Public
void SoftwareSerial::begin(const uint32_t baudrate) {
}
bool SoftwareSerial::available() {
return false;
}
uint8_t SoftwareSerial::read() {
return 0;
}
uint16_t SoftwareSerial::write(uint8_t byte) {
return 0;
}
void SoftwareSerial::flush() {}
void SoftwareSerial::listen() {
listening = true;
}
void SoftwareSerial::stopListening() {
listening = false;
}
#endif // __STM32F1__

View file

@ -147,6 +147,18 @@ SPIClass::SPIClass(uint32_t spi_num) {
_currentSetting->state = SPI_STATE_IDLE; _currentSetting->state = SPI_STATE_IDLE;
} }
SPIClass::SPIClass(int8_t mosi, int8_t miso, int8_t sclk, int8_t ssel) {
#if BOARD_NR_SPI >= 1
if (mosi == BOARD_SPI1_MOSI_PIN) SPIClass(1);
#endif
#if BOARD_NR_SPI >= 2
if (mosi == BOARD_SPI2_MOSI_PIN) SPIClass(2);
#endif
#if BOARD_NR_SPI >= 3
if (mosi == BOARD_SPI3_MOSI_PIN) SPIClass(3);
#endif
}
/** /**
* Set up/tear down * Set up/tear down
*/ */

View file

@ -163,6 +163,11 @@ public:
*/ */
SPIClass(uint32_t spiPortNumber); SPIClass(uint32_t spiPortNumber);
/**
* Init using pins
*/
SPIClass(int8_t mosi, int8_t miso, int8_t sclk, int8_t ssel=-1);
/** /**
* @brief Equivalent to begin(SPI_1_125MHZ, MSBFIRST, 0). * @brief Equivalent to begin(SPI_1_125MHZ, MSBFIRST, 0).
*/ */

View file

@ -3,7 +3,7 @@ import sys
#dynamic build flags for generic compile options #dynamic build flags for generic compile options
if __name__ == "__main__": if __name__ == "__main__":
args = " ".join([ "-std=gnu11", args = " ".join([ "-std=gnu++14",
"-Os", "-Os",
"-mcpu=cortex-m3", "-mcpu=cortex-m3",
"-mthumb", "-mthumb",

View file

@ -25,11 +25,6 @@
* Test STM32F1-specific configuration values for errors at compile-time. * Test STM32F1-specific configuration values for errors at compile-time.
*/ */
#if !defined(HAVE_SW_SERIAL) && HAS_TMC_SW_SERIAL
#warning "With TMC2208/9 consider using SoftwareSerialM with HAVE_SW_SERIAL and appropriate SS_TIMER."
#error "Missing SoftwareSerial implementation."
#endif
#if ENABLED(SDCARD_EEPROM_EMULATION) && DISABLED(SDSUPPORT) #if ENABLED(SDCARD_EEPROM_EMULATION) && DISABLED(SDSUPPORT)
#undef SDCARD_EEPROM_EMULATION // Avoid additional error noise #undef SDCARD_EEPROM_EMULATION // Avoid additional error noise
#if USE_FALLBACK_EEPROM #if USE_FALLBACK_EEPROM

View file

@ -1,6 +1,9 @@
/** /**
* Marlin 3D Printer Firmware * Marlin 3D Printer Firmware
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] * Copyright (c) 2020 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 * 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 * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,9 @@
/** /**
* Marlin 3D Printer Firmware * Marlin 3D Printer Firmware
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] * Copyright (c) 2020 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 * 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 * it under the terms of the GNU General Public License as published by

View file

@ -33,6 +33,11 @@
#include <libmaple/iwdg.h> #include <libmaple/iwdg.h>
#include "watchdog.h" #include "watchdog.h"
/**
* The watchdog clock is 40Khz. So for a 4s or 8s interval use a /256 preescaler and 625 or 1250 reload value (counts down to 0).
*/
#define STM32F1_WD_RELOAD TERN(WATCHDOG_DURATION_8S, 1250, 625) // 4 or 8 second timeout
void HAL_watchdog_refresh() { void HAL_watchdog_refresh() {
#if DISABLED(PINS_DEBUGGING) && PIN_EXISTS(LED) #if DISABLED(PINS_DEBUGGING) && PIN_EXISTS(LED)
TOGGLE(LED_PIN); // heartbeat indicator TOGGLE(LED_PIN); // heartbeat indicator
@ -49,7 +54,7 @@ void watchdogSetup() {
* *
* @return No return * @return No return
* *
* @details The watchdog clock is 40Khz. We need a 4 seconds interval, so use a /256 preescaler and 625 reload value (counts down to 0) * @details The watchdog clock is 40Khz. So for a 4s or 8s interval use a /256 preescaler and 625 or 1250 reload value (counts down to 0).
*/ */
void watchdog_init() { void watchdog_init() {
#if DISABLED(DISABLE_WATCHDOG_INIT) #if DISABLED(DISABLE_WATCHDOG_INIT)

View file

@ -27,18 +27,9 @@
#include <libmaple/iwdg.h> #include <libmaple/iwdg.h>
/** // Initialize watchdog with a 4 or 8 second countdown time
* The watchdog clock is 40Khz. We need a 4 seconds interval, so use a /256 preescaler and
* 625 reload value (counts down to 0)
* use 1250 for 8 seconds
*/
#define STM32F1_WD_RELOAD 625
// Arduino STM32F1 core now has watchdog support
// Initialize watchdog with a 4 second countdown time
void watchdog_init(); void watchdog_init();
// Reset watchdog. MUST be called at least every 4 seconds after the // Reset watchdog. MUST be called every 4 or 8 seconds after the
// first watchdog_init or STM32F1 will reset. // first watchdog_init or the STM32F1 will reset.
void HAL_watchdog_refresh(); void HAL_watchdog_refresh();

View file

@ -27,12 +27,14 @@
#include "watchdog.h" #include "watchdog.h"
#define WDT_TIMEOUT_COUNT TERN(WATCHDOG_DURATION_8S, 8192, 4096) // 4 or 8 second timeout
IWDG_HandleTypeDef hiwdg; IWDG_HandleTypeDef hiwdg;
void watchdog_init() { void watchdog_init() {
hiwdg.Instance = IWDG; hiwdg.Instance = IWDG;
hiwdg.Init.Prescaler = IWDG_PRESCALER_32; // 32kHz LSI clock and 32x prescalar = 1024Hz IWDG clock hiwdg.Init.Prescaler = IWDG_PRESCALER_32; // 32kHz LSI clock and 32x prescalar = 1024Hz IWDG clock
hiwdg.Init.Reload = 4095; //4095 counts = 4 seconds at 1024Hz hiwdg.Init.Reload = WDT_TIMEOUT_COUNT - 1;
if (HAL_IWDG_Init(&hiwdg) != HAL_OK) { if (HAL_IWDG_Init(&hiwdg) != HAL_OK) {
//Error_Handler(); //Error_Handler();
} }

View file

@ -27,9 +27,11 @@
#include "watchdog.h" #include "watchdog.h"
#define WDT_TIMEOUT_MS TERN(WATCHDOG_DURATION_8S, 8000, 4000) // 4 or 8 second timeout
void watchdog_init() { void watchdog_init() {
WDOG_TOVALH = 0; WDOG_TOVALH = 0;
WDOG_TOVALL = 4000; WDOG_TOVALL = WDT_TIMEOUT_MS;
WDOG_STCTRLH = WDOG_STCTRLH_WDOGEN; WDOG_STCTRLH = WDOG_STCTRLH_WDOGEN;
} }

View file

@ -27,9 +27,11 @@
#include "watchdog.h" #include "watchdog.h"
#define WDT_TIMEOUT_MS TERN(WATCHDOG_DURATION_8S, 8000, 4000) // 4 or 8 second timeout
void watchdog_init() { void watchdog_init() {
WDOG_TOVALH = 0; WDOG_TOVALH = 0;
WDOG_TOVALL = 4000; WDOG_TOVALL = WDT_TIMEOUT_MS;
WDOG_STCTRLH = WDOG_STCTRLH_WDOGEN; WDOG_STCTRLH = WDOG_STCTRLH_WDOGEN;
} }

View file

@ -19,31 +19,27 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
#ifdef __IMXRT1062__
/** /**
* HAL Watchdog for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A) * HAL Watchdog for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
*/ */
#ifdef __IMXRT1062__
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
#if ENABLED(USE_WATCHDOG) #if ENABLED(USE_WATCHDOG)
#include "watchdog.h" #include "watchdog.h"
// 4 seconds timeout #define WDT_TIMEOUT TERN(WATCHDOG_DURATION_8S, 8, 4) // 4 or 8 second timeout
#define WDTO 4 //seconds
uint8_t timeoutval = (WDTO - 0.5f) / 0.5f; constexpr uint8_t timeoutval = (WDT_TIMEOUT - 0.5f) / 0.5f;
void watchdog_init() { void watchdog_init() {
CCM_CCGR3 |= CCM_CCGR3_WDOG1(3); // enable WDOG1 clocks CCM_CCGR3 |= CCM_CCGR3_WDOG1(3); // enable WDOG1 clocks
WDOG1_WMCR = 0; // disable power down PDE WDOG1_WMCR = 0; // disable power down PDE
WDOG1_WCR |= WDOG_WCR_SRS | WDOG_WCR_WT(timeoutval); WDOG1_WCR |= WDOG_WCR_SRS | WDOG_WCR_WT(timeoutval);
WDOG1_WCR |= WDOG_WCR_WDE | WDOG_WCR_WDT | WDOG_WCR_SRE; WDOG1_WCR |= WDOG_WCR_WDE | WDOG_WCR_WDT | WDOG_WCR_SRE;
} }
void HAL_watchdog_refresh() { void HAL_watchdog_refresh() {

View file

@ -248,7 +248,7 @@ bool wait_for_heatup = true;
bool wait_for_user; // = false; bool wait_for_user; // = false;
void wait_for_user_response(millis_t ms/*=0*/, const bool no_sleep/*=false*/) { void wait_for_user_response(millis_t ms/*=0*/, const bool no_sleep/*=false*/) {
TERN(ADVANCED_PAUSE_FEATURE,,UNUSED(no_sleep)); UNUSED(no_sleep);
KEEPALIVE_STATE(PAUSED_FOR_USER); KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = true; wait_for_user = true;
if (ms) ms += millis(); // expire time if (ms) ms += millis(); // expire time

View file

@ -69,49 +69,50 @@
#define BOARD_MKS_GEN_L 1113 // MKS GEN L #define BOARD_MKS_GEN_L 1113 // MKS GEN L
#define BOARD_KFB_2 1114 // BigTreeTech or BIQU KFB2.0 #define BOARD_KFB_2 1114 // BigTreeTech or BIQU KFB2.0
#define BOARD_ZRIB_V20 1115 // zrib V2.0 control board (Chinese knock off RAMPS replica) #define BOARD_ZRIB_V20 1115 // zrib V2.0 control board (Chinese knock off RAMPS replica)
#define BOARD_FELIX2 1116 // Felix 2.0+ Electronics Board (RAMPS like) #define BOARD_ZRIB_V52 1116 // zrib V5.2 control board (Chinese knock off RAMPS replica)
#define BOARD_RIGIDBOARD 1117 // Invent-A-Part RigidBoard #define BOARD_FELIX2 1117 // Felix 2.0+ Electronics Board (RAMPS like)
#define BOARD_RIGIDBOARD_V2 1118 // Invent-A-Part RigidBoard V2 #define BOARD_RIGIDBOARD 1118 // Invent-A-Part RigidBoard
#define BOARD_SAINSMART_2IN1 1119 // Sainsmart 2-in-1 board #define BOARD_RIGIDBOARD_V2 1119 // Invent-A-Part RigidBoard V2
#define BOARD_ULTIMAKER 1120 // Ultimaker #define BOARD_SAINSMART_2IN1 1120 // Sainsmart 2-in-1 board
#define BOARD_ULTIMAKER_OLD 1121 // Ultimaker (Older electronics. Pre 1.5.4. This is rare) #define BOARD_ULTIMAKER 1121 // Ultimaker
#define BOARD_AZTEEG_X3 1122 // Azteeg X3 #define BOARD_ULTIMAKER_OLD 1122 // Ultimaker (Older electronics. Pre 1.5.4. This is rare)
#define BOARD_AZTEEG_X3_PRO 1123 // Azteeg X3 Pro #define BOARD_AZTEEG_X3 1123 // Azteeg X3
#define BOARD_ULTIMAIN_2 1124 // Ultimainboard 2.x (Uses TEMP_SENSOR 20) #define BOARD_AZTEEG_X3_PRO 1124 // Azteeg X3 Pro
#define BOARD_RUMBA 1125 // Rumba #define BOARD_ULTIMAIN_2 1125 // Ultimainboard 2.x (Uses TEMP_SENSOR 20)
#define BOARD_RUMBA_RAISE3D 1126 // Raise3D N series Rumba derivative #define BOARD_RUMBA 1126 // Rumba
#define BOARD_RL200 1127 // Rapide Lite 200 (v1, low-cost RUMBA clone with drv) #define BOARD_RUMBA_RAISE3D 1127 // Raise3D N series Rumba derivative
#define BOARD_FORMBOT_TREX2PLUS 1128 // Formbot T-Rex 2 Plus #define BOARD_RL200 1128 // Rapide Lite 200 (v1, low-cost RUMBA clone with drv)
#define BOARD_FORMBOT_TREX3 1129 // Formbot T-Rex 3 #define BOARD_FORMBOT_TREX2PLUS 1129 // Formbot T-Rex 2 Plus
#define BOARD_FORMBOT_RAPTOR 1130 // Formbot Raptor #define BOARD_FORMBOT_TREX3 1130 // Formbot T-Rex 3
#define BOARD_FORMBOT_RAPTOR2 1131 // Formbot Raptor 2 #define BOARD_FORMBOT_RAPTOR 1131 // Formbot Raptor
#define BOARD_BQ_ZUM_MEGA_3D 1132 // bq ZUM Mega 3D #define BOARD_FORMBOT_RAPTOR2 1132 // Formbot Raptor 2
#define BOARD_MAKEBOARD_MINI 1133 // MakeBoard Mini v2.1.2 is a control board sold by MicroMake #define BOARD_BQ_ZUM_MEGA_3D 1133 // bq ZUM Mega 3D
#define BOARD_TRIGORILLA_13 1134 // TriGorilla Anycubic version 1.3-based on RAMPS EFB #define BOARD_MAKEBOARD_MINI 1134 // MakeBoard Mini v2.1.2 is a control board sold by MicroMake
#define BOARD_TRIGORILLA_14 1135 // ... Ver 1.4 #define BOARD_TRIGORILLA_13 1135 // TriGorilla Anycubic version 1.3-based on RAMPS EFB
#define BOARD_TRIGORILLA_14_11 1136 // ... Rev 1.1 (new servo pin order) #define BOARD_TRIGORILLA_14 1136 // ... Ver 1.4
#define BOARD_RAMPS_ENDER_4 1137 // Creality: Ender-4, CR-8 #define BOARD_TRIGORILLA_14_11 1137 // ... Rev 1.1 (new servo pin order)
#define BOARD_RAMPS_CREALITY 1138 // Creality: CR10S, CR20, CR-X #define BOARD_RAMPS_ENDER_4 1138 // Creality: Ender-4, CR-8
#define BOARD_DAGOMA_F5 1139 // Dagoma F5 #define BOARD_RAMPS_CREALITY 1139 // Creality: CR10S, CR20, CR-X
#define BOARD_FYSETC_F6_13 1140 // FYSETC F6 1.3 #define BOARD_DAGOMA_F5 1140 // Dagoma F5
#define BOARD_FYSETC_F6_14 1141 // FYSETC F6 1.4 #define BOARD_FYSETC_F6_13 1141 // FYSETC F6 1.3
#define BOARD_DUPLICATOR_I3_PLUS 1142 // Wanhao Duplicator i3 Plus #define BOARD_FYSETC_F6_14 1142 // FYSETC F6 1.4
#define BOARD_VORON 1143 // VORON Design #define BOARD_DUPLICATOR_I3_PLUS 1143 // Wanhao Duplicator i3 Plus
#define BOARD_TRONXY_V3_1_0 1144 // Tronxy TRONXY-V3-1.0 #define BOARD_VORON 1144 // VORON Design
#define BOARD_Z_BOLT_X_SERIES 1145 // Z-Bolt X Series #define BOARD_TRONXY_V3_1_0 1145 // Tronxy TRONXY-V3-1.0
#define BOARD_TT_OSCAR 1146 // TT OSCAR #define BOARD_Z_BOLT_X_SERIES 1146 // Z-Bolt X Series
#define BOARD_OVERLORD 1147 // Overlord/Overlord Pro #define BOARD_TT_OSCAR 1147 // TT OSCAR
#define BOARD_HJC2560C_REV1 1148 // ADIMLab Gantry v1 #define BOARD_OVERLORD 1148 // Overlord/Overlord Pro
#define BOARD_HJC2560C_REV2 1149 // ADIMLab Gantry v2 #define BOARD_HJC2560C_REV1 1149 // ADIMLab Gantry v1
#define BOARD_TANGO 1150 // BIQU Tango V1 #define BOARD_HJC2560C_REV2 1150 // ADIMLab Gantry v2
#define BOARD_MKS_GEN_L_V2 1151 // MKS GEN L V2 #define BOARD_TANGO 1151 // BIQU Tango V1
#define BOARD_MKS_GEN_L_V21 1152 // MKS GEN L V2.1 #define BOARD_MKS_GEN_L_V2 1152 // MKS GEN L V2
#define BOARD_COPYMASTER_3D 1153 // Copymaster 3D #define BOARD_MKS_GEN_L_V21 1153 // MKS GEN L V2.1
#define BOARD_ORTUR_4 1154 // Ortur 4 #define BOARD_COPYMASTER_3D 1154 // Copymaster 3D
#define BOARD_TENLOG_D3_HERO 1155 // Tenlog D3 Hero IDEX printer #define BOARD_ORTUR_4 1155 // Ortur 4
#define BOARD_RAMPS_S_12_EEFB 1156 // Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Fan, Bed) #define BOARD_TENLOG_D3_HERO 1156 // Tenlog D3 Hero IDEX printer
#define BOARD_RAMPS_S_12_EEEB 1157 // Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Hotend2, Bed) #define BOARD_RAMPS_S_12_EEFB 1157 // Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Fan, Bed)
#define BOARD_RAMPS_S_12_EFFB 1158 // Ramps S 1.2 by Sakul.cz (Power outputs: Hotend, Fan0, Fan1, Bed) #define BOARD_RAMPS_S_12_EEEB 1158 // Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Hotend2, Bed)
#define BOARD_RAMPS_S_12_EFFB 1159 // Ramps S 1.2 by Sakul.cz (Power outputs: Hotend, Fan0, Fan1, Bed)
// //
// RAMBo and derivatives // RAMBo and derivatives
@ -378,6 +379,7 @@
#define BOARD_MRR_ESPA 6001 // MRR ESPA board based on ESP32 (native pins only) #define BOARD_MRR_ESPA 6001 // MRR ESPA board based on ESP32 (native pins only)
#define BOARD_MRR_ESPE 6002 // MRR ESPE board based on ESP32 (with I2S stepper stream) #define BOARD_MRR_ESPE 6002 // MRR ESPE board based on ESP32 (with I2S stepper stream)
#define BOARD_E4D_BOX 6003 // E4d@BOX #define BOARD_E4D_BOX 6003 // E4d@BOX
#define BOARD_FYSETC_E4 6004 // FYSETC E4
// //
// SAMD51 ARM Cortex M4 // SAMD51 ARM Cortex M4

View file

@ -196,6 +196,9 @@
#define __TERN(T,V...) ___TERN(_CAT(_NO,T),V) // Prepend '_NO' to get '_NOT_0' or '_NOT_1' #define __TERN(T,V...) ___TERN(_CAT(_NO,T),V) // Prepend '_NO' to get '_NOT_0' or '_NOT_1'
#define ___TERN(P,V...) THIRD(P,V) // If first argument has a comma, A. Else B. #define ___TERN(P,V...) THIRD(P,V) // If first argument has a comma, A. Else B.
#define IF_ENABLED TERN_
#define IF_DISABLED(O,A) TERN(O,,A)
#define ANY(V...) !DISABLED(V) #define ANY(V...) !DISABLED(V)
#define NONE(V...) DISABLED(V) #define NONE(V...) DISABLED(V)
#define ALL(V...) ENABLED(V) #define ALL(V...) ENABLED(V)

View file

@ -54,17 +54,17 @@ public:
#endif #endif
static inline float get_measurement(const AxisEnum a) { static inline float get_measurement(const AxisEnum a) {
UNUSED(a);
// Return the measurement averaged over all readings // Return the measurement averaged over all readings
return TERN(MEASURE_BACKLASH_WHEN_PROBING return TERN(MEASURE_BACKLASH_WHEN_PROBING
, measured_count[a] > 0 ? measured_mm[a] / measured_count[a] : 0 , measured_count[a] > 0 ? measured_mm[a] / measured_count[a] : 0
, 0 , 0
); );
TERN(MEASURE_BACKLASH_WHEN_PROBING,,UNUSED(a));
} }
static inline bool has_measurement(const AxisEnum a) { static inline bool has_measurement(const AxisEnum a) {
UNUSED(a);
return TERN0(MEASURE_BACKLASH_WHEN_PROBING, measured_count[a] > 0); return TERN0(MEASURE_BACKLASH_WHEN_PROBING, measured_count[a] > 0);
TERN(MEASURE_BACKLASH_WHEN_PROBING,,UNUSED(a));
} }
static inline bool has_any_measurement() { static inline bool has_any_measurement() {

View file

@ -110,7 +110,7 @@ public:
#if CONJOINED_NEOPIXEL #if CONJOINED_NEOPIXEL
adaneo2.show(); adaneo2.show();
#else #else
TERN(NEOPIXEL2_SEPARATE,,adaneo1.setPin(NEOPIXEL2_PIN)); IF_DISABLED(NEOPIXEL2_SEPARATE, adaneo1.setPin(NEOPIXEL2_PIN));
adaneo1.show(); adaneo1.show();
adaneo1.setPin(NEOPIXEL_PIN); adaneo1.setPin(NEOPIXEL_PIN);
#endif #endif

View file

@ -0,0 +1,59 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 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 <https://www.gnu.org/licenses/>.
*
*/
#include "../inc/MarlinConfigPre.h"
#if !WITHIN(TRAMMING_SCREW_THREAD, 30, 51) || TRAMMING_SCREW_THREAD % 10 > 1
#error "TRAMMING_SCREW_THREAD must be equal to 30, 31, 40, 41, 50, or 51."
#endif
constexpr xy_pos_t screws_tilt_adjust_pos[] = TRAMMING_POINT_XY;
#define G35_PROBE_COUNT COUNT(screws_tilt_adjust_pos)
static_assert(G35_PROBE_COUNT >= 3, "TRAMMING_POINT_XY requires at least 3 XY positions.");
extern const char point_name_1[], point_name_2[], point_name_3[]
#ifdef TRAMMING_POINT_NAME_4
, point_name_4[]
#ifdef TRAMMING_POINT_NAME_5
, point_name_5[]
#endif
#endif
;
#define _NR_TRAM_NAMES 2
#ifdef TRAMMING_POINT_NAME_3
#undef _NR_TRAM_NAMES
#define _NR_TRAM_NAMES 3
#ifdef TRAMMING_POINT_NAME_4
#undef _NR_TRAM_NAMES
#define _NR_TRAM_NAMES 4
#ifdef TRAMMING_POINT_NAME_5
#undef _NR_TRAM_NAMES
#define _NR_TRAM_NAMES 5
#endif
#endif
#endif
static_assert(_NR_TRAM_NAMES >= G35_PROBE_COUNT, "Define enough TRAMMING_POINT_NAME_s for all TRAMMING_POINT_XY entries.");
#undef _NR_TRAM_NAMES
extern PGM_P const tramming_point_name[];

View file

@ -36,19 +36,23 @@
#define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE)
#include "../../core/debug_out.h" #include "../../core/debug_out.h"
constexpr xy_pos_t screws_tilt_adjust_pos[] = TRAMMING_POINT_XY; //
// Define tramming point names.
//
static PGMSTR(point_name_1, TRAMMING_POINT_NAME_1); #include "../../feature/tramming.h" // Validate
static PGMSTR(point_name_2, TRAMMING_POINT_NAME_2);
static PGMSTR(point_name_3, TRAMMING_POINT_NAME_3); PGMSTR(point_name_1, TRAMMING_POINT_NAME_1);
PGMSTR(point_name_2, TRAMMING_POINT_NAME_2);
PGMSTR(point_name_3, TRAMMING_POINT_NAME_3);
#ifdef TRAMMING_POINT_NAME_4 #ifdef TRAMMING_POINT_NAME_4
static PGMSTR(point_name_4, TRAMMING_POINT_NAME_4); PGMSTR(point_name_4, TRAMMING_POINT_NAME_4);
#ifdef TRAMMING_POINT_NAME_5 #ifdef TRAMMING_POINT_NAME_5
static PGMSTR(point_name_5, TRAMMING_POINT_NAME_5); PGMSTR(point_name_5, TRAMMING_POINT_NAME_5);
#endif #endif
#endif #endif
static PGM_P const tramming_point_name[] PROGMEM = { PGM_P const tramming_point_name[] PROGMEM = {
point_name_1, point_name_2, point_name_3 point_name_1, point_name_2, point_name_3
#ifdef TRAMMING_POINT_NAME_4 #ifdef TRAMMING_POINT_NAME_4
, point_name_4 , point_name_4
@ -58,14 +62,6 @@ static PGM_P const tramming_point_name[] PROGMEM = {
#endif #endif
}; };
#define G35_PROBE_COUNT COUNT(screws_tilt_adjust_pos)
#if !WITHIN(TRAMMING_SCREW_THREAD, 30, 51) || TRAMMING_SCREW_THREAD % 10 > 1
#error "TRAMMING_SCREW_THREAD must be equal to 30, 31, 40, 41, 50, or 51."
#endif
static_assert(G35_PROBE_COUNT > 2, "TRAMMING_POINT_XY requires at least 3 XY positions.");
/** /**
* G35: Read bed corners to help adjust bed screws * G35: Read bed corners to help adjust bed screws
* *

View file

@ -105,7 +105,7 @@ void GcodeSuite::M104() {
* mode, for instance in a dual extruder setup, without affecting the running * mode, for instance in a dual extruder setup, without affecting the running
* print timer. * print timer.
*/ */
thermalManager.check_timer_autostart(false, true); thermalManager.auto_job_check_timer(false, true);
#endif #endif
} }
@ -182,7 +182,7 @@ void GcodeSuite::M109() {
* standby mode, (e.g., in a dual extruder setup) without affecting * standby mode, (e.g., in a dual extruder setup) without affecting
* the running print timer. * the running print timer.
*/ */
thermalManager.check_timer_autostart(true, true); thermalManager.auto_job_check_timer(true, true);
#endif #endif
#if HAS_DISPLAY #if HAS_DISPLAY

View file

@ -81,7 +81,7 @@ void GcodeSuite::M140() {
* temperatures need to be set below mintemp. Order of M140, M104, and M141 * temperatures need to be set below mintemp. Order of M140, M104, and M141
* at the end of the print does not matter. * at the end of the print does not matter.
*/ */
thermalManager.check_timer_autostart(false, true); thermalManager.auto_job_check_timer(false, true);
#endif #endif
} }
} }
@ -128,7 +128,7 @@ void GcodeSuite::M190() {
thermalManager.setTargetBed(temp); thermalManager.setTargetBed(temp);
TERN_(PRINTJOB_TIMER_AUTOSTART, thermalManager.check_timer_autostart(true, false)); TERN_(PRINTJOB_TIMER_AUTOSTART, thermalManager.auto_job_check_timer(true, false));
ui.set_status_P(thermalManager.isHeatingBed() ? GET_TEXT(MSG_BED_HEATING) : GET_TEXT(MSG_BED_COOLING)); ui.set_status_P(thermalManager.isHeatingBed() ? GET_TEXT(MSG_BED_HEATING) : GET_TEXT(MSG_BED_COOLING));

View file

@ -60,7 +60,7 @@ void GcodeSuite::M141() {
* temperatures need to be set below mintemp. Order of M140, M104, and M141 * temperatures need to be set below mintemp. Order of M140, M104, and M141
* at the end of the print does not matter. * at the end of the print does not matter.
*/ */
thermalManager.check_timer_autostart(false, true); thermalManager.auto_job_check_timer(false, true);
#endif #endif
} }
} }
@ -75,7 +75,7 @@ void GcodeSuite::M191() {
const bool no_wait_for_cooling = parser.seenval('S'); const bool no_wait_for_cooling = parser.seenval('S');
if (no_wait_for_cooling || parser.seenval('R')) { if (no_wait_for_cooling || parser.seenval('R')) {
thermalManager.setTargetChamber(parser.value_celsius()); thermalManager.setTargetChamber(parser.value_celsius());
TERN_(PRINTJOB_TIMER_AUTOSTART, thermalManager.check_timer_autostart(true, false)); TERN_(PRINTJOB_TIMER_AUTOSTART, thermalManager.auto_job_check_timer(true, false));
} }
else return; else return;

View file

@ -235,7 +235,7 @@
#define BOARD_ST7920_DELAY_2 DELAY_NS(125) #define BOARD_ST7920_DELAY_2 DELAY_NS(125)
#define BOARD_ST7920_DELAY_3 DELAY_NS(125) #define BOARD_ST7920_DELAY_3 DELAY_NS(125)
#elif ANY(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER, ANET_FULL_GRAPHICS_LCD, BQ_LCD_SMART_CONTROLLER) #elif ANY(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER, ANET_FULL_GRAPHICS_LCD, ANET_FULL_GRAPHICS_LCD_ALT_WIRING, BQ_LCD_SMART_CONTROLLER)
#define IS_RRD_FG_SC 1 #define IS_RRD_FG_SC 1
@ -675,6 +675,10 @@
#define HAS_BED_PROBE 1 #define HAS_BED_PROBE 1
#endif #endif
#if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL)
#undef PROBE_MANUALLY
#endif
#if ANY(HAS_BED_PROBE, PROBE_MANUALLY, MESH_BED_LEVELING) #if ANY(HAS_BED_PROBE, PROBE_MANUALLY, MESH_BED_LEVELING)
#define PROBE_SELECTED 1 #define PROBE_SELECTED 1
#endif #endif
@ -747,6 +751,7 @@
#define HAS_PROBING_PROCEDURE 1 #define HAS_PROBING_PROCEDURE 1
#endif #endif
#if !HAS_LEVELING #if !HAS_LEVELING
#undef PROBE_MANUALLY
#undef RESTORE_LEVELING_AFTER_G28 #undef RESTORE_LEVELING_AFTER_G28
#endif #endif

View file

@ -1382,9 +1382,6 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
* Unified Bed Leveling * Unified Bed Leveling
*/ */
// Hide PROBE_MANUALLY from the rest of the code
#undef PROBE_MANUALLY
#if IS_SCARA #if IS_SCARA
#error "AUTO_BED_LEVELING_UBL does not yet support SCARA printers." #error "AUTO_BED_LEVELING_UBL does not yet support SCARA printers."
#elif DISABLED(EEPROM_SETTINGS) #elif DISABLED(EEPROM_SETTINGS)
@ -1410,13 +1407,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
#elif ENABLED(MESH_BED_LEVELING) #elif ENABLED(MESH_BED_LEVELING)
// Hide PROBE_MANUALLY from the rest of the code // Mesh Bed Leveling
#undef PROBE_MANUALLY
/**
* Mesh Bed Leveling
*/
#if ENABLED(DELTA) #if ENABLED(DELTA)
#error "MESH_BED_LEVELING is not compatible with DELTA printers." #error "MESH_BED_LEVELING is not compatible with DELTA printers."
#elif GRID_MAX_POINTS_X > 9 || GRID_MAX_POINTS_Y > 9 #elif GRID_MAX_POINTS_X > 9 || GRID_MAX_POINTS_Y > 9
@ -1950,7 +1941,7 @@ static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal
#endif #endif
// Delta and Cartesian use 3 homing endstops // Delta and Cartesian use 3 homing endstops
#if !IS_SCARA #if NONE(IS_SCARA, SPI_ENDSTOPS)
#if X_HOME_DIR < 0 && DISABLED(USE_XMIN_PLUG) #if X_HOME_DIR < 0 && DISABLED(USE_XMIN_PLUG)
#error "Enable USE_XMIN_PLUG when homing X to MIN." #error "Enable USE_XMIN_PLUG when homing X to MIN."
#elif X_HOME_DIR > 0 && DISABLED(USE_XMAX_PLUG) #elif X_HOME_DIR > 0 && DISABLED(USE_XMAX_PLUG)
@ -2229,7 +2220,7 @@ static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal
+ COUNT_ENABLED(TFTGLCD_PANEL_SPI, TFTGLCD_PANEL_I2C) \ + COUNT_ENABLED(TFTGLCD_PANEL_SPI, TFTGLCD_PANEL_I2C) \
+ COUNT_ENABLED(VIKI2, miniVIKI) \ + COUNT_ENABLED(VIKI2, miniVIKI) \
+ COUNT_ENABLED(ZONESTAR_12864LCD, ZONESTAR_12864OLED, ZONESTAR_12864OLED_SSD1306) \ + COUNT_ENABLED(ZONESTAR_12864LCD, ZONESTAR_12864OLED, ZONESTAR_12864OLED_SSD1306) \
+ ENABLED(ANET_FULL_GRAPHICS_LCD) \ + COUNT_ENABLED(ANET_FULL_GRAPHICS_LCD, ANET_FULL_GRAPHICS_LCD_ALT_WIRING) \
+ ENABLED(AZSMZ_12864) \ + ENABLED(AZSMZ_12864) \
+ ENABLED(BQ_LCD_SMART_CONTROLLER) \ + ENABLED(BQ_LCD_SMART_CONTROLLER) \
+ ENABLED(CARTESIO_UI) \ + ENABLED(CARTESIO_UI) \
@ -2303,6 +2294,20 @@ static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal
#error "GRAPHICAL_TFT_UPSCALE must be set to 2 or 3." #error "GRAPHICAL_TFT_UPSCALE must be set to 2 or 3."
#endif #endif
/**
* Some boards forbid the use of -1 Native USB
*/
#if ENABLED(BOARD_NO_NATIVE_USB)
#undef BOARD_NO_NATIVE_USB
#if SERIAL_PORT == -1
#error "SERIAL_PORT is set to -1, but the MOTHERBOARD has no native USB support. Set SERIAL_PORT to a valid value for your board."
#elif SERIAL_PORT_2 == -1
#error "SERIAL_PORT_2 is set to -1, but the MOTHERBOARD has no native USB support. Set SERIAL_PORT_2 to a valid value for your board."
#elif LCD_SERIAL_PORT == -1
#error "LCD_SERIAL_PORT is set to -1, but the MOTHERBOARD has no native USB support. Set LCD_SERIAL_PORT to a valid value for your board."
#endif
#endif
/** /**
* Serial displays require a dedicated serial port * Serial displays require a dedicated serial port
*/ */
@ -2505,21 +2510,28 @@ static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal
#define Y_ENDSTOP_INVERTING !AXIS_DRIVER_TYPE(Y,TMC2209) #define Y_ENDSTOP_INVERTING !AXIS_DRIVER_TYPE(Y,TMC2209)
#define Z_ENDSTOP_INVERTING !AXIS_DRIVER_TYPE(Z,TMC2209) #define Z_ENDSTOP_INVERTING !AXIS_DRIVER_TYPE(Z,TMC2209)
#if ENABLED(DELTA) && !BOTH(STEALTHCHOP_XY, STEALTHCHOP_Z) #if NONE(SPI_ENDSTOPS, ONBOARD_ENDSTOPPULLUPS, ENDSTOPPULLUPS)
#error "SENSORLESS_HOMING on DELTA currently requires STEALTHCHOP_XY and STEALTHCHOP_Z." #if X_SENSORLESS && X_HOME_DIR < 0 && DISABLED(ENDSTOPPULLUP_XMIN)
#elif X_SENSORLESS && X_HOME_DIR < 0 && NONE(ONBOARD_ENDSTOPPULLUPS, ENDSTOPPULLUPS, ENDSTOPPULLUP_XMIN)
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_XMIN (or ENDSTOPPULLUPS) when homing to X_MIN." #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_XMIN (or ENDSTOPPULLUPS) when homing to X_MIN."
#elif X_SENSORLESS && X_HOME_DIR > 0 && NONE(ONBOARD_ENDSTOPPULLUPS, ENDSTOPPULLUPS, ENDSTOPPULLUP_XMAX) #elif X_SENSORLESS && X_HOME_DIR > 0 && DISABLED(ENDSTOPPULLUP_XMAX)
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_XMAX (or ENDSTOPPULLUPS) when homing to X_MAX." #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_XMAX (or ENDSTOPPULLUPS) when homing to X_MAX."
#elif Y_SENSORLESS && Y_HOME_DIR < 0 && NONE(ONBOARD_ENDSTOPPULLUPS, ENDSTOPPULLUPS, ENDSTOPPULLUP_YMIN) #elif Y_SENSORLESS && Y_HOME_DIR < 0 && DISABLED(ENDSTOPPULLUP_YMIN)
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_YMIN (or ENDSTOPPULLUPS) when homing to Y_MIN." #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_YMIN (or ENDSTOPPULLUPS) when homing to Y_MIN."
#elif Y_SENSORLESS && Y_HOME_DIR > 0 && NONE(ONBOARD_ENDSTOPPULLUPS, ENDSTOPPULLUPS, ENDSTOPPULLUP_YMAX) #elif Y_SENSORLESS && Y_HOME_DIR > 0 && DISABLED(ENDSTOPPULLUP_YMAX)
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_YMAX (or ENDSTOPPULLUPS) when homing to Y_MAX." #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_YMAX (or ENDSTOPPULLUPS) when homing to Y_MAX."
#elif Z_SENSORLESS && Z_HOME_DIR < 0 && NONE(ONBOARD_ENDSTOPPULLUPS, ENDSTOPPULLUPS, ENDSTOPPULLUP_ZMIN) #elif Z_SENSORLESS && Z_HOME_DIR < 0 && DISABLED(ENDSTOPPULLUP_ZMIN)
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMIN (or ENDSTOPPULLUPS) when homing to Z_MIN." #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMIN (or ENDSTOPPULLUPS) when homing to Z_MIN."
#elif Z_SENSORLESS && Z_HOME_DIR > 0 && NONE(ONBOARD_ENDSTOPPULLUPS, ENDSTOPPULLUPS, ENDSTOPPULLUP_ZMAX) #elif Z_SENSORLESS && Z_HOME_DIR > 0 && DISABLED(ENDSTOPPULLUP_ZMAX)
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMAX (or ENDSTOPPULLUPS) when homing to Z_MAX." #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMAX (or ENDSTOPPULLUPS) when homing to Z_MAX."
#elif X_SENSORLESS && X_HOME_DIR < 0 && X_MIN_ENDSTOP_INVERTING != X_ENDSTOP_INVERTING #endif
#endif
#if ENABLED(SPI_ENDSTOPS)
#if ENABLED(QUICK_HOME)
#warning "SPI_ENDSTOPS may be unreliable with QUICK_HOME. Adjust back-offs for better results."
#endif
#else
#if X_SENSORLESS && X_HOME_DIR < 0 && X_MIN_ENDSTOP_INVERTING != X_ENDSTOP_INVERTING
#if X_ENDSTOP_INVERTING #if X_ENDSTOP_INVERTING
#error "SENSORLESS_HOMING requires X_MIN_ENDSTOP_INVERTING = true when homing to X_MIN." #error "SENSORLESS_HOMING requires X_MIN_ENDSTOP_INVERTING = true when homing to X_MIN."
#else #else
@ -2555,6 +2567,11 @@ static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal
#else #else
#error "SENSORLESS_HOMING requires Z_MAX_ENDSTOP_INVERTING = false when homing TMC2209 to Z_MAX." #error "SENSORLESS_HOMING requires Z_MAX_ENDSTOP_INVERTING = false when homing TMC2209 to Z_MAX."
#endif #endif
#endif
#endif
#if ENABLED(DELTA) && !BOTH(STEALTHCHOP_XY, STEALTHCHOP_Z)
#error "SENSORLESS_HOMING on DELTA currently requires STEALTHCHOP_XY and STEALTHCHOP_Z."
#elif ENDSTOP_NOISE_THRESHOLD #elif ENDSTOP_NOISE_THRESHOLD
#error "SENSORLESS_HOMING is incompatible with ENDSTOP_NOISE_THRESHOLD." #error "SENSORLESS_HOMING is incompatible with ENDSTOP_NOISE_THRESHOLD."
#elif !(X_SENSORLESS || Y_SENSORLESS || Z_SENSORLESS) #elif !(X_SENSORLESS || Y_SENSORLESS || Z_SENSORLESS)

View file

@ -42,7 +42,7 @@
* version was tagged. * version was tagged.
*/ */
#ifndef STRING_DISTRIBUTION_DATE #ifndef STRING_DISTRIBUTION_DATE
#define STRING_DISTRIBUTION_DATE "2020-11-04" #define STRING_DISTRIBUTION_DATE "2020-11-08"
#endif #endif
/** /**

View file

@ -123,7 +123,7 @@ bool MarlinUI::detected() { return true; }
custom_start_bmp custom_start_bmp
#endif #endif
; ;
TERN(CUSTOM_BOOTSCREEN_ANIMATED,,UNUSED(frame)); UNUSED(frame);
u8g.drawBitmapP(left, top, CUSTOM_BOOTSCREEN_BMP_BYTEWIDTH, CUSTOM_BOOTSCREEN_BMPHEIGHT, bmp); u8g.drawBitmapP(left, top, CUSTOM_BOOTSCREEN_BMP_BYTEWIDTH, CUSTOM_BOOTSCREEN_BMPHEIGHT, bmp);

View file

@ -104,6 +104,9 @@
#if DO_DRAW_HOTENDS #if DO_DRAW_HOTENDS
#define MAX_HOTEND_DRAW _MIN(HOTENDS, ((LCD_PIXEL_WIDTH - (STATUS_LOGO_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8) / (STATUS_HEATERS_XSPACE))) #define MAX_HOTEND_DRAW _MIN(HOTENDS, ((LCD_PIXEL_WIDTH - (STATUS_LOGO_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8) / (STATUS_HEATERS_XSPACE)))
#endif
#if EITHER(DO_DRAW_BED, DO_DRAW_HOTENDS)
#define STATUS_HEATERS_BOT (STATUS_HEATERS_Y + STATUS_HEATERS_HEIGHT - 1) #define STATUS_HEATERS_BOT (STATUS_HEATERS_Y + STATUS_HEATERS_HEIGHT - 1)
#endif #endif

View file

@ -2144,7 +2144,7 @@ void HMI_Printing() {
#endif #endif
#endif #endif
strcat_P(cmd, PSTR("M24")); strcat_P(cmd, M24_STR);
queue.inject(cmd); queue.inject(cmd);
} }
else { else {

View file

@ -26,7 +26,7 @@
#if ENABLED(DGUS_LCD_UI_FYSETC) #if ENABLED(DGUS_LCD_UI_FYSETC)
#include "../DGUSDisplayDef.h" #include "DGUSDisplayDef.h"
#include "../DGUSDisplay.h" #include "../DGUSDisplay.h"
#include "../DGUSScreenHandler.h" #include "../DGUSScreenHandler.h"

View file

@ -21,6 +21,8 @@
*/ */
#pragma once #pragma once
#include "../DGUSDisplayDef.h"
enum DGUSLCD_Screens : uint8_t { enum DGUSLCD_Screens : uint8_t {
DGUSLCD_SCREEN_BOOT = 0, DGUSLCD_SCREEN_BOOT = 0,
DGUSLCD_SCREEN_MAIN = 1, DGUSLCD_SCREEN_MAIN = 1,

View file

@ -253,6 +253,9 @@
#define __TERN(T,V...) ___TERN(_CAT(_NO,T),V) // Prepend '_NO' to get '_NOT_0' or '_NOT_1' #define __TERN(T,V...) ___TERN(_CAT(_NO,T),V) // Prepend '_NO' to get '_NOT_0' or '_NOT_1'
#define ___TERN(P,V...) THIRD(P,V) // If first argument has a comma, A. Else B. #define ___TERN(P,V...) THIRD(P,V) // If first argument has a comma, A. Else B.
#define IF_ENABLED TERN_
#define IF_DISABLED(O,A) _TERN(_ENA_1(O),,A)
#define ANY(V...) !DISABLED(V) #define ANY(V...) !DISABLED(V)
#define NONE(V...) DISABLED(V) #define NONE(V...) DISABLED(V)
#define ALL(V...) ENABLED(V) #define ALL(V...) ENABLED(V)

View file

@ -435,7 +435,7 @@
base_char = base_special ? NO_DOT_I : std_char; base_char = base_special ? NO_DOT_I : std_char;
} }
// If cmd != NULL, draw the glyph to the screen // If cmd != nullptr, draw the glyph to the screen
if (cmd) { if (cmd) {
ext_vertex2ii(*cmd, x, y, base_special ? alt_font : std_font, base_char); ext_vertex2ii(*cmd, x, y, base_special ? alt_font : std_font, base_char);
if (accent_char) if (accent_char)

View file

@ -90,7 +90,7 @@ class PolyReader {
if (start_x != eol) if (start_x != eol)
close_loop(); close_loop();
else else
p = NULL; p = nullptr;
} }
else { else {
x = pgm_read_word_far(p++); x = pgm_read_word_far(p++);
@ -106,7 +106,7 @@ class PolyReader {
} }
} }
bool has_more() { return p != NULL; } bool has_more() { return p != nullptr; }
bool end_of_loop() { return start_x == eol; } bool end_of_loop() { return start_x == eol; }
}; };

View file

@ -10,7 +10,7 @@
* GNU General Public License for more details. * * GNU General Public License for more details. *
* * * *
* To view a copy of the GNU General Public License, go to the following * * To view a copy of the GNU General Public License, go to the following *
* location: <http://www.gnu.org/licenses/>. * * location: <https://www.gnu.org/licenses/>. *
****************************************************************************/ ****************************************************************************/
/** /**

View file

@ -32,6 +32,7 @@
#include "../../../../module/motion.h" #include "../../../../module/motion.h"
#include "../../../../sd/cardreader.h" #include "../../../../sd/cardreader.h"
#include "../../../../inc/MarlinConfig.h" #include "../../../../inc/MarlinConfig.h"
#include "../../../../MarlinCore.h"
#if ENABLED(POWER_LOSS_RECOVERY) #if ENABLED(POWER_LOSS_RECOVERY)
#include "../../../../feature/powerloss.h" #include "../../../../feature/powerloss.h"
@ -95,7 +96,7 @@ void printer_state_polling() {
gcode.process_subcommands_now(public_buf_l); gcode.process_subcommands_now(public_buf_l);
gcode.process_subcommands_now_P(PSTR("G90")); gcode.process_subcommands_now_P(PSTR("G90"));
} }
gcode.process_subcommands_now_P(PSTR("M24")); gcode.process_subcommands_now_P(M24_STR);
uiCfg.print_state = WORKING; uiCfg.print_state = WORKING;
start_print_time(); start_print_time();

View file

@ -42,7 +42,7 @@ namespace Language_an {
PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Tarcheta sacada"); PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Tarcheta sacada");
PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
PROGMEM Language_Str MSG_MAIN = _UxGT("Menu prencipal"); PROGMEM Language_Str MSG_MAIN = _UxGT("Menu prencipal");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Inicio automatico"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Inicio automatico");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Amortar motors"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Amortar motors");
PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Levar a l'orichen"); PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Levar a l'orichen");
PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Orichen X"); PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Orichen X");

View file

@ -40,7 +40,7 @@ namespace Language_bg {
PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Картата е поставена"); PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Картата е поставена");
PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Картата е извадена"); PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Картата е извадена");
PROGMEM Language_Str MSG_MAIN = _UxGT("Меню"); PROGMEM Language_Str MSG_MAIN = _UxGT("Меню");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Автостарт"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Автостарт");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Изкл. двигатели"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Изкл. двигатели");
PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Паркиране"); PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Паркиране");
PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Задай Начало"); PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Задай Начало");

View file

@ -38,7 +38,7 @@ namespace Language_ca {
PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Targeta extreta."); PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Targeta extreta.");
PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops");
PROGMEM Language_Str MSG_MAIN = _UxGT("Menú principal"); PROGMEM Language_Str MSG_MAIN = _UxGT("Menú principal");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Inici automatic"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Inici automatic");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Desactiva motors"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Desactiva motors");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu de depuracio"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu de depuracio");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barra progres"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barra progres");

View file

@ -57,7 +57,7 @@ namespace Language_cz {
PROGMEM Language_Str MSG_MAIN = _UxGT("Hlavní nabídka"); PROGMEM Language_Str MSG_MAIN = _UxGT("Hlavní nabídka");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Další nastavení"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Další nastavení");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfigurace"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfigurace");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autostart"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autostart");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Uvolnit motory"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Uvolnit motory");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Nabídka ladění"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Nabídka ladění");
#if LCD_WIDTH >= 20 #if LCD_WIDTH >= 20

View file

@ -53,7 +53,7 @@ namespace Language_de {
PROGMEM Language_Str MSG_MAIN = _UxGT("Hauptmenü"); PROGMEM Language_Str MSG_MAIN = _UxGT("Hauptmenü");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Erw. Einstellungen"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Erw. Einstellungen");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfiguration"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfiguration");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autostart"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autostart");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motoren deaktivieren"); // M84 :: Max length 19 characters PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motoren deaktivieren"); // M84 :: Max length 19 characters
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Debug-Menü"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Debug-Menü");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Statusbalken-Test"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Statusbalken-Test");

View file

@ -40,7 +40,7 @@ namespace Language_el {
PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Εισαγωγή κάρτας"); PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Εισαγωγή κάρτας");
PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Αφαίρεση κάρτας"); PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Αφαίρεση κάρτας");
PROGMEM Language_Str MSG_MAIN = _UxGT("Βασική Οθόνη"); PROGMEM Language_Str MSG_MAIN = _UxGT("Βασική Οθόνη");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Αυτόματη εκκίνηση"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Αυτόματη εκκίνηση");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Απενεργοποίηση Μοτέρ"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Απενεργοποίηση Μοτέρ");
PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο"); //SHORTEN PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο"); //SHORTEN
PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Αρχικό σημείο X"); PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Αρχικό σημείο X");

View file

@ -41,7 +41,7 @@ namespace Language_el_gr {
PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Αφαίρεση κάρτας"); PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Αφαίρεση κάρτας");
PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
PROGMEM Language_Str MSG_MAIN = _UxGT("Βασική Οθόνη"); PROGMEM Language_Str MSG_MAIN = _UxGT("Βασική Οθόνη");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Αυτόματη εκκίνηση"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Αυτόματη εκκίνηση");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Απενεργοποίηση βηματιστή"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Απενεργοποίηση βηματιστή");
PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο"); PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο");
PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Αρχικό σημείο X"); PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Αρχικό σημείο X");

View file

@ -64,7 +64,7 @@ namespace Language_en {
PROGMEM Language_Str MSG_MAIN = _UxGT("Main"); PROGMEM Language_Str MSG_MAIN = _UxGT("Main");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Advanced Settings"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Advanced Settings");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuration"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuration");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autostart"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Run Auto Files");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Disable Steppers"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Disable Steppers");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Debug Menu"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Debug Menu");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Progress Bar Test"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Progress Bar Test");
@ -73,7 +73,6 @@ namespace Language_en {
PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Home Y"); PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Home Y");
PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Home Z"); PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Home Z");
PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-Align"); PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-Align");
PROGMEM Language_Str MSG_ASSISTED_TRAMMING = _UxGT("Assisted Tramming");
PROGMEM Language_Str MSG_ITERATION = _UxGT("G34 Iteration: %i"); PROGMEM Language_Str MSG_ITERATION = _UxGT("G34 Iteration: %i");
PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Accuracy Decreasing!"); PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Accuracy Decreasing!");
PROGMEM Language_Str MSG_ACCURACY_ACHIEVED = _UxGT("Accuracy Achieved"); PROGMEM Language_Str MSG_ACCURACY_ACHIEVED = _UxGT("Accuracy Achieved");
@ -85,6 +84,10 @@ namespace Language_en {
PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Set Home Offsets"); PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Set Home Offsets");
PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets Applied"); PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets Applied");
PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Set Origin"); PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Set Origin");
PROGMEM Language_Str MSG_ASSISTED_TRAMMING = _UxGT("Assisted Tramming");
PROGMEM Language_Str MSG_TRAMMING_WIZARD = _UxGT("Tramming Wizard");
PROGMEM Language_Str MSG_SELECT_ORIGIN = _UxGT("Select Origin");
PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Last value ");
#if PREHEAT_COUNT #if PREHEAT_COUNT
PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Preheat ") PREHEAT_1_LABEL; PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Preheat ") PREHEAT_1_LABEL;
PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Preheat ") PREHEAT_1_LABEL " ~"; PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Preheat ") PREHEAT_1_LABEL " ~";
@ -666,6 +669,7 @@ namespace Language_en {
PROGMEM Language_Str MSG_REHEATING = _UxGT("Reheating..."); PROGMEM Language_Str MSG_REHEATING = _UxGT("Reheating...");
PROGMEM Language_Str MSG_PROBE_WIZARD = _UxGT("Z Probe Wizard"); PROGMEM Language_Str MSG_PROBE_WIZARD = _UxGT("Z Probe Wizard");
PROGMEM Language_Str MSG_SOUND = _UxGT("Sound"); PROGMEM Language_Str MSG_SOUND = _UxGT("Sound");
} }

View file

@ -43,15 +43,17 @@ namespace Language_es {
PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("SD/USB insertado"); PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("SD/USB insertado");
PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("SD/USB retirado"); PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("SD/USB retirado");
PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Esperando al SD/USB"); PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Esperando al SD/USB");
PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("Fallo al iniciar SD");
PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Error lectura SD/USB"); PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Error lectura SD/USB");
PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("Disp. USB retirado"); PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("Disp. USB retirado");
PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Inicio USB fallido"); PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Inicio USB fallido");
PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Desbordamiento de subllamada");
PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops"); PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops");
PROGMEM Language_Str MSG_MAIN = _UxGT("Menú principal"); PROGMEM Language_Str MSG_MAIN = _UxGT("Menú principal");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Ajustes avanzados"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Ajustes avanzados");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuración"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuración");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Inicio automático"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Inicio automático");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Apagar motores"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Apagar motores");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menú depuración"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menú depuración");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Prob. barra progreso"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Prob. barra progreso");
@ -60,6 +62,10 @@ namespace Language_es {
PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Origen Y"); PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Origen Y");
PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Origen Z"); PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Origen Z");
PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto alineado Z"); PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto alineado Z");
PROGMEM Language_Str MSG_ASSISTED_TRAMMING = _UxGT("Recorrido asistido");
PROGMEM Language_Str MSG_ITERATION = _UxGT("G34 Iteración: %i");
PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("¡Precisión disminuyendo!");
PROGMEM Language_Str MSG_ACCURACY_ACHIEVED = _UxGT("Precisión conseguida");
PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Origen XYZ"); PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Origen XYZ");
PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Pulsar para comenzar"); PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Pulsar para comenzar");
PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Siguiente punto"); PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Siguiente punto");

View file

@ -42,7 +42,7 @@ namespace Language_eu {
PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Txartela sartuta"); PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Txartela sartuta");
PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Txartela kenduta"); PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Txartela kenduta");
PROGMEM Language_Str MSG_MAIN = _UxGT("Menu nagusia"); PROGMEM Language_Str MSG_MAIN = _UxGT("Menu nagusia");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Auto hasiera"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Auto hasiera");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Itzali motoreak"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Itzali motoreak");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Arazketa Menua"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Arazketa Menua");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Prog. Barra Proba"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Prog. Barra Proba");

View file

@ -40,7 +40,7 @@ namespace Language_fi {
PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Kortti asetettu"); PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Kortti asetettu");
PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Kortti poistettu"); PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Kortti poistettu");
PROGMEM Language_Str MSG_MAIN = _UxGT("Palaa"); PROGMEM Language_Str MSG_MAIN = _UxGT("Palaa");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Automaatti"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Automaatti");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Vapauta moottorit"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Vapauta moottorit");
PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Aja referenssiin"); PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Aja referenssiin");
PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Aseta origo"); PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Aseta origo");

View file

@ -52,7 +52,7 @@ namespace Language_fr {
PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principal"); PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principal");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Config. avancée"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Config. avancée");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuration"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuration");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Exéc. auto.gcode"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Exéc. auto.gcode");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Arrêter moteurs"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Arrêter moteurs");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu debug"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu debug");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barre progress."); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barre progress.");

View file

@ -54,7 +54,7 @@ namespace Language_gl {
PROGMEM Language_Str MSG_MAIN = _UxGT("Menú principal"); PROGMEM Language_Str MSG_MAIN = _UxGT("Menú principal");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Axustes avanzados"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Axustes avanzados");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuración"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuración");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autoarranque"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autoarranque");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Apagar motores"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Apagar motores");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menú depuración"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menú depuración");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barra progreso"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barra progreso");

View file

@ -41,7 +41,7 @@ namespace Language_hr {
PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("SD kartica uklonjena"); PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("SD kartica uklonjena");
PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
PROGMEM Language_Str MSG_MAIN = _UxGT("Main"); PROGMEM Language_Str MSG_MAIN = _UxGT("Main");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Auto pokretanje"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Auto pokretanje");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Ugasi steppere"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Ugasi steppere");
PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Automatski homing"); PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Automatski homing");
PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Home-aj X"); PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Home-aj X");

View file

@ -56,7 +56,7 @@ namespace Language_hu {
PROGMEM Language_Str MSG_MAIN = _UxGT("<Fömenü>"); PROGMEM Language_Str MSG_MAIN = _UxGT("<Fömenü>");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("További Beállítások"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("További Beállítások");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfiguráció"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfiguráció");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autoinditás"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autoinditás");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motorok kikapcsolása"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motorok kikapcsolása");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Hiba Menü"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Hiba Menü");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Haladás sáv teszt"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Haladás sáv teszt");

View file

@ -62,7 +62,7 @@ namespace Language_it {
PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principale"); PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principale");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Impostaz. avanzate"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Impostaz. avanzate");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configurazione"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configurazione");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autostart"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autostart");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Disabilita Motori"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Disabilita Motori");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu di debug"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu di debug");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barra avanzam."); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barra avanzam.");

View file

@ -47,7 +47,7 @@ namespace Language_jp_kana {
PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("メディアノトリダシ"); PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("メディアノトリダシ");
PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("エンドストップ"); // "Endstops" // Max length 8 characters PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("エンドストップ"); // "Endstops" // Max length 8 characters
PROGMEM Language_Str MSG_MAIN = _UxGT("メイン"); // "Main" PROGMEM Language_Str MSG_MAIN = _UxGT("メイン"); // "Main"
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("ジドウカイシ"); // "Autostart" PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("ジドウカイシ"); // "Autostart"
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("モーターデンゲン オフ"); // "Disable steppers" PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("モーターデンゲン オフ"); // "Disable steppers"
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("デバッグメニュー"); // "Debug Menu" PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("デバッグメニュー"); // "Debug Menu"
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("プログレスバー テスト"); // "Progress Bar Test" PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("プログレスバー テスト"); // "Progress Bar Test"

View file

@ -42,7 +42,7 @@ namespace Language_ko_KR {
PROGMEM Language_Str MSG_MAIN = _UxGT("뒤로"); PROGMEM Language_Str MSG_MAIN = _UxGT("뒤로");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("고급 설정"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("고급 설정");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("설정"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("설정");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("자동 시작"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("자동 시작");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("모터 정지"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("모터 정지");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("디버깅 메뉴"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("디버깅 메뉴");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("프로그레스바 테스트"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("프로그레스바 테스트");

View file

@ -43,7 +43,7 @@ namespace Language_nl {
PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Kaart verwijderd"); PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Kaart verwijderd");
PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
PROGMEM Language_Str MSG_MAIN = _UxGT("Hoofdmenu"); PROGMEM Language_Str MSG_MAIN = _UxGT("Hoofdmenu");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autostart"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autostart");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motoren uit"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motoren uit");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Debug Menu"); // accepted English terms PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Debug Menu"); // accepted English terms
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Vooruitgang Test"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Vooruitgang Test");

View file

@ -52,7 +52,7 @@ namespace Language_pl {
PROGMEM Language_Str MSG_MAIN = _UxGT("Menu główne"); PROGMEM Language_Str MSG_MAIN = _UxGT("Menu główne");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Ustawienie zaawansowane"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Ustawienie zaawansowane");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfiguracja"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfiguracja");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autostart"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autostart");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Wyłącz silniki"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Wyłącz silniki");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu Debugowania"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu Debugowania");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Testowy pasek postępu"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Testowy pasek postępu");

View file

@ -51,7 +51,7 @@ namespace Language_pt_br {
PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principal"); PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principal");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Config. Avançada"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Config. Avançada");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuração"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuração");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Início automático"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Início automático");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Desabilit. motores"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Desabilit. motores");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu Debug"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu Debug");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Testar Barra Progres"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Testar Barra Progres");

View file

@ -53,7 +53,7 @@ namespace Language_ro {
PROGMEM Language_Str MSG_MAIN = _UxGT("Principal"); PROGMEM Language_Str MSG_MAIN = _UxGT("Principal");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Setari Avansate"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Setari Avansate");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configurare"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configurare");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autostart"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autostart");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Dezactivare Motoare"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Dezactivare Motoare");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Meniu Debug"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Meniu Debug");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test Bara Progres"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test Bara Progres");

View file

@ -56,7 +56,7 @@ namespace Language_ru {
PROGMEM Language_Str MSG_MAIN = _UxGT("Основное меню"); PROGMEM Language_Str MSG_MAIN = _UxGT("Основное меню");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Другие настройки"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Другие настройки");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Конфигурация"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Конфигурация");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Автостарт"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Автостарт");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Выключить двигатели"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Выключить двигатели");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Меню отладки"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Меню отладки");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Тест индикатора"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Тест индикатора");

View file

@ -57,7 +57,7 @@ namespace Language_sk {
PROGMEM Language_Str MSG_MAIN = _UxGT("Hlavná ponuka"); PROGMEM Language_Str MSG_MAIN = _UxGT("Hlavná ponuka");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Pokročilé nastav."); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Pokročilé nastav.");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfigurácia"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfigurácia");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Auto-štart"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Auto-štart");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Uvolniť motory"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Uvolniť motory");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Ponuka ladenia"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Ponuka ladenia");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test uk. priebehu"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test uk. priebehu");

View file

@ -57,7 +57,7 @@ namespace Language_tr {
PROGMEM Language_Str MSG_MAIN = _UxGT("Ana"); PROGMEM Language_Str MSG_MAIN = _UxGT("Ana");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Gelişmiş Ayarlar"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Gelişmiş Ayarlar");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Yapılandırma"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Yapılandırma");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Oto. Başlat"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Oto. Başlat");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motorları Durdur"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motorları Durdur");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Hata Ayıklama"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Hata Ayıklama");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Durum Çubuğu Testi"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Durum Çubuğu Testi");

View file

@ -58,7 +58,7 @@ namespace Language_uk {
PROGMEM Language_Str MSG_MAIN = _UxGT("Основне меню"); PROGMEM Language_Str MSG_MAIN = _UxGT("Основне меню");
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Інші налаштування"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Інші налаштування");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Конфігурація"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Конфігурація");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Автостарт"); PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Автостарт");
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Вимкнути двигуни"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Вимкнути двигуни");
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Меню Debug"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Меню Debug");
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Тест Progress Bar"); PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Тест Progress Bar");

View file

@ -47,7 +47,7 @@ namespace Language_vi {
PROGMEM Language_Str MSG_MAIN = _UxGT("Chính"); // Main PROGMEM Language_Str MSG_MAIN = _UxGT("Chính"); // Main
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Thiết lập cấp cao"); // Advanced Settings PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Thiết lập cấp cao"); // Advanced Settings
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Cấu hình"); // Configuration PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Cấu hình"); // Configuration
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Khởi chạy tự động"); // Autostart PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Khởi chạy tự động"); // Autostart
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Tắt động cơ bước"); // Disable steppers PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Tắt động cơ bước"); // Disable steppers
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu gỡ lỗi"); // Debug Menu PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu gỡ lỗi"); // Debug Menu
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Kiểm tra tiến độ"); // Progress bar test PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Kiểm tra tiến độ"); // Progress bar test

View file

@ -51,7 +51,7 @@ namespace Language_zh_CN {
PROGMEM Language_Str MSG_MAIN = _UxGT("主菜单"); //"Main" PROGMEM Language_Str MSG_MAIN = _UxGT("主菜单"); //"Main"
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("高级设置"); PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("高级设置");
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("配置"); PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("配置");
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("自动开始"); //"Autostart" PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("自动开始"); //"Autostart"
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("关闭步进电机"); //"Disable steppers" PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("关闭步进电机"); //"Disable steppers"
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("调试菜单"); // "Debug Menu" PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("调试菜单"); // "Debug Menu"
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("进度条测试"); // "Progress Bar Test" PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("进度条测试"); // "Progress Bar Test"

View file

@ -50,7 +50,7 @@ namespace Language_zh_TW {
PROGMEM Language_Str MSG_MAIN = _UxGT("主選單"); //"Main" PROGMEM Language_Str MSG_MAIN = _UxGT("主選單"); //"Main"
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("進階設置"); //"Advanced Settings" PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("進階設置"); //"Advanced Settings"
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("設置"); //Configuration PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("設置"); //Configuration
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("自動開始"); //"Autostart" PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("自動開始"); //"Autostart"
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("關閉步進馬達"); //"Disable steppers" PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("關閉步進馬達"); //"Disable steppers"
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("除錯選單"); // "Debug Menu" PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("除錯選單"); // "Debug Menu"
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("進度條測試"); // "Progress Bar Test" PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("進度條測試"); // "Progress Bar Test"

View file

@ -32,7 +32,12 @@
/** /**
* lcd_put_u8str_ind_P * lcd_put_u8str_ind_P
* Print a string with an index substituted within it *
* Print a string with an index substituted within it:
*
* = displays '0'....'10' for indexes 0 - 10
* ~ displays '1'....'11' for indexes 0 - 10
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
*/ */
lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const inStr/*=nullptr*/, const lcd_uint_t maxlen/*=LCD_WIDTH*/) { lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const inStr/*=nullptr*/, const lcd_uint_t maxlen/*=LCD_WIDTH*/) {
uint8_t *p = (uint8_t*)pstr; uint8_t *p = (uint8_t*)pstr;

View file

@ -81,7 +81,7 @@ void MarlinUI::save_previous_screen() {
} }
void MarlinUI::_goto_previous_screen(TERN_(TURBO_BACK_MENU_ITEM, const bool is_back/*=false*/)) { void MarlinUI::_goto_previous_screen(TERN_(TURBO_BACK_MENU_ITEM, const bool is_back/*=false*/)) {
TERN(TURBO_BACK_MENU_ITEM,,constexpr bool is_back = false); IF_DISABLED(TURBO_BACK_MENU_ITEM, constexpr bool is_back = false);
TERN_(HAS_TOUCH_XPT2046, on_edit_screen = false); TERN_(HAS_TOUCH_XPT2046, on_edit_screen = false);
if (screen_history_depth > 0) { if (screen_history_depth > 0) {
menuPosition &sh = screen_history[--screen_history_depth]; menuPosition &sh = screen_history[--screen_history_depth];

View file

@ -202,12 +202,12 @@ void menu_backlash();
// Helpers for editing PID Ki & Kd values // Helpers for editing PID Ki & Kd values
// grab the PID value out of the temp variable; scale it; then update the PID driver // grab the PID value out of the temp variable; scale it; then update the PID driver
void copy_and_scalePID_i(int16_t e) { void copy_and_scalePID_i(int16_t e) {
TERN(PID_PARAMS_PER_HOTEND,,UNUSED(e)); UNUSED(e);
PID_PARAM(Ki, e) = scalePID_i(raw_Ki); PID_PARAM(Ki, e) = scalePID_i(raw_Ki);
thermalManager.updatePID(); thermalManager.updatePID();
} }
void copy_and_scalePID_d(int16_t e) { void copy_and_scalePID_d(int16_t e) {
TERN(PID_PARAMS_PER_HOTEND,,UNUSED(e)); UNUSED(e);
PID_PARAM(Kd, e) = scalePID_d(raw_Kd); PID_PARAM(Kd, e) = scalePID_d(raw_Kd);
thermalManager.updatePID(); thermalManager.updatePID();
} }

View file

@ -219,7 +219,7 @@ static PGM_P pause_header() {
#define HOTEND_STATUS_ITEM() do { \ #define HOTEND_STATUS_ITEM() do { \
if (_menuLineNr == _thisItemNr) { \ if (_menuLineNr == _thisItemNr) { \
if (ui.should_draw()) { \ if (ui.should_draw()) { \
TERN(HAS_GRAPHICAL_TFT,, MenuItem_static::draw(_lcdLineNr, GET_TEXT(MSG_FILAMENT_CHANGE_NOZZLE), SS_INVERT)); \ IF_DISABLED(HAS_GRAPHICAL_TFT, MenuItem_static::draw(_lcdLineNr, GET_TEXT(MSG_FILAMENT_CHANGE_NOZZLE), SS_INVERT)); \
ui.draw_hotend_status(_lcdLineNr, hotend_status_extruder); \ ui.draw_hotend_status(_lcdLineNr, hotend_status_extruder); \
} \ } \
if (_skipStatic && encoderLine <= _thisItemNr) { \ if (_skipStatic && encoderLine <= _thisItemNr) { \

View file

@ -133,10 +133,10 @@ void menu_main() {
// *** IF THIS SECTION IS CHANGED, REPRODUCE BELOW *** // *** IF THIS SECTION IS CHANGED, REPRODUCE BELOW ***
// //
// Autostart // Run Auto Files
// //
#if ENABLED(MENU_ADDAUTOSTART) #if ENABLED(MENU_ADDAUTOSTART)
ACTION_ITEM(MSG_AUTOSTART, card.beginautostart); ACTION_ITEM(MSG_RUN_AUTO_FILES, card.beginautostart);
#endif #endif
if (card_detected) { if (card_detected) {
@ -238,7 +238,7 @@ void menu_main() {
// Autostart // Autostart
// //
#if ENABLED(MENU_ADDAUTOSTART) #if ENABLED(MENU_ADDAUTOSTART)
ACTION_ITEM(MSG_AUTOSTART, card.beginautostart); ACTION_ITEM(MSG_RUN_AUTO_FILES, card.beginautostart);
#endif #endif
if (card_detected) { if (card_detected) {

View file

@ -305,6 +305,10 @@ void menu_move() {
void menu_bed_leveling(); void menu_bed_leveling();
#endif #endif
#if ENABLED(ASSISTED_TRAMMING_WIZARD)
void goto_tramming_wizard();
#endif
void menu_motion() { void menu_motion() {
START_MENU(); START_MENU();
@ -346,7 +350,9 @@ void menu_motion() {
// //
// Assisted Bed Tramming // Assisted Bed Tramming
// //
#if ENABLED(ASSISTED_TRAMMING_MENU_ITEM) #if ENABLED(ASSISTED_TRAMMING_WIZARD)
SUBMENU(MSG_TRAMMING_WIZARD, goto_tramming_wizard);
#elif ENABLED(ASSISTED_TRAMMING_MENU_ITEM)
GCODES_ITEM(MSG_ASSISTED_TRAMMING, PSTR("G35")); GCODES_ITEM(MSG_ASSISTED_TRAMMING, PSTR("G35"));
#endif #endif

View file

@ -16,7 +16,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View file

@ -63,15 +63,14 @@ void Temperature::lcd_preheat(const int16_t e, const int8_t indh, const int8_t i
#if HAS_TEMP_HOTEND #if HAS_TEMP_HOTEND
inline void _preheat_end(const uint8_t m, const uint8_t e) { thermalManager.lcd_preheat(e, m, -1); } inline void _preheat_end(const uint8_t m, const uint8_t e) { thermalManager.lcd_preheat(e, m, -1); }
#if HAS_HEATED_BED void do_preheat_end_m() { _preheat_end(editable.int8, 0); }
inline void _preheat_both(const uint8_t m, const uint8_t e) { thermalManager.lcd_preheat(e, m, m); }
#endif
#endif #endif
#if HAS_HEATED_BED #if HAS_HEATED_BED
inline void _preheat_bed(const uint8_t m) { thermalManager.lcd_preheat(-1, -1, m); } inline void _preheat_bed(const uint8_t m) { thermalManager.lcd_preheat(-1, -1, m); }
#endif #endif
#if HAS_TEMP_HOTEND && HAS_HEATED_BED #if HAS_TEMP_HOTEND && HAS_HEATED_BED
inline void _preheat_both(const uint8_t m, const uint8_t e) { thermalManager.lcd_preheat(e, m, m); }
// Indexed "Preheat ABC" and "Heat Bed" items // Indexed "Preheat ABC" and "Heat Bed" items
#define PREHEAT_ITEMS(M,E) do{ \ #define PREHEAT_ITEMS(M,E) do{ \
@ -86,10 +85,6 @@ void Temperature::lcd_preheat(const int16_t e, const int8_t indh, const int8_t i
#endif #endif
void do_preheat_end_m() {
_preheat_end(editable.int8, 0);
}
#if HAS_MULTI_HOTEND || HAS_HEATED_BED #if HAS_MULTI_HOTEND || HAS_HEATED_BED
// Set editable.int8 to the Material index before entering this menu // Set editable.int8 to the Material index before entering this menu

Some files were not shown because too many files have changed in this diff Show more