Compare commits
39 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b878127ea0 | ||
|
6ea6556d09 | ||
|
2b37a71eba | ||
|
e3ae76d76d | ||
|
b24508907e | ||
|
ec3daadf43 | ||
|
ae76011e75 | ||
|
34066c1717 | ||
|
19fe3d5e79 | ||
|
ec518e6e7b | ||
|
003ce25acf | ||
|
3e5d867276 | ||
|
b1bcb387fa | ||
|
0fbd8c52bb | ||
|
08895e6cb0 | ||
|
38e775496a | ||
|
47631167f9 | ||
|
185e0dc7b7 | ||
|
bcf6ca59df | ||
|
1ba694cebb | ||
|
906fa05bd6 | ||
|
651f15f833 | ||
|
ef41c1f452 | ||
|
8050813d32 | ||
|
25e7e2fce0 | ||
|
a0f7f0e9e2 | ||
|
f3e0bc7a4b | ||
|
49ff1e837a | ||
|
4f8191b481 | ||
|
927a1a1738 | ||
|
f2f23e8097 | ||
|
cce585f6ca | ||
|
5bfb465ab4 | ||
|
ce7bbafb8f | ||
|
5ffc4bfe3a | ||
|
3ecc99e95d | ||
|
f22c5d3cc6 | ||
|
d8df8e0eed | ||
|
e38958f256 |
@@ -35,7 +35,7 @@
|
||||
*
|
||||
* Advanced settings can be found in Configuration_adv.h
|
||||
*/
|
||||
#define CONFIGURATION_H_VERSION 02000900
|
||||
#define CONFIGURATION_H_VERSION 02000901
|
||||
|
||||
//===========================================================================
|
||||
//============================= Getting Started =============================
|
||||
@@ -1248,7 +1248,8 @@
|
||||
//#define WAIT_FOR_HOTEND // Wait for hotend to heat back up between probes (to improve accuracy & prevent cold extrude)
|
||||
#endif
|
||||
//#define PROBING_FANS_OFF // Turn fans off when probing
|
||||
//#define PROBING_STEPPERS_OFF // Turn steppers off (unless needed to hold position) when probing
|
||||
//#define PROBING_ESTEPPERS_OFF // Turn all extruder steppers off when probing
|
||||
//#define PROBING_STEPPERS_OFF // Turn all steppers off (unless needed to hold position) when probing (including extruders)
|
||||
//#define DELAY_BEFORE_PROBING 200 // (ms) To prevent vibrations from triggering piezo sensors
|
||||
|
||||
// Require minimum nozzle and/or bed temperature for probing
|
||||
|
@@ -30,7 +30,7 @@
|
||||
*
|
||||
* Basic settings can be found in Configuration.h
|
||||
*/
|
||||
#define CONFIGURATION_ADV_H_VERSION 02000900
|
||||
#define CONFIGURATION_ADV_H_VERSION 02000901
|
||||
|
||||
//===========================================================================
|
||||
//============================= Thermal Settings ============================
|
||||
@@ -1594,7 +1594,7 @@
|
||||
*/
|
||||
//#define STATUS_COMBINE_HEATERS // Use combined heater images instead of separate ones
|
||||
//#define STATUS_HOTEND_NUMBERLESS // Use plain hotend icons instead of numbered ones (with 2+ hotends)
|
||||
#define STATUS_HOTEND_INVERTED // Show solid nozzle bitmaps when heating (Requires STATUS_HOTEND_ANIM)
|
||||
#define STATUS_HOTEND_INVERTED // Show solid nozzle bitmaps when heating (Requires STATUS_HOTEND_ANIM for numbered hotends)
|
||||
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
|
||||
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
|
||||
#define STATUS_CHAMBER_ANIM // Use a second bitmap to indicate chamber heating
|
||||
@@ -1988,9 +1988,9 @@
|
||||
// calibration.
|
||||
//#define BTC_PROBE_TEMP 30 // (°C)
|
||||
|
||||
// Height above Z=0.0f to raise the nozzle. Lowering this can help the probe to heat faster.
|
||||
// Note: the Z=0.0f offset is determined by the probe offset which can be set using M851.
|
||||
//#define PTC_PROBE_HEATING_OFFSET 0.5f
|
||||
// Height above Z=0.0 to raise the nozzle. Lowering this can help the probe to heat faster.
|
||||
// Note: the Z=0.0 offset is determined by the probe offset which can be set using M851.
|
||||
//#define PTC_PROBE_HEATING_OFFSET 0.5
|
||||
|
||||
// Height to raise the Z-probe between heating and taking the next measurement. Some probes
|
||||
// may fail to untrigger if they have been triggered for a long time, which can be solved by
|
||||
@@ -2892,7 +2892,7 @@
|
||||
*
|
||||
* It is recommended to set HOMING_BUMP_MM to { 0, 0, 0 }.
|
||||
*
|
||||
* SPI_ENDSTOPS *** Beta feature! *** TMC2130 Only ***
|
||||
* SPI_ENDSTOPS *** Beta feature! *** TMC2130/TMC5160 Only ***
|
||||
* Poll the driver through SPI to determine load when homing.
|
||||
* Removes the need for a wire from DIAG1 to an endstop pin.
|
||||
*
|
||||
|
@@ -28,7 +28,7 @@
|
||||
/**
|
||||
* Marlin release version identifier
|
||||
*/
|
||||
//#define SHORT_BUILD_VERSION "2.0.9"
|
||||
//#define SHORT_BUILD_VERSION "2.0.9.1"
|
||||
|
||||
/**
|
||||
* Verbose version identifier which should contain a reference to the location
|
||||
@@ -41,7 +41,7 @@
|
||||
* here we define this default string as the date where the latest release
|
||||
* version was tagged.
|
||||
*/
|
||||
//#define STRING_DISTRIBUTION_DATE "2021-06-15"
|
||||
//#define STRING_DISTRIBUTION_DATE "2021-06-27"
|
||||
|
||||
/**
|
||||
* Defines a generic printer name to be output to the LCD after booting Marlin.
|
||||
|
@@ -38,8 +38,8 @@
|
||||
#define SPI_CLOCK_MAX SPI_BAUD_PCLK_DIV_2
|
||||
#endif
|
||||
|
||||
#define CS_LOW() WRITE(ONBOARD_SD_CS_PIN, LOW) /* Set OnboardSPI cs low */
|
||||
#define CS_HIGH() WRITE(ONBOARD_SD_CS_PIN, HIGH) /* Set OnboardSPI cs high */
|
||||
#define CS_LOW() WRITE(ONBOARD_SD_CS_PIN, LOW) // Set OnboardSPI cs low
|
||||
#define CS_HIGH() WRITE(ONBOARD_SD_CS_PIN, HIGH) // Set OnboardSPI cs high
|
||||
|
||||
#define FCLK_FAST() ONBOARD_SD_SPI.setClockDivider(SPI_CLOCK_MAX)
|
||||
#define FCLK_SLOW() ONBOARD_SD_SPI.setClockDivider(SPI_BAUD_PCLK_DIV_256)
|
||||
@@ -49,32 +49,32 @@
|
||||
---------------------------------------------------------------------------*/
|
||||
|
||||
/* MMC/SD command */
|
||||
#define CMD0 (0) /* GO_IDLE_STATE */
|
||||
#define CMD1 (1) /* SEND_OP_COND (MMC) */
|
||||
#define ACMD41 (0x80+41) /* SEND_OP_COND (SDC) */
|
||||
#define CMD8 (8) /* SEND_IF_COND */
|
||||
#define CMD9 (9) /* SEND_CSD */
|
||||
#define CMD10 (10) /* SEND_CID */
|
||||
#define CMD12 (12) /* STOP_TRANSMISSION */
|
||||
#define ACMD13 (0x80+13) /* SD_STATUS (SDC) */
|
||||
#define CMD16 (16) /* SET_BLOCKLEN */
|
||||
#define CMD17 (17) /* READ_SINGLE_BLOCK */
|
||||
#define CMD18 (18) /* READ_MULTIPLE_BLOCK */
|
||||
#define CMD23 (23) /* SET_BLOCK_COUNT (MMC) */
|
||||
#define ACMD23 (0x80+23) /* SET_WR_BLK_ERASE_COUNT (SDC) */
|
||||
#define CMD24 (24) /* WRITE_BLOCK */
|
||||
#define CMD25 (25) /* WRITE_MULTIPLE_BLOCK */
|
||||
#define CMD32 (32) /* ERASE_ER_BLK_START */
|
||||
#define CMD33 (33) /* ERASE_ER_BLK_END */
|
||||
#define CMD38 (38) /* ERASE */
|
||||
#define CMD48 (48) /* READ_EXTR_SINGLE */
|
||||
#define CMD49 (49) /* WRITE_EXTR_SINGLE */
|
||||
#define CMD55 (55) /* APP_CMD */
|
||||
#define CMD58 (58) /* READ_OCR */
|
||||
#define CMD0 (0) // GO_IDLE_STATE
|
||||
#define CMD1 (1) // SEND_OP_COND (MMC)
|
||||
#define ACMD41 (0x80+41) // SEND_OP_COND (SDC)
|
||||
#define CMD8 (8) // SEND_IF_COND
|
||||
#define CMD9 (9) // SEND_CSD
|
||||
#define CMD10 (10) // SEND_CID
|
||||
#define CMD12 (12) // STOP_TRANSMISSION
|
||||
#define ACMD13 (0x80+13) // SD_STATUS (SDC)
|
||||
#define CMD16 (16) // SET_BLOCKLEN
|
||||
#define CMD17 (17) // READ_SINGLE_BLOCK
|
||||
#define CMD18 (18) // READ_MULTIPLE_BLOCK
|
||||
#define CMD23 (23) // SET_BLOCK_COUNT (MMC)
|
||||
#define ACMD23 (0x80+23) // SET_WR_BLK_ERASE_COUNT (SDC)
|
||||
#define CMD24 (24) // WRITE_BLOCK
|
||||
#define CMD25 (25) // WRITE_MULTIPLE_BLOCK
|
||||
#define CMD32 (32) // ERASE_ER_BLK_START
|
||||
#define CMD33 (33) // ERASE_ER_BLK_END
|
||||
#define CMD38 (38) // ERASE
|
||||
#define CMD48 (48) // READ_EXTR_SINGLE
|
||||
#define CMD49 (49) // WRITE_EXTR_SINGLE
|
||||
#define CMD55 (55) // APP_CMD
|
||||
#define CMD58 (58) // READ_OCR
|
||||
|
||||
static volatile DSTATUS Stat = STA_NOINIT; /* Physical drive status */
|
||||
static volatile DSTATUS Stat = STA_NOINIT; // Physical drive status
|
||||
static volatile UINT timeout;
|
||||
static BYTE CardType; /* Card type flags */
|
||||
static BYTE CardType; // Card type flags
|
||||
|
||||
/*-----------------------------------------------------------------------*/
|
||||
/* Send/Receive data to the MMC (Platform dependent) */
|
||||
@@ -82,7 +82,7 @@ static BYTE CardType; /* Card type flags */
|
||||
|
||||
/* Exchange a byte */
|
||||
static BYTE xchg_spi (
|
||||
BYTE dat /* Data to send */
|
||||
BYTE dat // Data to send
|
||||
) {
|
||||
BYTE returnByte = ONBOARD_SD_SPI.transfer(dat);
|
||||
return returnByte;
|
||||
@@ -90,18 +90,18 @@ static BYTE xchg_spi (
|
||||
|
||||
/* Receive multiple byte */
|
||||
static void rcvr_spi_multi (
|
||||
BYTE *buff, /* Pointer to data buffer */
|
||||
UINT btr /* Number of bytes to receive (16, 64 or 512) */
|
||||
BYTE *buff, // Pointer to data buffer
|
||||
UINT btr // Number of bytes to receive (16, 64 or 512)
|
||||
) {
|
||||
ONBOARD_SD_SPI.dmaTransfer(0, const_cast<uint8_t*>(buff), btr);
|
||||
}
|
||||
|
||||
#if _DISKIO_WRITE
|
||||
|
||||
/* Send multiple bytes */
|
||||
// Send multiple bytes
|
||||
static void xmit_spi_multi (
|
||||
const BYTE *buff, /* Pointer to the data */
|
||||
UINT btx /* Number of bytes to send (multiple of 16) */
|
||||
const BYTE *buff, // Pointer to the data
|
||||
UINT btx // Number of bytes to send (multiple of 16)
|
||||
) {
|
||||
ONBOARD_SD_SPI.dmaSend(const_cast<uint8_t*>(buff), btx);
|
||||
}
|
||||
@@ -112,16 +112,15 @@ static void rcvr_spi_multi (
|
||||
/* Wait for card ready */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
||||
static int wait_ready ( /* 1:Ready, 0:Timeout */
|
||||
UINT wt /* Timeout [ms] */
|
||||
static int wait_ready ( // 1:Ready, 0:Timeout
|
||||
UINT wt // Timeout [ms]
|
||||
) {
|
||||
BYTE d;
|
||||
|
||||
timeout = millis() + wt;
|
||||
do {
|
||||
d = xchg_spi(0xFF);
|
||||
/* This loop takes a while. Insert rot_rdq() here for multitask environment. */
|
||||
} while (d != 0xFF && (timeout > millis())); /* Wait for card goes ready or timeout */
|
||||
// This loop takes a while. Insert rot_rdq() here for multitask environment.
|
||||
} while (d != 0xFF && (timeout > millis())); // Wait for card goes ready or timeout
|
||||
|
||||
return (d == 0xFF) ? 1 : 0;
|
||||
}
|
||||
@@ -131,21 +130,21 @@ static int wait_ready ( /* 1:Ready, 0:Timeout */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
||||
static void deselect() {
|
||||
CS_HIGH(); /* CS = H */
|
||||
xchg_spi(0xFF); /* Dummy clock (force DO hi-z for multiple slave SPI) */
|
||||
CS_HIGH(); // CS = H
|
||||
xchg_spi(0xFF); // Dummy clock (force DO hi-z for multiple slave SPI)
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------*/
|
||||
/* Select card and wait for ready */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
||||
static int select() { /* 1:OK, 0:Timeout */
|
||||
CS_LOW(); /* CS = L */
|
||||
xchg_spi(0xFF); /* Dummy clock (force DO enabled) */
|
||||
static int select() { // 1:OK, 0:Timeout
|
||||
CS_LOW(); // CS = L
|
||||
xchg_spi(0xFF); // Dummy clock (force DO enabled)
|
||||
|
||||
if (wait_ready(500)) return 1; /* Leading busy check: Wait for card ready */
|
||||
if (wait_ready(500)) return 1; // Leading busy check: Wait for card ready
|
||||
|
||||
deselect(); /* Timeout */
|
||||
deselect(); // Timeout
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -153,16 +152,18 @@ static int select() { /* 1:OK, 0:Timeout */
|
||||
/* Control SPI module (Platform dependent) */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
||||
static void power_on() { /* Enable SSP module and attach it to I/O pads */
|
||||
// Enable SSP module and attach it to I/O pads
|
||||
static void sd_power_on() {
|
||||
ONBOARD_SD_SPI.setModule(ONBOARD_SPI_DEVICE);
|
||||
ONBOARD_SD_SPI.begin();
|
||||
ONBOARD_SD_SPI.setBitOrder(MSBFIRST);
|
||||
ONBOARD_SD_SPI.setDataMode(SPI_MODE0);
|
||||
OUT_WRITE(ONBOARD_SD_CS_PIN, HIGH); /* Set CS# high */
|
||||
OUT_WRITE(ONBOARD_SD_CS_PIN, HIGH); // Set CS# high
|
||||
}
|
||||
|
||||
static void power_off() { /* Disable SPI function */
|
||||
select(); /* Wait for card ready */
|
||||
// Disable SPI function
|
||||
static void sd_power_off() {
|
||||
select(); // Wait for card ready
|
||||
deselect();
|
||||
}
|
||||
|
||||
@@ -170,23 +171,23 @@ static void power_off() { /* Disable SPI function */
|
||||
/* Receive a data packet from the MMC */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
||||
static int rcvr_datablock ( /* 1:OK, 0:Error */
|
||||
BYTE *buff, /* Data buffer */
|
||||
UINT btr /* Data block length (byte) */
|
||||
static int rcvr_datablock ( // 1:OK, 0:Error
|
||||
BYTE *buff, // Data buffer
|
||||
UINT btr // Data block length (byte)
|
||||
) {
|
||||
BYTE token;
|
||||
|
||||
timeout = millis() + 200;
|
||||
do { /* Wait for DataStart token in timeout of 200ms */
|
||||
do { // Wait for DataStart token in timeout of 200ms
|
||||
token = xchg_spi(0xFF);
|
||||
/* This loop will take a while. Insert rot_rdq() here for multitask environment. */
|
||||
// This loop will take a while. Insert rot_rdq() here for multitask environment.
|
||||
} while ((token == 0xFF) && (timeout > millis()));
|
||||
if (token != 0xFE) return 0; /* Function fails if invalid DataStart token or timeout */
|
||||
if (token != 0xFE) return 0; // Function fails if invalid DataStart token or timeout
|
||||
|
||||
rcvr_spi_multi(buff, btr); /* Store trailing data to the buffer */
|
||||
xchg_spi(0xFF); xchg_spi(0xFF); /* Discard CRC */
|
||||
rcvr_spi_multi(buff, btr); // Store trailing data to the buffer
|
||||
xchg_spi(0xFF); xchg_spi(0xFF); // Discard CRC
|
||||
|
||||
return 1; /* Function succeeded */
|
||||
return 1; // Function succeeded
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------*/
|
||||
@@ -195,25 +196,25 @@ static int rcvr_datablock ( /* 1:OK, 0:Error */
|
||||
|
||||
#if _DISKIO_WRITE
|
||||
|
||||
static int xmit_datablock ( /* 1:OK, 0:Failed */
|
||||
const BYTE *buff, /* Ponter to 512 byte data to be sent */
|
||||
BYTE token /* Token */
|
||||
static int xmit_datablock( // 1:OK, 0:Failed
|
||||
const BYTE *buff, // Pointer to 512 byte data to be sent
|
||||
BYTE token // Token
|
||||
) {
|
||||
BYTE resp;
|
||||
|
||||
if (!wait_ready(500)) return 0; /* Leading busy check: Wait for card ready to accept data block */
|
||||
if (!wait_ready(500)) return 0; // Leading busy check: Wait for card ready to accept data block
|
||||
|
||||
xchg_spi(token); /* Send token */
|
||||
if (token == 0xFD) return 1; /* Do not send data if token is StopTran */
|
||||
xchg_spi(token); // Send token
|
||||
if (token == 0xFD) return 1; // Do not send data if token is StopTran
|
||||
|
||||
xmit_spi_multi(buff, 512); /* Data */
|
||||
xchg_spi(0xFF); xchg_spi(0xFF); /* Dummy CRC */
|
||||
xmit_spi_multi(buff, 512); // Data
|
||||
xchg_spi(0xFF); xchg_spi(0xFF); // Dummy CRC
|
||||
|
||||
resp = xchg_spi(0xFF); /* Receive data resp */
|
||||
resp = xchg_spi(0xFF); // Receive data resp
|
||||
|
||||
return (resp & 0x1F) == 0x05 ? 1 : 0; /* Data was accepted or not */
|
||||
return (resp & 0x1F) == 0x05 ? 1 : 0; // Data was accepted or not
|
||||
|
||||
/* Busy check is done at next transmission */
|
||||
// Busy check is done at next transmission
|
||||
}
|
||||
|
||||
#endif // _DISKIO_WRITE
|
||||
@@ -222,43 +223,43 @@ static int rcvr_datablock ( /* 1:OK, 0:Error */
|
||||
/* Send a command packet to the MMC */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
||||
static BYTE send_cmd ( /* Return value: R1 resp (bit7==1:Failed to send) */
|
||||
BYTE cmd, /* Command index */
|
||||
DWORD arg /* Argument */
|
||||
static BYTE send_cmd( // Return value: R1 resp (bit7==1:Failed to send)
|
||||
BYTE cmd, // Command index
|
||||
DWORD arg // Argument
|
||||
) {
|
||||
BYTE n, res;
|
||||
|
||||
if (cmd & 0x80) { /* Send a CMD55 prior to ACMD<n> */
|
||||
if (cmd & 0x80) { // Send a CMD55 prior to ACMD<n>
|
||||
cmd &= 0x7F;
|
||||
res = send_cmd(CMD55, 0);
|
||||
if (res > 1) return res;
|
||||
}
|
||||
|
||||
/* Select the card and wait for ready except to stop multiple block read */
|
||||
// Select the card and wait for ready except to stop multiple block read
|
||||
if (cmd != CMD12) {
|
||||
deselect();
|
||||
if (!select()) return 0xFF;
|
||||
}
|
||||
|
||||
/* Send command packet */
|
||||
xchg_spi(0x40 | cmd); /* Start + command index */
|
||||
xchg_spi((BYTE)(arg >> 24)); /* Argument[31..24] */
|
||||
xchg_spi((BYTE)(arg >> 16)); /* Argument[23..16] */
|
||||
xchg_spi((BYTE)(arg >> 8)); /* Argument[15..8] */
|
||||
xchg_spi((BYTE)arg); /* Argument[7..0] */
|
||||
n = 0x01; /* Dummy CRC + Stop */
|
||||
if (cmd == CMD0) n = 0x95; /* Valid CRC for CMD0(0) */
|
||||
if (cmd == CMD8) n = 0x87; /* Valid CRC for CMD8(0x1AA) */
|
||||
// Send command packet
|
||||
xchg_spi(0x40 | cmd); // Start + command index
|
||||
xchg_spi((BYTE)(arg >> 24)); // Argument[31..24]
|
||||
xchg_spi((BYTE)(arg >> 16)); // Argument[23..16]
|
||||
xchg_spi((BYTE)(arg >> 8)); // Argument[15..8]
|
||||
xchg_spi((BYTE)arg); // Argument[7..0]
|
||||
n = 0x01; // Dummy CRC + Stop
|
||||
if (cmd == CMD0) n = 0x95; // Valid CRC for CMD0(0)
|
||||
if (cmd == CMD8) n = 0x87; // Valid CRC for CMD8(0x1AA)
|
||||
xchg_spi(n);
|
||||
|
||||
/* Receive command resp */
|
||||
if (cmd == CMD12) xchg_spi(0xFF); /* Diacard following one byte when CMD12 */
|
||||
n = 10; /* Wait for response (10 bytes max) */
|
||||
// Receive command response
|
||||
if (cmd == CMD12) xchg_spi(0xFF); // Discard the following byte when CMD12
|
||||
n = 10; // Wait for response (10 bytes max)
|
||||
do
|
||||
res = xchg_spi(0xFF);
|
||||
while ((res & 0x80) && --n);
|
||||
|
||||
return res; /* Return received response */
|
||||
return res; // Return received response
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
@@ -270,49 +271,52 @@ static BYTE send_cmd ( /* Return value: R1 resp (bit7==1:Failed to send) */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
||||
DSTATUS disk_initialize (
|
||||
BYTE drv /* Physical drive number (0) */
|
||||
BYTE drv // Physical drive number (0)
|
||||
) {
|
||||
BYTE n, cmd, ty, ocr[4];
|
||||
|
||||
if (drv) return STA_NOINIT; /* Supports only drive 0 */
|
||||
power_on(); /* Initialize SPI */
|
||||
if (drv) return STA_NOINIT; // Supports only drive 0
|
||||
sd_power_on(); // Initialize SPI
|
||||
|
||||
if (Stat & STA_NODISK) return Stat; /* Is a card existing in the soket? */
|
||||
if (Stat & STA_NODISK) return Stat; // Is a card existing in the soket?
|
||||
|
||||
FCLK_SLOW();
|
||||
for (n = 10; n; n--) xchg_spi(0xFF); /* Send 80 dummy clocks */
|
||||
for (n = 10; n; n--) xchg_spi(0xFF); // Send 80 dummy clocks
|
||||
|
||||
ty = 0;
|
||||
if (send_cmd(CMD0, 0) == 1) { /* Put the card SPI state */
|
||||
timeout = millis() + 1000; /* Initialization timeout = 1 sec */
|
||||
if (send_cmd(CMD8, 0x1AA) == 1) { /* Is the catd SDv2? */
|
||||
for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF); /* Get 32 bit return value of R7 resp */
|
||||
if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* Does the card support 2.7-3.6V? */
|
||||
while ((timeout > millis()) && send_cmd(ACMD41, 1UL << 30)) ; /* Wait for end of initialization with ACMD41(HCS) */
|
||||
if ((timeout > millis()) && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */
|
||||
if (send_cmd(CMD0, 0) == 1) { // Put the card SPI state
|
||||
timeout = millis() + 1000; // Initialization timeout = 1 sec
|
||||
if (send_cmd(CMD8, 0x1AA) == 1) { // Is the catd SDv2?
|
||||
for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF); // Get 32 bit return value of R7 resp
|
||||
if (ocr[2] == 0x01 && ocr[3] == 0xAA) { // Does the card support 2.7-3.6V?
|
||||
while ((timeout > millis()) && send_cmd(ACMD41, 1UL << 30)); // Wait for end of initialization with ACMD41(HCS)
|
||||
if ((timeout > millis()) && send_cmd(CMD58, 0) == 0) { // Check CCS bit in the OCR
|
||||
for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF);
|
||||
ty = (ocr[0] & 0x40) ? CT_SD2 | CT_BLOCK : CT_SD2; /* Check if the card is SDv2 */
|
||||
ty = (ocr[0] & 0x40) ? CT_SD2 | CT_BLOCK : CT_SD2; // Check if the card is SDv2
|
||||
}
|
||||
}
|
||||
} else { /* Not an SDv2 card */
|
||||
if (send_cmd(ACMD41, 0) <= 1) { /* SDv1 or MMCv3? */
|
||||
ty = CT_SD1; cmd = ACMD41; /* SDv1 (ACMD41(0)) */
|
||||
} else {
|
||||
ty = CT_MMC; cmd = CMD1; /* MMCv3 (CMD1(0)) */
|
||||
}
|
||||
while ((timeout > millis()) && send_cmd(cmd, 0)) ; /* Wait for the card leaves idle state */
|
||||
if (!(timeout > millis()) || send_cmd(CMD16, 512) != 0) /* Set block length: 512 */
|
||||
else { // Not an SDv2 card
|
||||
if (send_cmd(ACMD41, 0) <= 1) { // SDv1 or MMCv3?
|
||||
ty = CT_SD1; cmd = ACMD41; // SDv1 (ACMD41(0))
|
||||
}
|
||||
else {
|
||||
ty = CT_MMC; cmd = CMD1; // MMCv3 (CMD1(0))
|
||||
}
|
||||
while ((timeout > millis()) && send_cmd(cmd, 0)); // Wait for the card leaves idle state
|
||||
if (!(timeout > millis()) || send_cmd(CMD16, 512) != 0) // Set block length: 512
|
||||
ty = 0;
|
||||
}
|
||||
}
|
||||
CardType = ty; /* Card type */
|
||||
CardType = ty; // Card type
|
||||
deselect();
|
||||
|
||||
if (ty) { /* OK */
|
||||
FCLK_FAST(); /* Set fast clock */
|
||||
Stat &= ~STA_NOINIT; /* Clear STA_NOINIT flag */
|
||||
} else { /* Failed */
|
||||
power_off();
|
||||
if (ty) { // OK
|
||||
FCLK_FAST(); // Set fast clock
|
||||
Stat &= ~STA_NOINIT; // Clear STA_NOINIT flag
|
||||
}
|
||||
else { // Failed
|
||||
sd_power_off();
|
||||
Stat = STA_NOINIT;
|
||||
}
|
||||
|
||||
@@ -324,10 +328,10 @@ DSTATUS disk_initialize (
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
||||
DSTATUS disk_status (
|
||||
BYTE drv /* Physical drive number (0) */
|
||||
BYTE drv // Physical drive number (0)
|
||||
) {
|
||||
if (drv) return STA_NOINIT; /* Supports only drive 0 */
|
||||
return Stat; /* Return disk status */
|
||||
if (drv) return STA_NOINIT; // Supports only drive 0
|
||||
return Stat; // Return disk status
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------*/
|
||||
@@ -335,28 +339,28 @@ DSTATUS disk_status (
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
||||
DRESULT disk_read (
|
||||
BYTE drv, /* Physical drive number (0) */
|
||||
BYTE *buff, /* Pointer to the data buffer to store read data */
|
||||
DWORD sector, /* Start sector number (LBA) */
|
||||
UINT count /* Number of sectors to read (1..128) */
|
||||
BYTE drv, // Physical drive number (0)
|
||||
BYTE *buff, // Pointer to the data buffer to store read data
|
||||
DWORD sector, // Start sector number (LBA)
|
||||
UINT count // Number of sectors to read (1..128)
|
||||
) {
|
||||
BYTE cmd;
|
||||
|
||||
if (drv || !count) return RES_PARERR; /* Check parameter */
|
||||
if (Stat & STA_NOINIT) return RES_NOTRDY; /* Check if drive is ready */
|
||||
if (!(CardType & CT_BLOCK)) sector *= 512; /* LBA ot BA conversion (byte addressing cards) */
|
||||
if (drv || !count) return RES_PARERR; // Check parameter
|
||||
if (Stat & STA_NOINIT) return RES_NOTRDY; // Check if drive is ready
|
||||
if (!(CardType & CT_BLOCK)) sector *= 512; // LBA ot BA conversion (byte addressing cards)
|
||||
FCLK_FAST();
|
||||
cmd = count > 1 ? CMD18 : CMD17; /* READ_MULTIPLE_BLOCK : READ_SINGLE_BLOCK */
|
||||
cmd = count > 1 ? CMD18 : CMD17; // READ_MULTIPLE_BLOCK : READ_SINGLE_BLOCK
|
||||
if (send_cmd(cmd, sector) == 0) {
|
||||
do {
|
||||
if (!rcvr_datablock(buff, 512)) break;
|
||||
buff += 512;
|
||||
} while (--count);
|
||||
if (cmd == CMD18) send_cmd(CMD12, 0); /* STOP_TRANSMISSION */
|
||||
if (cmd == CMD18) send_cmd(CMD12, 0); // STOP_TRANSMISSION
|
||||
}
|
||||
deselect();
|
||||
|
||||
return count ? RES_ERROR : RES_OK; /* Return result */
|
||||
return count ? RES_ERROR : RES_OK; // Return result
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------*/
|
||||
@@ -366,36 +370,36 @@ DRESULT disk_read (
|
||||
#if _DISKIO_WRITE
|
||||
|
||||
DRESULT disk_write(
|
||||
BYTE drv, /* Physical drive number (0) */
|
||||
const BYTE *buff, /* Ponter to the data to write */
|
||||
DWORD sector, /* Start sector number (LBA) */
|
||||
UINT count /* Number of sectors to write (1..128) */
|
||||
BYTE drv, // Physical drive number (0)
|
||||
const BYTE *buff, // Pointer to the data to write
|
||||
DWORD sector, // Start sector number (LBA)
|
||||
UINT count // Number of sectors to write (1..128)
|
||||
) {
|
||||
if (drv || !count) return RES_PARERR; /* Check parameter */
|
||||
if (Stat & STA_NOINIT) return RES_NOTRDY; /* Check drive status */
|
||||
if (Stat & STA_PROTECT) return RES_WRPRT; /* Check write protect */
|
||||
if (drv || !count) return RES_PARERR; // Check parameter
|
||||
if (Stat & STA_NOINIT) return RES_NOTRDY; // Check drive status
|
||||
if (Stat & STA_PROTECT) return RES_WRPRT; // Check write protect
|
||||
FCLK_FAST();
|
||||
if (!(CardType & CT_BLOCK)) sector *= 512; /* LBA ==> BA conversion (byte addressing cards) */
|
||||
if (!(CardType & CT_BLOCK)) sector *= 512; // LBA ==> BA conversion (byte addressing cards)
|
||||
|
||||
if (count == 1) { /* Single sector write */
|
||||
if ((send_cmd(CMD24, sector) == 0) /* WRITE_BLOCK */
|
||||
if (count == 1) { // Single sector write
|
||||
if ((send_cmd(CMD24, sector) == 0) // WRITE_BLOCK
|
||||
&& xmit_datablock(buff, 0xFE)) {
|
||||
count = 0;
|
||||
}
|
||||
}
|
||||
else { /* Multiple sector write */
|
||||
if (CardType & CT_SDC) send_cmd(ACMD23, count); /* Predefine number of sectors */
|
||||
if (send_cmd(CMD25, sector) == 0) { /* WRITE_MULTIPLE_BLOCK */
|
||||
else { // Multiple sector write
|
||||
if (CardType & CT_SDC) send_cmd(ACMD23, count); // Predefine number of sectors
|
||||
if (send_cmd(CMD25, sector) == 0) { // WRITE_MULTIPLE_BLOCK
|
||||
do {
|
||||
if (!xmit_datablock(buff, 0xFC)) break;
|
||||
buff += 512;
|
||||
} while (--count);
|
||||
if (!xmit_datablock(0, 0xFD)) count = 1; /* STOP_TRAN token */
|
||||
if (!xmit_datablock(0, 0xFD)) count = 1; // STOP_TRAN token
|
||||
}
|
||||
}
|
||||
deselect();
|
||||
|
||||
return count ? RES_ERROR : RES_OK; /* Return result */
|
||||
return count ? RES_ERROR : RES_OK; // Return result
|
||||
}
|
||||
|
||||
#endif // _DISKIO_WRITE
|
||||
@@ -407,9 +411,9 @@ DRESULT disk_read (
|
||||
#if _DISKIO_IOCTL
|
||||
|
||||
DRESULT disk_ioctl (
|
||||
BYTE drv, /* Physical drive number (0) */
|
||||
BYTE cmd, /* Control command code */
|
||||
void *buff /* Pointer to the conrtol data */
|
||||
BYTE drv, // Physical drive number (0)
|
||||
BYTE cmd, // Control command code
|
||||
void *buff // Pointer to the conrtol data
|
||||
) {
|
||||
DRESULT res;
|
||||
BYTE n, csd[16], *ptr = (BYTE *)buff;
|
||||
@@ -420,22 +424,23 @@ DRESULT disk_read (
|
||||
UINT dc;
|
||||
#endif
|
||||
|
||||
if (drv) return RES_PARERR; /* Check parameter */
|
||||
if (Stat & STA_NOINIT) return RES_NOTRDY; /* Check if drive is ready */
|
||||
if (drv) return RES_PARERR; // Check parameter
|
||||
if (Stat & STA_NOINIT) return RES_NOTRDY; // Check if drive is ready
|
||||
|
||||
res = RES_ERROR;
|
||||
FCLK_FAST();
|
||||
switch (cmd) {
|
||||
case CTRL_SYNC: /* Wait for end of internal write process of the drive */
|
||||
case CTRL_SYNC: // Wait for end of internal write process of the drive
|
||||
if (select()) res = RES_OK;
|
||||
break;
|
||||
|
||||
case GET_SECTOR_COUNT: /* Get drive capacity in unit of sector (DWORD) */
|
||||
case GET_SECTOR_COUNT: // Get drive capacity in unit of sector (DWORD)
|
||||
if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) {
|
||||
if ((csd[0] >> 6) == 1) { /* SDC ver 2.00 */
|
||||
if ((csd[0] >> 6) == 1) { // SDC ver 2.00
|
||||
csize = csd[9] + ((WORD)csd[8] << 8) + ((DWORD)(csd[7] & 63) << 16) + 1;
|
||||
*(DWORD*)buff = csize << 10;
|
||||
} else { /* SDC ver 1.XX or MMC ver 3 */
|
||||
}
|
||||
else { // SDC ver 1.XX or MMC ver 3
|
||||
n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2;
|
||||
csize = (csd[8] >> 6) + ((WORD)csd[7] << 2) + ((WORD)(csd[6] & 3) << 10) + 1;
|
||||
*(DWORD*)buff = csize << (n - 9);
|
||||
@@ -444,21 +449,23 @@ DRESULT disk_read (
|
||||
}
|
||||
break;
|
||||
|
||||
case GET_BLOCK_SIZE: /* Get erase block size in unit of sector (DWORD) */
|
||||
if (CardType & CT_SD2) { /* SDC ver 2.00 */
|
||||
if (send_cmd(ACMD13, 0) == 0) { /* Read SD status */
|
||||
case GET_BLOCK_SIZE: // Get erase block size in unit of sector (DWORD)
|
||||
if (CardType & CT_SD2) { // SDC ver 2.00
|
||||
if (send_cmd(ACMD13, 0) == 0) { // Read SD status
|
||||
xchg_spi(0xFF);
|
||||
if (rcvr_datablock(csd, 16)) { /* Read partial block */
|
||||
for (n = 64 - 16; n; n--) xchg_spi(0xFF); /* Purge trailing data */
|
||||
if (rcvr_datablock(csd, 16)) { // Read partial block
|
||||
for (n = 64 - 16; n; n--) xchg_spi(0xFF); // Purge trailing data
|
||||
*(DWORD*)buff = 16UL << (csd[10] >> 4);
|
||||
res = RES_OK;
|
||||
}
|
||||
}
|
||||
} else { /* SDC ver 1.XX or MMC */
|
||||
if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) { /* Read CSD */
|
||||
if (CardType & CT_SD1) { /* SDC ver 1.XX */
|
||||
}
|
||||
else { // SDC ver 1.XX or MMC
|
||||
if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) { // Read CSD
|
||||
if (CardType & CT_SD1) { // SDC ver 1.XX
|
||||
*(DWORD*)buff = (((csd[10] & 63) << 1) + ((WORD)(csd[11] & 128) >> 7) + 1) << ((csd[13] >> 6) - 1);
|
||||
} else { /* MMC */
|
||||
}
|
||||
else { // MMC
|
||||
*(DWORD*)buff = ((WORD)((csd[10] & 124) >> 2) + 1) * (((csd[11] & 3) << 3) + ((csd[11] & 224) >> 5) + 1);
|
||||
}
|
||||
res = RES_OK;
|
||||
@@ -466,47 +473,47 @@ DRESULT disk_read (
|
||||
}
|
||||
break;
|
||||
|
||||
case CTRL_TRIM: /* Erase a block of sectors (used when _USE_TRIM in ffconf.h is 1) */
|
||||
if (!(CardType & CT_SDC)) break; /* Check if the card is SDC */
|
||||
if (disk_ioctl(drv, MMC_GET_CSD, csd)) break; /* Get CSD */
|
||||
if (!(csd[0] >> 6) && !(csd[10] & 0x40)) break; /* Check if sector erase can be applied to the card */
|
||||
dp = (DWORD *)buff; st = dp[0]; ed = dp[1]; /* Load sector block */
|
||||
case CTRL_TRIM: // Erase a block of sectors (used when _USE_TRIM in ffconf.h is 1)
|
||||
if (!(CardType & CT_SDC)) break; // Check if the card is SDC
|
||||
if (disk_ioctl(drv, MMC_GET_CSD, csd)) break; // Get CSD
|
||||
if (!(csd[0] >> 6) && !(csd[10] & 0x40)) break; // Check if sector erase can be applied to the card
|
||||
dp = (DWORD *)buff; st = dp[0]; ed = dp[1]; // Load sector block
|
||||
if (!(CardType & CT_BLOCK)) {
|
||||
st *= 512; ed *= 512;
|
||||
}
|
||||
if (send_cmd(CMD32, st) == 0 && send_cmd(CMD33, ed) == 0 && send_cmd(CMD38, 0) == 0 && wait_ready(30000)) { /* Erase sector block */
|
||||
res = RES_OK; /* FatFs does not check result of this command */
|
||||
if (send_cmd(CMD32, st) == 0 && send_cmd(CMD33, ed) == 0 && send_cmd(CMD38, 0) == 0 && wait_ready(30000)) { // Erase sector block
|
||||
res = RES_OK; // FatFs does not check result of this command
|
||||
}
|
||||
break;
|
||||
|
||||
/* Following commands are never used by FatFs module */
|
||||
// The following commands are never used by FatFs module
|
||||
|
||||
case MMC_GET_TYPE: /* Get MMC/SDC type (BYTE) */
|
||||
case MMC_GET_TYPE: // Get MMC/SDC type (BYTE)
|
||||
*ptr = CardType;
|
||||
res = RES_OK;
|
||||
break;
|
||||
|
||||
case MMC_GET_CSD: /* Read CSD (16 bytes) */
|
||||
if (send_cmd(CMD9, 0) == 0 && rcvr_datablock(ptr, 16)) { /* READ_CSD */
|
||||
case MMC_GET_CSD: // Read CSD (16 bytes)
|
||||
if (send_cmd(CMD9, 0) == 0 && rcvr_datablock(ptr, 16)) {
|
||||
res = RES_OK;
|
||||
}
|
||||
break;
|
||||
|
||||
case MMC_GET_CID: /* Read CID (16 bytes) */
|
||||
if (send_cmd(CMD10, 0) == 0 && rcvr_datablock(ptr, 16)) { /* READ_CID */
|
||||
case MMC_GET_CID: // Read CID (16 bytes)
|
||||
if (send_cmd(CMD10, 0) == 0 && rcvr_datablock(ptr, 16)) {
|
||||
res = RES_OK;
|
||||
}
|
||||
break;
|
||||
|
||||
case MMC_GET_OCR: /* Read OCR (4 bytes) */
|
||||
if (send_cmd(CMD58, 0) == 0) { /* READ_OCR */
|
||||
case MMC_GET_OCR: // Read OCR (4 bytes)
|
||||
if (send_cmd(CMD58, 0) == 0) {
|
||||
for (n = 4; n; n--) *ptr++ = xchg_spi(0xFF);
|
||||
res = RES_OK;
|
||||
}
|
||||
break;
|
||||
|
||||
case MMC_GET_SDSTAT: /* Read SD status (64 bytes) */
|
||||
if (send_cmd(ACMD13, 0) == 0) { /* SD_STATUS */
|
||||
case MMC_GET_SDSTAT: // Read SD status (64 bytes)
|
||||
if (send_cmd(ACMD13, 0) == 0) {
|
||||
xchg_spi(0xFF);
|
||||
if (rcvr_datablock(ptr, 64)) res = RES_OK;
|
||||
}
|
||||
|
@@ -282,19 +282,22 @@ bool wait_for_heatup = true;
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wnarrowing"
|
||||
|
||||
#ifdef RUNTIME_ONLY_ANALOG_TO_DIGITAL
|
||||
static const pin_t sensitive_pins[] PROGMEM = { SENSITIVE_PINS };
|
||||
#else
|
||||
#ifndef RUNTIME_ONLY_ANALOG_TO_DIGITAL
|
||||
template <pin_t ...D>
|
||||
constexpr pin_t OnlyPins<-2, D...>::table[sizeof...(D)];
|
||||
#define sensitive_pins OnlyPins<SENSITIVE_PINS>::table
|
||||
constexpr pin_t OnlyPins<_SP_END, D...>::table[sizeof...(D)];
|
||||
#endif
|
||||
|
||||
bool pin_is_protected(const pin_t pin) {
|
||||
LOOP_L_N(i, COUNT(sensitive_pins)) {
|
||||
pin_t sensitive_pin;
|
||||
memcpy_P(&sensitive_pin, &sensitive_pins[i], sizeof(pin_t));
|
||||
if (pin == sensitive_pin) return true;
|
||||
#ifdef RUNTIME_ONLY_ANALOG_TO_DIGITAL
|
||||
static const pin_t sensitive_pins[] PROGMEM = { SENSITIVE_PINS };
|
||||
const size_t pincount = COUNT(sensitive_pins);
|
||||
#else
|
||||
static constexpr size_t pincount = OnlyPins<SENSITIVE_PINS>::size;
|
||||
static const pin_t (&sensitive_pins)[pincount] PROGMEM = OnlyPins<SENSITIVE_PINS>::table;
|
||||
#endif
|
||||
LOOP_L_N(i, pincount) {
|
||||
const pin_t * const pptr = &sensitive_pins[i];
|
||||
if (pin == (sizeof(pin_t) == 2 ? (pin_t)pgm_read_word(pptr) : (pin_t)pgm_read_byte(pptr))) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@@ -83,7 +83,7 @@ enum AxisEnum : uint8_t {
|
||||
#undef _EN_ITEM
|
||||
|
||||
// Core also keeps toolhead directions
|
||||
#if IS_CORE
|
||||
#if EITHER(IS_CORE, MARKFORGED_XY)
|
||||
, X_HEAD, Y_HEAD, Z_HEAD
|
||||
#endif
|
||||
|
||||
|
@@ -86,9 +86,15 @@ void StepperDAC::print_values() {
|
||||
SERIAL_ECHO_MSG("Stepper current values in % (Amps):");
|
||||
SERIAL_ECHO_START();
|
||||
SERIAL_ECHOPAIR_P(SP_X_LBL, dac_perc(X_AXIS), PSTR(" ("), dac_amps(X_AXIS), PSTR(")"));
|
||||
#if HAS_Y_AXIS
|
||||
SERIAL_ECHOPAIR_P(SP_Y_LBL, dac_perc(Y_AXIS), PSTR(" ("), dac_amps(Y_AXIS), PSTR(")"));
|
||||
#endif
|
||||
#if HAS_Z_AXIS
|
||||
SERIAL_ECHOPAIR_P(SP_Z_LBL, dac_perc(Z_AXIS), PSTR(" ("), dac_amps(Z_AXIS), PSTR(")"));
|
||||
#endif
|
||||
#if HAS_EXTRUDERS
|
||||
SERIAL_ECHOLNPAIR_P(SP_E_LBL, dac_perc(E_AXIS), PSTR(" ("), dac_amps(E_AXIS), PSTR(")"));
|
||||
#endif
|
||||
}
|
||||
|
||||
void StepperDAC::commit_eeprom() {
|
||||
|
@@ -114,7 +114,6 @@ public:
|
||||
#if CONJOINED_NEOPIXEL
|
||||
adaneo2.show();
|
||||
#else
|
||||
IF_DISABLED(NEOPIXEL2_SEPARATE, adaneo1.setPin(NEOPIXEL2_PIN));
|
||||
adaneo1.show();
|
||||
adaneo1.setPin(NEOPIXEL_PIN);
|
||||
#endif
|
||||
|
@@ -81,7 +81,10 @@ bool Power::is_power_needed() {
|
||||
#endif
|
||||
) return true;
|
||||
|
||||
#if HAS_HOTEND
|
||||
HOTEND_LOOP() if (thermalManager.degTargetHotend(e) > 0 || thermalManager.temp_hotend[e].soft_pwm_amount > 0) return true;
|
||||
#endif
|
||||
|
||||
if (TERN0(HAS_HEATED_BED, thermalManager.degTargetBed() > 0 || thermalManager.temp_bed.soft_pwm_amount > 0)) return true;
|
||||
|
||||
#if HAS_HOTEND && AUTO_POWER_E_TEMP
|
||||
@@ -105,12 +108,12 @@ bool Power::is_power_needed() {
|
||||
|
||||
void Power::check() {
|
||||
static millis_t nextPowerCheck = 0;
|
||||
millis_t ms = millis();
|
||||
if (ELAPSED(ms, nextPowerCheck)) {
|
||||
nextPowerCheck = ms + 2500UL;
|
||||
millis_t now = millis();
|
||||
if (ELAPSED(now, nextPowerCheck)) {
|
||||
nextPowerCheck = now + 2500UL;
|
||||
if (is_power_needed())
|
||||
power_on();
|
||||
else if (!lastPowerOn || (POWER_TIMEOUT > 0 && ELAPSED(ms, lastPowerOn + SEC_TO_MS(POWER_TIMEOUT))))
|
||||
else if (!lastPowerOn || (POWER_TIMEOUT > 0 && ELAPSED(now, lastPowerOn + SEC_TO_MS(POWER_TIMEOUT))))
|
||||
power_off();
|
||||
}
|
||||
}
|
||||
|
@@ -361,10 +361,10 @@ void test_tmc_connection(LOGICAL_AXIS_DECL(const bool, true));
|
||||
extern millis_t sg_guard_period;
|
||||
constexpr uint16_t default_sg_guard_duration = 400;
|
||||
|
||||
struct slow_homing_t {
|
||||
struct motion_state_t {
|
||||
xy_ulong_t acceleration;
|
||||
#if ENABLED(HAS_CLASSIC_JERK)
|
||||
xy_float_t jerk_xy;
|
||||
xy_float_t jerk_state;
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
@@ -164,24 +164,24 @@
|
||||
|
||||
#if ENABLED(IMPROVE_HOMING_RELIABILITY)
|
||||
|
||||
slow_homing_t begin_slow_homing() {
|
||||
slow_homing_t slow_homing{0};
|
||||
slow_homing.acceleration.set(planner.settings.max_acceleration_mm_per_s2[X_AXIS],
|
||||
motion_state_t begin_slow_homing() {
|
||||
motion_state_t motion_state{0};
|
||||
motion_state.acceleration.set(planner.settings.max_acceleration_mm_per_s2[X_AXIS],
|
||||
planner.settings.max_acceleration_mm_per_s2[Y_AXIS]);
|
||||
planner.settings.max_acceleration_mm_per_s2[X_AXIS] = 100;
|
||||
planner.settings.max_acceleration_mm_per_s2[Y_AXIS] = 100;
|
||||
#if HAS_CLASSIC_JERK
|
||||
slow_homing.jerk_xy = planner.max_jerk;
|
||||
motion_state.jerk_state = planner.max_jerk;
|
||||
planner.max_jerk.set(0, 0);
|
||||
#endif
|
||||
planner.reset_acceleration_rates();
|
||||
return slow_homing;
|
||||
return motion_state;
|
||||
}
|
||||
|
||||
void end_slow_homing(const slow_homing_t &slow_homing) {
|
||||
planner.settings.max_acceleration_mm_per_s2[X_AXIS] = slow_homing.acceleration.x;
|
||||
planner.settings.max_acceleration_mm_per_s2[Y_AXIS] = slow_homing.acceleration.y;
|
||||
TERN_(HAS_CLASSIC_JERK, planner.max_jerk = slow_homing.jerk_xy);
|
||||
void end_slow_homing(const motion_state_t &motion_state) {
|
||||
planner.settings.max_acceleration_mm_per_s2[X_AXIS] = motion_state.acceleration.x;
|
||||
planner.settings.max_acceleration_mm_per_s2[Y_AXIS] = motion_state.acceleration.y;
|
||||
TERN_(HAS_CLASSIC_JERK, planner.max_jerk = motion_state.jerk_state);
|
||||
planner.reset_acceleration_rates();
|
||||
}
|
||||
|
||||
@@ -195,9 +195,9 @@
|
||||
* None Home to all axes with no parameters.
|
||||
* With QUICK_HOME enabled XY will home together, then Z.
|
||||
*
|
||||
* O Home only if position is unknown
|
||||
*
|
||||
* Rn Raise by n mm/inches before homing
|
||||
* L<bool> Force leveling state ON (if possible) or OFF after homing (Requires RESTORE_LEVELING_AFTER_G28 or ENABLE_LEVELING_AFTER_G28)
|
||||
* O Home only if the position is not known and trusted
|
||||
* R<linear> Raise by n mm/inches before homing
|
||||
*
|
||||
* Cartesian/SCARA parameters
|
||||
*
|
||||
@@ -229,7 +229,7 @@ void GcodeSuite::G28() {
|
||||
#endif
|
||||
|
||||
// Home (O)nly if position is unknown
|
||||
if (!axes_should_home() && parser.boolval('O')) {
|
||||
if (!axes_should_home() && parser.seen_test('O')) {
|
||||
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> homing not needed, skip");
|
||||
return;
|
||||
}
|
||||
@@ -289,7 +289,9 @@ void GcodeSuite::G28() {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
TERN_(IMPROVE_HOMING_RELIABILITY, slow_homing_t slow_homing = begin_slow_homing());
|
||||
#if ENABLED(IMPROVE_HOMING_RELIABILITY)
|
||||
motion_state_t saved_motion_state = begin_slow_homing();
|
||||
#endif
|
||||
|
||||
// Always home with tool 0 active
|
||||
#if HAS_MULTI_HOTEND
|
||||
@@ -315,7 +317,7 @@ void GcodeSuite::G28() {
|
||||
|
||||
home_delta();
|
||||
|
||||
TERN_(IMPROVE_HOMING_RELIABILITY, end_slow_homing(slow_homing));
|
||||
TERN_(IMPROVE_HOMING_RELIABILITY, end_slow_homing(saved_motion_state));
|
||||
|
||||
#elif ENABLED(AXEL_TPARA)
|
||||
|
||||
@@ -401,7 +403,7 @@ void GcodeSuite::G28() {
|
||||
if (DISABLED(HOME_Y_BEFORE_X) && doY)
|
||||
homeaxis(Y_AXIS);
|
||||
|
||||
TERN_(IMPROVE_HOMING_RELIABILITY, end_slow_homing(slow_homing));
|
||||
TERN_(IMPROVE_HOMING_RELIABILITY, end_slow_homing(saved_motion_state));
|
||||
|
||||
// Home Z last if homing towards the bed
|
||||
#if HAS_Z_AXIS && DISABLED(HOME_Z_FIRST)
|
||||
@@ -440,7 +442,7 @@ void GcodeSuite::G28() {
|
||||
|
||||
if (idex_is_duplicating()) {
|
||||
|
||||
TERN_(IMPROVE_HOMING_RELIABILITY, slow_homing = begin_slow_homing());
|
||||
TERN_(IMPROVE_HOMING_RELIABILITY, saved_motion_state = begin_slow_homing());
|
||||
|
||||
// Always home the 2nd (right) extruder first
|
||||
active_extruder = 1;
|
||||
@@ -459,7 +461,7 @@ void GcodeSuite::G28() {
|
||||
dual_x_carriage_mode = IDEX_saved_mode;
|
||||
set_duplication_enabled(IDEX_saved_duplication_state);
|
||||
|
||||
TERN_(IMPROVE_HOMING_RELIABILITY, end_slow_homing(slow_homing));
|
||||
TERN_(IMPROVE_HOMING_RELIABILITY, end_slow_homing(saved_motion_state));
|
||||
}
|
||||
|
||||
#endif // DUAL_X_CARRIAGE
|
||||
|
@@ -71,29 +71,27 @@
|
||||
#endif
|
||||
#if ENABLED(Z_MULTI_ENDSTOPS)
|
||||
if (parser.seenval('Z')) {
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 3
|
||||
const float z_adj = parser.value_linear_units();
|
||||
const int ind = parser.intval('S');
|
||||
if (!ind || ind == 2) endstops.z2_endstop_adj = z_adj;
|
||||
if (!ind || ind == 3) endstops.z3_endstop_adj = z_adj;
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 4
|
||||
if (!ind || ind == 4) endstops.z4_endstop_adj = z_adj;
|
||||
#endif
|
||||
#if NUM_Z_STEPPER_DRIVERS == 2
|
||||
endstops.z2_endstop_adj = z_adj;
|
||||
#else
|
||||
endstops.z2_endstop_adj = parser.value_linear_units();
|
||||
const int ind = parser.intval('S');
|
||||
#define _SET_ZADJ(N) if (!ind || ind == N) endstops.z##N##_endstop_adj = z_adj;
|
||||
REPEAT_S(2, INCREMENT(NUM_Z_STEPPER_DRIVERS), _SET_ZADJ)
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
if (!parser.seen("XYZ")) {
|
||||
auto echo_adj = [](PGM_P const label, const_float_t value) { SERIAL_ECHOPAIR_P(label, value); };
|
||||
SERIAL_ECHOPGM("Dual Endstop Adjustment (mm): ");
|
||||
#if ENABLED(X_DUAL_ENDSTOPS)
|
||||
SERIAL_ECHOPAIR(" X2:", endstops.x2_endstop_adj);
|
||||
echo_adj(PSTR(" X2:"), endstops.x2_endstop_adj);
|
||||
#endif
|
||||
#if ENABLED(Y_DUAL_ENDSTOPS)
|
||||
SERIAL_ECHOPAIR(" Y2:", endstops.y2_endstop_adj);
|
||||
echo_adj(PSTR(" Y2:"), endstops.y2_endstop_adj);
|
||||
#endif
|
||||
#if ENABLED(Z_MULTI_ENDSTOPS)
|
||||
#define _ECHO_ZADJ(N) SERIAL_ECHOPAIR(" Z" STRINGIFY(N) ":", endstops.z##N##_endstop_adj);
|
||||
#define _ECHO_ZADJ(N) echo_adj(PSTR(" Z" STRINGIFY(N) ":"), endstops.z##N##_endstop_adj);
|
||||
REPEAT_S(2, INCREMENT(NUM_Z_STEPPER_DRIVERS), _ECHO_ZADJ)
|
||||
#endif
|
||||
SERIAL_EOL();
|
||||
|
@@ -20,9 +20,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "../../inc/MarlinConfig.h"
|
||||
#include "../../inc/MarlinConfigPre.h"
|
||||
|
||||
#if ENABLED(COOLANT_CONTROL)
|
||||
#if ANY(COOLANT_MIST, COOLANT_FLOOD, AIR_ASSIST)
|
||||
|
||||
#include "../gcode.h"
|
||||
#include "../../module/planner.h"
|
||||
@@ -37,18 +37,29 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ENABLED(COOLANT_FLOOD)
|
||||
/**
|
||||
* M8: Flood Coolant On
|
||||
*/
|
||||
void GcodeSuite::M8() {
|
||||
planner.synchronize(); // Wait for move to arrive
|
||||
WRITE(COOLANT_FLOOD_PIN, !(COOLANT_FLOOD_INVERT)); // Turn on Flood coolant
|
||||
}
|
||||
#if EITHER(COOLANT_FLOOD, AIR_ASSIST)
|
||||
|
||||
#if ENABLED(AIR_ASSIST)
|
||||
#include "../../feature/spindle_laser.h"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* M9: Coolant OFF
|
||||
* M8: Flood Coolant / Air Assist ON
|
||||
*/
|
||||
void GcodeSuite::M8() {
|
||||
planner.synchronize(); // Wait for move to arrive
|
||||
#if ENABLED(COOLANT_FLOOD)
|
||||
WRITE(COOLANT_FLOOD_PIN, !(COOLANT_FLOOD_INVERT)); // Turn on Flood coolant
|
||||
#endif
|
||||
#if ENABLED(AIR_ASSIST)
|
||||
cutter.air_assist_enable(); // Turn on Air Assist
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* M9: Coolant / Air Assist OFF
|
||||
*/
|
||||
void GcodeSuite::M9() {
|
||||
planner.synchronize(); // Wait for move to arrive
|
||||
@@ -58,30 +69,9 @@ void GcodeSuite::M9() {
|
||||
#if ENABLED(COOLANT_FLOOD)
|
||||
WRITE(COOLANT_FLOOD_PIN, COOLANT_FLOOD_INVERT); // Turn off Flood coolant
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif // COOLANT_CONTROL
|
||||
|
||||
#if ENABLED(AIR_ASSIST)
|
||||
|
||||
#include "../gcode.h"
|
||||
#include "../../module/planner.h"
|
||||
#include "../../feature/spindle_laser.h"
|
||||
|
||||
/**
|
||||
* M8: Air Assist On
|
||||
*/
|
||||
void GcodeSuite::M8() {
|
||||
planner.synchronize();
|
||||
cutter.air_assist_enable(); // Turn on Air Assist pin
|
||||
cutter.air_assist_disable(); // Turn off Air Assist
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* M9: Air Assist Off
|
||||
*/
|
||||
void GcodeSuite::M9() {
|
||||
planner.synchronize();
|
||||
cutter.air_assist_disable(); // Turn off Air Assist pin
|
||||
}
|
||||
|
||||
#endif // AIR_ASSIST
|
||||
#endif // COOLANT_MIST | COOLANT_FLOOD | AIR_ASSIST
|
||||
|
@@ -32,31 +32,6 @@
|
||||
#define DEBUG_OUT ENABLED(L6470_CHITCHAT)
|
||||
#include "../../../core/debug_out.h"
|
||||
|
||||
/**
|
||||
* M906: report or set KVAL_HOLD which sets the maximum effective voltage provided by the
|
||||
* PWMs to the steppers
|
||||
*
|
||||
* On L6474 this sets the TVAL register (same address).
|
||||
*
|
||||
* I - select which driver(s) to change on multi-driver axis
|
||||
* 0 - (default) all drivers on the axis or E0
|
||||
* 1 - monitor only X, Y, Z or E1
|
||||
* 2 - monitor only X2, Y2, Z2 or E2
|
||||
* 3 - monitor only Z3 or E3
|
||||
* 4 - monitor only Z4 or E4
|
||||
* 5 - monitor only E5
|
||||
* Xxxx, Yxxx, Zxxx, Exxx - axis to change (optional)
|
||||
* L6474 - current in mA (4A max)
|
||||
* All others - 0-255
|
||||
*/
|
||||
|
||||
/**
|
||||
* Sets KVAL_HOLD wich affects the current being driven through the stepper.
|
||||
*
|
||||
* L6470 is used in the STEP-CLOCK mode. KVAL_HOLD is the only KVAL_xxx
|
||||
* that affects the effective voltage seen by the stepper.
|
||||
*/
|
||||
|
||||
/**
|
||||
* MACRO to fetch information on the items associated with current limiting
|
||||
* and maximum voltage output.
|
||||
@@ -220,6 +195,28 @@ void L64XX_report_current(L64XX &motor, const L64XX_axis_t axis) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* M906: report or set KVAL_HOLD which sets the maximum effective voltage provided by the
|
||||
* PWMs to the steppers
|
||||
*
|
||||
* On L6474 this sets the TVAL register (same address).
|
||||
*
|
||||
* I - select which driver(s) to change on multi-driver axis
|
||||
* 0 - (default) all drivers on the axis or E0
|
||||
* 1 - monitor only X, Y, Z or E1
|
||||
* 2 - monitor only X2, Y2, Z2 or E2
|
||||
* 3 - monitor only Z3 or E3
|
||||
* 4 - monitor only Z4 or E4
|
||||
* 5 - monitor only E5
|
||||
* Xxxx, Yxxx, Zxxx, Exxx - axis to change (optional)
|
||||
* L6474 - current in mA (4A max)
|
||||
* All others - 0-255
|
||||
*
|
||||
* Sets KVAL_HOLD wich affects the current being driven through the stepper.
|
||||
*
|
||||
* L6470 is used in the STEP-CLOCK mode. KVAL_HOLD is the only KVAL_xxx
|
||||
* that affects the effective voltage seen by the stepper.
|
||||
*/
|
||||
void GcodeSuite::M906() {
|
||||
|
||||
L64xxManager.pause_monitor(true); // Keep monitor_driver() from stealing status
|
||||
@@ -281,11 +278,11 @@ void GcodeSuite::M906() {
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if HAS_EXTRUDERS
|
||||
#if E_STEPPERS
|
||||
case E_AXIS: {
|
||||
const int8_t target_extruder = get_target_extruder_from_command();
|
||||
if (target_extruder < 0) return;
|
||||
switch (target_extruder) {
|
||||
const int8_t target_e_stepper = get_target_e_stepper_from_command();
|
||||
if (target_e_stepper < 0) return;
|
||||
switch (target_e_stepper) {
|
||||
#if AXIS_IS_L64XX(E0)
|
||||
case 0: L6470_SET_KVAL_HOLD(E0); break;
|
||||
#endif
|
||||
|
@@ -67,9 +67,11 @@ void GcodeSuite::M907() {
|
||||
LOOP_LOGICAL_AXES(i) if (parser.seenval(axis_codes[i])) digipot_i2c.set_current(i, parser.value_float());
|
||||
// Additional extruders use B,C,D for channels 4,5,6.
|
||||
// TODO: Change these parameters because 'E' is used. B<index>?
|
||||
#if HAS_EXTRUDERS
|
||||
for (uint8_t i = E_AXIS + 1; i < DIGIPOT_I2C_NUM_CHANNELS; i++)
|
||||
if (parser.seenval('B' + i - (E_AXIS + 1))) digipot_i2c.set_current(i, parser.value_float());
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(HAS_MOTOR_CURRENT_DAC)
|
||||
if (parser.seenval('S')) {
|
||||
|
@@ -52,14 +52,16 @@
|
||||
* M150 I1 R ; Set NEOPIXEL index 1 to red
|
||||
* M150 S1 I1 R ; Set SEPARATE index 1 to red
|
||||
*/
|
||||
|
||||
void GcodeSuite::M150() {
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
const uint8_t index = parser.intval('I', -1);
|
||||
const int8_t index = parser.intval('I', -1);
|
||||
#if ENABLED(NEOPIXEL2_SEPARATE)
|
||||
const uint8_t unit = parser.intval('S'),
|
||||
brightness = unit ? neo2.brightness() : neo.brightness();
|
||||
*(unit ? &neo2.neoindex : &neo.neoindex) = index;
|
||||
int8_t brightness, unit = parser.intval('S', -1);
|
||||
switch (unit) {
|
||||
case -1: neo2.neoindex = index; // fall-thru
|
||||
case 0: neo.neoindex = index; brightness = neo.brightness(); break;
|
||||
case 1: neo2.neoindex = index; brightness = neo2.brightness(); break;
|
||||
}
|
||||
#else
|
||||
const uint8_t brightness = neo.brightness();
|
||||
neo.neoindex = index;
|
||||
@@ -75,10 +77,15 @@ void GcodeSuite::M150() {
|
||||
);
|
||||
|
||||
#if ENABLED(NEOPIXEL2_SEPARATE)
|
||||
if (unit == 1) { leds2.set_color(color); return; }
|
||||
switch (unit) {
|
||||
case 0: leds.set_color(color); return;
|
||||
case 1: leds2.set_color(color); return;
|
||||
}
|
||||
#endif
|
||||
|
||||
// If 'S' is not specified use both
|
||||
leds.set_color(color);
|
||||
TERN_(NEOPIXEL2_SEPARATE, leds2.set_color(color));
|
||||
}
|
||||
|
||||
#endif // HAS_COLOR_LEDS
|
||||
|
@@ -56,7 +56,7 @@
|
||||
*/
|
||||
void GcodeSuite::M125() {
|
||||
// Initial retract before move to filament change position
|
||||
const float retract = -ABS(parser.axisunitsval('L', E_AXIS, PAUSE_PARK_RETRACT_LENGTH));
|
||||
const float retract = TERN0(HAS_EXTRUDERS, -ABS(parser.axisunitsval('L', E_AXIS, PAUSE_PARK_RETRACT_LENGTH)));
|
||||
|
||||
xyz_pos_t park_point = NOZZLE_PARK_POINT;
|
||||
|
||||
|
@@ -54,10 +54,15 @@ void GcodeSuite::M412() {
|
||||
else {
|
||||
SERIAL_ECHO_START();
|
||||
SERIAL_ECHOPGM("Filament runout ");
|
||||
serialprintln_onoff(runout.enabled);
|
||||
serialprint_onoff(runout.enabled);
|
||||
#if HAS_FILAMENT_RUNOUT_DISTANCE
|
||||
SERIAL_ECHOLNPAIR("Filament runout distance (mm): ", runout.runout_distance());
|
||||
SERIAL_ECHOPAIR(" ; Distance ", runout.runout_distance(), "mm");
|
||||
#endif
|
||||
#if ENABLED(HOST_ACTION_COMMANDS)
|
||||
SERIAL_ECHOPGM(" ; Host handling ");
|
||||
serialprint_onoff(runout.host_handling);
|
||||
#endif
|
||||
SERIAL_EOL();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -40,7 +40,7 @@ void tmc_set_stealthChop(TMC &st, const bool enable) {
|
||||
st.refresh_stepping_mode();
|
||||
}
|
||||
|
||||
static void set_stealth_status(const bool enable, const int8_t target_extruder) {
|
||||
static void set_stealth_status(const bool enable, const int8_t target_e_stepper) {
|
||||
#define TMC_SET_STEALTH(Q) tmc_set_stealthChop(stepper##Q, enable)
|
||||
|
||||
#if X_HAS_STEALTHCHOP || Y_HAS_STEALTHCHOP || Z_HAS_STEALTHCHOP \
|
||||
@@ -82,17 +82,19 @@ static void set_stealth_status(const bool enable, const int8_t target_extruder)
|
||||
case K_AXIS: TMC_SET_STEALTH(K); break;
|
||||
#endif
|
||||
|
||||
#if HAS_EXTRUDERS
|
||||
#if E_STEPPERS
|
||||
case E_AXIS: {
|
||||
if (target_extruder < 0) return;
|
||||
OPTCODE(E0_HAS_STEALTHCHOP, else if (target_extruder == 0) TMC_SET_STEALTH(E0))
|
||||
OPTCODE(E1_HAS_STEALTHCHOP, else if (target_extruder == 1) TMC_SET_STEALTH(E1))
|
||||
OPTCODE(E2_HAS_STEALTHCHOP, else if (target_extruder == 2) TMC_SET_STEALTH(E2))
|
||||
OPTCODE(E3_HAS_STEALTHCHOP, else if (target_extruder == 3) TMC_SET_STEALTH(E3))
|
||||
OPTCODE(E4_HAS_STEALTHCHOP, else if (target_extruder == 4) TMC_SET_STEALTH(E4))
|
||||
OPTCODE(E5_HAS_STEALTHCHOP, else if (target_extruder == 5) TMC_SET_STEALTH(E5))
|
||||
OPTCODE(E6_HAS_STEALTHCHOP, else if (target_extruder == 6) TMC_SET_STEALTH(E6))
|
||||
OPTCODE(E7_HAS_STEALTHCHOP, else if (target_extruder == 7) TMC_SET_STEALTH(E7))
|
||||
if (target_e_stepper < 0) return;
|
||||
switch (target_e_stepper) {
|
||||
TERN_(E0_HAS_STEALTHCHOP, case 0: TMC_SET_STEALTH(E0); break;)
|
||||
TERN_(E1_HAS_STEALTHCHOP, case 1: TMC_SET_STEALTH(E1); break;)
|
||||
TERN_(E2_HAS_STEALTHCHOP, case 2: TMC_SET_STEALTH(E2); break;)
|
||||
TERN_(E3_HAS_STEALTHCHOP, case 3: TMC_SET_STEALTH(E3); break;)
|
||||
TERN_(E4_HAS_STEALTHCHOP, case 4: TMC_SET_STEALTH(E4); break;)
|
||||
TERN_(E5_HAS_STEALTHCHOP, case 5: TMC_SET_STEALTH(E5); break;)
|
||||
TERN_(E6_HAS_STEALTHCHOP, case 6: TMC_SET_STEALTH(E6); break;)
|
||||
TERN_(E7_HAS_STEALTHCHOP, case 7: TMC_SET_STEALTH(E7); break;)
|
||||
}
|
||||
} break;
|
||||
#endif
|
||||
}
|
||||
@@ -131,7 +133,7 @@ static void say_stealth_status() {
|
||||
*/
|
||||
void GcodeSuite::M569() {
|
||||
if (parser.seen('S'))
|
||||
set_stealth_status(parser.value_bool(), get_target_extruder_from_command());
|
||||
set_stealth_status(parser.value_bool(), get_target_e_stepper_from_command());
|
||||
else
|
||||
say_stealth_status();
|
||||
}
|
||||
|
@@ -102,11 +102,11 @@ void GcodeSuite::M906() {
|
||||
case K_AXIS: TMC_SET_CURRENT(K); break;
|
||||
#endif
|
||||
|
||||
#if HAS_EXTRUDERS
|
||||
#if E_STEPPERS
|
||||
case E_AXIS: {
|
||||
const int8_t target_extruder = get_target_extruder_from_command();
|
||||
if (target_extruder < 0) return;
|
||||
switch (target_extruder) {
|
||||
const int8_t target_e_stepper = get_target_e_stepper_from_command();
|
||||
if (target_e_stepper < 0) return;
|
||||
switch (target_e_stepper) {
|
||||
#if AXIS_IS_TMC(E0)
|
||||
case 0: TMC_SET_CURRENT(E0); break;
|
||||
#endif
|
||||
|
@@ -265,20 +265,22 @@
|
||||
TERN_(Z3_HAS_STEALTCHOP, if (index == 0 || index == 3) TMC_SET_PWMTHRS(Z,Z3));
|
||||
TERN_(Z4_HAS_STEALTCHOP, if (index == 0 || index == 4) TMC_SET_PWMTHRS(Z,Z4));
|
||||
break;
|
||||
case E_AXIS: {
|
||||
#if E_STEPPERS
|
||||
const int8_t target_extruder = get_target_extruder_from_command();
|
||||
if (target_extruder < 0) return;
|
||||
TERN_(E0_HAS_STEALTHCHOP, else if (target_extruder == 0) TMC_SET_PWMTHRS_E(0));
|
||||
TERN_(E1_HAS_STEALTHCHOP, else if (target_extruder == 1) TMC_SET_PWMTHRS_E(1));
|
||||
TERN_(E2_HAS_STEALTHCHOP, else if (target_extruder == 2) TMC_SET_PWMTHRS_E(2));
|
||||
TERN_(E3_HAS_STEALTHCHOP, else if (target_extruder == 3) TMC_SET_PWMTHRS_E(3));
|
||||
TERN_(E4_HAS_STEALTHCHOP, else if (target_extruder == 4) TMC_SET_PWMTHRS_E(4));
|
||||
TERN_(E5_HAS_STEALTHCHOP, else if (target_extruder == 5) TMC_SET_PWMTHRS_E(5));
|
||||
TERN_(E6_HAS_STEALTHCHOP, else if (target_extruder == 6) TMC_SET_PWMTHRS_E(6));
|
||||
TERN_(E7_HAS_STEALTHCHOP, else if (target_extruder == 7) TMC_SET_PWMTHRS_E(7));
|
||||
#endif // E_STEPPERS
|
||||
case E_AXIS: {
|
||||
const int8_t target_e_stepper = get_target_e_stepper_from_command();
|
||||
if (target_e_stepper < 0) return;
|
||||
switch (target_e_stepper) {
|
||||
TERN_(E0_HAS_STEALTHCHOP, case 0: TMC_SET_PWMTHRS_E(0); break;)
|
||||
TERN_(E1_HAS_STEALTHCHOP, case 1: TMC_SET_PWMTHRS_E(1); break;)
|
||||
TERN_(E2_HAS_STEALTHCHOP, case 2: TMC_SET_PWMTHRS_E(2); break;)
|
||||
TERN_(E3_HAS_STEALTHCHOP, case 3: TMC_SET_PWMTHRS_E(3); break;)
|
||||
TERN_(E4_HAS_STEALTHCHOP, case 4: TMC_SET_PWMTHRS_E(4); break;)
|
||||
TERN_(E5_HAS_STEALTHCHOP, case 5: TMC_SET_PWMTHRS_E(5); break;)
|
||||
TERN_(E6_HAS_STEALTHCHOP, case 6: TMC_SET_PWMTHRS_E(6); break;)
|
||||
TERN_(E7_HAS_STEALTHCHOP, case 7: TMC_SET_PWMTHRS_E(7); break;)
|
||||
}
|
||||
} break;
|
||||
#endif // E_STEPPERS
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -441,21 +441,24 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
|
||||
case 3: M3_M4(false); break; // M3: Turn ON Laser | Spindle (clockwise), set Power | Speed
|
||||
case 4: M3_M4(true ); break; // M4: Turn ON Laser | Spindle (counter-clockwise), set Power | Speed
|
||||
case 5: M5(); break; // M5: Turn OFF Laser | Spindle
|
||||
#endif
|
||||
|
||||
#if ENABLED(COOLANT_MIST)
|
||||
case 7: M7(); break; // M7: Coolant Mist ON
|
||||
#endif
|
||||
|
||||
#if EITHER(AIR_ASSIST, COOLANT_FLOOD)
|
||||
case 8: M8(); break; // M8: Air Assist / Coolant Flood ON
|
||||
#endif
|
||||
|
||||
#if EITHER(AIR_ASSIST, COOLANT_CONTROL)
|
||||
case 9: M9(); break; // M9: Air Assist / Coolant OFF
|
||||
#endif
|
||||
|
||||
#if ENABLED(AIR_EVACUATION)
|
||||
case 10: M10(); break; // M10: Vacuum or Blower motor ON
|
||||
case 11: M11(); break; // M11: Vacuum or Blower motor OFF
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(COOLANT_CONTROL)
|
||||
#if ENABLED(COOLANT_MIST)
|
||||
case 7: M7(); break; // M7: Mist coolant ON
|
||||
#endif
|
||||
#if ENABLED(COOLANT_FLOOD)
|
||||
case 8: M8(); break; // M8: Flood coolant ON
|
||||
#endif
|
||||
case 9: M9(); break; // M9: Coolant OFF
|
||||
#endif
|
||||
|
||||
#if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER)
|
||||
case 12: M12(); break; // M12: Synchronize and optionally force a CLC set
|
||||
|
@@ -564,22 +564,25 @@ private:
|
||||
#if HAS_CUTTER
|
||||
static void M3_M4(const bool is_M4);
|
||||
static void M5();
|
||||
#if ENABLED(AIR_EVACUATION)
|
||||
static void M10();
|
||||
static void M11();
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(COOLANT_CONTROL)
|
||||
#if ENABLED(COOLANT_MIST)
|
||||
static void M7();
|
||||
#endif
|
||||
#if ENABLED(COOLANT_FLOOD)
|
||||
|
||||
#if EITHER(AIR_ASSIST, COOLANT_FLOOD)
|
||||
static void M8();
|
||||
#endif
|
||||
|
||||
#if EITHER(AIR_ASSIST, COOLANT_CONTROL)
|
||||
static void M9();
|
||||
#endif
|
||||
|
||||
#if ENABLED(AIR_EVACUATION)
|
||||
static void M10();
|
||||
static void M11();
|
||||
#endif
|
||||
|
||||
#if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER)
|
||||
static void M12();
|
||||
#endif
|
||||
|
@@ -216,11 +216,13 @@ void GcodeSuite::M114() {
|
||||
report_current_position_detail();
|
||||
return;
|
||||
}
|
||||
#if HAS_EXTRUDERS
|
||||
if (parser.seen_test('E')) {
|
||||
SERIAL_ECHOLNPAIR("Count E:", stepper.position(E_AXIS));
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(M114_REALTIME)
|
||||
if (parser.seen_test('R')) { report_real_position(); return; }
|
||||
|
@@ -311,7 +311,13 @@ public:
|
||||
}
|
||||
|
||||
static inline float axis_unit_factor(const AxisEnum axis) {
|
||||
return (axis >= E_AXIS && volumetric_enabled ? volumetric_unit_factor : linear_unit_factor);
|
||||
return (
|
||||
#if HAS_EXTRUDERS
|
||||
axis >= E_AXIS && volumetric_enabled ? volumetric_unit_factor : linear_unit_factor
|
||||
#else
|
||||
linear_unit_factor
|
||||
#endif
|
||||
);
|
||||
}
|
||||
|
||||
static inline float linear_value_to_mm(const_float_t v) { return v * linear_unit_factor; }
|
||||
|
@@ -526,7 +526,17 @@
|
||||
#undef ANY_TEMP_SENSOR_IS
|
||||
|
||||
// Usurp a sensor to do redundant readings
|
||||
#if TEMP_SENSOR_REDUNDANT && !PIN_EXISTS(TEMP_REDUNDANT)
|
||||
#if TEMP_SENSOR_REDUNDANT
|
||||
#ifndef TEMP_SENSOR_REDUNDANT_SOURCE
|
||||
#define TEMP_SENSOR_REDUNDANT_SOURCE 1
|
||||
#endif
|
||||
#ifndef TEMP_SENSOR_REDUNDANT_TARGET
|
||||
#define TEMP_SENSOR_REDUNDANT_TARGET 0
|
||||
#endif
|
||||
#if !PIN_EXISTS(TEMP_REDUNDANT)
|
||||
#ifndef TEMP_SENSOR_REDUNDANT_MAX_DIFF
|
||||
#define TEMP_SENSOR_REDUNDANT_MAX_DIFF 10
|
||||
#endif
|
||||
#if TEMP_SENSOR_REDUNDANT_SOURCE == -5
|
||||
#if !PIN_EXISTS(TEMP_COOLER)
|
||||
#error "TEMP_SENSOR_REDUNDANT_SOURCE set to COOLER requires TEMP_COOLER_PIN."
|
||||
@@ -600,9 +610,6 @@
|
||||
#define TEMP_REDUNDANT_PIN TEMP_7_PIN
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef TEMP_SENSOR_REDUNDANT_MAX_DIFF
|
||||
#define TEMP_SENSOR_REDUNDANT_MAX_DIFF 10
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -3092,6 +3099,7 @@
|
||||
#endif
|
||||
#else
|
||||
#undef NOZZLE_TO_PROBE_OFFSET
|
||||
#undef PROBING_STEPPERS_OFF
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -3134,18 +3142,26 @@
|
||||
/**
|
||||
* Heater, Fan, and Probe interactions
|
||||
*/
|
||||
#if FAN_COUNT == 0
|
||||
#undef PROBING_FANS_OFF
|
||||
#if !HAS_FAN
|
||||
#undef ADAPTIVE_FAN_SLOWING
|
||||
#undef NO_FAN_SLOWING_IN_PID_TUNING
|
||||
#endif
|
||||
|
||||
#if HAS_BED_PROBE && (EITHER(PROBING_HEATERS_OFF, PROBING_FANS_OFF) || DELAY_BEFORE_PROBING > 0)
|
||||
#define HAS_QUIET_PROBING 1
|
||||
#if !BOTH(HAS_BED_PROBE, HAS_FAN)
|
||||
#undef PROBING_FANS_OFF
|
||||
#endif
|
||||
#if !BOTH(HAS_BED_PROBE, HAS_EXTRUDERS)
|
||||
#undef PROBING_ESTEPPERS_OFF
|
||||
#endif
|
||||
#if BOTH(PROBING_STEPPERS_OFF, PROBING_ESTEPPERS_OFF)
|
||||
#undef PROBING_ESTEPPERS_OFF
|
||||
#warning "PROBING_STEPPERS_OFF includes PROBING_ESTEPPERS_OFF. Disabling PROBING_ESTEPPERS_OFF."
|
||||
#endif
|
||||
#if EITHER(ADVANCED_PAUSE_FEATURE, PROBING_HEATERS_OFF)
|
||||
#define HEATER_IDLE_HANDLER 1
|
||||
#endif
|
||||
#if HAS_BED_PROBE && (ANY(PROBING_HEATERS_OFF, PROBING_STEPPERS_OFF, PROBING_ESTEPPERS_OFF, PROBING_FANS_OFF) || DELAY_BEFORE_PROBING > 0)
|
||||
#define HAS_QUIET_PROBING 1
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Advanced Pause - Filament Change
|
||||
@@ -3381,10 +3397,15 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HAS_LCD_MENU
|
||||
// LCD timeout to status screen default is 15s
|
||||
#ifndef LCD_TIMEOUT_TO_STATUS
|
||||
#define LCD_TIMEOUT_TO_STATUS 15000
|
||||
#endif
|
||||
#if LCD_TIMEOUT_TO_STATUS
|
||||
#define SCREENS_CAN_TIME_OUT 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Add commands that need sub-codes to this list
|
||||
#if ANY(G38_PROBE_TARGET, CNC_COORDINATE_SYSTEMS, POWER_LOSS_RECOVERY)
|
||||
|
@@ -1039,6 +1039,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#error "EXTRUDERS must be 1 with HEATERS_PARALLEL."
|
||||
#endif
|
||||
|
||||
#if ENABLED(STATUS_HOTEND_INVERTED) && NONE(STATUS_HOTEND_NUMBERLESS, STATUS_HOTEND_ANIM)
|
||||
#error "With multiple hotends STATUS_HOTEND_INVERTED requires STATUS_HOTEND_ANIM or STATUS_HOTEND_NUMBERLESS."
|
||||
#endif
|
||||
|
||||
#if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
|
||||
#ifndef TOOLCHANGE_FS_LENGTH
|
||||
#error "TOOLCHANGE_FILAMENT_SWAP requires TOOLCHANGE_FS_LENGTH."
|
||||
@@ -1245,24 +1249,29 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#endif
|
||||
|
||||
/**
|
||||
* (Electro)magnetic Switching Toolhead requirements
|
||||
* Magnetic / Electromagnetic Switching Toolhead requirements
|
||||
*/
|
||||
#if EITHER(MAGNETIC_SWITCHING_TOOLHEAD, ELECTROMAGNETIC_SWITCHING_TOOLHEAD)
|
||||
#ifndef SWITCHING_TOOLHEAD_Y_POS
|
||||
#error "(ELECTRO)MAGNETIC_SWITCHING_TOOLHEAD requires SWITCHING_TOOLHEAD_Y_POS"
|
||||
#error "(ELECTRO)?MAGNETIC_SWITCHING_TOOLHEAD requires SWITCHING_TOOLHEAD_Y_POS"
|
||||
#elif !defined(SWITCHING_TOOLHEAD_X_POS)
|
||||
#error "(ELECTRO)MAGNETIC_SWITCHING_TOOLHEAD requires SWITCHING_TOOLHEAD_X_POS"
|
||||
#elif !defined(SWITCHING_TOOLHEAD_Z_HOP)
|
||||
#error "(ELECTRO)MAGNETIC_SWITCHING_TOOLHEAD requires SWITCHING_TOOLHEAD_Z_HOP."
|
||||
#error "(ELECTRO)?MAGNETIC_SWITCHING_TOOLHEAD requires SWITCHING_TOOLHEAD_X_POS"
|
||||
#elif !defined(SWITCHING_TOOLHEAD_Y_CLEAR)
|
||||
#error "(ELECTRO)MAGNETIC_SWITCHING_TOOLHEAD requires SWITCHING_TOOLHEAD_Y_CLEAR."
|
||||
#elif ENABLED(ELECTROMAGNETIC_SWITCHING_TOOLHEAD)
|
||||
#if ENABLED(EXT_SOLENOID)
|
||||
#error "(ELECTRO)MAGNETIC_SWITCHING_TOOLHEAD and EXT_SOLENOID are incompatible. (Pins are used twice.)"
|
||||
#elif !PIN_EXISTS(SOL0)
|
||||
#error "(ELECTRO)MAGNETIC_SWITCHING_TOOLHEAD requires SOL0_PIN."
|
||||
#error "(ELECTRO)?MAGNETIC_SWITCHING_TOOLHEAD requires SWITCHING_TOOLHEAD_Y_CLEAR."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Electromagnetic Switching Toolhead requirements
|
||||
*/
|
||||
#if ENABLED(ELECTROMAGNETIC_SWITCHING_TOOLHEAD)
|
||||
#if ENABLED(EXT_SOLENOID)
|
||||
#error "ELECTROMAGNETIC_SWITCHING_TOOLHEAD and EXT_SOLENOID are incompatible. (Pins are used twice.)"
|
||||
#elif !PIN_EXISTS(SOL0)
|
||||
#error "ELECTROMAGNETIC_SWITCHING_TOOLHEAD requires SOL0_PIN."
|
||||
#elif !defined(SWITCHING_TOOLHEAD_Z_HOP)
|
||||
#error "ELECTROMAGNETIC_SWITCHING_TOOLHEAD requires SWITCHING_TOOLHEAD_Z_HOP."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@@ -25,7 +25,7 @@
|
||||
* Release version. Leave the Marlin version or apply a custom scheme.
|
||||
*/
|
||||
#ifndef SHORT_BUILD_VERSION
|
||||
#define SHORT_BUILD_VERSION "2.0.9"
|
||||
#define SHORT_BUILD_VERSION "2.0.9.1"
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -42,7 +42,7 @@
|
||||
* version was tagged.
|
||||
*/
|
||||
#ifndef STRING_DISTRIBUTION_DATE
|
||||
#define STRING_DISTRIBUTION_DATE "2021-06-15"
|
||||
#define STRING_DISTRIBUTION_DATE "2021-06-27"
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -52,7 +52,7 @@
|
||||
* to alert users to major changes.
|
||||
*/
|
||||
|
||||
#define MARLIN_HEX_VERSION 02000900
|
||||
#define MARLIN_HEX_VERSION 02000901
|
||||
#ifndef REQUIRED_CONFIGURATION_H_VERSION
|
||||
#define REQUIRED_CONFIGURATION_H_VERSION MARLIN_HEX_VERSION
|
||||
#endif
|
||||
|
@@ -369,13 +369,12 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
|
||||
void MenuItem_static::draw(const uint8_t row, PGM_P const pstr, const uint8_t style/*=SS_DEFAULT*/, const char * const vstr/*=nullptr*/) {
|
||||
|
||||
if (mark_as_selected(row, style & SS_INVERT)) {
|
||||
|
||||
pixel_len_t n = LCD_PIXEL_WIDTH; // pixel width of string allowed
|
||||
|
||||
const int8_t plen = pstr ? utf8_strlen_P(pstr) : 0,
|
||||
const int plen = pstr ? calculateWidth(pstr) : 0,
|
||||
vlen = vstr ? utf8_strlen(vstr) : 0;
|
||||
if (style & SS_CENTER) {
|
||||
int8_t pad = (LCD_WIDTH - plen - vlen) / 2;
|
||||
int pad = (LCD_PIXEL_WIDTH - plen - vlen * MENU_FONT_WIDTH) / MENU_FONT_WIDTH / 2;
|
||||
while (--pad >= 0) n -= lcd_put_wchar(' ');
|
||||
}
|
||||
|
||||
@@ -400,8 +399,9 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
|
||||
if (mark_as_selected(row, sel)) {
|
||||
const uint8_t vallen = (pgm ? utf8_strlen_P(inStr) : utf8_strlen((char*)inStr)),
|
||||
pixelwidth = (pgm ? uxg_GetUtf8StrPixelWidthP(u8g.getU8g(), inStr) : uxg_GetUtf8StrPixelWidth(u8g.getU8g(), (char*)inStr));
|
||||
const u8g_uint_t prop = USE_WIDE_GLYPH ? 2 : 1;
|
||||
|
||||
pixel_len_t n = lcd_put_u8str_ind_P(pstr, itemIndex, itemString, LCD_WIDTH - 2 - vallen) * (MENU_FONT_WIDTH);
|
||||
pixel_len_t n = lcd_put_u8str_ind_P(pstr, itemIndex, itemString, LCD_WIDTH - 2 - vallen * prop) * (MENU_FONT_WIDTH);
|
||||
if (vallen) {
|
||||
lcd_put_wchar(':');
|
||||
while (n > MENU_FONT_WIDTH) n -= lcd_put_wchar(' ');
|
||||
@@ -414,15 +414,16 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
|
||||
void MenuEditItemBase::draw_edit_screen(PGM_P const pstr, const char * const value/*=nullptr*/) {
|
||||
ui.encoder_direction_normal();
|
||||
|
||||
const u8g_uint_t prop = USE_WIDE_GLYPH ? 2 : 1;
|
||||
const u8g_uint_t labellen = utf8_strlen_P(pstr), vallen = utf8_strlen(value);
|
||||
bool extra_row = labellen > LCD_WIDTH - 2 - vallen;
|
||||
bool extra_row = labellen * prop > LCD_WIDTH - 2 - vallen * prop;
|
||||
|
||||
#if ENABLED(USE_BIG_EDIT_FONT)
|
||||
// Use the menu font if the label won't fit on a single line
|
||||
constexpr u8g_uint_t lcd_edit_width = (LCD_PIXEL_WIDTH) / (EDIT_FONT_WIDTH);
|
||||
u8g_uint_t lcd_chr_fit, one_chr_width;
|
||||
if (labellen <= lcd_edit_width - 1) {
|
||||
if (labellen + vallen + 1 > lcd_edit_width) extra_row = true;
|
||||
if (labellen * prop <= lcd_edit_width - 1) {
|
||||
if (labellen * prop + vallen * prop + 1 > lcd_edit_width) extra_row = true;
|
||||
lcd_chr_fit = lcd_edit_width + 1;
|
||||
one_chr_width = EDIT_FONT_WIDTH;
|
||||
ui.set_font(FONT_EDIT);
|
||||
@@ -454,7 +455,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
|
||||
onpage = PAGE_CONTAINS(baseline - (EDIT_FONT_ASCENT - 1), baseline);
|
||||
}
|
||||
if (onpage) {
|
||||
lcd_put_wchar(((lcd_chr_fit - 1) - (vallen + 1)) * one_chr_width, baseline, ' '); // Right-justified, padded, add a leading space
|
||||
lcd_put_wchar(((lcd_chr_fit - 1) - (vallen * prop + 1)) * one_chr_width, baseline, ' '); // Right-justified, padded, add a leading space
|
||||
lcd_put_u8str(value);
|
||||
}
|
||||
}
|
||||
@@ -468,7 +469,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
|
||||
const pixel_len_t bw = len * prop * (MENU_FONT_WIDTH), bx = x * prop * (MENU_FONT_WIDTH);
|
||||
if (inv) {
|
||||
u8g.setColorIndex(1);
|
||||
u8g.drawBox(bx / prop - 1, by - (MENU_FONT_ASCENT) + 1, bw / prop + 2, MENU_FONT_HEIGHT - 1);
|
||||
u8g.drawBox(bx / prop - 1, by - (MENU_FONT_ASCENT), bw + 2, MENU_FONT_HEIGHT);
|
||||
u8g.setColorIndex(0);
|
||||
}
|
||||
lcd_put_u8str_P(bx / prop, by, pstr);
|
||||
@@ -478,8 +479,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
|
||||
void MenuItem_confirm::draw_select_screen(PGM_P const yes, PGM_P const no, const bool yesno, PGM_P const pref, const char * const string/*=nullptr*/, PGM_P const suff/*=nullptr*/) {
|
||||
ui.draw_select_screen_prompt(pref, string, suff);
|
||||
draw_boxed_string(1, LCD_HEIGHT - 1, no, !yesno);
|
||||
const u8g_uint_t xpos = (LCD_WIDTH) / (USE_WIDE_GLYPH ? 2 : 1);
|
||||
draw_boxed_string(xpos - (utf8_strlen_P(yes) + 1), LCD_HEIGHT - 1, yes, yesno);
|
||||
draw_boxed_string(LCD_WIDTH - (utf8_strlen_P(yes) * (USE_WIDE_GLYPH ? 2 : 1) + 1), LCD_HEIGHT - 1, yes, yesno);
|
||||
}
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
|
@@ -39,10 +39,22 @@
|
||||
|
||||
#define STATUS_HOTEND1_WIDTH 16
|
||||
|
||||
#if STATUS_HOTEND_BITMAPS == 1 || ENABLED(STATUS_HOTEND_NUMBERLESS)
|
||||
#if STATUS_HOTEND_BITMAPS == 1 || defined(STATUS_HOTEND_NUMBERLESS)
|
||||
|
||||
const unsigned char status_hotend_a_bmp[] PROGMEM = {
|
||||
B00011111,B11100000,
|
||||
#if defined(STATUS_HOTEND_INVERTED) && !defined(STATUS_HOTEND_ANIM)
|
||||
B00100000,B00010000,
|
||||
B00100000,B00010000,
|
||||
B00100000,B00010000,
|
||||
B00010000,B00100000,
|
||||
B00010000,B00100000,
|
||||
B00100000,B00010000,
|
||||
B00100000,B00010000,
|
||||
B00110000,B00110000,
|
||||
B00001000,B01000000,
|
||||
B00000100,B10000000,
|
||||
#else
|
||||
B00111111,B11110000,
|
||||
B00111111,B11110000,
|
||||
B00111111,B11110000,
|
||||
@@ -53,6 +65,7 @@
|
||||
B00111111,B11110000,
|
||||
B00001111,B11000000,
|
||||
B00000111,B10000000,
|
||||
#endif
|
||||
B00000011,B00000000
|
||||
};
|
||||
|
||||
|
@@ -236,18 +236,12 @@ FORCE_INLINE void _draw_centered_temp(const celsius_t temp, const uint8_t tx, co
|
||||
#define HOTEND_DOT false
|
||||
#endif
|
||||
|
||||
#if ANIM_HOTEND && BOTH(STATUS_HOTEND_INVERTED, STATUS_HOTEND_NUMBERLESS)
|
||||
#define OFF_BMP(N) status_hotend_b_bmp
|
||||
#define ON_BMP(N) status_hotend_a_bmp
|
||||
#elif ANIM_HOTEND && DISABLED(STATUS_HOTEND_INVERTED) && ENABLED(STATUS_HOTEND_NUMBERLESS)
|
||||
#define OFF_BMP(N) status_hotend_a_bmp
|
||||
#define ON_BMP(N) status_hotend_b_bmp
|
||||
#elif BOTH(ANIM_HOTEND, STATUS_HOTEND_INVERTED)
|
||||
#define OFF_BMP(N) status_hotend##N##_b_bmp
|
||||
#define ON_BMP(N) status_hotend##N##_a_bmp
|
||||
#if ENABLED(STATUS_HOTEND_NUMBERLESS)
|
||||
#define OFF_BMP(N) TERN(STATUS_HOTEND_INVERTED, status_hotend_b_bmp, status_hotend_a_bmp)
|
||||
#define ON_BMP(N) TERN(STATUS_HOTEND_INVERTED, status_hotend_a_bmp, status_hotend_b_bmp)
|
||||
#else
|
||||
#define OFF_BMP(N) status_hotend##N##_a_bmp
|
||||
#define ON_BMP(N) status_hotend##N##_b_bmp
|
||||
#define OFF_BMP(N) TERN(STATUS_HOTEND_INVERTED, status_hotend##N##_b_bmp, status_hotend##N##_a_bmp)
|
||||
#define ON_BMP(N) TERN(STATUS_HOTEND_INVERTED, status_hotend##N##_a_bmp, status_hotend##N##_b_bmp)
|
||||
#endif
|
||||
|
||||
#if STATUS_HOTEND_BITMAPS > 1
|
||||
@@ -275,7 +269,6 @@ FORCE_INLINE void _draw_centered_temp(const celsius_t temp, const uint8_t tx, co
|
||||
uint8_t tall = uint8_t(perc * BAR_TALL + 0.5f);
|
||||
NOMORE(tall, BAR_TALL);
|
||||
|
||||
#if ANIM_HOTEND
|
||||
// Draw hotend bitmap, either whole or split by the heating percent
|
||||
const uint8_t hx = STATUS_HOTEND_X(heater_id),
|
||||
bw = STATUS_HOTEND_BYTEWIDTH(heater_id);
|
||||
@@ -288,7 +281,6 @@ FORCE_INLINE void _draw_centered_temp(const celsius_t temp, const uint8_t tx, co
|
||||
else
|
||||
#endif
|
||||
u8g.drawBitmapP(hx, STATUS_HEATERS_Y, bw, STATUS_HEATERS_HEIGHT, HOTEND_BITMAP(TERN(HAS_MMU, active_extruder, heater_id), isHeat));
|
||||
#endif
|
||||
|
||||
} // PAGE_CONTAINS
|
||||
|
||||
|
@@ -51,7 +51,7 @@ enum DGUSLCD_Screens : uint8_t {
|
||||
DGUSLCD_SCREEN_KILL = 250, ///< Kill Screen. Must always be 250 (to be able to display "Error wrong LCD Version")
|
||||
DGUSLCD_SCREEN_WAITING = 251,
|
||||
DGUSLCD_SCREEN_POPUP = 252, ///< special target, popup screen will also return this code to say "return to previous screen"
|
||||
DGUSLDC_SCREEN_UNUSED = 255
|
||||
DGUSLCD_SCREEN_UNUSED = 255
|
||||
};
|
||||
|
||||
// Display Memory layout used (T5UID)
|
||||
|
@@ -51,7 +51,7 @@ enum DGUSLCD_Screens : uint8_t {
|
||||
DGUSLCD_SCREEN_KILL = 250, ///< Kill Screen. Must always be 250 (to be able to display "Error wrong LCD Version")
|
||||
DGUSLCD_SCREEN_WAITING = 251,
|
||||
DGUSLCD_SCREEN_POPUP = 252, ///< special target, popup screen will also return this code to say "return to previous screen"
|
||||
DGUSLDC_SCREEN_UNUSED = 255
|
||||
DGUSLCD_SCREEN_UNUSED = 255
|
||||
};
|
||||
|
||||
// Display Memory layout used (T5UID)
|
||||
|
@@ -238,7 +238,7 @@ enum DGUSLCD_Screens : uint8_t {
|
||||
DGUSLCD_SCREEN_KILL = 250, ///< Kill Screen. Must always be 250 (to be able to display "Error wrong LCD Version")
|
||||
DGUSLCD_SCREEN_WAITING = 251,
|
||||
DGUSLCD_SCREEN_POPUP = 252, ///< special target, popup screen will also return this code to say "return to previous screen"
|
||||
DGUSLDC_SCREEN_UNUSED = 255
|
||||
DGUSLCD_SCREEN_UNUSED = 255
|
||||
};
|
||||
|
||||
|
||||
|
@@ -46,7 +46,7 @@ enum DGUSLCD_Screens : uint8_t {
|
||||
DGUSLCD_SCREEN_KILL = 250, ///< Kill Screen. Must always be 250 (to be able to display "Error wrong LCD Version")
|
||||
DGUSLCD_SCREEN_WAITING = 251,
|
||||
DGUSLCD_SCREEN_POPUP = 252, ///< special target, popup screen will also return this code to say "return to previous screen"
|
||||
DGUSLDC_SCREEN_UNUSED = 255
|
||||
DGUSLCD_SCREEN_UNUSED = 255
|
||||
};
|
||||
|
||||
// Display Memory layout used (T5UID)
|
||||
|
105
Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/screens.h
Normal file
105
Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/screens.h
Normal file
@@ -0,0 +1,105 @@
|
||||
/*************
|
||||
* screens.h *
|
||||
*************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
|
||||
* Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <https://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
/********************************* DL CACHE SLOTS ******************************/
|
||||
|
||||
// In order to reduce SPI traffic, we cache display lists (DL) in RAMG. This
|
||||
// is done using the CLCD::DLCache class, which takes a unique ID for each
|
||||
// cache location. These IDs are defined here:
|
||||
|
||||
enum {
|
||||
STATUS_SCREEN_CACHE,
|
||||
MENU_SCREEN_CACHE,
|
||||
TUNE_SCREEN_CACHE,
|
||||
ALERT_BOX_CACHE,
|
||||
SPINNER_CACHE,
|
||||
ADVANCED_SETTINGS_SCREEN_CACHE,
|
||||
TEMPERATURE_SCREEN_CACHE,
|
||||
STEPS_SCREEN_CACHE,
|
||||
MAX_FEEDRATE_SCREEN_CACHE,
|
||||
MAX_VELOCITY_SCREEN_CACHE,
|
||||
MAX_ACCELERATION_SCREEN_CACHE,
|
||||
DEFAULT_ACCELERATION_SCREEN_CACHE,
|
||||
FLOW_PERCENT_SCREEN_CACHE,
|
||||
ZOFFSET_SCREEN_CACHE,
|
||||
STEPPER_CURRENT_SCREEN_CACHE,
|
||||
STEPPER_BUMP_SENSITIVITY_SCREEN_CACHE,
|
||||
PRINTING_SCREEN_CACHE,
|
||||
FILES_SCREEN_CACHE,
|
||||
INTERFACE_SETTINGS_SCREEN_CACHE,
|
||||
INTERFACE_SOUNDS_SCREEN_CACHE,
|
||||
LOCK_SCREEN_CACHE,
|
||||
DISPLAY_TIMINGS_SCREEN_CACHE
|
||||
};
|
||||
|
||||
// To save MCU RAM, the status message is "baked" in to the status screen
|
||||
// cache, so we reserve a large chunk of memory for the DL cache
|
||||
|
||||
#define STATUS_SCREEN_DL_SIZE 4096
|
||||
#define ALERT_BOX_DL_SIZE 3072
|
||||
#define SPINNER_DL_SIZE 3072
|
||||
#define FILE_SCREEN_DL_SIZE 4160
|
||||
#define PRINTING_SCREEN_DL_SIZE 2048
|
||||
|
||||
/************************* MENU SCREEN DECLARATIONS *************************/
|
||||
|
||||
#include "../generic/base_screen.h"
|
||||
#include "../generic/base_numeric_adjustment_screen.h"
|
||||
#include "../generic/dialog_box_base_class.h"
|
||||
#include "../generic/boot_screen.h"
|
||||
#include "../generic/about_screen.h"
|
||||
#include "../generic/kill_screen.h"
|
||||
#include "../generic/alert_dialog_box.h"
|
||||
#include "../generic/spinner_dialog_box.h"
|
||||
#include "../generic/restore_failsafe_dialog_box.h"
|
||||
#include "../generic/save_settings_dialog_box.h"
|
||||
#include "../generic/confirm_start_print_dialog_box.h"
|
||||
#include "../generic/confirm_abort_print_dialog_box.h"
|
||||
#include "../generic/confirm_user_request_alert_box.h"
|
||||
#include "../generic/touch_calibration_screen.h"
|
||||
#include "../generic/move_axis_screen.h"
|
||||
#include "../generic/steps_screen.h"
|
||||
#include "../generic/feedrate_percent_screen.h"
|
||||
#include "../generic/max_velocity_screen.h"
|
||||
#include "../generic/max_acceleration_screen.h"
|
||||
#include "../generic/default_acceleration_screen.h"
|
||||
#include "../generic/temperature_screen.h"
|
||||
#include "../generic/interface_sounds_screen.h"
|
||||
#include "../generic/interface_settings_screen.h"
|
||||
#include "../generic/lock_screen.h"
|
||||
#include "../generic/endstop_state_screen.h"
|
||||
#include "../generic/display_tuning_screen.h"
|
||||
#include "../generic/media_player_screen.h"
|
||||
#include "../generic/statistics_screen.h"
|
||||
#include "../generic/stepper_current_screen.h"
|
||||
#include "../generic/stepper_bump_sensitivity_screen.h"
|
||||
#include "../generic/leveling_menu.h"
|
||||
#include "../generic/z_offset_screen.h"
|
||||
#include "../generic/files_screen.h"
|
||||
|
||||
#include "bio_status_screen.h"
|
||||
#include "bio_main_menu.h"
|
||||
#include "bio_tune_menu.h"
|
||||
#include "bio_advanced_settings.h"
|
||||
#include "bio_printing_dialog_box.h"
|
||||
#include "bio_confirm_home_xyz.h"
|
||||
#include "bio_confirm_home_e.h"
|
@@ -0,0 +1,91 @@
|
||||
/*********************************
|
||||
* cocoa_press/leveling_menu.cpp *
|
||||
*********************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
|
||||
* Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <https://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#include "../config.h"
|
||||
#include "../screens.h"
|
||||
|
||||
#ifdef COCOA_LEVELING_MENU
|
||||
|
||||
#if BOTH(HAS_BED_PROBE,BLTOUCH)
|
||||
#include "../../../../feature/bltouch.h"
|
||||
#endif
|
||||
|
||||
using namespace FTDI;
|
||||
using namespace ExtUI;
|
||||
using namespace Theme;
|
||||
|
||||
#define GRID_ROWS 5
|
||||
#define GRID_COLS 3
|
||||
#define BED_MESH_TITLE_POS BTN_POS(1,1), BTN_SIZE(3,1)
|
||||
#define PROBE_BED_POS BTN_POS(1,2), BTN_SIZE(1,1)
|
||||
#define SHOW_MESH_POS BTN_POS(2,2), BTN_SIZE(1,1)
|
||||
#define EDIT_MESH_POS BTN_POS(3,2), BTN_SIZE(1,1)
|
||||
#define BLTOUCH_TITLE_POS BTN_POS(1,3), BTN_SIZE(3,1)
|
||||
#define BLTOUCH_RESET_POS BTN_POS(1,4), BTN_SIZE(1,1)
|
||||
#define BLTOUCH_TEST_POS BTN_POS(2,4), BTN_SIZE(1,1)
|
||||
#define BACK_POS BTN_POS(1,5), BTN_SIZE(3,1)
|
||||
|
||||
void LevelingMenu::onRedraw(draw_mode_t what) {
|
||||
if (what & BACKGROUND) {
|
||||
CommandProcessor cmd;
|
||||
cmd.cmd(CLEAR_COLOR_RGB(Theme::bg_color))
|
||||
.cmd(CLEAR(true,true,true))
|
||||
.tag(0);
|
||||
}
|
||||
|
||||
if (what & FOREGROUND) {
|
||||
CommandProcessor cmd;
|
||||
cmd.font(font_large)
|
||||
.cmd(COLOR_RGB(bg_text_enabled))
|
||||
.text(BED_MESH_TITLE_POS, GET_TEXT_F(MSG_BED_LEVELING))
|
||||
.text(BLTOUCH_TITLE_POS, GET_TEXT_F(MSG_BLTOUCH))
|
||||
.font(font_medium).colors(normal_btn)
|
||||
.tag(2).button(PROBE_BED_POS, GET_TEXT_F(MSG_PROBE_BED))
|
||||
.enabled(ENABLED(HAS_MESH))
|
||||
.tag(3).button(SHOW_MESH_POS, GET_TEXT_F(MSG_SHOW_MESH))
|
||||
.enabled(ENABLED(HAS_MESH))
|
||||
.tag(4).button(EDIT_MESH_POS, GET_TEXT_F(MSG_EDIT_MESH))
|
||||
#undef GRID_COLS
|
||||
#define GRID_COLS 2
|
||||
.tag(5).button(BLTOUCH_RESET_POS, GET_TEXT_F(MSG_BLTOUCH_RESET))
|
||||
.tag(6).button(BLTOUCH_TEST_POS, GET_TEXT_F(MSG_BLTOUCH_SELFTEST))
|
||||
#undef GRID_COLS
|
||||
#define GRID_COLS 3
|
||||
.colors(action_btn)
|
||||
.tag(1).button(BACK_POS, GET_TEXT_F(MSG_BACK));
|
||||
}
|
||||
}
|
||||
|
||||
bool LevelingMenu::onTouchEnd(uint8_t tag) {
|
||||
switch (tag) {
|
||||
case 1: GOTO_PREVIOUS(); break;
|
||||
case 2: BedMeshViewScreen::doProbe(); break;
|
||||
case 3: BedMeshViewScreen::show(); break;
|
||||
case 4: BedMeshEditScreen::show(); break;
|
||||
case 5: injectCommands_P(PSTR("M280 P0 S60")); break;
|
||||
case 6: SpinnerDialogBox::enqueueAndWait_P(F("M280 P0 S90\nG4 P100\nM280 P0 S120")); break;
|
||||
default: return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif // COCOA_LEVELING_MENU
|
@@ -0,0 +1,32 @@
|
||||
/*******************************
|
||||
* cocoa_press/leveling_menu.h *
|
||||
******************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
|
||||
* Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <https://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define COCOA_LEVELING_MENU
|
||||
#define COCOA_LEVELING_MENU_CLASS LevelingMenu
|
||||
|
||||
class LevelingMenu : public BaseScreen, public CachedScreen<LEVELING_SCREEN_CACHE> {
|
||||
public:
|
||||
static void onRedraw(draw_mode_t);
|
||||
static bool onTouchEnd(uint8_t tag);
|
||||
};
|
@@ -84,16 +84,6 @@ void PreheatTimerScreen::draw_interaction_buttons(draw_mode_t what) {
|
||||
void PreheatTimerScreen::draw_adjuster(draw_mode_t what, uint8_t tag, progmem_str label, float value, int16_t x, int16_t y, int16_t w, int16_t h) {
|
||||
#define SUB_COLS 9
|
||||
#define SUB_ROWS 2
|
||||
#define SUB_GRID_W(W) ((W)*w/SUB_COLS)
|
||||
#define SUB_GRID_H(H) ((H)*h/SUB_ROWS)
|
||||
#define SUB_GRID_X(X) (SUB_GRID_W((X)-1) + x)
|
||||
#define SUB_GRID_Y(Y) (SUB_GRID_H((Y)-1) + y)
|
||||
#define SUB_X(X) (SUB_GRID_X(X) + MARGIN_L)
|
||||
#define SUB_Y(Y) (SUB_GRID_Y(Y) + MARGIN_T)
|
||||
#define SUB_W(W) (SUB_GRID_W(W) - MARGIN_L - MARGIN_R)
|
||||
#define SUB_H(H) (SUB_GRID_H(H) - MARGIN_T - MARGIN_B)
|
||||
#define SUB_POS(X,Y) SUB_X(X), SUB_Y(Y)
|
||||
#define SUB_SIZE(W,H) SUB_W(W), SUB_H(H)
|
||||
|
||||
CommandProcessor cmd;
|
||||
cmd.tag(0)
|
||||
|
135
Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/screens.h
Normal file
135
Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/screens.h
Normal file
@@ -0,0 +1,135 @@
|
||||
/*************
|
||||
* screens.h *
|
||||
*************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
|
||||
* Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <https://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
/********************************* DL CACHE SLOTS ******************************/
|
||||
|
||||
// In order to reduce SPI traffic, we cache display lists (DL) in RAMG. This
|
||||
// is done using the CLCD::DLCache class, which takes a unique ID for each
|
||||
// cache location. These IDs are defined here:
|
||||
|
||||
enum {
|
||||
STATUS_SCREEN_CACHE,
|
||||
MENU_SCREEN_CACHE,
|
||||
TUNE_SCREEN_CACHE,
|
||||
ALERT_BOX_CACHE,
|
||||
SPINNER_CACHE,
|
||||
ADVANCED_SETTINGS_SCREEN_CACHE,
|
||||
MOVE_AXIS_SCREEN_CACHE,
|
||||
TEMPERATURE_SCREEN_CACHE,
|
||||
STEPS_SCREEN_CACHE,
|
||||
MAX_FEEDRATE_SCREEN_CACHE,
|
||||
MAX_VELOCITY_SCREEN_CACHE,
|
||||
MAX_ACCELERATION_SCREEN_CACHE,
|
||||
DEFAULT_ACCELERATION_SCREEN_CACHE,
|
||||
FLOW_PERCENT_SCREEN_CACHE,
|
||||
LEVELING_SCREEN_CACHE,
|
||||
ZOFFSET_SCREEN_CACHE,
|
||||
BED_MESH_VIEW_SCREEN_CACHE,
|
||||
BED_MESH_EDIT_SCREEN_CACHE,
|
||||
STEPPER_CURRENT_SCREEN_CACHE,
|
||||
#if HAS_JUNCTION_DEVIATION
|
||||
JUNC_DEV_SCREEN_CACHE,
|
||||
#else
|
||||
JERK_SCREEN_CACHE,
|
||||
#endif
|
||||
CASE_LIGHT_SCREEN_CACHE,
|
||||
FILAMENT_MENU_CACHE,
|
||||
LINEAR_ADVANCE_SCREEN_CACHE,
|
||||
PREHEAT_MENU_CACHE,
|
||||
PREHEAT_TIMER_SCREEN_CACHE,
|
||||
LOAD_CHOCOLATE_SCREEN_CACHE,
|
||||
MOVE_XYZ_SCREEN_CACHE,
|
||||
MOVE_E_SCREEN_CACHE,
|
||||
FILES_SCREEN_CACHE,
|
||||
INTERFACE_SETTINGS_SCREEN_CACHE,
|
||||
INTERFACE_SOUNDS_SCREEN_CACHE,
|
||||
LOCK_SCREEN_CACHE,
|
||||
DISPLAY_TIMINGS_SCREEN_CACHE
|
||||
};
|
||||
|
||||
// To save MCU RAM, the status message is "baked" in to the status screen
|
||||
// cache, so we reserve a large chunk of memory for the DL cache
|
||||
|
||||
#define STATUS_SCREEN_DL_SIZE 4096
|
||||
#define ALERT_BOX_DL_SIZE 3072
|
||||
#define SPINNER_DL_SIZE 3072
|
||||
#define FILE_SCREEN_DL_SIZE 4160
|
||||
#define PRINTING_SCREEN_DL_SIZE 2048
|
||||
|
||||
/************************* MENU SCREEN DECLARATIONS *************************/
|
||||
|
||||
#include "../generic/base_screen.h"
|
||||
#include "../generic/base_numeric_adjustment_screen.h"
|
||||
#include "../generic/dialog_box_base_class.h"
|
||||
#include "../generic/boot_screen.h"
|
||||
#include "../generic/about_screen.h"
|
||||
#include "../generic/kill_screen.h"
|
||||
#include "../generic/alert_dialog_box.h"
|
||||
#include "../generic/spinner_dialog_box.h"
|
||||
#include "../generic/restore_failsafe_dialog_box.h"
|
||||
#include "../generic/save_settings_dialog_box.h"
|
||||
#include "../generic/confirm_start_print_dialog_box.h"
|
||||
#include "../generic/confirm_abort_print_dialog_box.h"
|
||||
#include "../generic/confirm_user_request_alert_box.h"
|
||||
#include "../generic/touch_calibration_screen.h"
|
||||
#include "../generic/move_axis_screen.h"
|
||||
#include "../generic/steps_screen.h"
|
||||
#include "../generic/feedrate_percent_screen.h"
|
||||
#include "../generic/max_velocity_screen.h"
|
||||
#include "../generic/max_acceleration_screen.h"
|
||||
#include "../generic/default_acceleration_screen.h"
|
||||
#include "../generic/temperature_screen.h"
|
||||
#include "../generic/interface_sounds_screen.h"
|
||||
#include "../generic/interface_settings_screen.h"
|
||||
#include "../generic/lock_screen.h"
|
||||
#include "../generic/endstop_state_screen.h"
|
||||
#include "../generic/display_tuning_screen.h"
|
||||
#include "../generic/statistics_screen.h"
|
||||
#include "../generic/stepper_current_screen.h"
|
||||
#include "../generic/leveling_menu.h"
|
||||
#include "../generic/z_offset_screen.h"
|
||||
#include "../generic/bed_mesh_base.h"
|
||||
#include "../generic/bed_mesh_view_screen.h"
|
||||
#include "../generic/bed_mesh_edit_screen.h"
|
||||
#include "../generic/case_light_screen.h"
|
||||
#include "../generic/linear_advance_screen.h"
|
||||
#include "../generic/files_screen.h"
|
||||
#include "../generic/move_axis_screen.h"
|
||||
#include "../generic/flow_percent_screen.h"
|
||||
#include "../generic/tune_menu.h"
|
||||
#if HAS_JUNCTION_DEVIATION
|
||||
#include "../generic/junction_deviation_screen.h"
|
||||
#else
|
||||
#include "../generic/jerk_screen.h"
|
||||
#endif
|
||||
|
||||
#include "status_screen.h"
|
||||
#include "main_menu.h"
|
||||
#include "advanced_settings_menu.h"
|
||||
#include "preheat_menu.h"
|
||||
#include "preheat_screen.h"
|
||||
#include "load_chocolate.h"
|
||||
#include "move_xyz_screen.h"
|
||||
#include "move_e_screen.h"
|
@@ -45,12 +45,14 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
void onMediaInserted() {
|
||||
if (AT_SCREEN(StatusScreen))
|
||||
StatusScreen::setStatusMessage(GET_TEXT_F(MSG_MEDIA_INSERTED));
|
||||
#if ENABLED(SDSUPPORT)
|
||||
sound.play(media_inserted, PLAY_ASYNCHRONOUS);
|
||||
StatusScreen::onMediaInserted();
|
||||
#endif
|
||||
}
|
||||
|
||||
void onMediaRemoved() {
|
||||
#if ENABLED(SDSUPPORT)
|
||||
if (isPrintingFromMedia()) {
|
||||
stopPrint();
|
||||
InterfaceSoundsScreen::playEventSound(InterfaceSoundsScreen::PRINTING_FAILED);
|
||||
@@ -58,11 +60,8 @@ namespace ExtUI {
|
||||
else
|
||||
sound.play(media_removed, PLAY_ASYNCHRONOUS);
|
||||
|
||||
if (AT_SCREEN(StatusScreen) || isPrintingFromMedia())
|
||||
StatusScreen::setStatusMessage(GET_TEXT_F(MSG_MEDIA_REMOVED));
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
if (AT_SCREEN(FilesScreen)) GOTO_SCREEN(StatusScreen);
|
||||
StatusScreen::onMediaRemoved();
|
||||
FilesScreen::onMediaRemoved();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -91,20 +91,22 @@ void AboutScreen::onRedraw(draw_mode_t) {
|
||||
draw_text_box(cmd, FW_INFO_POS, about_str, OPT_CENTER, font_medium);
|
||||
draw_text_box(cmd, INSET_POS(LICENSE_POS), GET_TEXT_F(MSG_LICENSE), OPT_CENTER, font_tiny);
|
||||
|
||||
cmd.font(font_medium)
|
||||
.colors(normal_btn)
|
||||
.tag(2).button(STATS_POS, GET_TEXT_F(MSG_INFO_STATS_MENU))
|
||||
.colors(action_btn)
|
||||
cmd.font(font_medium);
|
||||
#if ENABLED(PRINTCOUNTER) && defined(FTDI_STATISTICS_SCREEN)
|
||||
cmd.colors(normal_btn)
|
||||
.tag(2).button(STATS_POS, GET_TEXT_F(MSG_INFO_STATS_MENU));
|
||||
#endif
|
||||
cmd.colors(action_btn)
|
||||
.tag(1).button(BACK_POS, GET_TEXT_F(MSG_BACK));
|
||||
}
|
||||
|
||||
bool AboutScreen::onTouchEnd(uint8_t tag) {
|
||||
switch (tag) {
|
||||
case 1: GOTO_PREVIOUS(); break;
|
||||
#if ENABLED(PRINTCOUNTER)
|
||||
#if ENABLED(PRINTCOUNTER) && defined(FTDI_STATISTICS_SCREEN)
|
||||
case 2: GOTO_SCREEN(StatisticsScreen); break;
|
||||
#endif
|
||||
#if ENABLED(TOUCH_UI_DEVELOPER_MENU)
|
||||
#if ENABLED(TOUCH_UI_DEVELOPER_MENU) && defined(FTDI_DEVELOPER_MENU)
|
||||
case 3: GOTO_SCREEN(DeveloperMenu); break;
|
||||
#endif
|
||||
default: return false;
|
||||
|
@@ -45,7 +45,7 @@ bool BaseScreen::buttonStyleCallback(CommandProcessor &cmd, uint8_t tag, uint8_t
|
||||
return false;
|
||||
}
|
||||
|
||||
#if LCD_TIMEOUT_TO_STATUS > 0
|
||||
#if SCREENS_CAN_TIME_OUT
|
||||
if (EventLoop::get_pressed_tag() != 0) {
|
||||
reset_menu_timeout();
|
||||
}
|
||||
@@ -65,7 +65,7 @@ bool BaseScreen::buttonStyleCallback(CommandProcessor &cmd, uint8_t tag, uint8_t
|
||||
}
|
||||
|
||||
void BaseScreen::onIdle() {
|
||||
#if LCD_TIMEOUT_TO_STATUS > 0
|
||||
#if SCREENS_CAN_TIME_OUT
|
||||
if ((millis() - last_interaction) > LCD_TIMEOUT_TO_STATUS) {
|
||||
reset_menu_timeout();
|
||||
#if ENABLED(TOUCH_UI_DEBUG)
|
||||
@@ -77,12 +77,10 @@ void BaseScreen::onIdle() {
|
||||
}
|
||||
|
||||
void BaseScreen::reset_menu_timeout() {
|
||||
#if LCD_TIMEOUT_TO_STATUS > 0
|
||||
last_interaction = millis();
|
||||
#endif
|
||||
TERN_(SCREENS_CAN_TIME_OUT, last_interaction = millis());
|
||||
}
|
||||
|
||||
#if LCD_TIMEOUT_TO_STATUS > 0
|
||||
#if SCREENS_CAN_TIME_OUT
|
||||
uint32_t BaseScreen::last_interaction;
|
||||
#endif
|
||||
|
||||
|
@@ -27,7 +27,7 @@
|
||||
|
||||
class BaseScreen : public UIScreen {
|
||||
protected:
|
||||
#if LCD_TIMEOUT_TO_STATUS > 0
|
||||
#if SCREENS_CAN_TIME_OUT
|
||||
static uint32_t last_interaction;
|
||||
#endif
|
||||
|
||||
|
@@ -76,7 +76,7 @@ constexpr static ChangeFilamentScreenData &mydata = screen_data.ChangeFilamentSc
|
||||
|
||||
/****************** COLOR SCALE ***********************/
|
||||
|
||||
uint32_t getWarmColor(uint16_t temp, uint16_t cool, uint16_t low, uint16_t med, uint16_t high) {
|
||||
uint32_t ChangeFilamentScreen::getWarmColor(uint16_t temp, uint16_t cool, uint16_t low, uint16_t med, uint16_t high) {
|
||||
rgb_t R0, R1, mix;
|
||||
|
||||
float t;
|
||||
|
@@ -38,9 +38,9 @@ class ChangeFilamentScreen : public BaseScreen, public CachedScreen<CHANGE_FILAM
|
||||
static uint8_t getSoftenTemp();
|
||||
static ExtUI::extruder_t getExtruder();
|
||||
static void drawTempGradient(uint16_t x, uint16_t y, uint16_t w, uint16_t h);
|
||||
static uint32_t getTempColor(uint32_t temp);
|
||||
static void doPurge();
|
||||
public:
|
||||
static uint32_t getWarmColor(uint16_t temp, uint16_t cool, uint16_t low, uint16_t med, uint16_t high);
|
||||
static void onEntry();
|
||||
static void onExit();
|
||||
static void onRedraw(draw_mode_t);
|
||||
|
@@ -262,4 +262,8 @@ void FilesScreen::onIdle() {
|
||||
#endif
|
||||
}
|
||||
|
||||
void FilesScreen::onMediaRemoved() {
|
||||
if (AT_SCREEN(FilesScreen)) GOTO_SCREEN(StatusScreen);
|
||||
}
|
||||
|
||||
#endif // FTDI_FILES_SCREEN
|
||||
|
@@ -72,4 +72,5 @@ class FilesScreen : public BaseScreen, public CachedScreen<FILES_SCREEN_CACHE, F
|
||||
static void onRedraw(draw_mode_t);
|
||||
static bool onTouchEnd(uint8_t tag);
|
||||
static void onIdle();
|
||||
static void onMediaRemoved();
|
||||
};
|
||||
|
@@ -86,11 +86,13 @@ void InterfaceSettingsScreen::onRedraw(draw_mode_t what) {
|
||||
}
|
||||
|
||||
if (what & FOREGROUND) {
|
||||
#if defined(FTDI_LOCK_SCREEN) || DISABLED(TOUCH_UI_NO_BOOTSCREEN)
|
||||
#if ENABLED(TOUCH_UI_PORTRAIT)
|
||||
constexpr uint8_t w = 2;
|
||||
#else
|
||||
constexpr uint8_t w = 1;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
cmd.font(font_medium)
|
||||
#define EDGE_R 30
|
||||
@@ -99,8 +101,10 @@ void InterfaceSettingsScreen::onRedraw(draw_mode_t what) {
|
||||
.tag(2).slider(BTN_POS(3,2), BTN_SIZE(2,1), mydata.brightness, 128)
|
||||
#endif
|
||||
.tag(3).slider(BTN_POS(3,3), BTN_SIZE(2,1), mydata.volume, 0xFF)
|
||||
#ifdef FTDI_LOCK_SCREEN
|
||||
.colors(ui_toggle)
|
||||
.tag(4).toggle2(BTN_POS(3,4), BTN_SIZE(w,1), GET_TEXT_F(MSG_NO), GET_TEXT_F(MSG_YES), LockScreen::is_enabled())
|
||||
#endif
|
||||
#if DISABLED(TOUCH_UI_NO_BOOTSCREEN)
|
||||
.tag(5).toggle2(BTN_POS(3,5), BTN_SIZE(w,1), GET_TEXT_F(MSG_NO), GET_TEXT_F(MSG_YES), UIData::animations_enabled())
|
||||
#endif
|
||||
@@ -122,12 +126,14 @@ void InterfaceSettingsScreen::onRedraw(draw_mode_t what) {
|
||||
bool InterfaceSettingsScreen::onTouchEnd(uint8_t tag) {
|
||||
switch (tag) {
|
||||
case 1: GOTO_PREVIOUS(); return true;
|
||||
#ifdef FTDI_LOCK_SCREEN
|
||||
case 4:
|
||||
if (!LockScreen::is_enabled())
|
||||
LockScreen::enable();
|
||||
else
|
||||
LockScreen::disable();
|
||||
break;
|
||||
#endif
|
||||
case 5: UIData::enable_animations(!UIData::animations_enabled());; break;
|
||||
case 6: GOTO_SCREEN(InterfaceSoundsScreen); return true;
|
||||
default:
|
||||
@@ -191,7 +197,9 @@ void InterfaceSettingsScreen::failSafeSettings() {
|
||||
}
|
||||
|
||||
void InterfaceSettingsScreen::defaultSettings() {
|
||||
#ifdef FTDI_LOCK_SCREEN
|
||||
LockScreen::passcode = 0;
|
||||
#endif
|
||||
SoundPlayer::set_volume(255);
|
||||
CLCD::set_brightness(255);
|
||||
UIData::reset_persistent_data();
|
||||
@@ -210,7 +218,11 @@ void InterfaceSettingsScreen::saveSettings(char *buff) {
|
||||
|
||||
persistent_data_t eeprom;
|
||||
|
||||
#ifdef FTDI_LOCK_SCREEN
|
||||
eeprom.passcode = LockScreen::passcode;
|
||||
#else
|
||||
eeprom.passcode = 0;
|
||||
#endif
|
||||
eeprom.sound_volume = SoundPlayer::get_volume();
|
||||
eeprom.display_brightness = CLCD::get_brightness();
|
||||
eeprom.bit_flags = UIData::get_persistent_data();
|
||||
@@ -239,7 +251,9 @@ void InterfaceSettingsScreen::loadSettings(const char *buff) {
|
||||
|
||||
SERIAL_ECHOLNPGM("Loading setting from EEPROM");
|
||||
|
||||
#ifdef FTDI_LOCK_SCREEN
|
||||
LockScreen::passcode = eeprom.passcode;
|
||||
#endif
|
||||
SoundPlayer::set_volume(eeprom.sound_volume);
|
||||
UIData::set_persistent_data(eeprom.bit_flags);
|
||||
CLCD::set_brightness(eeprom.display_brightness);
|
||||
|
@@ -132,4 +132,3 @@ bool LevelingMenu::onTouchEnd(uint8_t tag) {
|
||||
}
|
||||
|
||||
#endif // FTDI_LEVELING_MENU
|
||||
|
||||
|
224
Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/screens.h
Normal file
224
Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/screens.h
Normal file
@@ -0,0 +1,224 @@
|
||||
/*************
|
||||
* screens.h *
|
||||
*************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
|
||||
* Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <https://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
/********************************* DL CACHE SLOTS ******************************/
|
||||
|
||||
// In order to reduce SPI traffic, we cache display lists (DL) in RAMG. This
|
||||
// is done using the CLCD::DLCache class, which takes a unique ID for each
|
||||
// cache location. These IDs are defined here:
|
||||
|
||||
enum {
|
||||
STATUS_SCREEN_CACHE,
|
||||
MENU_SCREEN_CACHE,
|
||||
TUNE_SCREEN_CACHE,
|
||||
ALERT_BOX_CACHE,
|
||||
SPINNER_CACHE,
|
||||
ADVANCED_SETTINGS_SCREEN_CACHE,
|
||||
MOVE_AXIS_SCREEN_CACHE,
|
||||
TEMPERATURE_SCREEN_CACHE,
|
||||
STEPS_SCREEN_CACHE,
|
||||
MAX_FEEDRATE_SCREEN_CACHE,
|
||||
MAX_VELOCITY_SCREEN_CACHE,
|
||||
MAX_ACCELERATION_SCREEN_CACHE,
|
||||
DEFAULT_ACCELERATION_SCREEN_CACHE,
|
||||
FLOW_PERCENT_SCREEN_CACHE,
|
||||
#if HAS_LEVELING
|
||||
LEVELING_SCREEN_CACHE,
|
||||
#if HAS_BED_PROBE
|
||||
ZOFFSET_SCREEN_CACHE,
|
||||
#endif
|
||||
#if HAS_MESH
|
||||
BED_MESH_VIEW_SCREEN_CACHE,
|
||||
BED_MESH_EDIT_SCREEN_CACHE,
|
||||
#endif
|
||||
#endif
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
ADJUST_OFFSETS_SCREEN_CACHE,
|
||||
#endif
|
||||
#if HAS_TRINAMIC_CONFIG
|
||||
STEPPER_CURRENT_SCREEN_CACHE,
|
||||
STEPPER_BUMP_SENSITIVITY_SCREEN_CACHE,
|
||||
#endif
|
||||
#if HAS_MULTI_HOTEND
|
||||
NOZZLE_OFFSET_SCREEN_CACHE,
|
||||
#endif
|
||||
#if ENABLED(BACKLASH_GCODE)
|
||||
BACKLASH_COMPENSATION_SCREEN_CACHE,
|
||||
#endif
|
||||
#if HAS_JUNCTION_DEVIATION
|
||||
JUNC_DEV_SCREEN_CACHE,
|
||||
#else
|
||||
JERK_SCREEN_CACHE,
|
||||
#endif
|
||||
#if ENABLED(CASE_LIGHT_ENABLE)
|
||||
CASE_LIGHT_SCREEN_CACHE,
|
||||
#endif
|
||||
#if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)
|
||||
FILAMENT_MENU_CACHE,
|
||||
#endif
|
||||
#if ENABLED(LIN_ADVANCE)
|
||||
LINEAR_ADVANCE_SCREEN_CACHE,
|
||||
#endif
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
|
||||
FILAMENT_RUNOUT_SCREEN_CACHE,
|
||||
#endif
|
||||
#if ENABLED(SDSUPPORT)
|
||||
FILES_SCREEN_CACHE,
|
||||
#endif
|
||||
#if ENABLED(CUSTOM_MENU_MAIN)
|
||||
CUSTOM_USER_MENUS_SCREEN_CACHE,
|
||||
#endif
|
||||
CHANGE_FILAMENT_SCREEN_CACHE,
|
||||
INTERFACE_SETTINGS_SCREEN_CACHE,
|
||||
INTERFACE_SOUNDS_SCREEN_CACHE,
|
||||
LOCK_SCREEN_CACHE,
|
||||
DISPLAY_TIMINGS_SCREEN_CACHE
|
||||
};
|
||||
|
||||
// To save MCU RAM, the status message is "baked" in to the status screen
|
||||
// cache, so we reserve a large chunk of memory for the DL cache
|
||||
|
||||
#define STATUS_SCREEN_DL_SIZE 4096
|
||||
#define ALERT_BOX_DL_SIZE 3072
|
||||
#define SPINNER_DL_SIZE 3072
|
||||
#define FILE_SCREEN_DL_SIZE 4160
|
||||
#define PRINTING_SCREEN_DL_SIZE 2048
|
||||
|
||||
/************************* MENU SCREEN DECLARATIONS *************************/
|
||||
|
||||
#include "base_screen.h"
|
||||
#include "base_numeric_adjustment_screen.h"
|
||||
#include "dialog_box_base_class.h"
|
||||
#include "status_screen.h"
|
||||
#include "main_menu.h"
|
||||
#include "advanced_settings_menu.h"
|
||||
#include "tune_menu.h"
|
||||
#include "boot_screen.h"
|
||||
#include "about_screen.h"
|
||||
#include "kill_screen.h"
|
||||
#include "alert_dialog_box.h"
|
||||
#include "spinner_dialog_box.h"
|
||||
#include "restore_failsafe_dialog_box.h"
|
||||
#include "save_settings_dialog_box.h"
|
||||
#include "confirm_start_print_dialog_box.h"
|
||||
#include "confirm_abort_print_dialog_box.h"
|
||||
#include "confirm_user_request_alert_box.h"
|
||||
#include "touch_calibration_screen.h"
|
||||
#include "touch_registers_screen.h"
|
||||
#include "change_filament_screen.h"
|
||||
#include "move_axis_screen.h"
|
||||
#include "steps_screen.h"
|
||||
#include "feedrate_percent_screen.h"
|
||||
#include "max_velocity_screen.h"
|
||||
#include "max_acceleration_screen.h"
|
||||
#include "default_acceleration_screen.h"
|
||||
#include "temperature_screen.h"
|
||||
#include "interface_sounds_screen.h"
|
||||
#include "interface_settings_screen.h"
|
||||
#include "lock_screen.h"
|
||||
#include "endstop_state_screen.h"
|
||||
#include "display_tuning_screen.h"
|
||||
#include "media_player_screen.h"
|
||||
|
||||
#if ENABLED(PRINTCOUNTER)
|
||||
#include "statistics_screen.h"
|
||||
#endif
|
||||
|
||||
#if HAS_TRINAMIC_CONFIG
|
||||
#include "stepper_current_screen.h"
|
||||
#include "stepper_bump_sensitivity_screen.h"
|
||||
#endif
|
||||
|
||||
#if HAS_MULTI_HOTEND
|
||||
#include "nozzle_offsets_screen.h"
|
||||
#endif
|
||||
|
||||
#if HAS_LEVELING
|
||||
#if ENABLED(TOUCH_UI_SYNDAVER_LEVEL)
|
||||
#include "syndaver_level/leveling_menu.h"
|
||||
#else
|
||||
#include "leveling_menu.h"
|
||||
#endif
|
||||
#if HAS_BED_PROBE
|
||||
#include "z_offset_screen.h"
|
||||
#endif
|
||||
#if HAS_MESH
|
||||
#include "bed_mesh_base.h"
|
||||
#include "bed_mesh_view_screen.h"
|
||||
#include "bed_mesh_edit_screen.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(CALIBRATION_GCODE)
|
||||
#include "confirm_auto_calibration_dialog_box.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
#include "nudge_nozzle_screen.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(BACKLASH_GCODE)
|
||||
#include "backlash_compensation_screen.h"
|
||||
#endif
|
||||
|
||||
#if HAS_JUNCTION_DEVIATION
|
||||
#include "junction_deviation_screen.h"
|
||||
#else
|
||||
#include "jerk_screen.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(CASE_LIGHT_ENABLE)
|
||||
#include "case_light_screen.h"
|
||||
#endif
|
||||
|
||||
#if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)
|
||||
#include "filament_menu.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
|
||||
#include "filament_runout_screen.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(LIN_ADVANCE)
|
||||
#include "linear_advance_screen.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
#include "files_screen.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(CUSTOM_MENU_MAIN)
|
||||
#include "custom_user_menus.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(TOUCH_UI_DEVELOPER_MENU)
|
||||
#include "developer_menu.h"
|
||||
#include "confirm_erase_flash_dialog_box.h"
|
||||
#include "widget_demo_screen.h"
|
||||
#include "stress_test_screen.h"
|
||||
#endif
|
||||
|
||||
#if NUM_LANGUAGES > 1
|
||||
#include "language_menu.h"
|
||||
#endif
|
@@ -461,4 +461,14 @@ bool StatusScreen::onTouchEnd(uint8_t tag) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void StatusScreen::onMediaInserted() {
|
||||
if (AT_SCREEN(StatusScreen))
|
||||
setStatusMessage(GET_TEXT_F(MSG_MEDIA_INSERTED));
|
||||
}
|
||||
|
||||
void StatusScreen::onMediaRemoved() {
|
||||
if (AT_SCREEN(StatusScreen) || ExtUI::isPrintingFromMedia())
|
||||
setStatusMessage(GET_TEXT_F(MSG_MEDIA_REMOVED));
|
||||
}
|
||||
|
||||
#endif // FTDI_STATUS_SCREEN
|
||||
|
@@ -42,4 +42,6 @@ class StatusScreen : public BaseScreen, public CachedScreen<STATUS_SCREEN_CACHE,
|
||||
static void onEntry();
|
||||
static void onIdle();
|
||||
static bool onTouchEnd(uint8_t tag);
|
||||
static void onMediaInserted();
|
||||
static void onMediaRemoved();
|
||||
};
|
||||
|
@@ -34,28 +34,53 @@
|
||||
* Formats a temperature string (e.g. "100°C")
|
||||
*/
|
||||
void format_temp(char *str, const_celsius_float_t t1) {
|
||||
#ifdef TOUCH_UI_LCD_TEMP_PRECISION
|
||||
char num1[7];
|
||||
dtostrf(t1, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num1);
|
||||
sprintf_P(str, PSTR("%s" S_FMT), num1, GET_TEXT(MSG_UNITS_C));
|
||||
#else
|
||||
sprintf_P(str, PSTR("%3d" S_FMT), ROUND(t1), GET_TEXT(MSG_UNITS_C));
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats a temperature string for an idle heater (e.g. "100 °C / idle")
|
||||
*/
|
||||
void format_temp_and_idle(char *str, const_celsius_float_t t1) {
|
||||
#ifdef TOUCH_UI_LCD_TEMP_PRECISION
|
||||
char num1[7];
|
||||
dtostrf(t1, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num1);
|
||||
sprintf_P(str, PSTR("%s" S_FMT " / " S_FMT), num1, GET_TEXT(MSG_UNITS_C), GET_TEXT(MSG_IDLE));
|
||||
#else
|
||||
sprintf_P(str, PSTR("%3d" S_FMT " / " S_FMT), ROUND(t1), GET_TEXT(MSG_UNITS_C), GET_TEXT(MSG_IDLE));
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats a temperature string for an active heater (e.g. "100 / 200°C")
|
||||
*/
|
||||
void format_temp_and_temp(char *str, const_celsius_float_t t1, const_celsius_float_t t2) {
|
||||
#ifdef TOUCH_UI_LCD_TEMP_PRECISION
|
||||
char num1[7], num2[7];
|
||||
dtostrf(t1, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num1);
|
||||
dtostrf(t2, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num2);
|
||||
sprintf_P(str, PSTR("%s / %s" S_FMT), num1, num2, GET_TEXT(MSG_UNITS_C));
|
||||
#else
|
||||
sprintf_P(str, PSTR("%3d / %3d" S_FMT), ROUND(t1), ROUND(t2), GET_TEXT(MSG_UNITS_C));
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats a temperature string for a material (e.g. "100°C (PLA)")
|
||||
*/
|
||||
void format_temp_and_material(char *str, const_celsius_float_t t1, const char *material) {
|
||||
#ifdef TOUCH_UI_LCD_TEMP_PRECISION
|
||||
char num1[7];
|
||||
dtostrf(t1, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num1);
|
||||
sprintf_P(str, PSTR("%s" S_FMT " (" S_FMT ")"), num1, GET_TEXT(MSG_UNITS_C), material);
|
||||
#else
|
||||
sprintf_P(str, PSTR("%3d" S_FMT " (" S_FMT ")"), ROUND(t1), GET_TEXT(MSG_UNITS_C), material);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -36,7 +36,14 @@ constexpr static ZOffsetScreenData &mydata = screen_data.ZOffsetScreen;
|
||||
|
||||
void ZOffsetScreen::onEntry() {
|
||||
mydata.z = SHEET_THICKNESS;
|
||||
mydata.softEndstopState = getSoftEndstopState();
|
||||
BaseNumericAdjustmentScreen::onEntry();
|
||||
if (wizardRunning())
|
||||
setSoftEndstopState(false);
|
||||
}
|
||||
|
||||
void ZOffsetScreen::onExit() {
|
||||
setSoftEndstopState(mydata.softEndstopState);
|
||||
}
|
||||
|
||||
void ZOffsetScreen::onRedraw(draw_mode_t what) {
|
||||
@@ -50,17 +57,13 @@ void ZOffsetScreen::onRedraw(draw_mode_t what) {
|
||||
}
|
||||
|
||||
void ZOffsetScreen::move(float mm, int16_t steps) {
|
||||
// We can't store state after the call to the AlertBox, so
|
||||
// check whether the current position equal mydata.z in order
|
||||
// to know whether the user started the wizard.
|
||||
if (getAxisPosition_mm(Z) == mydata.z) {
|
||||
// In the wizard
|
||||
if (wizardRunning()) {
|
||||
mydata.z += mm;
|
||||
setAxisPosition_mm(mydata.z, Z);
|
||||
}
|
||||
else {
|
||||
// Otherwise doing a manual adjustment, possibly during a print.
|
||||
babystepAxis_steps(steps, Z);
|
||||
TERN(BABYSTEPPING, babystepAxis_steps(steps, Z), UNUSED(steps));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,9 +87,16 @@ void ZOffsetScreen::runWizard() {
|
||||
AlertDialogBox::show(PSTR("After the printer finishes homing, adjust the Z Offset so that a sheet of paper can pass between the nozzle and bed with slight resistance."));
|
||||
}
|
||||
|
||||
bool ZOffsetScreen::wizardRunning() {
|
||||
// We can't store state after the call to the AlertBox, so
|
||||
// check whether the current Z position equals mydata.z in order
|
||||
// to know whether the user started the wizard.
|
||||
return getAxisPosition_mm(Z) == mydata.z;
|
||||
}
|
||||
|
||||
bool ZOffsetScreen::onTouchHeld(uint8_t tag) {
|
||||
const int16_t steps = mmToWholeSteps(getIncrement(), Z);
|
||||
const float increment = mmFromWholeSteps(steps, Z);
|
||||
const int16_t steps = TERN(BABYSTEPPING, mmToWholeSteps(getIncrement(), Z), 0);
|
||||
const float increment = TERN(BABYSTEPPING, mmFromWholeSteps(steps, Z), getIncrement());
|
||||
switch (tag) {
|
||||
case 2: runWizard(); break;
|
||||
case 4: UI_DECREMENT(ZOffset_mm); move(-increment, -steps); break;
|
||||
|
@@ -27,14 +27,17 @@
|
||||
|
||||
struct ZOffsetScreenData : public BaseNumericAdjustmentScreenData {
|
||||
float z;
|
||||
bool softEndstopState;
|
||||
};
|
||||
|
||||
class ZOffsetScreen : public BaseNumericAdjustmentScreen, public CachedScreen<ZOFFSET_SCREEN_CACHE> {
|
||||
private:
|
||||
static void move(float mm, int16_t steps);
|
||||
static void runWizard();
|
||||
static bool wizardRunning();
|
||||
public:
|
||||
static void onEntry();
|
||||
static void onExit();
|
||||
static void onRedraw(draw_mode_t);
|
||||
static bool onTouchHeld(uint8_t tag);
|
||||
};
|
||||
|
@@ -113,6 +113,7 @@ SCREEN_TABLE {
|
||||
DECL_SCREEN_IF_INCLUDED(COCOA_PREHEAT_MENU)
|
||||
DECL_SCREEN_IF_INCLUDED(COCOA_PREHEAT_SCREEN)
|
||||
DECL_SCREEN_IF_INCLUDED(COCOA_LOAD_CHOCOLATE_SCREEN)
|
||||
DECL_SCREEN_IF_INCLUDED(COCOA_LEVELING_MENU)
|
||||
DECL_SCREEN_IF_INCLUDED(COCOA_MOVE_XYZ_SCREEN)
|
||||
DECL_SCREEN_IF_INCLUDED(COCOA_MOVE_E_SCREEN)
|
||||
};
|
||||
|
@@ -37,237 +37,14 @@
|
||||
|
||||
extern tiny_timer_t refresh_timer;
|
||||
|
||||
/********************************* DL CACHE SLOTS ******************************/
|
||||
|
||||
// In order to reduce SPI traffic, we cache display lists (DL) in RAMG. This
|
||||
// is done using the CLCD::DLCache class, which takes a unique ID for each
|
||||
// cache location. These IDs are defined here:
|
||||
|
||||
enum {
|
||||
STATUS_SCREEN_CACHE,
|
||||
MENU_SCREEN_CACHE,
|
||||
TUNE_SCREEN_CACHE,
|
||||
ALERT_BOX_CACHE,
|
||||
SPINNER_CACHE,
|
||||
ADVANCED_SETTINGS_SCREEN_CACHE,
|
||||
MOVE_AXIS_SCREEN_CACHE,
|
||||
TEMPERATURE_SCREEN_CACHE,
|
||||
STEPS_SCREEN_CACHE,
|
||||
MAX_FEEDRATE_SCREEN_CACHE,
|
||||
MAX_VELOCITY_SCREEN_CACHE,
|
||||
MAX_ACCELERATION_SCREEN_CACHE,
|
||||
DEFAULT_ACCELERATION_SCREEN_CACHE,
|
||||
FLOW_PERCENT_SCREEN_CACHE,
|
||||
#if HAS_LEVELING
|
||||
LEVELING_SCREEN_CACHE,
|
||||
#if HAS_BED_PROBE
|
||||
ZOFFSET_SCREEN_CACHE,
|
||||
#endif
|
||||
#if HAS_MESH
|
||||
BED_MESH_VIEW_SCREEN_CACHE,
|
||||
BED_MESH_EDIT_SCREEN_CACHE,
|
||||
#endif
|
||||
#endif
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
ADJUST_OFFSETS_SCREEN_CACHE,
|
||||
#endif
|
||||
#if HAS_TRINAMIC_CONFIG
|
||||
STEPPER_CURRENT_SCREEN_CACHE,
|
||||
STEPPER_BUMP_SENSITIVITY_SCREEN_CACHE,
|
||||
#endif
|
||||
#if HAS_MULTI_HOTEND
|
||||
NOZZLE_OFFSET_SCREEN_CACHE,
|
||||
#endif
|
||||
#if ENABLED(BACKLASH_GCODE)
|
||||
BACKLASH_COMPENSATION_SCREEN_CACHE,
|
||||
#endif
|
||||
#if HAS_JUNCTION_DEVIATION
|
||||
JUNC_DEV_SCREEN_CACHE,
|
||||
#else
|
||||
JERK_SCREEN_CACHE,
|
||||
#endif
|
||||
#if ENABLED(CASE_LIGHT_ENABLE)
|
||||
CASE_LIGHT_SCREEN_CACHE,
|
||||
#endif
|
||||
#if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)
|
||||
FILAMENT_MENU_CACHE,
|
||||
#endif
|
||||
#if ENABLED(LIN_ADVANCE)
|
||||
LINEAR_ADVANCE_SCREEN_CACHE,
|
||||
#endif
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
|
||||
FILAMENT_RUNOUT_SCREEN_CACHE,
|
||||
#endif
|
||||
#if ENABLED(TOUCH_UI_LULZBOT_BIO)
|
||||
PRINTING_SCREEN_CACHE,
|
||||
#endif
|
||||
#if ENABLED(TOUCH_UI_COCOA_PRESS)
|
||||
PREHEAT_MENU_CACHE,
|
||||
PREHEAT_TIMER_SCREEN_CACHE,
|
||||
LOAD_CHOCOLATE_SCREEN_CACHE,
|
||||
MOVE_XYZ_SCREEN_CACHE,
|
||||
MOVE_E_SCREEN_CACHE,
|
||||
#endif
|
||||
#if ENABLED(SDSUPPORT)
|
||||
FILES_SCREEN_CACHE,
|
||||
#endif
|
||||
#if ENABLED(CUSTOM_MENU_MAIN)
|
||||
CUSTOM_USER_MENUS_SCREEN_CACHE,
|
||||
#endif
|
||||
CHANGE_FILAMENT_SCREEN_CACHE,
|
||||
INTERFACE_SETTINGS_SCREEN_CACHE,
|
||||
INTERFACE_SOUNDS_SCREEN_CACHE,
|
||||
LOCK_SCREEN_CACHE,
|
||||
DISPLAY_TIMINGS_SCREEN_CACHE
|
||||
};
|
||||
|
||||
// To save MCU RAM, the status message is "baked" in to the status screen
|
||||
// cache, so we reserve a large chunk of memory for the DL cache
|
||||
|
||||
#define STATUS_SCREEN_DL_SIZE 4096
|
||||
#define ALERT_BOX_DL_SIZE 3072
|
||||
#define SPINNER_DL_SIZE 3072
|
||||
#define FILE_SCREEN_DL_SIZE 4160
|
||||
#define PRINTING_SCREEN_DL_SIZE 2048
|
||||
|
||||
/************************* MENU SCREEN DECLARATIONS *************************/
|
||||
|
||||
#include "generic/base_screen.h"
|
||||
#include "generic/base_numeric_adjustment_screen.h"
|
||||
#include "generic/dialog_box_base_class.h"
|
||||
|
||||
#if ENABLED(TOUCH_UI_LULZBOT_BIO)
|
||||
#include "bio_status_screen.h"
|
||||
#include "bio_main_menu.h"
|
||||
#include "bio_tune_menu.h"
|
||||
#include "bio_advanced_settings.h"
|
||||
#include "bio_printing_dialog_box.h"
|
||||
#include "bio_confirm_home_xyz.h"
|
||||
#include "bio_confirm_home_e.h"
|
||||
|
||||
#include "bioprinter/screens.h"
|
||||
#elif ENABLED(TOUCH_UI_COCOA_PRESS)
|
||||
#include "generic/move_axis_screen.h"
|
||||
#include "generic/flow_percent_screen.h"
|
||||
#include "generic/tune_menu.h"
|
||||
#include "cocoa_press/status_screen.h"
|
||||
#include "cocoa_press/main_menu.h"
|
||||
#include "cocoa_press/advanced_settings_menu.h"
|
||||
#include "cocoa_press/preheat_menu.h"
|
||||
#include "cocoa_press/preheat_screen.h"
|
||||
#include "cocoa_press/load_chocolate.h"
|
||||
#include "cocoa_press/move_xyz_screen.h"
|
||||
#include "cocoa_press/move_e_screen.h"
|
||||
|
||||
#include "cocoapress/screens.h"
|
||||
#elif ENABLED(TOUCH_UI_SYNDAVER_LEVEL)
|
||||
#include "syndaver_level/screens.h"
|
||||
#else
|
||||
#include "generic/status_screen.h"
|
||||
#include "generic/main_menu.h"
|
||||
#include "generic/advanced_settings_menu.h"
|
||||
#include "generic/tune_menu.h"
|
||||
#endif
|
||||
|
||||
#include "generic/boot_screen.h"
|
||||
#include "generic/about_screen.h"
|
||||
#include "generic/kill_screen.h"
|
||||
#include "generic/alert_dialog_box.h"
|
||||
#include "generic/spinner_dialog_box.h"
|
||||
#include "generic/restore_failsafe_dialog_box.h"
|
||||
#include "generic/save_settings_dialog_box.h"
|
||||
#include "generic/confirm_start_print_dialog_box.h"
|
||||
#include "generic/confirm_abort_print_dialog_box.h"
|
||||
#include "generic/confirm_user_request_alert_box.h"
|
||||
#include "generic/touch_calibration_screen.h"
|
||||
#include "generic/touch_registers_screen.h"
|
||||
#include "generic/change_filament_screen.h"
|
||||
#include "generic/move_axis_screen.h"
|
||||
#include "generic/steps_screen.h"
|
||||
#include "generic/feedrate_percent_screen.h"
|
||||
#include "generic/max_velocity_screen.h"
|
||||
#include "generic/max_acceleration_screen.h"
|
||||
#include "generic/default_acceleration_screen.h"
|
||||
#include "generic/temperature_screen.h"
|
||||
#include "generic/interface_sounds_screen.h"
|
||||
#include "generic/interface_settings_screen.h"
|
||||
#include "generic/lock_screen.h"
|
||||
#include "generic/endstop_state_screen.h"
|
||||
#include "generic/display_tuning_screen.h"
|
||||
#include "generic/media_player_screen.h"
|
||||
|
||||
#if ENABLED(PRINTCOUNTER)
|
||||
#include "generic/statistics_screen.h"
|
||||
#endif
|
||||
|
||||
#if HAS_TRINAMIC_CONFIG
|
||||
#include "generic/stepper_current_screen.h"
|
||||
#include "generic/stepper_bump_sensitivity_screen.h"
|
||||
#endif
|
||||
|
||||
#if HAS_MULTI_HOTEND
|
||||
#include "generic/nozzle_offsets_screen.h"
|
||||
#endif
|
||||
|
||||
#if HAS_LEVELING
|
||||
#include "generic/leveling_menu.h"
|
||||
#if HAS_BED_PROBE
|
||||
#include "generic/z_offset_screen.h"
|
||||
#endif
|
||||
#if HAS_MESH
|
||||
#include "generic/bed_mesh_base.h"
|
||||
#include "generic/bed_mesh_view_screen.h"
|
||||
#include "generic/bed_mesh_edit_screen.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(CALIBRATION_GCODE)
|
||||
#include "generic/confirm_auto_calibration_dialog_box.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
#include "generic/nudge_nozzle_screen.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(BACKLASH_GCODE)
|
||||
#include "generic/backlash_compensation_screen.h"
|
||||
#endif
|
||||
|
||||
#if HAS_JUNCTION_DEVIATION
|
||||
#include "generic/junction_deviation_screen.h"
|
||||
#else
|
||||
#include "generic/jerk_screen.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(CASE_LIGHT_ENABLE)
|
||||
#include "generic/case_light_screen.h"
|
||||
#endif
|
||||
|
||||
#if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)
|
||||
#include "generic/filament_menu.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
|
||||
#include "generic/filament_runout_screen.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(LIN_ADVANCE)
|
||||
#include "generic/linear_advance_screen.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
#include "generic/files_screen.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(CUSTOM_MENU_MAIN)
|
||||
#include "generic/custom_user_menus.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(TOUCH_UI_DEVELOPER_MENU)
|
||||
#include "generic/developer_menu.h"
|
||||
#include "generic/confirm_erase_flash_dialog_box.h"
|
||||
#include "generic/widget_demo_screen.h"
|
||||
#include "generic/stress_test_screen.h"
|
||||
#endif
|
||||
|
||||
#if NUM_LANGUAGES > 1
|
||||
#include "generic/language_menu.h"
|
||||
#include "generic/screens.h"
|
||||
#endif
|
||||
|
||||
#endif // TOUCH_UI_FTDI_EVE
|
||||
|
@@ -108,6 +108,7 @@ namespace Theme {
|
||||
|
||||
constexpr uint32_t bed_mesh_lines_rgb = accent_color_6;
|
||||
constexpr uint32_t bed_mesh_shadow_rgb = 0x444444;
|
||||
#define BED_MESH_POINTS_GRAY
|
||||
#else
|
||||
constexpr uint32_t theme_darkest = gray_color_1;
|
||||
constexpr uint32_t theme_dark = gray_color_2;
|
||||
|
@@ -305,7 +305,7 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
float getAxisPosition_mm(const axis_t axis) {
|
||||
return TERN0(JOYSTICK, flags.jogging) ? destination[axis] : current_position[axis];
|
||||
return current_position[axis];
|
||||
}
|
||||
|
||||
float getAxisPosition_mm(const extruder_t extruder) {
|
||||
@@ -1033,10 +1033,10 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
bool isPrintingFromMediaPaused() {
|
||||
return TERN0(SDSUPPORT, isPrintingFromMedia() && printingIsPaused());
|
||||
return TERN0(SDSUPPORT, IS_SD_PAUSED());
|
||||
}
|
||||
|
||||
bool isPrintingFromMedia() { return IS_SD_PRINTING(); }
|
||||
bool isPrintingFromMedia() { return TERN0(SDSUPPORT, IS_SD_PRINTING() || IS_SD_PAUSED()); }
|
||||
|
||||
bool isPrinting() {
|
||||
return commandsInQueue() || isPrintingFromMedia() || printJobOngoing() || printingIsPaused();
|
||||
|
@@ -89,6 +89,7 @@ namespace Language_an {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mover 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidat");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Base Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Boquilla");
|
||||
|
@@ -79,6 +79,7 @@ namespace Language_bg {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Премести с 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Премести с 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Премести с 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Премести с 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Скорост");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" Дюза");
|
||||
|
@@ -89,6 +89,7 @@ namespace Language_ca {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mou 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mou 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mou 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mou 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Velocitat");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Llit Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
|
||||
|
@@ -241,6 +241,7 @@ namespace Language_cz {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Posunout o 0,1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Posunout o 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Posunout o 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Posunout o 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Rychlost");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Výška podl.");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Tryska");
|
||||
|
@@ -79,6 +79,7 @@ namespace Language_da {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Flyt 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Flyt 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Flyt 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Flyt 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Hastighed");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Plade Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Dyse");
|
||||
|
@@ -234,6 +234,7 @@ namespace Language_de {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT(" 0,1 mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT(" 1,0 mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT(" 10,0 mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("100,0 mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Geschw.");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Bett Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Düse");
|
||||
|
@@ -87,6 +87,7 @@ namespace Language_el {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Μετακίνηση 0,1 μμ");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Μετακίνηση 1 μμ");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Μετακίνηση 10 μμ");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Μετακίνηση 100 μμ");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Ταχύτητα");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Επ. Εκτύπωσης Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Ακροφύσιο");
|
||||
|
@@ -88,6 +88,7 @@ namespace Language_el_gr {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Μετακίνηση 0,1 μμ");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Μετακίνηση 1 μμ");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Μετακίνηση 10 μμ");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Μετακίνηση 100 μμ");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Ταχύτητα");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Κλίνη Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Ακροφύσιο");
|
||||
|
@@ -281,9 +281,11 @@ namespace Language_en {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Move 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Move 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Move 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Move 100mm");
|
||||
PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Move 0.001in");
|
||||
PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Move 0.01in");
|
||||
PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Move 0.1in");
|
||||
PROGMEM Language_Str MSG_MOVE_1IN = _UxGT("Move 1.0in");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Speed");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
|
||||
@@ -590,9 +592,9 @@ namespace Language_en {
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_X = _UxGT("X Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_Y = _UxGT("Y Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_Z = _UxGT("Z Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_I = _UxGT("I Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_J = _UxGT("J Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_K = _UxGT("K Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_I = AXIS4_STR _UxGT(" Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_J = AXIS5_STR _UxGT(" Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_K = AXIS6_STR _UxGT(" Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Driver %");
|
||||
PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC CONNECTION ERROR");
|
||||
PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Write");
|
||||
|
@@ -236,6 +236,7 @@ namespace Language_es {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mover 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidad");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Cama Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Boquilla");
|
||||
|
@@ -143,6 +143,7 @@ namespace Language_eu {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mugitu 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mugitu 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mugitu 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mugitu 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Abiadura");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Z Ohea");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Pita");
|
||||
|
@@ -76,6 +76,7 @@ namespace Language_fi {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Liikuta 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Liikuta 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Liikuta 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Liikuta 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Nopeus");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Suutin");
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Suutin ~");
|
||||
|
@@ -235,6 +235,7 @@ namespace Language_fr {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Déplacer 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Déplacer 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Déplacer 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Déplacer 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Vitesse");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Lit Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Buse");
|
||||
|
@@ -233,6 +233,7 @@ namespace Language_gl {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mover 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidade");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Cama Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Bico");
|
||||
|
@@ -83,6 +83,7 @@ namespace Language_hr {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Miči 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Miči 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Miči 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Miči 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Brzina");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Dizna");
|
||||
|
@@ -266,6 +266,7 @@ namespace Language_hu {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mozgás 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mozgás 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mozgás 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mozgás 100mm");
|
||||
PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Mozgás 0.001mm");
|
||||
PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Mozgás 0.01mm");
|
||||
PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Mozgás 0.1mm");
|
||||
|
@@ -67,9 +67,12 @@ namespace Language_it {
|
||||
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_AUTO_HOME = _UxGT("Auto Home");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Home asse X");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Home asse Y");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Home asse Z");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Home X");
|
||||
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_I = _UxGT("Home ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_J = _UxGT("Home ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_K = _UxGT("Home ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Allineam.automat. Z");
|
||||
PROGMEM Language_Str MSG_ITERATION = _UxGT("Iterazione G34: %i");
|
||||
PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Precisione in calo!");
|
||||
@@ -80,6 +83,12 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Livel. terminato!");
|
||||
PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Fade Height");
|
||||
PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Imp. offset home");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Offset home X");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Offset home Y");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Offset home Z");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_I = _UxGT("Offset home ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_J = _UxGT("Offset home ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_K = _UxGT("Offset home ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offset applicato");
|
||||
PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Imposta Origine");
|
||||
PROGMEM Language_Str MSG_ASSISTED_TRAMMING = _UxGT("Tramming assistito");
|
||||
@@ -112,10 +121,13 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Potenza laser");
|
||||
PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Potenza mandrino");
|
||||
PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Alterna Laser");
|
||||
PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE = _UxGT("Alterna soffiatore");
|
||||
PROGMEM Language_Str MSG_LASER_ASSIST_TOGGLE = _UxGT("Alterna aria supp.");
|
||||
PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("ms impulso di test");
|
||||
PROGMEM Language_Str MSG_LASER_FIRE_PULSE = _UxGT("Spara impulso");
|
||||
PROGMEM Language_Str MSG_FLOWMETER_FAULT = _UxGT("Err.flusso refrig.");
|
||||
PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Alterna mandrino");
|
||||
PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Alterna vuoto");
|
||||
PROGMEM Language_Str MSG_SPINDLE_FORWARD = _UxGT("Mandrino in avanti");
|
||||
PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Inverti mandrino");
|
||||
PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Accendi aliment.");
|
||||
@@ -158,6 +170,7 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Livel.letto unificato");
|
||||
PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Punto inclinaz.");
|
||||
PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Mesh Manuale");
|
||||
PROGMEM Language_Str MSG_UBL_MESH_WIZARD = _UxGT("Creaz.guid.mesh UBL");
|
||||
PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Metti spes. e misura");
|
||||
PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Misura");
|
||||
PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Rimuovi e mis.piatto");
|
||||
@@ -258,6 +271,9 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_MOVE_X = _UxGT("Muovi X");
|
||||
PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Muovi Y");
|
||||
PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Muovi Z");
|
||||
PROGMEM Language_Str MSG_MOVE_I = _UxGT("Muovi ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_MOVE_J = _UxGT("Muovi ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_MOVE_K = _UxGT("Muovi ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_MOVE_E = _UxGT("Estrusore");
|
||||
PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Estrusore *");
|
||||
PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Ugello freddo");
|
||||
@@ -265,9 +281,11 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Muovi di 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Muovi di 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Muovi di 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Muovi di 0.001in");
|
||||
PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Muovi di 0.01in");
|
||||
PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Muovi di 0.1in");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Muovi di 100mm");
|
||||
PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Muovi di 0.001\"");
|
||||
PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Muovi di 0.01\"");
|
||||
PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Muovi di 0.1\"");
|
||||
PROGMEM Language_Str MSG_MOVE_1IN = _UxGT("Muovi di 1\"");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Velocità");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Piatto Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Ugello");
|
||||
@@ -312,12 +330,18 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-jerk");
|
||||
PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-jerk");
|
||||
PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-jerk");
|
||||
PROGMEM Language_Str MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-jerk");
|
||||
PROGMEM Language_Str MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-jerk");
|
||||
PROGMEM Language_Str MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-jerk");
|
||||
PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-jerk");
|
||||
PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Deviaz. giunzioni");
|
||||
PROGMEM Language_Str MSG_VELOCITY = _UxGT("Velocità");
|
||||
PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
|
||||
PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_VMAX_I = _UxGT("Vmax ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_VMAX_J = _UxGT("Vmax ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_VMAX_K = _UxGT("Vmax ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
|
||||
PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Vmax *");
|
||||
PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
|
||||
@@ -326,6 +350,9 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A;
|
||||
PROGMEM Language_Str MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_AMAX_I = _UxGT("Amax ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_AMAX_J = _UxGT("Amax ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_AMAX_K = _UxGT("Amax ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E;
|
||||
PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Amax *");
|
||||
PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-Ritrazione");
|
||||
@@ -336,6 +363,9 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" passi/mm");
|
||||
PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" passi/mm");
|
||||
PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" passi/mm");
|
||||
PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" passi/mm");
|
||||
PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" passi/mm");
|
||||
PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" passi/mm");
|
||||
PROGMEM Language_Str MSG_E_STEPS = _UxGT("E passi/mm");
|
||||
PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* passi/mm");
|
||||
PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
|
||||
@@ -469,6 +499,9 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_I = _UxGT("Babystep ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_BABYSTEP_J = _UxGT("Babystep ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_BABYSTEP_K = _UxGT("Babystep ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Totali");
|
||||
PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Finecorsa annullati");
|
||||
PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Risc.Fallito"); // Max 12 caratteri
|
||||
@@ -545,10 +578,13 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temp max");
|
||||
PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Alimentatore");
|
||||
PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Potenza Drive");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_X = _UxGT("X Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_Y = _UxGT("Y Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_Z = _UxGT("Z Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_X = _UxGT("Driver X %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_Y = _UxGT("Driver Y %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_Z = _UxGT("Driver Z %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_I = _UxGT("Driver ") AXIS4_STR _UxGT(" %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_J = _UxGT("Driver ") AXIS5_STR _UxGT(" %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_K = _UxGT("Driver ") AXIS6_STR _UxGT(" %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("Driver E %");
|
||||
PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("ERR.CONNESSIONE TMC");
|
||||
PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Scrivi DAC EEPROM");
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("CAMBIO FILAMENTO");
|
||||
@@ -687,4 +723,9 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Basso destra");
|
||||
PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Calibrazione completata");
|
||||
PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Calibrazione fallita");
|
||||
|
||||
PROGMEM Language_Str MSG_DRIVER_BACKWARD = _UxGT(" driver invertito");
|
||||
|
||||
PROGMEM Language_Str MSG_SD_CARD = _UxGT("Scheda SD");
|
||||
PROGMEM Language_Str MSG_USB_DISK = _UxGT("Disco USB");
|
||||
}
|
||||
|
@@ -98,6 +98,7 @@ namespace Language_jp_kana {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("0.1mm イドウ"); // "Move 0.1mm"
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT(" 1mm イドウ"); // "Move 1mm"
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT(" 10mm イドウ"); // "Move 10mm"
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT(" 100mm イドウ"); // "Move 100mm"
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("ソクド"); // "Speed"
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Zオフセット"); // "Bed Z"
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("ノズル"); // "Nozzle"
|
||||
|
@@ -91,6 +91,7 @@ namespace Language_nl {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Verplaats 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Verplaats 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Verplaats 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Verplaats 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Snelheid");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
|
||||
|
@@ -270,6 +270,7 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Przesuń co .1 mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Przesuń co 1 mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Przesuń co 10 mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Przesuń co 100 mm");
|
||||
PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Przesuń co 0.001 cala");
|
||||
PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Przesuń co 0.01 cala");
|
||||
PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Przesuń co 0.1 cala");
|
||||
|
@@ -85,6 +85,7 @@ namespace Language_pt {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mover 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidade");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Base Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" Bico");
|
||||
|
@@ -218,6 +218,7 @@ namespace Language_pt_br {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mover 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidade");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Base Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Bocal");
|
||||
|
@@ -232,6 +232,7 @@ namespace Language_ro {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Move 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Move 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Move 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Move 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Speed");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
|
||||
|
@@ -69,6 +69,9 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Парковка X");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Парковка Y");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Парковка Z");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_I = _UxGT("Парковка ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_J = _UxGT("Парковка ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_K = _UxGT("Парковка ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Авто Z-выравнивание");
|
||||
PROGMEM Language_Str MSG_ITERATION = _UxGT("G34 Итерация: %i");
|
||||
PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Уменьшение точности!");
|
||||
@@ -80,11 +83,29 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Высота спада");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Установ. смещения дома");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Смещение дома X");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Смещение дома Y");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Смещение дома Z");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_I = _UxGT("Смещение дома ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_J = _UxGT("Смещение дома ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_K = _UxGT("Смещение дома ") LCD_STR_K;
|
||||
#else
|
||||
PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Установ.смещ.дома");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Смещ. дома X");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Смещ. дома Y");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Смещ. дома Z");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_I = _UxGT("Смещ. дома ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_J = _UxGT("Смещ. дома ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_K = _UxGT("Смещ. дома ") LCD_STR_K;
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Смещения применены");
|
||||
PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Установить ноль");
|
||||
PROGMEM Language_Str MSG_SELECT_ORIGIN = _UxGT("Выберите ноль");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Последнее знач. ");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Послед. знач. ");
|
||||
#endif
|
||||
#if PREHEAT_COUNT
|
||||
PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Преднагрев ") PREHEAT_1_LABEL;
|
||||
PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Нагрев ") PREHEAT_1_LABEL " ~";
|
||||
@@ -107,14 +128,22 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Частота");
|
||||
PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Управление лазером");
|
||||
PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Переключить лазер");
|
||||
PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Мощность лазера");
|
||||
PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Управление шпинделем");
|
||||
PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Переключить шпиндель");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Мощность шпинделя");
|
||||
PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Мощность лазера");
|
||||
PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Тестовый импульс мс");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Мощн.шпинделя");
|
||||
PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Мощн. лазера");
|
||||
PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Тест. имп. мс");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE = _UxGT("Переключить обдув");
|
||||
PROGMEM Language_Str MSG_LASER_ASSIST_TOGGLE = _UxGT("Управление обдувом");
|
||||
PROGMEM Language_Str MSG_FLOWMETER_FAULT = _UxGT("Ошибка обдува");
|
||||
PROGMEM Language_Str MSG_LASER_FIRE_PULSE = _UxGT("Импульс лазера");
|
||||
PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Переключить вакуум");
|
||||
PROGMEM Language_Str MSG_SPINDLE_FORWARD = _UxGT("Шпиндель вперёд");
|
||||
PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Инверсия шпинделя");
|
||||
|
||||
@@ -127,6 +156,15 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Выровнять стол");
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Выровнять углы");
|
||||
PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Следующий угол");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_RAISE = _UxGT("Вверх до срабатыв. зонда");
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_IN_RANGE = _UxGT("Углы в норме. Вырав.стола");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_RAISE = _UxGT("Вверх до сраб. зонда");
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_IN_RANGE = _UxGT("Углы в норме. Вырав.");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_GOOD_POINTS = _UxGT("Хорошие точки: ");
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_LAST_Z = _UxGT("Последняя Z: ");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Смещение по Z");
|
||||
PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Правка сетки окончена");
|
||||
@@ -164,12 +202,13 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Точка разворота");
|
||||
PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Ручной ввод сетки");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Разместить шайбу и измерить");
|
||||
PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Разместить шайбу,измерить");
|
||||
PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Убрать и замерить стол");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Разм.шайбу, измерить");
|
||||
PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Убрать, измер. стол");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_UBL_MESH_WIZARD = _UxGT("Мастер сеток UBL");
|
||||
PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Измерение");
|
||||
PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Двигаемся дальше");
|
||||
PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Активировать UBL");
|
||||
@@ -185,17 +224,15 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Правка сетки завершена");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = LCD_STR_THERMOMETER _UxGT(" стола, ") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = LCD_STR_THERMOMETER _UxGT(" стола, ") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" стола,") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" сопла,") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Построить свою");
|
||||
PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Правка завершена");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Точная правка сетки");
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Построить сетку");
|
||||
#if PREHEAT_COUNT
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Построить сетку $");
|
||||
#endif
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Построить холодную сетку");
|
||||
#else
|
||||
@@ -205,14 +242,10 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Высота");
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Проверить сетку");
|
||||
#if LCD_WIDTH > 21
|
||||
#if PREHEAT_COUNT
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Проверить сетку $");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Проверить свою сетку");
|
||||
#else
|
||||
#if PREHEAT_COUNT
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Провер. сетку $");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Провер. свою сетку");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 нагрев стола");
|
||||
@@ -239,11 +272,12 @@ namespace Language_ru {
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Сохранить сетку снаружи");
|
||||
PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Вывод информации UBL");
|
||||
PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Кол-во заполнителя");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Сохранить снаружи");
|
||||
PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Информация UBL");
|
||||
PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Кол-во заполн.");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Кол-во заполнителя");
|
||||
PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Ручное заполнение");
|
||||
PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Умное заполнение");
|
||||
PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Заполнить сетку");
|
||||
@@ -303,6 +337,9 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_MOVE_X = _UxGT("Движение по X");
|
||||
PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Движение по Y");
|
||||
PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Движение по Z");
|
||||
PROGMEM Language_Str MSG_MOVE_I = _UxGT("Движение по ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_MOVE_J = _UxGT("Движение по ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_MOVE_K = _UxGT("Движение по ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_MOVE_E = _UxGT("Экструдер");
|
||||
PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Экструдер *");
|
||||
PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Сопло не нагрето");
|
||||
@@ -310,6 +347,7 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Движение 0.1мм");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Движение 1мм");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Движение 10мм");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Движение 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Скорость");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Z стола");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE "C";
|
||||
@@ -318,6 +356,15 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Сопло ожидает");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Стол, ") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_COOLER = _UxGT("Охлаждение лазера");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Переключить охлаждение");
|
||||
PROGMEM Language_Str MSG_FLOWMETER_SAFETY = _UxGT("Безопасность потока");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Переключить охлажд.");
|
||||
PROGMEM Language_Str MSG_FLOWMETER_SAFETY = _UxGT("Безопасн. потока");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_LASER = _UxGT("Лазер");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Кулер");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Кулер ~");
|
||||
PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Сохранённый кулер ~");
|
||||
@@ -352,6 +399,9 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-рывок");
|
||||
PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-рывок");
|
||||
PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-рывок");
|
||||
PROGMEM Language_Str MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-рывок");
|
||||
PROGMEM Language_Str MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-рывок");
|
||||
PROGMEM Language_Str MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-рывок");
|
||||
PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-рывок");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Отклонение узла");
|
||||
@@ -362,6 +412,9 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_VMAX_A = _UxGT("Скор.макс ") LCD_STR_A;
|
||||
PROGMEM Language_Str MSG_VMAX_B = _UxGT("Скор.макс ") LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_VMAX_C = _UxGT("Скор.макс ") LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_VMAX_I = _UxGT("Скор.макс ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_VMAX_J = _UxGT("Скор.макс ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_VMAX_K = _UxGT("Скор.макс ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_VMAX_E = _UxGT("Скор.макс ") LCD_STR_E;
|
||||
PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Скор.макс *");
|
||||
PROGMEM Language_Str MSG_VMIN = _UxGT("Скор.мин");
|
||||
@@ -370,6 +423,9 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_AMAX_A = _UxGT("Ускор.макс ") LCD_STR_A;
|
||||
PROGMEM Language_Str MSG_AMAX_B = _UxGT("Ускор.макс ") LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_AMAX_C = _UxGT("Ускор.макс ") LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_AMAX_I = _UxGT("Ускор.макс ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_AMAX_J = _UxGT("Ускор.макс ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_AMAX_K = _UxGT("Ускор.макс ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_AMAX_E = _UxGT("Ускор.макс ") LCD_STR_E;
|
||||
PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Ускор.макс *");
|
||||
PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Ускор.втягив.");
|
||||
@@ -380,6 +436,9 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" шаг/мм");
|
||||
PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" шаг/мм");
|
||||
PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" шаг/мм");
|
||||
PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" шаг/мм");
|
||||
PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" шаг/мм");
|
||||
PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" шаг/мм");
|
||||
PROGMEM Language_Str MSG_E_STEPS = _UxGT("E шаг/мм");
|
||||
PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* шаг/мм");
|
||||
PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Температура");
|
||||
@@ -402,10 +461,11 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_CONTRAST = _UxGT("Контраст экрана");
|
||||
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Сохранить настройки");
|
||||
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Загрузить настройки");
|
||||
PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("На базовые параметры");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("На базовые параметры");
|
||||
PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Инициализация EEPROM");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("На базовые парам.");
|
||||
PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Инициализ. EEPROM");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("Сбой EEPROM: CRC");
|
||||
@@ -541,10 +601,17 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Смещение X");
|
||||
PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Смещение Y");
|
||||
PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Смещение Z");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_MOVE_NOZZLE_TO_BED = _UxGT("Двигать сопло к столу");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_MOVE_NOZZLE_TO_BED = _UxGT("Двиг. сопло к столу");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Микрошаг X");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Микрошаг Y");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Микрошаг Z");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_I = _UxGT("Микрошаг ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_BABYSTEP_J = _UxGT("Микрошаг ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_BABYSTEP_K = _UxGT("Микрошаг ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Сумарно");
|
||||
PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Сработал концевик");
|
||||
PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Разогрев не удался");
|
||||
@@ -552,6 +619,8 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("УТЕЧКА ТЕПЛА");
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("УТЕЧКА ТЕПЛА СТОЛА");
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("УТЕЧКА ТЕПЛА КАМЕРЫ");
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY_COOLER = _UxGT("УТЕЧКА ОХЛАЖДЕНИЯ");
|
||||
PROGMEM Language_Str MSG_COOLING_FAILED = _UxGT("ОХЛАДИТЬ НЕ УДАЛОСЬ");
|
||||
PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Ошибка: Т макс.");
|
||||
PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Ошибка: Т мин.");
|
||||
PROGMEM Language_Str MSG_HALTED = _UxGT("ПРИНТЕР ОСТАНОВЛЕН");
|
||||
@@ -567,6 +636,7 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Охлаждение зонда...");
|
||||
PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Нагрев камеры...");
|
||||
PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Охладжение камеры...");
|
||||
PROGMEM Language_Str MSG_LASER_COOLING = _UxGT("Охлаждение лазера...");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Калибровка Delta");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Калибровать X");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Калибровать Y");
|
||||
@@ -575,13 +645,12 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Настройки Delta");
|
||||
PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Авто калибровка");
|
||||
PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Высота Delta");
|
||||
#if LCD_WIDTH >= 20
|
||||
PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Зондировать Z-смещение");
|
||||
PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Стержень диагонали");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Зондировать Z-смещения");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Зондир. Z-смещения");
|
||||
PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Стержень диаг.");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Стержень диаг.");
|
||||
PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Высота");
|
||||
PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Радиус");
|
||||
PROGMEM Language_Str MSG_INFO_MENU = _UxGT("О принтере");
|
||||
@@ -597,6 +666,11 @@ namespace Language_ru {
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Управление UBL");
|
||||
PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Выравнивание сетки");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Зондирование выполнено");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Зондиров. выполнено");
|
||||
#endif
|
||||
|
||||
PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Статистика принтера");
|
||||
PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Данные платы");
|
||||
@@ -617,14 +691,14 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Яркость подсветки");
|
||||
PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Неверный принтер");
|
||||
|
||||
#if LCD_WIDTH >= 20
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Счётчик печати");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Общее время печати");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Наидольшее задание");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Длина филамента");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Отпечатков");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Всего");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Напечатано");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Общее время");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Наидольшее");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Выдавлено");
|
||||
#endif
|
||||
@@ -637,6 +711,9 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_X = _UxGT("X Привод, %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_Y = _UxGT("Y Привод, %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_Z = _UxGT("Z Привод, %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Привод, %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Привод, %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Привод, %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Привод, %");
|
||||
PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("СБОЙ СВЯЗИ С TMC");
|
||||
PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Запись DAC в EEPROM");
|
||||
@@ -749,11 +826,11 @@ namespace Language_ru {
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_PASSWORD_REMOVED = _UxGT("Пароль удалён");
|
||||
|
||||
PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Парковка..."));
|
||||
//
|
||||
// Filament Change screens show up to 3 lines on a 4-line display
|
||||
// ...or up to 2 lines on a 3-line display
|
||||
//
|
||||
PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Парковка..."));
|
||||
#if LCD_HEIGHT >= 4
|
||||
PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_3_LINE("Нажмите кнопку", "для продолжения", "печати"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Ожидайте начала", "смены филамента"));
|
||||
@@ -803,8 +880,8 @@ namespace Language_ru {
|
||||
|
||||
PROGMEM Language_Str MSG_PROBE_WIZARD = _UxGT("Мастер Z-зонда");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Зондиров. контрольной точки Z");
|
||||
PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Движение к точке зондирования");
|
||||
PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Зондиров. контр. точки Z");
|
||||
PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Движение к точке зондиров.");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Зондир.контр.точки Z");
|
||||
PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Движ. к точке зондир.");
|
||||
@@ -818,6 +895,11 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Нижний правый");
|
||||
PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Калибровка успешна");
|
||||
PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Ошибка калибровки");
|
||||
|
||||
PROGMEM Language_Str MSG_DRIVER_BACKWARD = _UxGT(" драйвер назад");
|
||||
|
||||
PROGMEM Language_Str MSG_SD_CARD = _UxGT("SD Карта");
|
||||
PROGMEM Language_Str MSG_USB_DISK = _UxGT("USB Диск");
|
||||
}
|
||||
|
||||
#if FAN_COUNT == 1
|
||||
|
@@ -272,6 +272,7 @@ namespace Language_sk {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Posunúť o 0,1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Posunúť o 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Posunúť o 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Posunúť o 100mm");
|
||||
PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Posunúť o 0,001in");
|
||||
PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Posunúť o 0,01in");
|
||||
PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Posunúť o 0,1in");
|
||||
|
@@ -260,6 +260,7 @@ namespace Language_sv {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Flytta 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Flytta 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Flytta 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Flytta 100mm");
|
||||
PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Flytta 0.001tum");
|
||||
PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Flytta 0.01tum");
|
||||
PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Flytta 0.1tum");
|
||||
|
@@ -235,6 +235,7 @@ namespace Language_tr {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Hız");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Z Mesafesi");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozul");
|
||||
|
@@ -71,6 +71,9 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Паркування X");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Паркування Y");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Паркування Z");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_I = _UxGT("Паркування ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_J = _UxGT("Паркування ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_K = _UxGT("Паркування ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Авто Z-вирівнювання");
|
||||
PROGMEM Language_Str MSG_ITERATION = _UxGT("G34 Ітерація: %i");
|
||||
PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Зменьшення точності!");
|
||||
@@ -82,11 +85,29 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Висота спаду");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Встанов. зміщення дому");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Зміщення дому X");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Зміщення дому Y");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Зміщення дому Z");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_I = _UxGT("Зміщення дому ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_J = _UxGT("Зміщення дому ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_K = _UxGT("Зміщення дому ") LCD_STR_K;
|
||||
#else
|
||||
PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Встанов. зміщ. дому");
|
||||
PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Встан. зміщ. дому");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Зміщ. дому X");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Зміщ. дому Y");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Зміщ. дому Z");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_I = _UxGT("Зміщ. дому ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_J = _UxGT("Зміщ. дому ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_HOME_OFFSET_K = _UxGT("Зміщ. дому ") LCD_STR_K;
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Зміщення прийняті");
|
||||
PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Встановити нуль");
|
||||
PROGMEM Language_Str MSG_SELECT_ORIGIN = _UxGT("Оберіть нуль");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Останнє значення ");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Останнє знач. ");
|
||||
#endif
|
||||
#if PREHEAT_COUNT
|
||||
PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Нагрів ") PREHEAT_1_LABEL;
|
||||
PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Нагрів ") PREHEAT_1_LABEL " ~";
|
||||
@@ -106,22 +127,29 @@ namespace Language_uk {
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Нагрів свого");
|
||||
PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Вимкнути нагрів");
|
||||
|
||||
PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Частота");
|
||||
PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Керування лазером");
|
||||
PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Керування шпінделем");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Потужність лазера");
|
||||
PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Керування шпінделем");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Потуж.лазера");
|
||||
PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Керув. шпінделем");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Перемкнути шпіндель");
|
||||
PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Перемкнути лазер");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Потуж. шпінделя");
|
||||
PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Тестовий імпульс мс");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Потуж. шпінд.");
|
||||
PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Тест. імп. мс");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE = _UxGT("Перемкнути обдув");
|
||||
PROGMEM Language_Str MSG_LASER_ASSIST_TOGGLE = _UxGT("Керування обдувом");
|
||||
PROGMEM Language_Str MSG_FLOWMETER_FAULT = _UxGT("Помилка обдуву");
|
||||
PROGMEM Language_Str MSG_LASER_FIRE_PULSE = _UxGT("Імпульс лазеру");
|
||||
PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Перемкнути вакуум");
|
||||
PROGMEM Language_Str MSG_SPINDLE_FORWARD = _UxGT("Шпіндель вперед");
|
||||
PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Шпіндель назад");
|
||||
|
||||
@@ -134,11 +162,14 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Вирівняти стіл");
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Вирівняти кути");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_RAISE = _UxGT("Вгору до спрацювання зонду"); // not sure about this one
|
||||
#else
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_RAISE = _UxGT("Вгору до спрацюв. зонду");
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_IN_RANGE = _UxGT("Кути в межах. Вирів.столу");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_RAISE = _UxGT("Вгору до спрац.зонду");
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_IN_RANGE = _UxGT("Кути в межах. Вирівн");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_IN_RANGE = _UxGT("Кути в межах. Вирівнювання столу"); // Too long?
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_GOOD_POINTS = _UxGT("Хороші точки: ");
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS_LAST_Z = _UxGT("Остання Z: ");
|
||||
PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Наступний кут");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Зміщення по Z");
|
||||
@@ -181,24 +212,25 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Ручне введ. сітки");
|
||||
PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Розм. шайбу і вимір.");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_UBL_MESH_WIZARD = _UxGT("Майстер сіток UBL");
|
||||
PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Вимірювання");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Видалити і виміряти стіл");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Видали і вимір. стіл");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Рух до наступної");
|
||||
PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Активувати UBL");
|
||||
PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Деактивувати UBL");
|
||||
PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = LCD_STR_THERMOMETER _UxGT(" столу, ") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" столу,") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" сопла,") LCD_STR_DEGREE "C";
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Температура столу");
|
||||
PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Температура свого столу");
|
||||
PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Температура сопла");
|
||||
PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Температура свого сопла");
|
||||
PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Редагувати свою сітку");
|
||||
PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Точне редагування сітки");
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Будувати свою сітку");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = LCD_STR_THERMOMETER _UxGT(" столу, ") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = LCD_STR_THERMOMETER _UxGT(" столу, ") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Редагувати свою");
|
||||
PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Точне редаг. сітки");
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Будувати свою");
|
||||
@@ -206,10 +238,8 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Редагування сітки");
|
||||
PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Сітка побудована");
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Будувати сітку");
|
||||
#if PREHEAT_COUNT
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Будувати сітку ($)");
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Підтвердити ($)");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Буд. холодну сітку");
|
||||
PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Встан.висоту сітки");
|
||||
PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Висота");
|
||||
@@ -219,7 +249,7 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 нагрів столу");
|
||||
PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 нагрів сопла");
|
||||
PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Ручне грунтування");
|
||||
PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Фікс. довж. грунт."); // ґ is not supported
|
||||
PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Фікс. довж. грунт.");
|
||||
PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Грунтув. виконане");
|
||||
PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 скасовано");
|
||||
PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Вийти з G26");
|
||||
@@ -240,7 +270,7 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Зберегти зовні");
|
||||
PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Інформація по UBL");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Обсяг заповнювача");
|
||||
PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Обсяг заповнюв.");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Обсяг заповн.");
|
||||
#endif
|
||||
@@ -251,12 +281,9 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Анулювати найближчу");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Точно налаштувати все");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Точно налашт. все");
|
||||
#endif
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Точно налашт.найближчу");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Точно налашт. все");
|
||||
PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Точно найближчу");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Збереження сітки");
|
||||
@@ -300,7 +327,7 @@ namespace Language_uk {
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Передустановка світла #2");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Передустан. світла #2");
|
||||
PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Передуст. світла #2");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_NEO2_BRIGHTNESS = _UxGT("Яскравість");
|
||||
PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Своє світло");
|
||||
@@ -315,6 +342,9 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_MOVE_X = _UxGT("Рух по X");
|
||||
PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Рух по Y");
|
||||
PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Рух по Z");
|
||||
PROGMEM Language_Str MSG_MOVE_I = _UxGT("Рух по ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_MOVE_J = _UxGT("Рух по ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_MOVE_K = _UxGT("Рух по ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_MOVE_E = _UxGT("Екструдер");
|
||||
PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Екструдер *");
|
||||
PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Сопло дуже холодне");
|
||||
@@ -322,6 +352,7 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Рух 0.1мм");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Рух 1мм");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Рух 10мм");
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Рух 100mm");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Швидкість");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Z Столу");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE "C";
|
||||
@@ -330,6 +361,14 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Сопло очікує");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Стіл, ") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE "C";
|
||||
PROGMEM Language_Str MSG_COOLER = _UxGT("Охолодження лазеру");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Перемкнути охолодження");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Перемкнути охолодж.");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_FLOWMETER_SAFETY = _UxGT("Безпека потоку");
|
||||
PROGMEM Language_Str MSG_LASER = _UxGT("Лазер");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Швидк. вент.");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Швидк. вент. ~");
|
||||
#if LCD_WIDTH > 21
|
||||
@@ -339,8 +378,8 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Збереж. вент. ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Додат.вент. ~");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Вент. контролера");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Дод. швидк. вент.");
|
||||
PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Вент. контролера");
|
||||
PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Холості оберти");
|
||||
PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Авто-режим");
|
||||
PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Робочі оберти");
|
||||
@@ -369,6 +408,9 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-ривок");
|
||||
PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-ривок");
|
||||
PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-ривок");
|
||||
PROGMEM Language_Str MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-ривок");
|
||||
PROGMEM Language_Str MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-ривок");
|
||||
PROGMEM Language_Str MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-ривок");
|
||||
PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-ривок");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Відхилення вузла");
|
||||
@@ -379,6 +421,9 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_VMAX_A = _UxGT("Швидк.макс ") LCD_STR_A;
|
||||
PROGMEM Language_Str MSG_VMAX_B = _UxGT("Швидк.макс ") LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_VMAX_C = _UxGT("Швидк.макс ") LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_VMAX_I = _UxGT("Швидк.макс ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_VMAX_J = _UxGT("Швидк.макс ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_VMAX_K = _UxGT("Швидк.макс ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_VMAX_E = _UxGT("Швидк.макс ") LCD_STR_E;
|
||||
PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Швидк.макс *");
|
||||
PROGMEM Language_Str MSG_VMIN = _UxGT("Швидк.мін");
|
||||
@@ -387,6 +432,9 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_AMAX_A = _UxGT("Приск.макс ") LCD_STR_A;
|
||||
PROGMEM Language_Str MSG_AMAX_B = _UxGT("Приск.макс ") LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_AMAX_C = _UxGT("Приск.макс ") LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_AMAX_I = _UxGT("Приск.макс ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_AMAX_J = _UxGT("Приск.макс ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_AMAX_K = _UxGT("Приск.макс ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_AMAX_E = _UxGT("Приск.макс ") LCD_STR_E;
|
||||
PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Приск.макс *");
|
||||
PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Приск.втягув.");
|
||||
@@ -397,6 +445,9 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" кроків/мм");
|
||||
PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" кроків/мм");
|
||||
PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" кроків/мм");
|
||||
PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" кроків/мм");
|
||||
PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" кроків/мм");
|
||||
PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" кроків/мм");
|
||||
PROGMEM Language_Str MSG_E_STEPS = _UxGT("E кроків/мм");
|
||||
PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* кроків/мм");
|
||||
PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Температура");
|
||||
@@ -472,8 +523,6 @@ namespace Language_uk {
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Втягування, мм");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Зміна втягув.,мм");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Ретракт V");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Стрибок, мм");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Повернення, мм");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Поверн.зміни, мм");
|
||||
PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Автовтягування");
|
||||
@@ -556,6 +605,9 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Мікрокрок X");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Мікрокрок Y");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Мікрокрок Z");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_I = _UxGT("Мікрокрок ") LCD_STR_I;
|
||||
PROGMEM Language_Str MSG_BABYSTEP_J = _UxGT("Мікрокрок ") LCD_STR_J;
|
||||
PROGMEM Language_Str MSG_BABYSTEP_K = _UxGT("Мікрокрок ") LCD_STR_K;
|
||||
PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Сумарно");
|
||||
PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Кінцевик спрацював");
|
||||
PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Збій нагріву");
|
||||
@@ -563,7 +615,13 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ВИТІК ТЕПЛА");
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("ВИТІК ТЕПЛА СТОЛУ");
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ВИТІК ТЕПЛА КАМЕРИ");
|
||||
PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("МАКСИМАЛЬНА Т");
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY_COOLER = _UxGT("ВИТІК ОХОЛОДЖЕННЯ");
|
||||
#if LCD_WIDTH >= 20
|
||||
PROGMEM Language_Str MSG_COOLING_FAILED = _UxGT("ОХОЛОДЖЕННЯ НЕ ВДАЛОСЬ");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_COOLING_FAILED = _UxGT("ОХОЛОДЖ. НЕ ВДАЛОСЬ");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("МАКСИМАЛЬНА Т") LCD_STR_DEGREE;
|
||||
PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("МІНІМАЛЬНА Т") LCD_STR_DEGREE;
|
||||
PROGMEM Language_Str MSG_HALTED = _UxGT("ПРИНТЕР ЗУПИНЕНО");
|
||||
PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Перезавантажте");
|
||||
@@ -573,18 +631,20 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_HEATING = _UxGT("Нагрівання...");
|
||||
PROGMEM Language_Str MSG_COOLING = _UxGT("Охолодження...");
|
||||
PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Нагрів столу...");
|
||||
PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Нагрів камери...");
|
||||
PROGMEM Language_Str MSG_PROBE_HEATING = _UxGT("Нагрів зонду...");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Калібрування Delta");
|
||||
PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Нагрів камери...");
|
||||
#if LCD_WIDTH >= 20
|
||||
PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Охолодження столу...");
|
||||
PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Охолодження камери...");
|
||||
PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Охолодження зонду...");
|
||||
PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Охолодження камери...");
|
||||
PROGMEM Language_Str MSG_LASER_COOLING = _UxGT("Охолодження лазеру...");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Охол. столу...");
|
||||
PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Охол. камери...");
|
||||
PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Охол. зонду...");
|
||||
PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Охолодж. столу...");
|
||||
PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Охолодж. зонду...");
|
||||
PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Охолодж. камери...");
|
||||
PROGMEM Language_Str MSG_LASER_COOLING = _UxGT("Охолодж. лазеру...");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Калібрування Delta");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Калібрувати X");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Калібрувати Y");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Калібрувати Z");
|
||||
@@ -611,6 +671,11 @@ namespace Language_uk {
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("UBL");
|
||||
PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Вирівнювання сітки");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Зондування сітки виконано");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Зондування виконано");
|
||||
#endif
|
||||
|
||||
PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Статистика принтера");
|
||||
PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Про плату");
|
||||
@@ -651,6 +716,9 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_X = _UxGT("Драйвер X, %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_Y = _UxGT("Драйвер Y, %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_Z = _UxGT("Драйвер Z, %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_I = _UxGT("Драйвер ") AXIS4_STR _UxGT(", %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_J = _UxGT("Драйвер ") AXIS5_STR _UxGT(", %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_K = _UxGT("Драйвер ") AXIS6_STR _UxGT(", %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("Драйвер E, %");
|
||||
PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("ЗБІЙ ЗВ'ЯЗКУ З TMC");
|
||||
PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Запис ЦАП у EEPROM");
|
||||
@@ -687,19 +755,19 @@ namespace Language_uk {
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Завантажити в сопло");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Завантаж. в сопло");
|
||||
PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Завант. в сопло");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU Звільнити");
|
||||
PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU Звільнити ~");
|
||||
PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU Вивантажити");
|
||||
PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("MMU Завантаж. %i...");
|
||||
PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("MMU Звільнення...");
|
||||
PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("MMU Вивантаження...");
|
||||
PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("MMU Все");
|
||||
PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("MMU Пруток ~");
|
||||
PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("MMU Перезапуск");
|
||||
PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Завантаж. %i...");
|
||||
PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Викидання прутка...");
|
||||
PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Вивантаження...");
|
||||
PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Все");
|
||||
PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Пруток ~");
|
||||
PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Перезапуск MMU");
|
||||
PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("MMU Перезапуск...");
|
||||
PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("MMU Видаліть, натисніть");
|
||||
PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Видаліть, натисніть");
|
||||
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_MIX = _UxGT("Змішування");
|
||||
@@ -710,7 +778,11 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_MIXER = _UxGT("Змішувач");
|
||||
PROGMEM Language_Str MSG_GRADIENT = _UxGT("Градієнт");
|
||||
PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Повний градієнт");
|
||||
PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Змішування переключ.");
|
||||
#if LCD_WIDTH > 21
|
||||
PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Переключити змішування");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Переключ.змішування");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Циклічне змішування");
|
||||
PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Градієнт змішування");
|
||||
PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Змінити градієнт");
|
||||
@@ -721,14 +793,13 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Зкидання В-інструментів");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Актив. В-інструм.");
|
||||
PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Псевдонім В-інструм.");
|
||||
PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Псевдонім В-інструм");
|
||||
PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Зкидання В-інструм.");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Початок В-інструменту");
|
||||
PROGMEM Language_Str MSG_END_VTOOL = _UxGT("Кінець В-інструменту");
|
||||
PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Змішати В-інструменти");
|
||||
PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("В-інструменти зкинуті");
|
||||
|
||||
PROGMEM Language_Str MSG_START_Z = _UxGT("Початок Z:");
|
||||
PROGMEM Language_Str MSG_END_Z = _UxGT(" Кінець Z:");
|
||||
|
||||
@@ -756,12 +827,12 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_REMINDER_SAVE_SETTINGS = _UxGT("Не забудь зберегти!");
|
||||
PROGMEM Language_Str MSG_PASSWORD_REMOVED = _UxGT("Пароль видалений");
|
||||
|
||||
PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Паркування..."));
|
||||
|
||||
//
|
||||
// Filament Change screens show up to 3 lines on a 4-line display
|
||||
// ...or up to 2 lines on a 3-line display
|
||||
//
|
||||
PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Паркування..."));
|
||||
#if LCD_HEIGHT >= 4
|
||||
// Up to 3 lines allowed
|
||||
PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_3_LINE("Натисніть кнопку", "для продовження", "друку"));
|
||||
@@ -828,6 +899,11 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Нижній правий");
|
||||
PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Калібрування успішне");
|
||||
PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Збій калібрування");
|
||||
|
||||
PROGMEM Language_Str MSG_DRIVER_BACKWARD = _UxGT(" драйвер назад");
|
||||
|
||||
PROGMEM Language_Str MSG_SD_CARD = _UxGT("SD Картка");
|
||||
PROGMEM Language_Str MSG_USB_DISK = _UxGT("USB Диск");
|
||||
}
|
||||
|
||||
#if FAN_COUNT == 1
|
||||
|
@@ -205,6 +205,7 @@ namespace Language_vi {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Di chuyển 0.1mm"); // Move 0.1mm
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Di chuyển 1mm"); // Move 1mm
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Di chuyển 10mm"); // Move 10mm
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Di chuyển 100mm"); // Move 100mm
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Tốc độ"); // Speed
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Z Bàn");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Đầu phun"); // Nozzle
|
||||
|
@@ -230,6 +230,7 @@ namespace Language_zh_CN {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("移动 0.1 mm"); //"Move 0.1mm"
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("移动 1 mm"); //"Move 1mm"
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("移动 10 mm"); //"Move 10mm"
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("移动 100 mm"); //"Move 100mm"
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("速率"); //"Speed"
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("热床Z"); //"Bed Z"
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("喷嘴"); //"Nozzle" 噴嘴
|
||||
|
@@ -228,6 +228,7 @@ namespace Language_zh_TW {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("移動 0.1 mm"); //"Move 0.1mm"
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("移動 1 mm"); //"Move 1mm"
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("移動 10 mm"); //"Move 10mm"
|
||||
PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("移動 100 mm"); //"Move 100mm"
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("速率"); //"Speed"
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("熱床Z"); //"Bed Z"
|
||||
PROGMEM Language_Str MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴"); //"Nozzle" 噴嘴
|
||||
|
@@ -41,6 +41,7 @@
|
||||
* * 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*/) {
|
||||
const uint8_t prop = USE_WIDE_GLYPH ? 2 : 1;
|
||||
uint8_t *p = (uint8_t*)pstr;
|
||||
int8_t n = maxlen;
|
||||
while (n > 0) {
|
||||
@@ -73,10 +74,27 @@ lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const i
|
||||
}
|
||||
else {
|
||||
lcd_put_wchar(ch);
|
||||
n--;
|
||||
n -= ch > 255 ? prop : 1;
|
||||
}
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
// Calculate UTF8 width with a simple check
|
||||
int calculateWidth(PGM_P const pstr) {
|
||||
if (!USE_WIDE_GLYPH) return utf8_strlen_P(pstr) * MENU_FONT_WIDTH;
|
||||
const uint8_t prop = 2;
|
||||
uint8_t *p = (uint8_t*)pstr;
|
||||
int n = 0;
|
||||
|
||||
do {
|
||||
wchar_t ch;
|
||||
p = get_utf8_value_cb(p, read_byte_rom, &ch);
|
||||
if (!ch) break;
|
||||
n += (ch > 255) ? prop : 1;
|
||||
} while (1);
|
||||
|
||||
return n * MENU_FONT_WIDTH;
|
||||
}
|
||||
|
||||
#endif // HAS_WIRED_LCD
|
||||
|
@@ -172,3 +172,5 @@ inline int lcd_put_wchar(const lcd_uint_t col, const lcd_uint_t row, const wchar
|
||||
lcd_moveto(col, row);
|
||||
return lcd_put_wchar(c);
|
||||
}
|
||||
|
||||
int calculateWidth(PGM_P const pstr);
|
||||
|
@@ -165,8 +165,9 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HAS_LCD_MENU && LCD_TIMEOUT_TO_STATUS > 0
|
||||
#if SCREENS_CAN_TIME_OUT
|
||||
bool MarlinUI::defer_return_to_status;
|
||||
millis_t MarlinUI::return_to_status_ms = 0;
|
||||
#endif
|
||||
|
||||
uint8_t MarlinUI::lcd_status_update_delay = 1; // First update one loop delayed
|
||||
@@ -815,9 +816,6 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) {
|
||||
|
||||
LCDViewAction MarlinUI::lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW;
|
||||
millis_t next_lcd_update_ms;
|
||||
#if HAS_LCD_MENU && LCD_TIMEOUT_TO_STATUS
|
||||
millis_t MarlinUI::return_to_status_ms = 0;
|
||||
#endif
|
||||
|
||||
inline bool can_encode() {
|
||||
return !BUTTON_PRESSED(ENC_EN); // Update encoder only when ENC_EN is not LOW (pressed)
|
||||
@@ -828,12 +826,6 @@ void MarlinUI::update() {
|
||||
static uint16_t max_display_update_time = 0;
|
||||
millis_t ms = millis();
|
||||
|
||||
#if HAS_LCD_MENU && LCD_TIMEOUT_TO_STATUS > 0
|
||||
#define RESET_STATUS_TIMEOUT() (return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS)
|
||||
#else
|
||||
#define RESET_STATUS_TIMEOUT() NOOP
|
||||
#endif
|
||||
|
||||
#ifdef LED_BACKLIGHT_TIMEOUT
|
||||
leds.update_timeout(powersupply_on);
|
||||
#endif
|
||||
@@ -859,7 +851,7 @@ void MarlinUI::update() {
|
||||
|
||||
#if HAS_TOUCH_BUTTONS
|
||||
if (touch_buttons) {
|
||||
RESET_STATUS_TIMEOUT();
|
||||
reset_status_timeout(ms);
|
||||
if (touch_buttons & (EN_A | EN_B)) { // Menu arrows, in priority
|
||||
if (ELAPSED(ms, next_button_update_ms)) {
|
||||
encoderDiff = (ENCODER_STEPS_PER_MENU_ITEM) * epps * encoderDirection;
|
||||
@@ -914,7 +906,7 @@ void MarlinUI::update() {
|
||||
TERN_(HAS_SLOW_BUTTONS, slow_buttons = read_slow_buttons()); // Buttons that take too long to read in interrupt context
|
||||
|
||||
if (TERN0(IS_RRW_KEYPAD, handle_keypad()))
|
||||
RESET_STATUS_TIMEOUT();
|
||||
reset_status_timeout(ms);
|
||||
|
||||
uint8_t abs_diff = ABS(encoderDiff);
|
||||
|
||||
@@ -980,7 +972,7 @@ void MarlinUI::update() {
|
||||
encoderDiff = 0;
|
||||
}
|
||||
|
||||
RESET_STATUS_TIMEOUT();
|
||||
reset_status_timeout(ms);
|
||||
|
||||
refresh(LCDVIEW_REDRAW_NOW);
|
||||
|
||||
@@ -1006,7 +998,7 @@ void MarlinUI::update() {
|
||||
lcd_status_update_delay = ++filename_scroll_pos >= filename_scroll_max ? 12 : 4; // Long delay at end and start
|
||||
if (filename_scroll_pos > filename_scroll_max) filename_scroll_pos = 0;
|
||||
refresh(LCDVIEW_REDRAW_NOW);
|
||||
RESET_STATUS_TIMEOUT();
|
||||
reset_status_timeout(ms);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1075,10 +1067,10 @@ void MarlinUI::update() {
|
||||
NOLESS(max_display_update_time, millis() - ms);
|
||||
}
|
||||
|
||||
#if HAS_LCD_MENU && LCD_TIMEOUT_TO_STATUS > 0
|
||||
#if SCREENS_CAN_TIME_OUT
|
||||
// Return to Status Screen after a timeout
|
||||
if (on_status_screen() || defer_return_to_status)
|
||||
RESET_STATUS_TIMEOUT();
|
||||
reset_status_timeout(ms);
|
||||
else if (ELAPSED(ms, return_to_status_ms))
|
||||
return_to_status();
|
||||
#endif
|
||||
@@ -1609,8 +1601,9 @@ void MarlinUI::update() {
|
||||
|
||||
if (status) {
|
||||
if (old_status < 2) {
|
||||
TERN_(EXTENSIBLE_UI, ExtUI::onMediaInserted()); // ExtUI response
|
||||
#if ENABLED(BROWSE_MEDIA_ON_INSERT)
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
ExtUI::onMediaInserted();
|
||||
#elif ENABLED(BROWSE_MEDIA_ON_INSERT)
|
||||
clear_menu_history();
|
||||
quick_feedback();
|
||||
goto_screen(MEDIA_MENU_GATEWAY);
|
||||
@@ -1621,8 +1614,9 @@ void MarlinUI::update() {
|
||||
}
|
||||
else {
|
||||
if (old_status < 2) {
|
||||
TERN_(EXTENSIBLE_UI, ExtUI::onMediaRemoved()); // ExtUI response
|
||||
#if PIN_EXISTS(SD_DETECT)
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
ExtUI::onMediaRemoved();
|
||||
#elif PIN_EXISTS(SD_DETECT)
|
||||
LCD_MESSAGEPGM(MSG_MEDIA_REMOVED);
|
||||
#if HAS_LCD_MENU
|
||||
if (!defer_return_to_status) return_to_status();
|
||||
|
@@ -445,11 +445,14 @@ public:
|
||||
static PGM_P get_preheat_label(const uint8_t m);
|
||||
#endif
|
||||
|
||||
#if HAS_LCD_MENU
|
||||
#if LCD_TIMEOUT_TO_STATUS
|
||||
static millis_t return_to_status_ms;
|
||||
#if SCREENS_CAN_TIME_OUT
|
||||
static inline void reset_status_timeout(const millis_t ms) { return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS; }
|
||||
#else
|
||||
static inline void reset_status_timeout(const millis_t) {}
|
||||
#endif
|
||||
|
||||
#if HAS_LCD_MENU
|
||||
|
||||
#if HAS_TOUCH_BUTTONS
|
||||
static uint8_t touch_buttons;
|
||||
static uint8_t repeat_delay;
|
||||
@@ -479,7 +482,7 @@ public:
|
||||
static screenFunc_t currentScreen;
|
||||
static bool screen_changed;
|
||||
static void goto_screen(const screenFunc_t screen, const uint16_t encoder=0, const uint8_t top=0, const uint8_t items=0);
|
||||
static void save_previous_screen();
|
||||
static void push_current_screen();
|
||||
|
||||
// goto_previous_screen and go_back may also be used as menu item callbacks
|
||||
static void _goto_previous_screen(TERN_(TURBO_BACK_MENU_ITEM, const bool is_back));
|
||||
@@ -494,12 +497,12 @@ public:
|
||||
static void lcd_in_status(const bool inStatus);
|
||||
#endif
|
||||
|
||||
FORCE_INLINE static bool screen_is_sticky() {
|
||||
return TERN1(SCREENS_CAN_TIME_OUT, defer_return_to_status);
|
||||
}
|
||||
|
||||
FORCE_INLINE static void defer_status_screen(const bool defer=true) {
|
||||
#if LCD_TIMEOUT_TO_STATUS > 0
|
||||
defer_return_to_status = defer;
|
||||
#else
|
||||
UNUSED(defer);
|
||||
#endif
|
||||
TERN(SCREENS_CAN_TIME_OUT, defer_return_to_status = defer, UNUSED(defer));
|
||||
}
|
||||
|
||||
static inline void goto_previous_screen_no_defer() {
|
||||
@@ -651,16 +654,18 @@ public:
|
||||
|
||||
private:
|
||||
|
||||
#if SCREENS_CAN_TIME_OUT
|
||||
static millis_t return_to_status_ms;
|
||||
static bool defer_return_to_status;
|
||||
#else
|
||||
static constexpr bool defer_return_to_status = false;
|
||||
#endif
|
||||
|
||||
#if HAS_STATUS_MESSAGE
|
||||
static void finish_status(const bool persist);
|
||||
#endif
|
||||
|
||||
#if HAS_WIRED_LCD
|
||||
#if HAS_LCD_MENU && LCD_TIMEOUT_TO_STATUS > 0
|
||||
static bool defer_return_to_status;
|
||||
#else
|
||||
static constexpr bool defer_return_to_status = false;
|
||||
#endif
|
||||
static void draw_status_screen();
|
||||
#if HAS_GRAPHICAL_TFT
|
||||
static void tft_idle();
|
||||
|
@@ -50,9 +50,12 @@
|
||||
int8_t encoderTopLine, encoderLine, screen_items;
|
||||
|
||||
typedef struct {
|
||||
screenFunc_t menu_function;
|
||||
uint32_t encoder_position;
|
||||
int8_t top_line, items;
|
||||
screenFunc_t menu_function; // The screen's function
|
||||
uint32_t encoder_position; // The position of the encoder
|
||||
int8_t top_line, items; // The amount of scroll, and the number of items
|
||||
#if SCREENS_CAN_TIME_OUT
|
||||
bool sticky; // The screen is sticky
|
||||
#endif
|
||||
} menuPosition;
|
||||
menuPosition screen_history[6];
|
||||
uint8_t screen_history_depth = 0;
|
||||
@@ -75,9 +78,9 @@ bool MenuEditItemBase::liveEdit;
|
||||
|
||||
void MarlinUI::return_to_status() { goto_screen(status_screen); }
|
||||
|
||||
void MarlinUI::save_previous_screen() {
|
||||
void MarlinUI::push_current_screen() {
|
||||
if (screen_history_depth < COUNT(screen_history))
|
||||
screen_history[screen_history_depth++] = { currentScreen, encoderPosition, encoderTopLine, screen_items };
|
||||
screen_history[screen_history_depth++] = { currentScreen, encoderPosition, encoderTopLine, screen_items OPTARG(SCREENS_CAN_TIME_OUT, screen_is_sticky()) };
|
||||
}
|
||||
|
||||
void MarlinUI::_goto_previous_screen(TERN_(TURBO_BACK_MENU_ITEM, const bool is_back/*=false*/)) {
|
||||
@@ -90,6 +93,7 @@ void MarlinUI::_goto_previous_screen(TERN_(TURBO_BACK_MENU_ITEM, const bool is_b
|
||||
is_back ? 0 : sh.top_line,
|
||||
sh.items
|
||||
);
|
||||
defer_status_screen(TERN_(SCREENS_CAN_TIME_OUT, sh.sticky));
|
||||
}
|
||||
else
|
||||
return_to_status();
|
||||
@@ -147,7 +151,7 @@ void MenuEditItemBase::goto_edit_screen(
|
||||
) {
|
||||
TERN_(HAS_TOUCH_BUTTONS, ui.on_edit_screen = true);
|
||||
ui.screen_changed = true;
|
||||
ui.save_previous_screen();
|
||||
ui.push_current_screen();
|
||||
ui.refresh();
|
||||
editLabel = el;
|
||||
editValue = ev;
|
||||
@@ -237,7 +241,7 @@ void MarlinUI::goto_screen(screenFunc_t screen, const uint16_t encoder/*=0*/, co
|
||||
//
|
||||
void MarlinUI::synchronize(PGM_P const msg/*=nullptr*/) {
|
||||
static PGM_P sync_message = msg ?: GET_TEXT(MSG_MOVING);
|
||||
save_previous_screen();
|
||||
push_current_screen();
|
||||
goto_screen([]{
|
||||
if (should_draw()) MenuItem_static::draw(LCD_HEIGHT >= 4, sync_message);
|
||||
});
|
||||
@@ -371,6 +375,7 @@ void MenuItem_confirm::select_screen(
|
||||
selectFunc_t yesFunc, selectFunc_t noFunc,
|
||||
PGM_P const pref, const char * const string/*=nullptr*/, PGM_P const suff/*=nullptr*/
|
||||
) {
|
||||
ui.defer_status_screen();
|
||||
const bool ui_selection = ui.update_selection(), got_click = ui.use_click();
|
||||
if (got_click || ui.should_draw()) {
|
||||
draw_select_screen(yes, no, ui_selection, pref, string, suff);
|
||||
@@ -378,7 +383,6 @@ void MenuItem_confirm::select_screen(
|
||||
selectFunc_t callFunc = ui_selection ? yesFunc : noFunc;
|
||||
if (callFunc) callFunc(); else ui.goto_previous_screen();
|
||||
}
|
||||
ui.defer_status_screen();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -140,6 +140,7 @@ typedef union {
|
||||
uint8_t uint8;
|
||||
uint16_t uint16;
|
||||
uint32_t uint32;
|
||||
celsius_t celsius;
|
||||
} chimera_t;
|
||||
extern chimera_t editable;
|
||||
|
||||
|
@@ -39,7 +39,7 @@ class MenuItem_submenu : public MenuItemBase {
|
||||
FORCE_INLINE static void draw(const bool sel, const uint8_t row, PGM_P const pstr, ...) {
|
||||
_draw(sel, row, pstr, '>', LCD_STR_ARROW_RIGHT[0]);
|
||||
}
|
||||
static inline void action(PGM_P const, const screenFunc_t func) { ui.save_previous_screen(); ui.goto_screen(func); }
|
||||
static inline void action(PGM_P const, const screenFunc_t func) { ui.push_current_screen(); ui.goto_screen(func); }
|
||||
};
|
||||
|
||||
// Any menu item that invokes an immediate action
|
||||
@@ -406,7 +406,7 @@ class MenuItem_bool : public MenuEditItemBase {
|
||||
|
||||
#define _CONFIRM_ITEM_INNER_P(PLABEL, V...) do { \
|
||||
if (encoderLine == _thisItemNr && ui.use_click()) { \
|
||||
ui.save_previous_screen(); \
|
||||
ui.push_current_screen(); \
|
||||
ui.goto_screen([]{MenuItem_confirm::select_screen(V);}); \
|
||||
return; \
|
||||
} \
|
||||
|
@@ -28,6 +28,8 @@
|
||||
|
||||
#if HAS_LCD_MENU
|
||||
|
||||
#define LARGE_AREA_TEST ((X_BED_SIZE) >= 1000 || (Y_BED_SIZE) >= 1000 || (Z_MAX_POS) >= 1000)
|
||||
|
||||
#include "menu_item.h"
|
||||
#include "menu_addon.h"
|
||||
|
||||
@@ -85,7 +87,7 @@ static void _lcd_move_xyz(PGM_P const name, const AxisEnum axis) {
|
||||
MenuEditItemBase::draw_edit_screen(name, ftostr63(imp_pos));
|
||||
}
|
||||
else
|
||||
MenuEditItemBase::draw_edit_screen(name, ui.manual_move.menu_scale >= 0.1f ? ftostr41sign(pos) : ftostr63(pos));
|
||||
MenuEditItemBase::draw_edit_screen(name, ui.manual_move.menu_scale >= 0.1f ? (LARGE_AREA_TEST ? ftostr51sign(pos) : ftostr41sign(pos)) : ftostr63(pos));
|
||||
}
|
||||
}
|
||||
void lcd_move_x() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_X), X_AXIS); }
|
||||
@@ -165,11 +167,13 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int
|
||||
|
||||
BACK_ITEM(MSG_MOVE_AXIS);
|
||||
if (parser.using_inch_units()) {
|
||||
if (LARGE_AREA_TEST) SUBMENU(MSG_MOVE_1IN, []{ _goto_manual_move(IN_TO_MM(1.000f)); });
|
||||
SUBMENU(MSG_MOVE_01IN, []{ _goto_manual_move(IN_TO_MM(0.100f)); });
|
||||
SUBMENU(MSG_MOVE_001IN, []{ _goto_manual_move(IN_TO_MM(0.010f)); });
|
||||
SUBMENU(MSG_MOVE_0001IN, []{ _goto_manual_move(IN_TO_MM(0.001f)); });
|
||||
}
|
||||
else {
|
||||
if (LARGE_AREA_TEST) SUBMENU(MSG_MOVE_100MM, []{ _goto_manual_move(100); });
|
||||
SUBMENU(MSG_MOVE_10MM, []{ _goto_manual_move(10); });
|
||||
SUBMENU(MSG_MOVE_1MM, []{ _goto_manual_move( 1); });
|
||||
SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move( 0.1f); });
|
||||
|
@@ -177,7 +177,7 @@ void Password::menu_password() {
|
||||
START_MENU();
|
||||
BACK_ITEM(MSG_ADVANCED_SETTINGS);
|
||||
SUBMENU(MSG_CHANGE_PASSWORD, screen_set_password);
|
||||
ACTION_ITEM(MSG_REMOVE_PASSWORD, []{ ui.save_previous_screen(); remove_password(); } );
|
||||
ACTION_ITEM(MSG_REMOVE_PASSWORD, []{ ui.push_current_screen(); remove_password(); } );
|
||||
#if ENABLED(EEPROM_SETTINGS)
|
||||
ACTION_ITEM(MSG_STORE_EEPROM, ui.store_settings);
|
||||
#endif
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user